From b9832971ad5b20cb9e7961ccb5a213c59195f16a Mon Sep 17 00:00:00 2001 From: wxiat Date: Mon, 31 Jul 2023 15:39:03 +0800 Subject: [PATCH] cherry-pick `add sw arch #69144edad3fa9f6d32041144524ba7509d3bc9a3`. cherry-pick `Fix sw macro #ffacd58d562e62de7abf3ed2128aaaee26a703e2`. Signed-off-by: Weisson --- libdrm-2.4.114-sw.patch | 90 +++++++++++++++++++++++++++++++++++++++++ libdrm.spec | 9 ++++- 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 libdrm-2.4.114-sw.patch diff --git a/libdrm-2.4.114-sw.patch b/libdrm-2.4.114-sw.patch new file mode 100644 index 0000000..3f23e4c --- /dev/null +++ b/libdrm-2.4.114-sw.patch @@ -0,0 +1,90 @@ +From e275281fadc09630adde823c72047f6695dd8746 Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Thu, 1 Feb 2024 20:58:35 +0800 +Subject: [PATCH] add sw support. + +Signed-off-by: Weisson +--- + include/drm/drm_sarea.h | 2 ++ + xf86drm.c | 2 +- + xf86drm.h | 32 +++++++++++++++++++++++++++++++- + 3 files changed, 34 insertions(+), 2 deletions(-) + +diff --git a/include/drm/drm_sarea.h b/include/drm/drm_sarea.h +index 93025be..431287a 100644 +--- a/include/drm/drm_sarea.h ++++ b/include/drm/drm_sarea.h +@@ -39,6 +39,8 @@ extern "C" { + #endif + + /* SAREA area needs to be at least a page */ ++#if defined(__sw_64__) ++#define SAREA_MAX 0x2000U + #if defined(__alpha__) + #define SAREA_MAX 0x2000U + #elif defined(__mips__) +diff --git a/xf86drm.c b/xf86drm.c +index 76d830f..db6dabb 100644 +--- a/xf86drm.c ++++ b/xf86drm.c +@@ -1045,7 +1045,7 @@ static int drmOpenByBusid(const char *busid, int type) + sv.drm_dd_major = -1; /* Don't care */ + sv.drm_dd_minor = -1; /* Don't care */ + if (drmSetInterfaceVersion(fd, &sv)) { +-#ifndef __alpha__ ++#ifndef __sw_64__ + pci_domain_ok = 0; + #endif + sv.drm_di_major = 1; +diff --git a/xf86drm.h b/xf86drm.h +index 4c79a65..3a5e069 100644 +--- a/xf86drm.h ++++ b/xf86drm.h +@@ -382,6 +382,34 @@ typedef struct _drmSetVersion { + "r" (new)); \ + } while (0) + ++#elif defined(__sw_64__) ++#define DRM_CAS(lock, old, new, ret) \ ++ do { \ ++ int tmp, old32; \ ++ int tmp1; \ ++ __asm__ __volatile__( \ ++ " addw $31, %6, %4\n" \ ++ " ldi %1, %3\n" \ ++ "1: lldw %0, 0(%1)\n" \ ++ " cmpeq %0, %4, %2\n" \ ++ " wr_f %2\n" \ ++ " mov %5, %0\n" \ ++ " lstw %0, 0(%1)\n" \ ++ " rd_f %0\n" \ ++ " beq %2, 2f\n" \ ++ " beq %0, 3f\n" \ ++ " memb\n" \ ++ "2: cmpeq %2, 0, %2\n" \ ++ ".subsection 2\n" \ ++ "3: br 1b\n" \ ++ ".previous" \ ++ : "=&r"(tmp), "=&r"(tmp1), "=&r"(ret), \ ++ "=m"(__drm_dummy_lock(lock)), \ ++ "=&r"(old32) \ ++ : "r"(new), "r"(old) \ ++ : "memory"); \ ++ } while (0) ++ + #elif defined(__alpha__) + + #define DRM_CAS(lock, old, new, ret) \ +@@ -511,7 +539,9 @@ do { register unsigned int __old __asm("o0"); \ + #define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */ + #endif + +-#if defined(__alpha__) ++#if defined(__sw_64__) ++#define DRM_CAS_RESULT(_result) long _result ++#elif defined(__alpha__) + #define DRM_CAS_RESULT(_result) long _result + #elif defined(__powerpc__) + #define DRM_CAS_RESULT(_result) int _result +-- +2.31.1 diff --git a/libdrm.spec b/libdrm.spec index e41d4d4..fa8f7b2 100644 --- a/libdrm.spec +++ b/libdrm.spec @@ -51,10 +51,12 @@ end} %bcond_without install_test_programs %bcond_without udev +%define anolis_release .0.1 + Name: libdrm Summary: Direct Rendering Manager runtime library Version: 2.4.115 -Release: 1%{?dist} +Release: 1%{anolis_release}%{?dist} License: MIT URL: https://dri.freedesktop.org @@ -88,6 +90,7 @@ BuildRequires: chrpath Patch1001: libdrm-make-dri-perms-okay.patch # remove backwards compat not needed on Fedora Patch1002: libdrm-2.4.0-no-bc.patch +Patch1003: libdrm-2.4.114-sw.patch %description Direct Rendering Manager runtime library @@ -279,6 +282,10 @@ cp %{SOURCE1} %{buildroot}%{_docdir}/libdrm %endif %changelog +* Mon Mar 25 2024 wxiat - 2.4.115-1.0.1 +- cherry-pick `add sw arch #69144edad3fa9f6d32041144524ba7509d3bc9a3`. +- cherry-pick `Fix sw macro #ffacd58d562e62de7abf3ed2128aaaee26a703e2`. + * Wed May 17 2023 Dave Airlie - 2.4.115-1 - Update to 2.4.115 -- Gitee