configure.ac | 2 src/openchrome_drm.h | 75 --------------------------------- src/via_driver.c | 113 +++++++++++++-------------------------------------- src/via_driver.h | 3 - src/via_drm.h | 35 +++++++++++++-- src/via_memmgr.c | 21 ++++----- tools/registers.c | 3 - 7 files changed, 76 insertions(+), 176 deletions(-)
New commits: commit 422d028257c27952460fa9a35a7291212db43982 Author: Kevin Brace <kevinbr...@bracecomputerlab.com> Date: Wed Jun 8 13:42:37 2022 -0500 Version bumped to 0.6.500 Discontinue the use of 'openchrome' based OpenChrome DRM. 'via' based OpenChrome DRM Version 3.5.0 will replace it. Its uAPI will also change as a result. Signed-off-by: Kevin Brace <kevinbr...@bracecomputerlab.com> diff --git a/configure.ac b/configure.ac index 0d01bd3..5309970 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-openchrome], - [0.6.411], + [0.6.500], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome], [xf86-video-openchrome]) commit 04c73010c6ea30a27dda3cd01cfd68e864206df4 Author: Kevin Brace <kevinbr...@gmx.com> Date: Wed Jun 8 13:42:37 2022 -0500 Use 'via' based OpenChrome DRM only from now on Discontinue the use of 'openchrome' based OpenChrome DRM. Its uAPI will also change as a result. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/src/openchrome_drm.h b/src/openchrome_drm.h deleted file mode 100644 index bfa296e..0000000 --- a/src/openchrome_drm.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright © 2020 Kevin Brace - * - * 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(s): - * - * Kevin Brace <kevinbr...@gmx.com> - */ - -#ifndef __OPENCHROME_DRM_H__ -#define __OPENCHROME_DRM_H__ - - -#include "drm.h" - - -#if defined(__cplusplus) -extern "C" { -#endif - - -#define DRM_OPENCHROME_GEM_CREATE 0x00 -#define DRM_OPENCHROME_GEM_MAP 0x01 -#define DRM_OPENCHROME_GEM_UNMAP 0x02 - - -#define DRM_IOCTL_OPENCHROME_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_OPENCHROME_GEM_CREATE, struct drm_openchrome_gem_create) -#define DRM_IOCTL_OPENCHROME_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_OPENCHROME_GEM_MAP, struct drm_openchrome_gem_map) -#define DRM_IOCTL_OPENCHROME_GEM_UNMAP DRM_IOR(DRM_COMMAND_BASE + DRM_OPENCHROME_GEM_UNMAP, struct drm_openchrome_gem_unmap) - - -struct drm_openchrome_gem_create { - uint64_t size; - uint32_t alignment; - uint32_t domain; - uint32_t handle; - uint64_t offset; -}; - -struct drm_openchrome_gem_map { - uint32_t handle; - uint64_t map_offset; -}; - -struct drm_openchrome_gem_unmap { - uint32_t handle; -}; - - -#if defined(__cplusplus) -} -#endif - -#endif /* __OPENCHROME_DRM_H__ */ diff --git a/src/via_driver.c b/src/via_driver.c index e50cbfd..a24e2cf 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -65,7 +65,7 @@ #ifdef OPENCHROMEDRI static const ViaDRMVersion drmVIADRMExpected = { 1, 3, 0 }; static const ViaDRMVersion drmVIADRMCompat = { 3, 0, 0 }; -static const ViaDRMVersion drmOpenChromeDRMVersion = { 3, 4, 0 }; +static const ViaDRMVersion drmVIADRMKMSSupport = { 3, 5, 0 }; #endif /* OPENCHROMEDRI */ /* Prototypes. */ @@ -870,120 +870,69 @@ viaDrmOpen(ScrnInfoPtr pScrn) pVia->PciInfo->func); } - /* - * Look for OpenChrome DRM first. - * KMS supports needs to be present for OpenChrome DRM to - * function properly. - */ - pVia->drmmode.fd = drmOpen(OPENCHROME_DRM_DRIVER_NAME, busId); + busId = DRICreatePCIBusID(pVia->PciInfo); + pVia->drmmode.fd = drmOpen(VIA_DRM_DRIVER_NAME, busId); if (pVia->drmmode.fd != -1) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "OpenChrome DRM detected.\n"); + "Compatible DRM detected.\n"); drmVer = drmGetVersion(pVia->drmmode.fd); if (drmVer) { pVia->drmVerMajor = drmVer->version_major; pVia->drmVerMinor = drmVer->version_minor; pVia->drmVerPatchLevel = drmVer->version_patchlevel; drmFreeVersion(drmVer); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "OpenChrome DRM Version: %d.%d.%d\n", + "DRM Version: %d.%d.%d\n", pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPatchLevel); - if ((pVia->drmVerMajor > drmOpenChromeDRMVersion.major) || - ((pVia->drmVerMajor == drmOpenChromeDRMVersion.major) && - (pVia->drmVerMinor >= drmOpenChromeDRMVersion.minor))) { + if ((pVia->drmVerMajor > drmVIADRMKMSSupport.major) || + ((pVia->drmVerMajor == drmVIADRMKMSSupport.major) && + (pVia->drmVerMinor >= drmVIADRMKMSSupport.minor))) { if (!drmCheckModesettingSupported(busId)) { pVia->KMS = TRUE; pVia->directRenderingType = DRI_2; pVia->NoAccel = TRUE; xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "KMS is supported by " - "OpenChrome DRM.\n"); + "KMS is supported by DRM.\n"); } else { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "KMS is not available.\n"); xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Disabling OpenChrome DRM support.\n"); + "Disabling DRM support.\n"); } + } else if (((pVia->drmVerMajor > drmVIADRMExpected.major) && + (pVia->drmVerMajor < drmVIADRMCompat.major)) || + ((pVia->drmVerMajor == drmVIADRMExpected.major) && + (pVia->drmVerMinor >= drmVIADRMExpected.minor) && + (pVia->drmVerMajor < drmVIADRMCompat.major))) { + pVia->directRenderingType = DRI_1; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "DRI1 DRM is found.\n"); } else { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Unsupported version of OpenChrome DRM " - "detected.\n"); + "DRM is not compatible with DDX.\n" + "DDX can work with " + "DRM version from %d.%d to less than %d.%d.\n", + drmVIADRMExpected.major, + drmVIADRMExpected.minor, + drmVIADRMCompat.major, + drmVIADRMCompat.minor); xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Only OpenChrome DRM Version %d.%d or " - "later is supported.\n", - drmOpenChromeDRMVersion.major, - drmOpenChromeDRMVersion.minor); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Disabling OpenChrome DRM support.\n"); + "Disabling DRM support.\n"); } } else { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Not able to obtain OpenChrome DRM version.\n"); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Disabling OpenChrome DRM support.\n"); + "Not able to obtain DRM version.\n"); } + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "DDX will now operate without DRM.\n"); } free(busId); - /* - * Now, check for "legacy" DRI1 VIA DRM. - */ - if (!pVia->KMS) { - busId = DRICreatePCIBusID(pVia->PciInfo); - pVia->drmmode.fd = drmOpen(VIA_DRM_DRIVER_NAME, busId); - if (pVia->drmmode.fd != -1) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "VIA DRM detected.\n"); - drmVer = drmGetVersion(pVia->drmmode.fd); - if (drmVer) { - pVia->drmVerMajor = drmVer->version_major; - pVia->drmVerMinor = drmVer->version_minor; - pVia->drmVerPatchLevel = drmVer->version_patchlevel; - drmFreeVersion(drmVer); - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "VIA DRM Version: %d.%d.%d\n", - pVia->drmVerMajor, pVia->drmVerMinor, - pVia->drmVerPatchLevel); - - if (((pVia->drmVerMajor > drmVIADRMExpected.major) && - (pVia->drmVerMajor < drmVIADRMCompat.major)) || - ((pVia->drmVerMajor == drmVIADRMExpected.major) && - (pVia->drmVerMinor >= drmVIADRMExpected.minor) && - (pVia->drmVerMajor < drmVIADRMCompat.major))) { - pVia->directRenderingType = DRI_1; - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "This version of VIA DRM is " - "compatible with OpenChrome DDX.\n"); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "This version of VIA DRM is not " - "compatible with OpenChrome DDX.\n" - "OpenChrome DDX can work with " - "VIA DRM Version %d.%d to %d.%d.\n", - drmVIADRMExpected.major, - drmVIADRMExpected.minor, - drmVIADRMCompat.major, - drmVIADRMCompat.minor); - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Disabling VIA DRM support.\n"); - } - } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Not able to obtain VIA DRM version.\n"); - } - } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "OpenChrome DDX will now operate " - "without DRM.\n"); - } - - free(busId); - } - status = TRUE; exit: DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, diff --git a/src/via_driver.h b/src/via_driver.h index d175069..08969a6 100644 --- a/src/via_driver.h +++ b/src/via_driver.h @@ -95,8 +95,7 @@ (PACKAGE_VERSION_MINOR << 16) | \ PACKAGE_VERSION_PATCHLEVEL -#define OPENCHROME_DRM_DRIVER_NAME "openchrome" -#define VIA_DRM_DRIVER_NAME "via" +#define VIA_DRM_DRIVER_NAME "via" #define VIA_AGP_UPL_SIZE (1024*128) #define VIA_DMA_DL_SIZE (1024*128) diff --git a/src/via_drm.h b/src/via_drm.h index a1e125d..e9da45c 100644 --- a/src/via_drm.h +++ b/src/via_drm.h @@ -1,4 +1,5 @@ /* + * Copyright © 2020 Kevin Brace * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. * @@ -16,10 +17,10 @@ * 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS 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. + * THE AUTHORS, COPYRIGHT HOLDERS, AND/OR ITS SUPPLIERS 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. */ #ifndef _VIA_DRM_H_ #define _VIA_DRM_H_ @@ -81,6 +82,11 @@ extern "C" { #define DRM_VIA_DMA_BLIT 0x0e #define DRM_VIA_BLIT_SYNC 0x0f +#define DRM_VIA_GEM_CREATE 0x10 +#define DRM_VIA_GEM_MAP 0x11 +#define DRM_VIA_GEM_UNMAP 0x12 + + #define DRM_IOCTL_VIA_ALLOCMEM DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t) #define DRM_IOCTL_VIA_FREEMEM DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t) #define DRM_IOCTL_VIA_AGP_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_AGP_INIT, drm_via_agp_t) @@ -97,6 +103,10 @@ extern "C" { #define DRM_IOCTL_VIA_DMA_BLIT DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t) #define DRM_IOCTL_VIA_BLIT_SYNC DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t) +#define DRM_IOCTL_VIA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_GEM_CREATE, struct drm_via_gem_create) +#define DRM_IOCTL_VIA_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_GEM_MAP, struct drm_via_gem_map) +#define DRM_IOCTL_VIA_GEM_UNMAP DRM_IOR(DRM_COMMAND_BASE + DRM_VIA_GEM_UNMAP, struct drm_via_gem_unmap) + /* Indices into buf.Setup where various bits of state are mirrored per * context and per buffer. These can be fired at the card as a unit, * or in a piecewise fashion as required. @@ -275,6 +285,23 @@ typedef struct drm_via_dmablit { drm_via_blitsync_t sync; } drm_via_dmablit_t; +struct drm_via_gem_create { + uint64_t size; + uint32_t alignment; + uint32_t domain; + uint32_t handle; + uint64_t offset; +}; + +struct drm_via_gem_map { + uint32_t handle; + uint64_t map_offset; +}; + +struct drm_via_gem_unmap { + uint32_t handle; +}; + #if defined(__cplusplus) } #endif diff --git a/src/via_memmgr.c b/src/via_memmgr.c index 343370e..e1f2a49 100644 --- a/src/via_memmgr.c +++ b/src/via_memmgr.c @@ -39,7 +39,6 @@ #include "via_driver.h" #ifdef OPENCHROMEDRI #include "via_drm.h" -#include "openchrome_drm.h" #else #include "drm_fourcc.h" @@ -149,16 +148,16 @@ drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size, obj->handle)); } } else if (pVia->directRenderingType == DRI_2) { - struct drm_openchrome_gem_create args; + struct drm_via_gem_create args; memset(&args, 0, sizeof(args)); args.size = size; args.alignment = alignment; args.domain = domain; ret = drmCommandWriteRead(pVia->drmmode.fd, - DRM_OPENCHROME_GEM_CREATE, + DRM_VIA_GEM_CREATE, &args, - sizeof(struct drm_openchrome_gem_create)); + sizeof(struct drm_via_gem_create)); if (!ret) { /* Okay the X server expects to know the offset because * of non-KMS. Once we have KMS working the offset @@ -202,7 +201,7 @@ drm_bo_map(ScrnInfoPtr pScrn, struct buffer_object *obj) { VIAPtr pVia = VIAPTR(pScrn); #ifdef OPENCHROMEDRI - struct drm_openchrome_gem_map args; + struct drm_via_gem_map args; int ret; #endif /* OPENCHROMEDRI */ @@ -229,9 +228,9 @@ drm_bo_map(ScrnInfoPtr pScrn, struct buffer_object *obj) memset(&args, 0, sizeof(args)); args.handle = obj->handle; ret = drmCommandWriteRead(pVia->drmmode.fd, - DRM_OPENCHROME_GEM_MAP, + DRM_VIA_GEM_MAP, &args, - sizeof(struct drm_openchrome_gem_map)); + sizeof(struct drm_via_gem_map)); if (ret) { obj->ptr = NULL; goto exit; @@ -257,7 +256,7 @@ drm_bo_unmap(ScrnInfoPtr pScrn, struct buffer_object *obj) { VIAPtr pVia = VIAPTR(pScrn); #ifdef OPENCHROMEDRI - struct drm_openchrome_gem_unmap args; + struct drm_via_gem_unmap args; int ret; #endif /* OPENCHROMEDRI */ @@ -270,12 +269,12 @@ drm_bo_unmap(ScrnInfoPtr pScrn, struct buffer_object *obj) } else if (pVia->directRenderingType == DRI_2) { munmap(obj->ptr, obj->size); - memset(&args, 0, sizeof(struct drm_openchrome_gem_unmap)); + memset(&args, 0, sizeof(struct drm_via_gem_unmap)); args.handle = obj->handle; ret = drmCommandRead(pVia->drmmode.fd, - DRM_OPENCHROME_GEM_UNMAP, + DRM_VIA_GEM_UNMAP, &args, - sizeof(struct drm_openchrome_gem_unmap)); + sizeof(struct drm_via_gem_unmap)); if (ret) { goto exit; } commit d9c3bced3495f52b4bab0fef85634e7dd8a8953b Author: Kevin Brace <kevinbr...@gmx.com> Date: Wed Jun 8 13:42:37 2022 -0500 Suppress compile time format specifier warning of via_regs_dump tool Use an inttypes.h format specifier macro for displaying a uint64_t type. This occurs in a 64-bit compilation environment. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/tools/registers.c b/tools/registers.c index 7b8f8df..4ef5d3c 100644 --- a/tools/registers.c +++ b/tools/registers.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <stdio.h> #include <stdint.h> +#include <inttypes.h> #include <unistd.h> #include <string.h> #include <errno.h> @@ -1045,7 +1046,7 @@ static void dump_sl(const char *pfx) temp = (readb_idx_reg(0x3c5, 0x6d) & 0x7f); sl_in_mem_addr |= (temp << 37); - printf("%sSL in System memory: 0x%llx, RTSF in SL: 0x%lx\n", + printf("%sSL in System memory: 0x%"PRIx64", RTSF in SL: 0x%lx\n", pfx, sl_in_mem_addr, rtsf_in_sl_addr); }