{"id":4571,"date":"2020-03-21T15:26:34","date_gmt":"2020-03-21T22:26:34","guid":{"rendered":"https:\/\/www.flamingspork.com\/blog\/?p=4571"},"modified":"2020-03-21T15:27:34","modified_gmt":"2020-03-21T22:27:34","slug":"occ-and-sensors-on-the-raptor-blackbird-and-other-power9-systems","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2020\/03\/21\/occ-and-sensors-on-the-raptor-blackbird-and-other-power9-systems\/","title":{"rendered":"OCC and Sensors on the Raptor Blackbird (and other POWER9 systems)"},"content":{"rendered":"\n<p>This post we&#8217;re going to look at three different ways to look at various sensors in the <a href=\"https:\/\/www.raptorcs.com\/content\/base\/products.html\">Raptor Blackbird <\/a>system. The <a href=\"https:\/\/wiki.raptorcs.com\/wiki\/Blackbird\">Blackbird<\/a> is a single socket uATX board for the <a href=\"https:\/\/wiki.raptorcs.com\/wiki\/POWER9\">POWER9<\/a> processor. One advantage of the system is completely open source firmware, so you can (like I have): <a href=\"https:\/\/www.flamingspork.com\/blog\/2020\/03\/08\/yet-another-near-upstream-raptor-blackbird-firmware-build\/\">build your own firmware<\/a>. So, this is my Blackbird running my most recent firmware build (the BMC is running the <a href=\"https:\/\/wiki.raptorcs.com\/wiki\/Blackbird\/Firmware\">2.00 release from Raptor<\/a>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sensors over IPMI<\/h2>\n\n\n\n<p>One way to get the sensors is over IPMI. This can be done either in-band (as in, from the OS running on the blackbird), or over the network.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stewart@blackbird9$ sudo ipmitool sensor |head\nocc                      | na         | discrete   | na    | na        | na        | na        | na        | na        | na        \n occ0                     | 0x0        | discrete   | 0x0200| na        | na        | na        | na        | na        | na        \n occ1                     | 0x0        | discrete   | 0x0100| na        | na        | na        | na        | na        | na        \n p0_core0_temp            | na         |            | na    | na        | na        | na        | na        | na        | na        \n p0_core1_temp            | na         |            | na    | na        | na        | na        | na        | na        | na        \n p0_core2_temp            | na         |            | na    | na        | na        | na        | na        | na        | na        \n p0_core3_temp            | 38.000     | degrees C  | ok    | na        | -40.000   | na        | 78.000    | 90.000    | na        \n p0_core4_temp            | na         |            | na    | na        | na        | na        | na        | na        | na        \n p0_core5_temp            | 38.000     | degrees C  | ok    | na        | -40.000   | na        | 78.000    | 90.000    | na        \n p0_core6_temp            | na         |            | na    | na        | na        | na        | na        | na        | na    <\/pre>\n\n\n\n<p>It&#8217;s kind of annoying to read there, so standard unix tools to the rescue!<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">stewart@blackbird9$ sudo ipmitool sensor | cut -d '|' -f 1,2\n occ                      | na                                                                                                               \n occ0                     | 0x0                                                                                                              \n occ1                     | 0x0                                                                                                              \n p0_core0_temp            | na                                                                                                               \n p0_core1_temp            | na                                                                                                               \n p0_core2_temp            | na                                                                                                               \n p0_core3_temp            | 38.000                                                                                                           \n p0_core4_temp            | na          \n p0_core5_temp            | 38.000      \n p0_core6_temp            | na          \n p0_core7_temp            | 38.000      \n p0_core8_temp            | na          \n p0_core9_temp            | na          \n p0_core10_temp           | na          \n p0_core11_temp           | 37.000      \n p0_core12_temp           | na          \n p0_core13_temp           | na          \n p0_core14_temp           | na          \n p0_core15_temp           | 37.000      \n p0_core16_temp           | na          \n p0_core17_temp           | 37.000      \n p0_core18_temp           | na          \n p0_core19_temp           | 39.000      \n p0_core20_temp           | na          \n p0_core21_temp           | 39.000      \n p0_core22_temp           | na          \n p0_core23_temp           | na          \n p0_vdd_temp              | 40.000 \n dimm0_temp               | 35.000      \n dimm1_temp               | na          \n dimm2_temp               | na          \n dimm3_temp               | na          \n dimm4_temp               | 38.000      \n dimm5_temp               | na          \n dimm6_temp               | na          \n dimm7_temp               | na          \n dimm8_temp               | na          \n dimm9_temp               | na          \n dimm10_temp              | na          \n dimm11_temp              | na          \n dimm12_temp              | na          \n dimm13_temp              | na          \n dimm14_temp              | na          \n dimm15_temp              | na          \n fan0                     | 1200.000    \n fan1                     | 1100.000    \n fan2                     | 1000.000    \n p0_power                 | 33.000      \n p0_vdd_power             | 5.000       \n p0_vdn_power             | 9.000       \n cpu_1_ambient            | 30.600      \n pcie                     | 27.000      \n ambient                  | 26.000  <\/pre>\n\n\n\n<p>You can see that I have 3 fans, two DIMMs (although why it lists 16 possible DIMMs for a two DIMM slot board is a good question!), and eight CPU cores. More on why the layout of the CPU cores is the way it is in a future post.<\/p>\n\n\n\n<p>The code path for reading these sensors is interesting, it&#8217;s all from the BMC, so we&#8217;re having the OCC inside the P9 read things, which the BMC then reads, and then passes back to the P9. On the P9 itself, each sensor is a call all the way to firmware and back! In fact, we can look at it in perf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo perf record -g ipmitool sensor\n$ sudo perf report --no-children<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"674\" data-attachment-id=\"4572\" data-permalink=\"https:\/\/www.flamingspork.com\/blog\/2020\/03\/21\/occ-and-sensors-on-the-raptor-blackbird-and-other-power9-systems\/screenshot-from-2020-03-21-12-52-30\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2020\/03\/Screenshot-from-2020-03-21-12-52-30.png?fit=641%2C740&amp;ssl=1\" data-orig-size=\"641,740\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-from-2020-03-21-12-52-30\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2020\/03\/Screenshot-from-2020-03-21-12-52-30.png?fit=584%2C674&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2020\/03\/Screenshot-from-2020-03-21-12-52-30.png?resize=584%2C674&#038;ssl=1\" alt=\"\" class=\"wp-image-4572\" srcset=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2020\/03\/Screenshot-from-2020-03-21-12-52-30.png?w=641&amp;ssl=1 641w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2020\/03\/Screenshot-from-2020-03-21-12-52-30.png?resize=260%2C300&amp;ssl=1 260w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><figcaption>&#8220;ipmitool sensors&#8221; perf report<\/figcaption><\/figure>\n\n\n\n<p>What are the <code>0x300xxxxx<\/code> addresses? They&#8217;re the OPAL firmware (i.e. <a href=\"https:\/\/github.com\/open-power\/skiboot\/\">skiboot<\/a>). We can look up the symbols easily, as the firmware exposes them to the kernel, which then plonks it in sysfs:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&#91;stewart@blackbird9 ~]$ sudo head \/sys\/firmware\/opal\/symbol_map \n&#91;sudo] password for stewart: \n0000000000000000 R __builtin_kernel_end\n0000000000000000 R __builtin_kernel_start\n0000000000000000 T __head\n0000000000000000 T _start\n0000000000000010 T fdt_entry\n00000000000000f0 t boot_sem\n00000000000000f4 t boot_flag\n00000000000000f8 T attn_trigger\n00000000000000fc T hir_trigger\n0000000000000100 t sreset_vector<\/pre>\n\n\n\n<p>So we can easily look up exactly where this is:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[stewart@blackbird9 ~]$ sudo grep '18e.. ' \/sys\/firmware\/opal\/symbol_map \n 0000000000018e20 t .__try_lock.isra.0\n 0000000000018e68 t .add_lock_request<\/pre>\n\n\n\n<p>So we&#8217;re managing to spend a whole 12% of execution time spinning on a spinlock in firmware! The call stack of what&#8217;s going on in firmware isn&#8217;t so easy, but we can find the <a href=\"https:\/\/github.com\/open-power\/skiboot\/blob\/d0043ee22d0d9a0a65ac6781c4fd3bf69492ddc5\/hw\/bt.c#L558\"><code>bt_add_ipmi_msg<\/code><\/a> call there which is probably how everything starts:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[stewart@blackbird9 ~]$ sudo grep '516.. ' \/sys\/firmware\/opal\/symbol_map   0000000000051614 t .bt_add_ipmi_msg_head  0000000000051688 t .bt_add_ipmi_msg  00000000000516fc t .bt_poll<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">OCCTOOL<\/h2>\n\n\n\n<p>This is the most not-what-you&#8217;re-meant-to-use method of getting access to sensors! It&#8217;s using a debug tool for the OCC firmware! There&#8217;s a <a href=\"https:\/\/github.com\/open-power\/occ\/tree\/master\/src\/tools\">variety of tools in the OCC source repositiory<\/a>, and one of them (<code>occtoolp9<\/code>) can be used for a variety of things, one of which is getting sensor data out of the OCC.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ sudo .\/occtoolp9 -SL\n     Sensor Type: 0xFFFF\n Sensor Location: 0xFFFF\n     (only displaying non-zero sensors)\n Sending 0x53 command to OCC0 (via opal-prd)\u00e2\u20ac\u00a6\n   MFG Sub Cmd: 0x05  (List Sensors)\n   Num Sensors: 50\n     [ 1] GUID: 0x0000 \/ AMEintdur\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6.  Sample:     20  (0x0014)\n     [ 2] GUID: 0x0001 \/ AMESSdur0\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6.  Sample:      7  (0x0007)\n     [ 3] GUID: 0x0002 \/ AMESSdur1\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6.  Sample:      3  (0x0003)\n     [ 4] GUID: 0x0003 \/ AMESSdur2\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6.  Sample:     23  (0x0017)<\/pre>\n\n\n\n<p>The odd thing you&#8217;ll see is &#8220;via <code>opal-prd<\/code>&#8221; &#8211; and this is because it&#8217;s doing raw calls to the opal-prd binary to talk to the OCC firmware running things like &#8220;<code>opal-prd --expert-mode htmgt-passthru<\/code>&#8220;. Yeah, this isn&#8217;t a in-production thing :)<\/p>\n\n\n\n<p>Amazingly (and interestingly), this doesn&#8217;t go through host firmware in the way that an IPMI call will. There&#8217;s a full <a href=\"https:\/\/github.com\/open-power\/docs\/blob\/master\/occ\/OCC_P9_FW_Interfaces.pdf\">OCC\/Host firmware interface spec<\/a> to read. But it&#8217;s insanely inefficient way to monity sensors, a long bash script shelling out to a whole bunch of other processes&#8230; Think ~14.4 billion cycles versus ~367million cycles for the ipmitool option above.<\/p>\n\n\n\n<p>But there are some interesting sensors at the end of the list:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Sensor Details: (found 86 sensors, details only for Status of 0x00)                                                  \n     GUID Name             Sample     Min    Max U    Stat   Accum     UpdFreq   ScaleFactr   Loc   Type   \n....\n   0x014A MRDM0\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..    688       3  15015 GBs  0x00 0x0144AE6C 0x00001901 0x000080FB 0x0008 0x0200\n   0x014E MRDM4\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..    480       3  14739 GBs  0x00 0x01190930 0x00001901 0x000080FB 0x0008 0x0200\n   0x0156 MWRM0\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..    560       4  16605 GBs  0x00 0x014C61FD 0x00001901 0x000080FB 0x0008 0x0200\n   0x015A MWRM4\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..    360       4  16597 GBs  0x00 0x014AE231 0x00001901 0x000080FB 0x0008 0x0200<\/pre>\n\n\n\n<p>is that memory bandwidth? Well, if I run the STREAM benchmark in a loop and look again:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0x014A MRDM0\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..  15165       3  17994 GBs  0x00 0x0C133D6C 0x00001901 0x000080FB 0x0008 0x0200\n   0x014E MRDM4\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..  17145       3  18016 GBs  0x00 0x0BF501D6 0x00001901 0x000080FB 0x0008 0x0200\n   0x0156 MWRM0\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..   8063       4  24280 GBs  0x00 0x07C98B88 0x00001901 0x000080FB 0x0008 0x0200\n   0x015A MWRM4\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6\u00e2\u20ac\u00a6..   1138       4  24215 GBs  0x00 0x07CE82AF 0x00001901 0x000080FB 0x0008 0x0200<\/pre>\n\n\n\n<p>It looks like it! Are these exposed elsewhere? Well, another blog post at some point in the future is where I should look at that.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">lm-sensors<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">$ rpm -qf \/usr\/bin\/sensors\n lm_sensors-3.5.0-6.fc31.ppc64le<\/pre>\n\n\n\n<p>Ahhh, old faithful <code>lm-sensors<\/code>! Yep, a whole bunch of sensors are just exposed over the standard interface that we&#8217;ve been using since ISA was a thing.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[stewart@blackbird9 ~]$ sensors                                                                  \n ibmpowernv-isa-0000                                       \n Adapter: ISA adapter                                      \n Chip 0 Vdd Remote Sense:  +1.02 V  (lowest =  +0.72 V, highest =  +1.02 V)\n Chip 0 Vdn Remote Sense:  +0.67 V  (lowest =  +0.67 V, highest =  +0.67 V)\n Chip 0 Vdd:               +1.02 V  (lowest =  +0.73 V, highest =  +1.02 V)\n Chip 0 Vdn:               +0.68 V  (lowest =  +0.68 V, highest =  +0.68 V)\n Chip 0 Core 0:            +47.0\u00c2\u00b0C  (lowest = +25.0\u00c2\u00b0C, highest = +71.0\u00c2\u00b0C)            \n Chip 0 Core 4:            +47.0\u00c2\u00b0C  (lowest = +26.0\u00c2\u00b0C, highest = +66.0\u00c2\u00b0C)            \n Chip 0 Core 8:            +48.0\u00c2\u00b0C  (lowest = +27.0\u00c2\u00b0C, highest = +67.0\u00c2\u00b0C)            \n Chip 0 Core 12:           +48.0\u00c2\u00b0C  (lowest = +26.0\u00c2\u00b0C, highest = +67.0\u00c2\u00b0C)            \n Chip 0 Core 16:           +47.0\u00c2\u00b0C  (lowest = +25.0\u00c2\u00b0C, highest = +67.0\u00c2\u00b0C)                      \n Chip 0 Core 20:           +47.0\u00c2\u00b0C  (lowest = +26.0\u00c2\u00b0C, highest = +69.0\u00c2\u00b0C)            \n Chip 0 Core 24:           +48.0\u00c2\u00b0C  (lowest = +27.0\u00c2\u00b0C, highest = +67.0\u00c2\u00b0C)                     \n Chip 0 Core 28:           +51.0\u00c2\u00b0C  (lowest = +27.0\u00c2\u00b0C, highest = +64.0\u00c2\u00b0C)                     \n Chip 0 DIMM 0 :           +40.0\u00c2\u00b0C  (lowest = +34.0\u00c2\u00b0C, highest = +44.0\u00c2\u00b0C)                     \n Chip 0 DIMM 1 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)                     \n Chip 0 DIMM 2 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 3 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 4 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 5 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 6 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 7 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 8 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 9 :            +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 10 :           +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 11 :           +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 12 :          +43.0\u00c2\u00b0C  (lowest = +36.0\u00c2\u00b0C, highest = +47.0\u00c2\u00b0C)\n Chip 0 DIMM 13 :           +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 14 :           +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 DIMM 15 :           +0.0\u00c2\u00b0C  (lowest =  +0.0\u00c2\u00b0C, highest =  +0.0\u00c2\u00b0C)\n Chip 0 Nest:              +48.0\u00c2\u00b0C  (lowest = +27.0\u00c2\u00b0C, highest = +64.0\u00c2\u00b0C)\n Chip 0 VRM VDD:           +47.0\u00c2\u00b0C  (lowest = +39.0\u00c2\u00b0C, highest = +66.0\u00c2\u00b0C)\n Chip 0 :                  44.00 W  (lowest =  31.00 W, highest = 132.00 W)\n Chip 0 Vdd:               15.00 W  (lowest =   4.00 W, highest = 104.00 W)\n Chip 0 Vdn:               10.00 W  (lowest =   8.00 W, highest =  12.00 W)\n Chip 0 :                 227.11 kJ\n Chip 0 Vdd:               44.80 kJ\n Chip 0 Vdn:               58.80 kJ\n Chip 0 Vdd:              +21.50 A  (lowest =  +6.50 A, highest = +104.75 A)\n Chip 0 Vdn:              +14.88 A  (lowest = +12.63 A, highest = +18.88 A)<\/pre>\n\n\n\n<p>The best thing? It&#8217;s really quick! The hwmon interface is fast and efficient.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post we&#8217;re going to look at three different ways to look at various sensors in the Raptor Blackbird system. The Blackbird is a single socket uATX board for the POWER9 processor. One advantage of the system is completely open &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2020\/03\/21\/occ-and-sensors-on-the-raptor-blackbird-and-other-power9-systems\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1,588],"tags":[740,745,746,636,587,747,744],"class_list":["post-4571","post","type-post","status-publish","format-standard","hentry","category-general","category-opal","tag-blackbird","tag-ipmi","tag-lm-sensors","tag-opal","tag-openpower","tag-raptor","tag-sensors"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-1bJ","jetpack-related-posts":[{"id":4526,"url":"https:\/\/www.flamingspork.com\/blog\/2019\/12\/15\/are-you-fans-of-the-blackbird-speak-up-i-cant-hear-you-over-the-fan\/","url_meta":{"origin":4571,"position":0},"title":"Are you Fans of the Blackbird? Speak up, I can&#8217;t hear you over the fan.","author":"Stewart Smith","date":"2019-12-15","format":false,"excerpt":"So, as of yesterday, I started running a pretty-close-to-upstream op-build host firmware stack on my Blackbird. Notable yak-shaving has included: Update README.md for Fedora 31 build-deps because READMEs are importantSupport Python3 as default \/usr\/bin\/python (so I could compile it at all on Fedora 31)RaptorCS Blackbird support the actual minimal firmware\u2026","rel":"","context":"In &quot;cool gadgets&quot;","block_context":{"text":"cool gadgets","link":"https:\/\/www.flamingspork.com\/blog\/category\/cool-gadgets\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4508,"url":"https:\/\/www.flamingspork.com\/blog\/2019\/12\/10\/looking-at-the-state-of-blackbird-firmware\/","url_meta":{"origin":4571,"position":1},"title":"Looking at the state of Blackbird firmware","author":"Stewart Smith","date":"2019-12-10","format":false,"excerpt":"Having been somewhat involved in OpenPOWER firmware, I have a bunch of experience and opinions on maintaining firmware trees for products, what working with upstream looks like and all that. So, with my new Blackbird system I decided to take a bit of a look as to what the firmware\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4528,"url":"https:\/\/www.flamingspork.com\/blog\/2019\/12\/16\/a-close-to-upstream-firmware-build-for-the-raptor-blackbird\/","url_meta":{"origin":4571,"position":2},"title":"A close-to-upstream firmware build for the Raptor Blackbird","author":"Stewart Smith","date":"2019-12-16","format":false,"excerpt":"UPDATE: A newer version is available here It goes without saying that using this build is a At Your Own Risk and I make zero warranty. AFAIK it can't physically destroy your system. My GitHub op-build branch stewart-blackbird-v1 has all the changes built into this build (the VERSION displayed in\u2026","rel":"","context":"In &quot;cool gadgets&quot;","block_context":{"text":"cool gadgets","link":"https:\/\/www.flamingspork.com\/blog\/category\/cool-gadgets\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4544,"url":"https:\/\/www.flamingspork.com\/blog\/2020\/02\/01\/another-close-to-upstream-blackbird-firmware-build\/","url_meta":{"origin":4571,"position":3},"title":"Another close-to-upstream Blackbird Firmware Build","author":"Stewart Smith","date":"2020-02-01","format":false,"excerpt":"A few weeks ago (okay, close to six), I put up a firmware build for the Raptor Blackbird with close-to-upstream firmware (see here). Well, I've done another build! It's current op-build (as of this morning), but my branch with patches for the Raptor Blackbird. The skiboot patch is there, as\u2026","rel":"","context":"In &quot;OPAL&quot;","block_context":{"text":"OPAL","link":"https:\/\/www.flamingspork.com\/blog\/category\/opal\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4561,"url":"https:\/\/www.flamingspork.com\/blog\/2020\/03\/08\/yet-another-near-upstream-raptor-blackbird-firmware-build\/","url_meta":{"origin":4571,"position":4},"title":"Yet another near-upstream Raptor Blackbird firmware build","author":"Stewart Smith","date":"2020-03-08","format":false,"excerpt":"In what is coming a month occurance, I've put up yet another firmware build for the Raptor Blackbird with close-to-upstream firmware (see here and here for previous ones). Well, I\u00e2\u20ac\u2122ve done another build! It\u00e2\u20ac\u2122s current op-build (as of yesterday), but my branch with patches for the Raptor Blackbird. The skiboot\u2026","rel":"","context":"In &quot;General&quot;","block_context":{"text":"General","link":"https:\/\/www.flamingspork.com\/blog\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4617,"url":"https:\/\/www.flamingspork.com\/blog\/2020\/05\/25\/op-build-v2-5-firmware-for-the-raptor-blackbird\/","url_meta":{"origin":4571,"position":5},"title":"op-build v2.5 firmware for the Raptor Blackbird","author":"Stewart Smith","date":"2020-05-25","format":false,"excerpt":"Well, following on from my post where I excitedly pointed out that Raptor Blackbird support: all upstream in op-build v2.5, that means I can do another in my series of (close to) upstream Blackbird firmware builds. This time, the only difference from straight upstream op-build v2.5 is my fixes for\u2026","rel":"","context":"In &quot;powerpc&quot;","block_context":{"text":"powerpc","link":"https:\/\/www.flamingspork.com\/blog\/category\/powerpc\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/comments?post=4571"}],"version-history":[{"count":3,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4571\/revisions"}],"predecessor-version":[{"id":4578,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4571\/revisions\/4578"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=4571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=4571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=4571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}