<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Marcin Juszkiewicz - debian</title><link href="https://marcin.juszkiewicz.com.pl/" rel="alternate"/><link href="https://marcin.juszkiewicz.com.pl/tag/debian/feed/" rel="self"/><id>https://marcin.juszkiewicz.com.pl/</id><updated>2024-08-16T17:33:00+02:00</updated><entry><title>Arm laptops for normal users?</title><link href="https://marcin.juszkiewicz.com.pl/2024/08/16/arm-laptops-for-normal-users/" rel="alternate"/><published>2024-08-16T17:33:00+02:00</published><updated>2024-08-16T17:33:00+02:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2024-08-16:/2024/08/16/arm-laptops-for-normal-users/</id><summary type="html">Not there yet.&amp;nbsp;Sorry.</summary><content type="html">&lt;p&gt;There are discussions in development circles about Arm powered laptops since
forever. But most of time they do not mention &amp;#8220;normal&amp;#8221; users. Like your parents,
spouses, kids who are not developers. People who turn computer on (cold boot or
from suspend does not matter) and expect them to &amp;#8220;just&amp;nbsp;work&amp;#8221;.&lt;/p&gt;
&lt;!--MORE--&gt;

&lt;p&gt;My teenage daughter is one of them. Her current laptop is one of Thinkpad
models, previous one was Thinkpad as well. Fedora Linux as operating system
serves her needs just fine. But despite my 20 years of work with Arm
architecture I am unable to get Arm based laptop for&amp;nbsp;her.&lt;/p&gt;
&lt;h3&gt;Choices&lt;/h3&gt;
&lt;p&gt;There are several Arm powered laptops on a&amp;nbsp;market:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Macbooks&lt;/li&gt;
&lt;li&gt;Windows on Arm&amp;nbsp;laptops&lt;/li&gt;
&lt;li&gt;Chromebooks&lt;/li&gt;
&lt;li&gt;&lt;abbr title="Seriously Bad Computers"&gt;SBCs&lt;/abbr&gt; with screen like Pinebook&amp;nbsp;Pro&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And all of them have issues when it comes to using Fedora Linux on&amp;nbsp;them.&lt;/p&gt;
&lt;h3&gt;Macbooks&lt;/h3&gt;
&lt;p&gt;Thanks to Asahi Linux team we can run Fedora Linux on M1/M2 based Macbooks.
Which means second hand market as Apple does not sell those models any more
(unless &lt;span class="caps"&gt;8GB&lt;/span&gt; of ram is enough for&amp;nbsp;you).&lt;/p&gt;
&lt;p&gt;There are many things which are not&amp;nbsp;supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thunderbolt&lt;/li&gt;
&lt;li&gt;DisplayPort over&amp;nbsp;Thunderbolt&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;HDMI&lt;/span&gt; audio (work in&amp;nbsp;progress)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So you pay for hardware and have features which you cannot use. I use Macbook
Pro 2021 (with M1 Pro cpu) for local development and stopped checking how work&amp;nbsp;goes.&lt;/p&gt;
&lt;h3&gt;Windows on Arm&amp;nbsp;laptops&lt;/h3&gt;
&lt;p&gt;Qualcomm managed to convince Microsoft to not offer licenses for other vendors
which means all we can have are Snapdragon based laptops. Which may work nice
under &lt;span class="caps"&gt;MS&lt;/span&gt; Windows but if you want to use Linux then &amp;#8220;good luck&amp;#8221; is all you can
get from&amp;nbsp;me.&lt;/p&gt;
&lt;p&gt;Some things work, some do not. I was told that Thinkpad x13s is one of best
supported models. Johan Hovold has a &lt;a href="https://github.com/jhovold/linux/wiki/X13s"&gt;Thinkpad x13s status page&lt;/a&gt;
which lists what works and what needs to be done to have some kind of working&amp;nbsp;laptop.&lt;/p&gt;
&lt;p&gt;Definitely not a system for daily use for normal Linux&amp;nbsp;user.&lt;/p&gt;
&lt;h3&gt;Chromebooks&lt;/h3&gt;
&lt;p&gt;Laptop to run web browser and Android apps. If this is all you need then go for
it. But avoid if you are &amp;#8220;normal&amp;#8221; user and want to run&amp;nbsp;Linux.&lt;/p&gt;
&lt;p&gt;Finding how to enable running anything other than ChromeOS may involve digging
through Internet pages, finding how to override &amp;#8216;write protection&amp;#8217;&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;Just no. Also Arm ones are usually ram&amp;nbsp;limited.&lt;/p&gt;
&lt;h3&gt;Pinebook Pro and other &lt;abbr title="Seriously Bad Computers"&gt;SBCs&lt;/abbr&gt; with&amp;nbsp;screen&lt;/h3&gt;
&lt;p&gt;Those are systems for developers only. Normal users should avoid using them as
those systems require someone who knows how to prepare them to work at&amp;nbsp;all.&lt;/p&gt;
&lt;p&gt;Find/build proper firmware, put it properly in device (&lt;span class="caps"&gt;SPI&lt;/span&gt; Flash or storage
media), keeping things up-to-date may end with partially not working device&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;For developers those are &amp;#8216;issues&amp;#8217; to workaround/solve but for normal users it
may be &amp;#8216;update went in background and now all I have is black&amp;nbsp;screen&amp;#8217;.&lt;/p&gt;
&lt;p&gt;And like with Chromebooks you may be limited by ram size (Pinebook Pro has only
&lt;span class="caps"&gt;4GB&lt;/span&gt;&amp;nbsp;ram).&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you are a normal user who wants to run Linux on a laptop then maybe stay away
from Arm powered ones. Leave them for developers and check once/twice per year
to see how situation&amp;nbsp;looks.&lt;/p&gt;</content><category term="aarch64"/><category term="linaro"/><category term="debian"/><category term="fedora"/></entry><entry><title>I had some fun with FriendlyELEC NanoPC-T6</title><link href="https://marcin.juszkiewicz.com.pl/2024/08/09/i-had-some-fun-with-friendlyelec-nanopc-t6/" rel="alternate"/><published>2024-08-09T19:38:00+02:00</published><updated>2024-08-09T19:38:00+02:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2024-08-09:/2024/08/09/i-had-some-fun-with-friendlyelec-nanopc-t6/</id><summary type="html">Some Seriously Bad Computers are less bad than&amp;nbsp;others&amp;#8230;</summary><content type="html">&lt;p&gt;At work I spend most of time on &lt;span class="caps"&gt;SBSA&lt;/span&gt; Reference Platform. Especially in firmware
part (Arm Trusted Firmware also known as &lt;span class="caps"&gt;TF&lt;/span&gt;-A and Tianocore &lt;span class="caps"&gt;EDK2&lt;/span&gt; also known as
&lt;span class="caps"&gt;UEFI&lt;/span&gt;). However, for some time, I have felt the need to experiment with some
&lt;span class="caps"&gt;UEFI&lt;/span&gt;-related task on existing&amp;nbsp;hardware.&lt;/p&gt;
&lt;p&gt;I first searched for &amp;#8220;affordable&amp;#8221; SystemReady &lt;span class="caps"&gt;SR&lt;/span&gt; system. But options were either
Ampere Altra or &lt;span class="caps"&gt;NVIDIA&lt;/span&gt; Grace, both prices at 3000 &lt;span class="caps"&gt;EUR&lt;/span&gt; or&amp;nbsp;more.&lt;/p&gt;
&lt;p&gt;So I looked at the budget market and bought a FriendlyELEC NanoPC-T6 &lt;abbr title="Seriously Bad Computer"&gt;&lt;span class="caps"&gt;SBC&lt;/span&gt;&lt;/abbr&gt;.&lt;/p&gt;
&lt;!--MORE--&gt;

&lt;h3&gt;Some words about the&amp;nbsp;hardware&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://www.friendlyelec.com/index.php?route=product/product&amp;amp;product_id=292"&gt;FriendlyELEC NanoPC-T6&lt;/a&gt;
is a &lt;abbr title="Seriously Bad Computer"&gt;&lt;span class="caps"&gt;SBC&lt;/span&gt;&lt;/abbr&gt; (Seriously Bad Computer) based on Rockchip &lt;span class="caps"&gt;RK3588&lt;/span&gt; SoC. It has some
interesting on-board&amp;nbsp;features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 cpu cores (4x Cortex-A76, 4x&amp;nbsp;Cortex-A55)&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;16GB&lt;/span&gt; of&amp;nbsp;memory&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;32MB&lt;/span&gt; of &lt;span class="caps"&gt;SPI&lt;/span&gt; flash for storing&amp;nbsp;firmware&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;64GB&lt;/span&gt; of eMMC (not visible under&amp;nbsp;Linux)&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt; 2&amp;nbsp;ports&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt; 3 ports (one type A, one type&amp;nbsp;C)&lt;/li&gt;
&lt;li&gt;2 &lt;span class="caps"&gt;HDMI&lt;/span&gt;&amp;nbsp;outputs&lt;/li&gt;
&lt;li&gt;1 &lt;span class="caps"&gt;HDMI&lt;/span&gt;&amp;nbsp;input&lt;/li&gt;
&lt;li&gt;m.2 type M slot for 2280 card (such as&amp;nbsp;NVMe)&lt;/li&gt;
&lt;li&gt;m.2 type E slot for 2230 card (such as&amp;nbsp;Wi-Fi)&lt;/li&gt;
&lt;li&gt;2 2.5GbE network&amp;nbsp;ports&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt;-C serial console port (&lt;span class="caps"&gt;CH341&lt;/span&gt;&amp;nbsp;chip)&lt;/li&gt;
&lt;li&gt;microSD card&amp;nbsp;slot&lt;/li&gt;
&lt;li&gt;Power, Reset, MaskROM&amp;nbsp;buttons&lt;/li&gt;
&lt;li&gt;audio&amp;nbsp;jack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It comes with metal case which works also as a&amp;nbsp;heatsink.&lt;/p&gt;
&lt;figure id="__yafg-figure-1"&gt;
&lt;img alt="NanoPC-T6 in the case" loading="lazy" src="/files/2024/08/nanopc-700x.jpg" title="NanoPC-T6 in the case"&gt;
&lt;figcaption&gt;NanoPC-T6 in the case&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;Out of the box&amp;nbsp;experience&lt;/h3&gt;
&lt;p&gt;As you know I expect a good &amp;#8220;out of the box&amp;#8221; experience. And NanoPC-T6 was like
any other &lt;abbr title="Seriously Bad Computer"&gt;&lt;span class="caps"&gt;SBC&lt;/span&gt;&lt;/abbr&gt; I used in the past &amp;#8212; unpleasant, horrible and&amp;nbsp;frustrating.&lt;/p&gt;
&lt;p&gt;The device came with a fork of U-Boot 2017.09, configured in such terrible way
that it was incapable of booting any standard distro images I tried. I managed
to boot the pre-installed Android 12 on the eMMC but quickly rebooted to avoid
dealing with&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;I managed to boot Debian &amp;#8216;testing&amp;#8217; manually but there was no networking
available under 6.9.x&amp;nbsp;kernel.&lt;/p&gt;
&lt;p&gt;I Then moved on to other things as my schedule was quite&amp;nbsp;busy.&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;UEFI&lt;/span&gt;&amp;nbsp;experience&lt;/h3&gt;
&lt;p&gt;This week I reserved some time to get NanoPC-T6 running properly. I downloaded
a Rockchip tool called &amp;#8220;upgrade_tool&amp;#8221; and used it to flash
a &lt;a href="https://github.com/edk2-porting/edk2-rk3588/releases"&gt;&lt;span class="caps"&gt;UEFI&lt;/span&gt; image from the &lt;span class="caps"&gt;EDK2&lt;/span&gt;-&lt;span class="caps"&gt;RK3588&lt;/span&gt; project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Experience was much, much better. The firmware was now capable of booting distro
images, allowed me to choose between &lt;span class="caps"&gt;ACPI&lt;/span&gt; or DeviceTree for hardware description
and had proper &lt;span class="caps"&gt;EFI&lt;/span&gt; Shell &amp;#8212; almost like a well-developed&amp;nbsp;systems.&lt;/p&gt;
&lt;p&gt;I went with &lt;span class="caps"&gt;ACPI&lt;/span&gt; mode and booted directly to Fedora &amp;#8216;rawhide&amp;#8217; system stored on a
&lt;span class="caps"&gt;USB&lt;/span&gt; drive. Linux 6.11-rc booted, found devices plugged into &lt;span class="caps"&gt;USB&lt;/span&gt; 3 ports,
recognized both network interfaces (Realtek 8125 ones) and the &lt;span class="caps"&gt;NVME&lt;/span&gt; drive as
well. There was video output on the &lt;span class="caps"&gt;HDMI&lt;/span&gt; screen (in a hardcoded 1080p&amp;nbsp;resolution).&lt;/p&gt;
&lt;p&gt;I then copied the system from the &lt;span class="caps"&gt;USB3&lt;/span&gt; drive to the &lt;span class="caps"&gt;NVME&lt;/span&gt;, set the proper boot
order and enjoyed a nicely working&amp;nbsp;system.&lt;/p&gt;
&lt;h3&gt;DeviceTree?&lt;/h3&gt;
&lt;p&gt;But aren&amp;#8217;t Seriously Bad Computers (SBCs) expected to run with DeviceTree? &lt;span class="caps"&gt;ACPI&lt;/span&gt;
is for &lt;span class="caps"&gt;MS&lt;/span&gt; Windows, not for Linux or *&lt;span class="caps"&gt;BSD&lt;/span&gt; systems,&amp;nbsp;right?&lt;/p&gt;
&lt;p&gt;So I decided to boot into &lt;span class="caps"&gt;DT&lt;/span&gt; land. It took me a while as I had to remind myself
how it works and ensure that &lt;span class="caps"&gt;UEFI&lt;/span&gt; firmware will use the 6.11-rc &lt;span class="caps"&gt;DTB&lt;/span&gt; instead of
one for 5.10-rk or 6.1-rk vendor&amp;nbsp;kernels.&lt;/p&gt;
&lt;p&gt;Finally it booted &amp;#8212; or rather, it &amp;#8220;kind of&amp;#8221;&amp;nbsp;booted&amp;#8230;&lt;/p&gt;
&lt;p&gt;No &lt;span class="caps"&gt;USB&lt;/span&gt;, no PCIe == no &lt;span class="caps"&gt;NVME&lt;/span&gt; == boot into emergency mode because the root
filesystem is not&amp;nbsp;present&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Future&amp;nbsp;plans&lt;/h3&gt;
&lt;p&gt;What will future bring? I am going to find out. I have ordered a Wi-Fi card for
m.2 type E slot to see how it performs and I am going to spend some time around
this &lt;span class="caps"&gt;EDK2&lt;/span&gt; fork to make some experiments on real&amp;nbsp;hardware.&lt;/p&gt;</content><category term="aarch64"/><category term="sbc"/><category term="development"/><category term="debian"/><category term="fedora"/></entry><entry><title>“Ten” years at Linaro</title><link href="https://marcin.juszkiewicz.com.pl/2023/04/17/ten-years-at-linaro/" rel="alternate"/><published>2023-04-17T12:36:00+02:00</published><updated>2023-04-17T12:36:00+02:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2023-04-17:/2023/04/17/ten-years-at-linaro/</id><summary type="html">Three + seven = ten.&amp;nbsp;Right?</summary><content type="html">&lt;p&gt;Some time ago was a day when I reached &amp;#8220;ten&amp;#8221; years at Linaro. Why &amp;#8220;&amp;#8221;? Because it
was 3 + 7 rather than 10 years straight. First three years as Canonical
contractor now seven years at Red Hat employee assigned as Member&amp;nbsp;Engineer.&lt;/p&gt;
&lt;h3&gt;My first three years at&amp;nbsp;Linaro&lt;/h3&gt;
&lt;h4&gt;NewCo or NewCore? Or Ubuntu on &lt;span class="caps"&gt;ARM&lt;/span&gt;?&lt;/h4&gt;
&lt;p&gt;In 2010 I signed contract with Canonical as &amp;#8220;Foundation &lt;span class="caps"&gt;OS&lt;/span&gt; Engineer&amp;#8221;. Once there
I signed another paper which moved me to NewCo project (also called NewCore but
NewCo name is on paper I&amp;nbsp;signed).&lt;/p&gt;
&lt;p&gt;On 30th April 2010 I got &amp;#8220;Welcome to Linaro&amp;#8221;&amp;nbsp;e-mail.&lt;/p&gt;
&lt;!--MORE--&gt;

&lt;p&gt;Then &lt;a href="/2010/05/14/uds-continues/"&gt;&lt;span class="caps"&gt;UDS&lt;/span&gt;-M happened&lt;/a&gt; where we were hiding under
&amp;#8220;Ubuntu on Arm&amp;#8221; name (despite the fact that Ubuntu had such&amp;nbsp;team).&lt;/p&gt;
&lt;h4&gt;Ah, it is Linaro now&amp;nbsp;:D&lt;/h4&gt;
&lt;p&gt;On 3rd June 2010 Linaro was officially announced.
No more hiding, we went public with&amp;nbsp;name.&lt;/p&gt;
&lt;h4&gt;My&amp;nbsp;team&lt;/h4&gt;
&lt;p&gt;I became a part of Developer Platform team and worked mostly on toolchain
packages for Ubuntu and later Debian. There were funny moments at
sprints/summits/connects when I joked that I have two managers to listen to (one
from Toolchain Working Group and one from Developer&amp;nbsp;Platform).&lt;/p&gt;
&lt;p&gt;There were Debian/Ubuntu developers there and people from other&amp;nbsp;environments.&lt;/p&gt;
&lt;p&gt;At some moment it was renamed to &amp;#8220;Base and Baselines&amp;#8221;. Or &amp;#8220;Bed and Breakfast&amp;#8221; as
most of time &amp;#8220;&lt;span class="caps"&gt;BB&lt;/span&gt;&amp;#8221; was used instead of full&amp;nbsp;name.&lt;/p&gt;
&lt;h4&gt;AArch64 bring&amp;nbsp;up&lt;/h4&gt;
&lt;p&gt;In 2012 I dusted off my OpenEmbedded knowledge and started working on getting
AArch64 architecture bring up. Lot of not-yet-public patches was in use. The fun
of seeing &amp;#8220;Hello world!&amp;#8221; message in emulator printed by &lt;span class="caps"&gt;OS&lt;/span&gt; image I built from
scratch was something I hope to never&amp;nbsp;forget.&lt;/p&gt;
&lt;p&gt;Each time I am choosing mug for my coffee I see Pac-Man one I bought during
Linaro/Arm AArch64 sprint we had in October&amp;nbsp;2012.&lt;/p&gt;
&lt;figure id="__yafg-figure-1"&gt;
&lt;img alt="My AArch64 mug" loading="lazy" src="/files/2023/04/IMG_20230417_140623-700x.jpg" title="My AArch64 mug"&gt;
&lt;figcaption&gt;My AArch64 mug&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4&gt;The&amp;nbsp;End&lt;/h4&gt;
&lt;p&gt;There was lot of noise in 2011 about deal between Canonical and Linaro. Several
engineers at Linaro were from Canonical and there was some messy situation
related with&amp;nbsp;money.&lt;/p&gt;
&lt;p&gt;It ended with retiring of people every quarter. Some moved back to Canonical,
some changed job and got hired directly by Linaro. There were also people who
moved to Linaro member companies and stayed with their Linaro position. Some
people left both companies and went to other&amp;nbsp;jobs.&lt;/p&gt;
&lt;p&gt;I was supposed to &lt;a href="/2012/10/26/so-long-and-thanks-for-all-the-fish/"&gt;leave Linaro in 2012&lt;/a&gt;
but it was postponed by half a year. So &lt;a href="/2013/05/31/my-time-at-linaro-is-over/"&gt;I left&lt;/a&gt; after about 37&amp;nbsp;months.&lt;/p&gt;
&lt;h3&gt;Second&amp;nbsp;round&lt;/h3&gt;
&lt;p&gt;Time passed, I was working at Red Hat on getting AArch64 first class citizen in
&lt;span class="caps"&gt;RHEL&lt;/span&gt; and Fedora Linux distributions. And one day my manager asked &lt;a href="/2016/01/25/i-may-go-back-to-linaro/"&gt;do I want to
work at Linaro again&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I did some research, discussed with friends at Linaro and on &lt;a href="/2016/04/08/back-linaro-org/"&gt;8th April 2016 I
was back&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;My team &lt;span class="caps"&gt;II&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;This time I became part of &lt;span class="caps"&gt;LEG&lt;/span&gt;: Linaro Enterprise Group. Servers, data centres
etc. There were several teams to choose and I ended in &lt;span class="caps"&gt;SDI&lt;/span&gt; (Software Defined
Infrastructure) one. We were behind &lt;span class="caps"&gt;LDC&lt;/span&gt; (Linaro Developer Cloud)&amp;nbsp;project.&lt;/p&gt;
&lt;p&gt;At some moment &lt;span class="caps"&gt;LEG&lt;/span&gt; became &lt;span class="caps"&gt;LDCG&lt;/span&gt; (Linaro Datacenter and Cloud Group). Some years
later &lt;span class="caps"&gt;LDCG&lt;/span&gt; lost &amp;#8220;and Cloud&amp;#8221; part as &lt;span class="caps"&gt;AWS&lt;/span&gt; and other cloud providers started
offering AArch64 systems so we did not had to deal with it any&amp;nbsp;more.&lt;/p&gt;
&lt;h4&gt;OpenStack all&amp;nbsp;over&lt;/h4&gt;
&lt;p&gt;First version of &lt;span class="caps"&gt;LDC&lt;/span&gt; was Debian based with OpenStack &amp;#8216;liberty&amp;#8217;. Then were weird
months when we had to reinvent deployment several times. It was mess most of&amp;nbsp;time.&lt;/p&gt;
&lt;p&gt;So we abandoned own solutions and went with OpenStack Kolla. I quickly became
one of core developers there. &lt;span class="caps"&gt;LDC&lt;/span&gt; moved to be container&amp;nbsp;based.&lt;/p&gt;
&lt;p&gt;In 2022 we ended working on OpenStack. &lt;span class="caps"&gt;LDC&lt;/span&gt; is now used only for internal&amp;nbsp;projects.&lt;/p&gt;
&lt;h4&gt;Building&amp;nbsp;stuff&lt;/h4&gt;
&lt;p&gt;With my &amp;#8220;give me software and I will build it&amp;#8221; mantra I ended also as kind of &lt;span class="caps"&gt;CI&lt;/span&gt;
jobs developer for &lt;span class="caps"&gt;LEG&lt;/span&gt; teams. Apache Bigtop, Apache Arrow, TensorFlow, &lt;span class="caps"&gt;EDK2&lt;/span&gt; and
several other projects. Some used containers, some were running shell scripts,
some&amp;nbsp;Ansible.&lt;/p&gt;
&lt;h4&gt;&lt;span class="caps"&gt;SBSA&lt;/span&gt; Reference&amp;nbsp;Platform&lt;/h4&gt;
&lt;p&gt;I was involved in some work around getting &lt;span class="caps"&gt;QEMU&lt;/span&gt; to emulate &lt;span class="caps"&gt;SBSA&lt;/span&gt; Reference
Platform (&amp;#8220;sbsa-ref&amp;#8221; machine). Created some &lt;span class="caps"&gt;CI&lt;/span&gt; jobs to run test suites, build
firmware images etc. After running test suites I created a bunch of issues in
Jira so we can track how things&amp;nbsp;go.&lt;/p&gt;
&lt;p&gt;During recent months I became more involved. I am testing patches, running them
through both &lt;span class="caps"&gt;SBSA&lt;/span&gt; and &lt;span class="caps"&gt;BSA&lt;/span&gt; Arm Compliance Suites and reporting&amp;nbsp;results.&lt;/p&gt;
&lt;p&gt;I have own &lt;a href="https://github.com/hrw/sbsa-ref-status"&gt;set of scripts&lt;/a&gt; to handle
logs to make it easier to track how things are&amp;nbsp;now.&lt;/p&gt;
&lt;h4&gt;Summary&lt;/h4&gt;
&lt;p&gt;At last Linaro Connect events there was always a moment when they announced
people who worked at Linaro for 5 (or later) 10 years. I have to admit &amp;#8212; I felt
envy several&amp;nbsp;times.&lt;/p&gt;
&lt;p&gt;And when I was 5 years straight at Linaro we had &lt;span class="caps"&gt;COVID&lt;/span&gt;-19 pandemic so there was
no&amp;nbsp;event.&lt;/p&gt;</content><category term="linaro"/><category term="development"/><category term="virtualization"/><category term="fedora"/><category term="ubuntu"/><category term="debian"/><category term="aarch64"/><category term="arm"/></entry><entry><title>My twenty plus years of IRC</title><link href="https://marcin.juszkiewicz.com.pl/2021/05/20/my-twenty-plus-years-of-irc/" rel="alternate"/><published>2021-05-20T10:31:00+02:00</published><updated>2021-05-20T10:31:00+02:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2021-05-20:/2021/05/20/my-twenty-plus-years-of-irc/</id><summary type="html">Instant messaging platforms come and go. &lt;span class="caps"&gt;IRC&lt;/span&gt;&amp;nbsp;stays.</summary><content type="html">&lt;p&gt;In 1996 I started studies at Białystok University of Technology. And one of
early days I found that corridor with text terminals. Some time later I joined
that crowd and started using &lt;span class="caps"&gt;HP&lt;/span&gt;-2623A term with SunOS&amp;nbsp;account.&lt;/p&gt;
&lt;p&gt;And one of first applications crowd shown me was ircII (other were bash, screen,
pine and ncftp). So I am &lt;span class="caps"&gt;IRC&lt;/span&gt; user for over 24 years now and this &lt;a href="https://xkcd.com/1782/"&gt;&lt;span class="caps"&gt;XKCD&lt;/span&gt; comics&lt;/a&gt; can
be about&amp;nbsp;me:&lt;/p&gt;
&lt;figure id="__yafg-figure-1"&gt;
&lt;img alt="2078: He announces that he's finally making the jump from screen+irssi to tmux+weechat." src="https://imgs.xkcd.com/comics/team_chat.png" title="Team chat"&gt;
&lt;figcaption&gt;Team chat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;Clients&lt;/h3&gt;
&lt;p&gt;As wrote above I started with ircII. It was painful to use so quickly some
scripts landed &amp;#8212; Venom, Lice and some others. Tried Epic, Epic2000 and some
other clients to finally end with Irssi. I have never been a fan of &lt;span class="caps"&gt;GUI&lt;/span&gt; based&amp;nbsp;ones.&lt;/p&gt;
&lt;p&gt;There were moments when people used &lt;span class="caps"&gt;CTCP&lt;/span&gt; &lt;span class="caps"&gt;VERSION&lt;/span&gt; to check what clients other
users use. In old Amiga days I usually had it set to similar one as AmIRC one
but with version bumped above whatever was released. Simple trolling for all
those curious people. Nowadays it simply replies with &amp;#8220;telnet&amp;#8221; and there was a
day when I logged to &lt;span class="caps"&gt;IRC&lt;/span&gt; server and exchanged some messages using just telnet&amp;nbsp;:D&lt;/p&gt;
&lt;h3&gt;Networks&lt;/h3&gt;
&lt;p&gt;For years I was user of IRCnet. It was popular in Poland so why bother with
checking other networks. But as time passed and I became more involved in &lt;span class="caps"&gt;FOSS&lt;/span&gt;
projects there was a need to start using Freenode, then &lt;span class="caps"&gt;OFTC&lt;/span&gt;, Mozilla&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;Checked how old my accounts are as it nicely show when I started using which&amp;nbsp;network.&lt;/p&gt;
&lt;h4&gt;IRCnet&lt;/h4&gt;
&lt;p&gt;IRCnet was my first &lt;span class="caps"&gt;IRC&lt;/span&gt; network. Stopped using it few years ago as all channels
I was on went quiet or migrated elsewhere (mostly&amp;nbsp;Freenode).&lt;/p&gt;
&lt;p&gt;For years I was visible on Amiga channels #amisia, #amigapl where I met several
friends and I am in contact with many of them&amp;nbsp;still.&lt;/p&gt;
&lt;h4&gt;Freenode&lt;/h4&gt;
&lt;p&gt;The journey started on 15th May 2004. This was time when I started playing with
OpenEmbedded and knew that this is a project where I will spend some of my free
time (it became hobby, then&amp;nbsp;job).&lt;/p&gt;
&lt;p&gt;It was a place where CentOS, Fedora, Linaro, OpenStack and several other
projects were&amp;nbsp;present.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NickServ- Information on Hrw (account hrw):
NickServ- Registered : Mar 15 10:59:47 2004 (17y 9w 6d ago)
NickServ- Last addr  : ~hrw@redhat/hrw
NickServ- vHost      : redhat/hrw
NickServ- Last seen  : now
NickServ- Flags      : HideMail
NickServ- *** End of Info ***
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;&lt;span class="caps"&gt;OFTC&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;For me &lt;span class="caps"&gt;OFTC&lt;/span&gt; means Debian. Later also virtualization stuff as &lt;span class="caps"&gt;QEMU&lt;/span&gt; and libvirt
folks sit&amp;nbsp;there.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NickServ- Nickname information for hrw (Marcin Juszkiewicz)
NickServ- hrw is currently online
NickServ-   Time registered: Fri 10 Jun 2011 17:43:55 +0000 (9y 11m 10d 14:47:05 ago)
NickServ- Account last quit: Tue 18 May 2021 09:07:55 +0000 (1d 23:23:05 ago)
NickServ- Last quit message: Remote host closed the connection
NickServ-         Last host: 00019652.user.oftc.net
NickServ-               URL: http://marcin.juszkiewicz.com.pl/
NickServ-      Cloak string: Not set
NickServ-          Language: English (0)
NickServ-           ENFORCE: ON
NickServ-            SECURE: OFF
NickServ-           PRIVATE: ON
NickServ-             CLOAK: ON
NickServ-          VERIFIED: YES

&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Libera&lt;/h4&gt;
&lt;p&gt;And since yesterday I am on Libera as&amp;nbsp;well.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NickServ- Information on hrw (account hrw):
NickServ- Registered : May 19 15:26:18 2021 +0000 (17h 32m 35s ago)
NickServ- Last seen  : now
NickServ- Flags      : HideMail, Private
NickServ- *** End of Info ***
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What&amp;nbsp;next?&lt;/h3&gt;
&lt;p&gt;I saw and used several instant messaging platforms. All of them were younger
than &lt;span class="caps"&gt;IRC&lt;/span&gt;. Many of them are no longer popular, several are no longer existing.
&lt;span class="caps"&gt;IRC&lt;/span&gt; survived so I continue to use&amp;nbsp;it.&lt;/p&gt;</content><category term="irc"/><category term="computers"/><category term="life"/><category term="openembedded"/><category term="debian"/></entry><entry><title>U-Boot and generic distro boot</title><link href="https://marcin.juszkiewicz.com.pl/2021/03/14/u-boot-and-generic-distro-boot/" rel="alternate"/><published>2021-03-14T10:14:00+01:00</published><updated>2021-03-14T10:14:00+01:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2021-03-14:/2021/03/14/u-boot-and-generic-distro-boot/</id><summary type="html">U-Boot can boot distro installer out of&amp;nbsp;box</summary><content type="html">&lt;p&gt;Small board computers (&lt;span class="caps"&gt;SBC&lt;/span&gt;) usually come with U-Boot as firmware. There could be
some more components like Arm Trusted Firmware, &lt;span class="caps"&gt;OPTEE&lt;/span&gt; etc but what user interact
with is the U-Boot&amp;nbsp;itself.&lt;/p&gt;
&lt;p&gt;Since 2016 there is the CONFIG_DISTRO_DEFAULTS option in U-Boot configuration.
It selects defaults suitable for booting general purpose Linux distributions.
Thanks to it board is able to boot most of &lt;span class="caps"&gt;OS&lt;/span&gt; installers out of the box without
any user&amp;nbsp;interaction.&lt;/p&gt;
&lt;h3&gt;How?&lt;/h3&gt;
&lt;p&gt;How does it know how to do that? There are several scripts and variables
involved. Run &amp;#8220;printenv&amp;#8221; command in U-Boot shell and there you should see some
of them named like &amp;#8220;boot_*, bootcmd_*&amp;nbsp;scan_dev_for_*&amp;#8221;.&lt;/p&gt;
&lt;p&gt;In my example I would use environment from RockPro64 running U-Boot 2021.01&amp;nbsp;version.&lt;/p&gt;
&lt;p&gt;I will prettify all scripts for readability. Script contents may be expanded &amp;#8212;
in such case I will give name as a comment and then it&amp;#8217;s&amp;nbsp;content.&lt;/p&gt;
&lt;h3&gt;Let&amp;#8217;s&amp;nbsp;boot&lt;/h3&gt;
&lt;p&gt;First variable used by U-Boot is &amp;#8220;bootcmd&amp;#8221;. It reads it to know how to boot
operating system on the&amp;nbsp;board.&lt;/p&gt;
&lt;p&gt;In out case this variable has &amp;#8220;run distro_bootcmd&amp;#8221; in it. So what is there on
RockPro64 &lt;span class="caps"&gt;SBC&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setenv nvme_need_init
for target in ${boot_targets}
do 
    run bootcmd_${target}
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It says that on-board &lt;span class="caps"&gt;NVME&lt;/span&gt; needs some initialization and then goes through
set of scripts using order from &amp;#8220;boot_targets&amp;#8221; variable. On RockPro64 this
variable sets &amp;#8220;mmc0 mmc1 nvme0 usb0 pxe dhcp sf0&amp;#8221; order which&amp;nbsp;means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eMMC&lt;/li&gt;
&lt;li&gt;MicroSD&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;NVME&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt;&amp;nbsp;storage&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;PXE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;DHCP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;SPI&lt;/span&gt;&amp;nbsp;flash&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both eMMC and MicroSD look similar: &amp;#8216;devnum=X; run mmc_boot&amp;#8217; &amp;#8212; set &lt;span class="caps"&gt;MMC&lt;/span&gt; number
and then try to boot by running &amp;#8216;mmc_boot&amp;#8217;&amp;nbsp;script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if mmc dev ${devnum}; then 
    devtype=mmc; 
    run scan_dev_for_boot_part; 
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class="caps"&gt;NVME&lt;/span&gt; one initialize PCIe subsystem (via &amp;#8220;boot_pci_enum&amp;#8221;), then scans for &lt;span class="caps"&gt;NVME&lt;/span&gt;
devices (via &amp;#8220;nvme_init&amp;#8221;) and do the similar stuff (here with expanded&amp;nbsp;scripts):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# boot_pci_enum
pci enum

# nvme_init
if ${nvme_need_init}; then 
    setenv nvme_need_init false;
    nvme scan;
fi

if nvme dev ${devnum}; then 
    devtype=nvme; 
    run scan_dev_for_boot_part; 
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class="caps"&gt;USB&lt;/span&gt; booting goes with&amp;nbsp;&amp;#8220;usb_boot&amp;#8221;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;usb start;
if usb dev ${devnum}; then 
    devtype=usb; 
    run scan_dev_for_boot_part;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class="caps"&gt;PXE&lt;/span&gt; network boot? Initialize &lt;span class="caps"&gt;USB&lt;/span&gt;, scan &lt;span class="caps"&gt;PCI&lt;/span&gt;, get network configuration, do &lt;span class="caps"&gt;PXE&lt;/span&gt;&amp;nbsp;boot:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# boot_net_usb_start
usb start

# boot_pci_enum
pci enum

dhcp; 
if pxe get; then 
    pxe boot; 
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class="caps"&gt;DHCP&lt;/span&gt; method feels like last resort one (do not ask me for meaning of all those&amp;nbsp;variables):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# boot_net_usb_start
usb start

# boot_pci_enum
pci enum

if dhcp ${scriptaddr} ${boot_script_dhcp}; then 
    source ${scriptaddr}; 
fi;

setenv efi_fdtfile ${fdtfile}; 
setenv efi_old_vci ${bootp_vci};
setenv efi_old_arch ${bootp_arch};
setenv bootp_vci PXEClient:Arch:00011:UNDI:003000;
setenv bootp_arch 0xb;

if dhcp ${kernel_addr_r}; then 
    tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};

    if fdt addr ${fdt_addr_r}; then 
        bootefi ${kernel_addr_r} ${fdt_addr_r}; 
    else 
        bootefi ${kernel_addr_r} ${fdtcontroladdr};
    fi;
fi;

setenv bootp_vci ${efi_old_vci};
setenv bootp_arch ${efi_old_arch};
setenv efi_fdtfile;
setenv efi_old_arch;
setenv efi_old_vci;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And last method is &lt;span class="caps"&gt;SPI&lt;/span&gt;&amp;nbsp;flash:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;busnum=0

if sf probe ${busnum}; then
    devtype=sf;

    # run scan_sf_for_scripts; 
    ${devtype} read ${scriptaddr} ${script_offset_f} ${script_size_f}; 
    source ${scriptaddr}; 
    echo SCRIPT FAILED: continuing...
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Search for boot&amp;nbsp;partition&lt;/h3&gt;
&lt;p&gt;Note how block devices end with one script: &amp;#8220;scan_dev_for_boot_part&amp;#8221;. What it
does is quite&amp;nbsp;simple:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;part list ${devtype} ${devnum} -bootable devplist; 
env exists devplist || setenv devplist 1; 

for distro_bootpart in ${devplist}; do 
    if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then 
        run scan_dev_for_boot; 
    fi; 
done; 
setenv devplist
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We know type and number of boot device from previous step so now we check for
bootable partitions. Which means &lt;span class="caps"&gt;EFI&lt;/span&gt; System Partition for &lt;span class="caps"&gt;GPT&lt;/span&gt; disks and
partitions marked as bootable in case of &lt;span class="caps"&gt;MBR&lt;/span&gt;. If none are present then first one
is assumed to be bootable&amp;nbsp;one.&lt;/p&gt;
&lt;h3&gt;Search for distribution boot&amp;nbsp;information&lt;/h3&gt;
&lt;p&gt;Once we found boot partitions it is time to search for boot stuff with
&amp;#8220;scan_dev_for_boot&amp;#8221;&amp;nbsp;script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo Scanning ${devtype} ${devnum}:${distro_bootpart}...;
for prefix in ${boot_prefixes}; do 
    run scan_dev_for_extlinux; 
    run scan_dev_for_scripts; 
done;

run scan_dev_for_efi;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Old style &lt;span class="caps"&gt;OS&lt;/span&gt;&amp;nbsp;configuration&lt;/h4&gt;
&lt;p&gt;First U-Boot checks for &amp;#8220;extlinux/extlinux.conf&amp;#8221; file, then go for old style
&amp;#8220;boot.scr&amp;#8221; (in uimg and clear text formats). Both of them are checked in / and
/boot/ directories of checked partition (those names are in &amp;#8220;boot_prefixes&amp;#8221;&amp;nbsp;variable).&lt;/p&gt;
&lt;p&gt;Let us look at&amp;nbsp;it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# scan_dev_for_extlinux
if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf};then 
    echo Found ${prefix}${boot_syslinux_conf}; 

    # run boot_extlinux; 
    sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}

    echo SCRIPT FAILED: continuing...; 
fi

# scan_dev_for_scripts
for script in ${boot_scripts}; do 
    if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then 
        echo Found U-Boot script ${prefix}${script}; 

        # run boot_a_script; 
        load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; 
        source ${scriptaddr}

        echo SCRIPT FAILED: continuing...; 
    fi; 
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;&lt;span class="caps"&gt;EFI&lt;/span&gt; compliant &lt;span class="caps"&gt;OS&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;And finally U-Boot checks for &lt;span class="caps"&gt;EFI&lt;/span&gt; style BootOrder variables and generic &lt;span class="caps"&gt;OS&lt;/span&gt; loader&amp;nbsp;path:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# scan_dev_for_efi
setenv efi_fdtfile ${fdtfile};
for prefix in ${efi_dtb_prefixes}; do
    if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then 
        # run load_efi_dtb; 
        load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
    fi;
done;

# run boot_efi_bootmgr;
if fdt addr ${fdt_addr_r}; then 
    bootefi bootmgr ${fdt_addr_r};
else 
    bootefi bootmgr;
fi

if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then
    echo Found EFI removable media binary efi/boot/bootaa64.efi; 

    # run boot_efi_binary; 
    load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootaa64.efi; 
    if fdt addr ${fdt_addr_r}; then 
        bootefi ${kernel_addr_r} ${fdt_addr_r};
    else 
        bootefi ${kernel_addr_r} ${fdtcontroladdr};
    fi

    echo EFI LOAD FAILED: continuing...;
fi; 
setenv efi_fdtfile
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Booted&lt;/h3&gt;
&lt;p&gt;At this moment board should be in either &lt;span class="caps"&gt;OS&lt;/span&gt; or in &lt;span class="caps"&gt;OS&lt;/span&gt; loader (being &lt;span class="caps"&gt;EFI&lt;/span&gt;&amp;nbsp;binary).&lt;/p&gt;
&lt;h3&gt;Final&amp;nbsp;words&lt;/h3&gt;
&lt;p&gt;All that work on searching for boot media, boot scripts, boot configuration
files, &lt;span class="caps"&gt;OS&lt;/span&gt; loaders, &lt;span class="caps"&gt;EFI&lt;/span&gt; BootOrder entries etc is done without any user
interaction. Every bootable media is checked and&amp;nbsp;tried.&lt;/p&gt;
&lt;p&gt;If I would add &lt;span class="caps"&gt;SATA&lt;/span&gt; controller support into U-Boot binary then all disks
connected to such would also be checked. Without any code/environment changes
from my&amp;nbsp;side.&lt;/p&gt;
&lt;p&gt;So if your &lt;span class="caps"&gt;SBC&lt;/span&gt; has some weird setup then consider moving to distro generic one.
Boot fresh mainline U-Boot, store copy of your existing environment (&amp;#8220;printenv&amp;#8221;
shows it) and then reset to generic one with &amp;#8220;env default -a&amp;#8221; command. Probably
would need to set &lt;span class="caps"&gt;MAC&lt;/span&gt; adresses for network&amp;nbsp;interfaces.&lt;/p&gt;</content><category term="aarch64"/><category term="development"/><category term="u-boot"/><category term="debian"/><category term="fedora"/></entry><entry><title>I got HoneyComb</title><link href="https://marcin.juszkiewicz.com.pl/2021/02/18/i-got-honeycomb/" rel="alternate"/><published>2021-02-18T19:09:00+01:00</published><updated>2021-02-18T19:09:00+01:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2021-02-18:/2021/02/18/i-got-honeycomb/</id><summary type="html">Finally some hardware with (almost) &lt;span class="caps"&gt;SBSA&lt;/span&gt;/&lt;span class="caps"&gt;SBBR&lt;/span&gt;&amp;nbsp;compliance!</summary><content type="html">&lt;p&gt;Few years ago SolidRun released &lt;a href="https://shop.solid-run.com/product/SRM8040S00D04GE008D00CH/"&gt;MACCHIATObin&lt;/a&gt; board. Nice fast cpu, &lt;span class="caps"&gt;PCI&lt;/span&gt; Express
slot, several network ports. I did not buy it because it supported only 16 &lt;span class="caps"&gt;GB&lt;/span&gt;
of memory and I wanted to be able to run&amp;nbsp;OpenStack.&lt;/p&gt;
&lt;p&gt;Time has passed, &lt;a href="https://shop.solid-run.com/product/SRLX216S00D00GE064H08CH/"&gt;HoneyComb &lt;span class="caps"&gt;LX2&lt;/span&gt;
system&lt;/a&gt; appeared on
AArch64 market. More cores, more memory.  Again I haven&amp;#8217;t bought it &amp;#8212; my Ryzen
5 upgrade costed less than HoneyComb price&amp;nbsp;is.&lt;/p&gt;
&lt;p&gt;And when someone asked me for some serious AArch64 system to buy I was
suggesting&amp;nbsp;HoneyComb.&lt;/p&gt;
&lt;h3&gt;Let us look at&amp;nbsp;hardware&lt;/h3&gt;
&lt;p&gt;So what do we have&amp;nbsp;here?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;16 Cortex-A72&amp;nbsp;cores&lt;/li&gt;
&lt;li&gt;2 &lt;span class="caps"&gt;SO&lt;/span&gt;-&lt;span class="caps"&gt;DIMM&lt;/span&gt; slots (up to &lt;span class="caps"&gt;64GB&lt;/span&gt; ram in&amp;nbsp;total)&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;USB&lt;/span&gt; 2.0 and 3.0 ports (as ports and/or&amp;nbsp;headers)&lt;/li&gt;
&lt;li&gt;standard &lt;span class="caps"&gt;ATX&lt;/span&gt; power socket (no 12V &lt;span class="caps"&gt;AUX&lt;/span&gt;&amp;nbsp;needed)&lt;/li&gt;
&lt;li&gt;3 fan connectors (one with &lt;span class="caps"&gt;PWM&lt;/span&gt;, two with&amp;nbsp;12V)&lt;/li&gt;
&lt;li&gt;front panel connectors like on x86-64&amp;nbsp;motherboards&lt;/li&gt;
&lt;li&gt;M.2 slot for &lt;span class="caps"&gt;NVME&lt;/span&gt; (pcie&amp;nbsp;x4)&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;PCI&lt;/span&gt; Express slot (open x8 one so x16 card&amp;nbsp;fits)&lt;/li&gt;
&lt;li&gt;MicroSD slot (for&amp;nbsp;firmware)&lt;/li&gt;
&lt;li&gt;4 &lt;span class="caps"&gt;SFP&lt;/span&gt;+ ports for 10GbE&amp;nbsp;networking&lt;/li&gt;
&lt;li&gt;1 GbE&amp;nbsp;port&lt;/li&gt;
&lt;li&gt;4 &lt;span class="caps"&gt;SATA&lt;/span&gt;&amp;nbsp;ports&lt;/li&gt;
&lt;li&gt;serial console via microUSB&amp;nbsp;port&lt;/li&gt;
&lt;li&gt;power/reset&amp;nbsp;buttons&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id="__yafg-figure-1"&gt;
&lt;img alt="HoneyComb board layout" loading="lazy" src="/files/2021/02/honeycomb-layout.webp" title="HoneyComb board layout"&gt;
&lt;figcaption&gt;HoneyComb board layout&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Lot of networking and there is even version with 100GbE port added: &lt;a href="https://shop.solid-run.com/product/SRLX216S00D00GE064C08CH/"&gt;ClearFog
&lt;span class="caps"&gt;CX&lt;/span&gt; &lt;span class="caps"&gt;LX2&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;So how I got&amp;nbsp;it?&lt;/h3&gt;
&lt;p&gt;I wrote that I did not bought it, right? Jon Nettleton (from SolidRun) contacted
me recently and&amp;nbsp;asked:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Morning.  do you have any interest in a HoneyComb?  I have some old stock
boards available to the community.  I figured it may help you out with your
&lt;span class="caps"&gt;UEFI&lt;/span&gt; Qemu&amp;nbsp;work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We discussed about &lt;span class="caps"&gt;SBSA&lt;/span&gt;/&lt;span class="caps"&gt;SBBR&lt;/span&gt; stuff and I sent him an email with address
information and shipping&amp;nbsp;notes.&lt;/p&gt;
&lt;p&gt;Some days passed and board arrived. I added spare &lt;span class="caps"&gt;NVME&lt;/span&gt; and two sticks of Kingston
HyperX 2933 &lt;span class="caps"&gt;CL17&lt;/span&gt; memory and it was ready to go (microsd card keeps&amp;nbsp;firmware):&lt;/p&gt;
&lt;figure id="__yafg-figure-2"&gt;
&lt;img alt="HoneyComb board ready to go" loading="lazy" src="/files/2021/02/honeycomb-ram-nvme.webp" title="HoneyComb board ready to go"&gt;
&lt;figcaption&gt;HoneyComb board ready to go&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;Let&amp;#8217;s run&amp;nbsp;something&lt;/h3&gt;
&lt;p&gt;Debian &amp;#8216;bullseye&amp;#8217; booted right away. Again I used pendrive from my &lt;span class="caps"&gt;EBBR&lt;/span&gt;
compliant RockPro64. Started without&amp;nbsp;problems.&lt;/p&gt;
&lt;h4&gt;Network ports&amp;nbsp;issue&lt;/h4&gt;
&lt;p&gt;Ok, there was one problem &amp;#8212; on-board ethernet ports do not work yet with
mainline nor distribution kernels so I had to dig out my old &lt;span class="caps"&gt;USB&lt;/span&gt; based network&amp;nbsp;card.&lt;/p&gt;
&lt;p&gt;There are patches for Linux kernel to get all ports running. May get merged into
5.13 kernel if things go&amp;nbsp;nicely.&lt;/p&gt;
&lt;h3&gt;Plans?&lt;/h3&gt;
&lt;p&gt;I plan few things for&amp;nbsp;HoneyComb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;check several distributions how they handle AArch64&amp;nbsp;systems&lt;/li&gt;
&lt;li&gt;improve &lt;span class="caps"&gt;SBSA&lt;/span&gt; &lt;span class="caps"&gt;ACS&lt;/span&gt; code as HoneyComb is almost &lt;span class="caps"&gt;SBSA&lt;/span&gt; level 3 compliant (there are
    some places where error/warning messages break&amp;nbsp;output)&lt;/li&gt;
&lt;li&gt;build, deploy and test&amp;nbsp;OpenStack&lt;/li&gt;
&lt;li&gt;test&amp;nbsp;software&lt;/li&gt;
&lt;li&gt;check how it works as AArch64 desktop (like I did with &lt;span class="caps"&gt;APM&lt;/span&gt; Mustang 6 years&amp;nbsp;ago)&lt;/li&gt;
&lt;/ul&gt;</content><category term="aarch64"/><category term="fedora"/><category term="debian"/><category term="linaro"/><category term="computers"/><category term="donations"/><category term="sbc"/><category term="honeycomb"/></entry><entry><title>EBBR on EspressoBin</title><link href="https://marcin.juszkiewicz.com.pl/2021/02/15/ebbr-on-espressobin/" rel="alternate"/><published>2021-02-15T21:53:00+01:00</published><updated>2021-02-15T21:53:00+01:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2021-02-15:/2021/02/15/ebbr-on-espressobin/</id><summary type="html">Takes some time but EspressoBin can be &lt;span class="caps"&gt;EBBR&lt;/span&gt;&amp;nbsp;too.</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;span class="caps"&gt;SBBR&lt;/span&gt; or &lt;span class="caps"&gt;GTFO&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah, right. But world is not so nice and there are many cheap &lt;span class="caps"&gt;SBC&lt;/span&gt; on market
which are not &lt;span class="caps"&gt;SBBR&lt;/span&gt; compliant and probably never will. And with small amount of
work they can do &lt;span class="caps"&gt;EBBR&lt;/span&gt; (&lt;a href="https://github.com/ARM-software/ebbr/"&gt;Embedded Base Boot Requirements&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;NOTE&lt;/span&gt;: I have similar post about &lt;a href="/2020/06/17/ebbr-on-rockpro64/"&gt;&lt;span class="caps"&gt;EBBR&lt;/span&gt; on RockPro64 board&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;WTH&lt;/span&gt; is &lt;span class="caps"&gt;EBBR&lt;/span&gt;?&lt;/h3&gt;
&lt;p&gt;It is specification for devices which are not servers and do not pretend to be
such. U-Boot is all they have and with properly configured one they have some
subset of &lt;span class="caps"&gt;EFI&lt;/span&gt; Boot/Runtime Services to load distribution bootloader (grub-efi
usually) like it is done on&amp;nbsp;servers.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;ACPI&lt;/span&gt; is not required but may be present. DeviceTree is perfectly fine. You may
provide both or one of&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;Firmware can be stored wherever you wish. Even &lt;span class="caps"&gt;MBR&lt;/span&gt; partitioning is available if
really&amp;nbsp;needed.&lt;/p&gt;
&lt;h3&gt;Few words about board&amp;nbsp;itself&lt;/h3&gt;
&lt;p&gt;EspressoBin has &lt;span class="caps"&gt;4MB&lt;/span&gt; of &lt;span class="caps"&gt;SPI&lt;/span&gt; flash on board. Less than on RockPro64 but still
enough for storing firmware (U-Boot takes less than &lt;span class="caps"&gt;1MB&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;This &lt;span class="caps"&gt;SBC&lt;/span&gt; is nothing new &amp;#8212; first version was released in 2016. There were
several revisions with different memory type, amount of ram chips, type of them
(ddr3 or ddr4), &lt;span class="caps"&gt;CPU&lt;/span&gt; speed and some more&amp;nbsp;changes.&lt;/p&gt;
&lt;p&gt;I got EspressoBin revision 5 with &lt;span class="caps"&gt;1GB&lt;/span&gt; ram of ddr3 in 2 chips. And 1GHz&amp;nbsp;processor.&lt;/p&gt;
&lt;p&gt;It may sound silly that I repeat that information but it matters when you start
building firmware for that&amp;nbsp;board.&lt;/p&gt;
&lt;h3&gt;So let us build fresh&amp;nbsp;firmware&lt;/h3&gt;
&lt;p&gt;This is Marvell so abandon all hope for&amp;nbsp;sanity.&lt;/p&gt;
&lt;p&gt;Thanks to Arm Trusted Firmware authors there is &lt;a href="https://trustedfirmware-a.readthedocs.io/en/latest/plat/marvell/armada/build.html"&gt;good documentation on how to
build firmware for EspressoBin&lt;/a&gt;
which guides step by step and explains all arguments you need. For me it was&amp;nbsp;several &lt;code&gt;git clone&lt;/code&gt; calls and then&amp;nbsp;two &lt;code&gt;make&lt;/code&gt; calls:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make -C u-boot CROSS_COMPILE=aarch64-linux-gnu- \
mvebu_espressobin-88f3720_defconfig u-boot.bin -j12

make -C trusted-firmware-a CROSS_COMPILE=aarch64-linux-gnu- \
CROSS_CM3=arm-none-linux-gnueabihf- PLAT=a3700 \
CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=2 \
MV_DDR_PATH=$PWD/marvell/mv-ddr-marvell/ \
WTP=$PWD/marvell/A3700-utils-marvell/ \
CRYPTOPP_PATH=$PWD/marvell/cryptopp/ \
BL33=$PWD/u-boot/u-boot.bin \
mrvl_flash -j12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And I had to install cross toolchain for 32-bit arm because the one I had was
for building kernels/bootloaders&amp;nbsp;only.&lt;/p&gt;
&lt;h3&gt;Is your U-Boot friendly or&amp;nbsp;not?&lt;/h3&gt;
&lt;p&gt;First you need to check which version of U-Boot and hardware you have. Then
check does it recognize &lt;span class="caps"&gt;SPI&lt;/span&gt; flash or&amp;nbsp;not:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Marvell&amp;gt;&amp;gt; sf probe
SF: unrecognized JEDEC id bytes: 9d, 70, 16
Failed to initialize SPI flash at 0:0 (error -2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I had bad luck as my board used &lt;span class="caps"&gt;SPI&lt;/span&gt; chip not recognized by any official U-Boot&amp;nbsp;build&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Armbian to the&amp;nbsp;rescue&lt;/h3&gt;
&lt;p&gt;I asked in few places did anyone had some experiences with this board. One of
them was #debian-arm &lt;span class="caps"&gt;IRC&lt;/span&gt; channel where I got hint from Xogium that Armbian may
have U-Boot&amp;nbsp;builds.&lt;/p&gt;
&lt;p&gt;And they have &lt;a href="https://www.armbian.com/espressobin/"&gt;whole page about EspressoBin&lt;/a&gt;.
With information how to choose firmware files&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;So I downloaded archive with proper files for &lt;a href="http://wiki.espressobin.net/tiki-index.php?page=Bootloader+recovery+via+UART"&gt;&lt;span class="caps"&gt;UART&lt;/span&gt; recovery&lt;/a&gt;.
The important thing to remember is that once you move jumpers and load all
firmware files over serial they are not written in &lt;span class="caps"&gt;SPI&lt;/span&gt; flash so reset of board
means you start&amp;nbsp;over.&lt;/p&gt;
&lt;p&gt;Quick check is &lt;span class="caps"&gt;SPI&lt;/span&gt; flash&amp;nbsp;detected:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Marvell&amp;gt;&amp;gt; sf probe
SF: Detected is25wp032 with page size 256 Bytes, erase size 4 KiB, total 4 MiB
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yeah! Now can start &lt;span class="caps"&gt;USB&lt;/span&gt; and flash own firmware&amp;nbsp;build:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Marvell&amp;gt;&amp;gt; bubt flash-image.bin spi usb
Burning U-Boot image &amp;quot;flash-image.bin&amp;quot; from &amp;quot;usb&amp;quot; to &amp;quot;spi&amp;quot;
Bus usb@58000: Register 2000104 NbrPorts 2
Starting the controller
USB XHCI 1.00
Bus usb@5e000: USB EHCI 1.00
scanning bus usb@58000 for devices... 1 USB Device(s) found
scanning bus usb@5e000 for devices... 2 USB Device(s) found
Image checksum...OK!
SF: Detected is25wp032 with page size 256 Bytes, erase size 4 KiB, total 4 MiB
Erasing 991232 bytes (242 blocks) at offset 0 ...Done!
Writing 990944 bytes from 0x6000000 to offset 0 ...Done!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quick reset and board boots to fresh, mainline&amp;nbsp;U-Boot:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TIM-1.0
WTMI-devel-18.12.1-1a13f2f
WTMI: system early-init
SVC REV: 5, CPU VDD voltage: 1.108V
NOTICE:  Booting Trusted Firmware
NOTICE:  BL1: v2.4(release):v2.4-345-g04c122310 (Marvell-devel-18.12.2)
NOTICE:  BL1: Built : 17:11:19, Feb 15 2021
NOTICE:  BL1: Booting BL2
NOTICE:  BL2: v2.4(release):v2.4-345-g04c122310 (Marvell-devel-18.12.2)
NOTICE:  BL2: Built : 17:11:20, Feb 15 2021
NOTICE:  BL1: Booting BL31
NOTICE:  BL31: v2.4(release):v2.4-345-g04c122310 (Marvell-devel-18.12.2)
NOTICE:  BL31: Built : 18:07:02, Feb 15 2021


U-Boot 2021.01 (Feb 15 2021 - 19:25:41 +0100)

DRAM:  1 GiB
Comphy-0: USB3_HOST0    5 Gbps    
Comphy-1: PEX0          2.5 Gbps  
Comphy-2: SATA0         5 Gbps    
SATA link 0 timeout.
AHCI 0001.0300 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
flags: ncq led only pmp fbss pio slum part sxs 
PCIE-0: Link down
MMC:   sdhci@d0000: 0, sdhci@d8000: 1
Loading Environment from SPIFlash... SF: Detected is25wp032 with page size 256 Bytes, erase size 4 KiB, total 4 MiB
OK
Model: Globalscale Marvell ESPRESSOBin Board
Card did not respond to voltage select! : -110
Net:   eth0: neta@30000
Hit any key to stop autoboot:  0 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Final&amp;nbsp;steps&lt;/h3&gt;
&lt;p&gt;&lt;span class="caps"&gt;OK&lt;/span&gt;, so &lt;span class="caps"&gt;SBC&lt;/span&gt; has fresh, mainline firmware. Nice. But still some stuff needs to be&amp;nbsp;done.&lt;/p&gt;
&lt;p&gt;First note &lt;span class="caps"&gt;MAC&lt;/span&gt; addresses of Ethernet ports.&amp;nbsp;Use &lt;code&gt;printenv&lt;/code&gt; command to check
stored environment and note few&amp;nbsp;variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eth1addr=f0:ad:4b:aa:97:01
eth2addr=f0:ad:4b:aa:97:02
eth3addr=f0:ad:4b:aa:97:03
ethaddr=f0:ad:4e:72:10:ef
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Of course you may also skip that step and rely on random ones or choose own ones
(I had router with C0:&lt;span class="caps"&gt;FF&lt;/span&gt;:&lt;span class="caps"&gt;EE&lt;/span&gt;:C0:&lt;span class="caps"&gt;FF&lt;/span&gt;:&lt;span class="caps"&gt;EE&lt;/span&gt; in&amp;nbsp;past).&lt;/p&gt;
&lt;p&gt;Then reset environment to default values stored in U-Boot binary and set those
&lt;span class="caps"&gt;MAC&lt;/span&gt; addresses by&amp;nbsp;hand:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;=&amp;gt; env default -a -f
=&amp;gt; setenv eth1addr f0:ad:4b:aa:97:01
=&amp;gt; setenv eth2addr f0:ad:4b:aa:97:02
=&amp;gt; setenv eth3addr f0:ad:4b:aa:97:03
=&amp;gt; setenv ethaddr f0:ad:4e:72:10:ef
=&amp;gt; saveenv
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK
=&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What &lt;span class="caps"&gt;EBBR&lt;/span&gt;&amp;nbsp;brings?&lt;/h3&gt;
&lt;p&gt;Now your board is ready to boot Debian, Fedora and several other distribution
install media with two&amp;nbsp;commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;=&amp;gt; set boot_targets usb0
=&amp;gt; boot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It will find &lt;span class="caps"&gt;EFI&lt;/span&gt; bootloader and start it. Just like on any other boring
&lt;span class="caps"&gt;SBBR&lt;/span&gt;/&lt;span class="caps"&gt;EBBR&lt;/span&gt;&amp;nbsp;system.&lt;/p&gt;
&lt;p&gt;Distributions with old style &amp;#8216;boot.scr&amp;#8217; script (like OpenWRT for example) will
also work so no functionality&amp;nbsp;loss.&lt;/p&gt;</content><category term="aarch64"/><category term="firmware"/><category term="sbc"/><category term="debian"/><category term="fedora"/><category term="ubuntu"/></entry><entry><title>Standards are boring</title><link href="https://marcin.juszkiewicz.com.pl/2021/01/20/standards-are-boring/" rel="alternate"/><published>2021-01-20T17:33:00+01:00</published><updated>2021-01-20T17:33:00+01:00</updated><author><name>Marcin Juszkiewicz</name></author><id>tag:marcin.juszkiewicz.com.pl,2021-01-20:/2021/01/20/standards-are-boring/</id><summary type="html">Your Arm board can be compliant&amp;nbsp;too.</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;We have made Arm servers&amp;nbsp;boring.&lt;/p&gt;
&lt;p&gt;Jon&amp;nbsp;Masters&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Standards are boring. Satisfied users may not want to migrate to other boards
the market tries to sell&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;So Arm market is flooded with piles of small board computers (&lt;span class="caps"&gt;SBC&lt;/span&gt;). Often they
are compliant to standards only when it comes to&amp;nbsp;connectors.&lt;/p&gt;
&lt;h3&gt;But our hardware is not&amp;nbsp;standard&lt;/h3&gt;
&lt;p&gt;It is not a matter of &amp;#8216;let produce &lt;span class="caps"&gt;UEFI&lt;/span&gt; ready hardware&amp;#8217; but rather &amp;#8216;let write
&lt;span class="caps"&gt;EDK2&lt;/span&gt; firmware for boards we already&amp;nbsp;have&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Look at Raspberry/Pi then. It is shitty hardware but got popular. And group of
people wrote &lt;span class="caps"&gt;UEFI&lt;/span&gt; firmware for it. Probably without vendor support&amp;nbsp;even.&lt;/p&gt;
&lt;h3&gt;Start with &lt;span class="caps"&gt;EBBR&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Each new board should be &lt;span class="caps"&gt;EBBR&lt;/span&gt; compliant at start. Which is easy &amp;#8212; do &amp;#8216;whatever
hardware&amp;#8217; and put properly configured U-Boot on it. Upstreaming support for your
small device should not be hard as you often base on some already existing&amp;nbsp;hardware.&lt;/p&gt;
&lt;p&gt;Add &lt;span class="caps"&gt;16MB&lt;/span&gt; of &lt;span class="caps"&gt;SPI&lt;/span&gt; flash to store firmware. Your users will be able to boot &lt;span class="caps"&gt;ISO&lt;/span&gt;
without wondering where on boot media they need to write&amp;nbsp;bootloaders.&lt;/p&gt;
&lt;p&gt;Then work on &lt;span class="caps"&gt;EDK2&lt;/span&gt; for board. Do &lt;span class="caps"&gt;SMBIOS&lt;/span&gt; (easy) and keep your existing Device
Tree.  You are still &lt;span class="caps"&gt;EBBR&lt;/span&gt;. Remember about upstreaming your work &amp;#8212; some people
will complain, some will improve your&amp;nbsp;code.&lt;/p&gt;
&lt;h3&gt;Add &lt;span class="caps"&gt;ACPI&lt;/span&gt;, go &lt;span class="caps"&gt;SBBR&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Next step is moving from Device Tree to &lt;span class="caps"&gt;ACPI&lt;/span&gt;. May take some time to understand
why there are so many tables and what &lt;span class="caps"&gt;ASL&lt;/span&gt; is. But as several other systems show
it can be&amp;nbsp;done.&lt;/p&gt;
&lt;p&gt;And this brings you to &lt;span class="caps"&gt;SBBR&lt;/span&gt; compliance. Or SystemReady &lt;span class="caps"&gt;ES&lt;/span&gt; if you like&amp;nbsp;marketing.&lt;/p&gt;
&lt;h3&gt;&lt;span class="caps"&gt;SBSA&lt;/span&gt; for future&amp;nbsp;design&lt;/h3&gt;
&lt;p&gt;Doing new SoC tends to be &amp;#8220;let us take previous one and improve a bit&amp;#8221;. So this
time change it a bit and make your next SoC compliant with &lt;span class="caps"&gt;SBSA&lt;/span&gt; level 3. All
needed components are probably already included in your Arm&amp;nbsp;license.&lt;/p&gt;
&lt;p&gt;Grab &lt;span class="caps"&gt;EDK2&lt;/span&gt; support you did for previous board. Look at &lt;span class="caps"&gt;QEMU&lt;/span&gt; &lt;span class="caps"&gt;SBSA&lt;/span&gt; Reference
Platform support, look at other &lt;span class="caps"&gt;SBSA&lt;/span&gt; compliant hardware. Copy, reuse their
drivers, their&amp;nbsp;code.&lt;/p&gt;
&lt;h3&gt;Was it&amp;nbsp;worth?&lt;/h3&gt;
&lt;p&gt;At the end you will have &lt;span class="caps"&gt;SBSA&lt;/span&gt; compliant hardware running &lt;span class="caps"&gt;SBBR&lt;/span&gt; compliant&amp;nbsp;firmware. &lt;/p&gt;
&lt;p&gt;Congratulations, your board is SystemReady &lt;span class="caps"&gt;SR&lt;/span&gt; compliant. Your marketing team may
write that you are on same list as Ampere with their Altra&amp;nbsp;server.&lt;/p&gt;
&lt;p&gt;Users buy your hardware and can install whatever &lt;span class="caps"&gt;BSD&lt;/span&gt;, Linux distribution they
want. Some will experiment with Microsoft Windows. Others may work on porting
Haiku or other exotic operating&amp;nbsp;system. &lt;/p&gt;
&lt;p&gt;But none of them will have to think &amp;#8220;how to get this shit running&amp;#8221;. And they
will tell friends that your device is as boring as it should be when it comes to
running &lt;span class="caps"&gt;OS&lt;/span&gt; on it == more&amp;nbsp;sales.&lt;/p&gt;</content><category term="aarch64"/><category term="debian"/><category term="fedora"/><category term="ubuntu"/><category term="development"/></entry></feed>