diff mbox

[v2,resend,1/3] add odroid mali GL support.

Message ID 20160526224743.70f1c378@itchy
State Rejected
Headers show

Commit Message

Eric Le Bihan May 26, 2016, 8:47 p.m. UTC
Le Wed, 25 May 2016 20:46:30 +0300,
Dagg <daggs@gmx.com> a écrit :

> add GL support to the odroid c2 boards
> 
> Signed-off-by: Dagg <daggs@gmx.com>

I took the liberty to update this patch as follow:

1. extract the commands from the sysv service from first patch to an
helper tool (odroid-setup-display).
2. add sys/systemd services installation according to Buildroot standards.
3. fix installation of the libs on the target.

So, now you can drop the first patch, as there is no need anymore for a
dedicated fs overlay.

I tested it on a systemd-based firmware on my odroidc2 device. To spawn
a tty on the screen, the following commands should be executed on the
target:

```
cd /etc/systemd/system/getty.target.wants/
ln -s ../../../../lib/systemd/system/getty@.service getty@tty0.service
reboot
```

Regards,

--
ELB
diff mbox

Patch

From c5361ec7b484e629b5bbc58b4555f904ed4dd5cc Mon Sep 17 00:00:00 2001
From: Dagg <daggs@gmx.com>
Date: Wed, 25 May 2016 20:46:30 +0300
Subject: [PATCH] odroid-mali: new package

This new package adds EGL/GLES support for the ODROID-C2 board.

[Eric:
  - add helper program to set up display (frame buffer)
  - add sysv/systemd service for setting up display
  - fix libraries installation on the target]

Signed-off-by: Dagg <daggs@gmx.com>
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 package/Config.in                          |   1 +
 package/odroid-mali/Config.in              |  19 ++++++
 package/odroid-mali/S50odroid-display      |  20 ++++++
 package/odroid-mali/egl.pc                 |  10 +++
 package/odroid-mali/glesv2.pc              |  10 +++
 package/odroid-mali/odroid-display.service |   9 +++
 package/odroid-mali/odroid-mali.hash       |   1 +
 package/odroid-mali/odroid-mali.mk         |  70 ++++++++++++++++++++
 package/odroid-mali/odroid-setup-display   | 103 +++++++++++++++++++++++++++++
 9 files changed, 243 insertions(+)
 create mode 100644 package/odroid-mali/Config.in
 create mode 100755 package/odroid-mali/S50odroid-display
 create mode 100644 package/odroid-mali/egl.pc
 create mode 100644 package/odroid-mali/glesv2.pc
 create mode 100644 package/odroid-mali/odroid-display.service
 create mode 100644 package/odroid-mali/odroid-mali.hash
 create mode 100644 package/odroid-mali/odroid-mali.mk
 create mode 100755 package/odroid-mali/odroid-setup-display

diff --git a/package/Config.in b/package/Config.in
index 9d668bf..6c6a562 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -418,6 +418,7 @@  endif
 	source "package/nvidia-driver/Config.in"
 	source "package/nvidia-tegra23/Config.in"
 	source "package/nvme/Config.in"
+	source "package/odroid-mali/Config.in"
 	source "package/ofono/Config.in"
 	source "package/ola/Config.in"
 	source "package/on2-8170-modules/Config.in"
diff --git a/package/odroid-mali/Config.in b/package/odroid-mali/Config.in
new file mode 100644
index 0000000..65b1d4f
--- /dev/null
+++ b/package/odroid-mali/Config.in
@@ -0,0 +1,19 @@ 
+config BR2_PACKAGE_ODROID_MALI
+	bool "odroid-mali"
+	select BR2_PACKAGE_HAS_LIBEGL
+	select BR2_PACKAGE_HAS_LIBGLES
+	select BR2_PACKAGE_FBSET
+	depends on BR2_TOOLCHAIN_USES_GLIBC
+	depends on BR2_aarch64
+	help
+	  Install the ARM Mali drivers for odroid based systems.
+
+	  http://github.com/linux-odroid/odroid-mali
+
+if BR2_PACKAGE_ODROID_MALI
+config BR2_PACKAGE_PROVIDES_LIBEGL
+	default "odroid-mali"
+
+config BR2_PACKAGE_PROVIDES_LIBGLES
+	default "odroid-mali"
+endif
diff --git a/package/odroid-mali/S50odroid-display b/package/odroid-mali/S50odroid-display
new file mode 100755
index 0000000..e0ac227
--- /dev/null
+++ b/package/odroid-mali/S50odroid-display
@@ -0,0 +1,20 @@ 
+#!/bin/sh
+#
+# Set up frame buffer
+#
+
+case "$1" in
+    start)
+        echo "Setting up display..."
+        /usr/sbin/odroid-setup-display
+        ;;
+    stop)
+        ;;
+    restart|reload)
+        ;;
+    *)
+        echo "Usage: $0 {start|stop|restart}"
+        exit 1
+esac
+
+exit $?
diff --git a/package/odroid-mali/egl.pc b/package/odroid-mali/egl.pc
new file mode 100644
index 0000000..5f79b71
--- /dev/null
+++ b/package/odroid-mali/egl.pc
@@ -0,0 +1,10 @@ 
+prefix=/usr
+exec_prefix=/usr
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: egl
+Description: Amlogic implementation of EGL
+Version: 0.99
+Libs: -L${libdir} -lEGL -lGLESv2
+Cflags: -I${includedir}/ 
diff --git a/package/odroid-mali/glesv2.pc b/package/odroid-mali/glesv2.pc
new file mode 100644
index 0000000..7dfb286
--- /dev/null
+++ b/package/odroid-mali/glesv2.pc
@@ -0,0 +1,10 @@ 
+prefix=/usr
+exec_prefix=/usr
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: glesv2
+Description: Amlogic implementation of OpenGL ESv2
+Version: 0.99
+Libs: -L${libdir} -lGLESv2
+Cflags: -I${includedir}/
diff --git a/package/odroid-mali/odroid-display.service b/package/odroid-mali/odroid-display.service
new file mode 100644
index 0000000..6eaa143
--- /dev/null
+++ b/package/odroid-mali/odroid-display.service
@@ -0,0 +1,9 @@ 
+[Unit]
+Description=ODROID Display
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/odroid-setup-display
+
+[Install]
+WantedBy=multi-user.target
diff --git a/package/odroid-mali/odroid-mali.hash b/package/odroid-mali/odroid-mali.hash
new file mode 100644
index 0000000..792d30c
--- /dev/null
+++ b/package/odroid-mali/odroid-mali.hash
@@ -0,0 +1 @@ 
+sha256 1cddeb6990a9446339abde79ca1d01a8480b98cf107019f0847390b9549d90cc  opengl-meson-gxbb-r5p1-01rel0.tar.xz
diff --git a/package/odroid-mali/odroid-mali.mk b/package/odroid-mali/odroid-mali.mk
new file mode 100644
index 0000000..a563443
--- /dev/null
+++ b/package/odroid-mali/odroid-mali.mk
@@ -0,0 +1,70 @@ 
+################################################################################
+#
+# odroid-mali
+#
+################################################################################
+
+ODROID_MALI_VERSION = $(ODROID_DRIVER_VERSION)
+ODROID_MALI_TARBALL = opengl-meson-gxbb-r5p1-01rel0.tar.xz
+ODROID_MALI_SITE = http://sources.openelec.tv/devel
+ODROID_MALI_SOURCE = opengl-meson-gxbb-r5p1-01rel0.tar.xz
+
+ODROID_MALI_INSTALL_STAGING = YES
+ODROID_MALI_PROVIDES = libegl libgles
+
+define ODROID_MALI_INSTALL_LIBS
+	$(INSTALL) -D -m 0755 $(@D)/usr/lib/libMali.so $(1)/lib
+
+	cd $(1)/lib
+	ln -sf libMali.so $(1)/lib/libEGL.so
+	ln -sf libMali.so $(1)/lib/libGLESv1_CM.so
+	ln -sf libMali.so $(1)/lib/libGLESv2.so
+
+	ln -sf libEGL.so $(1)/lib/libEGL.so.1
+	ln -sf libEGL.so $(1)/lib/libEGL.so.1.4
+	ln -sf libGLESv1_CM.so $(1)/lib/libGLESv1_CM.so.1
+	ln -sf libGLESv1_CM.so $(1)/lib/libGLESv1_CM.so.1.1
+	ln -sf libGLESv2.so $(1)/lib/libGLESv2.so.2
+	ln -sf libGLESv2.so $(1)/lib/libGLESv2.so.2.0
+endef
+
+define ODROID_MALI_INSTALL_HDRS
+	mkdir -p $(@D)/usr/include
+	cp -R $(@D)/usr/include/* $(1)/include
+endef
+
+define ODROID_MALI_INSTALL_PCS
+	$(INSTALL) -D -m 0644 package/odroid-mali/egl.pc $(1)/usr/lib/pkgconfig/egl.pc
+	$(INSTALL) -D -m 0644 package/odroid-mali/glesv2.pc $(1)/usr/lib/pkgconfig/glesv2.pc
+endef
+
+define ODROID_MALI_INSTALL_TOOLS
+	$(INSTALL) -D -m 0755 package/odroid-mali/odroid-setup-display \
+		$(1)/sbin/odroid-setup-display
+endef
+
+define ODROID_MALI_INSTALL_STAGING_CMDS
+	$(call ODROID_MALI_INSTALL_LIBS,$(STAGING_DIR)/usr)
+	$(call ODROID_MALI_INSTALL_HDRS,$(STAGING_DIR)/usr)
+	$(call ODROID_MALI_INSTALL_PCS,$(STAGING_DIR)/usr)
+endef
+
+define ODROID_MALI_INSTALL_TARGET_CMDS
+	$(call ODROID_MALI_INSTALL_LIBS,$(TARGET_DIR)/usr)
+	$(call ODROID_MALI_INSTALL_TOOLS,$(TARGET_DIR)/usr)
+endef
+
+define ODROID_MALI_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 0644 package/odroid-mali/odroid-display.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/odroid-display.service
+	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+	ln -fs ../../../../usr/lib/systemd/system/odroid-display.service \
+		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/odroid-display.service
+endef
+
+define ODROID_MALI_INSTALL_INIT_SYSV
+	$(INSTALL) -D -m 0755 package/odroid-mali/S50odroid-display \
+		$(TARGET_DIR)/etc/init.d/S50odroid-display
+endef
+
+$(eval $(generic-package))
diff --git a/package/odroid-mali/odroid-setup-display b/package/odroid-mali/odroid-setup-display
new file mode 100755
index 0000000..68f8c6c
--- /dev/null
+++ b/package/odroid-mali/odroid-setup-display
@@ -0,0 +1,103 @@ 
+#!/bin/sh
+
+export mode=`cat /proc/cmdline | sed -rn 's/.+(hdmimode=)(\S+)\s.+/\2/p'`
+export bpp=`cat /proc/cmdline | sed -rn 's/.+(m_bpp=)(\S+)\s.+/\2/p'`
+
+common_display_setup() {
+	M="0 0 $(($X - 1)) $(($Y - 1))"
+	Y_VIRT=$(($Y * 2))
+	fbset -fb /dev/fb0 -g $X $Y $X $Y_VIRT $bpp
+	fbset -fb /dev/fb1 -g 32 32 32 32 32
+	echo $mode > /sys/class/display/mode
+	echo 0 > /sys/class/graphics/fb0/free_scale
+	echo 1 > /sys/class/graphics/fb0/freescale_mode
+	echo $M > /sys/class/graphics/fb0/free_scale_axis
+	echo $M > /sys/class/graphics/fb0/window_axis
+	echo 0 > /sys/class/graphics/fb1/free_scale
+}
+
+case $mode in
+	480*) 
+		export X=720 
+		export Y=480 
+		;;
+	576*)
+		export X=720
+		export Y=576
+		;;
+	720p*)
+		export X=1280
+		export Y=720
+		;;
+	1080*)
+		export X=1920
+		export Y=1080
+		;;
+	2160p*)
+		export X=3840
+		export Y=2160
+		;;
+	smpte24hz*)
+		export X=3840
+		export Y=2160
+		;;
+	640x480p60hz*)
+		export X=640
+		export Y=480
+		;;
+	800x480p60hz*)
+		export X=800
+		export Y=480
+		;;
+	800x600p60hz*)
+		export X=800
+		export Y=600
+		;;
+	1024x600p60hz*)
+		export X=1024
+		export Y=600
+		;;
+	1024x768p60hz*)
+		export X=1024
+		export Y=768
+		;;
+	1280x800p60hz*)
+		export X=1280
+		export Y=800
+		;;
+	1280x1024p60hz*)
+		export X=1280
+		export Y=1024
+		;;
+	1360x768p60hz*)
+		export X=1360
+		export Y=768
+		;;
+	1366x768p60hz*)
+		export X=1366
+		export Y=768
+		;;
+	1440x900p60hz*)
+		export X=1440
+		export Y=900
+		;;
+	1600x900p60hz*)
+		export X=1600
+		export Y=900
+		;;
+	1680x1050p60hz*)
+		export X=1680
+		export Y=1050
+		;;
+	1920x1200p60hz*)
+		export X=1920
+		export Y=1200
+		;;
+esac
+
+common_display_setup
+
+echo 0 > /sys/class/graphics/fb0/blank
+echo 0 > /sys/class/graphics/fb1/blank
+
+exit $?
-- 
2.4.11