libgles-omap3: add a guard in init script
[openembedded.git] / recipes / powervr-drivers / files / rc.pvr
1 #!/bin/sh
2 PATH=$PATH:/usr/sbin
3
4 BITSPERPIXEL="$(fbset | grep geom | awk '{print $6}')"
5 YRES="$(fbset | grep geom | awk '{print $3}')"
6
7 unload_driver()
8 {
9         rmmod bufferclass_ti 2>/dev/null
10         rmmod omaplfb 2>/dev/null
11         rmmod pvrsrvkm 2>/dev/null
12 }
13
14 load_driver()
15 {
16         if lsmod | grep -q omaplfb; then
17                 echo "PVR driver is already loaded"
18                 return 0
19         fi
20
21         if test -f /etc/powervr-kmodver; then
22                 version=`cat /etc/powervr-kmodver`
23         fi
24         insmod /lib/modules/$(uname -r)/kernel/drivers/gpu/pvr/$version/pvrsrvkm.ko
25         insmod /lib/modules/$(uname -r)/kernel/drivers/gpu/pvr/$version/omaplfb.ko
26         bc_ko="/lib/modules/$(uname -r)/kernel/drivers/gpu/pvr/$version/bufferclass_ti.ko"
27         if test -f "$bc_ko"; then
28                 insmod $bc_ko
29         fi
30
31         if ! lsmod | grep -q pvrsrvkm; then
32                 echo "pvrsrvkm failed to load"
33                 exit 1
34         fi
35
36         test -e /dev/pvrsrvkm || sleep 1
37         if ! test -e /dev/pvrsrvkm; then
38                 echo "pvrsrvkm dev file did not appear"
39                 exit 1
40         fi
41
42         chmod 666 /dev/pvrsrvkm
43 }
44
45 # $1 - full pathname, like /usr/lib/ES5.0/libGLESv2.so.1.4.14.2616
46 install_lib()
47 {
48         base=`basename "$1"`
49         baseso=`echo "$base" | sed -e 's:\(lib.*.so\).*:\1:;s/[[:blank:]]//g'`
50         test -z "${baseso}" && return
51
52         rm /usr/lib/${baseso}*
53         cp -a $1 /usr/lib/
54
55         cd /usr/lib
56         ln -fs $base ${baseso}
57         ln -fs $base ${baseso}.1
58         cd $OLDPWD
59 }
60
61 if [ "$1" = "" ]; then
62         echo PVR-INIT: Please use start, stop, or restart.
63         exit 1
64 fi
65
66 if [ "$1" = "stop" -o  "$1" = "restart" ]; then
67         echo Stopping PVR
68         unload_driver
69 fi
70
71 if [ "$1" = "stop" ]; then
72         exit 0
73 fi
74
75 # Set RGBA ordering to something the drivers like
76 if [ "$BITSPERPIXEL" = "32" ] ; then
77         fbset -rgba 8/16,8/8,8/0,8/24
78 fi
79
80 # Try to enable triple buffering when there's enough VRAM
81 fbset -vyres $(expr $YRES \* 3) 
82
83         echo Starting PVR
84
85         touch /etc/powervr-esrev
86         SAVED_ESREVISION="$(cat /etc/powervr-esrev)"
87
88         devmem2 0x48004B48 w 0x2 > /dev/null
89         devmem2 0x48004B10 w 0x1 > /dev/null
90         devmem2 0x48004B00 w 0x2 > /dev/null
91
92         ES_REVISION="$(devmem2 0x50000014 | sed -e s:0x10205:5: -e s:0x10201:3: -e s:0x10003:2: | tail -n1 | awk -F': ' '{print $2}')"
93
94         # enable hardware supervised domain power state transition - makes suspend work
95         devmem2 0x48004B48 w 0x3 > /dev/null
96
97         if [ "${ES_REVISION}" != "${SAVED_ESREVISION}" -o ! -e /etc/powervr-kmodver ] ; then
98                 sdkver=`echo /usr/lib/ES${ES_REVISION}.0/libGLESv2.so.1.* | sed -e 's:.*lib.*.so.\(.*\).*:\1:'`
99                 echo -n "Performing SGX fixup for"
100                 echo " ES${ES_REVISION}.x (${sdkver})"
101                 for lib in /usr/lib/ES${ES_REVISION}.0/*.so*; do
102                         install_lib $lib
103                 done
104                 cp -a /usr/bin/ES${ES_REVISION}.0/* /usr/bin/
105                 echo "${ES_REVISION}" > /etc/powervr-esrev
106
107                 # if /etc/powervr-kmodver is available, trust it, else figure out something
108                 if ! test -e /etc/powervr-kmodver; then
109                         touch /etc/powervr-kmodver
110                         # for 1.4.14.2616 there are 2 incompatible modules,
111                         # assume the default one, which is selected by empty powervr-kmodver
112                         if [ "${sdkver}" != "1.4.14.2616" ]; then
113                                 echo "Switching driver to ${sdkver}"
114                                 echo "${sdkver}" > /etc/powervr-kmodver
115                         fi
116                 fi
117                 sync
118         fi
119
120         # set up optional armhf libs if needed
121         if test -d /usr/lib/arm-linux-gnueabihf/ES${ES_REVISION}.0; then
122                 touch /etc/powervr-esrev-armhf
123                 SAVED_ESREVISION_HF="$(cat /etc/powervr-esrev-armhf)"
124
125                 if [ "${ES_REVISION}" != "${SAVED_ESREVISION_HF}" ] ; then
126                         echo -n "Performing SGX armhf fixup for"
127                         echo " ES${ES_REVISION}.x"
128                         for lib in /usr/lib/arm-linux-gnueabihf/ES${ES_REVISION}.0/*.so*; do
129                                 cp -a $lib /usr/lib/arm-linux-gnueabihf/
130                         done
131                         echo "${ES_REVISION}" > /etc/powervr-esrev-armhf
132                 fi
133         fi
134
135         load_driver
136
137         if test -x /usr/bin/pvrsrvinit; then
138                 /usr/bin/pvrsrvinit
139         elif test -x /usr/bin/pvrsrvctl; then
140                 /usr/bin/pvrsrvctl --start --no-module
141         else
142                 echo "Error: missing /usr/bin/pvrsrv* or bad permissions"
143         fi