<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"><meta name="Generator" content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:506138562;
        mso-list-type:hybrid;
        mso-list-template-ids:1496863692 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1
        {mso-list-id:918094673;
        mso-list-type:hybrid;
        mso-list-template-ids:-168242036 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:1391268703;
        mso-list-type:hybrid;
        mso-list-template-ids:-992309418 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3
        {mso-list-id:1967926727;
        mso-list-type:hybrid;
        mso-list-template-ids:-1032788384 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang="EN-US" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal">AMD has recently made a decision to supply AGESA as binary-only for future AGESA releases.  This decision seems to have caused some grief and disharmony within the coreboot community.  I would like to make a proposal that I hope satisfies everyone moving forward.</p><p class="MsoNormal"> </p><p class="MsoNormal">First some history:</p><p class="MsoNormal"> </p><p class="MsoNormal">The initial AMD releases to coreboot were not based on either AGESA or CIM-X.  Sometime after AMD started contributing AMD 64-bit processor support, someone realized that core libraries were available elsewhere in AMD to initialize the processor and chipset in a standard way (AGESA and CIMX).   Ultimately, that turned into the AGESA and CIM-X open-source postings in vendorcode.  AMD still develops AGESA for other (proprietary) purposes and relicenses and forks AGESA for new processors for coreboot.</p><p class="MsoNormal"> </p><p class="MsoNormal">To get to an open-source AGESA, there were meetings and rules put in place within AMD with the intent that AMD would never lose proprietary license or ownership of the trunk AGESA or CIM-X codebases resulting from the contribution.  The principal rules are that:</p><p class="MsoNormal"> </p><p class="MsoListParagraph" style><span style>1.<span style="font:7.0pt "Times New Roman"">       </span></span>No modifications derived from open-source AGESA ever go back into AMD’s codebase.</p><p class="MsoListParagraph" style><span style>2.<span style="font:7.0pt "Times New Roman"">       </span></span>Open-source AGESA always derives from a processor-specific fork of AGESA that is reviewed and edited to remove any proprietary code, identifiers, or concepts.</p><p class="MsoNormal"> </p><p class="MsoNormal">So AMD accepted that the process of releasing into open-source would be a very large and time-consuming task.   No matter how good the process, any automated pruning effort will depend on authors to add tags to code to identify what is proprietary and what is not.  Authors tend to make mistakes and therefore require review.  So they elected to keep it a manual process. </p><p class="MsoNormal"> </p><p class="MsoNormal">Jumping ahead to 2013:</p><p class="MsoNormal"> </p><p class="MsoNormal">AMD realized that the open-sourcing process they developed was awkward and required lots of developer and legal involvement.  The six month delay required to implement the “scrub” prevents AMD Embedded from capitalizing on the advertising and press excitement following the introduction of new parts. This delays commercial shipment of systems (and therefore chips) until well into the design cycle of the next processor.  Anyone that received early code was required to modify their application when the scrubbed code was eventually released.  And they were not allowed to release their product until after they incorporated the scrubbed code.</p><p class="MsoNormal"> </p><p class="MsoNormal">Please remember that AMD’s primary goal in open-source AGESA is to enable new platforms to sell more chips.</p><p class="MsoNormal"> </p><p class="MsoNormal">Binary PI was conceived with the sole intent of eliminating the delay caused by the scrub.  By donating AGESA as a binary instead of scrubbed open-source, coreboot becomes available much sooner in the lifecycle of a processor.  This is good for AMD and good for companies that want to use AMD’s chips. </p><p class="MsoNormal"> </p><p class="MsoNormal">There are downsides:</p><p class="MsoListParagraph" style><span style="font-family:Symbol"><span style>·<span style="font:7.0pt "Times New Roman"">         </span></span></span>The AGESA binary has to have a well-defined interface.  Normal mechanisms to work around interface deficiencies don’t work, so you have to work within the API.</p><p class="MsoListParagraph" style><span style="font-family:Symbol"><span style>·<span style="font:7.0pt "Times New Roman"">         </span></span></span>Since the same BLOB is available to everyone, the API must be as flexible as possible to accommodate varying needs.</p><p class="MsoListParagraph" style><span style="font-family:Symbol"><span style>·<span style="font:7.0pt "Times New Roman"">         </span></span></span>Because there is no scrub, the source must remain proprietary.</p><p class="MsoListParagraph" style><span style="font-family:Symbol"><span style>·<span style="font:7.0pt "Times New Roman"">         </span></span></span>There is less flexibility because you can’t change AGESA to change when, where, or how initialization functions occur.</p><p class="MsoListParagraph" style><span style="font-family:Symbol"><span style>·<span style="font:7.0pt "Times New Roman"">         </span></span></span>There may be a performance or size impact.  Binary PI currently runs exclusively from ROM and is not split between a ROM phase and a RAM phase.</p><p class="MsoNormal"> </p><p class="MsoNormal">The current binary PI implementation requires an Application Programming Interface (API) to insulate the interface from future changes.  This is the same AGESA API that has been open-sourced for several processor generations.  The API uses processor-specific structures as arguments and therefore must be compiled using header files that accompany the AGESA library releases.  Note that this differs from an Application Binary Interface (ABI).  I have maintained API compatibility between open-source AGESA and binary PI.  This is for two purposes:</p><p class="MsoListParagraph" style><span style>1.<span style="font:7.0pt "Times New Roman"">       </span></span>To allow early reference platform development using an integrated AGESA.  The code is easier to debug when it is all contained within one binary.</p><p class="MsoListParagraph" style><span style>2.<span style="font:7.0pt "Times New Roman"">       </span></span>In the hopes that there will be future open-source AGESA contributions from AMD late in the design cycle of a processor, well after binary PI is released. </p><p class="MsoNormal"> </p><p class="MsoNormal">Proposal:</p><p class="MsoNormal"> </p><p class="MsoNormal">There has been a request and changelist to split the AGESA wrappers:</p><p class="MsoListParagraph" style><span style>1.<span style="font:7.0pt "Times New Roman"">       </span></span>Slowly migrating open-source AGESA away from the published AGESA API for Llano (F12), Ontario (F14), Trinity (F15tn), Orochi (F15), and Kabini (F16kb).</p><p class="MsoListParagraph" style><span style>2.<span style="font:7.0pt "Times New Roman"">       </span></span>Creating new wrappers for binary PI-based processors, namely Bald Eagle (00630F01), and Steppe Eagle (00730F01).</p><p class="MsoNormal"> </p><p class="MsoNormal">The same wrappers, or at least wrapper structure, are shared by all of these platforms today.  Note that the API is completely contained with the 3rdparty/pi and src/vendorcode/amd subtree.  Code in src/mainboard, src/northbridge, src/southbridge, and src/cpu is “wrapper code” and fair game for modification within the coreboot community.</p><p class="MsoNormal"> </p><p class="MsoNormal">Instead of splitting the wrappers this way, I would propose forking open-source AGESA within the coreboot tree.  Let’s COPY the existing vendorcode/amd/agesa into another subtree, maybe soc or devices, and rename it OSIFA (open software interface for AMD) or something similar.  Move or clone experimenter boards over to OSIFA.</p><p class="MsoNormal"> </p><p class="MsoNormal">Let’s leave commercial production boards alone (AMD, ASRock IMB-A180, some tyan, some supermicro, some HP, maybe a few more) using the existing src/…/agesa directories.  That leaves the interface stable for the boards AMD needs to demonstrate, allows AMD to continue donating AGESA with their existing interface,  yet still allows the community to improve on and reorganize OSIFA. </p><p class="MsoNormal"> </p><p class="MsoNormal">What do you think … ?</p></div></body></html>