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.
uberspace-prepare-certificate -k /home/$USER/.config/letsencrypt/live/www.christian-gmeiner.info/privkey.pem -c ~/.config/letsencrypt/live/www.christian-gmeiner.info/cert.pem
There is a need to modify the lets encrypt ini file to allow automatic renew.
# To prevent being forced to agree manually to the terms
agree-dev-preview = True
agree-tos = True
# Automatically renew the certificate
renew-by-default = True
Last Friday I got kmscube successfully running with mesa and the new etnaviv DRM kernel driver. At this time I got it not really pixel perfect and I spend some nights to get it fixed. It turns out that I need a small mesa hack to get the rendering correct.
Continue reading “etnaviv: kmscube”
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”
Today I did a fresh installation of Fedora on my Chromebook and need to setup git send-email. Usually I need to do this step once every 1-2 years I thought it might be a good idea to write it down.
Continue reading “Configure git send-email for gmail”
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
It took me some time to rework the device tree bindings but it looks like it starts to work!
#address-cells = <1>;
#size-cells = <1>;
compatible = "vivante,gccore";
compatible = "vivante,vivante-gpu-2d";
reg = <0x00134000 0x4000>;
clock-names = "core", "bus";
clocks = <&clks 121>, <&clks 26>;
interrupts = <0 10 0x04>;
compatible = "vivante,vivante-gpu-3d";
reg = <0x00130000 0x4000>;
clock-names = "core", "shader", "bus";
clocks = <&clks 122>, <&clks 74>, <&clks 27>;
interrupts = <0 9 0x04>;
Continue reading “Vivante meets devicetree”
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.
- apt-get install libftdi-dev
- Download and extract OpenOCD 0.8.0
- run ./configure
- run make && make install
Continue reading “OpenOCD and the iMX6”
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.
Today I wanted to debug a Qt based application within QtCreator but failed. After a quick google I found the solution:
sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope
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.
- Update mesa fork
- Start working on an improved compiler
- 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.