Let’s Encrypt

As HTTPS is a must nowadays I decided a year a go to give it a try and got a certificate from startssl. The process at startssl took quite some time and was not that easy. With lets encrypt everything should be much easier and faster to setup – lets give it a try @ueberspace (my hoster).

There is a very good (German) tutorial directly from ueberspace for the whole process. Two minutes later everything was done and it worked! There is only one missing part. As the generated certificate is only valid for 90 days I created a little script which gets run every month – thanks to cron.

QMetaEnum: Serializing C++ Enums

I think that almost every C++ programmer looked into a nice and easy way to do C++ Enum serialization. You may want to store the Enum value in a human readable format (json, ini, ..) and later you may also want to read back the value into the object.

Continue reading “QMetaEnum: Serializing C++ Enums”

Fast forward to 2015

It has been a long time since I did the last post and I want to bring you up to date regarding my personal blog. As you might have seen I have changed the used theme to better support mobile devices.

If your browser supports NSI you should access my blog via https now. It took me some time to setup everything but my new hoster ueberspace made it a breeze to setup everything – thanks.

The biggest time safer for me is the switch to disqus comment system as it is quite time consuming to manage all the comments in the spam queue.

I hope you enjoy the new site and in the next blog I will talk about the current state of my biggest hobby project – etnaviv

OpenOCD and the iMX6

Sometimes is is quite handy to have access to a JTAG interface to look more deeply into problems.  The weapon of choice is an Olimex ARM-USB-OCD-H JTAG in combination with OpenOCD 0.8.0.
First we will need to install OpenOCD.

  1. apt-get install libftdi-dev
  2. Download and extract OpenOCD 0.8.0
  3. run ./configure
  4. run make && make install

Continue reading “OpenOCD and the iMX6”

Vivante MMU v1

I did spend quite some time the last days to figure out how the MMU v1 could work and what all the code in the v4 Kernel sources does. It took quite some time and a little hint from Russel to finally understand it. So lets start with the technical details.

The MMU uses a page table with a maximum size of 256KB. Where each Page Table Entry (PTE) is 4 byte long. The used page size is 4K and can not be changed via some registers etc.
Lets have a look at the bit layout of a PTE.

What does all that code in the v4 driver? In the end it turned out to be a ‘simple’ memory manager. All the code is needed to keep track of which pages are mapped into the GPU address area. Index 0 of the big page table array maps directly to GPU address 0x80000000 and index 1 maps directly to 0x80001000. We can quite easily map Linux kernel pages into the address range of the GPU.

The solution I am working on will use drm_mm as memory manager and the iommu framework to keep the page table in sync.

The next steps for etnaviv

I did spend some time to find the cause for the rendering issues during running some egls2 demos. The fix is a simple one-liner and I would say that GC8xx and GC2000 are ‘equal’ now. That means general work on etnaviv can start now. Currently I am looking in different problem zones and where to start.

  1. Update mesa fork
  2. Start working on an improved compiler
  3. Start working on an kernel interface

I think that Rob will start soon on the kernel interface and the mesa update should be doable during some hours. So I think the next big and important step is to improve the compiler. What should I say… I have basic compiler understanding, did wrote a compiler and VM during my study… thats it. I have never written a single line of glsl and I do not completely understand the Vivante GPU. So a perfect starting point for doing some hacking 🙂 The success rate will be quite low and I hope to not lose my motivation too soon.