I'm trying an experiment and I welcome anyone who wants to help.
It's a simple idea motivated by a very hard problem. The problem is
that we have unending problems with binary video bioses. We'd like to
get to a source based video bios on, e.g., chromebook.
The linux driver for the intel i915 series can in fact turn on
hardware without the vbios having run. This is great; one reason we
boot the chromebook so fast (as some of you saw last week) is that we
don't bother running the video bios.
This doesn't help those cases where you need graphics in coreboot,
seabios, u-boot, or whatever. For those modes, we still need the video
bios, and we have to cope with its slowness, bugs, and impenetrable
behavior.
The simple idea is to use coccinelle to extract the init code from the
linux driver to create a standalone piece of C code . I've got to the
point that I can compile the module load function and most of the
things it calls to
a standalone user program.
Now why do it this way? Why not just do a one time hack of the driver
code to a coreboot driver? The reason is that the driver keeps
changing and getting bug fixes. It most recently got some very useful
fixes to the GMBUS driver. We want those fixes but the structure of
the code changed a lot.
I want to see if there is some more automated way to track those
changes. This may not work, but I think it's worth a try.
I'm calling the user mode code i915tool. The workflow is basically like this:
cd util/i915tool
export LINUX=/path/to/kernel
sh transform # copies in linux C code and transforms it
make
I've got this building two binaries that do things to graphics. Sadly,
I'm not lighting up any devices yet as the GMBUS always fails. But
it's a start, and being able to gdb this code is nice.
Anyway, there are people on this list who are lots better at
coccinelle than I am, and who know graphics better, and so on. What
I'm thinking to do is submit a commit for this tool in its nascent
state and let people take a look. Or, share the code, which may be
better.
If interested, let me know. I could use the help :-)
Thanks!
ron