<div dir="ltr">I'm also ok with text protobufs. My only request is that we do not use binary blobs or XML.<div><br></div><div>Here's one .json from Harvey, defining rules for libraries. It has some arrays, and shows the use of structure. Seems simple enough to me.</div><div><br></div><div>My assumption is that this would be parsed by a user level program, not firmware or kernel.</div><div><br></div><div>If you're going to pick a format, pick a simple one with lots of parser implementations in lots of languages and which is easy to read (I find this easy to read).</div><div><br></div><div><table class="inbox-inbox-highlight inbox-inbox-tab-size inbox-inbox-js-file-line-container" style="box-sizing:border-box;border-collapse:collapse;color:rgb(51,51,51);font-family:-apple-system,blinkmacsystemfont,"segoe ui",helvetica,arial,sans-serif,"apple color emoji","segoe ui emoji","segoe ui symbol";font-size:14px"><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box"><td id="inbox-inbox-LC1" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">{</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L2" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC2" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre"> <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>Libs<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span>: {</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L3" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC3" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">          <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>Include<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span>: [</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L4" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC4" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                       <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>/$ARCH/include/cflags.json<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span></td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L5" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC5" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">               ],</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L6" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC6" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>Oflags<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span>: [</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L7" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC7" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                        <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>-static<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span></td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L8" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC8" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">          ],</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L9" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC9" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>Post<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span>: [</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L10" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC10" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                        <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>rm -f *.o<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span></td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L11" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC11" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">              ],</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L12" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC12" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">              <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>Pre<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span>: [</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L13" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC13" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">                 <span class="inbox-inbox-pl-s" style="box-sizing:border-box;color:rgb(24,54,145)"><span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span>rm -f *.o *.tag.*<span class="inbox-inbox-pl-pds" style="box-sizing:border-box">"</span></span></td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L14" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC14" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">              ]</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L15" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC15" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">       }</td></tr><tr style="box-sizing:border-box"><td id="inbox-inbox-L16" class="inbox-inbox-blob-num inbox-inbox-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;line-height:20px;color:rgba(0,0,0,0.298039);text-align:right;white-space:nowrap;vertical-align:top;border-style:solid;border-color:rgb(238,238,238);border-width:0px 1px 0px 0px"></td><td id="inbox-inbox-LC16" class="inbox-inbox-blob-code inbox-inbox-blob-code-inner inbox-inbox-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;word-wrap:normal;white-space:pre">}


</td></tr></tbody></table></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 28, 2016 at 1:15 PM David Hendricks via coreboot <<a href="mailto:coreboot@coreboot.org">coreboot@coreboot.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg">On Mon, Nov 28, 2016 at 12:40 PM, Peter Stuge <span dir="ltr" class="gmail_msg"><<a href="mailto:peter@stuge.se" class="gmail_msg" target="_blank">peter@stuge.se</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_-3370033804072226483m_-3100000294629224675gmail- gmail_msg">David Hendricks via coreboot wrote:<br class="gmail_msg">
> On Sun, Nov 27, 2016 at 8:28 PM, ron minnich <<a href="mailto:rminnich@gmail.com" class="gmail_msg" target="_blank">rminnich@gmail.com</a>> wrote:<br class="gmail_msg">
</span><span class="m_-3370033804072226483m_-3100000294629224675gmail- gmail_msg">> > I like the idea of JSON file<br class="gmail_msg">
><br class="gmail_msg">
</span><span class="m_-3370033804072226483m_-3100000294629224675gmail- gmail_msg">> Now we're talkin' - A standardized data format that is human<br class="gmail_msg">
> readable/writeable that can be easily parsed and generated using<br class="gmail_msg">
> small libraries.<br class="gmail_msg">
<br class="gmail_msg">
</span>I agree with the concept as described by David, but strongly disagree<br class="gmail_msg">
with choosing JSON. I think we can and should do better than that.<br class="gmail_msg"></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">That was my initial reaction as well. But if you check out some examples it really doesn't seem bad especially if we restrict ourselves to a subset of JSON. Here's a simple example using key:value pairs (from <a href="http://www.w3schools.com/js/js_json_intro.asp" class="gmail_msg" target="_blank">http://www.w3schools.com/js/js_json_intro.asp</a>):</div><font face="monospace, monospace" class="gmail_msg">{"employees":[<br class="gmail_msg">    {"firstName":"John", "lastName":"Doe"},<br class="gmail_msg">    {"firstName":"Anna", "lastName":"Smith"},<br class="gmail_msg">    {"firstName":"Peter", "lastName":"Jones"}<br class="gmail_msg">]}</font><br class="gmail_msg"></div><div class="gmail_quote gmail_msg"><br class="gmail_msg"></div><div class="gmail_quote gmail_msg">The page for jsmn notes that it explicitly does not support "advanced" functionality that does not map well to C. I'm not sure exactly what this implies (presumably the above example is OK), but it seems worth investigating if it suits our needs and enables us to use existing standards and libraries.</div><div class="gmail_quote gmail_msg"><br class="gmail_msg"></div><div class="gmail_quote gmail_msg">Ron - If you get a chance, can you post a sample JSON file from u-root?</div><div class="gmail_quote gmail_msg"><br class="gmail_msg"></div><div class="gmail_quote gmail_msg"></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_-3370033804072226483m_-3100000294629224675gmail- gmail_msg">> given that CMOS might not exist on a particular platform<br class="gmail_msg">
> (especially in the non-x86 world)<br class="gmail_msg">
<br class="gmail_msg">
</span>Maybe no NVRAM, but surely there will be persistent storage on board?<br class="gmail_msg"></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">Implementation-defined. I'm sure it exists on some designs, but in general non-x86 board vendors don't add additional nonvolatile storage unless they really have a specific purpose for it. Even if they add a serial EEPROM or some such, it's not necessarily trivial to access like CMOS on x86 platforms. IMO the only persistent storage we can depend upon is the persistent storage that coreboot resides on. Everything else is nice to have but should not be a hard requirement.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I suppose this could be another parameter exposed in the config file in CBFS. For example, if a key "nonvolatile-storage" has value "cmos" then the tools know we need to look at cmos.layout and write boot device priority using CMOS-methods. We currently do something similar to this on ChromeOS devices to tell where verified boot data is stored (CMOS, embedded controller, SPI ROM, etc).</div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div>-- <br class="gmail_msg"><div class="m_-3370033804072226483m_-3100000294629224675gmail_signature gmail_msg">David Hendricks (dhendrix)<br class="gmail_msg">Systems Software Engineer, Google Inc.</div>
</div></div>
--<br class="gmail_msg">
coreboot mailing list: <a href="mailto:coreboot@coreboot.org" class="gmail_msg" target="_blank">coreboot@coreboot.org</a><br class="gmail_msg">
<a href="https://www.coreboot.org/mailman/listinfo/coreboot" rel="noreferrer" class="gmail_msg" target="_blank">https://www.coreboot.org/mailman/listinfo/coreboot</a></blockquote></div>