{"id":4345,"date":"2017-12-11T15:30:33","date_gmt":"2017-12-11T05:30:33","guid":{"rendered":"https:\/\/www.flamingspork.com\/blog\/?p=4345"},"modified":"2017-12-11T15:30:33","modified_gmt":"2017-12-11T05:30:33","slug":"a-simplified-view-of-openpower-firmware-development","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2017\/12\/11\/a-simplified-view-of-openpower-firmware-development\/","title":{"rendered":"A (simplified) view of OpenPOWER Firmware Development"},"content":{"rendered":"<p>I&#8217;ve been working on trying to better document the whole flow of code that goes into a build of firmware for an OpenPOWER machine. This is partially to help those not familiar with it get a better grasp of the sheer scale of what goes into that 32\/64MB of flash.<\/p>\n<p>I also wanted to convey the components that we heavily re-used from other Open Source projects, what parts are still &#8220;IBM internal&#8221; (as they relate to the open source workflow) and which bits are primarily contributed to by IBMers (at least at this point in time).<\/p>\n<p>As such, let&#8217;s start with the legend of the diagram:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4346\" data-permalink=\"https:\/\/www.flamingspork.com\/blog\/2017\/12\/11\/a-simplified-view-of-openpower-firmware-development\/devflow-legend\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?fit=833%2C251&amp;ssl=1\" data-orig-size=\"833,251\" 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=\"devflow-legend\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?fit=584%2C176&amp;ssl=1\" class=\"alignnone size-full wp-image-4346\" src=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?resize=584%2C176&#038;ssl=1\" alt=\"\" width=\"584\" height=\"176\" srcset=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?w=833&amp;ssl=1 833w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?resize=300%2C90&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?resize=768%2C231&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow-legend.png?resize=500%2C151&amp;ssl=1 500w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>Now, the diagram:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4347\" data-permalink=\"https:\/\/www.flamingspork.com\/blog\/2017\/12\/11\/a-simplified-view-of-openpower-firmware-development\/devflow\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?fit=6137%2C1571&amp;ssl=1\" data-orig-size=\"6137,1571\" 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=\"devflow\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?fit=584%2C149&amp;ssl=1\" class=\"alignnone size-large wp-image-4347\" src=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?resize=584%2C149&#038;ssl=1\" alt=\"Simplified development flow for OpenPOWER firmware\" width=\"584\" height=\"149\" srcset=\"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?resize=1024%2C262&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?resize=300%2C77&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?resize=768%2C197&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?resize=500%2C128&amp;ssl=1 500w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?w=1168&amp;ssl=1 1168w, https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2017\/12\/devflow.png?w=1752&amp;ssl=1 1752w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>The end thing that a user with a machine will download and apply (or that comes shipped with a box) is the purple &#8220;Installable Firmware Release&#8221; nodes (bottom center). In this diagram, there are 4 of them. One for POWER9 systems such as the just-announced <a href=\"https:\/\/www.ibm.com\/us-en\/marketplace\/power-systems-ac922\/details\">AC922<\/a> system (this is the &#8220;OP910 Release&#8221; node, which is the <a href=\"https:\/\/github.com\/open-power\/op-build\/blob\/master\/openpower\/configs\/witherspoon_defconfig\">witherspoon_defconfig<\/a> in the op-build tree); one for the p9dsu platform (<a href=\"https:\/\/github.com\/open-power\/op-build\/blob\/master\/openpower\/configs\/p9dsu_defconfig\">p9dsu_defconfig<\/a> in op-build) and one is for IBM FSP based systems such as the <a href=\"https:\/\/www-03.ibm.com\/systems\/power\/hardware\/s812l-s822l\/\">S812L and S822L<\/a> systems (or S812\/S822 in OPAL mode).<\/p>\n<p>There are more platforms out there, but this diagram is meant to be <strong>simplified.<\/strong> The key difference with the p9dsu platform is that this is produced by somebody other than IBM.<\/p>\n<p>All of these releases are based off the upstream <strong>op-build<\/strong> project, op-build is the light blue box in the center of the diagram. We do regular X.Y releases and sometimes do X.Y.Z releases. It&#8217;s primarily a pull request based workflow currently, so everything goes via a pull request. The op-build project brings together all the POWER specific firmware components (pretty much everything in every other light blue\/blue box) along with a Linux kernel and buildroot.<\/p>\n<p>The kernel and buildroot are the two big yellow boxes on the top right. Buildroot brings together a <strong>lot<\/strong> of open source components that are in our firmware image (including some power specific ones that we get through upstream buildroot).<\/p>\n<p>For Linux, this is a pretty simplified view of the process, but we primarily ship the stable tree (with maybe up to half a dozen patches).<\/p>\n<p>The skiboot and petitboot components both use a mailing list based workflow (similar to kernel) as well as X.Y and X.Y.Z releases (again, similar to the linux kernel).<\/p>\n<p>On the far left of the diagram, we have Hostboot, SBE and OCC. These are three firmware components that come from the traditional IBM POWER Firmware group, and are shared with the IBM non-OpenPOWER POWER systems (&#8220;traditional&#8221; POWER). These components have part of their code from from an (internal) repository called &#8220;ekb&#8221; which also goes into a (<strong>very<\/strong>) low level debug tool and the FSP based systems. There&#8217;s also an (internal) gerrit instance that&#8217;s the primary place where code review\/development discussions are for these components.<\/p>\n<p>In future posts, I&#8217;ll probably delve into more specifics of the current development process, and how we may try and change things for the better.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been working on trying to better document the whole flow of code that goes into a build of firmware for an OpenPOWER machine. This is partially to help those not familiar with it get a better grasp of the &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2017\/12\/11\/a-simplified-view-of-openpower-firmware-development\/\">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_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_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},"jetpack_post_was_ever_published":false},"categories":[76,570],"tags":[357,586,636,587],"class_list":["post-4345","post","type-post","status-publish","format-standard","hentry","category-code","category-ibm-work-et-al","tag-development","tag-firmware","tag-opal","tag-openpower"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-185","jetpack-related-posts":[{"id":4046,"url":"https:\/\/www.flamingspork.com\/blog\/2016\/04\/29\/openpower-opencompute-and-fostering-a-firmware-development-community\/","url_meta":{"origin":4345,"position":0},"title":"OpenPOWER, OpenCompute and fostering a firmware development community","author":"Stewart Smith","date":"2016-04-29","format":false,"excerpt":"Recently, I was at the OpenPOWER Summit in San Jose where people could see the Barreleye server (specs and design here, initial Rackspace blog post here). Barreleye is an OpenCompute form factor POWER8 server. It's not only an OpenPOWER machine, which means all of the host firmware is free and\u2026","rel":"","context":"In &quot;IBM&quot;","block_context":{"text":"IBM","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/ibm-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3775,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/07\/17\/openpower-firmware-up-on-github\/","url_meta":{"origin":4345,"position":1},"title":"OpenPower firmware up on github!","author":"Stewart Smith","date":"2014-07-17","format":false,"excerpt":"With the whole OpenPower thing, a lot of low level firmware is being open sourced, which is really exciting for the platform - the less proprietary code sitting in memory the better in my books. If you go to https:\/\/github.com\/open-power you'll see code for a bunch of the low level\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":4170,"url":"https:\/\/www.flamingspork.com\/blog\/2016\/09\/22\/compiling-your-own-firmware-for-barreleye-opencompute-openpower-system\/","url_meta":{"origin":4345,"position":2},"title":"Compiling your own firmware for Barreleye (OpenCompute OpenPOWER system)","author":"Stewart Smith","date":"2016-09-22","format":false,"excerpt":"Aaron Sullivan announced on the Rackspace Blog that you can now get your own Barreleye system! What's great is that the code for the Barreleye platform is upstream in the op-build project, which means you can build your own firmware for them (just like garrison, the \"IBM S822LC for HPC\"\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":4166,"url":"https:\/\/www.flamingspork.com\/blog\/2016\/09\/12\/compiling-your-own-firmware-for-the-s822lc-for-hpc\/","url_meta":{"origin":4345,"position":3},"title":"Compiling your own firmware for the S822LC for HPC","author":"Stewart Smith","date":"2016-09-12","format":false,"excerpt":"IBM (my employer) recently announced\u00c2\u00a0 the new S822LC for HPC POWER8+NVLINK NVIDIA P100 GPUs server (press release, IBM Systems Blog, The Register). The \"For HPC\" suffix on the model number is significant, as the S822LC is a different machine. What makes the \"for HPC\" variant different is that the POWER8\u2026","rel":"","context":"In &quot;IBM&quot;","block_context":{"text":"IBM","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/ibm-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3820,"url":"https:\/\/www.flamingspork.com\/blog\/2014\/10\/11\/tyan-openpower\/","url_meta":{"origin":4345,"position":4},"title":"Tyan OpenPower","author":"Stewart Smith","date":"2014-10-11","format":false,"excerpt":"Good news everyone! Tyan has announced the availability of their first OpenPOWER system! They call this a Customer Reference System, which means it's an excellent machine to start poking at OpenPower and POWER8 (or deploying applications on). Because it's an OpenPower machine, it runs the open source Open Power firmware\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":3940,"url":"https:\/\/www.flamingspork.com\/blog\/2015\/02\/03\/building-openpower-firmware-for-use-in-power8-simulator\/","url_meta":{"origin":4345,"position":5},"title":"Building OpenPower firmware for use in POWER8 Simulator","author":"Stewart Smith","date":"2015-02-03","format":false,"excerpt":"Previously, I blogged on how to Run skiboot (OPAL) on the POWER8 Simulator. If you want to build the full Open Power firmware environment, including the Petitboot bootloader and kernel, you can now do so! My pull request for an op-build target for the simulator has been merged, so you\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":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4345","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=4345"}],"version-history":[{"count":1,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4345\/revisions"}],"predecessor-version":[{"id":4348,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/4345\/revisions\/4348"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=4345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=4345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=4345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}