summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/ecl-16-format-directive-limit.patch83
-rw-r--r--gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch17
-rw-r--r--gnu/packages/patches/ecl-16-libffi.patch16
-rw-r--r--gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch39
-rw-r--r--gnu/packages/patches/emacs-telega-patch-server-functions.patch31
-rw-r--r--gnu/packages/patches/flint-ldconfig.patch26
-rw-r--r--gnu/packages/patches/ganeti-deterministic-manual.patch16
-rw-r--r--gnu/packages/patches/ganeti-disable-version-symlinks.patch136
-rw-r--r--gnu/packages/patches/ganeti-drbd-compat.patch166
-rw-r--r--gnu/packages/patches/ganeti-haskell-pythondir.patch66
-rw-r--r--gnu/packages/patches/ganeti-os-disk-size.patch17
-rw-r--r--gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch21
-rw-r--r--gnu/packages/patches/ganeti-shepherd-master-failover.patch18
-rw-r--r--gnu/packages/patches/ganeti-shepherd-support.patch87
-rw-r--r--gnu/packages/patches/gash-utils-ls-test.patch25
-rw-r--r--gnu/packages/patches/gdb-hurd.patch69
-rw-r--r--gnu/packages/patches/grub-cross-system-i686.patch96
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch4
-rw-r--r--gnu/packages/patches/ilmbase-fix-test-arm.patch60
-rw-r--r--gnu/packages/patches/intel-xed-fix-nondeterminism.patch113
-rw-r--r--gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch31
-rw-r--r--gnu/packages/patches/libreoffice-poppler-compat.patch19
-rw-r--r--gnu/packages/patches/libvnc-CVE-2018-20750.patch44
-rw-r--r--gnu/packages/patches/libvnc-CVE-2019-15681.patch23
-rw-r--r--gnu/packages/patches/linbox-fix-pkgconfig.patch23
-rw-r--r--gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch192
-rw-r--r--gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch97
-rw-r--r--gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch113
-rw-r--r--gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch177
-rw-r--r--gnu/packages/patches/opendht-fix-jami.patch33
-rw-r--r--gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch358
-rw-r--r--gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch48
-rw-r--r--gnu/packages/patches/python-tinycss2-flake8-compat.patch36
-rw-r--r--gnu/packages/patches/qtbase-absolute-runpath.patch17
-rw-r--r--gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch101
-rw-r--r--gnu/packages/patches/rust-1.45-linker-locale.patch14
-rw-r--r--gnu/packages/patches/sqlite-hurd.patch58
-rw-r--r--gnu/packages/patches/sssd-fix-samba.patch50
-rw-r--r--gnu/packages/patches/tao-add-missing-headers.patch102
-rw-r--r--gnu/packages/patches/tao-fix-parser-types.patch26
-rw-r--r--gnu/packages/patches/transmission-CVE-2018-10756.patch71
-rw-r--r--gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch1132
-rw-r--r--gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch29
-rw-r--r--gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch37
-rw-r--r--gnu/packages/patches/u-boot-leds-common-binding-con.patch115
-rw-r--r--gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch14
-rw-r--r--gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch367
-rw-r--r--gnu/packages/patches/u-boot-video-rockchip-fix-build.patch48
-rw-r--r--gnu/packages/patches/ungoogled-chromium-system-nspr.patch120
-rw-r--r--gnu/packages/patches/widelands-system-wide_minizip.patch153
-rw-r--r--gnu/packages/patches/x265-arm-flags.patch38
-rw-r--r--gnu/packages/patches/xpra-4.0.1-systemd-run.patch34
52 files changed, 2820 insertions, 2006 deletions
diff --git a/gnu/packages/patches/ecl-16-format-directive-limit.patch b/gnu/packages/patches/ecl-16-format-directive-limit.patch
new file mode 100644
index 0000000000..237db92722
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-format-directive-limit.patch
@@ -0,0 +1,83 @@
+Patch backported by Sage.
+
+Fix from upstream that happens to work around
+https://trac.sagemath.org/ticket/23011
+diff --git a/src/lsp/format.lsp b/src/lsp/format.lsp
+index 77ca799..53b887c 100644
+--- a/src/lsp/format.lsp
++++ b/src/lsp/format.lsp
+@@ -307,11 +307,13 @@
+ :start (format-directive-start struct)
+ :end (format-directive-end struct))))
+
++(defconstant +format-directive-limit+ (1+ (char-code #\~)))
++
+ #+formatter
+ (defparameter *format-directive-expanders*
+- (make-array char-code-limit :initial-element nil))
++ (make-array +format-directive-limit+ :initial-element nil))
+ (defparameter *format-directive-interpreters*
+- (make-array char-code-limit :initial-element nil))
++ (make-array +format-directive-limit+ :initial-element nil))
+
+ (defparameter *default-format-error-control-string* nil)
+ (defparameter *default-format-error-offset* nil)
+@@ -550,24 +552,24 @@
+ (write-string directive stream)
+ (interpret-directive-list stream (cdr directives) orig-args args))
+ (#-ecl format-directive #+ecl vector
++ (multiple-value-bind
++ (new-directives new-args)
++ (let* ((code (char-code (format-directive-character directive)))
++ (function
++ (and (< code +format-directive-limit+)
++ (svref *format-directive-interpreters* code)))
++ (*default-format-error-offset*
++ (1- (format-directive-end directive))))
++ (unless function
++ (error 'format-error
++ :complaint "Unknown format directive."))
+ (multiple-value-bind
+ (new-directives new-args)
+- (let ((function
+- (svref *format-directive-interpreters*
+- (char-code (format-directive-character
+- directive))))
+- (*default-format-error-offset*
+- (1- (format-directive-end directive))))
+- (unless function
+- (error 'format-error
+- :complaint "Unknown format directive."))
+- (multiple-value-bind
+- (new-directives new-args)
+- (funcall function stream directive
+- (cdr directives) orig-args args)
+- (values new-directives new-args)))
+- (interpret-directive-list stream new-directives
+- orig-args new-args)))))
++ (funcall function stream directive
++ (cdr directives) orig-args args)
++ (values new-directives new-args)))
++ (interpret-directive-list stream new-directives
++ orig-args new-args)))))
+ args))
+
+
+@@ -639,11 +641,12 @@
+ (values `(write-string ,directive stream)
+ more-directives))
+ (format-directive
+- (let ((expander
+- (aref *format-directive-expanders*
+- (char-code (format-directive-character directive))))
+- (*default-format-error-offset*
+- (1- (format-directive-end directive))))
++ (let* ((code (char-code (format-directive-character directive)))
++ (expander
++ (and (< code +format-directive-limit+)
++ (svref *format-directive-expanders* code)))
++ (*default-format-error-offset*
++ (1- (format-directive-end directive))))
+ (if expander
+ (funcall expander directive more-directives)
+ (error 'format-error
diff --git a/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch b/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch
new file mode 100644
index 0000000000..42d213c0e9
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch
@@ -0,0 +1,17 @@
+Patch adapted from Sage.
+diff -Naur ecl-16.1.2.orig/src/c/file.d ecl-16.1.2/src/c/file.d
+--- ecl-16.1.2.orig/src/c/file.d 2016-05-11 13:10:51.867673867 +1200
++++ ecl-16.1.2/src/c/file.d 2016-05-11 14:44:48.121907307 +1200
+@@ -3354,8 +3354,10 @@
+ ecl_disable_interrupts();
+ do {
+ out = fwrite(c, sizeof(char), n, IO_STREAM_FILE(strm));
+- } while (out < n && restartable_io_error(strm, "fwrite"));
+- ecl_enable_interrupts();
++ /* Ignore write errors to stderr to avoid an infinite loop */
++ } while (out < n && (IO_STREAM_FILE(strm) != stderr) && restartable_io_error(strm, "fwrite"));
++
++ ecl_enable_interrupts();
+ return out;
+ }
+
diff --git a/gnu/packages/patches/ecl-16-libffi.patch b/gnu/packages/patches/ecl-16-libffi.patch
new file mode 100644
index 0000000000..fc06a07606
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-libffi.patch
@@ -0,0 +1,16 @@
+Patch adapted from Sage. Allows building ECL on libffi 3.3.
+diff --git a/src/c/ffi.d b/src/c/ffi.d
+index 8861303e..8a959c23 100644
+--- a/src/c/ffi.d
++++ b/src/c/ffi.d
+@@ -133,8 +133,8 @@ static struct {
+ #elif defined(X86_WIN64)
+ {@':win64', FFI_WIN64},
+ #elif defined(X86_ANY) || defined(X86) || defined(X86_64)
+- {@':cdecl', FFI_SYSV},
+- {@':sysv', FFI_SYSV},
++ {@':cdecl', FFI_UNIX64},
++ {@':sysv', FFI_UNIX64},
+ {@':unix64', FFI_UNIX64},
+ #endif
+ };
diff --git a/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch b/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
new file mode 100644
index 0000000000..6d31021f67
--- /dev/null
+++ b/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
@@ -0,0 +1,39 @@
+From edb930005b0ba83051ca8a59b493e9a3c8ef580a Mon Sep 17 00:00:00 2001
+From: Chris Feng <chris.w.feng@gmail.com>
+Date: Sun, 14 Jun 2020 00:00:00 +0000
+Subject: [PATCH] Fix fullscreen states
+
+* exwm-layout.el (exwm-layout-set-fullscreen,
+exwm-layout-unset-fullscreen): Use `exwm--id' for interactive use.
+(exwm-layout-unset-fullscreen): Mandatorily clear fullscreen states.
+---
+ exwm-layout.el | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/exwm-layout.el b/exwm-layout.el
+index 170c2be..79d0c95 100644
+--- a/exwm-layout.el
++++ b/exwm-layout.el
+@@ -205,7 +205,7 @@
+ :border-width 0
+ :stack-mode xcb:StackMode:Above))
+ (cl-pushnew xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state)
+- (exwm-layout--set-ewmh-state id)
++ (exwm-layout--set-ewmh-state exwm--id)
+ (xcb:flush exwm--connection)
+ (set-window-dedicated-p (get-buffer-window) t)
+ (exwm-input--release-keyboard exwm--id)))
+@@ -233,7 +233,9 @@
+ (let ((window (get-buffer-window nil t)))
+ (when window
+ (exwm-layout--show exwm--id window))))
+- (exwm-layout--set-ewmh-state id)
++ (setq exwm--ewmh-state
++ (delq xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state))
++ (exwm-layout--set-ewmh-state exwm--id)
+ (xcb:flush exwm--connection)
+ (set-window-dedicated-p (get-buffer-window) nil)
+ (when (eq 'line-mode exwm--selected-input-mode)
+--
+2.26.2
+
diff --git a/gnu/packages/patches/emacs-telega-patch-server-functions.patch b/gnu/packages/patches/emacs-telega-patch-server-functions.patch
new file mode 100644
index 0000000000..e3d49278d0
--- /dev/null
+++ b/gnu/packages/patches/emacs-telega-patch-server-functions.patch
@@ -0,0 +1,31 @@
+Remove interactive build for telega-server, as it fails on Guix.
+Modify the `telega-server--find-bin' function to only use the version
+of telega-server installed by Guix.
+
+Created by Brett Gilio <brettg@gnu.org>
+
+--- a/telega-server.el
++++ b/telega-server.el
+@@ -113,7 +113,6 @@ If already deferring, then just executes the BODY."
+ If BUILD-FLAGS is specified, then rebuild server without any
+ queries using this flags for building, could be empty string.
+ Otherwise query user about building flags."
+- (interactive)
+ (telega-test-env 'quiet)
+ (when (or build-flags
+ (y-or-n-p "Build `telega-server'? "))
+@@ -137,11 +136,8 @@ Otherwise query user about building flags."
+ (defun telega-server--find-bin ()
+ "Find telega-server executable.
+ Raise error if not found."
+- (let ((exec-path (cons telega-directory exec-path)))
+- (or (executable-find "telega-server")
+- (progn (telega-server-build)
+- (executable-find "telega-server"))
+- (error "`telega-server' not found in exec-path"))))
++ (or (executable-find "telega-server")
++ (error "`telega-server' not found in exec-path")))
+
+ (defun telega-server-version ()
+ "Return telega-server version."
+
diff --git a/gnu/packages/patches/flint-ldconfig.patch b/gnu/packages/patches/flint-ldconfig.patch
deleted file mode 100644
index d7c66e17ab..0000000000
--- a/gnu/packages/patches/flint-ldconfig.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Patch by Andreas Enge <andreas@enge.fr>.
-Remedy the absence of ldconfig and explicitly create an additional symbolic
-link to the flint library, as discussed privately with upstream.
-
-diff -r -u flint-2.5.2.orig/configure flint-2.5.2/configure
---- flint-2.5.2.orig/configure 2015-08-13 18:16:22.000000000 +0200
-+++ flint-2.5.2/configure 2015-08-14 17:38:14.316284437 +0200
-@@ -714,6 +714,7 @@
- echo "FLINT_SHARED=$SHARED" >> Makefile
- echo "FLINT_LIB=$FLINT_LIB" >> Makefile
- echo "FLINT_LIBNAME=$FLINT_LIBNAME" >> Makefile
-+echo "FLINT_MAJOR=$FLINT_MAJOR" >> Makefile
- echo "FLINT_SOLIB=$FLINT_SOLIB" >> Makefile
- echo "EXEEXT=$EXEEXT" >> Makefile
- echo "PREFIX=$PREFIX" >> Makefile
-diff -r -u flint-2.5.2.orig/Makefile.in flint-2.5.2/Makefile.in
---- flint-2.5.2.orig/Makefile.in 2015-08-13 18:16:22.000000000 +0200
-+++ flint-2.5.2/Makefile.in 2015-08-14 17:38:50.584774817 +0200
-@@ -118,6 +118,7 @@
- $(LDCONFIG) -n "$(CURDIR)"; \
- fi
- ln -sf "$(FLINT_LIB)" "$(FLINT_LIBNAME)"; \
-+ ln -sf "$(FLINT_LIB)" "$(FLINT_LIBNAME).$(FLINT_MAJOR)"; \
-
- libflint.a: $(OBJS) $(LIB_SOURCES) $(EXT_SOURCES) $(HEADERS) $(EXT_HEADERS) | build build/interfaces
- $(AT)$(foreach ext, $(EXTENSIONS), $(foreach dir, $(filter-out %templates, $(patsubst $(ext)/%.h, %, $(wildcard $(ext)/*.h))), mkdir -p build/$(dir); BUILD_DIR=$(CURDIR)/build/$(dir); export BUILD_DIR; MOD_DIR=$(dir); export MOD_DIR; $(MAKE) -f $(CURDIR)/Makefile.subdirs -C $(ext)/$(dir) static || exit $$?;))
diff --git a/gnu/packages/patches/ganeti-deterministic-manual.patch b/gnu/packages/patches/ganeti-deterministic-manual.patch
new file mode 100644
index 0000000000..2d90aa740e
--- /dev/null
+++ b/gnu/packages/patches/ganeti-deterministic-manual.patch
@@ -0,0 +1,16 @@
+Sort the ecode list in the gnt-cluster manual for deterministic results.
+
+Submitted upstream: <https://github.com/ganeti/ganeti/pull/1504>.
+
+diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
+--- a/lib/build/sphinx_ext.py
++++ b/lib/build/sphinx_ext.py
+@@ -108,7 +108,7 @@ CV_ECODES_DOC = "ecodes"
+ # pylint: disable=W0621
+ CV_ECODES_DOC_LIST = [(name, doc) for (_, name, doc) in constants.CV_ALL_ECODES]
+ DOCUMENTED_CONSTANTS = {
+- CV_ECODES_DOC: CV_ECODES_DOC_LIST,
++ CV_ECODES_DOC: sorted(CV_ECODES_DOC_LIST, key=lambda tup: tup[0]),
+ }
+
+
diff --git a/gnu/packages/patches/ganeti-disable-version-symlinks.patch b/gnu/packages/patches/ganeti-disable-version-symlinks.patch
new file mode 100644
index 0000000000..a5f347cfc6
--- /dev/null
+++ b/gnu/packages/patches/ganeti-disable-version-symlinks.patch
@@ -0,0 +1,136 @@
+This patch adds a new "--disable-version-links" configuration option
+that allows installing to the standard GNU installation directories
+instead of having to add symlinks in /etc/ganeti/{lib,share} that
+points to the right $ganeti/{lib,share}/$version. Mainly to reduce
+service complexity, and because Guix users can install as many versions
+of Ganeti they can muster without resorting to such hacks.
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -66,11 +66,16 @@ SHELL_ENV_INIT = autotools/shell-env-init
+ # so, if some currently architecture-independent executable is replaced by an
+ # architecture-dependent one (and hence has to go under $(versiondir)), add a link
+ # under $(versionedsharedir) but do not change the external links.
++#
++# As of Ganeti 3.0, it is possible to disable this behavior by passing
++# --disable-version-links, in which case the standard GNU installation
++# directories are used.
+ if USE_VERSION_FULL
+ DIRVERSION=$(VERSION_FULL)
+ else
+ DIRVERSION=$(VERSION_MAJOR).$(VERSION_MINOR)
+ endif
++if USE_VERSION_LINKS
+ versiondir = $(libdir)/ganeti/$(DIRVERSION)
+ defaultversiondir = $(libdir)/ganeti/default
+ versionedsharedir = $(prefix)/share/ganeti/$(DIRVERSION)
+@@ -90,6 +95,18 @@ gntpythondir = $(versionedsharedir)
+ pkgpython_bindir = $(versionedsharedir)
+ gnt_python_sbindir = $(versionedsharedir)
+ tools_pythondir = $(versionedsharedir)
++else
++myexeclibdir = $(pkglibdir)
++pkgpython_rpc_stubdir = $(pkgpythondir)/rpc/stub
++gntpythondir = $(sbindir)
++pkgpython_bindir = $(pkglibdir)
++gnt_python_sbindir = $(sbindir)
++tools_pythondir = $(pkglibdir)
++versionedsharedir = $(pkglibdir)
++# This is a hack but works because the only user does $(versiondir)$(datadir).
++versiondir =
++endif !USE_VERSION_LINKS
++
+
+ clientdir = $(pkgpythondir)/client
+ cmdlibdir = $(pkgpythondir)/cmdlib
+@@ -2356,6 +2373,7 @@ src/AutoConf.hs: Makefile src/AutoConf.hs.in $(PRINT_PY_CONSTANTS) \
+ -DVERSION_SUFFIX="$(VERSION_SUFFIX)" \
+ -DVERSION_FULL="$(VERSION_FULL)" \
+ -DDIRVERSION="$(DIRVERSION)" \
++ -DUSE_VERSION_LINKS="$(USE_VERSION_LINKS)" \
+ -DLOCALSTATEDIR="$(localstatedir)" \
+ -DSYSCONFDIR="$(sysconfdir)" \
+ -DSSH_CONFIG_DIR="$(SSH_CONFIG_DIR)" \
+@@ -2857,6 +2875,7 @@ install-exec-local:
+ @mkdir_p@ "$(DESTDIR)${localstatedir}/lib/ganeti" \
+ "$(DESTDIR)${localstatedir}/log/ganeti" \
+ "$(DESTDIR)${localstatedir}/run/ganeti"
++if USE_VERSION_LINKS
+ for dir in $(SYMLINK_TARGET_DIRS); do \
+ @mkdir_p@ $(DESTDIR)$$dir; \
+ done
+@@ -2892,7 +2911,8 @@ install-exec-local:
+ if INSTALL_SYMLINKS
+ $(LN_S) -f $(versionedsharedir) $(DESTDIR)$(sysconfdir)/ganeti/share
+ $(LN_S) -f $(versiondir) $(DESTDIR)$(sysconfdir)/ganeti/lib
+-endif
++endif INSTALL_SYMLINKS
++endif USE_VERSION_LINKS
+
+ .PHONY: apidoc
+ if WANT_HSAPIDOC
+diff --git a/configure.ac b/configure.ac
+--- a/configure.ac
++++ b/configure.ac
+@@ -29,6 +29,23 @@ AC_SUBST([BINDIR], $bindir)
+ AC_SUBST([SBINDIR], $sbindir)
+ AC_SUBST([MANDIR], $mandir)
+
++# --enable-version-links
++AC_ARG_ENABLE([version-links],
++ [AS_HELP_STRING([--enable-version-links],
++ m4_normalize([install ganeti to version-specific
++ subdirectories to allow installing multiple versions
++ in parallel (default: enabled)]))],
++ [[if test "$enableval" != no; then
++ USE_VERSION_LINKS=True
++ else
++ USE_VERSION_LINKS=False
++ fi
++ ]],
++ [USE_VERSION_LINKS=True
++ ])
++AC_SUBST(USE_VERSION_LINKS, $USE_VERSION_LINKS)
++AM_CONDITIONAL([USE_VERSION_LINKS], [test "$USE_VERSION_LINKS" = True])
++
+ # --enable-versionfull
+ AC_ARG_ENABLE([versionfull],
+ [AS_HELP_STRING([--enable-versionfull],
+diff --git a/lib/bootstrap.py b/lib/bootstrap.py
+--- a/lib/bootstrap.py
++++ b/lib/bootstrap.py
+@@ -944,7 +944,7 @@ def SetupNodeDaemon(opts, cluster_name, node, ssh_port):
+ debug=opts.debug, verbose=opts.verbose,
+ use_cluster_key=True, ask_key=opts.ssh_key_check,
+ strict_host_check=opts.ssh_key_check,
+- ensure_version=True)
++ ensure_version=constants.USE_VERSION_LINKS)
+
+ _WaitForSshDaemon(node, ssh_port)
+ _WaitForNodeDaemon(node)
+diff --git a/src/AutoConf.hs.in b/src/AutoConf.hs.in
+--- a/src/AutoConf.hs.in
++++ b/src/AutoConf.hs.in
+@@ -64,6 +64,9 @@ versionFull = "VERSION_FULL"
+ dirVersion :: String
+ dirVersion = "DIRVERSION"
+
++useVersionLinks :: Bool
++useVersionLinks = USE_VERSION_LINKS
++
+ localstatedir :: String
+ localstatedir = "LOCALSTATEDIR"
+
+diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
+--- a/src/Ganeti/Constants.hs
++++ b/src/Ganeti/Constants.hs
+@@ -164,5 +164,8 @@ versionRevision = AutoConf.versionRevision
+ dirVersion :: String
+ dirVersion = AutoConf.dirVersion
+
++useVersionLinks :: Bool
++useVersionLinks = AutoConf.useVersionLinks
++
+ osApiV10 :: Int
+ osApiV10 = 10
diff --git a/gnu/packages/patches/ganeti-drbd-compat.patch b/gnu/packages/patches/ganeti-drbd-compat.patch
new file mode 100644
index 0000000000..32f46bc7ed
--- /dev/null
+++ b/gnu/packages/patches/ganeti-drbd-compat.patch
@@ -0,0 +1,166 @@
+This patch adds support for newer versions of DRBD.
+
+Submitted upstream: <https://github.com/ganeti/ganeti/pull/1496>.
+
+diff --git a/lib/storage/drbd.py b/lib/storage/drbd.py
+--- a/lib/storage/drbd.py
++++ b/lib/storage/drbd.py
+@@ -315,6 +315,13 @@ class DRBD8Dev(base.BlockDev):
+ """
+ return self._show_info_cls.GetDevInfo(self._GetShowData(minor))
+
++ @staticmethod
++ def _NeedsLocalSyncerParams():
++ # For DRBD >= 8.4, syncer init must be done after local, not in net.
++ info = DRBD8.GetProcInfo()
++ version = info.GetVersion()
++ return version["k_minor"] >= 4
++
+ def _MatchesLocal(self, info):
+ """Test if our local config matches with an existing device.
+
+@@ -397,6 +404,20 @@ class DRBD8Dev(base.BlockDev):
+ base.ThrowError("drbd%d: can't attach local disk: %s",
+ minor, result.output)
+
++ def _WaitForMinorSyncParams():
++ """Call _SetMinorSyncParams and raise RetryAgain on errors.
++ """
++ if self._SetMinorSyncParams(minor, self.params):
++ raise utils.RetryAgain()
++
++ if self._NeedsLocalSyncerParams():
++ # Retry because disk config for DRBD resource may be still uninitialized.
++ try:
++ utils.Retry(_WaitForMinorSyncParams, 1.0, 5.0)
++ except utils.RetryTimeout as e:
++ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++ (minor, utils.CommaJoin(e.args[0])))
++
+ def _AssembleNet(self, minor, net_info, dual_pri=False, hmac=None,
+ secret=None):
+ """Configure the network part of the device.
+@@ -432,21 +453,24 @@ class DRBD8Dev(base.BlockDev):
+ # sync speed only after setting up both sides can race with DRBD
+ # connecting, hence we set it here before telling DRBD anything
+ # about its peer.
+- sync_errors = self._SetMinorSyncParams(minor, self.params)
+- if sync_errors:
+- base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
+- (minor, utils.CommaJoin(sync_errors)))
++
++ if not self._NeedsLocalSyncerParams():
++ sync_errors = self._SetMinorSyncParams(minor, self.params)
++ if sync_errors:
++ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++ (minor, utils.CommaJoin(sync_errors)))
+
+ family = self._GetNetFamily(minor, lhost, rhost)
+
+- cmd = self._cmd_gen.GenNetInitCmd(minor, family, lhost, lport,
++ cmds = self._cmd_gen.GenNetInitCmds(minor, family, lhost, lport,
+ rhost, rport, protocol,
+ dual_pri, hmac, secret, self.params)
+
+- result = utils.RunCmd(cmd)
+- if result.failed:
+- base.ThrowError("drbd%d: can't setup network: %s - %s",
+- minor, result.fail_reason, result.output)
++ for cmd in cmds:
++ result = utils.RunCmd(cmd)
++ if result.failed:
++ base.ThrowError("drbd%d: can't setup network: %s - %s",
++ minor, result.fail_reason, result.output)
+
+ def _CheckNetworkConfig():
+ info = self._GetShowInfo(minor)
+@@ -463,19 +487,20 @@ class DRBD8Dev(base.BlockDev):
+ base.ThrowError("drbd%d: timeout while configuring network", minor)
+
+ # Once the assembly is over, try to set the synchronization parameters
+- try:
+- # The minor may not have been set yet, requiring us to set it at least
+- # temporarily
+- old_minor = self.minor
+- self._SetFromMinor(minor)
+- sync_errors = self.SetSyncParams(self.params)
+- if sync_errors:
+- base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
+- (self.minor, utils.CommaJoin(sync_errors)))
+- finally:
+- # Undo the change, regardless of whether it will have to be done again
+- # soon
+- self._SetFromMinor(old_minor)
++ if not self._NeedsLocalSyncerParams():
++ try:
++ # The minor may not have been set yet, requiring us to set it at least
++ # temporarily
++ old_minor = self.minor
++ self._SetFromMinor(minor)
++ sync_errors = self.SetSyncParams(self.params)
++ if sync_errors:
++ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++ (self.minor, utils.CommaJoin(sync_errors)))
++ finally:
++ # Undo the change, regardless of whether it will have to be done again
++ # soon
++ self._SetFromMinor(old_minor)
+
+ @staticmethod
+ def _GetNetFamily(minor, lhost, rhost):
+diff --git a/lib/storage/drbd_cmdgen.py b/lib/storage/drbd_cmdgen.py
+--- a/lib/storage/drbd_cmdgen.py
++++ b/lib/storage/drbd_cmdgen.py
+@@ -56,7 +56,7 @@ class BaseDRBDCmdGenerator(object):
+ def GenLocalInitCmds(self, minor, data_dev, meta_dev, size_mb, params):
+ raise NotImplementedError
+
+- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+ dual_pri, hmac, secret, params):
+ raise NotImplementedError
+
+@@ -138,7 +138,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
+
+ return [args]
+
+- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+ dual_pri, hmac, secret, params):
+ args = ["drbdsetup", self._DevPath(minor), "net",
+ "%s:%s:%s" % (family, lhost, lport),
+@@ -155,7 +155,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
+ if params[constants.LDP_NET_CUSTOM]:
+ args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
+
+- return args
++ return [args]
+
+ def GenSyncParamsCmd(self, minor, params):
+ args = ["drbdsetup", self._DevPath(minor), "syncer"]
+@@ -345,8 +345,14 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
+
+ return cmds
+
+- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+ dual_pri, hmac, secret, params):
++ cmds = []
++
++ cmds.append(["drbdsetup", "new-resource", self._GetResource(minor)])
++ cmds.append(["drbdsetup", "new-minor", self._GetResource(minor),
++ str(minor), "0"])
++
+ args = ["drbdsetup", "connect", self._GetResource(minor),
+ "%s:%s:%s" % (family, lhost, lport),
+ "%s:%s:%s" % (family, rhost, rport),
+@@ -362,7 +368,8 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
+ if params[constants.LDP_NET_CUSTOM]:
+ args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
+
+- return args
++ cmds.append(args)
++ return cmds
+
+ def GenSyncParamsCmd(self, minor, params):
+ args = ["drbdsetup", "disk-options", minor]
diff --git a/gnu/packages/patches/ganeti-haskell-pythondir.patch b/gnu/packages/patches/ganeti-haskell-pythondir.patch
new file mode 100644
index 0000000000..fa77771839
--- /dev/null
+++ b/gnu/packages/patches/ganeti-haskell-pythondir.patch
@@ -0,0 +1,66 @@
+This patch allows the Haskell daemons to locate Python libraries
+installed to a non-standard pythondir. It is necessary because Guix
+does not use versionedsharedir (see related patch that disables it).
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -83,6 +83,7 @@ myexeclibdir = $(pkglibdir)
+ bindir = $(versiondir)/$(BINDIR)
+ sbindir = $(versiondir)$(SBINDIR)
+ mandir = $(versionedsharedir)/root$(MANDIR)
++pythondir = $(versionedsharedir)
+ pkgpythondir = $(versionedsharedir)/ganeti
+ pkgpython_rpc_stubdir = $(versionedsharedir)/ganeti/rpc/stub
+ gntpythondir = $(versionedsharedir)
+@@ -2386,6 +2387,7 @@ src/AutoConf.hs: Makefile src/AutoConf.hs.in $(PRINT_PY_CONSTANTS) \
+ -DPKGLIBDIR="$(libdir)/ganeti" \
+ -DSHAREDIR="$(prefix)/share/ganeti" \
+ -DVERSIONEDSHAREDIR="$(versionedsharedir)" \
++ -DPYTHONDIR="$(pythondir)" \
+ -DDRBD_BARRIERS="$(DRBD_BARRIERS)" \
+ -DDRBD_NO_META_FLUSH="$(DRBD_NO_META_FLUSH)" \
+ -DSYSLOG_USAGE="$(SYSLOG_USAGE)" \
+diff --git a/src/AutoConf.hs.in b/src/AutoConf.hs.in
+--- a/src/AutoConf.hs.in
++++ b/src/AutoConf.hs.in
+@@ -157,6 +157,9 @@ sharedir = "SHAREDIR"
+ versionedsharedir :: String
+ versionedsharedir = "VERSIONEDSHAREDIR"
+
++pythondir :: String
++pythondir = "PYTHONDIR"
++
+ drbdBarriers :: String
+ drbdBarriers = "DRBD_BARRIERS"
+
+diff --git a/src/Ganeti/Path.hs b/src/Ganeti/Path.hs
+--- a/src/Ganeti/Path.hs
++++ b/src/Ganeti/Path.hs
+@@ -188,5 +188,5 @@ getInstReasonFilename instName = instanceReasonDir `pjoin` instName
+
+ -- | The path to the Python executable for starting jobs.
+ jqueueExecutorPy :: IO FilePath
+-jqueueExecutorPy = return $ versionedsharedir
+- </> "ganeti" </> "jqueue" </> "exec.py"
++jqueueExecutorPy = return $ pythondir
++ </> "ganeti" </> "jqueue" </> "exec.py"
+diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
+--- a/src/Ganeti/Query/Exec.hs
++++ b/src/Ganeti/Query/Exec.hs
+@@ -99,12 +99,12 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
+ do
+ use_debug <- isDebugMode
+ env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
+- . M.insert "PYTHONPATH" AC.versionedsharedir
++ . M.insert "PYTHONPATH" AC.pythondir
+ . M.fromList)
+ `liftM` getEnvironment
+ execPy <- P.jqueueExecutorPy
+ logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
+- ++ " with PYTHONPATH=" ++ AC.versionedsharedir
++ ++ " with PYTHONPATH=" ++ AC.pythondir
+
+ (master, child) <- pipeClient connectConfig
+ let (rh, wh) = clientToHandle child
+
diff --git a/gnu/packages/patches/ganeti-os-disk-size.patch b/gnu/packages/patches/ganeti-os-disk-size.patch
new file mode 100644
index 0000000000..16b1d7615c
--- /dev/null
+++ b/gnu/packages/patches/ganeti-os-disk-size.patch
@@ -0,0 +1,17 @@
+This exposes information about disk sizes to OS install scripts. instance-guix
+uses this if available to determine the size of the VM image.
+
+Submitted upstream:
+https://github.com/ganeti/ganeti/pull/1503
+
+diff --git a/lib/backend.py b/lib/backend.py
+--- a/lib/backend.py
++++ b/lib/backend.py
+@@ -4305,6 +4305,7 @@ def OSEnvironment(instance, inst_os, debug=0):
+ uri = _CalculateDeviceURI(instance, disk, real_disk)
+ result["DISK_%d_ACCESS" % idx] = disk.mode
+ result["DISK_%d_UUID" % idx] = disk.uuid
++ result["DISK_%d_SIZE" % idx] = str(disk.size)
+ if real_disk.dev_path:
+ result["DISK_%d_PATH" % idx] = real_disk.dev_path
+ if uri:
diff --git a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
new file mode 100644
index 0000000000..1358e30633
--- /dev/null
+++ b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
@@ -0,0 +1,21 @@
+Do not override PYTHONPATH when calling Python code from the Haskell
+daemons. This is necessary because the Python library dependencies are
+only available through PYTHONPATH.
+
+diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
+--- a/src/Ganeti/Query/Exec.hs
++++ b/src/Ganeti/Query/Exec.hs
+@@ -99,12 +99,10 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
+ do
+ use_debug <- isDebugMode
+ env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
+- . M.insert "PYTHONPATH" AC.pythondir
+ . M.fromList)
+ `liftM` getEnvironment
+ execPy <- P.jqueueExecutorPy
+ logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
+- ++ " with PYTHONPATH=" ++ AC.pythondir
+
+ (master, child) <- pipeClient connectConfig
+ let (rh, wh) = clientToHandle child
+
diff --git a/gnu/packages/patches/ganeti-shepherd-master-failover.patch b/gnu/packages/patches/ganeti-shepherd-master-failover.patch
new file mode 100644
index 0000000000..36a7918998
--- /dev/null
+++ b/gnu/packages/patches/ganeti-shepherd-master-failover.patch
@@ -0,0 +1,18 @@
+By default, master-failover will call "herd start ganeti-wconfd" with
+extra arguments such as --force-node. That does not work with the
+Shepherd, so the Guix service has a "force-start" action for this purpose.
+
+diff --git a/lib/bootstrap.py b/lib/bootstrap.py
+--- a/lib/bootstrap.py
++++ b/lib/bootstrap.py
+@@ -1011,9 +1011,7 @@ def MasterFailover(no_voting=False):
+
+ try:
+ # Forcefully start WConfd so that we can access the configuration
+- result = utils.RunCmd([pathutils.DAEMON_UTIL,
+- "start", constants.WCONFD, "--force-node",
+- "--no-voting", "--yes-do-it"])
++ result = utils.RunCmd(["herd", "force-start", constants.WCONFD])
+ if result.failed:
+ raise errors.OpPrereqError("Could not start the configuration daemon,"
+ " command %s had exitcode %s and error %s" %
diff --git a/gnu/packages/patches/ganeti-shepherd-support.patch b/gnu/packages/patches/ganeti-shepherd-support.patch
new file mode 100644
index 0000000000..f750604344
--- /dev/null
+++ b/gnu/packages/patches/ganeti-shepherd-support.patch
@@ -0,0 +1,87 @@
+Ganeti uses an internal tool to start/stop daemons during init and
+upgrade. This patch makes the tool use native Shepherd facilities.
+
+diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in
+--- a/daemons/daemon-util.in
++++ b/daemons/daemon-util.in
+@@ -184,6 +184,21 @@ use_systemctl() {
+ return 1
+ }
+
++# Checks if we should use the Shepherd to start/stop daemons
++use_shepherd() {
++ # Is Shepherd running as PID 1?
++ ps --no-headers -p 1 -o cmd | grep -q shepherd || return 1
++
++ type -p herd >/dev/null || return 1
++
++ # Does Shepherd know about Ganeti at all?
++ if herd status | grep -q ganeti; then
++ return 0
++ fi
++
++ return 1
++}
++
+ # Prints path to PID file for a daemon.
+ daemon_pidfile() {
+ if [[ "$#" -lt 1 ]]; then
+@@ -261,6 +276,13 @@ check() {
+ else
+ return 1
+ fi
++ elif use_shepherd; then
++ activestate="$(herd status ${name})"
++ if echo $activestate | grep -q Running ; then
++ return 0
++ else
++ return 1
++ fi
+ elif type -p start-stop-daemon >/dev/null; then
+ start-stop-daemon --stop --signal 0 --quiet \
+ --pidfile $pidfile --name "$name"
+@@ -291,6 +313,20 @@ start() {
+ return $?
+ fi
+
++ if use_shepherd; then
++ if herd status "$name" | grep -q "disabled"; then
++ # The Shepherd will disable a service that has stopped, even if it exits
++ # gracefully. Thus, we must re-enable it in case of a master failover.
++ herd enable "${name}"
++ fi
++ # Note: unlike systemd, which happily starts a service and returns success
++ # even if the daemon immediately exits, the Shepherd actually waits for it
++ # to come up. Thus, ignore the exit status from 'herd start' in case of
++ # master daemons running on the wrong node, or ganeti-kvmd disabled, etc.
++ herd start "${name}"
++ return 0
++ fi
++
+ # Read $<daemon>_ARGS and $EXTRA_<daemon>_ARGS
+ eval local args="\"\$${ucname}_ARGS \$EXTRA_${ucname}_ARGS\""
+
+@@ -336,6 +372,13 @@ stop() {
+
+ if use_systemctl; then
+ systemctl stop "${name}.service"
++ elif use_shepherd; then
++ if herd status | grep -q "$name"; then
++ herd stop "$name"
++ else
++ # Do not raise an error if the service has not been enabled.
++ return 0
++ fi
+ elif type -p start-stop-daemon >/dev/null; then
+ start-stop-daemon --stop --quiet --oknodo --retry 30 \
+ --pidfile $pidfile --name "$name"
+@@ -352,6 +395,9 @@ check_and_start() {
+ if use_systemctl; then
+ echo "${name} supervised by systemd but not running, will not restart."
+ return 1
++ elif use_shepherd; then
++ echo "${name} supervised by shepherd but not running, will not restart."
++ return 1
+ fi
+
+ start $name
diff --git a/gnu/packages/patches/gash-utils-ls-test.patch b/gnu/packages/patches/gash-utils-ls-test.patch
new file mode 100644
index 0000000000..e1dfb9c23b
--- /dev/null
+++ b/gnu/packages/patches/gash-utils-ls-test.patch
@@ -0,0 +1,25 @@
+'ls.scm' monkey-patches (ice-9 getopt-long) to allow it to recognize '-1'
+as a valid option. Unfortunately, monkey patching no longer works with
+Guile 3.0 due to inlining, so change the test to make do without '-1'.
+
+diff --git a/tests/core-utils.org b/tests/core-utils.org
+index d35ede8..22718e3 100644
+--- a/tests/core-utils.org
++++ b/tests/core-utils.org
+@@ -93,14 +93,11 @@
+ * ls
+ :script:
+ #+begin_src sh
+- ls -1 tests/data/star
++ ls tests/data/star
+ #+end_src
+ :stdout:
+ #+begin_example
+- 0
+- 1
+- 2
+- 3
++ 0 1 2 3
+ #+end_example
+
+ * test-file
diff --git a/gnu/packages/patches/gdb-hurd.patch b/gnu/packages/patches/gdb-hurd.patch
new file mode 100644
index 0000000000..0af8d4dc28
--- /dev/null
+++ b/gnu/packages/patches/gdb-hurd.patch
@@ -0,0 +1,69 @@
+Taken from upstream, removed ChangeLog.
+
+From 6930bffe3373690b3431d6291f9f7c116d6a1ec4 Mon Sep 17 00:00:00 2001
+From: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date: Sat, 30 May 2020 18:35:59 +0000
+Subject: [PATCH] hurd: fix gnu_debug_flag type
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes
+
+../../gdb/gnu-nat.c:96:6: error: conflicting declaration ‘bool gnu_debug_flag’
+ 96 | bool gnu_debug_flag = false;
+../../gdb/gnu-nat.c: In function ‘void _initialize_gnu_nat()’:
+../../gdb/gnu-nat.c:3511:7: error: cannot
+
+gdb/ChangeLog:
+
+ * gnu-nat.h (gnu_debug_flag): Set type to bool.
+---
+ gdb/ChangeLog | 4 ++++
+ gdb/gnu-nat.h | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h
+index 77c57817b2..766f716587 100644
+--- a/gdb/gnu-nat.h
++++ b/gdb/gnu-nat.h
+@@ -111,7 +111,7 @@ extern char *proc_string (struct proc *proc);
+ __proc_pid (__proc), __proc->tid, \
+ host_address_to_string (__proc) , ##args); } while (0)
+
+-extern int gnu_debug_flag;
++extern bool gnu_debug_flag;
+
+ #define debug(msg, args...) \
+ do { if (gnu_debug_flag) \
+--
+Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
+Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
+
+commit 366f550a593c7e6bae3699a4b6d65fe937af5603
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date: Sat May 30 18:41:30 2020 +0000
+
+ hurd: add missing include
+
+ Fixes
+
+ ../../gdb/gnu-nat.c:2522:14: error: ‘target_gdbarch’ was not declared in this scope; did you mean ‘target_detach’?
+ 2522 | paddress (target_gdbarch (), memaddr), pulongest (len),
+
+ gdb/Changelog:
+
+ * gnu-nat.c: Include "gdbarch.h".
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 3b438a9a43..9b93488b41 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -64,6 +64,7 @@ extern "C"
+ #include "language.h"
+ #include "target.h"
+ #include "gdbsupport/gdb_wait.h"
++#include "gdbarch.h"
+ #include "gdbcmd.h"
+ #include "gdbcore.h"
+ #include "gdbthread.h"
diff --git a/gnu/packages/patches/grub-cross-system-i686.patch b/gnu/packages/patches/grub-cross-system-i686.patch
new file mode 100644
index 0000000000..2715345d63
--- /dev/null
+++ b/gnu/packages/patches/grub-cross-system-i686.patch
@@ -0,0 +1,96 @@
+Not upstreamed.
+Fixes cross-build for the Hurd, from i686-linux,
+see <https://bugs.gnu.org/41982>.
+
+From 17b242e7b80108f1467037e15b605595e4823b2e Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Sun, 21 Jun 2020 15:10:40 +0200
+Subject: [PATCH v2] grub-core: Build fixes for i386
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+* grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386.
+---
+ grub-core/lib/i386/relocator64.S | 33 +++++++++++++++++++++++++++++++-
+ 1 file changed, 32 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S
+index 148f38adb..ea39908c1 100644
+--- a/grub-core/lib/i386/relocator64.S
++++ b/grub-core/lib/i386/relocator64.S
+@@ -63,7 +63,9 @@ VARIABLE(grub_relocator64_cr3)
+ movq %rax, %cr3
+ #endif
+
++#ifdef __x86_64__
+ .code64
++#endif
+
+ /* mov imm64, %rax */
+ .byte 0x48
+@@ -71,7 +73,14 @@ VARIABLE(grub_relocator64_cr3)
+ VARIABLE(grub_relocator64_rsp)
+ .quad 0
+
++#ifndef __x86_64__
++ /* movq %rax, %rsp */
++ .byte 0x48
++ .byte 0x89
++ .byte 0xc4
++#else
+ movq %rax, %rsp
++#endif
+
+ #ifdef GRUB_MACHINE_EFI
+ jmp LOCAL(skip_efi_stack_align)
+@@ -85,7 +94,14 @@ VARIABLE(grub_relocator64_rsp)
+ */
+ VARIABLE(grub_relocator64_efi_start)
+ /* Align the stack as UEFI spec requires. */
++#ifndef __x86_64__
++ .byte 0x48
++ .byte 0x83
++ .byte 0xe4
++ .byte 0xf0
++#else
+ andq $~15, %rsp
++#endif
+
+ LOCAL(skip_efi_stack_align):
+ #endif
+@@ -95,8 +111,15 @@ LOCAL(skip_efi_stack_align):
+ VARIABLE(grub_relocator64_rsi)
+ .quad 0
+
++#ifndef __x86_64__
++ /* movq %rax, %rsi */
++ .byte 0x48
++ .byte 0x89
++ .byte 0xc6
++#else
+ movq %rax, %rsi
+-
++#endif
++
+ /* mov imm64, %rax */
+ .byte 0x48
+ .byte 0xb8
+@@ -128,6 +151,14 @@ VARIABLE(grub_relocator64_rdx)
+ #ifdef __APPLE__
+ .byte 0xff, 0x25
+ .quad 0
++#elif !defined (__x86_64__)
++ /* jmp *LOCAL(jump_addr) (%rip) */
++ .byte 0xff
++ .byte 0x25
++ .byte 0
++ .byte 0
++ .byte 0
++ .byte 0
+ #else
+ jmp *LOCAL(jump_addr) (%rip)
+ #endif
+--
+Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
+Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
+
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index d3d95cbf28..cff0b7ad45 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -25,7 +25,7 @@ index 8be2362..48716f2 100755
-wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
-gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
-gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
--echo -n 935105e1a8a97d64daffb372690e2b566b5f07641f01470929dbbc82d20d4407 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+-echo -n 2ec8c2627e46e80fc208584966a2ded7a0a9ff76b55ffccec0623b89b98ded2b firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
-
-echo Extracting Firefox tarball
-tar -xf firefox-${FFVERSION}esr.source.tar.xz
@@ -37,7 +37,7 @@ index 8be2362..48716f2 100755
+# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
+# gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
+# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-+# echo -n 935105e1a8a97d64daffb372690e2b566b5f07641f01470929dbbc82d20d4407 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
++# echo -n 2ec8c2627e46e80fc208584966a2ded7a0a9ff76b55ffccec0623b89b98ded2b firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+#
+# echo Extracting Firefox tarball
+# tar -xf firefox-${FFVERSION}esr.source.tar.xz
diff --git a/gnu/packages/patches/ilmbase-fix-test-arm.patch b/gnu/packages/patches/ilmbase-fix-test-arm.patch
deleted file mode 100644
index 2dbc55e8c4..0000000000
--- a/gnu/packages/patches/ilmbase-fix-test-arm.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Fix a test failure on ARM platforms:
-
-https://github.com/AcademySoftwareFoundation/openexr/issues/713
-
-Taken from upstream:
-
-https://github.com/AcademySoftwareFoundation/openexr/commit/76d9839cd1b300398f8b801dfcb4bcf2f8c0096f
-
-diff --git a/OpenEXR/IlmImfTest/testHuf.cpp b/OpenEXR/IlmImfTest/testHuf.cpp
-index 4c887ee8..a93b8ea9 100644
---- a/OpenEXR/IlmImfTest/testHuf.cpp
-+++ b/OpenEXR/IlmImfTest/testHuf.cpp
-@@ -181,9 +181,9 @@ compressUncompressSubset(const unsigned short raw[], int n)
- // This DEK hash is determined from an aprior initial run of this
- // test noting its value from the assert message compressVerify().
- //
--#define HUF_COMPRESS_DEK_HASH_FOR_FILL4_USHRT_MAX_PLUS_ONE 2956869585U
--#define HUF_COMPRESS_DEK_HASH_FOR_FILL4_N 3414126535U
--#define HUF_COMPRESS_DEK_HASH_FOR_FILL5_N 169791374U
-+#define HUF_COMPRESS_DEK_HASH_FOR_FILL4_USHRT_MAX_PLUS_ONE 2013380646U
-+#define HUF_COMPRESS_DEK_HASH_FOR_FILL4_N 213880353U
-+#define HUF_COMPRESS_DEK_HASH_FOR_FILL5_N 2492982090U
-
- void
- compressVerify (const unsigned short raw[],
-@@ -200,7 +200,7 @@ compressVerify (const unsigned short raw[],
- // under the topic of sorting and search chapter 6.4.
- //
- unsigned int compressedHash = nCompressed;
-- const char* cptr = compressed;
-+ const unsigned char* cptr = reinterpret_cast<const unsigned char*>( (const char*) compressed);
- for (int i = 0; i < nCompressed; ++i)
- {
- compressedHash =
-@@ -210,6 +210,25 @@ compressVerify (const unsigned short raw[],
- cout << "verifying compressed checksum hash = "
- << compressedHash << std::endl;
-
-+ if (compressedHash != dekHash)
-+ {
-+ cout << "hash verification failed. Got " << compressedHash << " expected " << dekHash << std::endl;
-+ const unsigned char* cptr = reinterpret_cast<const unsigned char*>( (const char*) compressed);
-+ for(int i = 0 ; i < nCompressed ; ++i )
-+ {
-+ cout << std::hex << (0xFF & (int) (*cptr++));
-+ if ( (i & 0xF) ==0 )
-+ {
-+ cout << '\n';
-+ }
-+ else
-+ {
-+ cout << ' ';
-+ }
-+ }
-+ cout << "\n";
-+ }
-+
- assert (compressedHash == dekHash);
- }
-
diff --git a/gnu/packages/patches/intel-xed-fix-nondeterminism.patch b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
new file mode 100644
index 0000000000..c81bd0edde
--- /dev/null
+++ b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
@@ -0,0 +1,113 @@
+This patch removes sources of build non-determinism in the upstream sources.
+
+In particular, many of the compiled sources are generated with Python code,
+which in turn uses dictionaries to index the output C functions. However,
+iterators over Python dictionaries have no guaranteed order, thus resulting in
+the C functions being output in a random order between builds.
+
+The patch below fixes this by forcing an order during output in several key
+places. Note, however, that future updates may uncover new such places that
+just happen to be non-problematic at the time of this patch. If you are
+reading this due to finding such issues, feel free to contact me at
+elaexuotee@wilsonb.com for help.
+
+diff --git a/pysrc/ild_codegen.py b/pysrc/ild_codegen.py
+index 628ec45..a9bff79 100755
+--- a/pysrc/ild_codegen.py
++++ b/pysrc/ild_codegen.py
+@@ -188,14 +188,14 @@ def gen_l2_func_list(agi, target_nt_dict, arg_nt_dict,
+ ild_t_member):
+ """generate L2 functions"""
+ l2_func_list = []
+- for (nt_name,array) in target_nt_dict.items():
++ for (nt_name,array) in sorted(target_nt_dict.items()):
+ target_opname = array.get_target_opname()
+ if array.is_const_lookup_fun():
+ fo = gen_const_l2_function(agi, nt_name,
+ target_opname, ild_t_member)
+ l2_func_list.append(fo)
+ else:
+- for arg_nt_seq,arg_arr in arg_nt_dict.items():
++ for arg_nt_seq,arg_arr in sorted(arg_nt_dict.items()):
+ fo = gen_scalable_l2_function(agi, nt_name,
+ target_opname, ild_t_member, arg_arr, list(arg_nt_seq))
+ l2_func_list.append(fo)
+diff --git a/pysrc/ild_disp.py b/pysrc/ild_disp.py
+index 942c036..cf80e29 100755
+--- a/pysrc/ild_disp.py
++++ b/pysrc/ild_disp.py
+@@ -350,7 +350,8 @@ def work(agi, united_lookup, disp_nts, brdisp_nts, ild_gendir,
+ disp_dict = _gen_l3_array_dict(agi, disp_nts, _disp_token)
+
+
+- nt_arr_list = list(brdisp_dict.values()) + list(disp_dict.values())
++ nt_arr_list = ([v for (k,v) in sorted(brdisp_dict.items())] +
++ [v for (k,v) in sorted(disp_dict.items())])
+ #create function that calls all initialization functions
+ init_f = ild_nt.gen_init_function(nt_arr_list, 'xed_ild_disp_l3_init')
+
+@@ -367,7 +368,7 @@ def work(agi, united_lookup, disp_nts, brdisp_nts, ild_gendir,
+ l2_functions = []
+ eosz_op = ild_eosz.get_target_opname()
+ easz_op = ild_easz.get_target_opname()
+- for nt_name,array in list(disp_dict.items()) + list(brdisp_dict.items()):
++ for nt_name,array in sorted(disp_dict.items()) + sorted(brdisp_dict.items()):
+ #Some DISP NTs depend on EOSZ, others on EASZ, we need to know
+ #that when we generate L2 functions
+ if eosz_op in array.get_arg_names():
+diff --git a/pysrc/ild_easz.py b/pysrc/ild_easz.py
+index 02cd691..c53b9f2 100755
+--- a/pysrc/ild_easz.py
++++ b/pysrc/ild_easz.py
+@@ -165,9 +165,10 @@ def work(agi, united_lookup, easz_nts, ild_gendir, debug):
+ return
+ nt_seq_arrays[tuple(nt_seq)] = array
+ #init function calls all single init functions for the created tables
+- init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()),
++ nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++ init_f = ild_nt.gen_init_function(nt_seq_values,
+ 'xed_ild_easz_init')
+- ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _easz_c_fn,
++ ild_nt.dump_lu_arrays(agi, nt_seq_values, _easz_c_fn,
+ mbuild.join('include-private', _easz_header_fn),
+ init_f)
+ getter_fos = []
+diff --git a/pysrc/ild_eosz.py b/pysrc/ild_eosz.py
+index 6643bc3..89d2d89 100755
+--- a/pysrc/ild_eosz.py
++++ b/pysrc/ild_eosz.py
+@@ -200,10 +200,11 @@ def work(agi, united_lookup, eosz_nts, ild_gendir, debug):
+ return None
+ nt_seq_arrays[tuple(nt_seq)] = array
+ #init function calls all single init functions for the created tables
+- init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()),
++ nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++ init_f = ild_nt.gen_init_function(nt_seq_values,
+ 'xed_ild_eosz_init')
+ #dump init and lookup functions for EOSZ sequences
+- ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _eosz_c_fn,
++ ild_nt.dump_lu_arrays(agi, nt_seq_values, _eosz_c_fn,
+ mbuild.join('include-private', _eosz_header_fn),
+ init_f)
+ #generate EOSZ getter functions - they get xed_decoded_inst_t*
+diff --git a/pysrc/ild_imm.py b/pysrc/ild_imm.py
+index 51c413c..0530bae 100755
+--- a/pysrc/ild_imm.py
++++ b/pysrc/ild_imm.py
+@@ -322,12 +322,14 @@ def work(agi, united_lookup, imm_nts, ild_gendir, eosz_dict,
+ level='l3')
+ nt_dict[nt_name] = array
+
++ nt_dict_values = [v for (k,v) in sorted(nt_dict.items())]
++
+ #create function that calls all initialization functions for L3
+- init_f = ild_nt.gen_init_function(list(nt_dict.values()),
++ init_f = ild_nt.gen_init_function(nt_dict_values,
+ 'xed_ild_imm_l3_init')
+
+ #dump L3 functions
+- ild_nt.dump_lu_arrays(agi, list(nt_dict.values()), _l3_c_fn,
++ ild_nt.dump_lu_arrays(agi, nt_dict_values, _l3_c_fn,
+ mbuild.join('include-private',_l3_header_fn),
+ init_f)
+
diff --git a/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
new file mode 100644
index 0000000000..1352ed7803
--- /dev/null
+++ b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
@@ -0,0 +1,31 @@
+From d80cfc83325f8e95d35ecd9f15b36b96fa9ed3ee Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Sat, 6 Jun 2020 18:56:56 -0400
+Subject: [PATCH] Disable branch-patching
+
+This patch disables JamVM's branch-patching optimization, which tends
+to make JamVM fail with an "Illegal instruction" error on x86_64 (and
+possibly other architectures that use variable-length instructions)
+when built using modern versions of gcc and glibc.
+---
+ src/init.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/init.c b/src/init.c
+index 32539cf..38ad54b 100644
+--- a/src/init.c
++++ b/src/init.c
+@@ -72,8 +72,8 @@ void setDefaultInitArgs(InitArgs *args) {
+ #ifdef INLINING
+ args->replication_threshold = 10;
+ args->profile_threshold = 10;
+- args->branch_patching_dup = TRUE;
+- args->branch_patching = TRUE;
++ args->branch_patching_dup = FALSE;
++ args->branch_patching = FALSE;
+ args->print_codestats = FALSE;
+ args->join_blocks = TRUE;
+ args->profiling = TRUE;
+--
+2.25.2
+
diff --git a/gnu/packages/patches/libreoffice-poppler-compat.patch b/gnu/packages/patches/libreoffice-poppler-compat.patch
deleted file mode 100644
index 8dc0b60a12..0000000000
--- a/gnu/packages/patches/libreoffice-poppler-compat.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Fix type mismatch with Poppler 0.86.
-
-Taken from Arch Linux:
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/libreoffice-poppler-0.86.patch?h=packages/libreoffice-fresh
-
-diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
---- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
-+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
-@@ -563,7 +563,9 @@ void PDFOutDev::processLink(Link* link, Catalog*)
- if (!(pAction && pAction->getKind() == actionURI))
- return;
-
--#if POPPLER_CHECK_VERSION(0, 72, 0)
-+#if POPPLER_CHECK_VERSION(0, 86, 0)
-+ const char* pURI = static_cast<LinkURI*>(pAction)->getURI().c_str();
-+#elif POPPLER_CHECK_VERSION(0, 72, 0)
- const char* pURI = static_cast<LinkURI*>(pAction)->getURI()->c_str();
- #else
- const char* pURI = static_cast<LinkURI*>(pAction)->getURI()->getCString();
diff --git a/gnu/packages/patches/libvnc-CVE-2018-20750.patch b/gnu/packages/patches/libvnc-CVE-2018-20750.patch
deleted file mode 100644
index 146243670a..0000000000
--- a/gnu/packages/patches/libvnc-CVE-2018-20750.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 09e8fc02f59f16e2583b34fe1a270c238bd9ffec Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
-Date: Mon, 7 Jan 2019 10:40:01 +0100
-Subject: [PATCH] Limit lenght to INT_MAX bytes in
- rfbProcessFileTransferReadBuffer()
-
-This ammends 15bb719c03cc70f14c36a843dcb16ed69b405707 fix for a heap
-out-of-bound write access in rfbProcessFileTransferReadBuffer() when
-reading a transfered file content in a server. The former fix did not
-work on platforms with a 32-bit int type (expected by rfbReadExact()).
-
-CVE-2018-15127
-<https://github.com/LibVNC/libvncserver/issues/243>
-<https://github.com/LibVNC/libvncserver/issues/273>
----
- libvncserver/rfbserver.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index 7af84906..f2edbeea 100644
---- a/libvncserver/rfbserver.c
-+++ b/libvncserver/rfbserver.c
-@@ -88,6 +88,8 @@
- #include <errno.h>
- /* strftime() */
- #include <time.h>
-+/* INT_MAX */
-+#include <limits.h>
-
- #ifdef LIBVNCSERVER_WITH_WEBSOCKETS
- #include "rfbssl.h"
-@@ -1472,8 +1474,11 @@ char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length)
- 0XFFFFFFFF, i.e. SIZE_MAX for 32-bit systems. On 64-bit systems, a length of 0XFFFFFFFF
- will safely be allocated since this check will never trigger and malloc() can digest length+1
- without problems as length is a uint32_t.
-+ We also later pass length to rfbReadExact() that expects a signed int type and
-+ that might wrap on platforms with a 32-bit int type if length is bigger
-+ than 0X7FFFFFFF.
- */
-- if(length == SIZE_MAX) {
-+ if(length == SIZE_MAX || length > INT_MAX) {
- rfbErr("rfbProcessFileTransferReadBuffer: too big file transfer length requested: %u", (unsigned int)length);
- rfbCloseClient(cl);
- return NULL;
diff --git a/gnu/packages/patches/libvnc-CVE-2019-15681.patch b/gnu/packages/patches/libvnc-CVE-2019-15681.patch
deleted file mode 100644
index e328d87920..0000000000
--- a/gnu/packages/patches/libvnc-CVE-2019-15681.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From d01e1bb4246323ba6fcee3b82ef1faa9b1dac82a Mon Sep 17 00:00:00 2001
-From: Christian Beier <dontmind@freeshell.org>
-Date: Mon, 19 Aug 2019 22:32:25 +0200
-Subject: [PATCH] rfbserver: don't leak stack memory to the remote
-
-Thanks go to Pavel Cheremushkin of Kaspersky for reporting.
----
- libvncserver/rfbserver.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index 3bacc891..310e5487 100644
---- a/libvncserver/rfbserver.c
-+++ b/libvncserver/rfbserver.c
-@@ -3724,6 +3724,8 @@ rfbSendServerCutText(rfbScreenInfoPtr rfbScreen,char *str, int len)
- rfbServerCutTextMsg sct;
- rfbClientIteratorPtr iterator;
-
-+ memset((char *)&sct, 0, sizeof(sct));
-+
- iterator = rfbGetClientIterator(rfbScreen);
- while ((cl = rfbClientIteratorNext(iterator)) != NULL) {
- sct.type = rfbServerCutText;
diff --git a/gnu/packages/patches/linbox-fix-pkgconfig.patch b/gnu/packages/patches/linbox-fix-pkgconfig.patch
new file mode 100644
index 0000000000..c93915fb1b
--- /dev/null
+++ b/gnu/packages/patches/linbox-fix-pkgconfig.patch
@@ -0,0 +1,23 @@
+Backported from:
+
+From 426eb97ba762c7663884f57ead0909f2aa3cd6a5 Mon Sep 17 00:00:00 2001
+From: Cyril Bouvier <cyril.bouvier@lirmm.fr>
+Date: Thu, 17 Jan 2019 16:32:19 +0100
+Subject: [PATCH] Remove @LINBOXSAGE_LIBS@ from linbox.pc.in
+
+---
+ linbox.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/linbox.pc.in b/linbox.pc.in
+index 278f127e4..c6b8091eb 100644
+--- a/linbox.pc.in
++++ b/linbox.pc.in
+@@ -9,6 +9,6 @@ Description: Exact Linear Algebra library
+ URL: http://github.com/linbox-team/linbox
+ Version: @VERSION@
+ Requires: fflas-ffpack >= 2.4.0, givaro >= 4.1.0
+-Libs: -L${libdir} -llinbox @LINBOXSAGE_LIBS@ @NTL_LIBS@ @MPFR_LIBS@ @FPLLL_LIBS@ @IML_LIBS@ @FLINT_LIBS@ @OCL_LIBS@
++Libs: -L${libdir} -llinbox @NTL_LIBS@ @MPFR_LIBS@ @FPLLL_LIBS@ @IML_LIBS@ @FLINT_LIBS@ @OCL_LIBS@
+ Cflags: @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -I${includedir} @NTL_CFLAGS@ @MPFR_CFLAGS@ @FPLLL_CFLAGS@ @IML_CFLAGS@ @FLINT_CFLAGS@
+ \-------------------------------------------------------
diff --git a/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch
new file mode 100644
index 0000000000..fe381acf1b
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch
@@ -0,0 +1,192 @@
+From f8e146f3430de3a6cd904f3f3f7aa1bfaefee14c Mon Sep 17 00:00:00 2001
+From: Bjorn Pettersson <bjorn.a.pettersson@ericsson.com>
+Date: Thu, 28 Nov 2019 23:18:28 +0100
+Subject: [PATCH] [InstCombine] Fix big-endian miscompile of (bitcast
+ (zext/trunc (bitcast)))
+
+Summary:
+optimizeVectorResize is rewriting patterns like:
+ %1 = bitcast vector %src to integer
+ %2 = trunc/zext %1
+ %dst = bitcast %2 to vector
+
+Since bitcasting between integer an vector types gives
+different integer values depending on endianness, we need
+to take endianness into account. As it happens the old
+implementation only produced the correct result for little
+endian targets.
+
+Fixes: https://bugs.llvm.org/show_bug.cgi?id=44178
+
+Reviewers: spatel, lattner, lebedev.ri
+
+Reviewed By: spatel, lebedev.ri
+
+Subscribers: lebedev.ri, hiraditya, uabelho, llvm-commits
+
+Tags: #llvm
+
+Differential Revision: https://reviews.llvm.org/D70844
+
+(cherry picked from commit a9d6b0e5444741d08ff1df7cf71d1559e7fefc1f)
+---
+ .../InstCombine/InstCombineCasts.cpp | 79 +++++++++++++------
+ llvm/test/Transforms/InstCombine/cast.ll | 6 +-
+ 2 files changed, 60 insertions(+), 25 deletions(-)
+
+diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+index 2c9ba203fbf3..0af3de300e77 100644
+--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
++++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+@@ -18,6 +18,7 @@
+ #include "llvm/IR/DIBuilder.h"
+ #include "llvm/IR/PatternMatch.h"
+ #include "llvm/Support/KnownBits.h"
++#include <numeric>
+ using namespace llvm;
+ using namespace PatternMatch;
+
+@@ -1820,12 +1821,24 @@ Instruction *InstCombiner::visitPtrToInt(PtrToIntInst &CI) {
+ }
+
+ /// This input value (which is known to have vector type) is being zero extended
+-/// or truncated to the specified vector type.
++/// or truncated to the specified vector type. Since the zext/trunc is done
++/// using an integer type, we have a (bitcast(cast(bitcast))) pattern,
++/// endianness will impact which end of the vector that is extended or
++/// truncated.
++///
++/// A vector is always stored with index 0 at the lowest address, which
++/// corresponds to the most significant bits for a big endian stored integer and
++/// the least significant bits for little endian. A trunc/zext of an integer
++/// impacts the big end of the integer. Thus, we need to add/remove elements at
++/// the front of the vector for big endian targets, and the back of the vector
++/// for little endian targets.
++///
+ /// Try to replace it with a shuffle (and vector/vector bitcast) if possible.
+ ///
+ /// The source and destination vector types may have different element types.
+-static Instruction *optimizeVectorResize(Value *InVal, VectorType *DestTy,
+- InstCombiner &IC) {
++static Instruction *optimizeVectorResizeWithIntegerBitCasts(Value *InVal,
++ VectorType *DestTy,
++ InstCombiner &IC) {
+ // We can only do this optimization if the output is a multiple of the input
+ // element size, or the input is a multiple of the output element size.
+ // Convert the input type to have the same element type as the output.
+@@ -1844,31 +1857,53 @@ static Instruction *optimizeVectorResize(Value *InVal, VectorType *DestTy,
+ InVal = IC.Builder.CreateBitCast(InVal, SrcTy);
+ }
+
++ bool IsBigEndian = IC.getDataLayout().isBigEndian();
++ unsigned SrcElts = SrcTy->getNumElements();
++ unsigned DestElts = DestTy->getNumElements();
++
++ assert(SrcElts != DestElts && "Element counts should be different.");
++
+ // Now that the element types match, get the shuffle mask and RHS of the
+ // shuffle to use, which depends on whether we're increasing or decreasing the
+ // size of the input.
+- SmallVector<uint32_t, 16> ShuffleMask;
++ SmallVector<uint32_t, 16> ShuffleMaskStorage;
++ ArrayRef<uint32_t> ShuffleMask;
+ Value *V2;
+
+- if (SrcTy->getNumElements() > DestTy->getNumElements()) {
+- // If we're shrinking the number of elements, just shuffle in the low
+- // elements from the input and use undef as the second shuffle input.
+- V2 = UndefValue::get(SrcTy);
+- for (unsigned i = 0, e = DestTy->getNumElements(); i != e; ++i)
+- ShuffleMask.push_back(i);
++ // Produce an identify shuffle mask for the src vector.
++ ShuffleMaskStorage.resize(SrcElts);
++ std::iota(ShuffleMaskStorage.begin(), ShuffleMaskStorage.end(), 0);
+
++ if (SrcElts > DestElts) {
++ // If we're shrinking the number of elements (rewriting an integer
++ // truncate), just shuffle in the elements corresponding to the least
++ // significant bits from the input and use undef as the second shuffle
++ // input.
++ V2 = UndefValue::get(SrcTy);
++ // Make sure the shuffle mask selects the "least significant bits" by
++ // keeping elements from back of the src vector for big endian, and from the
++ // front for little endian.
++ ShuffleMask = ShuffleMaskStorage;
++ if (IsBigEndian)
++ ShuffleMask = ShuffleMask.take_back(DestElts);
++ else
++ ShuffleMask = ShuffleMask.take_front(DestElts);
+ } else {
+- // If we're increasing the number of elements, shuffle in all of the
+- // elements from InVal and fill the rest of the result elements with zeros
+- // from a constant zero.
++ // If we're increasing the number of elements (rewriting an integer zext),
++ // shuffle in all of the elements from InVal. Fill the rest of the result
++ // elements with zeros from a constant zero.
+ V2 = Constant::getNullValue(SrcTy);
+- unsigned SrcElts = SrcTy->getNumElements();
+- for (unsigned i = 0, e = SrcElts; i != e; ++i)
+- ShuffleMask.push_back(i);
+-
+- // The excess elements reference the first element of the zero input.
+- for (unsigned i = 0, e = DestTy->getNumElements()-SrcElts; i != e; ++i)
+- ShuffleMask.push_back(SrcElts);
++ // Use first elt from V2 when indicating zero in the shuffle mask.
++ uint32_t NullElt = SrcElts;
++ // Extend with null values in the "most significant bits" by adding elements
++ // in front of the src vector for big endian, and at the back for little
++ // endian.
++ unsigned DeltaElts = DestElts - SrcElts;
++ if (IsBigEndian)
++ ShuffleMaskStorage.insert(ShuffleMaskStorage.begin(), DeltaElts, NullElt);
++ else
++ ShuffleMaskStorage.append(DeltaElts, NullElt);
++ ShuffleMask = ShuffleMaskStorage;
+ }
+
+ return new ShuffleVectorInst(InVal, V2,
+@@ -2359,8 +2394,8 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
+ CastInst *SrcCast = cast<CastInst>(Src);
+ if (BitCastInst *BCIn = dyn_cast<BitCastInst>(SrcCast->getOperand(0)))
+ if (isa<VectorType>(BCIn->getOperand(0)->getType()))
+- if (Instruction *I = optimizeVectorResize(BCIn->getOperand(0),
+- cast<VectorType>(DestTy), *this))
++ if (Instruction *I = optimizeVectorResizeWithIntegerBitCasts(
++ BCIn->getOperand(0), cast<VectorType>(DestTy), *this))
+ return I;
+ }
+
+diff --git a/llvm/test/Transforms/InstCombine/cast.ll b/llvm/test/Transforms/InstCombine/cast.ll
+index b6d1eda0601d..3ce8de033422 100644
+--- a/llvm/test/Transforms/InstCombine/cast.ll
++++ b/llvm/test/Transforms/InstCombine/cast.ll
+@@ -824,7 +824,7 @@ define i64 @test59(i8 %A, i8 %B) {
+
+ define <3 x i32> @test60(<4 x i32> %call4) {
+ ; CHECK-LABEL: @test60(
+-; CHECK-NEXT: [[P10:%.*]] = shufflevector <4 x i32> [[CALL4:%.*]], <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
++; CHECK-NEXT: [[P10:%.*]] = shufflevector <4 x i32> [[CALL4:%.*]], <4 x i32> undef, <3 x i32> <i32 1, i32 2, i32 3>
+ ; CHECK-NEXT: ret <3 x i32> [[P10]]
+ ;
+ %p11 = bitcast <4 x i32> %call4 to i128
+@@ -836,7 +836,7 @@ define <3 x i32> @test60(<4 x i32> %call4) {
+
+ define <4 x i32> @test61(<3 x i32> %call4) {
+ ; CHECK-LABEL: @test61(
+-; CHECK-NEXT: [[P10:%.*]] = shufflevector <3 x i32> [[CALL4:%.*]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
++; CHECK-NEXT: [[P10:%.*]] = shufflevector <3 x i32> [[CALL4:%.*]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
+ ; CHECK-NEXT: ret <4 x i32> [[P10]]
+ ;
+ %p11 = bitcast <3 x i32> %call4 to i96
+@@ -848,7 +848,7 @@ define <4 x i32> @test61(<3 x i32> %call4) {
+ define <4 x i32> @test62(<3 x float> %call4) {
+ ; CHECK-LABEL: @test62(
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <3 x float> [[CALL4:%.*]] to <3 x i32>
+-; CHECK-NEXT: [[P10:%.*]] = shufflevector <3 x i32> [[TMP1]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
++; CHECK-NEXT: [[P10:%.*]] = shufflevector <3 x i32> [[TMP1]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
+ ; CHECK-NEXT: ret <4 x i32> [[P10]]
+ ;
+ %p11 = bitcast <3 x float> %call4 to i96
+--
+2.26.2
+
diff --git a/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch
new file mode 100644
index 0000000000..6cfe07e50a
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch
@@ -0,0 +1,97 @@
+From 011fb5bf8b31316472fccb1a19c91912246df9b2 Mon Sep 17 00:00:00 2001
+From: Reid Kleckner <rnk@google.com>
+Date: Sat, 28 Mar 2020 11:03:14 -0700
+Subject: [PATCH] [CodeGen] Fix sinking local values in lpads with phis
+
+There was already a test case for landingpads to handle this case, but I
+had forgotten to consider PHI instructions preceding the EH_LABEL in the
+landingpad.
+
+PR45261
+---
+ llvm/lib/CodeGen/SelectionDAG/FastISel.cpp | 17 +++++++++-
+ llvm/test/CodeGen/X86/sink-local-value.ll | 36 ++++++++++++++++++++++
+ 2 files changed, 52 insertions(+), 1 deletion(-)
+
+diff --git a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+index 5ac3606dc662..2638b1e8a05c 100644
+--- a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
++++ b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+@@ -225,6 +225,21 @@ static bool isRegUsedByPhiNodes(unsigned DefReg,
+ return false;
+ }
+
++static bool isTerminatingEHLabel(MachineBasicBlock *MBB, MachineInstr &MI) {
++ // Ignore non-EH labels.
++ if (!MI.isEHLabel())
++ return false;
++
++ // Any EH label outside a landing pad must be for an invoke. Consider it a
++ // terminator.
++ if (!MBB->isEHPad())
++ return true;
++
++ // If this is a landingpad, the first non-phi instruction will be an EH_LABEL.
++ // Don't consider that label to be a terminator.
++ return MI.getIterator() != MBB->getFirstNonPHI();
++}
++
+ /// Build a map of instruction orders. Return the first terminator and its
+ /// order. Consider EH_LABEL instructions to be terminators as well, since local
+ /// values for phis after invokes must be materialized before the call.
+@@ -233,7 +248,7 @@ void FastISel::InstOrderMap::initialize(
+ unsigned Order = 0;
+ for (MachineInstr &I : *MBB) {
+ if (!FirstTerminator &&
+- (I.isTerminator() || (I.isEHLabel() && &I != &MBB->front()))) {
++ (I.isTerminator() || isTerminatingEHLabel(MBB, I))) {
+ FirstTerminator = &I;
+ FirstTerminatorOrder = Order;
+ }
+diff --git a/llvm/test/CodeGen/X86/sink-local-value.ll b/llvm/test/CodeGen/X86/sink-local-value.ll
+index b0e511ac1189..f7d861ac9b6c 100644
+--- a/llvm/test/CodeGen/X86/sink-local-value.ll
++++ b/llvm/test/CodeGen/X86/sink-local-value.ll
+@@ -145,6 +145,42 @@ try.cont: ; preds = %entry, %lpad
+ ; CHECK: retl
+
+
++define i32 @lpad_phi() personality i32 (...)* @__gxx_personality_v0 {
++entry:
++ store i32 42, i32* @sink_across
++ invoke void @may_throw()
++ to label %try.cont unwind label %lpad
++
++lpad: ; preds = %entry
++ %p = phi i32 [ 11, %entry ] ; Trivial, but -O0 keeps it
++ %0 = landingpad { i8*, i32 }
++ catch i8* null
++ store i32 %p, i32* @sink_across
++ br label %try.cont
++
++try.cont: ; preds = %entry, %lpad
++ %r.0 = phi i32 [ 13, %entry ], [ 55, %lpad ]
++ ret i32 %r.0
++}
++
++; The constant materialization should be *after* the stores to sink_across, but
++; before any EH_LABEL.
++
++; CHECK-LABEL: lpad_phi:
++; CHECK: movl $42, sink_across
++; CHECK: movl $13, %{{[a-z]*}}
++; CHECK: .Ltmp{{.*}}:
++; CHECK: calll may_throw
++; CHECK: .Ltmp{{.*}}:
++; CHECK: jmp .LBB{{.*}}
++; CHECK: .LBB{{.*}}: # %lpad
++; CHECK-NEXT: .Ltmp{{.*}}:
++; CHECK: movl {{.*}}, sink_across
++; CHECK: movl $55, %{{[a-z]*}}
++; CHECK: .LBB{{.*}}: # %try.cont
++; CHECK: retl
++
++
+ ; Function Attrs: nounwind readnone speculatable
+ declare void @llvm.dbg.value(metadata, metadata, metadata) #0
+
diff --git a/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch
new file mode 100644
index 0000000000..3f16de5a2b
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch
@@ -0,0 +1,113 @@
+Guix note: this got detected with the test suite of rustc 1.41.1, but
+the issue potentially affects all consumers of LLVM.
+
+From 58e8c793d0e43150a6452e971a32d7407a8a7401 Mon Sep 17 00:00:00 2001
+From: Tim Northover <tnorthover@apple.com>
+Date: Mon, 30 Sep 2019 07:46:52 +0000
+Subject: [PATCH] Revert "[SCEV] add no wrap flag for SCEVAddExpr."
+
+This reverts r366419 because the analysis performed is within the context of
+the loop and it's only valid to add wrapping flags to "global" expressions if
+they're always correct.
+
+llvm-svn: 373184
+---
+ llvm/lib/Analysis/ScalarEvolution.cpp | 2 +-
+ llvm/test/Analysis/ScalarEvolution/limit-depth.ll | 2 +-
+ llvm/test/Analysis/ScalarEvolution/nsw.ll | 2 +-
+ llvm/test/Analysis/ScalarEvolution/trip-count12.ll | 2 +-
+ llvm/test/Analysis/ScalarEvolution/trip-count9.ll | 8 ++++----
+ 5 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
+index 354ae05bb841..c29fc5dbccfb 100644
+--- a/llvm/lib/Analysis/ScalarEvolution.cpp
++++ b/llvm/lib/Analysis/ScalarEvolution.cpp
+@@ -4992,7 +4992,7 @@ const SCEV *ScalarEvolution::createSimpleAffineAddRec(PHINode *PN,
+ // overflow.
+ if (auto *BEInst = dyn_cast<Instruction>(BEValueV))
+ if (isLoopInvariant(Accum, L) && isAddRecNeverPoison(BEInst, L))
+- (void)getAddRecExpr(getAddExpr(StartVal, Accum, Flags), Accum, L, Flags);
++ (void)getAddRecExpr(getAddExpr(StartVal, Accum), Accum, L, Flags);
+
+ return PHISCEV;
+ }
+diff --git a/llvm/test/Analysis/ScalarEvolution/limit-depth.ll b/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
+index db68a4f84c91..6fdf8c5df974 100644
+--- a/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
++++ b/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
+@@ -46,7 +46,7 @@ define void @test_mul(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) {
+ define void @test_sext(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) {
+ ; CHECK-LABEL: @test_sext
+ ; CHECK: %se2 = sext i64 %iv2.inc to i128
+-; CHECK-NEXT: --> {(1 + (sext i64 {(sext i32 (1 + %a)<nsw> to i64),+,1}<nsw><%loop> to i128))<nsw>,+,1}<nsw><%loop2>
++; CHECK-NEXT: --> {(1 + (sext i64 {(sext i32 (1 + %a) to i64),+,1}<nsw><%loop> to i128))<nsw>,+,1}<nsw><%loop2>
+ entry:
+ br label %loop
+
+diff --git a/llvm/test/Analysis/ScalarEvolution/nsw.ll b/llvm/test/Analysis/ScalarEvolution/nsw.ll
+index 69427368625d..ca24f9d4a04b 100644
+--- a/llvm/test/Analysis/ScalarEvolution/nsw.ll
++++ b/llvm/test/Analysis/ScalarEvolution/nsw.ll
+@@ -163,7 +163,7 @@ bb5: ; preds = %bb2
+ declare void @f(i32)
+
+ ; CHECK-LABEL: nswnowrap
+-; CHECK: --> {(1 + %v)<nsw>,+,1}<nsw><%for.body>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (2 + %v)
++; CHECK: --> {(1 + %v)<nsw>,+,1}<nsw><%for.body>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (1 + ((1 + %v)<nsw> smax %v))
+ define void @nswnowrap(i32 %v, i32* %buf) {
+ entry:
+ %add = add nsw i32 %v, 1
+diff --git a/llvm/test/Analysis/ScalarEvolution/trip-count12.ll b/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
+index 5e7d72d5e4f3..d0086ee2e6ac 100644
+--- a/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
++++ b/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
+@@ -1,7 +1,7 @@
+ ; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
+
+ ; CHECK: Determining loop execution counts for: @test
+-; CHECK: Loop %for.body: backedge-taken count is ((-2 + %len)<nsw> /u 2)
++; CHECK: Loop %for.body: backedge-taken count is ((-2 + %len) /u 2)
+ ; CHECK: Loop %for.body: max backedge-taken count is 1073741823
+
+ define zeroext i16 @test(i16* nocapture %p, i32 %len) nounwind readonly {
+diff --git a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
+index c0a1d12fa00e..9a080b34743f 100644
+--- a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
++++ b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
+@@ -179,7 +179,7 @@ exit:
+ }
+
+ ; CHECK: Determining loop execution counts for: @nsw_startx
+-; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x)<nsw> smax %n))
++; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n))
+ ; CHECK: Loop %loop: max backedge-taken count is -1
+ define void @nsw_startx(i4 %n, i4 %x) {
+ entry:
+@@ -195,7 +195,7 @@ exit:
+ }
+
+ ; CHECK: Determining loop execution counts for: @nsw_startx_step2
+-; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x)<nsw> smax %n)) /u 2)
++; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax %n)) /u 2)
+ ; CHECK: Loop %loop: max backedge-taken count is 7
+ define void @nsw_startx_step2(i4 %n, i4 %x) {
+ entry:
+@@ -381,7 +381,7 @@ exit:
+ }
+
+ ; CHECK: Determining loop execution counts for: @even_nsw_startx
+-; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x)<nsw> smax (2 * %n)))
++; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n)))
+ ; CHECK: Loop %loop: max backedge-taken count is -2
+ define void @even_nsw_startx(i4 %n, i4 %x) {
+ entry:
+@@ -398,7 +398,7 @@ exit:
+ }
+
+ ; CHECK: Determining loop execution counts for: @even_nsw_startx_step2
+-; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x)<nsw> smax (2 * %n))) /u 2)
++; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2)
+ ; CHECK: Loop %loop: max backedge-taken count is 7
+ define void @even_nsw_startx_step2(i4 %n, i4 %x) {
+ entry:
diff --git a/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch b/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch
new file mode 100644
index 0000000000..98a0c8a395
--- /dev/null
+++ b/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch
@@ -0,0 +1,177 @@
+From eccc46eaf7903a8e837813795498b12c078faaea Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Wed, 11 Mar 2020 21:53:32 +0100
+Subject: [PATCH] Fix old dependencies
+
+---
+ .../enforcer/AbstractBanDependencies.java | 2 +-
+ .../enforcer/BanTransitiveDependencies.java | 2 +-
+ .../enforcer/DependencyConvergence.java | 17 ++++++++---------
+ .../enforcer/RequireUpperBoundDeps.java | 19 +++++++++----------
+ .../enforcer/utils/DependencyVersionMap.java | 6 +++---
+ 5 files changed, 22 insertions(+), 24 deletions(-)
+
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+index 2888a61..2b944b7 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+@@ -119,7 +119,7 @@ public abstract class AbstractBanDependencies
+ Set<Artifact> dependencies = null;
+ try
+ {
+- DependencyNode node = graphBuilder.buildDependencyGraph( project, null );
++ DependencyNode node = graphBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), null );
+ if ( searchTransitive )
+ {
+ dependencies = ArtifactUtils.getAllDescendants( node );
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
+index 6e1dcd4..1b964ba 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
+@@ -158,7 +158,7 @@ public class BanTransitiveDependencies
+ try
+ {
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+- rootNode = createDependencyGraphBuilder().buildDependencyGraph( project, null );
++ rootNode = createDependencyGraphBuilder().buildDependencyGraph( project.getProjectBuildingRequest(), null );
+ }
+ catch ( Exception e )
+ {
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
+index 684f984..ca7ad3a 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
+@@ -35,9 +35,9 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+ import org.apache.maven.plugin.logging.Log;
+ import org.apache.maven.plugins.enforcer.utils.DependencyVersionMap;
+ import org.apache.maven.project.MavenProject;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
+ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+ import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+@@ -60,7 +60,7 @@ public class DependencyConvergence
+ // CHECKSTYLE_OFF: LineLength
+ /**
+ * Uses the {@link EnforcerRuleHelper} to populate the values of the
+- * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
++ * {@link DependencyGraphBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+ * factory method. <br/>
+ * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
+ *
+@@ -75,16 +75,15 @@ public class DependencyConvergence
+ try
+ {
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+- DependencyTreeBuilder dependencyTreeBuilder =
+- (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class );
++ DependencyGraphBuilder dependencyTreeBuilder =
++ (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class );
+ ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
+ ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );
+ ArtifactMetadataSource metadataSource =
+ (ArtifactMetadataSource) helper.getComponent( ArtifactMetadataSource.class );
+ ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class );
+ ArtifactFilter filter = null; // we need to evaluate all scopes
+- DependencyNode node = dependencyTreeBuilder.buildDependencyTree( project, repository, factory,
+- metadataSource, filter, collector );
++ DependencyNode node = dependencyTreeBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), filter);
+ return node;
+ }
+ catch ( ExpressionEvaluationException e )
+@@ -95,7 +94,7 @@ public class DependencyConvergence
+ {
+ throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+ }
+- catch ( DependencyTreeBuilderException e )
++ catch ( DependencyGraphBuilderException e )
+ {
+ throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
+ }
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
+index 458554a..2de9870 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
+@@ -38,10 +38,10 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+ import org.apache.maven.plugin.logging.Log;
+ import org.apache.maven.project.MavenProject;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
+-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
++import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+ import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+@@ -91,7 +91,7 @@ public class RequireUpperBoundDeps
+ // CHECKSTYLE_OFF: LineLength
+ /**
+ * Uses the {@link EnforcerRuleHelper} to populate the values of the
+- * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
++ * {@link DependencyGraphBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+ * factory method. <br/>
+ * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
+ *
+@@ -106,8 +106,8 @@ public class RequireUpperBoundDeps
+ try
+ {
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+- DependencyTreeBuilder dependencyTreeBuilder =
+- (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class );
++ DependencyGraphBuilder dependencyTreeBuilder =
++ (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class );
+ ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
+ ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );
+ ArtifactMetadataSource metadataSource =
+@@ -115,8 +115,7 @@ public class RequireUpperBoundDeps
+ ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class );
+ ArtifactFilter filter = null; // we need to evaluate all scopes
+ DependencyNode node =
+- dependencyTreeBuilder.buildDependencyTree( project, repository, factory, metadataSource, filter,
+- collector );
++ dependencyTreeBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), filter);
+ return node;
+ }
+ catch ( ExpressionEvaluationException e )
+@@ -127,7 +126,7 @@ public class RequireUpperBoundDeps
+ {
+ throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+ }
+- catch ( DependencyTreeBuilderException e )
++ catch ( DependencyGraphBuilderException e )
+ {
+ throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
+ }
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
+index b6213fa..2c2a645 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
+@@ -26,8 +26,8 @@ import java.util.Map;
+
+ import org.apache.maven.artifact.Artifact;
+ import org.apache.maven.plugin.logging.Log;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+
+ /**
+ * @author Brian Fox
+@@ -132,4 +132,4 @@ public class DependencyVersionMap
+ }
+ return output;
+ }
+-}
+\ No newline at end of file
++}
+--
+2.24.1
+
diff --git a/gnu/packages/patches/opendht-fix-jami.patch b/gnu/packages/patches/opendht-fix-jami.patch
new file mode 100644
index 0000000000..9718a84a41
--- /dev/null
+++ b/gnu/packages/patches/opendht-fix-jami.patch
@@ -0,0 +1,33 @@
+From e2b39dd3a0742853e00f9c3e8c46c911da20bed7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
+Date: Tue, 30 Jun 2020 10:42:49 -0400
+Subject: [PATCH 1/4] http/request: make terminate public
+
+---
+ include/opendht/http.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/include/opendht/http.h b/include/opendht/http.h
+index cc8d5f9..46b722c 100644
+--- a/include/opendht/http.h
++++ b/include/opendht/http.h
+@@ -294,6 +294,7 @@ public:
+ * User action to cancel the Request and call the completion callbacks.
+ */
+ void cancel();
++ void terminate(const asio::error_code& ec);
+
+ private:
+ using OnCompleteCb = std::function<void()>;
+@@ -320,8 +321,6 @@ private:
+
+ void connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb = {});
+
+- void terminate(const asio::error_code& ec);
+-
+ void post();
+
+ void handle_request(const asio::error_code& ec);
+--
+2.27.0
+
diff --git a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
new file mode 100644
index 0000000000..9503ab6f31
--- /dev/null
+++ b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
@@ -0,0 +1,358 @@
+From 951f2269f67d618d376656db831796c119f4f6b3 Mon Sep 17 00:00:00 2001
+From: Leo Prikler <leo.prikler@student.tugraz.at>
+Date: Fri, 26 Jun 2020 18:20:04 +0200
+Subject: [PATCH] ppsspp: disable upgrade and gold
+
+---
+ Core/Config.cpp | 11 -------
+ Core/Config.h | 2 --
+ Qt/QtMain.cpp | 6 ----
+ SDL/SDLMain.cpp | 6 ----
+ UI/DevScreens.cpp | 3 --
+ UI/GameSettingsScreen.cpp | 1 -
+ UI/MainScreen.cpp | 63 +------------------------------------
+ UI/MiscScreens.cpp | 31 ++----------------
+ UWP/PPSSPP_UWPMain.cpp | 6 ----
+ Windows/MainWindowMenu.cpp | 2 +-
+ Windows/main.cpp | 6 ----
+ android/jni/app-android.cpp | 6 ----
+ 12 files changed, 5 insertions(+), 138 deletions(-)
+
+diff --git a/Core/Config.cpp b/Core/Config.cpp
+index 214aeb433..04e3b151d 100644
+--- a/Core/Config.cpp
++++ b/Core/Config.cpp
+@@ -428,7 +428,6 @@ static ConfigSetting generalSettings[] = {
+ ConfigSetting("IgnoreBadMemAccess", &g_Config.bIgnoreBadMemAccess, true, true),
+ ConfigSetting("CurrentDirectory", &g_Config.currentDirectory, ""),
+ ConfigSetting("ShowDebuggerOnLoad", &g_Config.bShowDebuggerOnLoad, false),
+- ConfigSetting("CheckForNewVersion", &g_Config.bCheckForNewVersion, true),
+ ConfigSetting("Language", &g_Config.sLanguageIni, &DefaultLangRegion),
+ ConfigSetting("ForceLagSync2", &g_Config.bForceLagSync, false, true, true),
+ ConfigSetting("DiscordPresence", &g_Config.bDiscordPresence, true, true, false), // Or maybe it makes sense to have it per-game? Race conditions abound...
+@@ -1229,16 +1228,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
+ upgradeMessage = "";
+ }
+
+- // Check for new version on every 10 runs.
+- // Sometimes the download may not be finished when the main screen shows (if the user dismisses the
+- // splash screen quickly), but then we'll just show the notification next time instead, we store the
+- // upgrade number in the ini.
+- if (iRunCount % 10 == 0 && bCheckForNewVersion) {
+- std::shared_ptr<http::Download> dl = g_DownloadManager.StartDownloadWithCallback(
+- "http://www.ppsspp.org/version.json", "", &DownloadCompletedCallback);
+- dl->SetHidden(true);
+- }
+-
+ INFO_LOG(LOADER, "Loading controller config: %s", controllerIniFilename_.c_str());
+ bSaveSettings = true;
+
+diff --git a/Core/Config.h b/Core/Config.h
+index 084eacc94..e7134cab5 100644
+--- a/Core/Config.h
++++ b/Core/Config.h
+@@ -99,7 +99,6 @@ struct Config {
+ bool bIgnoreBadMemAccess;
+ bool bFastMemory;
+ int iCpuCore;
+- bool bCheckForNewVersion;
+ bool bForceLagSync;
+ bool bFuncReplacements;
+ bool bHideSlowWarnings;
+@@ -521,4 +520,3 @@ std::string CreateRandMAC();
+ // TODO: Find a better place for this.
+ extern http::Downloader g_DownloadManager;
+ extern Config g_Config;
+-
+diff --git a/Qt/QtMain.cpp b/Qt/QtMain.cpp
+index 7713b6587..1d92d1175 100644
+--- a/Qt/QtMain.cpp
++++ b/Qt/QtMain.cpp
+@@ -194,12 +194,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ return true;
+ case SYSPROP_HAS_FILE_BROWSER:
+ return true;
+- case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+- return true;
+-#else
+- return false;
+-#endif
+ default:
+ return false;
+ }
+diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
+index 52028d087..d8697d210 100644
+--- a/SDL/SDLMain.cpp
++++ b/SDL/SDLMain.cpp
+@@ -356,12 +356,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ switch (prop) {
+ case SYSPROP_HAS_BACK_BUTTON:
+ return true;
+- case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+- return true;
+-#else
+- return false;
+-#endif
+ default:
+ return false;
+ }
+diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp
+index f146d099e..625ee124c 100644
+--- a/UI/DevScreens.cpp
++++ b/UI/DevScreens.cpp
+@@ -603,9 +603,6 @@ void SystemInfoScreen::CreateViews() {
+ #ifdef _M_SSE
+ buildConfig->Add(new InfoItem("_M_SSE", StringFromFormat("0x%x", _M_SSE)));
+ #endif
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- buildConfig->Add(new InfoItem("GOLD", ""));
+- }
+
+ ViewGroup *cpuExtensionsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
+ cpuExtensionsScroll->SetTag("DevSystemInfoCPUExt");
+diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp
+index 8202870c7..81112f822 100644
+--- a/UI/GameSettingsScreen.cpp
++++ b/UI/GameSettingsScreen.cpp
+@@ -796,7 +796,6 @@ void GameSettingsScreen::CreateViews() {
+ }
+ #endif
+
+- systemSettings->Add(new CheckBox(&g_Config.bCheckForNewVersion, sy->T("VersionCheck", "Check for new versions of PPSSPP")));
+ const std::string bgPng = GetSysDirectory(DIRECTORY_SYSTEM) + "background.png";
+ const std::string bgJpg = GetSysDirectory(DIRECTORY_SYSTEM) + "background.jpg";
+ if (File::Exists(bgPng) || File::Exists(bgJpg)) {
+diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
+index 43535913d..36834020d 100644
+--- a/UI/MainScreen.cpp
++++ b/UI/MainScreen.cpp
+@@ -1054,11 +1054,7 @@ void MainScreen::CreateViews() {
+ sprintf(versionString, "%s", PPSSPP_GIT_VERSION);
+ rightColumnItems->SetSpacing(0.0f);
+ LinearLayout *logos = new LinearLayout(ORIENT_HORIZONTAL);
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- logos->Add(new ImageView(ImageID("I_ICONGOLD"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+- } else {
+- logos->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+- }
++ logos->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+ logos->Add(new ImageView(ImageID("I_LOGO"), IS_DEFAULT, new LinearLayoutParams(Margins(-12, 0, 0, 0))));
+ rightColumnItems->Add(logos);
+ TextView *ver = rightColumnItems->Add(new TextView(versionString, new LinearLayoutParams(Margins(70, -6, 0, 0))));
+@@ -1070,11 +1066,6 @@ void MainScreen::CreateViews() {
+ rightColumnItems->Add(new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
+ rightColumnItems->Add(new Choice(mm->T("Credits")))->OnClick.Handle(this, &MainScreen::OnCredits);
+ rightColumnItems->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
+- if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- Choice *gold = rightColumnItems->Add(new Choice(mm->T("Buy PPSSPP Gold")));
+- gold->OnClick.Handle(this, &MainScreen::OnSupport);
+- gold->SetIcon(ImageID("I_ICONGOLD"));
+- }
+
+ #if !PPSSPP_PLATFORM(UWP)
+ // Having an exit button is against UWP guidelines.
+@@ -1099,28 +1090,6 @@ void MainScreen::CreateViews() {
+ } else if (tabHolder_->GetVisibility() != V_GONE) {
+ root_->SetDefaultFocusView(tabHolder_);
+ }
+-
+- auto u = GetI18NCategory("Upgrade");
+-
+- upgradeBar_ = 0;
+- if (!g_Config.upgradeMessage.empty()) {
+- upgradeBar_ = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
+-
+- UI::Margins textMargins(10, 5);
+- UI::Margins buttonMargins(0, 0);
+- UI::Drawable solid(0xFFbd9939);
+- upgradeBar_->SetBG(solid);
+- upgradeBar_->Add(new TextView(u->T("New version of PPSSPP available") + std::string(": ") + g_Config.upgradeVersion, new LinearLayoutParams(1.0f, textMargins)));
+- upgradeBar_->Add(new Button(u->T("Download"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDownloadUpgrade);
+- upgradeBar_->Add(new Button(u->T("Dismiss"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDismissUpgrade);
+-
+- // Slip in under root_
+- LinearLayout *newRoot = new LinearLayout(ORIENT_VERTICAL);
+- newRoot->Add(root_);
+- newRoot->Add(upgradeBar_);
+- root_->ReplaceLayoutParams(new LinearLayoutParams(1.0));
+- root_ = newRoot;
+- }
+ }
+
+ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+@@ -1128,27 +1097,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+ return UI::EVENT_DONE;
+ }
+
+-UI::EventReturn MainScreen::OnDownloadUpgrade(UI::EventParams &e) {
+-#if PPSSPP_PLATFORM(ANDROID)
+- // Go to app store
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+- } else {
+- LaunchBrowser("market://details?id=org.ppsspp.ppsspp");
+- }
+-#else
+- // Go directly to ppsspp.org and let the user sort it out
+- LaunchBrowser("https://www.ppsspp.org/downloads.html");
+-#endif
+- return UI::EVENT_DONE;
+-}
+-
+-UI::EventReturn MainScreen::OnDismissUpgrade(UI::EventParams &e) {
+- g_Config.DismissUpgrade();
+- upgradeBar_->SetVisibility(UI::V_GONE);
+- return UI::EVENT_DONE;
+-}
+-
+ void MainScreen::sendMessage(const char *message, const char *value) {
+ // Always call the base class method first to handle the most common messages.
+ UIScreenWithBackground::sendMessage(message, value);
+@@ -1319,15 +1267,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
+ return UI::EVENT_DONE;
+ }
+
+-UI::EventReturn MainScreen::OnSupport(UI::EventParams &e) {
+-#ifdef __ANDROID__
+- LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+-#else
+- LaunchBrowser("https://central.ppsspp.org/buygold");
+-#endif
+- return UI::EVENT_DONE;
+-}
+-
+ UI::EventReturn MainScreen::OnPPSSPPOrg(UI::EventParams &e) {
+ LaunchBrowser("https://www.ppsspp.org");
+ return UI::EVENT_DONE;
+diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp
+index a6542c65d..f5f101594 100644
+--- a/UI/MiscScreens.cpp
++++ b/UI/MiscScreens.cpp
+@@ -498,11 +498,7 @@ void LogoScreen::render() {
+ char temp[256];
+ // Manually formatting UTF-8 is fun. \xXX doesn't work everywhere.
+ snprintf(temp, sizeof(temp), "%s Henrik Rydg%c%crd", cr->T("created", "Created by"), 0xC3, 0xA5);
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- dc.Draw()->DrawImage(ImageID("I_ICONGOLD"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+- } else {
+- dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+- }
++ dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+ dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 40, bounds.centerY() - 30, 1.5f, textColor, ALIGN_CENTER);
+ //dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", xres / 2, yres / 2 - 30, textColor, ALIGN_CENTER);
+ dc.SetFontScale(1.0f, 1.0f);
+@@ -538,10 +534,6 @@ void CreditsScreen::CreateViews() {
+ // Really need to redo this whole layout with some linear layouts...
+
+ int rightYOffset = 0;
+- if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- root_->Add(new Button(cr->T("Buy Gold"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, 84, false)))->OnClick.Handle(this, &CreditsScreen::OnSupport);
+- rightYOffset = 74;
+- }
+ root_->Add(new Button(cr->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnForums);
+ root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord);
+ root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
+@@ -550,20 +542,7 @@ void CreditsScreen::CreateViews() {
+ #if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS)
+ root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare);
+ #endif
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- root_->Add(new ImageView(ImageID("I_ICONGOLD"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+- } else {
+- root_->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+- }
+-}
+-
+-UI::EventReturn CreditsScreen::OnSupport(UI::EventParams &e) {
+-#ifdef __ANDROID__
+- LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+-#else
+- LaunchBrowser("https://central.ppsspp.org/buygold");
+-#endif
+- return UI::EVENT_DONE;
++ root_->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+ }
+
+ UI::EventReturn CreditsScreen::OnTwitter(UI::EventParams &e) {
+@@ -747,11 +726,7 @@ void CreditsScreen::render() {
+
+ // TODO: This is kinda ugly, done on every frame...
+ char temp[256];
+- if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+- snprintf(temp, sizeof(temp), "PPSSPP Gold %s", PPSSPP_GIT_VERSION);
+- } else {
+- snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION);
+- }
++ snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION);
+ credits[0] = (const char *)temp;
+
+ UIContext &dc = *screenManager()->getUIContext();
+diff --git a/UWP/PPSSPP_UWPMain.cpp b/UWP/PPSSPP_UWPMain.cpp
+index 24f3b964d..1d66ba7ee 100644
+--- a/UWP/PPSSPP_UWPMain.cpp
++++ b/UWP/PPSSPP_UWPMain.cpp
+@@ -399,12 +399,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ return false;
+ case SYSPROP_HAS_BACK_BUTTON:
+ return true;
+- case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+- return true;
+-#else
+- return false;
+-#endif
+ default:
+ return false;
+ }
+diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp
+index b5e1bb0eb..71b29b48a 100644
+--- a/Windows/MainWindowMenu.cpp
++++ b/Windows/MainWindowMenu.cpp
+@@ -1377,7 +1377,7 @@ namespace MainWindow {
+ {
+ W32Util::CenterWindow(hDlg);
+ HWND versionBox = GetDlgItem(hDlg, IDC_VERSION);
+- std::string windowText = System_GetPropertyBool(SYSPROP_APP_GOLD) ? "PPSSPP Gold " : "PPSSPP ";
++ std::string windowText = "PPSSPP ";
+ windowText.append(PPSSPP_GIT_VERSION);
+ SetWindowText(versionBox, ConvertUTF8ToWString(windowText).c_str());
+ }
+diff --git a/Windows/main.cpp b/Windows/main.cpp
+index 3795597e2..fd98d0453 100644
+--- a/Windows/main.cpp
++++ b/Windows/main.cpp
+@@ -268,12 +268,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ return true;
+ case SYSPROP_HAS_BACK_BUTTON:
+ return true;
+- case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+- return true;
+-#else
+- return false;
+-#endif
+ default:
+ return false;
+ }
+diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp
+index 086371085..0a340c0ae 100644
+--- a/android/jni/app-android.cpp
++++ b/android/jni/app-android.cpp
+@@ -372,12 +372,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ return true;
+ case SYSPROP_HAS_IMAGE_BROWSER:
+ return true;
+- case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+- return true;
+-#else
+- return false;
+-#endif
+ default:
+ return false;
+ }
+--
+2.26.2
+
diff --git a/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
new file mode 100644
index 0000000000..ebeef34720
--- /dev/null
+++ b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
@@ -0,0 +1,48 @@
+Compatibility with Python 3.8, see upstream issue
+https://github.com/rbarrois/aionotify/pull/15
+
+diff --git a/setup.py b/setup.py
+index 21a554f..094de64 100755
+--- a/setup.py
++++ b/setup.py
+@@ -40,7 +40,7 @@ setup(
+ setup_requires=[
+ ],
+ tests_require=[
+- 'asynctest',
++ 'asynctest; python_version<"3.8"',
+ ],
+ classifiers=[
+ "Development Status :: 4 - Beta",
+diff --git a/tests/test_usage.py b/tests/test_usage.py
+index f156291..0476ff1 100644
+--- a/tests/test_usage.py
++++ b/tests/test_usage.py
+@@ -8,7 +8,11 @@ import os.path
+ import tempfile
+ import unittest
+
+-import asynctest
++try:
++ testBase = unittest.IsolatedAsyncioTestCase
++except AttributeError:
++ import asynctest
++ testBase = asynctest.TestCase
+
+ import aionotify
+
+@@ -25,11 +29,13 @@ if AIODEBUG:
+ TESTDIR = os.environ.get('AIOTESTDIR') or os.path.join(os.path.dirname(__file__), 'testevents')
+
+
+-class AIONotifyTestCase(asynctest.TestCase):
++class AIONotifyTestCase(testBase):
+ forbid_get_event_loop = True
+ timeout = 3
+
+ def setUp(self):
++ if not getattr (self, 'loop', None):
++ self.loop = asyncio.get_event_loop()
+ if AIODEBUG:
+ self.loop.set_debug(True)
+ self.watcher = aionotify.Watcher()
diff --git a/gnu/packages/patches/python-tinycss2-flake8-compat.patch b/gnu/packages/patches/python-tinycss2-flake8-compat.patch
new file mode 100644
index 0000000000..a66eb42fa1
--- /dev/null
+++ b/gnu/packages/patches/python-tinycss2-flake8-compat.patch
@@ -0,0 +1,36 @@
+Fix test failure that occurs with recent versions of Flake8.
+
+Taken from upstream:
+https://github.com/Kozea/tinycss2/commit/6556604fb98c2153412384d6f0f705db2da1aa60
+
+diff --git a/tinycss2/css-parsing-tests/make_color3_hsl.py b/tinycss2/css-parsing-tests/make_color3_hsl.py
+index d1fd3a6..56fda0c 100644
+--- a/tinycss2/css-parsing-tests/make_color3_hsl.py
++++ b/tinycss2/css-parsing-tests/make_color3_hsl.py
+@@ -8,16 +8,17 @@ def trim(s):
+ print('[')
+ print(',\n'.join(
+ '"hsl%s(%s, %s%%, %s%%%s)", [%s, %s, %s, %s]' % (
+- ('a' if a is not None else '', h,
+- trim(str(s / 10.)), trim(str(l / 10.)),
+- ', %s' % a if a is not None else '') +
++ ('a' if alpha is not None else '', hue,
++ trim(str(saturation / 10.)), trim(str(light / 10.)),
++ ', %s' % alpha if alpha is not None else '') +
+ tuple(trim(str(round(v, 10)))
+- for v in colorsys.hls_to_rgb(h / 360., l / 1000., s / 1000.)) +
+- (a if a is not None else 1,)
++ for v in colorsys.hls_to_rgb(
++ hue / 360., light / 1000., saturation / 1000.)) +
++ (alpha if alpha is not None else 1,)
+ )
+- for a in [None, 1, .2, 0]
+- for l in range(0, 1001, 125)
+- for s in range(0, 1001, 125)
+- for h in range(0, 360, 30)
++ for alpha in [None, 1, .2, 0]
++ for light in range(0, 1001, 125)
++ for saturation in range(0, 1001, 125)
++ for hue in range(0, 360, 30)
+ ))
+ print(']')
diff --git a/gnu/packages/patches/qtbase-absolute-runpath.patch b/gnu/packages/patches/qtbase-absolute-runpath.patch
new file mode 100644
index 0000000000..cec4ddc0a3
--- /dev/null
+++ b/gnu/packages/patches/qtbase-absolute-runpath.patch
@@ -0,0 +1,17 @@
+Do not use $ORIGIN in RUNPATH so that executables can be copied elsewhere and
+still be expected to work (needed for python-pyside-2-tools).
+
+diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
+--- a/mkspecs/common/linux.conf
++++ b/mkspecs/common/linux.conf
+@@ -10,8 +10,8 @@ QMAKE_CFLAGS_THREAD += -D_REENTRANT
+ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+ QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
+
+-QMAKE_LFLAGS_REL_RPATH = -Wl,-z,origin
+-QMAKE_REL_RPATH_BASE = $ORIGIN
++QMAKE_LFLAGS_REL_RPATH =
++QMAKE_REL_RPATH_BASE =
+
+ QMAKE_INCDIR =
+ QMAKE_LIBDIR =
diff --git a/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch b/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch
new file mode 100644
index 0000000000..035a98fa33
--- /dev/null
+++ b/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch
@@ -0,0 +1,101 @@
+From ff3f00b7f33332ebf1c3c05abc4a781684775b3c Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 14 Jul 2020 11:50:12 -0400
+Subject: [PATCH] config: Drop rubocop-performance, rubocop-rspec requirements.
+
+This patch removes Rubocop extensions from Rubocop's closure to break
+a dependency cycle with itself.
+
+* .rubocop.yml: Remove rubocop-performance and rubocop-rspec and their
+corresponding directives.
+* .rubocop_todo.yml: Likewise.
+---
+ .rubocop.yml | 15 ---------------
+ .rubocop_todo.yml | 44 --------------------------------------------
+ 2 files changed, 59 deletions(-)
+
+diff --git a/.rubocop.yml b/.rubocop.yml
+index 4f05d5be2..f12ef7c06 100644
+--- a/.rubocop.yml
++++ b/.rubocop.yml
+@@ -3,8 +3,6 @@
+ inherit_from: .rubocop_todo.yml
+ require:
+ - rubocop/cop/internal_affairs
+- - rubocop-performance
+- - rubocop-rspec
+
+ AllCops:
+ NewCops: enable
+@@ -106,16 +104,3 @@ Metrics/ClassLength:
+ Metrics/ModuleLength:
+ Exclude:
+ - 'spec/**/*.rb'
+-
+-RSpec/FilePath:
+- Exclude:
+- - spec/rubocop/formatter/junit_formatter_spec.rb
+-
+-RSpec/PredicateMatcher:
+- EnforcedStyle: explicit
+-
+-RSpec/MessageSpies:
+- EnforcedStyle: receive
+-
+-RSpec/NestedGroups:
+- Max: 7
+diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
+index 3f72042d1..fa637cd42 100644
+--- a/.rubocop_todo.yml
++++ b/.rubocop_todo.yml
+@@ -24,47 +24,3 @@ Metrics/MethodLength:
+ # Configuration parameters: CountComments.
+ Metrics/ModuleLength:
+ Max: 132
+-
+-# Offense count: 10
+-RSpec/AnyInstance:
+- Exclude:
+- - 'spec/rubocop/cli_spec.rb'
+- - 'spec/rubocop/cop/lint/duplicate_methods_spec.rb'
+- - 'spec/rubocop/cop/team_spec.rb'
+- - 'spec/rubocop/target_finder_spec.rb'
+-
+-# Offense count: 981
+-# Configuration parameters: Prefixes.
+-# Prefixes: when, with, without
+-RSpec/ContextWording:
+- Enabled: false
+-
+-# Offense count: 3810
+-# Configuration parameters: Max.
+-RSpec/ExampleLength:
+- Enabled: false
+-
+-# Offense count: 38
+-RSpec/ExpectOutput:
+- Exclude:
+- - 'spec/rubocop/cli/cli_auto_gen_config_spec.rb'
+- - 'spec/rubocop/cli/cli_options_spec.rb'
+- - 'spec/rubocop/config_spec.rb'
+- - 'spec/rubocop/cop/cop_spec.rb'
+- - 'spec/rubocop/formatter/disabled_config_formatter_spec.rb'
+- - 'spec/rubocop/formatter/formatter_set_spec.rb'
+- - 'spec/rubocop/options_spec.rb'
+- - 'spec/rubocop/rake_task_spec.rb'
+- - 'spec/rubocop/result_cache_spec.rb'
+- - 'spec/rubocop/target_finder_spec.rb'
+-
+-# Offense count: 434
+-RSpec/MultipleExpectations:
+- Max: 25
+-
+-# Offense count: 5
+-RSpec/SubjectStub:
+- Exclude:
+- - 'spec/rubocop/config_spec.rb'
+- - 'spec/rubocop/formatter/json_formatter_spec.rb'
+- - 'spec/rubocop/formatter/progress_formatter_spec.rb'
+--
+2.27.0
+
diff --git a/gnu/packages/patches/rust-1.45-linker-locale.patch b/gnu/packages/patches/rust-1.45-linker-locale.patch
new file mode 100644
index 0000000000..40220e8e77
--- /dev/null
+++ b/gnu/packages/patches/rust-1.45-linker-locale.patch
@@ -0,0 +1,14 @@
+Patch will be included upstream in 1.47: https://github.com/rust-lang/rust/pull/74416
+diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
+index e64aafa599f..12575ac4358 100644
+--- a/src/librustc_codegen_ssa/back/linker.rs
++++ b/src/librustc_codegen_ssa/back/linker.rs
+@@ -28,7 +28,7 @@ use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor};
+ pub fn disable_localization(linker: &mut Command) {
+ // No harm in setting both env vars simultaneously.
+ // Unix-style linkers.
+- linker.env("LC_ALL", "C");
++ linker.env("LC_ALL", "en_US.UTF-8");
+ // MSVC's `link.exe`.
+ linker.env("VSLANG", "1033");
+ }
diff --git a/gnu/packages/patches/sqlite-hurd.patch b/gnu/packages/patches/sqlite-hurd.patch
new file mode 100644
index 0000000000..d80a2c5be8
--- /dev/null
+++ b/gnu/packages/patches/sqlite-hurd.patch
@@ -0,0 +1,58 @@
+Adapted from Debian: https://sources.debian.org/patches/sqlite3/3.32.3-1/20-hurd-locking-style.patch
+Upstream status: Not upstreamed.
+
+This patch is needed to get offloading to work.
+
+Sqlite can use simple file locking mode, but that does not work for the Hurd;
+a second sqlite process fails with a "locking protocol" error.
+
+See also: https://bugs.debian.org/529734.
+
+diff -purN sqlite-autoconf-3310100/sqlite3.c sqlite-autoconf-3310100-/sqlite3.c
+--- sqlite-autoconf-3310100/sqlite3.c 2020-01-27 21:25:19.000000000 +0100
++++ sqlite-autoconf-3310100-/sqlite3.c 2020-07-01 11:50:13.768333806 +0200
+@@ -33189,7 +33189,7 @@ SQLITE_PRIVATE const char *sqlite3Opcode
+ # include <sys/mman.h>
+ #endif
+
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+ /* # include <sys/ioctl.h> */
+ # include <sys/file.h>
+ # include <sys/param.h>
+@@ -35676,7 +35676,7 @@ static int dotlockClose(sqlite3_file *id
+ **
+ ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off
+ */
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+
+ /*
+ ** Retry flock() calls that fail with EINTR
+@@ -38586,7 +38586,7 @@ IOMETHODS(
+ 0 /* xShmMap method */
+ )
+
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+ IOMETHODS(
+ flockIoFinder, /* Finder function name */
+ flockIoMethods, /* sqlite3_io_methods object name */
+@@ -41142,6 +41142,8 @@ SQLITE_API int sqlite3_os_init(void){
+ UNIXVFS("unix", autolockIoFinder ),
+ #elif OS_VXWORKS
+ UNIXVFS("unix", vxworksIoFinder ),
++#elif defined(__GNU__)
++ UNIXVFS("unix", flockIoFinder ),
+ #else
+ UNIXVFS("unix", posixIoFinder ),
+ #endif
+@@ -41151,7 +41153,7 @@ SQLITE_API int sqlite3_os_init(void){
+ #if OS_VXWORKS
+ UNIXVFS("unix-namedsem", semIoFinder ),
+ #endif
+-#if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS
++#if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS || defined(__GNU__)
+ UNIXVFS("unix-posix", posixIoFinder ),
+ #endif
+ #if SQLITE_ENABLE_LOCKING_STYLE
diff --git a/gnu/packages/patches/sssd-fix-samba.patch b/gnu/packages/patches/sssd-fix-samba.patch
new file mode 100644
index 0000000000..714968337a
--- /dev/null
+++ b/gnu/packages/patches/sssd-fix-samba.patch
@@ -0,0 +1,50 @@
+From bc56b10aea999284458dcc293b54cf65288e325d Mon Sep 17 00:00:00 2001
+From: Stephen Gallagher <sgallagh@redhat.com>
+Date: Fri, 24 Jan 2020 15:17:39 +0100
+Subject: [PATCH] Fix build failure against samba 4.12.0rc1
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The ndr_pull_get_switch() function was dropped, but it was just a wrapper
+around the ndr_token_peek() function, so we can use this approach on both
+old and new versions of libndr.
+
+Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/providers/ad/ad_gpo_ndr.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/providers/ad/ad_gpo_ndr.c b/src/providers/ad/ad_gpo_ndr.c
+index d573033494..8f405aa62b 100644
+--- a/src/providers/ad/ad_gpo_ndr.c
++++ b/src/providers/ad/ad_gpo_ndr.c
+@@ -105,7 +105,7 @@ ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
+ union security_ace_object_type *r)
+ {
+ uint32_t level;
+- level = ndr_pull_get_switch_value(ndr, r);
++ level = ndr_token_peek(&ndr->switch_list, r);
+ NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_union_align(ndr, 4));
+@@ -135,7 +135,7 @@ ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr,
+ union security_ace_object_inherited_type *r)
+ {
+ uint32_t level;
+- level = ndr_pull_get_switch_value(ndr, r);
++ level = ndr_token_peek(&ndr->switch_list, r);
+ NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_union_align(ndr, 4));
+@@ -198,7 +198,7 @@ ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
+ union security_ace_object_ctr *r)
+ {
+ uint32_t level;
+- level = ndr_pull_get_switch_value(ndr, r);
++ level = ndr_token_peek(&ndr->switch_list, r);
+ NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_union_align(ndr, 4));
diff --git a/gnu/packages/patches/tao-add-missing-headers.patch b/gnu/packages/patches/tao-add-missing-headers.patch
new file mode 100644
index 0000000000..f117281993
--- /dev/null
+++ b/gnu/packages/patches/tao-add-missing-headers.patch
@@ -0,0 +1,102 @@
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/taopm/-/raw/master/debian/patches/01-add-missing-headers.diff
+
+Description: Adding missing headers
+Author: Tiago Bortoletto Vaz <tiago@debian.org>
+Last-Update: 2013-04-17
+--- a/libtao/Tao.cc
++++ b/libtao/Tao.cc
+@@ -18,6 +18,7 @@
+
+ #include "Tao.h"
+ #include <iostream>
++#include <stdio.h>
+
+ extern Tao tao;
+ float &Time = tao.synthesisEngine.time;
+--- a/libtao/TaoDevice.cc
++++ b/libtao/TaoDevice.cc
+@@ -20,6 +20,7 @@
+ #include "Tao.h"
+ #include "TaoAccessPoint.h"
+ #include "TaoInstrument.h"
++#include <cstring>
+
+ TaoDevice::TaoDevice()
+ {
+--- a/libtao/TaoInstrument.cc
++++ b/libtao/TaoInstrument.cc
+@@ -23,6 +23,7 @@
+ //#include <sys/types.h>
+ #include <iostream>
+ #include <cmath>
++#include <cstring>
+
+ float TaoInstrument::defaultMass=3.5; // Set to optimum value for
+ // frequency response of
+--- a/libtao/TaoOutput.cc
++++ b/libtao/TaoOutput.cc
+@@ -24,6 +24,7 @@
+ #include <fstream>
+ #include "TaoOutput.h"
+ #include "Tao.h"
++#include <cstring>
+
+ extern Tao tao;
+
+--- a/libtao/TaoPitch.cc
++++ b/libtao/TaoPitch.cc
+@@ -30,6 +30,7 @@
+ #include "TaoPitch.h"
+ #include <iostream>
+ #include <cmath>
++#include <cstring>
+
+ // This class allows pitches and frequencies to be specified in a number of
+ // different formats including the following:
+--- a/taoparse/taoparser.yy
++++ b/taoparse/taoparser.yy
+@@ -19,7 +19,8 @@
+
+ #include <iostream>
+ #include <sstream>
+-#include <string>
++#include <cstring>
++#include <stdio.h>
+ #include "taoparserdefs.h"
+
+ int yyerror(char *s);
+--- a/libtao/TaoGraphicsEngine.cc
++++ b/libtao/TaoGraphicsEngine.cc
+@@ -27,7 +27,8 @@
+ #include "TaoInstrument.h"
+ #include "TaoAccessPoint.h"
+ #include "TaoDevice.h"
+-#include <string>
++#include <cstring>
++#include <stdio.h>
+
+ extern Tao tao;
+ extern void taoMasterTick();
+--- a/tao2aiff/tao2aiff.cc
++++ b/tao2aiff/tao2aiff.cc
+@@ -25,6 +25,8 @@
+ #include <cmath>
+ #include "audiofile.h"
+ #include "tao2aiff.h"
++#include <cstdlib>
++#include <cstring>
+
+
+ main(int argc, char **argv)
+--- a/tao2wav/tao2wav.cc
++++ b/tao2wav/tao2wav.cc
+@@ -25,6 +25,8 @@
+ #include <cmath>
+ #include "audiofile.h"
+ #include "tao2wav.h"
++#include <cstdlib>
++#include <cstring>
+
+ main(int argc, char **argv)
+ {
diff --git a/gnu/packages/patches/tao-fix-parser-types.patch b/gnu/packages/patches/tao-fix-parser-types.patch
new file mode 100644
index 0000000000..5dcf3fc2ea
--- /dev/null
+++ b/gnu/packages/patches/tao-fix-parser-types.patch
@@ -0,0 +1,26 @@
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/taopm/-/raw/master/debian/patches/02-fix-parser-yyerror.diff
+
+Description: Use a constant char, dummy comment.
+Author: Tiago Bortoletto Vaz <tiago@debian.org>
+Last-Update: 2013-04-17
+--- a/taoparse/taoparser.yy
++++ b/taoparse/taoparser.yy
+@@ -23,7 +23,7 @@
+ #include <stdio.h>
+ #include "taoparserdefs.h"
+
+-int yyerror(char *s);
++int yyerror(const char *s);
+
+ //#ifdef LINUX
+ int yylex(void);
+@@ -2924,7 +2924,7 @@
+ }
+
+
+-int yyerror (char *s)
++int yyerror (const char *s)
+ {
+ parse_error(what_I_expected_here);
+ std::cout << "PARSE_FAILED";
diff --git a/gnu/packages/patches/transmission-CVE-2018-10756.patch b/gnu/packages/patches/transmission-CVE-2018-10756.patch
deleted file mode 100644
index f9bdcf60aa..0000000000
--- a/gnu/packages/patches/transmission-CVE-2018-10756.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Fix CVE-2018-10756:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-10756
-
-Patch copied from Fedora:
-
-https://src.fedoraproject.org/rpms/transmission/blob/master/f/2123adf8e5e1c2b48791f9d22fc8c747e974180e.patch
-
---- a/libtransmission/variant.c 2018-05-01 12:21:08.000000000 -0500
-+++ b/libtransmission/variant.c 2020-05-18 10:21:27.554214128 -0500
-@@ -820,7 +820,7 @@
- struct SaveNode
- {
- const tr_variant * v;
-- tr_variant sorted;
-+ tr_variant* sorted;
- size_t childIndex;
- bool isVisited;
- };
-@@ -849,26 +849,33 @@
-
- qsort (tmp, n, sizeof (struct KeyIndex), compareKeyIndex);
-
-- tr_variantInitDict (&node->sorted, n);
-+ node->sorted = tr_new(tr_variant, 1);
-+ tr_variantInitDict (node->sorted, n);
- for (i=0; i<n; ++i)
-- node->sorted.val.l.vals[i] = *tmp[i].val;
-+ node->sorted->val.l.vals[i] = *tmp[i].val;
- node->sorted.val.l.count = n;
-
- tr_free (tmp);
-
-- node->v = &node->sorted;
-+ v = node->sorted;
- }
- else
- {
-- node->v = v;
-+ node->sorted = NULL;
- }
-+
-+ node->v = v;
- }
-
- static void
- nodeDestruct (struct SaveNode * node)
- {
-- if (node->v == &node->sorted)
-- tr_free (node->sorted.val.l.vals);
-+ //TR_ASSERT(node != NULL);
-+ if (node->sorted != NULL)
-+ {
-+ tr_free(node->sorted->val.l.vals);
-+ tr_free(node->sorted);
-+ }
- }
-
- /**
---- a/libtransmission/variant.c 2020-05-18 10:21:49.000000000 -0500
-+++ b/libtransmission/variant.c 2020-05-18 10:24:34.673648865 -0500
-@@ -853,7 +853,7 @@
- tr_variantInitDict (node->sorted, n);
- for (i=0; i<n; ++i)
- node->sorted->val.l.vals[i] = *tmp[i].val;
-- node->sorted.val.l.count = n;
-+ node->sorted->val.l.count = n;
-
- tr_free (tmp);
-
-
diff --git a/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch b/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch
deleted file mode 100644
index f88d12f1e2..0000000000
--- a/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch
+++ /dev/null
@@ -1,1132 +0,0 @@
-From b128c2e0b480ee992fabe554d19cd471efb11095 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:35 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-5-pbrobinson@gmail.com/
-Subject: [PATCH 4/5] arm: dts: rockchip: Add initial DT for Pinebook Pro
-
-Sync initial support for Pinebook Pro device tree from Linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- arch/arm/dts/Makefile | 1 +
- arch/arm/dts/rk3399-pinebook-pro.dts | 1096 ++++++++++++++++++++++++++
- 2 files changed, 1097 insertions(+)
- create mode 100644 arch/arm/dts/rk3399-pinebook-pro.dts
-
-diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
-index 820ee9733a..885bf0ef58 100644
---- a/arch/arm/dts/Makefile
-+++ b/arch/arm/dts/Makefile
-@@ -125,6 +125,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \
- rk3399-nanopi-m4.dtb \
- rk3399-nanopi-neo4.dtb \
- rk3399-orangepi.dtb \
-+ rk3399-pinebook-pro.dtb \
- rk3399-puma-ddr1333.dtb \
- rk3399-puma-ddr1600.dtb \
- rk3399-puma-ddr1866.dtb \
-diff --git a/arch/arm/dts/rk3399-pinebook-pro.dts b/arch/arm/dts/rk3399-pinebook-pro.dts
-new file mode 100644
-index 0000000000..294d21bf45
---- /dev/null
-+++ b/arch/arm/dts/rk3399-pinebook-pro.dts
-@@ -0,0 +1,1096 @@
-+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
-+/*
-+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd.
-+ * Copyright (c) 2018 Akash Gajjar <Akash_Gajjar@mentor.com>
-+ * Copyright (c) 2020 Tobias Schramm <t.schramm@manjaro.org>
-+ */
-+
-+/dts-v1/;
-+#include <dt-bindings/input/gpio-keys.h>
-+#include <dt-bindings/input/linux-event-codes.h>
-+#include <dt-bindings/pwm/pwm.h>
-+#include <dt-bindings/usb/pd.h>
-+#include <dt-bindings/leds/common.h>
-+#include "rk3399.dtsi"
-+#include "rk3399-opp.dtsi"
-+
-+/ {
-+ model = "Pine64 Pinebook Pro";
-+ compatible = "pine64,pinebook-pro", "rockchip,rk3399";
-+
-+ chosen {
-+ stdout-path = "serial2:1500000n8";
-+ };
-+
-+ backlight: edp-backlight {
-+ compatible = "pwm-backlight";
-+ power-supply = <&vcc_12v>;
-+ pwms = <&pwm0 0 740740 0>;
-+ };
-+
-+ edp_panel: edp-panel {
-+ compatible = "boe,nv140fhmn49";
-+ backlight = <&backlight>;
-+ enable-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&panel_en_gpio>;
-+ power-supply = <&vcc3v3_panel>;
-+
-+ ports {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ port@0 {
-+ reg = <0>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ panel_in_edp: endpoint@0 {
-+ reg = <0>;
-+ remote-endpoint = <&edp_out_panel>;
-+ };
-+ };
-+ };
-+ };
-+
-+ /*
-+ * Use separate nodes for gpio-keys to allow for selective deactivation
-+ * of wakeup sources via sysfs without disabling the whole key
-+ */
-+ gpio-key-lid {
-+ compatible = "gpio-keys";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&lidbtn_gpio>;
-+
-+ lid {
-+ debounce-interval = <20>;
-+ gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
-+ label = "Lid";
-+ linux,code = <SW_LID>;
-+ linux,input-type = <EV_SW>;
-+ wakeup-event-action = <EV_ACT_DEASSERTED>;
-+ wakeup-source;
-+ };
-+ };
-+
-+ gpio-key-power {
-+ compatible = "gpio-keys";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pwrbtn_gpio>;
-+
-+ power {
-+ debounce-interval = <20>;
-+ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
-+ label = "Power";
-+ linux,code = <KEY_POWER>;
-+ wakeup-source;
-+ };
-+ };
-+
-+ leds {
-+ compatible = "gpio-leds";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pwrled_gpio &slpled_gpio>;
-+
-+ green-led {
-+ color = <LED_COLOR_ID_GREEN>;
-+ default-state = "on";
-+ function = LED_FUNCTION_POWER;
-+ gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
-+ label = "green:power";
-+ };
-+
-+ red-led {
-+ color = <LED_COLOR_ID_RED>;
-+ default-state = "off";
-+ function = LED_FUNCTION_STANDBY;
-+ gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
-+ label = "red:standby";
-+ panic-indicator;
-+ retain-state-suspended;
-+ };
-+ };
-+
-+ /* Power sequence for SDIO WiFi module */
-+ sdio_pwrseq: sdio-pwrseq {
-+ compatible = "mmc-pwrseq-simple";
-+ clocks = <&rk808 1>;
-+ clock-names = "ext_clock";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&wifi_enable_h_gpio>;
-+ post-power-on-delay-ms = <100>;
-+ power-off-delay-us = <500000>;
-+
-+ /* WL_REG_ON on module */
-+ reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
-+ };
-+
-+ /* Audio components */
-+ es8316-sound {
-+ compatible = "simple-audio-card";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&hp_det_gpio>;
-+ simple-audio-card,name = "rockchip,es8316-codec";
-+ simple-audio-card,format = "i2s";
-+ simple-audio-card,mclk-fs = <256>;
-+
-+ simple-audio-card,widgets =
-+ "Microphone", "Mic Jack",
-+ "Headphone", "Headphones",
-+ "Speaker", "Speaker";
-+ simple-audio-card,routing =
-+ "MIC1", "Mic Jack",
-+ "Headphones", "HPOL",
-+ "Headphones", "HPOR",
-+ "Speaker Amplifier INL", "HPOL",
-+ "Speaker Amplifier INR", "HPOR",
-+ "Speaker", "Speaker Amplifier OUTL",
-+ "Speaker", "Speaker Amplifier OUTR";
-+
-+ simple-audio-card,hp-det-gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
-+ simple-audio-card,aux-devs = <&speaker_amp>;
-+ simple-audio-card,pin-switches = "Speaker";
-+
-+ simple-audio-card,cpu {
-+ sound-dai = <&i2s1>;
-+ };
-+
-+ simple-audio-card,codec {
-+ sound-dai = <&es8316>;
-+ };
-+ };
-+
-+ speaker_amp: speaker-amplifier {
-+ compatible = "simple-audio-amplifier";
-+ enable-gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>;
-+ sound-name-prefix = "Speaker Amplifier";
-+ VCC-supply = <&pa_5v>;
-+ };
-+
-+ /* Power tree */
-+ /* Root power source */
-+ vcc_sysin: vcc-sysin {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc_sysin";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ };
-+
-+ /* Regulators supplied by vcc_sysin */
-+ /* LCD backlight supply */
-+ vcc_12v: vcc-12v {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc_12v";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <12000000>;
-+ regulator-max-microvolt = <12000000>;
-+ vin-supply = <&vcc_sysin>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* Main 3.3 V supply */
-+ vcc3v3_sys: wifi_bat: vcc3v3-sys {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc3v3_sys";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ vin-supply = <&vcc_sysin>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ };
-+ };
-+
-+ /* 5 V USB power supply */
-+ vcc5v0_usb: pa_5v: vcc5v0-usb-regulator {
-+ compatible = "regulator-fixed";
-+ enable-active-high;
-+ gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pwr_5v_gpio>;
-+ regulator-name = "vcc5v0_usb";
-+ regulator-always-on;
-+ regulator-min-microvolt = <5000000>;
-+ regulator-max-microvolt = <5000000>;
-+ vin-supply = <&vcc_sysin>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* RK3399 logic supply */
-+ vdd_log: vdd-log {
-+ compatible = "pwm-regulator";
-+ pwms = <&pwm2 0 25000 1>;
-+ regulator-name = "vdd_log";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <800000>;
-+ regulator-max-microvolt = <1400000>;
-+ vin-supply = <&vcc_sysin>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ };
-+ };
-+
-+ /* Regulators supplied by vcc3v3_sys */
-+ /* 0.9 V supply, always on */
-+ vcc_0v9: vcc-0v9 {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc_0v9";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <900000>;
-+ regulator-max-microvolt = <900000>;
-+ vin-supply = <&vcc3v3_sys>;
-+ };
-+
-+ /* S3 1.8 V supply, switched by vcc1v8_s3 */
-+ vcca1v8_s3: vcc1v8-s3 {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcca1v8_s3";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1800000>;
-+ regulator-max-microvolt = <1800000>;
-+ vin-supply = <&vcc3v3_sys>;
-+ };
-+
-+ /* micro SD card power */
-+ vcc3v0_sd: vcc3v0-sd {
-+ compatible = "regulator-fixed";
-+ enable-active-high;
-+ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&sdmmc0_pwr_h_gpio>;
-+ regulator-name = "vcc3v0_sd";
-+ regulator-always-on;
-+ regulator-min-microvolt = <3000000>;
-+ regulator-max-microvolt = <3000000>;
-+ vin-supply = <&vcc3v3_sys>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* LCD panel power, called VCC3V3_S0 in schematic */
-+ vcc3v3_panel: vcc3v3-panel {
-+ compatible = "regulator-fixed";
-+ enable-active-high;
-+ gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&lcdvcc_en_gpio>;
-+ regulator-name = "vcc3v3_panel";
-+ regulator-always-on;
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ regulator-enable-ramp-delay = <100000>;
-+ vin-supply = <&vcc3v3_sys>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* M.2 adapter power, switched by vcc1v8_s3 */
-+ vcc3v3_ssd: vcc3v3-ssd {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc3v3_ssd";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ vin-supply = <&vcc3v3_sys>;
-+ };
-+
-+ /* Regulators supplied by vcc5v0_usb */
-+ /* USB 3 port power supply regulator */
-+ vcc5v0_otg: vcc5v0-otg {
-+ compatible = "regulator-fixed";
-+ enable-active-high;
-+ gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&vcc5v0_host_en_gpio>;
-+ regulator-name = "vcc5v0_otg";
-+ regulator-always-on;
-+ regulator-min-microvolt = <5000000>;
-+ regulator-max-microvolt = <5000000>;
-+ vin-supply = <&vcc5v0_usb>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* Regulators supplied by vcc5v0_usb */
-+ /* Type C port power supply regulator */
-+ vbus_5vout: vbus_typec: vbus-5vout {
-+ compatible = "regulator-fixed";
-+ enable-active-high;
-+ gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&vcc5v0_typec0_en_gpio>;
-+ regulator-name = "vbus_5vout";
-+ regulator-min-microvolt = <5000000>;
-+ regulator-max-microvolt = <5000000>;
-+ vin-supply = <&vcc5v0_usb>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ /* Regulators supplied by vcc_1v8 */
-+ /* Primary 0.9 V LDO */
-+ vcca0v9_s3: vcca0v9-s3 {
-+ compatible = "regulator-fixed";
-+ regulator-name = "vcc0v9_s3";
-+ regulator-min-microvolt = <5000000>;
-+ regulator-max-microvolt = <5000000>;
-+ vin-supply = <&vcc_1v8>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ };
-+ };
-+
-+ mains_charger: dc-charger {
-+ compatible = "gpio-charger";
-+ charger-type = "mains";
-+ gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_LOW>;
-+
-+ /* Also triggered by USB charger */
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&dc_det_gpio>;
-+ };
-+};
-+
-+&cdn_dp {
-+ status = "okay";
-+};
-+
-+&cpu_b0 {
-+ cpu-supply = <&vdd_cpu_b>;
-+};
-+
-+&cpu_b1 {
-+ cpu-supply = <&vdd_cpu_b>;
-+};
-+
-+&cpu_l0 {
-+ cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l1 {
-+ cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l2 {
-+ cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l3 {
-+ cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&edp {
-+ force-hpd;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&edp_hpd>;
-+ status = "okay";
-+
-+ ports {
-+ edp_out: port@1 {
-+ reg = <1>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ edp_out_panel: endpoint@0 {
-+ reg = <0>;
-+ remote-endpoint = <&panel_in_edp>;
-+ };
-+ };
-+ };
-+};
-+
-+&emmc_phy {
-+ status = "okay";
-+};
-+
-+&gpu {
-+ mali-supply = <&vdd_gpu>;
-+ status = "okay";
-+};
-+
-+&hdmi_sound {
-+ status = "okay";
-+};
-+
-+&i2c0 {
-+ clock-frequency = <400000>;
-+ i2c-scl-falling-time-ns = <4>;
-+ i2c-scl-rising-time-ns = <168>;
-+ status = "okay";
-+
-+ rk808: pmic@1b {
-+ compatible = "rockchip,rk808";
-+ reg = <0x1b>;
-+ #clock-cells = <1>;
-+ clock-output-names = "xin32k", "rk808-clkout2";
-+ interrupt-parent = <&gpio3>;
-+ interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pmic_int_l_gpio>;
-+ rockchip,system-power-controller;
-+ wakeup-source;
-+
-+ vcc1-supply = <&vcc_sysin>;
-+ vcc2-supply = <&vcc_sysin>;
-+ vcc3-supply = <&vcc_sysin>;
-+ vcc4-supply = <&vcc_sysin>;
-+ vcc6-supply = <&vcc_sysin>;
-+ vcc7-supply = <&vcc_sysin>;
-+ vcc8-supply = <&vcc3v3_sys>;
-+ vcc9-supply = <&vcc_sysin>;
-+ vcc10-supply = <&vcc_sysin>;
-+ vcc11-supply = <&vcc_sysin>;
-+ vcc12-supply = <&vcc3v3_sys>;
-+ vcc13-supply = <&vcc_sysin>;
-+ vcc14-supply = <&vcc_sysin>;
-+
-+ regulators {
-+ /* rk3399 center logic supply */
-+ vdd_center: DCDC_REG1 {
-+ regulator-name = "vdd_center";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <750000>;
-+ regulator-max-microvolt = <1350000>;
-+ regulator-ramp-delay = <6001>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vdd_cpu_l: DCDC_REG2 {
-+ regulator-name = "vdd_cpu_l";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <750000>;
-+ regulator-max-microvolt = <1350000>;
-+ regulator-ramp-delay = <6001>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vcc_ddr: DCDC_REG3 {
-+ regulator-name = "vcc_ddr";
-+ regulator-always-on;
-+ regulator-boot-on;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ };
-+ };
-+
-+ vcc_1v8: vcc_wl: DCDC_REG4 {
-+ regulator-name = "vcc_1v8";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1800000>;
-+ regulator-max-microvolt = <1800000>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ regulator-suspend-microvolt = <1800000>;
-+ };
-+ };
-+
-+ /* not used */
-+ LDO_REG1 {
-+ };
-+
-+ /* not used */
-+ LDO_REG2 {
-+ };
-+
-+ vcc1v8_pmupll: LDO_REG3 {
-+ regulator-name = "vcc1v8_pmupll";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1800000>;
-+ regulator-max-microvolt = <1800000>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ regulator-suspend-microvolt = <1800000>;
-+ };
-+ };
-+
-+ vcc_sdio: LDO_REG4 {
-+ regulator-name = "vcc_sdio";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1800000>;
-+ regulator-max-microvolt = <3000000>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ regulator-suspend-microvolt = <3000000>;
-+ };
-+ };
-+
-+ vcca3v0_codec: LDO_REG5 {
-+ regulator-name = "vcca3v0_codec";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <3000000>;
-+ regulator-max-microvolt = <3000000>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vcc_1v5: LDO_REG6 {
-+ regulator-name = "vcc_1v5";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1500000>;
-+ regulator-max-microvolt = <1500000>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ regulator-suspend-microvolt = <1500000>;
-+ };
-+ };
-+
-+ vcca1v8_codec: LDO_REG7 {
-+ regulator-name = "vcca1v8_codec";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <1800000>;
-+ regulator-max-microvolt = <1800000>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vcc_3v0: LDO_REG8 {
-+ regulator-name = "vcc_3v0";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <3000000>;
-+ regulator-max-microvolt = <3000000>;
-+
-+ regulator-state-mem {
-+ regulator-on-in-suspend;
-+ regulator-suspend-microvolt = <3000000>;
-+ };
-+ };
-+
-+ vcc3v3_s3: SWITCH_REG1 {
-+ regulator-name = "vcc3v3_s3";
-+ regulator-always-on;
-+ regulator-boot-on;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vcc3v3_s0: SWITCH_REG2 {
-+ regulator-name = "vcc3v3_s0";
-+ regulator-always-on;
-+ regulator-boot-on;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+ };
-+ };
-+
-+ vdd_cpu_b: regulator@40 {
-+ compatible = "silergy,syr827";
-+ reg = <0x40>;
-+ fcs,suspend-voltage-selector = <1>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&vsel1_gpio>;
-+ regulator-name = "vdd_cpu_b";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <712500>;
-+ regulator-max-microvolt = <1500000>;
-+ regulator-ramp-delay = <1000>;
-+ vin-supply = <&vcc_1v8>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+
-+ vdd_gpu: regulator@41 {
-+ compatible = "silergy,syr828";
-+ reg = <0x41>;
-+ fcs,suspend-voltage-selector = <1>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&vsel2_gpio>;
-+ regulator-name = "vdd_gpu";
-+ regulator-always-on;
-+ regulator-boot-on;
-+ regulator-min-microvolt = <712500>;
-+ regulator-max-microvolt = <1500000>;
-+ regulator-ramp-delay = <1000>;
-+ vin-supply = <&vcc_1v8>;
-+
-+ regulator-state-mem {
-+ regulator-off-in-suspend;
-+ };
-+ };
-+};
-+
-+&i2c1 {
-+ clock-frequency = <100000>;
-+ i2c-scl-falling-time-ns = <4>;
-+ i2c-scl-rising-time-ns = <168>;
-+ status = "okay";
-+
-+ es8316: es8316@11 {
-+ compatible = "everest,es8316";
-+ reg = <0x11>;
-+ clocks = <&cru SCLK_I2S_8CH_OUT>;
-+ clock-names = "mclk";
-+ #sound-dai-cells = <0>;
-+ };
-+};
-+
-+&i2c3 {
-+ i2c-scl-falling-time-ns = <15>;
-+ i2c-scl-rising-time-ns = <450>;
-+ status = "okay";
-+};
-+
-+&i2c4 {
-+ i2c-scl-falling-time-ns = <20>;
-+ i2c-scl-rising-time-ns = <600>;
-+ status = "okay";
-+
-+ fusb0: fusb30x@22 {
-+ compatible = "fcs,fusb302";
-+ reg = <0x22>;
-+ fcs,int_n = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&fusb0_int_gpio>;
-+ vbus-supply = <&vbus_typec>;
-+
-+ connector {
-+ compatible = "usb-c-connector";
-+ data-role = "host";
-+ label = "USB-C";
-+ op-sink-microwatt = <1000000>;
-+ power-role = "dual";
-+ sink-pdos =
-+ <PDO_FIXED(5000, 2500, PDO_FIXED_USB_COMM)>;
-+ source-pdos =
-+ <PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM)>;
-+ try-power-role = "sink";
-+
-+ ports {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ port@0 {
-+ reg = <0>;
-+
-+ usbc_hs: endpoint {
-+ remote-endpoint =
-+ <&u2phy0_typec_hs>;
-+ };
-+ };
-+
-+ port@1 {
-+ reg = <1>;
-+
-+ usbc_ss: endpoint {
-+ remote-endpoint =
-+ <&tcphy0_typec_ss>;
-+ };
-+ };
-+
-+ port@2 {
-+ reg = <2>;
-+
-+ usbc_dp: endpoint {
-+ remote-endpoint =
-+ <&tcphy0_typec_dp>;
-+ };
-+ };
-+ };
-+ };
-+ };
-+};
-+
-+&i2s1 {
-+ #sound-dai-cells = <0>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&i2s_8ch_mclk_gpio>, <&i2s1_2ch_bus>;
-+ rockchip,capture-channels = <8>;
-+ rockchip,playback-channels = <8>;
-+ status = "okay";
-+};
-+
-+&io_domains {
-+ audio-supply = <&vcc_3v0>;
-+ gpio1830-supply = <&vcc_3v0>;
-+ sdmmc-supply = <&vcc_sdio>;
-+ status = "okay";
-+};
-+
-+&pcie_phy {
-+ status = "okay";
-+};
-+
-+&pcie0 {
-+ bus-scan-delay-ms = <1000>;
-+ ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
-+ max-link-speed = <2>;
-+ num-lanes = <4>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pcie_clkreqn_cpm>;
-+ vpcie0v9-supply = <&vcca0v9_s3>;
-+ vpcie1v8-supply = <&vcca1v8_s3>;
-+ vpcie3v3-supply = <&vcc3v3_ssd>;
-+ status = "okay";
-+};
-+
-+&pinctrl {
-+ buttons {
-+ pwrbtn_gpio: pwrbtn-gpio {
-+ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+
-+ lidbtn_gpio: lidbtn-gpio {
-+ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ dc-charger {
-+ dc_det_gpio: dc-det-gpio {
-+ rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ es8316 {
-+ hp_det_gpio: hp-det-gpio {
-+ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ fusb302x {
-+ fusb0_int_gpio: fusb0-int-gpio {
-+ rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ i2s1 {
-+ i2s_8ch_mclk_gpio: i2s-8ch-mclk-gpio {
-+ rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>;
-+ };
-+ };
-+
-+ lcd-panel {
-+ lcdvcc_en_gpio: lcdvcc-en-gpio {
-+ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ panel_en_gpio: panel-en-gpio {
-+ rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ lcd_panel_reset_gpio: lcd-panel-reset-gpio {
-+ rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ leds {
-+ pwrled_gpio: pwrled_gpio {
-+ rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ slpled_gpio: slpled_gpio {
-+ rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+ };
-+
-+ pmic {
-+ pmic_int_l_gpio: pmic-int-l-gpio {
-+ rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+
-+ vsel1_gpio: vsel1-gpio {
-+ rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
-+ };
-+
-+ vsel2_gpio: vsel2-gpio {
-+ rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
-+ };
-+ };
-+
-+ sdcard {
-+ sdmmc0_pwr_h_gpio: sdmmc0-pwr-h-gpio {
-+ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ };
-+
-+ sdio-pwrseq {
-+ wifi_enable_h_gpio: wifi-enable-h-gpio {
-+ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+ };
-+
-+ usb-typec {
-+ vcc5v0_typec0_en_gpio: vcc5v0-typec0-en-gpio {
-+ rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
-+ };
-+ };
-+
-+ usb2 {
-+ pwr_5v_gpio: pwr-5v-gpio {
-+ rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ vcc5v0_host_en_gpio: vcc5v0-host-en-gpio {
-+ rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+ };
-+
-+ wireless-bluetooth {
-+ bt_wake_gpio: bt-wake-gpio {
-+ rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ bt_host_wake_gpio: bt-host-wake-gpio {
-+ rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+
-+ bt_reset_gpio: bt-reset-gpio {
-+ rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
-+ };
-+ };
-+};
-+
-+&pmu_io_domains {
-+ pmu1830-supply = <&vcc_3v0>;
-+ status = "okay";
-+};
-+
-+&pwm0 {
-+ status = "okay";
-+};
-+
-+&pwm2 {
-+ status = "okay";
-+};
-+
-+&saradc {
-+ vref-supply = <&vcca1v8_s3>;
-+ status = "okay";
-+};
-+
-+&sdmmc {
-+ bus-width = <4>;
-+ cap-mmc-highspeed;
-+ cap-sd-highspeed;
-+ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
-+ disable-wp;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
-+ sd-uhs-sdr104;
-+ vmmc-supply = <&vcc3v0_sd>;
-+ vqmmc-supply = <&vcc_sdio>;
-+ status = "okay";
-+};
-+
-+&sdio0 {
-+ bus-width = <4>;
-+ cap-sd-highspeed;
-+ cap-sdio-irq;
-+ keep-power-in-suspend;
-+ mmc-pwrseq = <&sdio_pwrseq>;
-+ non-removable;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
-+ sd-uhs-sdr104;
-+ status = "okay";
-+};
-+
-+&sdhci {
-+ bus-width = <8>;
-+ mmc-hs200-1_8v;
-+ non-removable;
-+ status = "okay";
-+};
-+
-+&spi1 {
-+ max-freq = <10000000>;
-+ status = "okay";
-+
-+ spiflash: flash@0 {
-+ compatible = "jedec,spi-nor";
-+ reg = <0>;
-+ m25p,fast-read;
-+ spi-max-frequency = <10000000>;
-+ };
-+};
-+
-+&tcphy0 {
-+ status = "okay";
-+};
-+
-+&tcphy0_dp {
-+ port {
-+ tcphy0_typec_dp: endpoint {
-+ remote-endpoint = <&usbc_dp>;
-+ };
-+ };
-+};
-+
-+&tcphy0_usb3 {
-+ port {
-+ tcphy0_typec_ss: endpoint {
-+ remote-endpoint = <&usbc_ss>;
-+ };
-+ };
-+};
-+
-+&tcphy1 {
-+ status = "okay";
-+};
-+
-+&tsadc {
-+ /* tshut mode 0:CRU 1:GPIO */
-+ rockchip,hw-tshut-mode = <1>;
-+ /* tshut polarity 0:LOW 1:HIGH */
-+ rockchip,hw-tshut-polarity = <1>;
-+ status = "okay";
-+};
-+
-+&u2phy0 {
-+ status = "okay";
-+
-+ u2phy0_otg: otg-port {
-+ status = "okay";
-+ };
-+
-+ u2phy0_host: host-port {
-+ phy-supply = <&vcc5v0_otg>;
-+ status = "okay";
-+ };
-+
-+ port {
-+ u2phy0_typec_hs: endpoint {
-+ remote-endpoint = <&usbc_hs>;
-+ };
-+ };
-+};
-+
-+&u2phy1 {
-+ status = "okay";
-+
-+ u2phy1_otg: otg-port {
-+ status = "okay";
-+ };
-+
-+ u2phy1_host: host-port {
-+ phy-supply = <&vcc5v0_otg>;
-+ status = "okay";
-+ };
-+};
-+
-+&uart0 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
-+ uart-has-rtscts;
-+ status = "okay";
-+
-+ bluetooth {
-+ compatible = "brcm,bcm4345c5";
-+ clocks = <&rk808 1>;
-+ clock-names = "lpo";
-+ device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
-+ host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
-+ max-speed = <1500000>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&bt_host_wake_gpio &bt_wake_gpio &bt_reset_gpio>;
-+ shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
-+ vbat-supply = <&wifi_bat>;
-+ vddio-supply = <&vcc_wl>;
-+ };
-+};
-+
-+&uart2 {
-+ status = "okay";
-+};
-+
-+&usb_host0_ehci {
-+ status = "okay";
-+};
-+
-+&usb_host0_ohci {
-+ status = "okay";
-+};
-+
-+&usb_host1_ehci {
-+ status = "okay";
-+};
-+
-+&usb_host1_ohci {
-+ status = "okay";
-+};
-+
-+&usbdrd3_0 {
-+ status = "okay";
-+};
-+
-+&usbdrd_dwc3_0 {
-+ dr_mode = "host";
-+ status = "okay";
-+};
-+
-+&usbdrd3_1 {
-+ status = "okay";
-+};
-+
-+&usbdrd_dwc3_1 {
-+ dr_mode = "host";
-+ status = "okay";
-+};
-+
-+&vopb {
-+ status = "okay";
-+};
-+
-+&vopb_mmu {
-+ status = "okay";
-+};
-+
-+&vopl {
-+ status = "okay";
-+};
-+
-+&vopl_mmu {
-+ status = "okay";
-+};
---
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch b/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch
deleted file mode 100644
index c359522967..0000000000
--- a/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 00978950fed39b6104b6b4f141450a66cc3400fa Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:32 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-2-pbrobinson@gmail.com/
-Subject: [PATCH 1/5] video: simple_panel: add boe,nv140fhmn49 display
-
-add "boe,nv140fhmn49" display to compatible node.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
-Cc: Anatolij Gustschin <agust@denx.de>
----
- drivers/video/simple_panel.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c
-index c3c0e84732..5722811117 100644
---- a/drivers/video/simple_panel.c
-+++ b/drivers/video/simple_panel.c
-@@ -105,6 +105,7 @@ static const struct udevice_id simple_panel_ids[] = {
- { .compatible = "auo,b133xtn01" },
- { .compatible = "auo,b116xw03" },
- { .compatible = "auo,b133htn01" },
-+ { .compatible = "boe,nv140fhmn49" },
- { .compatible = "lg,lb070wv8" },
- { }
- };
---
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch b/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch
deleted file mode 100644
index aec33a7023..0000000000
--- a/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 451bd72bf966df7518682cb748a804634ea19424 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:33 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-3-pbrobinson@gmail.com/
-Subject: [PATCH 2/5] dt-bindings: input: adopt Linux gpio-keys binding
- constants
-
-Sync the gpio-keys input bindings from linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- include/dt-bindings/input/gpio-keys.h | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
- create mode 100644 include/dt-bindings/input/gpio-keys.h
-
-diff --git a/include/dt-bindings/input/gpio-keys.h b/include/dt-bindings/input/gpio-keys.h
-new file mode 100644
-index 0000000000..8962df79e7
---- /dev/null
-+++ b/include/dt-bindings/input/gpio-keys.h
-@@ -0,0 +1,13 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * This header provides constants for gpio keys bindings.
-+ */
-+
-+#ifndef _DT_BINDINGS_GPIO_KEYS_H
-+#define _DT_BINDINGS_GPIO_KEYS_H
-+
-+#define EV_ACT_ANY 0x00 /* asserted or deasserted */
-+#define EV_ACT_ASSERTED 0x01 /* asserted */
-+#define EV_ACT_DEASSERTED 0x02 /* deasserted */
-+
-+#endif /* _DT_BINDINGS_GPIO_KEYS_H */
---
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-leds-common-binding-con.patch b/gnu/packages/patches/u-boot-leds-common-binding-con.patch
deleted file mode 100644
index 837408120b..0000000000
--- a/gnu/packages/patches/u-boot-leds-common-binding-con.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 282b6ca04abbe1302d04caa05be5fc5afb127141 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:34 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-4-pbrobinson@gmail.com/
-Subject: [PATCH 3/5] dt-bindings: leds: adopt Linux leds common binding
- constants
-
-Sync the common leds bindings from linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- include/dt-bindings/leds/common.h | 91 +++++++++++++++++++++++++++++++
- 1 file changed, 91 insertions(+)
- create mode 100644 include/dt-bindings/leds/common.h
-
-diff --git a/include/dt-bindings/leds/common.h b/include/dt-bindings/leds/common.h
-new file mode 100644
-index 0000000000..0ce7dfc00d
---- /dev/null
-+++ b/include/dt-bindings/leds/common.h
-@@ -0,0 +1,91 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * This header provides macros for the common LEDs device tree bindings.
-+ *
-+ * Copyright (C) 2015, Samsung Electronics Co., Ltd.
-+ * Author: Jacek Anaszewski <j.anaszewski@samsung.com>
-+ *
-+ * Copyright (C) 2019 Jacek Anaszewski <jacek.anaszewski@gmail.com>
-+ * Copyright (C) 2020 Pavel Machek <pavel@ucw.cz>
-+ */
-+
-+#ifndef __DT_BINDINGS_LEDS_H
-+#define __DT_BINDINGS_LEDS_H
-+
-+/* External trigger type */
-+#define LEDS_TRIG_TYPE_EDGE 0
-+#define LEDS_TRIG_TYPE_LEVEL 1
-+
-+/* Boost modes */
-+#define LEDS_BOOST_OFF 0
-+#define LEDS_BOOST_ADAPTIVE 1
-+#define LEDS_BOOST_FIXED 2
-+
-+/* Standard LED colors */
-+#define LED_COLOR_ID_WHITE 0
-+#define LED_COLOR_ID_RED 1
-+#define LED_COLOR_ID_GREEN 2
-+#define LED_COLOR_ID_BLUE 3
-+#define LED_COLOR_ID_AMBER 4
-+#define LED_COLOR_ID_VIOLET 5
-+#define LED_COLOR_ID_YELLOW 6
-+#define LED_COLOR_ID_IR 7
-+#define LED_COLOR_ID_MAX 8
-+
-+/* Standard LED functions */
-+/* Keyboard LEDs, usually it would be input4::capslock etc. */
-+/* Obsolete equivalent: "shift-key-light" */
-+#define LED_FUNCTION_CAPSLOCK "capslock"
-+#define LED_FUNCTION_SCROLLLOCK "scrolllock"
-+#define LED_FUNCTION_NUMLOCK "numlock"
-+/* Obsolete equivalents: "tpacpi::thinklight" (IBM/Lenovo Thinkpads),
-+ "lp5523:kb{1,2,3,4,5,6}" (Nokia N900) */
-+#define LED_FUNCTION_KBD_BACKLIGHT "kbd_backlight"
-+
-+/* System LEDs, usually found on system body.
-+ platform::mute (etc) is sometimes seen, :mute would be better */
-+#define LED_FUNCTION_POWER "power"
-+#define LED_FUNCTION_DISK "disk"
-+
-+/* Obsolete: "platform:*:charging" (allwinner sun50i) */
-+#define LED_FUNCTION_CHARGING "charging"
-+/* Used RGB notification LEDs common on phones.
-+ Obsolete equivalents: "status-led:{red,green,blue}" (Motorola Droid 4),
-+ "lp5523:{r,g,b}" (Nokia N900) */
-+#define LED_FUNCTION_STATUS "status"
-+
-+#define LED_FUNCTION_MICMUTE "micmute"
-+#define LED_FUNCTION_MUTE "mute"
-+
-+/* Miscelleaus functions. Use functions above if you can. */
-+#define LED_FUNCTION_ACTIVITY "activity"
-+#define LED_FUNCTION_ALARM "alarm"
-+#define LED_FUNCTION_BACKLIGHT "backlight"
-+#define LED_FUNCTION_BLUETOOTH "bluetooth"
-+#define LED_FUNCTION_BOOT "boot"
-+#define LED_FUNCTION_CPU "cpu"
-+#define LED_FUNCTION_DEBUG "debug"
-+#define LED_FUNCTION_DISK_ACTIVITY "disk-activity"
-+#define LED_FUNCTION_DISK_ERR "disk-err"
-+#define LED_FUNCTION_DISK_READ "disk-read"
-+#define LED_FUNCTION_DISK_WRITE "disk-write"
-+#define LED_FUNCTION_FAULT "fault"
-+#define LED_FUNCTION_FLASH "flash"
-+#define LED_FUNCTION_HEARTBEAT "heartbeat"
-+#define LED_FUNCTION_INDICATOR "indicator"
-+#define LED_FUNCTION_LAN "lan"
-+#define LED_FUNCTION_MAIL "mail"
-+#define LED_FUNCTION_MTD "mtd"
-+#define LED_FUNCTION_PANIC "panic"
-+#define LED_FUNCTION_PROGRAMMING "programming"
-+#define LED_FUNCTION_RX "rx"
-+#define LED_FUNCTION_SD "sd"
-+#define LED_FUNCTION_STANDBY "standby"
-+#define LED_FUNCTION_TORCH "torch"
-+#define LED_FUNCTION_TX "tx"
-+#define LED_FUNCTION_USB "usb"
-+#define LED_FUNCTION_WAN "wan"
-+#define LED_FUNCTION_WLAN "wlan"
-+#define LED_FUNCTION_WPS "wps"
-+
-+#endif /* __DT_BINDINGS_LEDS_H */
---
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
index 3feeb1dc5e..29dec4f5e9 100644
--- a/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
+++ b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
@@ -16,7 +16,6 @@ Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
---
configs/qemu-riscv64_smode_defconfig | 2 ++
configs/sifive_fu540_defconfig | 2 ++
- include/configs/sifive-fu540.h | 4 ----
3 files changed, 4 insertions(+), 4 deletions(-)
Index: u-boot/configs/qemu-riscv64_smode_defconfig
@@ -39,16 +38,3 @@ Index: u-boot/configs/sifive_fu540_defconfig
CONFIG_DM_MTD=y
+CONFIG_USE_PREBOOT=y
+CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr};"
-Index: u-boot/include/configs/sifive-fu540.h
-===================================================================
---- u-boot.orig/include/configs/sifive-fu540.h
-+++ u-boot/include/configs/sifive-fu540.h
-@@ -40,8 +40,4 @@
- "ramdisk_addr_r=0x88300000\0" \
- BOOTENV
-
--#define CONFIG_PREBOOT \
-- "setenv fdt_addr ${fdtcontroladdr};" \
-- "fdt addr ${fdtcontroladdr};"
--
- #endif /* __CONFIG_H */
diff --git a/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch b/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch
deleted file mode 100644
index c6f91fa65a..0000000000
--- a/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch
+++ /dev/null
@@ -1,367 +0,0 @@
-From 60381e4add64dddbd07e78248b2b0f819eb2776e Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:36 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-6-pbrobinson@gmail.com/
-Subject: [PATCH 5/5] Add initial support for the Pinebook Pro laptop from
- Pine64.
-
-Specification:
-- Rockchip RK3399
-- 4GB Dual-Channel LPDDR4
-- eMMC socket
-- mSD card slot
-- 128Mbit (16Mb) SPI Flash
-- AP6256 for 11AC WiFi + BT5
-- 14 inch 1920*1080 eDP MiPi display
-- Camera
-- USB 3.0, 2.0 ports
-- Type-C port with alt-mode display (DP 1.2) and 15W charge
-- DC 5V/3A
-- optional PCIe slot for NVMe SSD drive
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi | 43 ++++++++++
- arch/arm/mach-rockchip/rk3399/Kconfig | 8 ++
- board/pine64/pinebook-pro-rk3399/Kconfig | 15 ++++
- board/pine64/pinebook-pro-rk3399/MAINTAINERS | 8 ++
- board/pine64/pinebook-pro-rk3399/Makefile | 1 +
- .../pinebook-pro-rk3399/pinebook-pro-rk3399.c | 76 +++++++++++++++++
- configs/pinebook-pro-rk3399_defconfig | 84 +++++++++++++++++++
- include/configs/pinebook-pro-rk3399.h | 29 +++++++
- 8 files changed, 264 insertions(+)
- create mode 100644 arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
- create mode 100644 board/pine64/pinebook-pro-rk3399/Kconfig
- create mode 100644 board/pine64/pinebook-pro-rk3399/MAINTAINERS
- create mode 100644 board/pine64/pinebook-pro-rk3399/Makefile
- create mode 100644 board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
- create mode 100644 configs/pinebook-pro-rk3399_defconfig
- create mode 100644 include/configs/pinebook-pro-rk3399.h
-
-diff --git a/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi b/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-new file mode 100644
-index 0000000000..1a2e24d3ef
---- /dev/null
-+++ b/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-@@ -0,0 +1,43 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * Copyright (C) 2019 Peter Robinson <pbrobinson at gmail.com>
-+ */
-+
-+#include "rk3399-u-boot.dtsi"
-+#include "rk3399-sdram-lpddr4-100.dtsi"
-+
-+/ {
-+ aliases {
-+ spi0 = &spi1;
-+ };
-+
-+ chosen {
-+ u-boot,spl-boot-order = "same-as-spl", &sdhci, &sdmmc;
-+ };
-+};
-+
-+&i2c0 {
-+ u-boot,dm-pre-reloc;
-+};
-+
-+&rk808 {
-+ u-boot,dm-pre-reloc;
-+};
-+
-+&sdhci {
-+ max-frequency = <25000000>;
-+ u-boot,dm-pre-reloc;
-+};
-+
-+&sdmmc {
-+ max-frequency = <20000000>;
-+ u-boot,dm-pre-reloc;
-+};
-+
-+&spiflash {
-+ u-boot,dm-pre-reloc;
-+};
-+
-+&vdd_log {
-+ regulator-init-microvolt = <950000>;
-+};
-diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig
-index 927bb62a9f..254b9c5b4d 100644
---- a/arch/arm/mach-rockchip/rk3399/Kconfig
-+++ b/arch/arm/mach-rockchip/rk3399/Kconfig
-@@ -19,6 +19,13 @@ config TARGET_EVB_RK3399
- with full function and physical connectors support like Type-C ports,
- USB.0 host ports, LVDS, JTAG, MAC, SD card, HDMI, USB-to-serial...
-
-+config TARGET_PINEBOOK_PRO_RK3399
-+ bool "Pinebook Pro"
-+ help
-+ Pinebook Pro is a laptop based on the Rockchip rk3399 SoC
-+ with 4Gb RAM, onboard eMMC, USB-C, a USB3 and USB2 port,
-+ 1920*1080 screen and all the usual laptop features.
-+
- config TARGET_PUMA_RK3399
- bool "Theobroma Systems RK3399-Q7 (Puma)"
- help
-@@ -144,6 +151,7 @@ endif # BOOTCOUNT_LIMIT
-
- source "board/firefly/roc-pc-rk3399/Kconfig"
- source "board/google/gru/Kconfig"
-+source "board/pine64/pinebook-pro-rk3399/Kconfig"
- source "board/pine64/rockpro64_rk3399/Kconfig"
- source "board/rockchip/evb_rk3399/Kconfig"
- source "board/theobroma-systems/puma_rk3399/Kconfig"
-diff --git a/board/pine64/pinebook-pro-rk3399/Kconfig b/board/pine64/pinebook-pro-rk3399/Kconfig
-new file mode 100644
-index 0000000000..3bb7ca448e
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/Kconfig
-@@ -0,0 +1,15 @@
-+if TARGET_PINEBOOK_PRO_RK3399
-+
-+config SYS_BOARD
-+ default "pinebook-pro-rk3399"
-+
-+config SYS_VENDOR
-+ default "pine64"
-+
-+config SYS_CONFIG_NAME
-+ default "pinebook-pro-rk3399"
-+
-+config BOARD_SPECIFIC_OPTIONS
-+ def_bool y
-+
-+endif
-diff --git a/board/pine64/pinebook-pro-rk3399/MAINTAINERS b/board/pine64/pinebook-pro-rk3399/MAINTAINERS
-new file mode 100644
-index 0000000000..7153eaf2e0
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/MAINTAINERS
-@@ -0,0 +1,8 @@
-+PINEBOOK_PRO
-+M: Peter Robinson <pbrobinson at gmail.com>
-+S: Maintained
-+F: board/pine64/rk3399-pinebook-pro/
-+F: include/configs/rk3399-pinebook-pro.h
-+F: arch/arm/dts/rk3399-pinebook-pro.dts
-+F: arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-+F: configs/pinebook-pro-rk3399_defconfig
-diff --git a/board/pine64/pinebook-pro-rk3399/Makefile b/board/pine64/pinebook-pro-rk3399/Makefile
-new file mode 100644
-index 0000000000..2f692a12a6
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/Makefile
-@@ -0,0 +1 @@
-+obj-y += pinebook-pro-rk3399.o
-diff --git a/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c b/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
-new file mode 100644
-index 0000000000..01421cbac2
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
-@@ -0,0 +1,76 @@
-+/*
-+ * (C) Copyright 2016 Rockchip Electronics Co., Ltd
-+ * (C) Copyright 2020 Peter Robinson <pbrobinson at gmail.com>
-+ *
-+ * SPDX-License-Identifier: GPL-2.0+
-+ */
-+
-+#include <common.h>
-+#include <dm.h>
-+#include <syscon.h>
-+#include <asm/io.h>
-+#include <asm/arch-rockchip/clock.h>
-+#include <asm/arch-rockchip/grf_rk3399.h>
-+#include <asm/arch-rockchip/hardware.h>
-+#include <asm/arch-rockchip/misc.h>
-+#include <power/regulator.h>
-+
-+#define GRF_IO_VSEL_BT565_SHIFT 0
-+#define PMUGRF_CON0_VSEL_SHIFT 8
-+
-+#ifndef CONFIG_SPL_BUILD
-+int board_early_init_f(void)
-+{
-+ struct udevice *regulator;
-+ int ret;
-+
-+ ret = regulator_get_by_platname("vcc5v0_usb", &regulator);
-+ if (ret) {
-+ debug("%s vcc5v0_usb init fail! ret %d\n", __func__, ret);
-+ goto out;
-+ }
-+
-+ ret = regulator_set_enable(regulator, true);
-+ if (ret)
-+ debug("%s vcc5v0-host-en-gpio set fail! ret %d\n", __func__, ret);
-+
-+out:
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_MISC_INIT_R
-+static void setup_iodomain(void)
-+{
-+ struct rk3399_grf_regs *grf =
-+ syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
-+ struct rk3399_pmugrf_regs *pmugrf =
-+ syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
-+
-+ /* BT565 is in 1.8v domain */
-+ rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_BT565_SHIFT);
-+
-+ /* Set GPIO1 1.8v/3.0v source select to PMU1830_VOL */
-+ rk_setreg(&pmugrf->soc_con0, 1 << PMUGRF_CON0_VSEL_SHIFT);
-+}
-+
-+int misc_init_r(void)
-+{
-+ const u32 cpuid_offset = 0x7;
-+ const u32 cpuid_length = 0x10;
-+ u8 cpuid[cpuid_length];
-+ int ret;
-+
-+ setup_iodomain();
-+
-+ ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid);
-+ if (ret)
-+ return ret;
-+
-+ ret = rockchip_cpuid_set(cpuid, cpuid_length);
-+ if (ret)
-+ return ret;
-+
-+ return ret;
-+}
-+#endif
-diff --git a/configs/pinebook-pro-rk3399_defconfig b/configs/pinebook-pro-rk3399_defconfig
-new file mode 100644
-index 0000000000..0e9f0ec250
---- /dev/null
-+++ b/configs/pinebook-pro-rk3399_defconfig
-@@ -0,0 +1,84 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_ROCKCHIP=y
-+CONFIG_SYS_TEXT_BASE=0x00200000
-+CONFIG_ENV_OFFSET=0x3F8000
-+CONFIG_ROCKCHIP_RK3399=y
-+CONFIG_RAM_RK3399_LPDDR4=y
-+CONFIG_NR_DRAM_BANKS=1
-+CONFIG_TARGET_PINEBOOK_PRO_RK3399=y
-+CONFIG_BAUDRATE=1500000
-+CONFIG_DEBUG_UART=y
-+CONFIG_DEBUG_UART_SHIFT=2
-+CONFIG_DEBUG_UART_BASE=0xFF1A0000
-+CONFIG_DEBUG_UART_CLOCK=24000000
-+CONFIG_SPL_SPI_SUPPORT=y
-+CONFIG_SPL_SPI_FLASH_SUPPORT=y
-+CONFIG_SPL_MTD_SUPPORT=y
-+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-pinebook-pro.dtb"
-+CONFIG_MISC_INIT_R=y
-+CONFIG_DISPLAY_BOARDINFO_LATE=y
-+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
-+CONFIG_SPL_STACK_R=y
-+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000
-+CONFIG_TPL=y
-+CONFIG_SPL_OF_CONTROL=y
-+CONFIG_DEFAULT_DEVICE_TREE="rk3399-pinebook-pro"
-+CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
-+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
-+CONFIG_CMD_BOOTZ=y
-+CONFIG_CMD_GPIO=y
-+CONFIG_CMD_GPT=y
-+CONFIG_CMD_I2C=y
-+CONFIG_CMD_MMC=y
-+CONFIG_CMD_MTDPARTS=y
-+CONFIG_CMD_PMIC=y
-+CONFIG_CMD_REGULATOR=y
-+# CONFIG_CMD_SETEXPR is not set
-+CONFIG_CMD_SF=y
-+CONFIG_CMD_TIME=y
-+CONFIG_CMD_USB=y
-+CONFIG_ROCKCHIP_GPIO=y
-+CONFIG_SYS_I2C_ROCKCHIP=y
-+CONFIG_BOOTDELAY=3
-+CONFIG_LED=y
-+CONFIG_LED_GPIO=y
-+CONFIG_MISC=y
-+CONFIG_ROCKCHIP_EFUSE=y
-+CONFIG_MMC_DW=y
-+CONFIG_MMC_DW_ROCKCHIP=y
-+CONFIG_MMC_SDHCI=y
-+CONFIG_MMC_SDHCI_SDMA=y
-+CONFIG_MMC_SDHCI_ROCKCHIP=y
-+CONFIG_ROCKCHIP_SPI=y
-+CONFIG_SF_DEFAULT_SPEED=20000000
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_GIGADEVICE=y
-+CONFIG_SPI_FLASH_WINBOND=y
-+CONFIG_DM_ETH=y
-+CONFIG_PMIC_RK8XX=y
-+CONFIG_DM_PMIC_FAN53555=y
-+CONFIG_REGULATOR_PWM=y
-+CONFIG_REGULATOR_RK8XX=y
-+CONFIG_PWM_ROCKCHIP=y
-+CONFIG_SYSRESET=y
-+CONFIG_USB=y
-+CONFIG_USB_XHCI_HCD=y
-+CONFIG_USB_XHCI_DWC3=y
-+# CONFIG_USB_XHCI_ROCKCHIP is not set
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_GENERIC=y
-+CONFIG_USB_DWC3=y
-+CONFIG_ROCKCHIP_USB2_PHY=y
-+CONFIG_USB_HOST_ETHER=y
-+CONFIG_USB_ETHER_ASIX=y
-+CONFIG_USB_ETHER_RTL8152=y
-+CONFIG_USB_KEYBOARD=y
-+CONFIG_USE_TINY_PRINTF=y
-+CONFIG_SPL_TINY_MEMSET=y
-+CONFIG_ERRNO_STR=y
-+CONFIG_DM_VIDEO=y
-+CONFIG_VIDEO_BPP16=y
-+CONFIG_VIDEO_BPP32=y
-+CONFIG_DISPLAY=y
-+CONFIG_VIDEO_ROCKCHIP=y
-+CONFIG_DISPLAY_ROCKCHIP_EDP=y
-diff --git a/include/configs/pinebook-pro-rk3399.h b/include/configs/pinebook-pro-rk3399.h
-new file mode 100644
-index 0000000000..423d742a79
---- /dev/null
-+++ b/include/configs/pinebook-pro-rk3399.h
-@@ -0,0 +1,29 @@
-+/*
-+ * Copyright (C) 2016 Rockchip Electronics Co., Ltd
-+ * Copyright (C) 2020 Peter Robinson <pbrobinson at gmail.com>
-+ *
-+ * SPDX-License-Identifier: GPL-2.0+
-+ */
-+
-+#ifndef __PINEBOOK_PRO_RK3399_H
-+#define __PINEBOOK_PRO_RK3399_H
-+
-+#define ROCKCHIP_DEVICE_SETTINGS \
-+ "stdin=serial,usbkbd\0" \
-+ "stdout=serial,vidconsole\0" \
-+ "stderr=serial,vidconsole\0"
-+
-+#include <configs/rk3399_common.h>
-+
-+#if defined(CONFIG_ENV_IS_IN_MMC)
-+#define CONFIG_SYS_MMC_ENV_DEV 0
-+#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
-+#define CONFIG_ENV_SECT_SIZE (8 * 1024)
-+#endif
-+
-+#undef CONFIG_SYS_SPI_U_BOOT_OFFS
-+#define CONFIG_SYS_SPI_U_BOOT_OFFS 1024 * 512
-+
-+#define SDRAM_BANK_SIZE (2UL << 30)
-+
-+#endif
---
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch b/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch
deleted file mode 100644
index ca2be8dc22..0000000000
--- a/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From ecc69ec25df07e1ce63d7add6b235b37673ed608 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 19:18:25 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420181825.935797-1-pbrobinson@gmail.com/
-Subject: [PATCH 6/6] drivers: video: rockchip: fix building eDP and LVDS
- drivers
-
-The rk_edp.c and rk_lvds.c files reference rk_setreg which is declared in
-hardware.h so include it so the drivers build. Adjust rk_lvds.c so
-includes are in alphabetical order while updating.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
-Reviewed-by: Anatolij Gustschin <agust@denx.de>
----
- drivers/video/rockchip/rk_edp.c | 1 +
- drivers/video/rockchip/rk_lvds.c | 3 ++-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/video/rockchip/rk_edp.c b/drivers/video/rockchip/rk_edp.c
-index 8703df0ec0..cf84b886e7 100644
---- a/drivers/video/rockchip/rk_edp.c
-+++ b/drivers/video/rockchip/rk_edp.c
-@@ -18,6 +18,7 @@
- #include <asm/arch-rockchip/clock.h>
- #include <asm/arch-rockchip/edp_rk3288.h>
- #include <asm/arch-rockchip/grf_rk3288.h>
-+#include <asm/arch-rockchip/hardware.h>
- #include <dt-bindings/clock/rk3288-cru.h>
-
- #define MAX_CR_LOOP 5
-diff --git a/drivers/video/rockchip/rk_lvds.c b/drivers/video/rockchip/rk_lvds.c
-index cf5c0439b1..79e24baf53 100644
---- a/drivers/video/rockchip/rk_lvds.c
-+++ b/drivers/video/rockchip/rk_lvds.c
-@@ -13,8 +13,9 @@
- #include <asm/gpio.h>
- #include <asm/io.h>
- #include <asm/arch-rockchip/clock.h>
--#include <asm/arch-rockchip/lvds_rk3288.h>
- #include <asm/arch-rockchip/grf_rk3288.h>
-+#include <asm/arch-rockchip/hardware.h>
-+#include <asm/arch-rockchip/lvds_rk3288.h>
- #include <dt-bindings/clock/rk3288-cru.h>
- #include <dt-bindings/video/rk3288.h>
-
---
-2.20.1
-
diff --git a/gnu/packages/patches/ungoogled-chromium-system-nspr.patch b/gnu/packages/patches/ungoogled-chromium-system-nspr.patch
new file mode 100644
index 0000000000..6fbc0a56a7
--- /dev/null
+++ b/gnu/packages/patches/ungoogled-chromium-system-nspr.patch
@@ -0,0 +1,120 @@
+Build with the system nspr library.
+
+Originally based on a Debian patch:
+https://salsa.debian.org/chromium-team/chromium/-/blob/master/debian/patches/system/nspr.patch
+
+--- a/base/time/pr_time_unittest.cc
++++ b/base/time/pr_time_unittest.cc
+@@ -7,7 +7,7 @@
+
+ #include "base/compiler_specific.h"
+ #include "base/stl_util.h"
+-#include "base/third_party/nspr/prtime.h"
++#include <nspr/prtime.h>
+ #include "base/time/time.h"
+ #include "build/build_config.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+--- a/base/time/time.cc
++++ b/base/time/time.cc
+@@ -14,7 +14,7 @@
+ #include "base/macros.h"
+ #include "base/no_destructor.h"
+ #include "base/strings/stringprintf.h"
+-#include "base/third_party/nspr/prtime.h"
++#include <nspr/prtime.h>
+ #include "base/time/time_override.h"
+ #include "build/build_config.h"
+
+--- a/base/BUILD.gn
++++ b/base/BUILD.gn
+@@ -107,6 +107,9 @@ config("base_flags") {
+ "-Wglobal-constructors",
+ ]
+ }
++ ldflags = [
++ "-lnspr4",
++ ]
+ }
+
+ config("base_implementation") {
+@@ -712,8 +715,6 @@ jumbo_component("base") {
+ "third_party/cityhash_v103/src/city_v103.h",
+ "third_party/icu/icu_utf.cc",
+ "third_party/icu/icu_utf.h",
+- "third_party/nspr/prtime.cc",
+- "third_party/nspr/prtime.h",
+ "third_party/superfasthash/superfasthash.c",
+ "thread_annotations.h",
+ "threading/hang_watcher.cc",
+--- a/tools/gn/build/gen.py
++++ b/tools/gn/build/gen.py
+@@ -339,6 +339,9 @@ def WriteGNNinja(path, platform, host, o
+ if not options.no_static_libstdcpp:
+ ldflags.append('-static-libstdc++')
+
++ # Additional system libraries that are used.
++ libs.append('-lnspr4')
++
+ # This is needed by libc++.
+ if not platform.is_mingw():
+ libs.append('-ldl')
+--- a/third_party/blink/renderer/platform/BUILD.gn
++++ b/third_party/blink/renderer/platform/BUILD.gn
+@@ -103,6 +103,9 @@
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ ldflags = [
++ "-lnspr4"
++ ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
+--- a/third_party/crashpad/crashpad/handler/BUILD.gn
++++ b/third_party/crashpad/crashpad/handler/BUILD.gn
+@@ -140,6 +140,9 @@
+ "../third_party/mini_chromium:base",
+ "../tools:tool_support",
+ ]
++ ldflags = [
++ "-lnspr4"
++ ]
+
+ if (crashpad_is_win) {
+ if (crashpad_is_in_chromium || crashpad_is_in_dart) {
+--- a/chrome/common/search/BUILD.gn
++++ b/chrome/common/search/BUILD.gn
+@@ -20,6 +20,9 @@
+ "//chrome/common/themes:autogenerated_theme_util",
+ "//skia",
+ ]
++ ldflags = [
++ "-lnspr4"
++ ]
+ }
+
+ compiled_action("generate_chrome_colors_info") {
+--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+@@ -31,6 +31,9 @@
+ "//net/tools/huffman_trie:huffman_trie_generator_sources",
+ "//url:url",
+ ]
++ ldflags = [
++ "-lnspr4",
++ ]
+ if (is_ios) {
+ libs = [ "UIKit.framework" ]
+ }
+--- a/components/schema_org/BUILD.gn
++++ b/components/schema_org/BUILD.gn
+@@ -33,6 +33,9 @@
+ "//base",
+ "//url",
+ ]
++ ldflags = [
++ "-lnspr4",
++ ]
+ }
+
+ compiled_action("schema_org_name_data") {
diff --git a/gnu/packages/patches/widelands-system-wide_minizip.patch b/gnu/packages/patches/widelands-system-wide_minizip.patch
new file mode 100644
index 0000000000..1fac0d5396
--- /dev/null
+++ b/gnu/packages/patches/widelands-system-wide_minizip.patch
@@ -0,0 +1,153 @@
+Description: use the system-wide minizip instead of the embeeded one if found.
+Forwarded-Upstream: It was provided by upstream: http://bazaar.launchpad.net/~widelands-dev/widelands/b19-debian/revision/8147
+ .
+ Thanks to Fòram na Gàidhlig for the patch.
+
+I just added this line to make its use easier:
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+
+=== modified file 'CMakeLists.txt'
+---
+ CMakeLists.txt | 3 +++
+ Modules/FindMinizip.cmake | 37 +++++++++++++++++++++++++++++++++++++
+ cmake/WlFunctions.cmake | 7 +++++++
+ src/io/CMakeLists.txt | 2 +-
+ src/third_party/CMakeLists.txt | 20 +++++++++++---------
+ src/third_party/minizip/README.txt | 4 ++++
+ 6 files changed, 63 insertions(+), 10 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -43,6 +43,7 @@
+ endif(POLICY CMP0074)
+
+ include("${CMAKE_SOURCE_DIR}/cmake/WlFunctions.cmake")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+
+ option(OPTION_USE_GLBINDING "Use glbinding instead of GLEW" OFF)
+ option(OPTION_GLEW_STATIC "Use static GLEW Library" OFF)
+@@ -105,6 +106,8 @@
+ find_package(SDL2_ttf REQUIRED)
+ find_package(ZLIB REQUIRED)
+ find_package(ICU REQUIRED)
++find_package(Minizip)
++
+ if(OPTION_USE_GLBINDING)
+ find_package(glbinding REQUIRED)
+ else()
+--- /dev/null
++++ b/Modules/FindMinizip.cmake
+@@ -0,0 +1,37 @@
++# - Try to find Minizip
++# Once done this will define
++#
++# MINIZIP_FOUND - system has MINIZIP
++# MINIZIP_INCLUDE_DIR - the MINIZIP include directory
++# MINIZIP_LIBRARY_DIR - where the libraries are
++# MINIZIP_LIBRARY - Link these to use MINIZIP
++#
++
++IF (MINIZIP_INCLUDE_DIR)
++ # Already in cache, be silent
++ SET(MINIZIP_FIND_QUIETLY TRUE)
++ENDIF (MINIZIP_INCLUDE_DIR)
++
++FIND_PATH( MINIZIP_INCLUDE_DIR
++ NAMES zip.h unzip.h ioapi.h
++ PATHS /usr/local/include /usr/include
++ PATH_SUFFIXES minizip/ )
++SET( MINIZIP_NAMES minizip MINIZIP )
++FIND_LIBRARY( MINIZIP_LIBRARY
++ NAMES ${MINIZIP_NAMES}
++ PATHS /usr/lib /usr/local/lib )
++
++GET_FILENAME_COMPONENT( MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} PATH )
++
++IF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++ SET(MINIZIP_FOUND TRUE)
++ SET(MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} )
++ IF (NOT MINIZIP_FIND_QUIETLY)
++ MESSAGE (STATUS "Found Minizip: ${MINIZIP_LIBRARY} ${MINIZIP_INCLUDE_DIR}")
++ ENDIF (NOT MINIZIP_FIND_QUIETLY)
++ELSE (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++ SET( MINIZIP_FOUND FALSE )
++ SET( MINIZIP_LIBRARY_DIR )
++ SET( MINIZIP_EXTRA_DEFINITIONS )
++ENDIF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++
+--- a/cmake/WlFunctions.cmake
++++ b/cmake/WlFunctions.cmake
+@@ -81,6 +81,14 @@
+ if(ARG_USES_ZLIB)
+ wl_include_system_directories(${NAME} ${ZLIB_INCLUDE_DIRS})
+ target_link_libraries(${NAME} ${ZLIB_LIBRARY})
++ if (MINIZIP_FOUND)
++ wl_include_system_directories(${NAME} ${MINIZIP_INCLUDE_DIR})
++ target_link_libraries(${NAME} ${MINIZIP_LIBRARY})
++ target_compile_definitions(${NAME} PUBLIC -DHAVE_SYSTEM_MINIZIP)
++ else(MINIZIP_FOUND)
++ target_link_libraries(${NAME} third_party_minizip)
++ message(FATAL_ERROR "You are using widelands-bundled minizip sources. Please install your distribution's minizip dev library or urge your distribution maintainer to include the minizip library in your package repository. Thank you.")
++ endif(MINIZIP_FOUND)
+ endif()
+
+ # OpenGL and GLEW are one thing for us. If you use the one, you also use the
+--- a/src/third_party/CMakeLists.txt
++++ b/src/third_party/CMakeLists.txt
+@@ -1,12 +1,14 @@
+-wl_library(third_party_minizip
+- THIRD_PARTY
+- SRCS
+- minizip/ioapi.h
+- minizip/unzip.cc
+- minizip/unzip.h
+- minizip/zip.h
+- USES_ZLIB
+-)
++if(NOT MINIZIP_FOUND)
++ wl_library(third_party_minizip
++ THIRD_PARTY
++ SRCS
++ ioapi.h
++ unzip.cc
++ unzip.h
++ zip.h
++ USES_ZLIB
++ )
++endif(NOT MINIZIP_FOUND)
+
+ wl_library(third_party_eris
+ THIRD_PARTY
+--- a/src/io/filesystem/CMakeLists.txt
++++ b/src/io/filesystem/CMakeLists.txt
+@@ -12,6 +12,7 @@
+ zip_exceptions.h
+ zip_filesystem.cc
+ zip_filesystem.h
++ USES_ZLIB
+ DEPENDS
+ base_exceptions
+ base_i18n
+@@ -19,5 +20,4 @@
+ base_macros
+ graphic_text_layout
+ io_stream
+- third_party_minizip
+ )
+--- a/src/io/filesystem/zip_filesystem.h
++++ b/src/io/filesystem/zip_filesystem.h
+@@ -28,8 +28,14 @@
+ #include "io/filesystem/filesystem.h"
+ #include "io/streamread.h"
+ #include "io/streamwrite.h"
++
++#ifndef HAVE_SYSTEM_MINIZIP
+ #include "third_party/minizip/unzip.h"
+ #include "third_party/minizip/zip.h"
++#else
++#include <minizip/unzip.h>
++#include <minizip/zip.h>
++#endif
+
+ class ZipFilesystem : public FileSystem {
+ public:
diff --git a/gnu/packages/patches/x265-arm-flags.patch b/gnu/packages/patches/x265-arm-flags.patch
index f17e26f6f1..342e13270b 100644
--- a/gnu/packages/patches/x265-arm-flags.patch
+++ b/gnu/packages/patches/x265-arm-flags.patch
@@ -1,4 +1,7 @@
-https://sources.debian.org/src/x265/2.9-3/debian/patches/0001-Fix-arm-flags.patch/
+Fix build flags for ARMv7.
+
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/x265/-/blob/master/debian/patches/0001-Fix-arm-flags.patch
From: Sebastian Ramacher <sramacher@debian.org>
Date: Wed, 26 Apr 2017 22:05:06 +0200
@@ -9,28 +12,25 @@ Subject: Fix arm* flags
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
-index 33b6523..25aecbb 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
-@@ -72,7 +72,7 @@ elseif(ARMMATCH GREATER "-1")
+@@ -77,7 +77,7 @@ elseif(ARMMATCH GREATER "-1")
+ add_definitions(-DX265_ARCH_ARM=1 -DX265_ARCH_ARM64=1 -DHAVE_ARMV6=0)
+ else()
+ message(STATUS "Detected ARM target processor")
+- add_definitions(-DX265_ARCH_ARM=1 -DX265_ARCH_ARM64=0 -DHAVE_ARMV6=1)
++ add_definitions(-DX265_ARCH_ARM=1)
endif()
- message(STATUS "Detected ARM target processor")
- set(ARM 1)
-- add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
-+ # add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
else()
message(STATUS "CMAKE_SYSTEM_PROCESSOR value `${CMAKE_SYSTEM_PROCESSOR}` is unknown")
- message(STATUS "Please add this value near ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}")
-@@ -230,12 +230,8 @@ if(GCC)
- if(ARM AND CROSS_COMPILE_ARM)
- set(ARM_ARGS -march=armv6 -mfloat-abi=soft -mfpu=vfp -marm -fPIC)
- elseif(ARM)
-- find_package(Neon)
- if(CPU_HAS_NEON)
-- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
- add_definitions(-DHAVE_NEON)
-- else()
-- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
+@@ -252,10 +252,7 @@ if(GCC)
+ else()
+ find_package(Neon)
+ if(CPU_HAS_NEON)
+- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
+ add_definitions(-DHAVE_NEON)
+- else()
+- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
+ endif()
endif()
endif()
- add_definitions(${ARM_ARGS})
diff --git a/gnu/packages/patches/xpra-4.0.1-systemd-run.patch b/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
new file mode 100644
index 0000000000..1ea11830a5
--- /dev/null
+++ b/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
@@ -0,0 +1,34 @@
+Disable systemd-run if the command is not found.
+
+diff -Naur xpra-4.0.1/xpra/scripts/main.py xpra-4.0.1.patched/xpra/scripts/main.py
+--- xpra-4.0.1/xpra/scripts/main.py 2020-05-17 18:12:15.000000000 +0200
++++ xpra-4.0.1.patched/xpra/scripts/main.py 2020-06-01 12:12:18.500257507 +0200
+@@ -312,16 +312,18 @@
+ if not is_systemd_pid1():
+ return False
+ #test it:
+- cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
+- proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
+- r = pollwait(proc, timeout=1)
+- if r is None:
+- try:
+- proc.terminate()
+- except Exception:
+- pass
+- return r==0
+-
++ try:
++ cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
++ proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
++ r = pollwait(proc, timeout=1)
++ if r is None:
++ try:
++ proc.terminate()
++ except Exception:
++ pass
++ return r==0
++ except FileNotFoundError:
++ return False
+
+ def run_mode(script_file, error_cb, options, args, mode, defaults):
+ #configure default logging handler: