summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/checksums.ini4
-rw-r--r--conf/machine/include/zaurus-kernel.inc2
-rw-r--r--recipes/linux/linux-omap-2.6.29/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch287
-rw-r--r--recipes/quake/files/quake3_makefile.patch29
-rw-r--r--recipes/quake/quake3-pandora-gles_git.bb39
-rw-r--r--recipes/udev/udev_141.bb8
-rw-r--r--recipes/xorg-driver/xf86-video-geode/0001-probe-GPIO-device-before-asking-for-base_addr.patch30
-rw-r--r--recipes/xorg-driver/xf86-video-geode/0002-GX-fix-RandR-to-properly-use-dixSetPrivate.patch56
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.11.2.bb5
9 files changed, 459 insertions, 1 deletions
diff --git a/conf/checksums.ini b/conf/checksums.ini
index 964f72855d..e07f929acd 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -25382,6 +25382,10 @@ sha256=d03eb7e5b47e2f1e1a665700f4e22d15651dc949196b0ec880f0d63cafb6814c
md5=1dbede8f6393edfe6c1ecab2f754b3b2
sha256=d70c198cde981c3a53b1c41b717dea4bbf1d397d82957f584c641bb5fd02c82d
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.11.2.tar.bz2]
+md5=4c652ecba772f705296b8e52d746857c
+sha256=2d252847a410636b55bf80900d9432ca438775f70377ce81311282a2d12853b5
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-geode-2.8.0.tar.bz2]
md5=a2b9c70a32b0a6436d837d67fa7aae18
sha256=f0b68171dd4256c927fbee91ecf84fa28c409b5b6b39cbf47eaa48fd73db305f
diff --git a/conf/machine/include/zaurus-kernel.inc b/conf/machine/include/zaurus-kernel.inc
index f63af74405..415f8a4d68 100644
--- a/conf/machine/include/zaurus-kernel.inc
+++ b/conf/machine/include/zaurus-kernel.inc
@@ -11,6 +11,8 @@ MACHINE_KERNEL_PR = "r11"
MACHINE_KERNEL_PR_collie = "r8"
MACHINE_KERNEL_PR_tosa = "r4"
+MACHINE_KERNEL_PR_pn-linux-kexecboot = "r12"
+
KERNEL_IMAGE_MAXSIZE = "1294336"
KERNEL_IMAGE_MAXSIZE_collie = "1048576"
diff --git a/recipes/linux/linux-omap-2.6.29/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch b/recipes/linux/linux-omap-2.6.29/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch
new file mode 100644
index 0000000000..7852f0afdb
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.29/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch
@@ -0,0 +1,287 @@
+From 8a7643b09856f4f661403dcedbe0455b3cbeeea9 Mon Sep 17 00:00:00 2001
+From: Steven Newbury <s_j_newbury@yahoo.co.uk>
+Date: Fri, 22 May 2009 14:25:40 +0200
+Subject: [PATCH] implement TIF_RESTORE_SIGMASK support and enable the related
+ syscalls:
+
+pselect6
+ppoll
+epoll_pwait
+
+Based on http://www.spinics.net/lists/arm-kernel/msg38114.html
+---
+ arch/arm/include/asm/thread_info.h | 2 +
+ arch/arm/include/asm/unistd.h | 7 ++-
+ arch/arm/kernel/calls.S | 6 +-
+ arch/arm/kernel/signal.c | 90 +++++++++++++++---------------------
+ 4 files changed, 46 insertions(+), 59 deletions(-)
+
+diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
+index 4f88482..2cf0917 100644
+--- a/arch/arm/include/asm/thread_info.h
++++ b/arch/arm/include/asm/thread_info.h
+@@ -136,6 +136,7 @@ extern void vfp_sync_state(struct thread_info *thread);
+ #define TIF_SIGPENDING 0
+ #define TIF_NEED_RESCHED 1
+ #define TIF_SYSCALL_TRACE 8
++#define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal */
+ #define TIF_POLLING_NRFLAG 16
+ #define TIF_USING_IWMMXT 17
+ #define TIF_MEMDIE 18
+@@ -144,6 +145,7 @@ extern void vfp_sync_state(struct thread_info *thread);
+ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
+ #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
+ #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
++#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
+ #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
+ #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
+ #define _TIF_FREEZE (1 << TIF_FREEZE)
+diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h
+index 94cc58e..cd1eaa0 100644
+--- a/arch/arm/include/asm/unistd.h
++++ b/arch/arm/include/asm/unistd.h
+@@ -360,8 +360,8 @@
+ #define __NR_readlinkat (__NR_SYSCALL_BASE+332)
+ #define __NR_fchmodat (__NR_SYSCALL_BASE+333)
+ #define __NR_faccessat (__NR_SYSCALL_BASE+334)
+- /* 335 for pselect6 */
+- /* 336 for ppoll */
++#define __NR_pselect6 (__NR_SYSCALL_BASE+335)
++#define __NR_ppoll (__NR_SYSCALL_BASE+336)
+ #define __NR_unshare (__NR_SYSCALL_BASE+337)
+ #define __NR_set_robust_list (__NR_SYSCALL_BASE+338)
+ #define __NR_get_robust_list (__NR_SYSCALL_BASE+339)
+@@ -372,7 +372,7 @@
+ #define __NR_vmsplice (__NR_SYSCALL_BASE+343)
+ #define __NR_move_pages (__NR_SYSCALL_BASE+344)
+ #define __NR_getcpu (__NR_SYSCALL_BASE+345)
+- /* 346 for epoll_pwait */
++#define __NR_epoll_pwait (__NR_SYSCALL_BASE+346)
+ #define __NR_kexec_load (__NR_SYSCALL_BASE+347)
+ #define __NR_utimensat (__NR_SYSCALL_BASE+348)
+ #define __NR_signalfd (__NR_SYSCALL_BASE+349)
+@@ -430,6 +430,7 @@
+ #define __ARCH_WANT_SYS_SIGPENDING
+ #define __ARCH_WANT_SYS_SIGPROCMASK
+ #define __ARCH_WANT_SYS_RT_SIGACTION
++#define __ARCH_WANT_SYS_RT_SIGSUSPEND
+
+ #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
+ #define __ARCH_WANT_SYS_TIME
+diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
+index 1680e9e..534000d 100644
+--- a/arch/arm/kernel/calls.S
++++ b/arch/arm/kernel/calls.S
+@@ -344,8 +344,8 @@
+ CALL(sys_readlinkat)
+ CALL(sys_fchmodat)
+ CALL(sys_faccessat)
+-/* 335 */ CALL(sys_ni_syscall) /* eventually pselect6 */
+- CALL(sys_ni_syscall) /* eventually ppoll */
++/* 335 */ CALL(sys_pselect6)
++ CALL(sys_ppoll)
+ CALL(sys_unshare)
+ CALL(sys_set_robust_list)
+ CALL(sys_get_robust_list)
+@@ -355,7 +355,7 @@
+ CALL(sys_vmsplice)
+ CALL(sys_move_pages)
+ /* 345 */ CALL(sys_getcpu)
+- CALL(sys_ni_syscall) /* eventually epoll_pwait */
++ CALL(sys_epoll_pwait)
+ CALL(sys_kexec_load)
+ CALL(sys_utimensat)
+ CALL(sys_signalfd)
+diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
+index 80b8b5c..7645048 100644
+--- a/arch/arm/kernel/signal.c
++++ b/arch/arm/kernel/signal.c
+@@ -47,57 +47,23 @@ const unsigned long sigreturn_codes[7] = {
+ MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN,
+ };
+
+-static int do_signal(sigset_t *oldset, struct pt_regs * regs, int syscall);
++static void do_signal(struct pt_regs * regs, int syscall);
+
+ /*
+ * atomically swap in the new signal mask, and wait for a signal.
+ */
+-asmlinkage int sys_sigsuspend(int restart, unsigned long oldmask, old_sigset_t mask, struct pt_regs *regs)
++asmlinkage int sys_sigsuspend(int restart, unsigned long oldmask, old_sigset_t mask)
+ {
+- sigset_t saveset;
+-
+ mask &= _BLOCKABLE;
+ spin_lock_irq(&current->sighand->siglock);
+- saveset = current->blocked;
++ current->saved_sigmask = current->blocked;
+ siginitset(&current->blocked, mask);
+ recalc_sigpending();
+ spin_unlock_irq(&current->sighand->siglock);
+- regs->ARM_r0 = -EINTR;
+-
+- while (1) {
+- current->state = TASK_INTERRUPTIBLE;
+- schedule();
+- if (do_signal(&saveset, regs, 0))
+- return regs->ARM_r0;
+- }
+-}
+-
+-asmlinkage int
+-sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs *regs)
+-{
+- sigset_t saveset, newset;
+-
+- /* XXX: Don't preclude handling different sized sigset_t's. */
+- if (sigsetsize != sizeof(sigset_t))
+- return -EINVAL;
+-
+- if (copy_from_user(&newset, unewset, sizeof(newset)))
+- return -EFAULT;
+- sigdelsetmask(&newset, ~_BLOCKABLE);
+-
+- spin_lock_irq(&current->sighand->siglock);
+- saveset = current->blocked;
+- current->blocked = newset;
+- recalc_sigpending();
+- spin_unlock_irq(&current->sighand->siglock);
+- regs->ARM_r0 = -EINTR;
+-
+- while (1) {
+- current->state = TASK_INTERRUPTIBLE;
+- schedule();
+- if (do_signal(&saveset, regs, 0))
+- return regs->ARM_r0;
+- }
++ current->state = TASK_INTERRUPTIBLE;
++ schedule();
++ set_thread_flag(TIF_RESTORE_SIGMASK);
++ return -ERESTARTNOHAND;
+ }
+
+ asmlinkage int
+@@ -290,7 +256,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
+
+ badframe:
+ force_sig(SIGSEGV, current);
+- return 0;
++ return -EFAULT;
+ }
+
+ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
+@@ -325,7 +291,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
+
+ badframe:
+ force_sig(SIGSEGV, current);
+- return 0;
++ return -EFAULT;
+ }
+
+ static int
+@@ -541,7 +507,7 @@ static inline void restart_syscall(struct pt_regs *regs)
+ /*
+ * OK, we're invoking a handler
+ */
+-static void
++static int
+ handle_signal(unsigned long sig, struct k_sigaction *ka,
+ siginfo_t *info, sigset_t *oldset,
+ struct pt_regs * regs, int syscall)
+@@ -592,7 +558,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
+
+ if (ret != 0) {
+ force_sigsegv(sig, tsk);
+- return;
++ return ret;
+ }
+
+ /*
+@@ -606,6 +572,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
+ recalc_sigpending();
+ spin_unlock_irq(&tsk->sighand->siglock);
+
++ return ret;
+ }
+
+ /*
+@@ -617,11 +584,12 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
+ * the kernel can handle, and then we build all the user-level signal handling
+ * stack-frames in one go after that.
+ */
+-static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
++static void do_signal(struct pt_regs *regs, int syscall)
+ {
+ struct k_sigaction ka;
+ siginfo_t info;
+ int signr;
++ sigset_t *oldset;
+
+ /*
+ * We want the common case to go fast, which
+@@ -630,18 +598,29 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
+ * if so.
+ */
+ if (!user_mode(regs))
+- return 0;
++ return;
+
+ if (try_to_freeze())
+ goto no_signal;
+
+ single_step_clear(current);
+
++ if (test_thread_flag(TIF_RESTORE_SIGMASK))
++ oldset = &current->saved_sigmask;
++ else
++ oldset = &current->blocked;
++
+ signr = get_signal_to_deliver(&info, &ka, regs, NULL);
+ if (signr > 0) {
+- handle_signal(signr, &ka, &info, oldset, regs, syscall);
++ if (handle_signal(signr, &ka, &info, oldset, regs, syscall) == 0) {
++ /* a signal was successfully delivered; the saved
++ * sigmask will have been stored in the signal frame,
++ * and will be restored by sigreturn, so we can simply
++ * clear the TIF_RESTORE_SIGMASK flag */
++ clear_thread_flag(TIF_RESTORE_SIGMASK);
++ }
+ single_step_set(current);
+- return 1;
++ return;
+ }
+
+ no_signal:
+@@ -665,7 +644,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
+ usp = (u32 __user *)regs->ARM_sp;
+
+ /*
+- * Either we supports OABI only, or we have
++ * Either we support OABI only, or we have
+ * EABI with the OABI compat layer enabled.
+ * In the later case we don't know if user
+ * space is EABI or not, and if not we must
+@@ -695,12 +674,17 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
+ }
+ }
+ single_step_set(current);
+- return 0;
++ /* if there's no signal to deliver, we just put the saved sigmask
++ back. */
++ if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
++ clear_thread_flag(TIF_RESTORE_SIGMASK);
++ sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
++ }
+ }
+
+ asmlinkage void
+ do_notify_resume(struct pt_regs *regs, unsigned int thread_flags, int syscall)
+ {
+- if (thread_flags & _TIF_SIGPENDING)
+- do_signal(&current->blocked, regs, syscall);
++ if (thread_flags & (_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK))
++ do_signal(regs, syscall);
+ }
+--
+1.6.2.4
+
diff --git a/recipes/quake/files/quake3_makefile.patch b/recipes/quake/files/quake3_makefile.patch
new file mode 100644
index 0000000000..b9e94577b2
--- /dev/null
+++ b/recipes/quake/files/quake3_makefile.patch
@@ -0,0 +1,29 @@
+--- /tmp/Makefile 2009-05-25 14:59:16.000000000 +0530
++++ git/pandora/Makefile 2009-05-25 15:07:46.000000000 +0530
+@@ -64,14 +64,14 @@ ARFLAGS=ar rv
+ DLL_ONLY=true
+ ARCH=arm
+ VENDOR=dec
+- BASE_CFLAGS = -mcpu=cortex-a8 -mtune=cortex-a8 -march=armv7-a -mfloat-abi=softfp \
+- -mfpu=neon -ftree-vectorize -ffast-math -fomit-frame-pointer \
++ BASE_CFLAGS = -O3 -mtune=cortex-a8 -march=armv7-a -mfloat-abi=softfp \
++ -mfpu=neon -ffast-math -fomit-frame-pointer \
+ -fno-strict-aliasing -fsingle-precision-constant \
+ -I$(PNDSDK)/usr/include -DIPHONE -DBOTLIB -DDLL_ONLY -DC_ONLY -D__arm__ -DSHLIB_SUFFIX="\"so\"" -D_PANDORA_
+
+ THREAD_LDFLAGS=-lpthread
+
+-LDFLAGS=-L$(PNDSDK)/usr/lib -ldl -lm -lX11 -lXau -lXdmcp -lXxf86vm -lXext
++LDFLAGS+=-L$(PNDSDK)/usr/lib -ldl -lm -lX11 -lXau -lXdmcp -lXxf86vm -lXext
+
+ GL_CFAGS = -I$(PNDSDK)/usr/X11R6/include
+
+@@ -126,7 +126,7 @@ DO_NASM=nasm -f elf -o $@ $<
+ DO_DED_CC=$(CC) -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $<
+
+ #### DEFAULT TARGET
+-default:build_debug
++default:build_release
+
+ debug: build_debug
+ release: build_release
diff --git a/recipes/quake/quake3-pandora-gles_git.bb b/recipes/quake/quake3-pandora-gles_git.bb
new file mode 100644
index 0000000000..d468d34a44
--- /dev/null
+++ b/recipes/quake/quake3-pandora-gles_git.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "OpenGL ES quake3 port to the omap3-pandora"
+LICENSE = "GPL"
+
+SRCREV = "39d08bf6e81f7cdc29380858dfe671b0722332a3"
+PR_append = "+gitr${SRCREV}"
+PV = "0.0"
+
+DEPENDS = "virtual/libsdl libgles-omap3"
+
+SRC_URI = "git://github.com/Cpasjuste/quake3_pandora_gles.git;branch=master;protocol=git \
+ file://quake3_makefile.patch;patch=1 \
+"
+S = "${WORKDIR}/git"
+
+export PNDSDK="${STAGING_DIR}"
+
+do_compile() {
+ cd pandora
+ sed -i -e s:=arm-none-linux-gnueabi-:=${TARGET_PREFIX}:g Makefile
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -d ${D}/${libdir}/quake3/baseq3/
+
+ install -m 0755 ${S}/pandora/release${TARGET_ARCH}/baseq3/*.so ${D}/${libdir}/quake3/baseq3
+ install -m 0755 ${S}/pandora/release${TARGET_ARCH}/quake3 ${D}/${libdir}/quake3
+
+ install -m 0755 ${S}/pandora/autoexec.cfg ${D}/${libdir}/quake3/baseq3
+ install -m 0755 ${S}/pandora/autoexec_high_detail.cfg ${D}/${libdir}/quake3
+ install -m 0755 ${S}/pandora/autoexec_medium_detail.cfg ${D}/${libdir}/quake3
+ install -m 0755 ${S}/pandora/autoexec_low_detail.cfg ${D}/${libdir}/quake3
+ install -m 0755 ${S}/pandora/run.sh ${D}/${libdir}/quake3
+}
+
+FILES_${PN} += "${libdir}"
+FILES_${PN}-dbg += "${libdir}/quake3/.debug ${libdir}/quake3/baseq3/.debug"
+
diff --git a/recipes/udev/udev_141.bb b/recipes/udev/udev_141.bb
index e7438fb4d6..e687989e9f 100644
--- a/recipes/udev/udev_141.bb
+++ b/recipes/udev/udev_141.bb
@@ -6,7 +6,10 @@ LICENSE = "GPL"
# Untested
DEFAULT_PREFERENCE = "-1"
-PR = "r6"
+PR = "r8"
+
+# needed for init.d script
+RDEPENDS_udev += "udev-utils"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://mount.blacklist \
@@ -64,6 +67,9 @@ do_install () {
mv ${D}${base_libdir}/udev/rules.d ${D}${sysconfdir}/udev/
ln -sf ${sysconfdir}/udev/rules.d ${D}${base_libdir}/udev/
+ cp ${S}/rules/rules.d/* ${D}${sysconfdir}/udev/rules.d/
+ cp ${S}/rules/packages/* ${D}${sysconfdir}/udev/rules.d/
+
install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/
install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
install -m 0644 ${WORKDIR}/permissions.rules ${D}${sysconfdir}/udev/rules.d/permissions.rules
diff --git a/recipes/xorg-driver/xf86-video-geode/0001-probe-GPIO-device-before-asking-for-base_addr.patch b/recipes/xorg-driver/xf86-video-geode/0001-probe-GPIO-device-before-asking-for-base_addr.patch
new file mode 100644
index 0000000000..af267ba269
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-geode/0001-probe-GPIO-device-before-asking-for-base_addr.patch
@@ -0,0 +1,30 @@
+From 1c70b4d2b70155558a9b5edb79a172696c16e129 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Fri, 22 May 2009 18:02:04 -0300
+Subject: [PATCH] probe GPIO device before asking for base_addr
+
+After finding the PCI ISA device it is required to ask for the
+resources to be read, before we use the base_addr for GPIO.
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ src/geode_ddc.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/src/geode_ddc.c b/src/geode_ddc.c
+index 2533488..086dbb1 100644
+--- a/src/geode_ddc.c
++++ b/src/geode_ddc.c
+@@ -72,6 +72,9 @@ geode_gpio_iobase(void)
+ if (pci == NULL)
+ return 0;
+
++ if (pci_device_probe(pci) != 0)
++ return 0;
++
+ /* The GPIO I/O address is in resource 1 */
+ return (unsigned short)pci->regions[1].base_addr;
+ #else
+--
+1.6.3.1.54.g99dd
+
diff --git a/recipes/xorg-driver/xf86-video-geode/0002-GX-fix-RandR-to-properly-use-dixSetPrivate.patch b/recipes/xorg-driver/xf86-video-geode/0002-GX-fix-RandR-to-properly-use-dixSetPrivate.patch
new file mode 100644
index 0000000000..7408473063
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-geode/0002-GX-fix-RandR-to-properly-use-dixSetPrivate.patch
@@ -0,0 +1,56 @@
+From 312b5ad7a3e1f92abaa113c3e72c8da5cb3e6cb0 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Fri, 22 May 2009 20:40:16 -0300
+Subject: [PATCH 2/2] [GX] fix RandR to properly use dixSetPrivate
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ src/gx_randr.c | 13 +++----------
+ 1 files changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/src/gx_randr.c b/src/gx_randr.c
+index 6cdd244..68e1dbd 100644
+--- a/src/gx_randr.c
++++ b/src/gx_randr.c
+@@ -57,18 +57,13 @@ typedef struct _GXRandRInfo
+
+ #define AMD_OLDPRIV (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 4)
+
+-#if AMD_OLDPRIV
+-
+ static int GXRandRIndex;
+
++#if AMD_OLDPRIV
+ #define XF86RANDRINFO(p) ((XF86RandRInfoPtr) (p)->devPrivates[GXRandRIndex].ptr)
+ #else
+-
+-static DevPrivateKey GXRandRKey;
+-
+ #define XF86RANDRINFO(p) ((XF86RandRInfoPtr) \
+- dixLookupPrivate(&(p)->devPrivates, GXRandRKey));
+-
++ dixLookupPrivate(&(p)->devPrivates, GXRandRIndex));
+ #endif
+
+ static int
+@@ -333,8 +328,6 @@ GXRandRInit(ScreenPtr pScreen, int rotation)
+ }
+ #if AMD_OLDPRIV
+ GXRandRIndex = AllocateScreenPrivateIndex();
+-#else
+- GXRandRKey = &GXRandRKey;
+ #endif
+
+ pRandr = xcalloc(sizeof(XF86RandRInfoRec), 1);
+@@ -363,7 +356,7 @@ GXRandRInit(ScreenPtr pScreen, int rotation)
+ #if AMD_OLDPRIV
+ pScreen->devPrivates[GXRandRIndex].ptr = pRandr;
+ #else
+- dixSetPrivate(&pScreen->devPrivates, GXRandRKey, pRandr);
++ dixSetPrivate(&pScreen->devPrivates, &GXRandRIndex, pRandr);
+ #endif
+ return TRUE;
+ }
+--
+1.6.3.1.54.g99dd
+
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.2.bb b/recipes/xorg-driver/xf86-video-geode_2.11.2.bb
index 380ce2ea0b..5f1cc3ad03 100644
--- a/recipes/xorg-driver/xf86-video-geode_2.11.2.bb
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.2.bb
@@ -1,5 +1,10 @@
require xorg-driver-video.inc
PE = "1"
+PR = "r1"
COMPATIBLE_HOST = 'i.86.*-linux'
DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
+
+SRC_URI += "file://0001-probe-GPIO-device-before-asking-for-base_addr.patch;patch=1 \
+ file://0002-GX-fix-RandR-to-properly-use-dixSetPrivate.patch;patch=1 \
+ "