diff --git a/gnu/local.mk b/gnu/local.mk
index 07e3497d10..2049964ff7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1013,9 +1013,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
   %D%/packages/patches/dynaconf-unvendor-deps.patch		\
-  %D%/packages/patches/ecl-16-format-directive-limit.patch	\
-  %D%/packages/patches/ecl-16-ignore-stderr-write-error.patch	\
-  %D%/packages/patches/ecl-16-libffi.patch			\
   %D%/packages/patches/efibootmgr-remove-extra-decl.patch	\
   %D%/packages/patches/efivar-211.patch			\
   %D%/packages/patches/eigen-remove-openmp-error-counting.patch	\
diff --git a/gnu/packages/patches/ecl-16-format-directive-limit.patch b/gnu/packages/patches/ecl-16-format-directive-limit.patch
deleted file mode 100644
index 237db92722..0000000000
--- a/gnu/packages/patches/ecl-16-format-directive-limit.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-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
deleted file mode 100644
index 42d213c0e9..0000000000
--- a/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-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
deleted file mode 100644
index fc06a07606..0000000000
--- a/gnu/packages/patches/ecl-16-libffi.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-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/sagemath.scm b/gnu/packages/sagemath.scm
index 7f76f8912b..75720f31a5 100644
--- a/gnu/packages/sagemath.scm
+++ b/gnu/packages/sagemath.scm
@@ -174,27 +174,6 @@ (define-public libhomfly
     (license license:public-domain)
     (home-page "https://github.com/miguelmarco/libhomfly")))
 
-;; Sage 9.1 doesn't build with ECL 20.  This won't be necessary once 9.2 is
-;; released.  See https://trac.sagemath.org/ticket/22191
-(define-public ecl-16
-  (package
-    (inherit ecl)
-    (version "16.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://common-lisp.net/project/ecl/static/files/release/ecl"
-             "-" version ".tgz"))
-       (sha256
-        (base32 "0m0j24w5d5a9dwwqyrg0d35c0nys16ijb4r0nyk87yp82v38b9bn"))
-       (patches (search-patches
-                  "ecl-16-libffi.patch"
-                  "ecl-16-ignore-stderr-write-error.patch"
-                  "ecl-16-format-directive-limit.patch"))))
-    ;; Current ECL uses LGPL 2.1+
-    (license license:lgpl2.0+)))
-
 (define-public pynac
   (package
     (name "pynac")
