diff options
author | Isaac David <isacdaavid@isacdaavid.info> | 2016-06-30 13:31:41 -0500 |
---|---|---|
committer | Isaac David <isacdaavid@isacdaavid.info> | 2016-06-30 13:31:41 -0500 |
commit | 82c1c2b3304e474f22956f8b02b6df8ad613bf11 (patch) | |
tree | 52b9235c1eb1de0d2bec087416f8337aff7a2daa | |
parent | bf0e3da018e1a7d88877df51f5c683929e6e7f34 (diff) | |
download | abslibre-82c1c2b3304e474f22956f8b02b6df8ad613bf11.tar.gz abslibre-82c1c2b3304e474f22956f8b02b6df8ad613bf11.tar.bz2 abslibre-82c1c2b3304e474f22956f8b02b6df8ad613bf11.zip |
xf86-video-{armsoc-git,omap{,fb}}: add new packages to [pcr]
11 files changed, 936 insertions, 0 deletions
diff --git a/pcr/xf86-video-armsoc-git/0001-drmmode_display-include-sys-stat.h.patch b/pcr/xf86-video-armsoc-git/0001-drmmode_display-include-sys-stat.h.patch new file mode 100644 index 000000000..157d0a8b8 --- /dev/null +++ b/pcr/xf86-video-armsoc-git/0001-drmmode_display-include-sys-stat.h.patch @@ -0,0 +1,26 @@ +From de6b51ae1dc02ecb48cb9642af31dd2d27d3ae04 Mon Sep 17 00:00:00 2001 +From: Kevin Mihelich <kevin@archlinuxarm.org> +Date: Fri, 26 Jun 2015 21:31:12 -0600 +Subject: [PATCH] drmmode_display: include sys/stat.h + +Signed-off-by: Kevin Mihelich <kevin@archlinuxarm.org> +--- + src/drmmode_display.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index 58c1a84..cf64424 100644 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c +@@ -51,6 +51,8 @@ + #include <libudev.h> + #include "drmmode_driver.h" + ++#include <sys/stat.h> ++ + struct drmmode_cursor_rec { + /* hardware cursor: */ + struct armsoc_bo *bo; +-- +2.4.4 + diff --git a/pcr/xf86-video-armsoc-git/PKGBUILD b/pcr/xf86-video-armsoc-git/PKGBUILD new file mode 100644 index 000000000..71fe30daa --- /dev/null +++ b/pcr/xf86-video-armsoc-git/PKGBUILD @@ -0,0 +1,48 @@ +# ArmSoc (OMAP + Mali) FrameBuffer driver for Xorg from Linaro. +# Maintainer (Arch ARM): Kevin Mihelich <kevin@archlinuxarm.org> +# Contributor (Arch ARM): Erik Andersson <erik.h.andersson@gmail.com> +# Maintainer: Isaac David <isacdaavid@at@isacdaavid@dot@info> + +buildarch=4 + +pkgname=xf86-video-armsoc-git +_commit=8ca8513880697f9a34d4006c43342b830bdd1ff2 +pkgver=243.8ca8513 +pkgrel=2 +epoch=1 +pkgdesc='X.org graphics driver for ARM graphics' +arch=('armv7h') +url="http://cgit.freedesktop.org/xorg/driver/xf86-video-armsoc" +license=('GPL2') +makedepends=('git' 'pkgconfig' 'xorg-server-devel' 'resourceproto' 'scrnsaverproto') +options=('!libtool') +conflicts=(xf86-video-armsoc) +provides=(xf86-video-armsoc) +source=("$pkgname::git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc#commit=${_commit}" + '0001-drmmode_display-include-sys-stat.h.patch') +md5sums=('SKIP' + '89c59460f599996b0ac5669c0762567e') + +pkgver() { + cd $pkgname + echo $(git rev-list --count makepkg).$(git rev-parse --short makepkg) +} + +prepare() { + cd $pkgname + git apply ../0001-drmmode_display-include-sys-stat.h.patch +} + +build() { + cd $pkgname + + CFLAGS=`echo $CFLAGS | sed -e 's/vfpv3-d16/neon/'` && CXXFLAGS="$CFLAGS" + ./autogen.sh --prefix=/usr --with-drmmode=exynos + make +} + +package() { + cd $pkgname + + make DESTDIR="${pkgdir}" install +} diff --git a/pcr/xf86-video-omap/PKGBUILD b/pcr/xf86-video-omap/PKGBUILD new file mode 100644 index 000000000..61f5bd946 --- /dev/null +++ b/pcr/xf86-video-omap/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer (Arch ARM): Kevin Mihelich <kevin@archlinuxarm.org> +# Maintainer (Arch ARM): Mike Brown <mbrown@archlinuxarm.org> +# Maintainer: Isaac David <isacdaavid@at@isacdaavid@dot@info> +# OMAP FrameBuffer driver for Xorg + +buildarch=4 + +pkgname="xf86-video-omap" +pkgver=0.4.4 +pkgrel=5 +arch=('armv7h') +url="http://cgit.freedesktop.org/xorg/driver/xf86-video-omap/" +license=('GPL2') +makedepends=('pkgconfig' 'xorg-server-devel' 'resourceproto' 'scrnsaverproto') +options=('!libtool') +source=('http://cgit.freedesktop.org/xorg/driver/xf86-video-omap/snapshot/xf86-video-omap-0.4.4.tar.gz') +md5sums=('ce429327dc3d2ceba617e94d916c74bb') + +build() { + cd "${srcdir}/xf86-video-omap-${pkgver}" + ./autogen.sh + ./configure --prefix=/usr + + make +} + +package() { + pkgdesc="OMAP3+ framebuffer driver for X" + + cd "${srcdir}/xf86-video-omap-${pkgver}" + + make DESTDIR="${pkgdir}" install +} diff --git a/pcr/xf86-video-omapfb/0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch b/pcr/xf86-video-omapfb/0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch new file mode 100644 index 000000000..d4f63c5c9 --- /dev/null +++ b/pcr/xf86-video-omapfb/0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch @@ -0,0 +1,41 @@ +From 75cf4aad6f6e95bdbd7dbb16ec0f5abcf527c1ab Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Wed, 26 Jan 2011 12:04:36 +0100 +Subject: [PATCH 1/7] Revert "Set a large CRTC upper limit to not prune larger + resolutions" + +Picture is garbled after switching resolutions, so revert it. +Virtual size too big, revert the commit 9c4d7592dcb7dc20a48a6f941d9d94bd73d34153. + +Upstream-Status: Pending + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/omapfb-crtc.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/omapfb-crtc.c b/src/omapfb-crtc.c +index 9aaa52f..cbeff35 100644 +--- a/src/omapfb-crtc.c ++++ b/src/omapfb-crtc.c +@@ -190,13 +190,13 @@ OMAPFBCRTCInit(ScrnInfoPtr pScrn) + * In practise, this doesn't seem to be supported. + * (no way to setup the overlay offset/base address) + */ +- /* FIXME: figure out what makes sense here. A known max resolution? +- * framebuffer size? +- */ + xf86CrtcSetSizeRange(pScrn, +- 8, 8, 2048, 2048); ++ 8, 8, ++ ofb->state_info.xres_virtual, ++ ofb->state_info.yres_virtual); + + ofb->crtc = xf86CrtcCreate(pScrn, &OMAPFBCrtcFuncs); ++ + } + + +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch b/pcr/xf86-video-omapfb/0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch new file mode 100644 index 000000000..3bada29bc --- /dev/null +++ b/pcr/xf86-video-omapfb/0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch @@ -0,0 +1,32 @@ +From 1b674f1f16bc43898865fa7ddfdb816692d18f4d Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Wed, 26 Jan 2011 13:27:20 +0100 +Subject: [PATCH 2/7] Revert "Set virtual size when configuring framebuffer" + +Virtual size too big, so revert it. + +This reverts commit 2653ef07883fbd1a5e7025f9300cf89b79ba429a. + +Upstream-Status: Pending + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/omapfb-crtc.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/omapfb-crtc.c b/src/omapfb-crtc.c +index cbeff35..9655db2 100644 +--- a/src/omapfb-crtc.c ++++ b/src/omapfb-crtc.c +@@ -98,8 +98,6 @@ OMAPFBCrtcCommitChangeMode (xf86CrtcPtr crtc) + v = ofb->state_info; + v.xres = mode->HDisplay; + v.yres = mode->VDisplay; +- v.xres_virtual = crtc->scrn->virtualX; +- v.yres_virtual = crtc->scrn->virtualY; + v.activate = FB_ACTIVATE_NOW; + v.pixclock = KHZ2PICOS(mode->Clock ? mode->Clock : 56000); + v.left_margin = mode->HTotal - mode->HSyncEnd; +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0003-force-plain-mode.patch b/pcr/xf86-video-omapfb/0003-force-plain-mode.patch new file mode 100644 index 000000000..5b7f69976 --- /dev/null +++ b/pcr/xf86-video-omapfb/0003-force-plain-mode.patch @@ -0,0 +1,31 @@ +From 8c154297978f1e79875f314647c3461d15353e9a Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Wed, 26 Jan 2011 13:20:20 +0100 +Subject: [PATCH 3/7] force 'plain' mode + +The new DSS mode breaks XV, so force plain mode + +Upstream-Status: Pending + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/omapfb-driver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/omapfb-driver.c b/src/omapfb-driver.c +index 018e040..48aa09c 100644 +--- a/src/omapfb-driver.c ++++ b/src/omapfb-driver.c +@@ -326,7 +326,7 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags) + OMAPFBProbeController(ofb->ctrl_name); + + /* Do we have the DSS kernel API? */ +- if (stat(SYSFS_DSS_DIR, &st) == 0) { ++ if (0) { //stat(SYSFS_DSS_DIR, &st) == 0) { + ofb->dss = TRUE; + } else { + ofb->dss = FALSE; +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0004-blacklist-tv-out.patch b/pcr/xf86-video-omapfb/0004-blacklist-tv-out.patch new file mode 100644 index 000000000..1af0a8d13 --- /dev/null +++ b/pcr/xf86-video-omapfb/0004-blacklist-tv-out.patch @@ -0,0 +1,33 @@ +From 811a33882e980773459ca79c118759bad6eb1ce2 Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Wed, 26 Jan 2011 13:21:12 +0100 +Subject: [PATCH 4/7] blacklist tv out + +The tv-out gets added last and the driver tries to reconfigure dvi to TV resolutions, which fails. so blacklist it + +Upstream-Status: Pending + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/omapfb-output-dss.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/omapfb-output-dss.c b/src/omapfb-output-dss.c +index 6cc52de..83cb711 100644 +--- a/src/omapfb-output-dss.c ++++ b/src/omapfb-output-dss.c +@@ -205,6 +205,10 @@ OMAPFBDSSOutputDetect (xf86OutputPtr output) + if(ofb->timings[idx][0] == '\0') + return XF86OutputStatusDisconnected; + ++ // Hack to disable the tv out ++ if (strncmp(output->name, "tv", 2) == 0) ++ return XF86OutputStatusDisconnected; ++ + return XF86OutputStatusConnected; + } + +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0005-Attempt-to-fix-VRFB.patch b/pcr/xf86-video-omapfb/0005-Attempt-to-fix-VRFB.patch new file mode 100644 index 000000000..d3c618a3b --- /dev/null +++ b/pcr/xf86-video-omapfb/0005-Attempt-to-fix-VRFB.patch @@ -0,0 +1,325 @@ +From 85e4bdb8f375b343011d07e685a9cac9108f3734 Mon Sep 17 00:00:00 2001 +From: Eino-Ville Talvala <talvala@stanford.edu> +Date: Tue, 23 Aug 2011 18:37:01 +0200 +Subject: [PATCH 5/7] Attempt to fix VRFB + +Upstream-Status: Pending + +http://dominion.thruhere.net/git/cgit.cgi/xf86-video-omapfb/commit/?h=koen/fixups&id=6833fc9f795265e4943d248103fbaf3463b515d6 + +Signed-off-by: Sebastian Krzyszkowiak <dos@dosowisko.net> +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/image-format-conversions.c | 4 +-- + src/image-format-conversions.h | 2 +- + src/omapfb-driver.c | 28 +++++++++++++--- + src/omapfb-xv-blizzard.c | 1 + + src/omapfb-xv-generic.c | 72 +++++++++++++++++++++++++++++++++--------- + src/omapfb-xv.c | 3 ++ + 6 files changed, 88 insertions(+), 22 deletions(-) + +diff --git a/src/image-format-conversions.c b/src/image-format-conversions.c +index dcefa9b..d43427d 100644 +--- a/src/image-format-conversions.c ++++ b/src/image-format-conversions.c +@@ -38,13 +38,13 @@ + #include "image-format-conversions.h" + + /* Basic line-based copy for packed formats */ +-void packed_line_copy(int w, int h, int stride, uint8_t *src, uint8_t *dest) ++void packed_line_copy(int w, int h, int src_stride, int dst_stride, uint8_t *src, uint8_t *dest) + { + int i; + int len = w * 2; + for (i = 0; i < h; i++) + { +- memcpy(dest + i * len, src + i * stride, len); ++ memcpy(dest + i * dst_stride, src + i * src_stride, len); + } + } + +diff --git a/src/image-format-conversions.h b/src/image-format-conversions.h +index 584896a..ba7caf2 100644 +--- a/src/image-format-conversions.h ++++ b/src/image-format-conversions.h +@@ -27,7 +27,7 @@ + #include <stdint.h> + + /* Basic line-based copy for packed formats */ +-void packed_line_copy(int w, int h, int stride, uint8_t *src, uint8_t *dest); ++void packed_line_copy(int w, int h, int src_stride, int dst_stride, uint8_t *src, uint8_t *dest); + + /* Basic C implementation of YV12/I420 to UYVY conversion */ + void uv12_to_uyvy(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest); +diff --git a/src/omapfb-driver.c b/src/omapfb-driver.c +index 48aa09c..07989f5 100644 +--- a/src/omapfb-driver.c ++++ b/src/omapfb-driver.c +@@ -66,6 +66,7 @@ + #define OMAPFB_VERSION 1000 + #define OMAPFB_DRIVER_NAME "OMAPFB" + #define OMAPFB_NAME "omapfb" ++#define ENFORCE_MODES + + static Bool OMAPFBProbe(DriverPtr drv, int flags); + static Bool OMAPFBPreInit(ScrnInfoPtr pScrn, int flags); +@@ -105,11 +106,13 @@ static SymTabRec OMAPFBChipsets[] = { + typedef enum { + OPTION_ACCELMETHOD, + OPTION_FB, ++ OPTION_ROTATE, + } FBDevOpts; + + static const OptionInfoRec OMAPFBOptions[] = { + { OPTION_ACCELMETHOD, "AccelMethod", OPTV_STRING, {0}, FALSE }, + { OPTION_FB, "fb", OPTV_STRING, {0}, FALSE }, ++ { OPTION_ROTATE, "rotation", OPTV_STRING, {0}, FALSE }, + { -1, NULL, OPTV_NONE, {0}, FALSE } + }; + +@@ -286,6 +289,7 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags) + { + OMAPFBPtr ofb; + EntityInfoPtr pEnt; ++ char *rotate; + rgb zeros = { 0, 0, 0 }; + struct stat st; + +@@ -379,6 +383,8 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags) + pScrn->progClock = TRUE; + pScrn->chipset = "omapfb"; + ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Rotate test version 0.02\n"); ++ + /* Start with configured virtual size */ + pScrn->virtualX = pScrn->display->virtualX; + pScrn->virtualY = pScrn->display->virtualY; +@@ -496,12 +502,21 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + ofb->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = OMAPFBCloseScreen; + ++ /* Enforce the default mode (this is silly I guess) */ ++#ifdef ENFORCE_MODES ++ //xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Enforcing modes\n"); ++ //set_mode(ofb, &ofb->default_mode); ++ //pScrn->displayWidth = ofb->fixed_info.line_length / ++ // (ofb->state_info.bits_per_pixel>>3); //ofb->state_info.xres; ++#endif ++ + /* Map our framebuffer memory */ ++ ofb->mem_info.size = ofb->fixed_info.line_length * ofb->state_info.yres; + ofb->fb = mmap (NULL, ofb->mem_info.size, + PROT_READ | PROT_WRITE, MAP_SHARED, + ofb->fd, 0); +- if (ofb->fb == NULL) { +- xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed\n"); ++ if (ofb->fb == MAP_FAILED) { ++ xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size); + return FALSE; + } + +@@ -578,8 +593,13 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + } else if (!ofb->dss) { + + ofb->plane_info.enabled = 1; +- ofb->plane_info.out_width = ofb->state_info.xres; +- ofb->plane_info.out_height = ofb->state_info.yres; ++ if (ofb->state_info.rotate == 0 || ofb->state_info.rotate == 2) { ++ ofb->plane_info.out_width = ofb->state_info.xres; ++ ofb->plane_info.out_height = ofb->state_info.yres; ++ } else { ++ ofb->plane_info.out_width = ofb->state_info.yres; ++ ofb->plane_info.out_height = ofb->state_info.xres; ++ } + + if (ioctl (ofb->fd, OMAPFB_SETUP_PLANE, &ofb->plane_info)) { + xf86DrvMsg(scrnIndex, X_ERROR, +diff --git a/src/omapfb-xv-blizzard.c b/src/omapfb-xv-blizzard.c +index 406ffc6..b71d2aa 100644 +--- a/src/omapfb-xv-blizzard.c ++++ b/src/omapfb-xv-blizzard.c +@@ -220,6 +220,7 @@ int OMAPFBXVPutImageBlizzard (ScrnInfoPtr pScrn, + packed_line_copy(src_w & ~3, + src_h & ~3, + ((src_w + 1) & ~1) * 2, ++ ofb->port->fixed_info.line_length, + (uint8_t*)buf, + (uint8_t*)ofb->port->fb); + break; +diff --git a/src/omapfb-xv-generic.c b/src/omapfb-xv-generic.c +index e6f89fe..b33f344 100644 +--- a/src/omapfb-xv-generic.c ++++ b/src/omapfb-xv-generic.c +@@ -62,7 +62,7 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn) + { + OMAPFBPtr ofb = OMAPFB(pScrn); + +- /* The memory size is already set in OMAPFBXVQueryImageAttributes */ ++ /* The memory size is already set before we get here */ + if (ioctl(ofb->port->fd, OMAPFB_SETUP_MEM, &ofb->port->mem_info) != 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Failed to allocate video plane memory\n"); +@@ -73,19 +73,20 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn) + ofb->port->fb = mmap (NULL, ofb->port->mem_info.size, + PROT_READ | PROT_WRITE, MAP_SHARED, + ofb->port->fd, 0); +- if (ofb->port->fb == NULL) { ++ if (ofb->port->fb == MAP_FAILED) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Mapping video memory failed\n"); + return XvBadAlloc; + } + + /* Update the state info */ ++ /* Let's not - it's bad + if (ioctl (ofb->port->fd, FBIOGET_VSCREENINFO, &ofb->port->state_info)) + { + xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__); + return XvBadAlloc; + } +- ++ */ + return Success; + } + +@@ -93,6 +94,7 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn) + int OMAPXVSetupVideoPlane(ScrnInfoPtr pScrn) + { + OMAPFBPtr ofb = OMAPFB(pScrn); ++ int ret; + + if (ioctl (ofb->port->fd, FBIOPUT_VSCREENINFO, &ofb->port->state_info)) + { +@@ -104,6 +106,31 @@ int OMAPXVSetupVideoPlane(ScrnInfoPtr pScrn) + xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__); + return XvBadAlloc; + } ++ /* Changing rotation/nonstd flags can change the fixed info! */ ++ if (ioctl (ofb->port->fd, FBIOGET_FSCREENINFO, &ofb->port->fixed_info)) ++ { ++ xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__); ++ return XvBadAlloc; ++ } ++ /* Correct fixed info requires recalculation of needed memory */ ++ ofb->port->mem_info.size = ofb->port->fixed_info.line_length * ofb->port->state_info.yres; ++ ++ /* Allocate buffer memory */ ++ ret = OMAPXVAllocPlane(pScrn); ++ if (ret != Success) ++ return ret; ++ ++ /* Workaround for reset of mode after memory allo */ ++ if (ioctl (ofb->port->fd, FBIOPUT_VSCREENINFO, &ofb->port->state_info)) ++ { ++ xf86Msg(X_ERROR, "%s: setting state info failed\n", __FUNCTION__); ++ return XvBadAlloc; ++ } ++ if (ioctl (ofb->port->fd, FBIOGET_VSCREENINFO, &ofb->port->state_info)) ++ { ++ xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__); ++ return XvBadAlloc; ++ } + + if(ioctl(ofb->port->fd, OMAPFB_SETUP_PLANE, + &ofb->port->plane_info) != 0) { +@@ -124,6 +151,8 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn, + DrawablePtr pDraw) + { + OMAPFBPtr ofb = OMAPFB(pScrn); ++ short drw_temp; ++ short rot_xres, rot_yres; + + if (!ofb->port->plane_info.enabled + || ofb->port->update_window.x != src_x +@@ -163,13 +192,6 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn, + return Success; + } + +- /* If we don't have the plane running, enable it */ +- if (!ofb->port->plane_info.enabled) { +- ret = OMAPXVAllocPlane(pScrn); +- if (ret != Success) +- return ret; +- } +- + /* Set up the state info, xres and yres will be used for + * scaling to the values in the plane info struct + */ +@@ -179,12 +201,31 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn, + ofb->port->state_info.yres_virtual = 0; + ofb->port->state_info.xoffset = 0; + ofb->port->state_info.yoffset = 0; +- ofb->port->state_info.rotate = 0; ++ //ofb->port->state_info.rotate = 0; + ofb->port->state_info.grayscale = 0; + ofb->port->state_info.activate = FB_ACTIVATE_NOW; + ofb->port->state_info.bits_per_pixel = 0; + ofb->port->state_info.nonstd = xv_to_omapfb_format(image); + ++ /* Plane info does not rotate with state_info */ ++ if (ofb->port->state_info.rotate == 1 || ++ ofb->port->state_info.rotate == 3) { ++ drw_temp = drw_x; ++ drw_x = drw_y; ++ drw_y = drw_temp; ++ ++ drw_temp = drw_w; ++ drw_w = drw_h; ++ drw_h = drw_temp; ++ ++ rot_xres = ofb->port->state_info.yres; ++ rot_yres = ofb->port->state_info.xres; ++ } else { ++ rot_xres = ofb->port->state_info.xres; ++ rot_yres = ofb->port->state_info.yres; ++ } ++ ++ + /* Set up the video plane info */ + ofb->port->plane_info.enabled = 1; + ofb->port->plane_info.pos_x = drw_x; +@@ -193,13 +234,13 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn, + ofb->port->plane_info.out_height = drw_h & ~15; + + /* Cap output to screen size */ +- if (ofb->port->plane_info.out_width > ofb->state_info.xres) { ++ if (ofb->port->plane_info.out_width > rot_xres) { + ofb->port->plane_info.pos_x = 0; +- ofb->port->plane_info.out_width = ofb->state_info.xres; ++ ofb->port->plane_info.out_width = rot_xres; + } +- if (ofb->port->plane_info.out_height > ofb->state_info.yres) { ++ if (ofb->port->plane_info.out_height > rot_yres) { + ofb->port->plane_info.pos_y = 0; +- ofb->port->plane_info.out_height = ofb->state_info.yres; ++ ofb->port->plane_info.out_height = rot_yres; + } + + ret = OMAPXVSetupVideoPlane(pScrn); +@@ -223,6 +264,7 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn, + packed_line_copy(src_w & ~15, + src_h & ~15, + ((src_w + 1) & ~1) * 2, ++ ofb->port->fixed_info.line_length, + (uint8_t*)buf, + (uint8_t*)ofb->port->fb); + break; +diff --git a/src/omapfb-xv.c b/src/omapfb-xv.c +index 1df651e..0fee2c6 100644 +--- a/src/omapfb-xv.c ++++ b/src/omapfb-xv.c +@@ -169,8 +169,11 @@ static int OMAPFBXVQueryImageAttributes (ScrnInfoPtr pScrn, + h = *height; + + w = (w + 1) & ~1; ++ ++ /* Can't calculate these here - don't know line length + ofb->port->mem_info.size = w << 1; + ofb->port->mem_info.size *= h; ++ */ + + return size; + } +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0006-omapfb-port-to-new-xserver-video-API.patch b/pcr/xf86-video-omapfb/0006-omapfb-port-to-new-xserver-video-API.patch new file mode 100644 index 000000000..bd6b67258 --- /dev/null +++ b/pcr/xf86-video-omapfb/0006-omapfb-port-to-new-xserver-video-API.patch @@ -0,0 +1,272 @@ +From 9bed77633b0b1c73cbce012664529a620ab3df37 Mon Sep 17 00:00:00 2001 +From: Martin Jansa <Martin.Jansa@gmail.com> +Date: Fri, 23 Nov 2012 00:31:06 +0100 +Subject: [PATCH 6/7] omapfb: port to new xserver video API + +Upstream-Status: Pending + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + src/compat-api.h | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/omapfb-driver.c | 41 ++++++++++++----------- + 2 files changed, 118 insertions(+), 19 deletions(-) + create mode 100644 src/compat-api.h + +diff --git a/src/compat-api.h b/src/compat-api.h +new file mode 100644 +index 0000000..b1591b1 +--- /dev/null ++++ b/src/compat-api.h +@@ -0,0 +1,96 @@ ++/* ++ * 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 <airlied@redhat.com> ++ */ ++ ++/* 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 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 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 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 XF86_ENABLEDISABLEFB_ARG(x) (x) ++ ++#endif ++ ++#endif +diff --git a/src/omapfb-driver.c b/src/omapfb-driver.c +index 07989f5..486ffa4 100644 +--- a/src/omapfb-driver.c ++++ b/src/omapfb-driver.c +@@ -44,6 +44,8 @@ + + #include "exa.h" + ++#include "compat-api.h" ++ + #ifdef HAVE_XEXTPROTO_71 + #include <X11/extensions/dpmsconst.h> + #else +@@ -70,10 +72,10 @@ + + static Bool OMAPFBProbe(DriverPtr drv, int flags); + static Bool OMAPFBPreInit(ScrnInfoPtr pScrn, int flags); +-static Bool OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv); +-static Bool OMAPFBEnterVT(int scrnIndex, int flags); +-static void OMAPFBLeaveVT(int scrnIndex, int flags); +-static Bool OMAPFBSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); ++static Bool OMAPFBScreenInit(SCREEN_INIT_ARGS_DECL); ++static Bool OMAPFBEnterVT(VT_FUNC_ARGS_DECL); ++static void OMAPFBLeaveVT(VT_FUNC_ARGS_DECL); ++static Bool OMAPFBSwitchMode(SWITCH_MODE_ARGS_DECL); + + static Bool + OMAPFBEnsureRec(ScrnInfoPtr pScrn) +@@ -481,7 +483,7 @@ OMAPFBXvScreenInit(ScreenPtr pScreen) + } + + static Bool +-OMAPFBCloseScreen(int scrnIndex, ScreenPtr pScreen) ++OMAPFBCloseScreen(CLOSE_SCREEN_ARGS_DECL) + { + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + OMAPFBPtr ofb = OMAPFB(pScrn); +@@ -490,11 +492,11 @@ OMAPFBCloseScreen(int scrnIndex, ScreenPtr pScreen) + + pScreen->CloseScreen = ofb->CloseScreen; + +- return (*pScreen->CloseScreen)(scrnIndex, pScreen); ++ return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS); + } + + static Bool +-OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) ++OMAPFBScreenInit(SCREEN_INIT_ARGS_DECL) + { + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + OMAPFBPtr ofb = OMAPFB(pScrn); +@@ -516,7 +518,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + PROT_READ | PROT_WRITE, MAP_SHARED, + ofb->fd, 0); + if (ofb->fb == MAP_FAILED) { +- xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size); ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size); + return FALSE; + } + +@@ -526,7 +528,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + /* Only support TrueColor for now */ + if (!miSetVisualTypes(pScrn->depth, TrueColorMask, + pScrn->rgbBits, pScrn->defaultVisual)) { +- xf86DrvMsg(scrnIndex, X_ERROR, "visual type setup failed" ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "visual type setup failed" + " for %d bits per pixel [1]\n", + pScrn->bitsPerPixel); + return FALSE; +@@ -534,7 +536,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + + /* Set up pixmap depth information */ + if (!miSetPixmapDepths()) { +- xf86DrvMsg(scrnIndex,X_ERROR,"pixmap depth setup failed\n"); ++ xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"pixmap depth setup failed\n"); + return FALSE; + } + +@@ -546,7 +548,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + pScrn->virtualY, pScrn->xDpi, + pScrn->yDpi, pScrn->displayWidth, + pScrn->bitsPerPixel)) { +- xf86DrvMsg(scrnIndex, X_ERROR, "fbScreenInit failed\n"); ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "fbScreenInit failed\n"); + return FALSE; + } + +@@ -567,7 +569,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + + /* Initialize XRender fallbacks */ + if (!fbPictureInit(pScreen, NULL, 0)) { +- xf86DrvMsg(scrnIndex, X_ERROR, "fbPictureInit failed\n"); ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "fbPictureInit failed\n"); + return FALSE; + } + +@@ -579,7 +581,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + + /* Initialize default colormap */ + if (!miCreateDefColormap(pScreen)) { +- xf86DrvMsg(scrnIndex, X_ERROR, ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "creating default colormap failed\n"); + return FALSE; + } +@@ -589,7 +591,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + /* This is non-fatal since we might be running against older + * kernel driver in which case we only do basic 2D stuff... + */ +- xf86DrvMsg(scrnIndex, X_ERROR, "Reading plane info failed\n"); ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Reading plane info failed\n"); + } else if (!ofb->dss) { + + ofb->plane_info.enabled = 1; +@@ -602,7 +604,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + } + + if (ioctl (ofb->fd, OMAPFB_SETUP_PLANE, &ofb->plane_info)) { +- xf86DrvMsg(scrnIndex, X_ERROR, ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "%s: Plane setup failed: %s\n", + __FUNCTION__, strerror(errno)); + return FALSE; +@@ -645,9 +647,10 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) + return TRUE; + } + +-static Bool OMAPFBSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) ++static Bool OMAPFBSwitchMode(SWITCH_MODE_ARGS_DECL) + { +- return xf86SetSingleMode (xf86Screens[scrnIndex], mode, RR_Rotate_0); ++ SCRN_INFO_PTR(arg); ++ return xf86SetSingleMode (pScrn, mode, RR_Rotate_0); + } + + void +@@ -699,14 +702,14 @@ OMAPFBPrintCapabilities(ScrnInfoPtr pScrn, + /*** Unimplemented: */ + + static Bool +-OMAPFBEnterVT(int scrnIndex, int flags) ++OMAPFBEnterVT(VT_FUNC_ARGS_DECL) + { + xf86Msg(X_NOT_IMPLEMENTED, "%s\n", __FUNCTION__); + return TRUE; + } + + static void +-OMAPFBLeaveVT(int scrnIndex, int flags) ++OMAPFBLeaveVT(VT_FUNC_ARGS_DECL) + { + xf86Msg(X_NOT_IMPLEMENTED, "%s\n", __FUNCTION__); + } +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/0007-compat-for-newer-xorg.patch b/pcr/xf86-video-omapfb/0007-compat-for-newer-xorg.patch new file mode 100644 index 000000000..938db55ea --- /dev/null +++ b/pcr/xf86-video-omapfb/0007-compat-for-newer-xorg.patch @@ -0,0 +1,37 @@ +From 791b31abd4d1c76f04044195b60d62ee1e82e4e5 Mon Sep 17 00:00:00 2001 +From: Kevin Mihelich <kevin@archlinuxarm.org> +Date: Sun, 15 Feb 2015 11:54:28 -0700 +Subject: [PATCH 7/7] compat for newer xorg + +--- + src/omapfb-xv-blizzard.c | 1 + + src/omapfb-xv-generic.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/src/omapfb-xv-blizzard.c b/src/omapfb-xv-blizzard.c +index b71d2aa..d0328b9 100644 +--- a/src/omapfb-xv-blizzard.c ++++ b/src/omapfb-xv-blizzard.c +@@ -30,6 +30,7 @@ + * - + */ + ++#include <xorg-server.h> + #include "xf86.h" + #include "xf86_OSlib.h" + #include "xf86xv.h" +diff --git a/src/omapfb-xv-generic.c b/src/omapfb-xv-generic.c +index b33f344..d8ea960 100644 +--- a/src/omapfb-xv-generic.c ++++ b/src/omapfb-xv-generic.c +@@ -25,6 +25,7 @@ + * Generic functions for the XV driver + */ + ++#include <xorg-server.h> + #include "xf86.h" + #include "xf86_OSlib.h" + #include "xf86xv.h" +-- +2.3.0 + diff --git a/pcr/xf86-video-omapfb/PKGBUILD b/pcr/xf86-video-omapfb/PKGBUILD new file mode 100644 index 000000000..038aac392 --- /dev/null +++ b/pcr/xf86-video-omapfb/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Kevin Mihelich <kevin@archlinuxarm.org> +# Maintainer: Isaac David <isacdaavid@at@isacdaavid@dot@info> +# OMAP FrameBuffer driver for Xorg + +buildarch=4 + +pkgname="xf86-video-omapfb" +pkgver=0.1.1.1 +pkgrel=9 +arch=('armv7h') +url="http://anonscm.debian.org/cgit/collab-maint/xf86-video-omapfb.git/" +license=('GPL2') +makedepends=('pkgconfig' 'xorg-server-devel' 'resourceproto' 'scrnsaverproto') +options=('!libtool') +source=("http://archlinuxarm.org/builder/src/xf86-video-omapfb_0.1.1.1.tar.gz" + "0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch" + "0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch" + "0003-force-plain-mode.patch" + "0004-blacklist-tv-out.patch" + "0005-Attempt-to-fix-VRFB.patch" + "0006-omapfb-port-to-new-xserver-video-API.patch" + "0007-compat-for-newer-xorg.patch") +md5sums=('a9bca5424bd76d53b78826f9d5fa4abe' + '890884c69a2334d8c7e812c729af5b13' + '723efe8327d43795e9a5b0efc6d7010d' + '1cc90e32023eb989451ba0360becb96e' + '8f322ad500ca6d73cbffa03dc8069db5' + '66887007c4341ba693b46f90dc93e300' + '198a41675ba379bb6545104270126f29' + '2d7bb40047ebcb3997afa345d80f9e67') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -p1 -i ../0001-Revert-Set-a-large-CRTC-upper-limit-to-not-prune-lar.patch + patch -p1 -i ../0002-Revert-Set-virtual-size-when-configuring-framebuffer.patch + patch -p1 -i ../0003-force-plain-mode.patch + patch -p1 -i ../0004-blacklist-tv-out.patch + patch -p1 -i ../0005-Attempt-to-fix-VRFB.patch + patch -p1 -i ../0006-omapfb-port-to-new-xserver-video-API.patch + patch -p1 -i ../0007-compat-for-newer-xorg.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./autogen.sh + ./configure --prefix=/usr + + make +} + +package() { + pkgdesc="OMAP3+ framebuffer driver for X" + + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install +} |