<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Embedded Linux Conference (ELC) | Academic OSS ELC</title><link>https://academic-oss-elc.netlify.app/tags/embedded-linux-conference-elc/</link><atom:link href="https://academic-oss-elc.netlify.app/tags/embedded-linux-conference-elc/index.xml" rel="self" type="application/rss+xml"/><description>Embedded Linux Conference (ELC)</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><lastBuildDate>Wed, 01 Jul 2020 00:00:00 +0000</lastBuildDate><image><url>https://academic-oss-elc.netlify.app/images/icon_hu0b7a4cb9992c9ac0e91bd28ffd38dd00_9727_512x512_fill_lanczos_center_2.png</url><title>Embedded Linux Conference (ELC)</title><link>https://academic-oss-elc.netlify.app/tags/embedded-linux-conference-elc/</link></image><item><title>Reproducible Builds and Hash Equivalence in the Yocto Project</title><link>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/reproducible-builds-and-hash-equivalence-in-the-yocto-project-joshua-watt-garmin/</link><pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate><guid>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/reproducible-builds-and-hash-equivalence-in-the-yocto-project-joshua-watt-garmin/</guid><description>&lt;blockquote>
&lt;p>As embedded Linux devices get more complex, many questions arise about the process of constructing these systems and how it can be improved. Can these complex systems be built more efficiently to reduce development time? How can developers be assured that these systems can be built reproducibly to ensure software supply chain integrity? Joshua will highlight two new features in the latest release of the Yocto project specifically designed to address these questions. The first feature is hash equivalence which reduces build times by collectively detecting when tasks have rebuilt unnecessarily and preventing rebuilds of downstream tasks. Joshua will explain how this feature works, how to apply it to your own projects, and what to expect when you do. The second feature is build reproducibility testing, which ensures that the project has binary identical outputs from one build to the next. Joshua will describe how these tests work, what they currently cover within the project, and how to enable them for your own projects. Taken together, these features improve the Yocto project’s unique ability to effectively construct complex Linux embedded systems that are cost effective and secure.&lt;/p>
&lt;/blockquote>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://reproducible-builds.org/">reproducible-builds&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="runqueue">RunQueue&lt;/h3>
&lt;p>MIA&lt;/p>
&lt;h3 id="runqueue-with-hash-equivalence">RunQueue with Hash Equivalence&lt;/h3>
&lt;ul>
&lt;li>Now each task also has &lt;code>unihash&lt;/code>&lt;/li>
&lt;li>breaks task hash from it&amp;rsquo;s upstream&lt;/li>
&lt;li>&lt;code>unihash&lt;/code> is &lt;code>tashhash&lt;/code> by default.&lt;/li>
&lt;li>&lt;code>outhash&lt;/code> is calculated. Then stored in &lt;code>hashserver&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Trickle down effect&lt;/p>
&lt;ul>
&lt;li>all downstream tasks will still have &lt;code>taskhash&lt;/code> updated.&lt;/li>
&lt;li>if it&amp;rsquo;s a trivial task we would like not to have to rebuild the downstream tasks.&lt;/li>
&lt;li>if the &lt;code>outhash&lt;/code> is the same even if the &lt;code>taskhash&lt;/code> changed, then the hashserver will set &lt;code>unihash&lt;/code> to a certain value
&lt;ul>
&lt;li>Now this &lt;code>unihash&lt;/code> propagates down to downstream tasks.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="recipe-updates">Recipe Updates&lt;/h3>
&lt;p>Which updates work well with this hash equivalence server?&lt;/p>
&lt;ul>
&lt;li>Library updates &amp;amp; CVE Fixes&lt;/li>
&lt;li>Native tool updates&lt;/li>
&lt;/ul>
&lt;p>Output Hash Calc&lt;/p>
&lt;ul>
&lt;li>Checksum of all files and metadata that goes into an sstate object&lt;/li>
&lt;li>signature files can be found in depsig&lt;/li>
&lt;/ul>
&lt;p>Hash Equivalence Server&lt;/p>
&lt;ul>
&lt;li>Reference impl in bitbake
&lt;ul>
&lt;li>&lt;code>BB_HASHSERVE = &amp;quot;auto&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>can be shared between multiple clients
&lt;ul>
&lt;li>Specify server with BB_HASHSERVER&lt;/li>
&lt;li>Only makes sense if you are sharing SSTATE_CACHE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Debugging Hash Equiv.&lt;/p>
&lt;ul>
&lt;li>Can configure logging in &lt;code>local.conf&lt;/code>
&lt;ul>
&lt;li>&lt;code>BB_LOGCONFG = &amp;quot;logconfig.json&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Future Improvements&lt;/p>
&lt;ul>
&lt;li>Read-only hash server for CI centered workflows
&lt;ul>
&lt;li>&amp;ldquo;read-only&amp;rdquo; flag for the client&lt;/li>
&lt;li>&amp;ldquo;read-mostly&amp;rdquo; flag for the client&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>better hash equivalence database introspection tools&lt;/li>
&lt;/ul>
&lt;h2 id="reproducable-builds">Reproducable Builds&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://reproducible-builds.org/">https://reproducible-builds.org/&lt;/a>&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>Imrpove Hash Equiv. effectiveness&lt;/li>
&lt;li>Code archival&lt;/li>
&lt;li>Software supply chain
&lt;ol>
&lt;li>verify toolchain is not comprising your target&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;h3 id="build-flow">Build FLow&lt;/h3>
&lt;ul>
&lt;li>tool builds almost all the tools it needs&lt;/li>
&lt;li>compile native tools from source&lt;/li>
&lt;/ul>
&lt;h3 id="reproducibility-qa-test">Reproducibility QA Test&lt;/h3>
&lt;ul>
&lt;li>reproducible build
&lt;ul>
&lt;li>available since 3.0 (zeus) release&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>QA Test&lt;/p>
&lt;ul>
&lt;li>Does an &amp;lsquo;A&amp;rsquo; and &amp;lsquo;B&amp;rsquo; build
&lt;ul>
&lt;li>A uses sstate&lt;/li>
&lt;li>B from scratch&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>test images
&lt;ul>
&lt;li>core-image-minimal&lt;/li>
&lt;li>core-image-full-cmdline&lt;/li>
&lt;li>core-image-sato&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>test packages formats
&lt;ul>
&lt;li>deb&lt;/li>
&lt;li>ipk&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>What causes reproducibility issues?&lt;/p>
&lt;ul>
&lt;li>build path differences&lt;/li>
&lt;li>timestamp differences&lt;/li>
&lt;li>host differences
&lt;ul>
&lt;li>consider using docker container to reduce issues&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>diffoscope&lt;/p>
&lt;ul>
&lt;li>report non-reproducible packages in browsable HTML&lt;/li>
&lt;li>supports diff inside of archive files
&lt;ul>
&lt;li>packages (deb, ipks)&lt;/li>
&lt;li>archives (tar, tar.xz, etc)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="future-imrpovements">Future Imrpovements&lt;/h3>
&lt;p>NOTE: exttool-sdk provides all the tools required to rebuild&lt;/p>
&lt;ul>
&lt;li>test more packages
&lt;ul>
&lt;li>SDK images&lt;/li>
&lt;li>sato images&lt;/li>
&lt;li>world images&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>test rpm packages&lt;/li>
&lt;li>test final rootfs images&lt;/li>
&lt;li>test other deployed objectstest native tools&lt;/li>
&lt;li>test more architectures
&lt;ul>
&lt;li>Currently only tests x86-64&lt;/li>
&lt;li>AArch64 would be the highest priority&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>reproducible-builds.org recomended these things
&lt;ul>
&lt;li>Use DisorderFS to test for file system ordering non-reproducibility&lt;/li>
&lt;li>Use libfaketime to do proper timestamp testing
&lt;ul>
&lt;li>psuedo library needs adjustments&lt;/li>
&lt;li>provides fake timestamps&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="conclusions">Conclusions&lt;/h2>
&lt;h3 id="community">Community&lt;/h3>
&lt;ul>
&lt;li>Freenode IRC
&lt;ul>
&lt;li>#yocto&lt;/li>
&lt;li>#oe&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Monthly virtual planning meeting
&lt;ul>
&lt;li>First Tuesday of each month at 8:00 AM Pacific Time&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Bug triage
&lt;ul>
&lt;li>Thursday at 7:30&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contact">Contact&lt;/h3>
&lt;ul>
&lt;li>JPEWhacker@gmail&lt;/li>
&lt;li>&lt;a href="mailto:Joshua.Watt@Garmin.com">Joshua.Watt@Garmin.com&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="questions">Questions&lt;/h3>
&lt;p>QA with Speaker&lt;/p>
&lt;ul>
&lt;li>restoring from sstate is called set-scene?
&lt;ul>
&lt;li>Yes, bitbake actually executes a task called do_populate_sysroot_setscene in place of of do_populate_sysroot to do the actual restoring from setsecene&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Is the hash server part of the sstate cache?
&lt;ul>
&lt;li>No. It depends on the sstate cache contents (as I&amp;rsquo;ll cover in a bit), but it&amp;rsquo;s a separate entity.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Will the uni-hash always stay as the first &amp;lsquo;equivalent&amp;rsquo; task-hask?
&lt;ul>
&lt;li>The hash equivalence server currently uses the oldest reported hash as the &amp;ldquo;canonical&amp;rdquo; unihash, but the decision is internal to the server, so other things could be done.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>What if a recipe doesn&amp;rsquo;t change it all but only a referenced file (using SRC_URI) which is copied by the recipe into the roots?
&lt;ul>
&lt;li>hash equivalence is based on the output of sstate tasks, so if the file changes sstate output, then it won&amp;rsquo;t be equivalent, but if the state output is the same, than it will be equivalent.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>This is true for any of the things that go into a tasks hash (files, variables, etc).
&lt;ul>
&lt;li>how does hash equivalence work in a multiconfig scenario when building for both arm32 and aarch64?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Can you elaborate?
&lt;ul>
&lt;li>Can the path for your own tests be in a location outside of the poky repo?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Yes. In fact, OE&amp;rsquo;s QA test core will look in those paths in any layer, so you can simply drop the file in that path relative to your own layer root and it will find it.
&lt;ul>
&lt;li>Can you restate the reproducobilty project that recommend DisorderFS and Libfaketime?
reproducible-builds.org, and it&amp;rsquo;s on my references slide&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>My Questions&lt;/p>
&lt;ul>
&lt;li>Can you comment on &amp;lsquo;universal/&amp;rsquo; and on &amp;lsquo;uninative&amp;rsquo; with respect to sstate?
&lt;ul>
&lt;li>uninative provides consistent native tools. allows you to use the same tools&lt;/li>
&lt;li>really &amp;ldquo;light&amp;rdquo; container&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Notes&lt;/p>
&lt;ul>
&lt;li>Paths encoded in dwarf symbols in debug symbols becomes problems&lt;/li>
&lt;/ul></description></item><item><title>Finding Sources of Latency on your Linux System</title><link>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/finding-sources-of-latency-on-your-linux-system-steven-rostedt-vmware/</link><pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate><guid>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/finding-sources-of-latency-on-your-linux-system-steven-rostedt-vmware/</guid><description>&lt;blockquote>
&lt;p>In today&amp;rsquo;s computer systems the level of complexity has risen such that when a task or response to an event takes longer than expected, it is not easy knowing what the culprit is. The Linux operating system contains several utilities that allows a user to see where things may be held up. This talk will cover many of these utilities and briefly explain how to use them. From the hardware latency detector to the latency tracers. It will also discuss the new synthetic event interface that allows users to create a histogram on the time it takes any two events to occur.&lt;/p>
&lt;p>I have previously discussed the latency tracers but they are soon to be obsolete, and the new synthetic event interface will be replacing them. There is still a lot more development going on with the synthetic events and this talk will briefly go over some of the new features that are yet to arrive.&lt;/p>
&lt;/blockquote>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Latency from Hardware&lt;/p>
&lt;ul>
&lt;li>System Mangement Interrupt (SMI)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Cache miss&lt;/p>
&lt;/li>
&lt;li>
&lt;p>branch prediction&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Hyper-threading&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Hardware Latency detector (HWLAT_TRACER)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>fedora 31 not debian&lt;/p>
&lt;/li>
&lt;li>
&lt;p>tracefs&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Measuring latency from interrupts&lt;/p></description></item><item><title>Linux Stateless Video Decoder Support</title><link>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/linux-stateless-video-decoder-support-nicolas-dufresne-collabora/</link><pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate><guid>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/linux-stateless-video-decoder-support-nicolas-dufresne-collabora/</guid><description>&lt;blockquote>
&lt;p>While it has been under development for years, the support for video CODEC accelerators has gain a lot of traction in past year. A formal specification has now been merge into Linux Media subsystem and staging control APIs and drivers now exist. This allow for blob free HW accelerated decoding on popular SoC like Allwinner, i.MX8 and Rockchip.&lt;/p>
&lt;p>In this talk, Nicolas will give an overview of the decoding process using such hardware accelerators along with an overview of the user space API and how it&amp;rsquo;s used within multimedia frameworks. Nicolas will also explain the relation between this and accelerators attached to modern GPUs. This presentation would not be complete without mentioning the development of FFMPEG and GStreamer native support and their major role in the development of the the new Open Source drivers.&lt;/p>
&lt;p>This talk is addressed to multimedia enthusiasts and developers curious about video decoding and the upstream effort effort to make that available to users.&lt;/p>
&lt;/blockquote>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;h2 id="state-full-decoder">State-full Decoder&lt;/h2>
&lt;p>Begining of Linux Codecs&lt;/p>
&lt;p>What is state-full?&lt;/p>
&lt;ul>
&lt;li>stateful is a blackbox&lt;/li>
&lt;li>blackbox gets bitstream&lt;/li>
&lt;/ul>
&lt;h3 id="v4l2-m2m">V4L2 M2M&lt;/h3>
&lt;pre>&lt;code class="language-none">output -&amp;gt; VPU -&amp;gt; capture
&lt;/code>&lt;/pre>
&lt;ul>
&lt;li>V4L2 output queue is used for the bitstream&lt;/li>
&lt;li>capture queue is used for the decoded pictures&lt;/li>
&lt;li>capability to seek and end stream&lt;/li>
&lt;/ul>
&lt;h3 id="procons">Pro/cons&lt;/h3>
&lt;ul>
&lt;li>pro: minimal per codec code needed&lt;/li>
&lt;li>con: require a firmware&lt;/li>
&lt;li>con: harder to multiplex&lt;/li>
&lt;/ul>
&lt;p>CODA Driver&lt;/p>
&lt;ul>
&lt;li>Enabling iMX51 and iMX6&lt;/li>
&lt;li>reversed enginerring from imx binary blobs&lt;/li>
&lt;/ul>
&lt;h3 id="begining-of-state-less">Begining of State-Less&lt;/h3>
&lt;p>2015&lt;/p>
&lt;ul>
&lt;li>Rockchip&lt;/li>
&lt;li>new type of CODEC hardware&lt;/li>
&lt;li>Rockchip VDPU&lt;/li>
&lt;/ul>
&lt;p>What is State-Less&lt;/p>
&lt;ul>
&lt;li>
&lt;p>no processor&lt;/p>
&lt;/li>
&lt;li>
&lt;p>expose &amp;ldquo;accelarators&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;ol>
&lt;li>inputs:&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>reference&lt;/li>
&lt;li>bitstream&lt;/li>
&lt;li>parameters&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;ol start="2">
&lt;li>accerator&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;ol start="3">
&lt;li>outputs&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>pictures&lt;/li>
&lt;li>may not be in order&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>What are GPU?&lt;/p>
&lt;ul>
&lt;li>Crafting command stream is HW specific&lt;/li>
&lt;li>only implement in userspace drivers (mesa)&lt;/li>
&lt;li>commands are schedule by the GPU driver&lt;/li>
&lt;li>multiple GPU hardware in the same application remains tedius&lt;/li>
&lt;/ul>
&lt;p>This is not what google did!&lt;/p>
&lt;h3 id="v4l2-m2m--request-2015">V4L2 M2M + Request (2015)&lt;/h3>
&lt;p>Instead, extend stateless: V4L2 M2M + Request&lt;/p>
&lt;p>Added components&lt;/p>
&lt;ul>
&lt;li>
&lt;p>CODEC Controls&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Request&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Topology&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Request API&lt;/p>
&lt;ul>
&lt;li>way to queue parameters, controls, and bitstream buffers&lt;/li>
&lt;li>added to media controller API&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h264">H.264&lt;/h3>
&lt;ul>
&lt;li>NALU Sequence
&lt;ul>
&lt;li>SPS, PPS, IDR Slice, P Slice, B Slice&lt;/li>
&lt;li>P previous decoded pictures&lt;/li>
&lt;li>both past and future references&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Annex B NALU
&lt;ul>
&lt;li>Start-Code&lt;/li>
&lt;li>HDR, Paylod&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>AVCc NALU
&lt;ul>
&lt;li>Size&lt;/li>
&lt;li>HDR, Payload&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="decoding-process">Decoding Process&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>MIA&amp;hellip; Missed one slide&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Fill SPS/ PPS, Decode Parameters, Slice parameters&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Modify reference list&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Decode the slide/frame&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Do DPB management as per spec&lt;/p>
&lt;ul>
&lt;li>Display Picture management&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Output frames that could be re-ordered&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="v4l2">V4L2&lt;/h3>
&lt;ul>
&lt;li>Allocate a Request (an FD)&lt;/li>
&lt;li>set per frame&lt;/li>
&lt;li>queue a v4l2_buffer&lt;/li>
&lt;li>queue the request&lt;/li>
&lt;li>poll the request FD for completion&lt;/li>
&lt;/ul>
&lt;h3 id="continue-in-time">Continue in time&lt;/h3>
&lt;p>MediaTek VPU (State-full)&lt;/p>
&lt;ul>
&lt;li>tiled output only (requires HW converter)&lt;/li>
&lt;/ul>
&lt;p>Qualcomm Venus&lt;/p>
&lt;ul>
&lt;li>Stateful&lt;/li>
&lt;li>lots of CODECS&lt;/li>
&lt;/ul>
&lt;p>Upstreaming Stalled&lt;/p>
&lt;ul>
&lt;li>Could not settle on the Request/Job API&lt;/li>
&lt;li>Low knowledge of CODEC decoing process by the linux-media maintainers&lt;/li>
&lt;li>only one hardware to test the API design (Only rockchip)&lt;/li>
&lt;li>No formal specific (not that state-full CODEC had one either)&lt;/li>
&lt;/ul>
&lt;h3 id="allwinner-vpu-support-kickstarter-by-bootlin-2018">Allwinner VPU support Kickstarter by Bootlin (2018)&lt;/h3>
&lt;ul>
&lt;li>Request API is finalized&lt;/li>
&lt;li>MPEG2 Support in Staging&lt;/li>
&lt;li>H.264 support was progressing (but only sliced based)&lt;/li>
&lt;li>reverse engineered from binary userspace&lt;/li>
&lt;li>VAAPI userspace drivers&lt;/li>
&lt;/ul>
&lt;p>2019&lt;/p>
&lt;ul>
&lt;li>formal specification was merged&lt;/li>
&lt;li>RK3288 driver was mainlined&lt;/li>
&lt;li>H264, VP8, HEVC uAPI added as staging control API&lt;/li>
&lt;li>RK3288 driver was renamed?&lt;/li>
&lt;/ul>
&lt;p>The Hantro Driver&lt;/p>
&lt;ul>
&lt;li>I.MX8M Quad, using Hantro G1/G2&lt;/li>
&lt;li>Registry compatible with the RK3288&lt;/li>
&lt;li>Give email and you get specification&lt;/li>
&lt;/ul>
&lt;p>Hantro Company&lt;/p>
&lt;ul>
&lt;li>Hantro Visibility Better&lt;/li>
&lt;li>on2 technology&lt;/li>
&lt;li>Google
&lt;ul>
&lt;li>VP8 and VP9 royalty free&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>VeriSilicon&lt;/li>
&lt;/ul>
&lt;p>Other story of API rename&lt;/p>
&lt;ul>
&lt;li>stmmac is an ethernet driver, that was thought to be STM design&lt;/li>
&lt;li>later found to be DesignWare design, shared across numerous SoC&lt;/li>
&lt;li>Since API was released it was unable to be renamed&lt;/li>
&lt;/ul>
&lt;p>Testing and Fixing&lt;/p>
&lt;ul>
&lt;li>LibreELEC - just enough OS for KODI
&lt;ul>
&lt;li>FFMPEG support&lt;/li>
&lt;li>bug fixing&lt;/li>
&lt;li>interlaced Content Support&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>2020&lt;/p>
&lt;ul>
&lt;li>RK3399 JPEG, MPEG2, H.264, and VP9 support&lt;/li>
&lt;li>Start having base class for Stateless
&lt;ul>
&lt;li>DXVA2 and NVDEC support&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>VA V4L2 Request driver was abandoned&lt;/li>
&lt;/ul>
&lt;h2 id="demo">demo&lt;/h2>
&lt;ul>
&lt;li>linux kernel 5.7rc2&lt;/li>
&lt;li>gstreamer has tool called &amp;lsquo;gst-build&amp;rsquo; built on mesin
&lt;ul>
&lt;li>allow you to run plugin&lt;/li>
&lt;li>gst-play-1.0&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>video layers are an overlay&lt;/li>
&lt;li>prerolling.&lt;/li>
&lt;li>three different streams&lt;/li>
&lt;li>one two iMx8&lt;/li>
&lt;/ul>
&lt;h2 id="questions">Questions&lt;/h2>
&lt;ul>
&lt;li>performance stateless vs state-full
&lt;ul>
&lt;li>have to wake up processor more&lt;/li>
&lt;li>more control over queuing&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>converting them to state-less is complex&lt;/li>
&lt;/ul></description></item><item><title>Robot Operating System (ROS) 2 - How Open Source Software and Linux is Powering the Next Generation of Robotics</title><link>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/robot-operating-system-ros-2-how-open-source-software-and-linux-is-powering-the-next-generation-of-robotics-katherine-scott-open-robotics/</link><pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate><guid>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/robot-operating-system-ros-2-how-open-source-software-and-linux-is-powering-the-next-generation-of-robotics-katherine-scott-open-robotics/</guid><description>&lt;h2 id="robot-operating-system-ros-2---how-open-source-software-and-linux-is-powering-the-next-generation-of-robotics">Robot Operating System (ROS) 2 - How Open Source Software and Linux is Powering the Next Generation of Robotics&lt;/h2>
&lt;ul>
&lt;li>Katherine Scott, Open Robotics&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Robot Operating System (ROS) is a set of mature free and open source software packages used by the robotics community to program robots. Recently ROS had its first major version upgrade in a decade to ROS 2. This new version introduces a number of changes and new features, many of which simplify the development process and allow users to build virtual robots without ever touching a piece of hardware. ROS 2 is the version of ROS that supports Python 3 out of the box and has new additions that allow for high-fidelity simulations. Simulation makes learning advanced robotics topics more accessible, as you no longer need to outfit a robotics lab and you can simulate cutting edge hardware for free. In this talk we&amp;rsquo;ll cover the state of the open source robotics ecosystem and cover the changes made in ROS 2 to improve its simplicity, stability, safety, and security. These features, along with enhanced embedded hardware support, are helping ROS become the de facto standard for the developers of autonomous vehicles, drones, industrial, and agricultural robots. This talk will give the Linux community and update on ROS ecosystem and a starting point for learning how to use it.&lt;/p>
&lt;/blockquote>
&lt;h2 id="notes">Notes&lt;/h2>
&lt;ul>
&lt;li>ROS is a lyer on top of Linux for robots&lt;/li>
&lt;li>metrics.ros.org&lt;/li>
&lt;/ul>
&lt;h3 id="windows">Windows&lt;/h3>
&lt;ul>
&lt;li>works on Windows&lt;/li>
&lt;li>vscode&lt;/li>
&lt;/ul>
&lt;h3 id="intro">Intro&lt;/h3>
&lt;h4 id="software-before-times">Software before times&lt;/h4>
&lt;ul>
&lt;li>research grade&lt;/li>
&lt;li>proprietary&lt;/li>
&lt;li>works on Windows 95&lt;/li>
&lt;li>system integrators&lt;/li>
&lt;li>vendors&lt;/li>
&lt;li>bespoke&lt;/li>
&lt;li>hardware controllers&lt;/li>
&lt;li>Feed forwards&lt;/li>
&lt;/ul>
&lt;p>Catalyst&lt;/p>
&lt;ul>
&lt;li>2004 competition for autonomous vehical&lt;/li>
&lt;/ul>
&lt;p>Input to innovation&lt;/p>
&lt;ul>
&lt;li>flexible robots&lt;/li>
&lt;li>IPO&lt;/li>
&lt;li>FOSS&lt;/li>
&lt;li>Willow Garage - 2007 Poof FOOS for robots&lt;/li>
&lt;/ul>
&lt;p>Three projects results&lt;/p>
&lt;ul>
&lt;li>opencv&lt;/li>
&lt;li>pcl&lt;/li>
&lt;li>ROS&lt;/li>
&lt;/ul>
&lt;p>Two Robots born&lt;/p>
&lt;ul>
&lt;li>Willow: Shared World Class Research&lt;/li>
&lt;li>2013 Willow Folders but OS lives on&lt;/li>
&lt;/ul>
&lt;p>Ethos of Global Research Community&lt;/p>
&lt;ul>
&lt;li>Small, Simple, Composable Utilities&lt;/li>
&lt;li>Don&amp;rsquo;t Reivent the Wheel&lt;/li>
&lt;li>Non-Exclusive (polyglot, packagin infrastructure)&lt;/li>
&lt;li>Inclusive (in addition to, not in place of)&lt;/li>
&lt;li>Freedom&lt;/li>
&lt;/ul>
&lt;p>Out of Willow was born:&lt;/p>
&lt;ul>
&lt;li>OpenRobotics&lt;/li>
&lt;li>ROS Industrial&lt;/li>
&lt;/ul>
&lt;h2 id="ros-philosophy">ROS Philosophy&lt;/h2>
&lt;ul>
&lt;li>Federation over Centralation&lt;/li>
&lt;/ul>
&lt;p>Plus list from above.&lt;/p>
&lt;ul>
&lt;li>Small, Simple, Composable Utilities&lt;/li>
&lt;li>Don&amp;rsquo;t Reivent the Wheel&lt;/li>
&lt;li>Non-Exclusive (polyglot, packagin infrastructure)&lt;/li>
&lt;li>Inclusive (in addition to, not in place of)&lt;/li>
&lt;li>Freedom&lt;/li>
&lt;/ul>
&lt;p>Order of topics&lt;/p>
&lt;ol>
&lt;li>Don&amp;rsquo;t Reinvent&lt;/li>
&lt;/ol>
&lt;h3 id="dont-reinvent">Dont Reinvent&lt;/h3>
&lt;p>Multiprocess Control&lt;/p>
&lt;ul>
&lt;li>Components
&lt;ul>
&lt;li>Sensors&lt;/li>
&lt;li>Control&lt;/li>
&lt;li>actuators&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>nodes are process encapsulation between languages&lt;/li>
&lt;li>Imagine
&lt;ul>
&lt;li>C++ Python programs all start concurently&lt;/li>
&lt;li>with hardware&lt;/li>
&lt;li>lots of config&lt;/li>
&lt;li>control flow based on config&lt;/li>
&lt;li>What would your shell script file look like?&lt;/li>
&lt;li>ROS nodes and launch files take care of this&lt;/li>
&lt;li>Tooling to start them.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Topics&lt;/p>
&lt;ul>
&lt;li>pub/sub bus&lt;/li>
&lt;li>ROS nodes communicate over topics&lt;/li>
&lt;li>Cross language serialation primitives that predate protobuff, rabbitMQ, etc.&lt;/li>
&lt;li>Standard messages allow
&lt;ul>
&lt;li>plug and play&lt;/li>
&lt;li>loose coupling&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Online introspection&lt;/li>
&lt;li>quality of service capabilities&lt;/li>
&lt;li>build as an abstraction
&lt;ul>
&lt;li>DDS implementation, ensures security, robustness&lt;/li>
&lt;li>implementation of pub/sub is pushed off to other implementation&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>RVIZ&lt;/p>
&lt;ul>
&lt;li>Robots make lots of data
&lt;ul>
&lt;li>much of it is live&lt;/li>
&lt;li>with 3D context&lt;/li>
&lt;li>annotation&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>RVIZ is your GUI&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="http://wiki.ros.org/Bags">Bags&lt;/a>&lt;/p>
&lt;ul>
&lt;li>standard serialzation library for transport also works for disk storage
&lt;ul>
&lt;li>MIA&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>bags are amazing
&lt;ul>
&lt;li>ML/CV/DL&lt;/li>
&lt;li>unit tests&lt;/li>
&lt;li>collaborators&lt;/li>
&lt;li>Black Box&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>collect on robot and transfer elsewhere for analysis&lt;/li>
&lt;li>De-facto standard for sharing data
&lt;ul>
&lt;li>Ford Autonomous Vehical Data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="http://wiki.ros.org/ROS/Tutorials/Recording%20and%20playing%20back%20data">http://wiki.ros.org/ROS/Tutorials/Recording%20and%20playing%20back%20data&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Services/Actions&lt;/p>
&lt;ul>
&lt;li>Services: synchronous behavior API&lt;/li>
&lt;li>Action: async behavior
&lt;ul>
&lt;li>Handles request negotation&lt;/li>
&lt;li>with preemption&lt;/li>
&lt;li>with status callbacks&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Callback driven API&lt;/li>
&lt;li>build robot behvaiors, fast&lt;/li>
&lt;/ul>
&lt;p>Geometry/Kinematics&lt;/p>
&lt;ul>
&lt;li>Hard robot problems
&lt;ul>
&lt;li>where is everything&lt;/li>
&lt;li>where am I&lt;/li>
&lt;li>how to get A to B&lt;/li>
&lt;li>I can see X, how to graph it&lt;/li>
&lt;li>Many more&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>URDF: Universal Robot Description Format
&lt;ul>
&lt;li>Defines 3D Geometry of a Robot&lt;/li>
&lt;li>Works with your CAD format&lt;/li>
&lt;li>gives a robot an idea of its shape and size&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>TF2 Transform 2
&lt;ul>
&lt;li>transform coordinates from different frames&lt;/li>
&lt;li>API driven, minimal math&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Forward/Inverse Kinematics&lt;/p>
&lt;ul>
&lt;li>MoveIt&lt;/li>
&lt;/ul>
&lt;p>SLAM/Navigation&lt;/p>
&lt;ul>
&lt;li>Path planning&lt;/li>
&lt;/ul>
&lt;p>Simulation&lt;/p>
&lt;ul>
&lt;li>Robots are expensive, dangerous, slow&lt;/li>
&lt;li>sharing a robot is hard&lt;/li>
&lt;li>testing is hard&lt;/li>
&lt;li>what if you don&amp;rsquo;t need robot?&lt;/li>
&lt;li>What if you could have robot VM?&lt;/li>
&lt;/ul>
&lt;p>Simulation - Gazebo&lt;/p>
&lt;ul>
&lt;li>build a virtual robot&lt;/li>
&lt;li>simulate Physics, robot, and sensors&lt;/li>
&lt;li>Plays well with ROS2&lt;/li>
&lt;li>Allows yo build test debug from your desk&lt;/li>
&lt;/ul>
&lt;h2 id="ros-getting-to-plug-and-play-hardware">ROS: Getting to Plug and Play Hardware&lt;/h2>
&lt;ul>
&lt;li>Hardware Ready&lt;/li>
&lt;li>Bridge between ROS 2 DDS layer and ROS&lt;/li>
&lt;/ul>
&lt;h2 id="community-not-just-code">Community not just Code&lt;/h2>
&lt;ul>
&lt;li>ros.org&lt;/li>
&lt;li>discourse.ros.org&lt;/li>
&lt;li>answers.ros.org&lt;/li>
&lt;/ul>
&lt;h2 id="ros-2-foxy">ROS 2 Foxy&lt;/h2>
&lt;ul>
&lt;li>6th Ros 2 Release&lt;/li>
&lt;li>First major LTS&lt;/li>
&lt;li>Start now 3 year of patches and supports&lt;/li>
&lt;/ul>
&lt;p>I want to learn!&lt;/p>
&lt;ul>
&lt;li>DARPA SubT Simulator has great tutorial&lt;/li>
&lt;li>Autoware has Autonomy class
&lt;ul>
&lt;li>Prepackaged docker container to run simulation&lt;/li>
&lt;li>&lt;a href="https://autoware.org/awf-course">awf-course&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="index.ros.org/doc/ros2">ROS 2 Docs&lt;/a>&lt;/li>
&lt;li>TurtleBot3&lt;/li>
&lt;/ul>
&lt;h2 id="contact">Contact&lt;/h2>
&lt;ul>
&lt;li>rosorg&lt;/li>
&lt;li>kscottz&lt;/li>
&lt;li>org.org&lt;/li>
&lt;li>openrobics&lt;/li>
&lt;/ul>
&lt;h2 id="questions">Questions&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Q: Gazebo included?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>A: No&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Q: I work on embedded projects that run on custom hardware for fancy PTZ cameras. I would love to convience our Python app developers how/if ROS could be leveraged. Where do you think I should start? Are their any consultants that could help analysis the specific use case?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>A: This is something we are missing. She views robots broadly. MicroROS. Developing concepts for hardware. hardware interface framework.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Start with simulation&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Using MIPI DSI as Main Display Interface</title><link>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/using-mipi-dsi-as-main-display-interface-marcel-ziswiler-toradex-ag/</link><pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate><guid>https://academic-oss-elc.netlify.app/talk/2020-oss-elc/using-mipi-dsi-as-main-display-interface-marcel-ziswiler-toradex-ag/</guid><description>&lt;h2 id="using-mipi-dsi-as-main-display-interface">Using MIPI DSI as Main Display Interface&lt;/h2>
&lt;ul>
&lt;li>Marcel Ziswiler, Toradex AG&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>The MIPI Display Serial Interface (DSI) is the de-facto standard display interface featured by modern higher-end SoCs. Lacking the long-term availability of discrete MIPI DSI display panels most embedded systems rely on bridge chips converting to more common display interfaces like parallel RGB, LVDS, (e)DP or HDMI. Our generic system concept relies on DSI adapter boards integrating various such bridge chips. After introducing the Linux DSI subsystem this talk concentrates on the auto-detection of such DSI adapters based on parametrisation stored in EEPROMs. The U-Boot boot loader reads the EEPROM contents and chooses the applicable device tree overlay to be applied. The concept of DDC/EDID with hot-plug detect vs. a custom model-specific parametrisation is discussed. The talk continues covering the integration aspect of such DSI bridge chips within the Linux DRM stack. Various limitations of the DSI subsystem and possible solutions are discussed. The DSI bridge chip ecosystem is covered and we look into possible reasons only very few bridge chips are actually supported in mainline so far. The talk concludes with a live demo of our DSI auto-detection implementation.&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>Tordadex - swiss. Embedded. Computing&lt;/li>
&lt;/ul>
&lt;h2 id="intro">Intro&lt;/h2>
&lt;ul>
&lt;li>MIPI&lt;/li>
&lt;li>U-Boot FIT Image&lt;/li>
&lt;li>LIve Demo&lt;/li>
&lt;/ul>
&lt;h2 id="mipi-display-serial-interface-mipi-dsi">MIPI Display Serial Interface (MIPI DSI)&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Spec by MIPI Alliance&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Low power (LP) mode or high speed (HS) mode&lt;/p>
&lt;ul>
&lt;li>HS is ussually one direction&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>MIPI DSI Spec initial version May 2006&lt;/p>
&lt;/li>
&lt;li>
&lt;p>MIPI DSI-2 Spec supports Ultra high definition (4k and 8k)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Physical Layer&lt;/p>
&lt;ul>
&lt;li>1.0 Gbps/lane (1.01), 1.5, 2.5, 4.5 Gbps/lane (D-PHY 2.0)&lt;/li>
&lt;li>MIPI DCS - MIPI Display Command Set&lt;/li>
&lt;li>Incorportates Display Stream Compression (DSC)
&lt;ul>
&lt;li>Standard from VESA&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>de-facto standard display interface feature by modern high-end SoC&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="verdin-products">Verdin products&lt;/h2>
&lt;p>Verdin MIPI DSI Display Adapter System Design&lt;/p>
&lt;ul>
&lt;li>generic system concept&lt;/li>
&lt;li>display adapter boards integrating various bridge chips&lt;/li>
&lt;li>DSI Mezzanine Connector
&lt;ul>
&lt;li>MIPI DSI: 1 clk + 4 data&lt;/li>
&lt;li>GPIO ( BLK1_EN, Touch Interrupt)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>2 x I2C bridge chip + DDC/EDID&lt;/li>
&lt;li>PWM backlight&lt;/li>
&lt;li>I2S for optional audio&lt;/li>
&lt;li>Generic system control signals
&lt;ul>
&lt;li>PWR_EN_MOCI&lt;/li>
&lt;li>SLEEP_MOCI#&lt;/li>
&lt;li>RESET_MOCI#&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Verdin iMX8M Mini&lt;/p>
&lt;ul>
&lt;li>NXP i.MX 8M Mini SoC&lt;/li>
&lt;li>Single display controller, LCDIF&lt;/li>
&lt;li>MIPI DSI output w/ 4 data&lt;/li>
&lt;li>MIPI D-PHY 1.2 max data per lane 1.5 GPS&lt;/li>
&lt;li>Resoution up to 1920x180p60 and 1800x1200p60&lt;/li>
&lt;/ul>
&lt;p>Verdin DSI to HDMI Adapter&lt;/p>
&lt;ul>
&lt;li>Lontium Se&lt;/li>
&lt;li>HDMI V1.4 1080p, 8bit RGB up to 60Hz&lt;/li>
&lt;li>ST HDMI2C1-14HD ESD prtect and signal conditiong&lt;/li>
&lt;li>type A standard HDMI connector&lt;/li>
&lt;/ul>
&lt;p>Verdin DSI to LVDS Adatper&lt;/p>
&lt;ul>
&lt;li>SN65DS184 MIPI DSI to dual link LVDS bridge&lt;/li>
&lt;li>signle/dual-lane LVDS up to 1920x1200/1377x768&lt;/li>
&lt;li>LVDS and touch connector compatible with Capacitive Touch Display 10.1&amp;rdquo; LVDS&lt;/li>
&lt;/ul>
&lt;h2 id="intro-linux-dsi-subsystem">Intro Linux DSI Subsystem&lt;/h2>
&lt;p>DRM MIPI DSI Core
common logic helpers to deal with MIPI DSI peripherals&lt;/p>
&lt;ul>
&lt;li>DRM Panel COre - Generic LVDS Panel (panel-lvds.c)&lt;/li>
&lt;li>DRM Bridge Core TI SN65DS184 DSI to LVDS Bridge - (ti-sn65dsi84.c)&lt;/li>
&lt;li>MIPI DSI Core - Northwest Logic MPI DSI Host COntroller (nwi-dsi.c)&lt;/li>
&lt;li>DRM CORE - Display Engine Driver&lt;/li>
&lt;/ul>
&lt;h2 id="dsi-bridge-chip-integration">DSI bridge chip integration&lt;/h2>
&lt;p>How does DSI bridge chip integrate with that?&lt;/p>
&lt;ul>
&lt;li>DRM bridge&lt;/li>
&lt;li>DRM connector&lt;/li>
&lt;li>I2C device&lt;/li>
&lt;li>MIPI DSI device&lt;/li>
&lt;/ul>
&lt;p>DSI Bridge Chip Integration Pitfalls&lt;/p>
&lt;ul>
&lt;li>availability of super secret data sheets
&lt;ul>
&lt;li>chinese vendors hide their data sheets&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ancient downstream or bare skeleton drivers only&lt;/li>
&lt;li>lots of hard-coded parmeters&lt;/li>
&lt;li>link bring-up sequences not well documented
&lt;ul>
&lt;li>lots of trial and error&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Drivider frequency limitations on either controller side, bridge side or both
&lt;ul>
&lt;li>may require running outside of recommended range&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="bridge-chips-in-our-current-adapters">Bridge Chips in our current Adapters&lt;/h3>
&lt;p>How about Bridge Chips used in our designs current Adapters?&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Lontium LT8912B MIPI DSI to HDMI bridge&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Adopted driver from Rockchip Linux on Github&lt;/p>
&lt;ul>
&lt;li>Forward ported to later DRM API&lt;/li>
&lt;li>Reword driver to be proper I2C device&lt;/li>
&lt;li>full register set from Lontium psuedo code driver&lt;/li>
&lt;li>imrpoved regmap integration&lt;/li>
&lt;li>I2C sub addresses&lt;/li>
&lt;li>added regular I2C based DDC/EDID handling&lt;/li>
&lt;li>Added GPIO based hot-plug detection
&lt;ul>
&lt;li>Needed for I2C GPIO expander support&lt;/li>
&lt;li>hot plug detect GPIO handling crashed GPIO exapdnder&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>bus format was not properly set&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>not pretty but it works&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Further clean-up and upstreaming pending&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Texas Instruments SN65DSI84 MIPI DSI to dual-link LVDS bridge&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Downstream driver taken from a patch in CompLab Yocto Meta Layer on Github&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="dsi-bridge-chip-ecosystem">DSI Bridge Chip Ecosystem&lt;/h3>
&lt;ul>
&lt;li>Vendors still reluctant to maining drivers&lt;/li>
&lt;li>Few mainline supported bridge chips&lt;/li>
&lt;li>Few examples to copy from&lt;/li>
&lt;li>procedure of actual silicon may be difficult&lt;/li>
&lt;li>conformance of MIPI DSI host IP vs bridge chip silicon&lt;/li>
&lt;/ul>
&lt;p>Bridge Chips supported in Mainline&lt;/p>
&lt;ul>
&lt;li>
&lt;p>driver/gpu/drm/bridge&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Differentiate between&lt;/p>
&lt;ul>
&lt;li>SoC internal IP&lt;/li>
&lt;li>discrete external bridge chips&lt;/li>
&lt;li>directly connected panels&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>SoC internal IP&lt;/p>
&lt;ul>
&lt;li>NXP i.MX 8 series&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>discrete external bridge chips&lt;/p>
&lt;ul>
&lt;li>ADV7533&lt;/li>
&lt;li>Parade PS8640 MIPI DSI to eDP converter&lt;/li>
&lt;li>SN65DSI86 DSI to eDP Bridge&lt;/li>
&lt;li>TC358764 DSI/LVDS Bridge&lt;/li>
&lt;li>TC358768AXBG/TC358778XBG MIPI DSI bridge chips&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>directly connected panels&lt;/p>
&lt;ul>
&lt;li>Rasperry Pi 7In touch. Toshiba TC358762 DSI to DPI aka parallel RGB bridge&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="auto-detection-of-dsi-adapter-base-on-eeprom-contents">Auto-Detection of DSI Adapter Base on EEPROM Contents&lt;/h2>
&lt;ul>
&lt;li>idea 1
&lt;ul>
&lt;li>regular device tree: setting bridge stat to disable vs okay&lt;/li>
&lt;li>device graph: linking endpoint and remote-endpoint nodes?&lt;/li>
&lt;li>full flexbility requires device tree overlays&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>idea 2
&lt;ul>
&lt;li>storing device tree overlay in EEPROM&lt;/li>
&lt;li>simple DTBO may be below 1kb more complex ones quickly more than 2kb&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>compromise. Store configuration block&lt;/li>
&lt;/ul>
&lt;h3 id="u-boot-read-eeprom-contents-and-selecting-applicatble-device-tree-overlay">U-Boot read EEPROM Contents and Selecting Applicatble Device Tree Overlay&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Generalized ConfigBlock Handling from NAND/eMMC to EEPROM&lt;/p>
&lt;/li>
&lt;li>
&lt;p>table with product ID to device treee overlay file name mapping&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Distroboot script to apply device tree overlays based on auto-detection as well as overlays.txt file&lt;/p>
&lt;/li>
&lt;li>
&lt;p>HDMI may do hot-plug detect&lt;/p>
&lt;/li>
&lt;li>
&lt;p>DDC/EDID&lt;/p>
&lt;/li>
&lt;li>
&lt;p>MIA&amp;hellip;&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="dt-overlays">DT Overlays&lt;/h3>
&lt;p>Verdin DSI&lt;/p>
&lt;ul>
&lt;li>Verdin DSI to HDMI Adapter
&lt;ul>
&lt;li>fragment for I2C bus&lt;/li>
&lt;li>fragment for I2C bus where you have bridge chip on&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Verdin DSI to LVDS Adapter&lt;/li>
&lt;/ul>
&lt;h3 id="uboot-fit-image">Uboot FIT Image&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>board specfici device trees&lt;/p>
&lt;/li>
&lt;li>
&lt;p>display adapter specific device tree overlays&lt;/p>
&lt;/li>
&lt;li>
&lt;p>FIT image allows conveninet packing of Linux kernel binary toegether with various device trees, device tree overlays and/or ramdisk&lt;/p>
&lt;/li>
&lt;li>
&lt;p>booted as&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>fdt_module is deduced form the EEPROM on the module. fdt_board from one on the carrier board. display_adapter_dtbo from one of the display adapters&lt;/p>
&lt;/li>
&lt;/ul>
&lt;pre>&lt;code class="language-sh">mkimage -l tezi.itb
...
&lt;/code>&lt;/pre>
&lt;h3 id="device-tree-overlay-pitfalls">Device Tree Overlay Pitfalls&lt;/h3>
&lt;ul>
&lt;li>complex device tree overlays may require symbols&lt;/li>
&lt;li>&lt;code>DTC_FLAGS='-@'&lt;/code>&lt;/li>
&lt;li>if reference device nodes with hex addresses.
&lt;ul>
&lt;li>CASE SENSITIVE!!!&lt;/li>
&lt;li>use lower case!!!&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>troubleshooting
&lt;ul>
&lt;li>Add dtc on target. &lt;code>opkg install dtc&lt;/code>&lt;/li>
&lt;li>Use &lt;code>dtc -l fs&lt;/code> on target and dump /proc/device-tree&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;ul>
&lt;li>Demo - DSI Auto-Detection Demo&lt;/li>
&lt;/ul>
&lt;h2 id="questions">Questions&lt;/h2>
&lt;ul>
&lt;li>Q: Used overlay stuff in u-boot&lt;/li>
&lt;li>Q: Is Low power signaling Single ended?&lt;/li>
&lt;li>Q: Can the end pane llike LVDS support partial update? How will the bridge propogate the presence/absence of particular DCS feature to Linux DRM driver subsytem?&lt;/li>
&lt;li>Q: did you consider doing the overlays in linux kernel?&lt;/li>
&lt;li>Q: Why is DRM required with DSI?&lt;/li>
&lt;li>Q: Why are the vendors reluctant with regards to mainlining (or even docs)?&lt;/li>
&lt;li>Q: Keep the conversation going. Please visit the #2-track-embedded-linux on our Slack Workspace after the session ends&lt;/li>
&lt;/ul></description></item></channel></rss>