From 74a74be23feb5d44121f059e1ab96787be4b7532 Mon Sep 17 00:00:00 2001 From: Dominik Sliwa Date: Thu, 15 Dec 2016 14:22:05 +0100 Subject: apalis-tk1: Mainline kernel machine This patch adds mainline linux based Apalis TK1 machine. It includes compatible recipes for libdrm, mesa, Xorg, and weston. Signed-off-by: Dominik Sliwa Acked-by: Max Krummenacher --- ...-use-render-nodes-and-tegra-tiling-format.patch | 145 +++++++++++++++++++++ .../0002-HACK-enable-GLX-with-DRI3.patch | 72 ++++++++++ .../xorg-xserver/xserver-xorg_1.18.4.bbappend | 20 +++ 3 files changed, 237 insertions(+) create mode 100644 recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0001-HACK-use-render-nodes-and-tegra-tiling-format.patch create mode 100644 recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0002-HACK-enable-GLX-with-DRI3.patch create mode 100644 recipes-graphics/xorg-xserver/xserver-xorg_1.18.4.bbappend (limited to 'recipes-graphics/xorg-xserver') diff --git a/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0001-HACK-use-render-nodes-and-tegra-tiling-format.patch b/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0001-HACK-use-render-nodes-and-tegra-tiling-format.patch new file mode 100644 index 0000000..39b92e8 --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0001-HACK-use-render-nodes-and-tegra-tiling-format.patch @@ -0,0 +1,145 @@ +From c9ba24058a5cae32c8d8431911485fba7c6d3a14 Mon Sep 17 00:00:00 2001 +From: Alexandre Courbot +Date: Thu, 24 Sep 2015 18:23:51 +0900 +Subject: [PATCH 1/7] [HACK] use render nodes and tegra tiling format + +--- + glamor/glamor_egl.c | 5 +++ + hw/xfree86/drivers/modesetting/drmmode_display.c | 56 ++++++++++++++++++++++-- + hw/xfree86/drivers/modesetting/drmmode_display.h | 1 + + 3 files changed, 58 insertions(+), 4 deletions(-) + +diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c +index 5aacbed..b6941f2 100644 +--- a/glamor/glamor_egl.c ++++ b/glamor/glamor_egl.c +@@ -809,6 +809,11 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) + xf86GlamorEGLPrivateIndex = xf86AllocateScrnInfoPrivateIndex(); + + scrn->privates[xf86GlamorEGLPrivateIndex].ptr = glamor_egl; ++ ++ ++ fd = open("/dev/dri/renderD128", O_RDWR); ++ xf86Msg(X_INFO, "Opening render node: %d\n", fd); ++ + glamor_egl->fd = fd; + #ifdef GLAMOR_HAS_GBM + glamor_egl->gbm = gbm_create_device(glamor_egl->fd); +diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c +index 9c54310..9c9fa27 100644 +--- a/hw/xfree86/drivers/modesetting/drmmode_display.c ++++ b/hw/xfree86/drivers/modesetting/drmmode_display.c +@@ -50,6 +50,8 @@ + + #include "driver.h" + ++#include ++ + static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height); + + static Bool +@@ -160,15 +162,61 @@ drmmode_bo_map(drmmode_ptr drmmode, drmmode_bo *bo) + } + + static Bool ++drmmode_tegra_import(drmmode_ptr drmmode, drmmode_bo *bo) ++{ ++ struct drm_tegra_gem_set_tiling args; ++ int err; ++ ++ memset(&args, 0, sizeof(args)); ++ args.handle = bo->drm_handle; ++ args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; ++ args.value = 4; ++ ++ err = ioctl(drmmode->fd, DRM_IOCTL_TEGRA_GEM_SET_TILING, &args); ++ if (err < 0) { ++ xf86Msg(X_ERROR, "failed to set tiling parameters\n"); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static Bool + drmmode_create_bo(drmmode_ptr drmmode, drmmode_bo *bo, + unsigned width, unsigned height, unsigned bpp) + { + #ifdef GLAMOR_HAS_GBM ++ uint32_t handle; ++ int fd; ++ int ret; ++ + if (drmmode->glamor) { + bo->gbm = gbm_bo_create(drmmode->gbm, width, height, + GBM_FORMAT_ARGB8888, + GBM_BO_USE_RENDERING | GBM_BO_USE_SCANOUT); +- return bo->gbm != NULL; ++ ++ if (bo->gbm == NULL) ++ return FALSE; ++ ++ handle = gbm_bo_get_handle(bo->gbm).u32; ++ ++ ret = drmPrimeHandleToFD(gbm_device_get_fd(drmmode->gbm), handle, 0, &fd); ++ if (ret) { ++ xf86Msg(X_ERROR, "failed to export bo\n"); ++ return FALSE; ++ } ++ ++ ret = drmPrimeFDToHandle(drmmode->fd, fd, &handle); ++ if (ret) { ++ xf86Msg(X_ERROR, "failed to import bo\n"); ++ close(fd); ++ return FALSE; ++ } ++ ++ close(fd); ++ bo->drm_handle = handle; ++ ++ return drmmode_tegra_import(drmmode, bo); + } + #endif + +@@ -410,7 +458,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode, + pScrn->virtualX, pScrn->virtualY, + pScrn->depth, drmmode->kbpp, + drmmode_bo_get_pitch(&drmmode->front_bo), +- drmmode_bo_get_handle(&drmmode->front_bo), ++ drmmode->front_bo.drm_handle, + &drmmode->fb_id); + if (ret < 0) { + ErrorF("failed to add fb %d\n", ret); +@@ -712,7 +760,7 @@ drmmode_shadow_allocate(xf86CrtcPtr crtc, int width, int height) + ret = drmModeAddFB(drmmode->fd, width, height, crtc->scrn->depth, + drmmode->kbpp, + drmmode_bo_get_pitch(&drmmode_crtc->rotate_bo), +- drmmode_bo_get_handle(&drmmode_crtc->rotate_bo), ++ drmmode_crtc->rotate_bo.drm_handle, + &drmmode_crtc->rotate_fb_id); + + if (ret) { +@@ -1700,7 +1748,7 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height) + + ret = drmModeAddFB(drmmode->fd, width, height, scrn->depth, + scrn->bitsPerPixel, pitch, +- drmmode_bo_get_handle(&drmmode->front_bo), ++ drmmode->front_bo.drm_handle, + &drmmode->fb_id); + if (ret) + goto fail; +diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h +index 9139ed4..547fd0d 100644 +--- a/hw/xfree86/drivers/modesetting/drmmode_display.h ++++ b/hw/xfree86/drivers/modesetting/drmmode_display.h +@@ -41,6 +41,7 @@ typedef struct { + #ifdef GLAMOR_HAS_GBM + struct gbm_bo *gbm; + #endif ++ uint32_t drm_handle; + } drmmode_bo; + + typedef struct { +-- +2.9.3 + diff --git a/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0002-HACK-enable-GLX-with-DRI3.patch b/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0002-HACK-enable-GLX-with-DRI3.patch new file mode 100644 index 0000000..f27c2a9 --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg-1.18.4/0002-HACK-enable-GLX-with-DRI3.patch @@ -0,0 +1,72 @@ +From 1baf53e2b345ae7d883d4fa6c74f09188ea53b51 Mon Sep 17 00:00:00 2001 +From: Alexandre Courbot +Date: Fri, 25 Sep 2015 14:37:01 +0900 +Subject: [PATCH 2/7] [HACK] enable GLX with DRI3 + +--- + glamor/glamor_egl.c | 5 ++++- + hw/xfree86/dri2/dri2.c | 5 ++++- + hw/xfree86/drivers/modesetting/dri2.c | 5 +++-- + 3 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c +index b6941f2..8d25171 100644 +--- a/glamor/glamor_egl.c ++++ b/glamor/glamor_egl.c +@@ -724,6 +724,7 @@ glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx) + glamor_ctx->make_current = glamor_egl_make_current; + + #ifdef DRI3 ++ xf86Msg(X_INFO, "DRI3 capable: %d\n", glamor_egl->dri3_capable); + if (glamor_egl->dri3_capable) { + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + /* Tell the core that we have the interfaces for import/export +@@ -740,7 +741,9 @@ glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx) + /* To do DRI3 device FD generation, we need to open a new fd + * to the same device we were handed in originally. + */ +- glamor_egl->device_path = drmGetDeviceNameFromFd(glamor_egl->fd); ++ //glamor_egl->device_path = drmGetDeviceNameFromFd(glamor_egl->fd); ++ glamor_egl->device_path = "/dev/dri/renderD128"; ++ xf86Msg(X_INFO, "DRI3 device name: %s %d\n", glamor_egl->device_path, glamor_egl->fd); + + if (!dri3_screen_init(screen, &glamor_dri3_info)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, +diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c +index d55be19..00c5c61 100644 +--- a/hw/xfree86/dri2/dri2.c ++++ b/hw/xfree86/dri2/dri2.c +@@ -1334,9 +1334,12 @@ DRI2Connect(ClientPtr client, ScreenPtr pScreen, + return FALSE; + + *driverName = ds->driverNames[driver_id]; +- *deviceName = ds->deviceName; ++ //*deviceName = ds->deviceName; ++ *deviceName = "/dev/dri/renderD128"; + *fd = ds->fd; + ++ xf86Msg(X_INFO, "%s: %s %s %d\n", __func__, *driverName, *deviceName, *fd); ++ + if (client) { + DRI2ClientPtr dri2_client; + dri2_client = dri2ClientPrivate(client); +diff --git a/hw/xfree86/drivers/modesetting/dri2.c b/hw/xfree86/drivers/modesetting/dri2.c +index 83cb3e0..3834a01 100644 +--- a/hw/xfree86/drivers/modesetting/dri2.c ++++ b/hw/xfree86/drivers/modesetting/dri2.c +@@ -831,9 +831,10 @@ ms_dri2_screen_init(ScreenPtr screen) + } + + memset(&info, '\0', sizeof(info)); +- info.fd = ms->fd; ++ info.fd = gbm_device_get_fd(ms->drmmode.gbm); ++ //info.fd = ms->fd; + info.driverName = NULL; /* Compat field, unused. */ +- info.deviceName = drmGetDeviceNameFromFd(ms->fd); ++ info.deviceName = drmGetDeviceNameFromFd(info.fd); + + info.version = 4; + info.CreateBuffer = ms_dri2_create_buffer; +-- +2.9.3 + diff --git a/recipes-graphics/xorg-xserver/xserver-xorg_1.18.4.bbappend b/recipes-graphics/xorg-xserver/xserver-xorg_1.18.4.bbappend new file mode 100644 index 0000000..746f367 --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg_1.18.4.bbappend @@ -0,0 +1,20 @@ +# always latest and greatest. +PE_tegra124m = "99" + +FILESEXTRAPATHS_prepend := "${THISDIR}/xserver-xorg-${PV}:" + +SRC_URI_append_tegra124m = "\ + file://0001-HACK-use-render-nodes-and-tegra-tiling-format.patch \ + file://0002-HACK-enable-GLX-with-DRI3.patch \ + " +PACKAGE_ARCH_tegra124m = "${MACHINE_ARCH}" + +COMPATIBLE_MACHINE_tegra124m = "(apalis-tk1-mainline)" + +# provided by xf86-input-evdev_2.10.0 +do_install_append () { + rm -f ${D}/usr/share/X11/xorg.conf.d/10-evdev.conf +} + +PACKAGECONFIG_tegra124m ?= "dri2 dri3 xshmfence glamor xwayland udev ${XORG_CRYPTO} " + -- cgit v1.2.3