Nico and everyone who did the brainstorming,

Thank you so much!! This is amazing, and exactly what we need at
the moment!

As a first step, I merged everything into our ideas doc
<https://docs.google.com/document/d/1AxMobB2v8Dv2uUwZPZ_vCmmONYDJuliHcnjfWOs4qIs/edit?usp=sharing>,
and as a result we have 11 ideas (perfect!). We can refine/rephrase/correct
in the doc: I haven't done any changes yet, just copied and formatted the
doc.
I also linked ideas
<https://docs.google.com/document/d/1AxMobB2v8Dv2uUwZPZ_vCmmONYDJuliHcnjfWOs4qIs/edit?usp=sharing>
& proposal template
<https://docs.google.com/document/d/1DSg1FykuI7Z3JDY1Qtk8C6JjvpsYISMEwyV4932jtBI/edit?usp=sharing>
into https://www.flashrom.org/GSoC, so now info is available to anyone
interested.
As a bonus point I added GSoC page into Developers bottom menu, so now it
is referenced on the Home page https://www.flashrom.org/Flashrom.

I will re-read list of ideas once again later. And in general, feedback is
very welcome! There are 3 more weeks to prepare the application.

Have a nice day,
Anastasia.

On Thu, Jan 13, 2022 at 6:18 AM Nico Huber <nic...@gmx.de> wrote:

> Hi Anastasia and other flashrom folks,
>
> we had some brainstorming today about GSoC project ideas.
>
> I can't access my Google account right now, so failed to edit the
> original doc[1]. Maybe somebody can copy the following ideas there,
> or we just put the document on Gerrit (doesn't have to be submitted)
> for the moment?
>
> It's a first revision, written in a hurry, so feel free to fix/
> adapt anything ;) Also, some of the smaller topics seem too
> short/boring. Maybe we could combine some into a refactoring project?
>
> Nico
>
>
> Optimize Erase-Function Selection
> =================================
>
> To change any 0 to a 1 in the contents of a NOR-flash chip, a full
> block of data needs to be erased. So to change a single byte, it is
> sometimes required to erase a whole block, which we'll call erase
> overhead. Most flash chips support multiple erase-block sizes.
> Flashrom keeps a list of these sizes and ranges for each supported
> flash chip and maps them to internal erase functions. Usually these
> lists are sorted by ascending size.
>
> Traditionally, Flashrom tries all available erase functions for a flash
> chip during writes. Usually only the first function is used, but if
> anything goes wrong on the wire, or the programmer rejects a function,
> it falls back to the next. As the functions are sorted by size, this
> results in a minimum erase overhead.
>
> However, if big portions of the flash contents are re-written, using
> the smallest erase-block size results in transaction overhead, and also
> erasing bigger blocks at once often results in shorter erase times
> inside the flash chip.
>
> So there is a tradeoff between picking smaller and larger blocks
> which heavily depends on the amount of data that is changed. With
> some preparation and a re-write of the loop over the erase-functions,
> it seems possible to optimize for both cases, the few, scattered
> changes and long, continuous changes:
>
> * Adapt the programmer API so we can check in advance if
>   a programmer supports an erase-function.
> * Ensure the erase-function list is sorted, filter it using
>   the new API, and then for each change hunk, pick the function
>   with the smallest erase overhead (favoring functions for
>   bigger blocks if the overhead is equal).
>
> Duration: medium
>
> Requires a skilled C programmer.
>
>
> Fix Endianness Issues
> =====================
>
> Over the years, flashrom picked up support for some in-flash
> partitioning formats (e.g. Intel Flash Descriptor, coreboot's
> FMAP). These have a (hopefully) defined endianness. But it may
> differ from the device that runs flashrom.
>
> * Add a unified API to read data endian-safe (a draft
>   exists on Gerrit).
> * Port the existing code in Flashrom to use this API.
> * Integrate IFWI (another format by Intel) using the
>   new API (patches exist, but likely need to be updated).
>
> Duration: low/medium
>
>
> Integration work for CI Containers
> ==================================
>
> Flashrom supports a massive amount of platforms, both hardware and
> OS wise. For some time now, we try to get more test-coverage for
> non-Linux, non-x86 platforms (at least for building Flashrom!). One
> approach is manibuilder (found under util/manibuilder/ in the source
> tree): It tries to integrate many Docker containers, and works so
> far to build-test commits on Gerrit.
>
> However, many things are lacking. For instance,
>
> * Source-code pull only works over IP and is currently hard-coded to
>   `review.coreboot.org`. To test local changes, two ideas exists to
>   get them into the containers:
>   1. Set up another container with access to the local files that
>      runs an HTTP/Git server.
>   2. Give every container access to the local files. This could barely
>      be called work for a Linux container, however if we run another
>      OS in QEMU, for instance, file access becomes a lot harder
>      (possible solution: 9pfs).
>
> * To test non-Linux OS's, we currently run QEMU inside the container.
>   This could be integrated much better, for instance the container could
>   be built such that it contains the bare files of the target OS (i.e.
>   not just a disk image with another file system in it). QEMU could
>   then be run transparently so that one can issue normal Docker commands
>   like `run` that automatically target the emulated OS.
>
> * Some popular OS's are currently untested and containers for them
>   would be very welcome, e.g. FreeBSD, OpenBSD, Mac (if that's possible
>   license-wise, might need to be run on Mac hardware).
>
> Duration: open-ended?
>
>
> Update Meson Integration
> ========================
>
> We have a `meson.build` but it looks like it only targets Linux on x86.
> Would be nice to get it fully functional, including cross-compilation.
>
> Duration: ?
>
>
> Restructure Shutdown Functions
> ==============================
>
> Flashrom code has an API to register arbitrary functions to be run when
> flashrom exits. This has led to a rather unstructured code flow that is
> hard to keep track of. While the API is generally useful, its usage
> should be restricted. This is something that will likely need further
> discussion with the whole community. Some things that seem desirable:
>
> * Have a defined shutdown function in the programmer API. Instead
>   of registering a function to be called later, we would call it
>   directly when we are done with a programmer.
> * There are several wrapper functions to alter hardware state that
>   automatically register a shutdown function to undo what they did
>   (cf. rmmio/rpci/rphysmap/rget_io_perms). They currently rely on
>   global state and as they are not used very often, it might be
>   easier to drop them.
>
> Duration: medium/long
>
>
> Revise serial/serprog Code
> ==========================
>
> The serprog code and generally the serial-terminal support code needs
> an update and testing on non-Linux/non-Windows platforms. For further
> maintenance it's desirable to extract the per-platform code into
> separate files. Platforms that don't work currently should be fixed.
>
> Duration: short/medium
>
>
> Add Mac M1 support
> ==================
>
> Building flashrom for MacOS is already possible, however the combination
> of MacOS and ARM is untested. There are generally three classes of
> programmers to support:
>
> * External programmers connected via serial or USB. (might work OOB)
> * Internal PCI-based programmers, e.g. targeting the OptionROM of a
>   NIC/graphics card.
> * The `internal` programmer, targeting flash ROMs on the mainboard.
>
> At least the latter most likely requires a driver, like the unmaintained
> DirectHW[1] and also specific support for the M1 SoCs.
>
> Duration: flexible, depending on the programmer classes
>
> Requires access to M1 Mac hardware. Potentially experience in low-level
> programming.
>
> [1]
> https://review.coreboot.org/plugins/gitiles/directhw/+/refs/heads/master
>


-- 
Anastasia.
_______________________________________________
flashrom mailing list -- flashrom@flashrom.org
To unsubscribe send an email to flashrom-le...@flashrom.org

Reply via email to