diff --git a/gnu/local.mk b/gnu/local.mk
index 725093fb09..70d2e99481 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -941,7 +941,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ath9k-htc-firmware-binutils.patch	\
   %D%/packages/patches/ath9k-htc-firmware-gcc.patch		\
   %D%/packages/patches/ath9k-htc-firmware-gcc-compat.patch	\
-  %D%/packages/patches/ath9k-htc-firmware-objcopy.patch		\
   %D%/packages/patches/atlas-gfortran-compat.patch		\
   %D%/packages/patches/audacity-ffmpeg-fallback.patch	\
   %D%/packages/patches/audiofile-fix-datatypes-in-tests.patch	\
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index ad687d1de6..47d4c08b0d 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -37,6 +37,7 @@ (define-module (gnu packages firmware)
   #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix build-system copy)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
@@ -90,9 +91,9 @@ (define-module (gnu packages firmware)
   #:export (make-ergodox-firmware
             make-qmk-firmware))
 
-(define-public ath9k-htc-firmware
+(define-public ath9k-htc-ar7010-firmware
   (package
-    (name "ath9k-htc-firmware")
+    (name "ath9k-htc-ar7010-firmware")
     (version "1.4.0")
     (source (origin
               (method git-fetch)
@@ -106,51 +107,45 @@ (define-public ath9k-htc-firmware
               (sha256
                (base32
                 "16jbj8avg5jkgvq5lxm0hdxxn4c3zn7fx8b4nxllvr024apk9w23"))
-              (file-name (git-file-name name version))
-              (patches (search-patches "ath9k-htc-firmware-objcopy.patch"
-                                       "ath9k-htc-firmware-gcc-compat.patch"))))
-    (build-system gnu-build-system)
+              (file-name (git-file-name "open-ath9k-htc-firmware" version))
+              (patches (search-patches "ath9k-htc-firmware-gcc-compat.patch"))))
+    (build-system cmake-build-system)
     (arguments
-     '(#:target #f                          ; Package produces firmware.
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
-           (lambda* (#:key inputs native-inputs #:allow-other-keys)
-             (chdir "target_firmware")
-
-             ;; 'configure' is a simple script that runs 'cmake' with
-             ;; the right flags.
-             (substitute* "configure"
-               (("^TARGET.*$") "TARGET=xtensa-ath9k-elf\n")
-               (("^TOOLCHAIN=.*$")
-                (string-append "TOOLCHAIN="
-                               (assoc-ref (or native-inputs inputs) "cross-gcc")
-                               "\n")))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (fw-dir (string-append out "/lib/firmware")))
-               (for-each (lambda (file)
-                           (install-file file fw-dir))
-                         (find-files "." "\\.fw$"))
-              #t))))
-       #:tests? #f))
-
-    ;; The firmware is cross-compiled using a "bare bones" compiler (no libc.)
-    ;; Use our own tool chain for that.
-    (native-inputs `(("cross-gcc" ,(cross-gcc "xtensa-ath9k-elf"))
-                     ("cross-binutils" ,(cross-binutils "xtensa-ath9k-elf"))
-                     ("cmake" ,cmake-minimal)
-                     ("perl" ,perl)))
+     (list #:target "xtensa-ath9k-elf"
+           #:tests? #f
+           #:configure-flags #~'("-DTARGET_MAGPIE=ON")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'change-directory
+                 (lambda _
+                   (chdir "target_firmware")))
+               (replace 'install
+                 (lambda _
+                   (let ((fw-dir (string-append #$output "/lib/firmware")))
+                     (for-each (lambda (file)
+                                 (install-file file fw-dir))
+                               (find-files "." "\\.fw$"))))))))
+    (native-inputs (list perl))
     (home-page "https://wireless.wiki.kernel.org/en/users/Drivers/ath9k_htc")
-    (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
+    (synopsis "Firmware for the Atheros AR7010 USB 802.11n NICs")
     (description
-     "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
-802.11n NICs (aka Wi-Fi USB dongles).  It is used by the ath9k driver of
-Linux-libre.")
+     "This is the firmware for the Qualcomm Atheros AR7010 802.11n USB NICs
+(aka Wi-Fi USB dongle).  It is used by the ath9k driver of Linux-libre.")
     (license (license:non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
 
+(define-public ath9k-htc-ar9271-firmware
+  (package
+    (inherit ath9k-htc-ar7010-firmware)
+    (name "ath9k-htc-ar9271-firmware")
+    (arguments
+     (substitute-keyword-arguments
+       (package-arguments ath9k-htc-ar7010-firmware)
+       ((#:configure-flags flags) #~'("-DTARGET_K2=ON"))))
+    (synopsis "Firmware for the Atheros AR9271 USB 802.11n NICs")
+    (description
+     "This is the firmware for the Qualcomm Atheros AR9271 802.11n USB NICs
+(aka Wi-Fi USB dongle).  It is used by the ath9k driver of Linux-libre.")))
+
 (define-public b43-tools
   (let ((commit "27892ef741e7f1d08cb939744f8b8f5dac7b04ae")
         (revision "1"))
diff --git a/gnu/packages/patches/ath9k-htc-firmware-objcopy.patch b/gnu/packages/patches/ath9k-htc-firmware-objcopy.patch
deleted file mode 100644
index 13c3ca1413..0000000000
--- a/gnu/packages/patches/ath9k-htc-firmware-objcopy.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-The firmware is cross-compiled, but the build system ends up using
-'objcopy' instead of '$TARGET-objcopy' by default.  Force it to
-use the right one.
-
---- source/target_firmware/configure	2014-10-28 20:57:26.834436561 +0100
-+++ source/target_firmware/configure	2014-10-28 20:57:29.666436530 +0100
-@@ -11,6 +11,7 @@ mkdir -p build
- cat > "$TOOLCHAIN_FILE" <<EOF
- INCLUDE(CMakeForceCompiler)
- 
-+SET(CMAKE_OBJCOPY ${TARGET}-objcopy)
- SET(CMAKE_SYSTEM_PROCESSOR xtensa)
- SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/$TARGET)
- SET(CMAKE_STRIP :)
diff --git a/gnu/system.scm b/gnu/system.scm
index aede35775e..927abc642c 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -876,7 +876,8 @@ (define* (operating-system-with-provenance os
 
 (define %base-firmware
   ;; Firmware usable by default.
-  (list ath9k-htc-firmware
+  (list ath9k-htc-ar7010-firmware
+        ath9k-htc-ar9271-firmware
         openfwwf-firmware))
 
 (define %base-packages-artwork
