{"id":2183221,"url":"http://patchwork.ozlabs.org/api/patches/2183221/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260112192035.10427-11-ebiggers@kernel.org/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/","list_archive_url":"https://lore.kernel.org/linuxppc-dev/","list_archive_url_format":"https://lore.kernel.org/linuxppc-dev/{}/","commit_url_format":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"},"msgid":"<20260112192035.10427-11-ebiggers@kernel.org>","list_archive_url":"https://lore.kernel.org/linuxppc-dev/20260112192035.10427-11-ebiggers@kernel.org/","date":"2026-01-12T19:20:08","name":"[v2,10/35] lib/crypto: arm/aes: Migrate optimized code into library","commit_ref":null,"pull_url":null,"state":"handled-elsewhere","archived":false,"hash":"027d94a1f92380c50800f67c5dd4c7d47cedab10","submitter":{"id":74690,"url":"http://patchwork.ozlabs.org/api/people/74690/?format=json","name":"Eric Biggers","email":"ebiggers@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260112192035.10427-11-ebiggers@kernel.org/mbox/","series":[{"id":488089,"url":"http://patchwork.ozlabs.org/api/series/488089/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=488089","date":"2026-01-12T19:19:58","name":"AES library improvements","version":2,"mbox":"http://patchwork.ozlabs.org/series/488089/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2183221/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2183221/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linuxppc-dev+bounces-15580-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=T6XOwGdA;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-15580-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=172.234.252.31","lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=T6XOwGdA;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=ebiggers@kernel.org; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dqj722kxyz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 13 Jan 2026 06:26:54 +1100 (AEDT)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4dqj3b5Y7Hz3bxM;\n\tTue, 13 Jan 2026 06:23:55 +1100 (AEDT)","from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4dqj3Z6wNtz2xKx\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 13 Jan 2026 06:23:54 +1100 (AEDT)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id 66BFD44397;\n\tMon, 12 Jan 2026 19:23:23 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id D96D0C2BCB3;\n\tMon, 12 Jan 2026 19:23:22 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1768245835;\n\tcv=none;\n b=O4hJG9lQdmAGhDCHkQUsddgAHZfJcNmKiHYwQQrDWuqMtIioZxnX2ZW6KaaeJSr5b2CSamXUv+q0Y71XhpuEk7/9BUtw6/YxUqjLMVN76iAJrQ4tY45Qupr192Ksup5TYg8MbNLk/v4kv4xWnFy88OAU1os1DQIl2bFe5jqNIogHCBUBheJktdaKSAc1H2j4+7RtnDK5H3qhhsEAxxO7QSPyGvcENg+qeOerPJC5/DKzLpIycPJPmvYhKnFrZ31uPa9y3Bl3Mh2brR8fc3f3KfQha4HmnQZlTC5fx+6t9LiX3swKwwViUy8hmsU/kXmD7RFfaq9Ug1uCciwenurk/A==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1768245835; c=relaxed/relaxed;\n\tbh=y/Th55q5dVBMST0fTWaQzI7Ofl3ngmKKCydJxKi9Iyw=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=mjDnNB0agXiSnid3kkzM3SfOH+ItuzJRSMVFka38rTYpqmerem3FOaVgeyA0pix+KBGDZV1lYiPPyy8VViNV95ndlvOqjgXIGZdgd5djLbxshnPjEN7+eJOgsQCX4M8YmS9e+058IkLoVER3eMu1QhH7TrFXpw/cis+YTt7Y4X4DVg+Hi3fDaLZl/pmwJF1RAVeqvkiIywls+rG+QmW1Mh8ttd3bmjXhlpkj02X56oSeWcz6RVGYAh2Q69K9hcAH9Bosw8XzQYQuxxW8GYMTOcIWwAgf2rc76rZ+xmmziThgXu8H1u9o1UD7jndJ2oTPN+qMmxp6BGSIBa9fsQNP3Q==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=T6XOwGdA; dkim-atps=neutral;\n spf=pass (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=ebiggers@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1768245803;\n\tbh=FwXk6qzmED9IHMLKZVvaNSrqXpAJP04gsJRrHuxtscM=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=T6XOwGdAbWoGHdHy+Y4BgnWKCcYrOmC+y4OkpFDwJHFGKhq9i+qfmsRVaKApbVbcW\n\t rh3VKOapM+pB17ZRCYk4BN2kCtxJxlNpJ9VtBnCfWPS0vR9yQKcyfopOxw04RqG0I2\n\t TfLQVKOHklQ93owDHFohw/vnbBgF33b6vrbGJ1C0Akz4/0w9p6HM1Wqk3bMsUw/2e/\n\t fzF4o3OGHNySbleeGl558Y8e52GQFBkgNHg3i+fEHkhogebMieLuokzcV511aMIaF7\n\t uwKXYMs9UCM+PmrgG1tZh4/uvbqo+/MIPGA/p5mYTpMIDxEi49aztNEkC+cz+WDs8c\n\t poqbqDIfaPnSQ==","From":"Eric Biggers <ebiggers@kernel.org>","To":"linux-crypto@vger.kernel.org","Cc":"linux-kernel@vger.kernel.org,\n\tArd Biesheuvel <ardb@kernel.org>,\n\t\"Jason A . Donenfeld\" <Jason@zx2c4.com>,\n\tHerbert Xu <herbert@gondor.apana.org.au>,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tlinux-riscv@lists.infradead.org,\n\tlinux-s390@vger.kernel.org,\n\tsparclinux@vger.kernel.org,\n\tx86@kernel.org,\n\tHolger Dengler <dengler@linux.ibm.com>,\n\tHarald Freudenberger <freude@linux.ibm.com>,\n\tEric Biggers <ebiggers@kernel.org>","Subject":"[PATCH v2 10/35] lib/crypto: arm/aes: Migrate optimized code into\n library","Date":"Mon, 12 Jan 2026 11:20:08 -0800","Message-ID":"<20260112192035.10427-11-ebiggers@kernel.org>","X-Mailer":"git-send-email 2.52.0","In-Reply-To":"<20260112192035.10427-1-ebiggers@kernel.org>","References":"<20260112192035.10427-1-ebiggers@kernel.org>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-0.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"},"content":"Move the ARM optimized single-block AES en/decryption code into\nlib/crypto/, wire it up to the AES library API, and remove the\nsuperseded \"aes-arm\" crypto_cipher algorithm.\n\nThe result is that both the AES library and crypto_cipher APIs are now\noptimized for ARM, whereas previously only crypto_cipher was (and the\noptimizations weren't enabled by default, which this fixes as well).\n\nAcked-by: Ard Biesheuvel <ardb@kernel.org>\nSigned-off-by: Eric Biggers <ebiggers@kernel.org>\n---\n arch/arm/configs/milbeaut_m10v_defconfig      |  1 -\n arch/arm/configs/multi_v7_defconfig           |  2 +-\n arch/arm/configs/omap2plus_defconfig          |  2 +-\n arch/arm/configs/pxa_defconfig                |  2 +-\n arch/arm/crypto/Kconfig                       | 18 -----\n arch/arm/crypto/Makefile                      |  2 -\n arch/arm/crypto/aes-cipher-glue.c             | 77 -------------------\n arch/arm/crypto/aes-cipher.h                  | 13 ----\n lib/crypto/Kconfig                            |  1 +\n lib/crypto/Makefile                           |  3 +\n .../crypto/arm}/aes-cipher-core.S             |  0\n lib/crypto/arm/aes.h                          | 56 ++++++++++++++\n 12 files changed, 63 insertions(+), 114 deletions(-)\n delete mode 100644 arch/arm/crypto/aes-cipher-glue.c\n delete mode 100644 arch/arm/crypto/aes-cipher.h\n rename {arch/arm/crypto => lib/crypto/arm}/aes-cipher-core.S (100%)\n create mode 100644 lib/crypto/arm/aes.h","diff":"diff --git a/arch/arm/configs/milbeaut_m10v_defconfig b/arch/arm/configs/milbeaut_m10v_defconfig\nindex a2995eb390c6..77b69d672d40 100644\n--- a/arch/arm/configs/milbeaut_m10v_defconfig\n+++ b/arch/arm/configs/milbeaut_m10v_defconfig\n@@ -96,11 +96,10 @@ CONFIG_KEYS=y\n CONFIG_CRYPTO_SELFTESTS=y\n # CONFIG_CRYPTO_ECHAINIV is not set\n CONFIG_CRYPTO_AES=y\n CONFIG_CRYPTO_SEQIV=m\n CONFIG_CRYPTO_GHASH_ARM_CE=m\n-CONFIG_CRYPTO_AES_ARM=m\n CONFIG_CRYPTO_AES_ARM_BS=m\n CONFIG_CRYPTO_AES_ARM_CE=m\n # CONFIG_CRYPTO_HW is not set\n CONFIG_DMA_CMA=y\n CONFIG_CMA_SIZE_MBYTES=64\ndiff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig\nindex 7f1fa9dd88c9..b6d3e20926bb 100644\n--- a/arch/arm/configs/multi_v7_defconfig\n+++ b/arch/arm/configs/multi_v7_defconfig\n@@ -1284,11 +1284,11 @@ CONFIG_CRYPTO_USER=m\n CONFIG_CRYPTO_USER_API_HASH=m\n CONFIG_CRYPTO_USER_API_SKCIPHER=m\n CONFIG_CRYPTO_USER_API_RNG=m\n CONFIG_CRYPTO_USER_API_AEAD=m\n CONFIG_CRYPTO_GHASH_ARM_CE=m\n-CONFIG_CRYPTO_AES_ARM=m\n+CONFIG_CRYPTO_AES=m\n CONFIG_CRYPTO_AES_ARM_BS=m\n CONFIG_CRYPTO_AES_ARM_CE=m\n CONFIG_CRYPTO_DEV_SUN4I_SS=m\n CONFIG_CRYPTO_DEV_FSL_CAAM=m\n CONFIG_CRYPTO_DEV_EXYNOS_RNG=m\ndiff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig\nindex 4e53c331cd84..0464f6552169 100644\n--- a/arch/arm/configs/omap2plus_defconfig\n+++ b/arch/arm/configs/omap2plus_defconfig\n@@ -704,11 +704,11 @@ CONFIG_ROOT_NFS=y\n CONFIG_NLS_CODEPAGE_437=y\n CONFIG_NLS_ISO8859_1=y\n CONFIG_SECURITY=y\n CONFIG_CRYPTO_MICHAEL_MIC=y\n CONFIG_CRYPTO_GHASH_ARM_CE=m\n-CONFIG_CRYPTO_AES_ARM=m\n+CONFIG_CRYPTO_AES=m\n CONFIG_CRYPTO_AES_ARM_BS=m\n CONFIG_CRYPTO_DEV_OMAP=m\n CONFIG_CRYPTO_DEV_OMAP_SHAM=m\n CONFIG_CRYPTO_DEV_OMAP_AES=m\n CONFIG_CRYPTO_DEV_OMAP_DES=m\ndiff --git a/arch/arm/configs/pxa_defconfig b/arch/arm/configs/pxa_defconfig\nindex 3ea189f1f42f..eacd08fd87ad 100644\n--- a/arch/arm/configs/pxa_defconfig\n+++ b/arch/arm/configs/pxa_defconfig\n@@ -655,11 +655,11 @@ CONFIG_CRYPTO_TGR192=m\n CONFIG_CRYPTO_WP512=m\n CONFIG_CRYPTO_ANUBIS=m\n CONFIG_CRYPTO_XCBC=m\n CONFIG_CRYPTO_DEFLATE=y\n CONFIG_CRYPTO_LZO=y\n-CONFIG_CRYPTO_AES_ARM=m\n+CONFIG_CRYPTO_AES=m\n CONFIG_FONTS=y\n CONFIG_FONT_8x8=y\n CONFIG_FONT_8x16=y\n CONFIG_FONT_6x11=y\n CONFIG_FONT_MINI_4x6=y\ndiff --git a/arch/arm/crypto/Kconfig b/arch/arm/crypto/Kconfig\nindex 167a648a9def..b9c28c818b7c 100644\n--- a/arch/arm/crypto/Kconfig\n+++ b/arch/arm/crypto/Kconfig\n@@ -21,28 +21,10 @@ config CRYPTO_GHASH_ARM_CE\n \t  Use an implementation of GHASH (used by the GCM AEAD chaining mode)\n \t  that uses the 64x64 to 128 bit polynomial multiplication (vmull.p64)\n \t  that is part of the ARMv8 Crypto Extensions, or a slower variant that\n \t  uses the vmull.p8 instruction that is part of the basic NEON ISA.\n \n-config CRYPTO_AES_ARM\n-\ttristate \"Ciphers: AES\"\n-\tselect CRYPTO_ALGAPI\n-\tselect CRYPTO_AES\n-\thelp\n-\t  Block ciphers: AES cipher algorithms (FIPS-197)\n-\n-\t  Architecture: arm\n-\n-\t  On ARM processors without the Crypto Extensions, this is the\n-\t  fastest AES implementation for single blocks.  For multiple\n-\t  blocks, the NEON bit-sliced implementation is usually faster.\n-\n-\t  This implementation may be vulnerable to cache timing attacks,\n-\t  since it uses lookup tables.  However, as countermeasures it\n-\t  disables IRQs and preloads the tables; it is hoped this makes\n-\t  such attacks very difficult.\n-\n config CRYPTO_AES_ARM_BS\n \ttristate \"Ciphers: AES, modes: ECB/CBC/CTR/XTS (bit-sliced NEON)\"\n \tdepends on KERNEL_MODE_NEON\n \tselect CRYPTO_SKCIPHER\n \tselect CRYPTO_LIB_AES\ndiff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile\nindex d6683e9d4992..e73099e120b3 100644\n--- a/arch/arm/crypto/Makefile\n+++ b/arch/arm/crypto/Makefile\n@@ -1,15 +1,13 @@\n # SPDX-License-Identifier: GPL-2.0\n #\n # Arch-specific CryptoAPI modules.\n #\n \n-obj-$(CONFIG_CRYPTO_AES_ARM) += aes-arm.o\n obj-$(CONFIG_CRYPTO_AES_ARM_BS) += aes-arm-bs.o\n \n obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o\n obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o\n \n-aes-arm-y\t:= aes-cipher-core.o aes-cipher-glue.o\n aes-arm-bs-y\t:= aes-neonbs-core.o aes-neonbs-glue.o\n aes-arm-ce-y\t:= aes-ce-core.o aes-ce-glue.o\n ghash-arm-ce-y\t:= ghash-ce-core.o ghash-ce-glue.o\ndiff --git a/arch/arm/crypto/aes-cipher-glue.c b/arch/arm/crypto/aes-cipher-glue.c\ndeleted file mode 100644\nindex f302db808cd3..000000000000\n--- a/arch/arm/crypto/aes-cipher-glue.c\n+++ /dev/null\n@@ -1,77 +0,0 @@\n-// SPDX-License-Identifier: GPL-2.0-only\n-/*\n- * Scalar AES core transform\n- *\n- * Copyright (C) 2017 Linaro Ltd.\n- * Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>\n- */\n-\n-#include <crypto/aes.h>\n-#include <crypto/algapi.h>\n-#include <linux/module.h>\n-#include \"aes-cipher.h\"\n-\n-EXPORT_SYMBOL_GPL(__aes_arm_encrypt);\n-EXPORT_SYMBOL_GPL(__aes_arm_decrypt);\n-\n-static int aes_arm_setkey(struct crypto_tfm *tfm, const u8 *in_key,\n-\t\t\t  unsigned int key_len)\n-{\n-\tstruct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);\n-\n-\treturn aes_expandkey(ctx, in_key, key_len);\n-}\n-\n-static void aes_arm_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)\n-{\n-\tstruct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tint rounds = 6 + ctx->key_length / 4;\n-\n-\t__aes_arm_encrypt(ctx->key_enc, rounds, in, out);\n-}\n-\n-static void aes_arm_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)\n-{\n-\tstruct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tint rounds = 6 + ctx->key_length / 4;\n-\n-\t__aes_arm_decrypt(ctx->key_dec, rounds, in, out);\n-}\n-\n-static struct crypto_alg aes_alg = {\n-\t.cra_name\t\t\t= \"aes\",\n-\t.cra_driver_name\t\t= \"aes-arm\",\n-\t.cra_priority\t\t\t= 200,\n-\t.cra_flags\t\t\t= CRYPTO_ALG_TYPE_CIPHER,\n-\t.cra_blocksize\t\t\t= AES_BLOCK_SIZE,\n-\t.cra_ctxsize\t\t\t= sizeof(struct crypto_aes_ctx),\n-\t.cra_module\t\t\t= THIS_MODULE,\n-\n-\t.cra_cipher.cia_min_keysize\t= AES_MIN_KEY_SIZE,\n-\t.cra_cipher.cia_max_keysize\t= AES_MAX_KEY_SIZE,\n-\t.cra_cipher.cia_setkey\t\t= aes_arm_setkey,\n-\t.cra_cipher.cia_encrypt\t\t= aes_arm_encrypt,\n-\t.cra_cipher.cia_decrypt\t\t= aes_arm_decrypt,\n-\n-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS\n-\t.cra_alignmask\t\t\t= 3,\n-#endif\n-};\n-\n-static int __init aes_init(void)\n-{\n-\treturn crypto_register_alg(&aes_alg);\n-}\n-\n-static void __exit aes_fini(void)\n-{\n-\tcrypto_unregister_alg(&aes_alg);\n-}\n-\n-module_init(aes_init);\n-module_exit(aes_fini);\n-\n-MODULE_DESCRIPTION(\"Scalar AES cipher for ARM\");\n-MODULE_AUTHOR(\"Ard Biesheuvel <ard.biesheuvel@linaro.org>\");\n-MODULE_LICENSE(\"GPL v2\");\n-MODULE_ALIAS_CRYPTO(\"aes\");\ndiff --git a/arch/arm/crypto/aes-cipher.h b/arch/arm/crypto/aes-cipher.h\ndeleted file mode 100644\nindex d5db2b87eb69..000000000000\n--- a/arch/arm/crypto/aes-cipher.h\n+++ /dev/null\n@@ -1,13 +0,0 @@\n-/* SPDX-License-Identifier: GPL-2.0-only */\n-#ifndef ARM_CRYPTO_AES_CIPHER_H\n-#define ARM_CRYPTO_AES_CIPHER_H\n-\n-#include <linux/linkage.h>\n-#include <linux/types.h>\n-\n-asmlinkage void __aes_arm_encrypt(const u32 rk[], int rounds,\n-\t\t\t\t  const u8 *in, u8 *out);\n-asmlinkage void __aes_arm_decrypt(const u32 rk[], int rounds,\n-\t\t\t\t  const u8 *in, u8 *out);\n-\n-#endif /* ARM_CRYPTO_AES_CIPHER_H */\ndiff --git a/lib/crypto/Kconfig b/lib/crypto/Kconfig\nindex 4efad77daa24..60420b421e04 100644\n--- a/lib/crypto/Kconfig\n+++ b/lib/crypto/Kconfig\n@@ -12,10 +12,11 @@ config CRYPTO_LIB_AES\n \ttristate\n \n config CRYPTO_LIB_AES_ARCH\n \tbool\n \tdepends on CRYPTO_LIB_AES && !UML && !KMSAN\n+\tdefault y if ARM\n \n config CRYPTO_LIB_AESCFB\n \ttristate\n \tselect CRYPTO_LIB_AES\n \tselect CRYPTO_LIB_UTILS\ndiff --git a/lib/crypto/Makefile b/lib/crypto/Makefile\nindex 01193b3f47ba..2f6b0f59eb1b 100644\n--- a/lib/crypto/Makefile\n+++ b/lib/crypto/Makefile\n@@ -19,10 +19,13 @@ libcryptoutils-y\t\t\t\t:= memneq.o utils.o\n \n obj-$(CONFIG_CRYPTO_LIB_AES) += libaes.o\n libaes-y := aes.o\n ifeq ($(CONFIG_CRYPTO_LIB_AES_ARCH),y)\n CFLAGS_aes.o += -I$(src)/$(SRCARCH)\n+\n+libaes-$(CONFIG_ARM) += arm/aes-cipher-core.o\n+\n endif # CONFIG_CRYPTO_LIB_AES_ARCH\n \n ################################################################################\n \n obj-$(CONFIG_CRYPTO_LIB_AESCFB)\t\t\t+= libaescfb.o\ndiff --git a/arch/arm/crypto/aes-cipher-core.S b/lib/crypto/arm/aes-cipher-core.S\nsimilarity index 100%\nrename from arch/arm/crypto/aes-cipher-core.S\nrename to lib/crypto/arm/aes-cipher-core.S\ndiff --git a/lib/crypto/arm/aes.h b/lib/crypto/arm/aes.h\nnew file mode 100644\nindex 000000000000..1dd7dfa657bb\n--- /dev/null\n+++ b/lib/crypto/arm/aes.h\n@@ -0,0 +1,56 @@\n+/* SPDX-License-Identifier: GPL-2.0-only */\n+/*\n+ * AES block cipher, optimized for ARM\n+ *\n+ * Copyright (C) 2017 Linaro Ltd.\n+ * Copyright 2026 Google LLC\n+ */\n+\n+asmlinkage void __aes_arm_encrypt(const u32 rk[], int rounds,\n+\t\t\t\t  const u8 in[AES_BLOCK_SIZE],\n+\t\t\t\t  u8 out[AES_BLOCK_SIZE]);\n+asmlinkage void __aes_arm_decrypt(const u32 inv_rk[], int rounds,\n+\t\t\t\t  const u8 in[AES_BLOCK_SIZE],\n+\t\t\t\t  u8 out[AES_BLOCK_SIZE]);\n+\n+static void aes_preparekey_arch(union aes_enckey_arch *k,\n+\t\t\t\tunion aes_invkey_arch *inv_k,\n+\t\t\t\tconst u8 *in_key, int key_len, int nrounds)\n+{\n+\taes_expandkey_generic(k->rndkeys, inv_k ? inv_k->inv_rndkeys : NULL,\n+\t\t\t      in_key, key_len);\n+}\n+\n+static void aes_encrypt_arch(const struct aes_enckey *key,\n+\t\t\t     u8 out[AES_BLOCK_SIZE],\n+\t\t\t     const u8 in[AES_BLOCK_SIZE])\n+{\n+\tif (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) &&\n+\t    !IS_ALIGNED((uintptr_t)out | (uintptr_t)in, 4)) {\n+\t\tu8 bounce_buf[AES_BLOCK_SIZE] __aligned(4);\n+\n+\t\tmemcpy(bounce_buf, in, AES_BLOCK_SIZE);\n+\t\t__aes_arm_encrypt(key->k.rndkeys, key->nrounds, bounce_buf,\n+\t\t\t\t  bounce_buf);\n+\t\tmemcpy(out, bounce_buf, AES_BLOCK_SIZE);\n+\t\treturn;\n+\t}\n+\t__aes_arm_encrypt(key->k.rndkeys, key->nrounds, in, out);\n+}\n+\n+static void aes_decrypt_arch(const struct aes_key *key,\n+\t\t\t     u8 out[AES_BLOCK_SIZE],\n+\t\t\t     const u8 in[AES_BLOCK_SIZE])\n+{\n+\tif (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) &&\n+\t    !IS_ALIGNED((uintptr_t)out | (uintptr_t)in, 4)) {\n+\t\tu8 bounce_buf[AES_BLOCK_SIZE] __aligned(4);\n+\n+\t\tmemcpy(bounce_buf, in, AES_BLOCK_SIZE);\n+\t\t__aes_arm_decrypt(key->inv_k.inv_rndkeys, key->nrounds,\n+\t\t\t\t  bounce_buf, bounce_buf);\n+\t\tmemcpy(out, bounce_buf, AES_BLOCK_SIZE);\n+\t\treturn;\n+\t}\n+\t__aes_arm_decrypt(key->inv_k.inv_rndkeys, key->nrounds, in, out);\n+}\n","prefixes":["v2","10/35"]}