diff --git a/libdrm-2.4.109-sw.patch b/libdrm-2.4.109-sw.patch new file mode 100755 index 0000000000000000000000000000000000000000..d23a8c24ad28f230b19d117f83e36bfb596cc492 --- /dev/null +++ b/libdrm-2.4.109-sw.patch @@ -0,0 +1,75 @@ +diff -Nuar libdrm-2.4.109.org/include/drm/drm_sarea.h libdrm-2.4.109.sw/include/drm/drm_sarea.h +--- libdrm-2.4.109.org/include/drm/drm_sarea.h 2022-02-26 01:16:04.810000000 +0000 ++++ libdrm-2.4.109.sw/include/drm/drm_sarea.h 2022-02-26 04:13:03.090000000 +0000 +@@ -39,7 +39,9 @@ + #endif + + /* SAREA area needs to be at least a page */ +-#if defined(__alpha__) ++#if defined(__sw_64__) ++#define SAREA_MAX 0x2000U ++#elif defined(__alpha__) + #define SAREA_MAX 0x2000U + #elif defined(__mips__) + #define SAREA_MAX 0x4000U +diff -Nuar libdrm-2.4.109.org/xf86drm.c libdrm-2.4.109.sw/xf86drm.c +--- libdrm-2.4.109.org/xf86drm.c 2022-02-26 01:16:04.840000000 +0000 ++++ libdrm-2.4.109.sw/xf86drm.c 2022-02-26 02:33:50.700000000 +0000 +@@ -1044,7 +1044,7 @@ + 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 -Nuar libdrm-2.4.109.org/xf86drm.h libdrm-2.4.109.sw/xf86drm.h +--- libdrm-2.4.109.org/xf86drm.h 2022-02-26 01:16:04.840000000 +0000 ++++ libdrm-2.4.109.sw/xf86drm.h 2022-02-26 04:11:01.090000000 +0000 +@@ -382,6 +382,34 @@ + "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 @@ + #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 diff --git a/libdrm.spec b/libdrm.spec index ffd6e3d53fad894f9006b08aec18d4919b474a6c..efa6c60be39d18bb68cca5b134ddd167cc4a195a 100644 --- a/libdrm.spec +++ b/libdrm.spec @@ -47,7 +47,7 @@ end} Name: libdrm Version: 2.4.109 -Release: 4 +Release: 6 License: MIT Summary: library for direct rendering manager @@ -80,6 +80,9 @@ BuildRequires: pkgconfig(udev) Patch1001: %{name}-make-dri-perms-okay.patch Patch1002: %{name}-2.4.0-no-bc.patch +%ifarch sw_64 +Patch1003: libdrm-2.4.109-sw.patch +%endif %description %{name} provides a user space library for accessing the DRM, direct rendering manager, @@ -267,6 +270,12 @@ install -Dpm0644 -t %{buildroot}%{_udevrulesdir} %{S:2} %endif %changelog +* Fri Nov 18 2022 zhouwenpei - 2.4.109-6 +- Optimize the patch for add sw architecture + +* Fri Nov 18 2022 wuzx - 2.4.109-5 +- Add sw64 architecture + * Tue Oct 18 2022 Liu Zixian - 2.4.109-4 - remove unused BuildRequires