On 2012-12-19 11:39, Otavio Salvador wrote:
On Wed, Dec 19, 2012 at 4:36 PM, Gary Thomas <[email protected]> wrote:
On 2012-12-19 11:26, Gary Thomas wrote:

On 2012-12-19 11:11, Otavio Salvador wrote:

On Wed, Dec 19, 2012 at 1:52 PM, Gary Thomas <[email protected]>
wrote:

On 2012-12-19 08:35, Otavio Salvador wrote:


On Wed, Dec 19, 2012 at 1:22 PM, Gary Thomas <[email protected]>
wrote:
...


Thanks, I'm now using the yoctoproject.org repository and can see the
recent changes.

Sadly though, I can't build X11 drivers - full log attached.
| In file included from ./vivante_util/vivante_common.h:69:0,
|                  from vivante_fbdev/vivante_fbdev_driver.c:23:
|


/home/local/imx6_poky/tmp/sysroots/sabrelite/usr/include/xorg/fbdevhw.h:50:23:
note: declared here
| vivante_fbdev/vivante_fbdev_driver.c:780:26: warning: assignment
from
incompatible pointer type [enabled by default]
| vivante_fbdev/vivante_fbdev_driver.c: In function 'VivCloseScreen':
| vivante_fbdev/vivante_fbdev_driver.c:826:5: warning: passing
argument 1
of
'pScreen->CloseScreen' makes pointer from integer without a cast
[enabled
by
default]
| vivante_fbdev/vivante_fbdev_driver.c:826:5: note: expected
'ScreenPtr'
but
argument is of type 'int'
| vivante_fbdev/vivante_fbdev_driver.c:826:5: error: too many
arguments
to
function 'pScreen->CloseScreen'
| make[2]: *** [vivante_fbdev_driver.lo] Error 1
| make[2]: *** Waiting for unfinished jobs....
| make[2]: Leaving directory


`/home/local/imx6_poky/tmp/work/sabrelite-amltd-linux-gnueabi/xf86-video-imxfb-vivante/2_12.09.01-r20.1/xserver-xorg-video-imx-viv-12.09.01/src'
| make[1]: *** [all-recursive] Error 1
| make[1]: Leaving directory


`/home/local/imx6_poky/tmp/work/sabrelite-amltd-linux-gnueabi/xf86-video-imxfb-vivante/2_12.09.01-r20.1/xserver-xorg-video-imx-viv-12.09.01'

Any ideas?  Maybe I've missed something else.


It seems xf86 api changes; you need to check the change in API and
prepare a patch to the driver ... otherwise I can do it ...



OK, I'll look at this.  I had expected this to already work, based on
the earlier comments, but no problem.


I've researched how to make it in a flexible way and I found

http://cgit.freedesktop.org/xorg/driver/xf86-video-geode/commit/?id=a83fcb6f84995dc50b8adffc27e264a663fbd606

So it's adviced to use a compat-api.h header that allows it to be
usable in old and new Xorg API's.


Thanks.  I found much the same and have already integrated this method.
I'll send a patch for it soon.


This may take some time.  While it does now build, it immediately dies
with a segmentation violation.

You might have did a wrong replace for a macro and then pass a wrong
param; another thing, when adding the patch in the commit please add:

Upstream-Status: Pending

So we can grep for it later and propose for merge.

I think I may need to pass this on to you - it's blowing up during the very
initial steps.  Here's my GDB backtrace:
Program received signal SIGSEGV, Segmentation fault.
VivScreenInit (scrnIndex=scrnIndex@entry=1930440, pScreen=pScreen@entry=0x1, 
argc=argc@entry=2130705924,
    argv=<optimized out>) at vivante_fbdev/vivante_fbdev_driver.c:615
615     vivante_fbdev/vivante_fbdev_driver.c: No such file or directory.
(gdb) dir 
tmp/work/sabrelite-amltd-linux-gnueabi/xf86-video-imxfb-vivante/2_12.09.01-r20.1/xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev
Source directories searched: /home/local/imx6_poky/tmp/work/sabrelite-amltd-linux-gnueabi/xf86-video-imxfb-vivante/2_12.09.01-r20.1/xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev:$cdir:$cwd
(gdb) l
610         TRACE_EXIT(TRUE);
611     }
612
613     static Bool
614     VivScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) {
615         ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
616         VivPtr fPtr = GET_VIV_PTR(pScrn);
617         VisualPtr visual;
618         int init_picture = 0;
619         int ret, flags;
(gdb) bt
#0  VivScreenInit (scrnIndex=scrnIndex@entry=1930440, 
pScreen=pScreen@entry=0x1, argc=argc@entry=2130705924,
    argv=<optimized out>) at vivante_fbdev/vivante_fbdev_driver.c:615
#1  0x0003689c in AddScreen (pfnInit=0x2af556f0 <VivScreenInit>, argc=1, 
argc@entry=509968, argv=0x7efffe04,
    argv@entry=0x6df14 <xf86SetDGAMode>) at dispatch.c:3830
#2  0x000755fc in InitOutput (pScreenInfo=0x1aa870 <nmajor>, 
pScreenInfo@entry=0x1b5c88 <screenInfo>, argc=509968,
    argc@entry=1, argv=0x6df14 <xf86SetDGAMode>, argv@entry=0x25fec <main+596>) 
at xf86Init.c:882
#3  0x00025fec in main (argc=1, argv=0x25fec <main+596>, envp=<optimized out>) 
at main.c:204

Looks like there are more than the [cosmetic] changes I made for CloseScreen().

My preliminary patch is attached, maybe you can help.

>From 80fb4b97f6e58d70ac9575324703d8a9376224ca Mon Sep 17 00:00:00 2001
From: Gary Thomas <[email protected]>
Date: Wed, 19 Dec 2012 12:06:15 -0700
Subject: [PATCH] Fix build errors due to changes in API

---
 .../fix-vivante-build.patch                        |  196 ++++++++++++++++++++
 .../xf86-video-imxfb-vivante_12.09.01.bb           |    1 +
 2 files changed, 197 insertions(+)
 create mode 100644 recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/fix-vivante-build.patch

diff --git a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/fix-vivante-build.patch b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/fix-vivante-build.patch
new file mode 100644
index 0000000..ac3d0e1
--- /dev/null
+++ b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/fix-vivante-build.patch
@@ -0,0 +1,196 @@
+diff -uNr xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev/vivante_dri.h xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_fbdev/vivante_dri.h
+--- xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev/vivante_dri.h	2012-08-21 03:51:17.000000000 -0600
++++ xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_fbdev/vivante_dri.h	2012-12-19 10:58:25.612916840 -0700
+@@ -67,7 +67,7 @@
+ } vvtDeviceInfo;
+ 
+ Bool VivDRIScreenInit(ScreenPtr pScreen);
+-void VivDRICloseScreen(ScreenPtr pScreen);
++void VivDRICloseScreen(CLOSE_SCREEN_ARGS_DECL);
+ Bool VivDRIFinishScreenInit(ScreenPtr pScreen);
+ 
+ #endif /* _VIVANTE_DRI_H_ */
+diff -uNr xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev/vivante_fbdev_driver.c xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_fbdev/vivante_fbdev_driver.c
+--- xserver-xorg-video-imx-viv-12.09.01/src/vivante_fbdev/vivante_fbdev_driver.c	2012-08-21 03:51:17.000000000 -0600
++++ xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_fbdev/vivante_fbdev_driver.c	2012-12-19 11:26:03.246916879 -0700
+@@ -19,7 +19,6 @@
+ *****************************************************************************/
+ 
+ 
+-
+ #include "vivante_common.h"
+ #include "vivante.h"
+ #include "vivante_exa.h"
+@@ -56,7 +55,7 @@
+ static Bool VivPreInit(ScrnInfoPtr pScrn, int flags);
+ static Bool VivScreenInit(int Index, ScreenPtr pScreen, int argc,
+         char **argv);
+-static Bool VivCloseScreen(int scrnIndex, ScreenPtr pScreen);
++static Bool VivCloseScreen(CLOSE_SCREEN_ARGS_DECL);
+ static Bool VivDriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op,
+         pointer ptr);
+ 
+@@ -651,7 +650,7 @@
+         TRACE_EXIT(FALSE);
+     }
+     fbdevHWSaveScreen(pScreen, SCREEN_SAVER_ON);
+-    fbdevHWAdjustFrame(scrnIndex, 0, 0, 0);
++    fbdevHWAdjustFrame(FBDEVHWADJUSTFRAME_ARGS(0, 0));
+ 
+ 
+ 
+@@ -799,18 +798,18 @@
+ }
+ 
+ static Bool
+-VivCloseScreen(int scrnIndex, ScreenPtr pScreen) {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++VivCloseScreen(CLOSE_SCREEN_ARGS_DECL) {
++    CLOSE_SCREEN_DECL_ScrnInfoPtr;
+     VivPtr fPtr = GET_VIV_PTR(pScrn);
+     Bool ret = FALSE;
+     TRACE_ENTER();
+ 
+-    VivDRICloseScreen(pScreen);
++    VivDRICloseScreen(CLOSE_SCREEN_ARGS);
+ 
+     if (fPtr->mFakeExa.mUseExaFlag) {
+         DEBUGP("UnLoading EXA");
+         if (fPtr->mFakeExa.mIsInited && !DestroyExaLayer(pScreen)) {
+-            xf86DrvMsg(scrnIndex, X_ERROR,
++            xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                     "internal error: DestroyExaLayer failed "
+                     "in VivCloseScreen()\n");
+         }
+@@ -823,7 +822,7 @@
+ 
+     pScreen->CreateScreenResources = fPtr->CreateScreenResources;
+     pScreen->CloseScreen = fPtr->CloseScreen;
+-    ret = (*pScreen->CloseScreen)(scrnIndex, pScreen);
++    ret = (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
+     TRACE_EXIT(ret);
+ }
+ 
+diff -uNr xserver-xorg-video-imx-viv-12.09.01/src/vivante_util/compat-api.h xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_util/compat-api.h
+--- xserver-xorg-video-imx-viv-12.09.01/src/vivante_util/compat-api.h	1969-12-31 17:00:00.000000000 -0700
++++ xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_util/compat-api.h	2012-12-19 11:26:03.894917071 -0700
+@@ -0,0 +1,106 @@
++/*
++ * Copyright 2012 Red Hat, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Author: Dave Airlie <[email protected]>
++ */
++
++/* this file provides API compat between server post 1.13 and pre it,
++   it should be reused inside as many drivers as possible */
++#ifndef COMPAT_API_H
++#define COMPAT_API_H
++
++#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
++#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
++#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
++#endif
++
++#ifndef XF86_HAS_SCRN_CONV
++#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
++#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
++#endif
++
++#ifndef XF86_SCRN_INTERFACE
++
++#define SCRN_ARG_TYPE int
++#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = xf86Screens[(arg1)]
++
++#define SCREEN_ARG_TYPE int
++#define SCREEN_PTR(arg1) ScreenPtr pScreen = screenInfo.screens[(arg1)]
++
++#define SCREEN_INIT_ARGS_DECL int index, ScreenPtr pScreen, int argc, char **argv
++
++#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask
++#define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask
++
++#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen
++#define CLOSE_SCREEN_ARGS scrnIndex, pScreen
++#define CLOSE_SCREEN_DECL_ScrnInfoPtr ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++
++#define FBDEVHWADJUSTFRAME_ARGS(x, y) scrnIndex, (x), (y), 0
++
++#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags
++
++#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags
++
++#define FREE_SCREEN_ARGS_DECL int arg, int flags
++#define FREE_SCREEN_ARGS(x) (x)->scrnIndex, 0
++
++#define VT_FUNC_ARGS_DECL int arg, int flags
++#define VT_FUNC_ARGS(flags) pScrn->scrnIndex, (flags)
++
++#define ENABLE_DISABLE_FB_ACCESS_ARGS(pScrn, b) pScrn->scrnIndex, b
++
++#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex)
++#else
++#define SCRN_ARG_TYPE ScrnInfoPtr
++#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = (arg1)
++
++#define SCREEN_ARG_TYPE ScreenPtr
++#define SCREEN_PTR(arg1) ScreenPtr pScreen = (arg1)
++
++#define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
++
++#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask
++#define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask
++
++#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
++#define CLOSE_SCREEN_ARGS pScreen
++#define CLOSE_SCREEN_DECL_ScrnInfoPtr ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
++
++#define FBDEVHWADJUSTFRAME_ARGS(x, y) pScrn, (x), (y)
++
++#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y
++#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode
++
++#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg
++#define FREE_SCREEN_ARGS(x) (x)
++
++#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg
++#define VT_FUNC_ARGS(flags) pScrn
++
++#define ENABLE_DISABLE_FB_ACCESS_ARGS(pScrn, b) pScrn, b
++
++#define XF86_ENABLEDISABLEFB_ARG(x) (x)
++
++#endif
++
++#endif
+diff -uNr xserver-xorg-video-imx-viv-12.09.01/src/vivante_util/vivante_common.h xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_util/vivante_common.h
+--- xserver-xorg-video-imx-viv-12.09.01/src/vivante_util/vivante_common.h	2012-08-21 03:51:17.000000000 -0600
++++ xserver-xorg-video-imx-viv-12.09.01.NEW/src/vivante_util/vivante_common.h	2012-12-19 11:04:45.162911723 -0700
+@@ -76,6 +76,9 @@
+ #include "xf86Crtc.h"
+ #include "cursorstr.h"
+ 
++    /* System API compatability */
++#include "compat-api.h"
++
+     /*Debug*/
+ #include "vivante_debug.h"
+ 
diff --git a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
index 2b0d0a0..798e450 100644
--- a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
+++ b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
@@ -10,6 +10,7 @@ DEPENDS += "virtual/libx11 virtual/libgal-x11 gpu-viv-bin-mx6q"
 LIC_FILES_CHKSUM = "file://src/vivante_fbdev/vivante.h;endline=19;md5=93a322f91ec495569dcbcfbb2a95454a"
 
 SRC_URI = "${FSL_MIRROR}/xserver-xorg-video-imx-viv-${PV}.tar.gz \
+           file://fix-vivante-compile.patch \
            file://Makefile.am-remove-prefixed-include-path.patch"
 SRC_URI[md5sum] = "1948119717aa01bed1f630be9ee7a708"
 SRC_URI[sha256sum] = "5b3be4b426d2d2803554df9e4d8919d1f9d17659c3153c71c6529f43c37e6ed1"
-- 
1.7.9.5

_______________________________________________
meta-freescale mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-freescale

Reply via email to