Hello, and welcome to my open source firmware status on AMD platform's presentation.
My name is Mihał Żegowski, I'm a firmware engineer from 3MDep, we are based in Poland.
I'm a corporate guy, mainly developing support for various platforms, mainly inter-platforms.
I also maintain the Brasswall SOC, PC Engine's platforms, I'm also at the open power system software technical workgroup chair.
And I'm basically playing with open source firmware since 2017.
For those who do not know 3MDep, we are in various places, like we're corporate license service providers, we're UFI adopters,
we also provide FWPD, the firmware update project consultation services, and also we do some Yachto stuff.
So, a little bit of information that I will use throughout the presentation about the micro-architectures.
So, in previous years I have been talking about various older platforms as well, like for PC Engine's APU-1, KGP-D16, APU-2,
and those are the old micro-architectures called Puma, Baldoser, Piledriver, and so on.
So, I have based on some sample platforms so that you can sort of imagine what I'm talking about if I mention some platforms.
And there are also the newer mobile SOCs from the Ryzen series, which are supported by Corbwood.
This is Picasso and Cezanne micro-architectures.
These are the newer APU series from the Zencore architecture.
And also we'll be talking about the newest developments like the Mendocino, Phoenix, and Glindasox.
Not that they could be previously known as under different names because the original, the target names were actually embargoed.
So, you may have heard of Sabrina or Morgana, SOCs as well earlier, that were being developed for Corbwood.
So, those have changed the names to the Mendocino and Phoenix.
So, to review the last year's status, we had Picasso and Cezanne development quite complete,
but there was no FSP yet for the Cezanne, but this has actually changed.
The FSP was published in September last year.
There was also a development of the PSP firmware, AAB partition recovery, supporting the AMD-AVW tool in Corbwood.
So, one of the patches was merged, and the single one that I linked above is probably duplicating the functionality.
So, the whole AAB scheming stuff is used for any recovery in case of corruption of the first partition,
or if the memory configuration after some changes in the setup application would make the system unbootable,
then the PSP can, for example, switch to the AAB partition and still be able to, for example, initialize the memory and boot the platform.
There was also an effort to implement the PSP firmware extraction with the same tool,
but it's still not merged.
It seems that the activity there quite stopped, and there's no further work continuation for this feature.
Yeah, and I mentioned last year that there were new patches for the Sabrina SOC,
so the Sabrina has changed the name to the Mendocino, I believe.
And yeah, I said that in 2021 there was another negative attitude towards the old AMD platforms that were like entirely open
with full source code for the CPU initialization.
If you'd like to see more details, please refer to the Corbwood leadership meeting minutes or the mailing list.
I'll also be talking about it also later in the presentation.
So in 2022 we also had many new features and option deprecations with each release.
Those deprecations sometimes causes the platforms to drop out from the master branch and they are moved to the stable branch.
These new releases tend to move the whole Corbwood drivers and code quality to the higher level by replacing the old interfaces
that were, for example, buggy or had some kind of assumptions that made some old platforms, for example, boot.
But they were hiding some small errors because of those assumptions.
So it is necessary to bring these new interfaces to the old platforms as well,
but sometimes there's not enough time or resources and hardware to test everything,
so some platforms naturally will be moved to the old branches.
But thanks to the companies like PCNGs and a few Corbwood developers,
certain platforms get the required support and the new interfaces are implemented.
So the platforms like PCNGs APU2 is still in the master branch,
but some other boards were unfortunately dropped.
So another year came with new Corbwood releases, as I said,
and many old AMD platforms were actually dropped.
To those platforms we can count PCNGs APU1, some MSI, MS7721, Lenovo AMD G505S, etc., etc.
That is a little bit unfortunate to see, but there was a lack of actually any testing or
maintenance that could also bring those platforms to the newest code, despite our sincere efforts.
So we tried our best to actually implement the new interfaces and we sent patches quite
early, it was in May 2021, but the problem with reviewing the old code is that there
is not enough understanding how those old AMD platforms work, because the initial code
that landed to Corbwood was in kind of maybe proof of concept quality and was depending
on the EGISA code that was published by AMD, and it was not in the best quality.
So if something didn't work there, it was hard to actually locate the bug on the Corbwood
site, and there were also promises that the code will be maintained, will be cleaned up,
but it didn't really happen.
So this burden of maintaining those old platforms were shifted to Corbwood developers.
So through all those years, the code didn't improve that much, so in such circumstances,
the platforms will slowly naturally die, and on the Corbwood master branch, it will be
shifted to the branches created during each release.
We tried to save one of the old platforms, which is the KGP D16.
We have sent over 50 patches that implement simply the first booting stage of Corbwood,
so this is just the beginning, but already the mess of code is enormous, and we lacked
the reviewers to actually process all those patches, so yeah, this is pretty hard to maintain
those old-ending platforms, because like I said, there is very little understanding
how all those platforms really work despite all the documentation.
So Intel platforms are like more straightforward, I would say, at least for other developers.
That's how it is.
Okay, about the new SoCs.
So in this season, development has been stabilized, there are many Chromebooks running on it,
and we even have seen two non-Chromebook platforms that have been actually sent for review by
the starlabs.
These two laptops, unfortunately, cannot be built without the blobs, or can be built,
but it will not produce a functional image, because certain PSP blobs that are required,
for example, for the memorization, cannot be there due to the NDA stuff and so on.
So this is something that also needs to be solved.
But all other components are actually in place, and you can track those patches and see what
is its progress.
As I said, AMD, Mendocino and Phoenix are quite new architectures that are being developed
in an upstream core boot, while the Mendocino is quite in a more advanced state than Phoenix,
Phoenix is a newer one, and FSP is not published for those micro-architectures yet.
You can also notice some PSP blobs that are present in the AMD blobs repository.
AMD glint dies like the newest micro-architecture that has seen the sunlight.
There is practically no information about that in public.
It may be also an burgled code name, so it may change in the future, and I do not have
much else to say about that yet.
But regarding the blob situation, so the Starlabs could build the firmware for their laptops,
and probably boot core boot, but they cannot publish the necessary blob that is provided
by the board code to initialize the memory, because each design may be different and requires
different configuration, how the memory topology looks like on the given platform.
So you have to provide that by the board code, and this becomes the problem, because Chromebooks
have only soldered down memory, and there is no support, for example, to build the blob
with memory configuration for a platform that has solding modules, for example.
I believe this is the main reason why this cannot be built to a functional image, core
boot image.
On the PSB, all the PSB blobs and FSB is present in the AMD Blobs repository.
You can check its license on the repository.
It is quite permissive.
It allows the redistribution, so similar to the Intel FSB and microcode licenses.
And of course, you cannot decompile this assembly, et cetera, et cetera.
We've also took a quick look at the FSB release intervals, and these are quite delayed, I
would say.
For example, between the FSB for Picasso and the CISAN, there is one and a half year of
distance in the initial commits on the AMD Blobs repository.
And for example, the CISAN FSB was released one and a quarter year after the launch of
the processors themselves.
So as you can see, the delay is quite huge.
For Intel, I would say it is like a few months or half a year after the initial release of
the CPUs where the FSB is available.
So it is like much more stabilized ecosystem for Intel, but FSB for AMD is quite a new
invention.
I would say it's like maybe three or maximum four years old, while FSB is like for over
seven years or so on the open-source firmware market.
Regarding the server platform status for AMD, nothing much happened here since the last
year.
Like, we had those initiatives, for example, from Google Romantic that showed the AMD,
Rome and Milan proof-of-concept Linux boot or bootstaff, but nothing else happened.
On the recent OSFC 2022, which was in September in Sweden, there was also something new, similar
to what Romantic showed.
So Brian Cantrell from Oxide showed some proof-of-concept of their firmware on AMD
Blan, which was also based on Linux bootstaff, but they had implemented some bare initialization
of the PCI Express so that the storages and other IO could also work.
It was all very, very basic.
So nothing close to what you would normally see in the UFI from independent BIOS vendors.
So to summarize up, what is actually the future of the AMD platforms in Corbett?
So for sure, the Chromebooks will be gaining the support.
They are backed by Google cooperation efforts, they have partners, they have Corbett developers
working in AMD, and their partnership will make the project successful, for sure.
But for such old platforms like KGP or all the models that I mentioned that were dropped,
it's pretty difficult to actually keep them in the main tree, and it requires significant
effort to actually maintain a board.
So either there must be a community that is willing to test Corbett images on their devices,
but on the second hand, who is brave enough to flash their daily laptop and possibly break
it, because something didn't work.
So it is also not for everyone.
Also the quality of the initial code that was published for those old platforms, it was
just getting older and older, and the actual cost and the effort that would be required
to bring it to the quality we would want is bigger and bigger.
So while, for example, the model of dropping the silicon initialization vendor code is
good for initial launch of the platform, because you have everything modular and you just tune
it, in the long term it is not maintainable.
It can speed up the platform shipment by maybe 50%.
But in the long term, it is a burden for the project that is supporting this vendor code,
and then we end up with such situation where the boards are simply dropping out of the tree.
So in such conditions, all AMD boards will naturally die and will be moved to the branches.
So we may expect further platforms being dropped out, and I think the next one on the aim is
probably APC and APU2.
For now, it supports all the recent interfaces, but I have no idea how long it will last.
Also we think that the lack of strategy for the long term support by the Corbett leadership
is largely decreasing the value of the project itself, because many people rather don't like
their boards being dropped, because if they clone Corbett, they clone it from the code
from the master branch, and if the issue make menu config and want to choose the board,
they see it's no longer there.
So basically they think, oh, it is not supported anymore.
So this kind of value is decreased, because people will see that something is already
not supported, and they lose their hope in the project.
So a new strategy would be required to actually keep those AMD platforms alive in the tree.
So what we think can save those platforms is the Shara firmware.
We are open for any AMD outcasts from the Corbett, and we're working hard to actually
prepare a strategy that will make these platforms support more sustainable.
We often also disagreed on many Corbett leadership meetings with the current Corbett strategy,
but we also offered various ideas like crowdfunding and other stuff that could potentially solve
the problems that we were noticing, but unfortunately those were rejected.
If you'd like, you can visit Corbett leadership meetings for more details.
Also I have a short announcement for you.
Unfortunately, the official PCNG's open source firmware support has been ended by the PCNG's
company, and the 41901 was the last version that we released, and in the format we have
been doing for the past few years, monthly.
But do not worry, our commitment is still strong.
We want to further improve the PCNG's firmware, but this time we would like to release it
under the Shara branch with new features like UFI interface, DMA protection, setup applications,
setup BIOS password, and stuff like that.
But it will be only a community driving project.
We will not have any funding for that.
So your support is actually crucial in determining the roadmap and what the pace of the development
will be.
So I encourage you to take our survey.
Your input is very valuable for us.
If you have any insight or want to support us, please do.
So to sum up, we want to make the Shara a paradise for old AMD platforms and outcasts.
Of course, like I said, it will be community driving, so we want to make it a success and
have community involved as much as possible.
So what we offer with the Shara is we're ready to go test at binary releases with transparent
validation.
We publish all the test cases on our documentation page.
You can use our hardware and software tools.
We have validated and used daily during the development, which can help you in case of
any recovery or even deployment of the firmware.
We also provide high-quality documentation, which explains every caveats and procedures
for the updates or the deployment and recovery of a platform.
So if you want to know more, please feel free to sign up to the Shara newsletter to get
up-to-date information about new features, our releases.
So you may also find the new initiatives and new projects that we plan on the Shara documentation
page, so I encourage you to visit.
Of course, I will gladly talk more about the AMD platforms because I'm pretty much short
on time here and cannot explain every small details.
So if anyone is interested, we can go later in the evening for some beers and talk a little
bit more.
We can think on the first matrix or we can join the Shara matrix as well, where we are
more responsive.
We can just come up with some good place, I think, and talk a little bit more.
The depth is also planning to hold two events in March.
It will be the Shara user group, which is a forum of the Shara users.
This will be a small event with more structured schedule, where we will discuss different
topics related to the Shara.
And right after that, we will hold the Shara developers virtual pub, where this will be
a more relaxed forum event, where we will discuss any topic community wants and what
is of interest of them, and feel free to be invited.
You can see more details in the blog post I link in the slides.
So that will be everything from my site, and I'm open for your questions.
So I have a question actually regarding that PC engine, so after like two years and a half
of waiting, I just got my board before Christmas.
And I got it because it has support for Cool Booth, but I thought that the guys from PC
Engine themselves who were actually developing the Cool Booth for their boards.
But from what you're saying, that it was sponsored for somebody else to building the Cool Booth,
right?
Okay, so the question was who was actually developing Cool Booth for PC Engine's platforms.
So PC Engine's company was responsible only for producing the hardware and distributing
it to the users, and the initial support was being developed by a company called Eltan.
But then they requested, they shifted the Cool Booth work to Fremda, so to us, and we
were like maintaining and improving, releasing the Cool Booth binaries each month since 2016.
So it was like our efforts for all those monthly releases.
Okay, theory?
I understand that Corboud is not building the runs directly to test the platforms.
So the burden is on the users to build stuff.
Do you have any insights for facilitating testing in the future to prevent the boards from being dropped?
Yeah, so the question was whether we have a strategy for the boards being dropped because
it is users' burden to build and test the runs.
So like it was written on the slides, we are still working on the strategy for long-term
sustainable support for old AMD platforms.
But we want to shift the burden to build the runs from the users and instead provide
tested images, at least tested what we can test in our environment, in our laboratory.
And if someone still has some issues or have some future requests, we encourage to create
issues on our GitHub, and then we are considering what is the problem, what is the case, what
is the cause of the problem actually, how to solve it, and we try to narrow it down and
include possibly the fix in the next release.
But of course, as I said, if it is community-driven effort, the pace will depend on the support
level.
So if somebody is able to contribute in any way, for example, fix the code themselves,
or let's say provide the logs or flash our, for example, testing binaries to check or
gather more information because we may not necessarily have the exact hardware configuration,
then it may be the right step to make users less burdened with all those troubles with
flashing and breaking stuff.
Okay.
Any more questions?
Okay.
Maybe.
Okay.
Let's change a little bit.
Yeah.
So the question is, what are the state of the patches?
And why actually there is a problem to get the old AMD boards upstream?
So like I said, this code is very old and it was in very bad quality, committed initially,
with promises from AMD for the maintenance ship, which didn't happen.
So with each year, the code just was getting older and older, and people who actually knew
about it are no longer a part of Corbett or are they just simply retired or out of business?
And basically, there's very few people that can actually understand what the given code
does and actually give some meaningful review for those patches.
So that is why it is very difficult to get something upstream for such an old AMD platform.
Okay.
In theory.
You said that all your platform can be in a different branch.
The branching model, is it like model-based or is it like version of Corbett-based?
Let's say that some patches were made for TGP16 to be able to fix what is missing to be upstream.
Would it happen like in the branch that is, for example, for the 11 until it reached the
point of being back to master, how is it working right now?
Okay, so the question is about the Corbett branching model.
How does it work and how to apply patches on them?
So whenever a Corbett issues a new release, so a tag is placed on the repository,
the current revision that is tagged is being cloned into the branch and called, for example,
4.19 branch, and these branches are in no means stale.
So these can also be contributed to by the Garrett review system, but you have to target the specific branch.
So even if you hook onto some revision on the branch, for example, and you want to patch it,
it doesn't mean that in a half a year it will not have the same tree state,
some back ported patches could be landed on the branch and then your patches that you were kept,
for example, as a file, will no longer apply.
So it is not like that that the platforms are just lying there with no option to improve.
That's not true.
You can always send patches to the previous branches as well.
So it works like any master branch, but you have to just target the older branch with your patches that you sent.
So the development might still be active, but it does not longer benefit from the new features
that are basically landing on the master branch.
Okay, any more questions?
Yes, please.
There's a point again for the KGBD16, which plays on port at 11. We know that that arrow, Corbou, is moving for that platform. So can we hope that the port at 11 branch involves to the point where that was more of my question.
What can we see happening in Corbou at 11 on the nonmaster branch, but the branch that is still active for that board?
Okay, so the question is, what can you expect on the 4.11 branch, for example, with KGPE?
Well, that depends on the community.
If they were to back port some patches that should land on the 4.11 branch, that is possible actually.
But probably the older the branch, the less activity there will be on them.
And if somebody would like to back port some features, then this is probably more efficient to do it on newer branches, because the gap is just only getting bigger and bigger.
If anything, it would be better to work on the fork that we already have, where we rebased all the code, rewritten most of the parts that were in very, very bad shape.
So basically, it is not impossible to have something being developed on the 4.11, but it is rather unlikely to happen right now.
Okay, the time is up, so I can answer any questions later in face-to-face talk.
And yeah, next presentation in eight minutes from theory about the Heads project update.
So stay with us, thank you.