get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2216570/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2216570,
    "url": "http://patchwork.ozlabs.org/api/patches/2216570/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/sparclinux/patch/20260326201246.57544-3-ebiggers@kernel.org/",
    "project": {
        "id": 10,
        "url": "http://patchwork.ozlabs.org/api/projects/10/?format=api",
        "name": "Linux SPARC Development ",
        "link_name": "sparclinux",
        "list_id": "sparclinux.vger.kernel.org",
        "list_email": "sparclinux@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260326201246.57544-3-ebiggers@kernel.org>",
    "list_archive_url": null,
    "date": "2026-03-26T20:12:44",
    "name": "[2/3] crypto: sparc - Remove des and des3_ede code",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "41e1e269d37446b746705fa33610402a9db2cd3a",
    "submitter": {
        "id": 74690,
        "url": "http://patchwork.ozlabs.org/api/people/74690/?format=api",
        "name": "Eric Biggers",
        "email": "ebiggers@kernel.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/sparclinux/patch/20260326201246.57544-3-ebiggers@kernel.org/mbox/",
    "series": [
        {
            "id": 497643,
            "url": "http://patchwork.ozlabs.org/api/series/497643/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/sparclinux/list/?series=497643",
            "date": "2026-03-26T20:12:42",
            "name": "crypto: Remove arch-optimized des and des3_ede code",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497643/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216570/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216570/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <SRS0=w9IV=B2=vger.kernel.org=sparclinux+bounces-6567-patchwork-incoming=ozlabs.org@ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "sparclinux@vger.kernel.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "patchwork-incoming@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=vIXP04gr;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org\n (client-ip=2404:9400:2221:ea00::3; helo=mail.ozlabs.org;\n envelope-from=srs0=w9iv=b2=vger.kernel.org=sparclinux+bounces-6567-patchwork-incoming=ozlabs.org@ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "gandalf.ozlabs.org;\n arc=pass smtp.remote-ip=172.234.253.10 arc.chain=subspace.kernel.org",
            "gandalf.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org",
            "gandalf.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=vIXP04gr;\n\tdkim-atps=neutral",
            "gandalf.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=sparclinux+bounces-6567-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"vIXP04gr\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"
        ],
        "Received": [
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\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 4fhZpF1HPlz1yFp\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 07:17:57 +1100 (AEDT)",
            "from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3])\n\tby gandalf.ozlabs.org (Postfix) with ESMTP id 4fhZpF0pDgz4wM6\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 07:17:57 +1100 (AEDT)",
            "by gandalf.ozlabs.org (Postfix)\n\tid 4fhZpF0k9Zz4w9r; Fri, 27 Mar 2026 07:17:57 +1100 (AEDT)",
            "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\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 gandalf.ozlabs.org (Postfix) with ESMTPS id 4fhZp94cnTz4wSV\n\tfor <patchwork-incoming@ozlabs.org>; Fri, 27 Mar 2026 07:17:53 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 0FBD330892D0\n\tfor <patchwork-incoming@ozlabs.org>; Thu, 26 Mar 2026 20:12:57 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id C709F3A6B63;\n\tThu, 26 Mar 2026 20:12:54 +0000 (UTC)",
            "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id A05AE3A6B7B;\n\tThu, 26 Mar 2026 20:12:54 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPSA id CDA4AC19423;\n\tThu, 26 Mar 2026 20:12:53 +0000 (UTC)"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707; t=1774556277; cv=pass;\n\tb=Qd292NYsmpC/9TQBP3T3oJbS3KBEIEgBBdEQGF5hePypChqueRy88wuaAaMI04ezmUjsQTX/QrbYlsKdsFpA21dlnRyxgAWvXAI5fqSDQ8UfAyQLKRdzk1TH9qWyiU3vgFS7tgwRn5KGxVKKc85kTbNkrTuWLS8SQXIMxGk+83WUWQwASFvd5vb3n27dWvNW/xSqAZ7iaA2lBRbD2NIwrGGZtrSoJL3XUOpsixSSg0YD1P9m4pVlRuCKCFEfvcVbcJRY4r1wun5AQBbk++TtLRMaydfCui0sHLocYD5t5gynfnOS8NaZqY1Icx6dxgj50ZRju94yHgaPGE5hK5sp8Q==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774555974; cv=none;\n b=G9mbTs4bDZNfyrEwjvW5TXMt9e1gpcHlGyfUIiNt/eox4S56Nf31rZly3LcXsfv33NxGjHexqkPz2NAM+oWLT0XdOi05eRIEycs8NoD7DdoEE42wleknuu935qYVjs+MvPuckeSvtZiW7OQLG5NpBiZfvP/prsXhRTa/H4MXIwE="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=ozlabs.org; s=201707;\n\tt=1774556277; c=relaxed/relaxed;\n\tbh=nfvndnoqSRArl0qlMyMDSumrlWG8UbKyEluKwKb56mI=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=x0vlHEw4R7lA9rUPeZvzpaYOzoLylEdkl2fpmBBFrf5sQUIWCi+ORx8JqG6N1fgDtSjgVCHQ3opN0x/V5T9Gbp6ZhU5Ndh3yADL65qNOtNSLMhDqQgGV3dxZ24UnBiGdE6oWKy9G52FB+GIJTE0w1Okh5RKPJy/naZ4qQMoyRyttJafpuQwuwf43AwmJLf1LKxJ3nnpDB2pTbtASsolzbf1tbyQcVlPbNGB5ytmuOx7T8u1AzkSDBRFS7BaRrHUoxTQ8VAV7x86DF427ahhxfAFeATessz93Sx3gO8LuakF2GPqrxwCm0p9fpHAtIeOS2rM1XBUGUxZt79brS671QA==",
            "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774555974; c=relaxed/simple;\n\tbh=KXDFQH+yQTzWkSm24WreW8WQUK4NNhpR/Il4B1yD/eU=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=qyF4OmAelY0lEU1Vxwxrw+yvAZ41CitPQZLRW8th17H4Reb2JtcfkOKB/2GZZiipmpdhTutMea8ABP/ymtLBURl88OuG9iQqCpGSa+LOmw8ihBkgyypvOGTFn9tKiACxCyvo66YBN3BZTIA999WVa0ZJfymT5wiEhD8xkkLRCtw="
        ],
        "ARC-Authentication-Results": [
            "i=2; gandalf.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=vIXP04gr; dkim-atps=neutral;\n spf=pass (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=sparclinux+bounces-6567-patchwork-incoming=ozlabs.org@vger.kernel.org;\n receiver=ozlabs.org) smtp.mailfrom=vger.kernel.org",
            "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=vIXP04gr; arc=none smtp.client-ip=10.30.226.201"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1774555974;\n\tbh=KXDFQH+yQTzWkSm24WreW8WQUK4NNhpR/Il4B1yD/eU=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=vIXP04greD9QV95+wvpeBPUWwdLX8HSFd7hPKEc5scvQZb1S+715E+h5cHLHHNESJ\n\t OBRQ2jCTSE/Kg0mZu+uxayW+F1OEHwsx6JMs8gT7bRrpuzjfrXL86UT0BnUMeGaY4y\n\t FttZ50NerIDoHnjHXS2Q19VdIjnUGy5DBDi2rc5ObgZAR++xWqc1cUOJ6gnlWF0VKI\n\t W9pvAp4EB2P0i+muqlO2401k0hZjDh1GGXJgaSCr1oIy8HbjrsOroigwx3qHQh4vwb\n\t 8YM2Y8zW0UX4c8Kex4GNXk2d0cmg5BGYMCCDSxdxPvUY7pJRdRI7FuqQzDH2I0+vSP\n\t IrMs9DMbQxwdA==",
        "From": "Eric Biggers <ebiggers@kernel.org>",
        "To": "linux-crypto@vger.kernel.org,\n\tHerbert Xu <herbert@gondor.apana.org.au>",
        "Cc": "linux-kernel@vger.kernel.org,\n\tlinux-s390@vger.kernel.org,\n\tsparclinux@vger.kernel.org,\n\tx86@kernel.org,\n\tHarald Freudenberger <freude@linux.ibm.com>,\n\tHolger Dengler <dengler@linux.ibm.com>,\n\tEric Biggers <ebiggers@kernel.org>",
        "Subject": "[PATCH 2/3] crypto: sparc - Remove des and des3_ede code",
        "Date": "Thu, 26 Mar 2026 13:12:44 -0700",
        "Message-ID": "<20260326201246.57544-3-ebiggers@kernel.org>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260326201246.57544-1-ebiggers@kernel.org>",
        "References": "<20260326201246.57544-1-ebiggers@kernel.org>",
        "Precedence": "bulk",
        "X-Mailing-List": "sparclinux@vger.kernel.org",
        "List-Id": "<sparclinux.vger.kernel.org>",
        "List-Subscribe": "<mailto:sparclinux+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:sparclinux+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Spam-Status": "No, score=-1.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DMARC_PASS,\n\tMAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on gandalf.ozlabs.org"
    },
    "content": "Since DES and Triple DES are obsolete, there is very little point in\nmaintining architecture-optimized code for them.  Remove it.\n\nSigned-off-by: Eric Biggers <ebiggers@kernel.org>\n---\n arch/sparc/crypto/Kconfig    |  14 -\n arch/sparc/crypto/Makefile   |   2 -\n arch/sparc/crypto/des_asm.S  | 419 ------------------------------\n arch/sparc/crypto/des_glue.c | 482 -----------------------------------\n 4 files changed, 917 deletions(-)\n delete mode 100644 arch/sparc/crypto/des_asm.S\n delete mode 100644 arch/sparc/crypto/des_glue.c",
    "diff": "diff --git a/arch/sparc/crypto/Kconfig b/arch/sparc/crypto/Kconfig\nindex c1932ce46c7f..8db3f6eea5dc 100644\n--- a/arch/sparc/crypto/Kconfig\n+++ b/arch/sparc/crypto/Kconfig\n@@ -1,23 +1,9 @@\n # SPDX-License-Identifier: GPL-2.0\n \n menu \"Accelerated Cryptographic Algorithms for CPU (sparc64)\"\n \n-config CRYPTO_DES_SPARC64\n-\ttristate \"Ciphers: DES and Triple DES EDE, modes: ECB/CBC\"\n-\tdepends on SPARC64\n-\tselect CRYPTO_ALGAPI\n-\tselect CRYPTO_LIB_DES\n-\tselect CRYPTO_SKCIPHER\n-\thelp\n-\t  Block cipher: DES (FIPS 46-2) cipher algorithm\n-\t  Block cipher: Triple DES EDE (FIPS 46-3) cipher algorithm\n-\t  Length-preserving ciphers: DES with ECB and CBC modes\n-\t  Length-preserving ciphers: Tripe DES EDE with ECB and CBC modes\n-\n-\t  Architecture: sparc64\n-\n config CRYPTO_AES_SPARC64\n \ttristate \"Ciphers: AES, modes: ECB, CBC, CTR\"\n \tdepends on SPARC64\n \tselect CRYPTO_LIB_AES\n \tselect CRYPTO_SKCIPHER\ndiff --git a/arch/sparc/crypto/Makefile b/arch/sparc/crypto/Makefile\nindex cdf9f4b3efbb..ab4a7765babf 100644\n--- a/arch/sparc/crypto/Makefile\n+++ b/arch/sparc/crypto/Makefile\n@@ -2,11 +2,9 @@\n #\n # Arch-specific CryptoAPI modules.\n #\n \n obj-$(CONFIG_CRYPTO_AES_SPARC64) += aes-sparc64.o\n-obj-$(CONFIG_CRYPTO_DES_SPARC64) += des-sparc64.o\n obj-$(CONFIG_CRYPTO_CAMELLIA_SPARC64) += camellia-sparc64.o\n \n aes-sparc64-y := aes_glue.o\n-des-sparc64-y := des_asm.o des_glue.o\n camellia-sparc64-y := camellia_asm.o camellia_glue.o\ndiff --git a/arch/sparc/crypto/des_asm.S b/arch/sparc/crypto/des_asm.S\ndeleted file mode 100644\nindex d534446cbef9..000000000000\n--- a/arch/sparc/crypto/des_asm.S\n+++ /dev/null\n@@ -1,419 +0,0 @@\n-/* SPDX-License-Identifier: GPL-2.0 */\n-#include <linux/linkage.h>\n-#include <asm/opcodes.h>\n-#include <asm/visasm.h>\n-\n-\t.align\t32\n-ENTRY(des_sparc64_key_expand)\n-\t/* %o0=input_key, %o1=output_key */\n-\tVISEntryHalf\n-\tld\t[%o0 + 0x00], %f0\n-\tld\t[%o0 + 0x04], %f1\n-\tDES_KEXPAND(0, 0, 0)\n-\tDES_KEXPAND(0, 1, 2)\n-\tDES_KEXPAND(2, 3, 6)\n-\tDES_KEXPAND(2, 2, 4)\n-\tDES_KEXPAND(6, 3, 10)\n-\tDES_KEXPAND(6, 2, 8)\n-\tDES_KEXPAND(10, 3, 14)\n-\tDES_KEXPAND(10, 2, 12)\n-\tDES_KEXPAND(14, 1, 16)\n-\tDES_KEXPAND(16, 3, 20)\n-\tDES_KEXPAND(16, 2, 18)\n-\tDES_KEXPAND(20, 3, 24)\n-\tDES_KEXPAND(20, 2, 22)\n-\tDES_KEXPAND(24, 3, 28)\n-\tDES_KEXPAND(24, 2, 26)\n-\tDES_KEXPAND(28, 1, 30)\n-\tstd\t%f0, [%o1 + 0x00]\n-\tstd\t%f2, [%o1 + 0x08]\n-\tstd\t%f4, [%o1 + 0x10]\n-\tstd\t%f6, [%o1 + 0x18]\n-\tstd\t%f8, [%o1 + 0x20]\n-\tstd\t%f10, [%o1 + 0x28]\n-\tstd\t%f12, [%o1 + 0x30]\n-\tstd\t%f14, [%o1 + 0x38]\n-\tstd\t%f16, [%o1 + 0x40]\n-\tstd\t%f18, [%o1 + 0x48]\n-\tstd\t%f20, [%o1 + 0x50]\n-\tstd\t%f22, [%o1 + 0x58]\n-\tstd\t%f24, [%o1 + 0x60]\n-\tstd\t%f26, [%o1 + 0x68]\n-\tstd\t%f28, [%o1 + 0x70]\n-\tstd\t%f30, [%o1 + 0x78]\n-\tretl\n-\t VISExitHalf\n-ENDPROC(des_sparc64_key_expand)\n-\n-\t.align\t32\n-ENTRY(des_sparc64_crypt)\n-\t/* %o0=key, %o1=input, %o2=output */\n-\tVISEntry\n-\tldd\t[%o1 + 0x00], %f32\n-\tldd\t[%o0 + 0x00], %f0\n-\tldd\t[%o0 + 0x08], %f2\n-\tldd\t[%o0 + 0x10], %f4\n-\tldd\t[%o0 + 0x18], %f6\n-\tldd\t[%o0 + 0x20], %f8\n-\tldd\t[%o0 + 0x28], %f10\n-\tldd\t[%o0 + 0x30], %f12\n-\tldd\t[%o0 + 0x38], %f14\n-\tldd\t[%o0 + 0x40], %f16\n-\tldd\t[%o0 + 0x48], %f18\n-\tldd\t[%o0 + 0x50], %f20\n-\tldd\t[%o0 + 0x58], %f22\n-\tldd\t[%o0 + 0x60], %f24\n-\tldd\t[%o0 + 0x68], %f26\n-\tldd\t[%o0 + 0x70], %f28\n-\tldd\t[%o0 + 0x78], %f30\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tDES_ROUND(4, 6, 32, 32)\n-\tDES_ROUND(8, 10, 32, 32)\n-\tDES_ROUND(12, 14, 32, 32)\n-\tDES_ROUND(16, 18, 32, 32)\n-\tDES_ROUND(20, 22, 32, 32)\n-\tDES_ROUND(24, 26, 32, 32)\n-\tDES_ROUND(28, 30, 32, 32)\n-\tDES_IIP(32, 32)\n-\tstd\t%f32, [%o2 + 0x00]\n-\tretl\n-\t VISExit\n-ENDPROC(des_sparc64_crypt)\n-\n-\t.align\t32\n-ENTRY(des_sparc64_load_keys)\n-\t/* %o0=key */\n-\tVISEntry\n-\tldd\t[%o0 + 0x00], %f0\n-\tldd\t[%o0 + 0x08], %f2\n-\tldd\t[%o0 + 0x10], %f4\n-\tldd\t[%o0 + 0x18], %f6\n-\tldd\t[%o0 + 0x20], %f8\n-\tldd\t[%o0 + 0x28], %f10\n-\tldd\t[%o0 + 0x30], %f12\n-\tldd\t[%o0 + 0x38], %f14\n-\tldd\t[%o0 + 0x40], %f16\n-\tldd\t[%o0 + 0x48], %f18\n-\tldd\t[%o0 + 0x50], %f20\n-\tldd\t[%o0 + 0x58], %f22\n-\tldd\t[%o0 + 0x60], %f24\n-\tldd\t[%o0 + 0x68], %f26\n-\tldd\t[%o0 + 0x70], %f28\n-\tretl\n-\t ldd\t[%o0 + 0x78], %f30\n-ENDPROC(des_sparc64_load_keys)\n-\n-\t.align\t32\n-ENTRY(des_sparc64_ecb_crypt)\n-\t/* %o0=input, %o1=output, %o2=len */\n-1:\tldd\t[%o0 + 0x00], %f32\n-\tadd\t%o0, 0x08, %o0\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tDES_ROUND(4, 6, 32, 32)\n-\tDES_ROUND(8, 10, 32, 32)\n-\tDES_ROUND(12, 14, 32, 32)\n-\tDES_ROUND(16, 18, 32, 32)\n-\tDES_ROUND(20, 22, 32, 32)\n-\tDES_ROUND(24, 26, 32, 32)\n-\tDES_ROUND(28, 30, 32, 32)\n-\tDES_IIP(32, 32)\n-\tstd\t%f32, [%o1 + 0x00]\n-\tsubcc\t%o2, 0x08, %o2\n-\tbne,pt\t%icc, 1b\n-\t add\t%o1, 0x08, %o1\n-\tretl\n-\t nop\n-ENDPROC(des_sparc64_ecb_crypt)\n-\n-\t.align\t32\n-ENTRY(des_sparc64_cbc_encrypt)\n-\t/* %o0=input, %o1=output, %o2=len, %o3=IV */\n-\tldd\t[%o3 + 0x00], %f32\n-1:\tldd\t[%o0 + 0x00], %f34\n-\tfxor\t%f32, %f34, %f32\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tDES_ROUND(4, 6, 32, 32)\n-\tDES_ROUND(8, 10, 32, 32)\n-\tDES_ROUND(12, 14, 32, 32)\n-\tDES_ROUND(16, 18, 32, 32)\n-\tDES_ROUND(20, 22, 32, 32)\n-\tDES_ROUND(24, 26, 32, 32)\n-\tDES_ROUND(28, 30, 32, 32)\n-\tDES_IIP(32, 32)\n-\tstd\t%f32, [%o1 + 0x00]\n-\tadd\t%o0, 0x08, %o0\n-\tsubcc\t%o2, 0x08, %o2\n-\tbne,pt\t%icc, 1b\n-\t add\t%o1, 0x08, %o1\n-\tretl\n-\t std\t%f32, [%o3 + 0x00]\n-ENDPROC(des_sparc64_cbc_encrypt)\n-\n-\t.align\t32\n-ENTRY(des_sparc64_cbc_decrypt)\n-\t/* %o0=input, %o1=output, %o2=len, %o3=IV */\n-\tldd\t[%o3 + 0x00], %f34\n-1:\tldd\t[%o0 + 0x00], %f36\n-\tDES_IP(36, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tDES_ROUND(4, 6, 32, 32)\n-\tDES_ROUND(8, 10, 32, 32)\n-\tDES_ROUND(12, 14, 32, 32)\n-\tDES_ROUND(16, 18, 32, 32)\n-\tDES_ROUND(20, 22, 32, 32)\n-\tDES_ROUND(24, 26, 32, 32)\n-\tDES_ROUND(28, 30, 32, 32)\n-\tDES_IIP(32, 32)\n-\tfxor\t%f32, %f34, %f32\n-\tfsrc2\t%f36, %f34\n-\tstd\t%f32, [%o1 + 0x00]\n-\tadd\t%o0, 0x08, %o0\n-\tsubcc\t%o2, 0x08, %o2\n-\tbne,pt\t%icc, 1b\n-\t add\t%o1, 0x08, %o1\n-\tretl\n-\t std\t%f36, [%o3 + 0x00]\n-ENDPROC(des_sparc64_cbc_decrypt)\n-\n-\t.align\t32\n-ENTRY(des3_ede_sparc64_crypt)\n-\t/* %o0=key, %o1=input, %o2=output */\n-\tVISEntry\n-\tldd\t[%o1 + 0x00], %f32\n-\tldd\t[%o0 + 0x00], %f0\n-\tldd\t[%o0 + 0x08], %f2\n-\tldd\t[%o0 + 0x10], %f4\n-\tldd\t[%o0 + 0x18], %f6\n-\tldd\t[%o0 + 0x20], %f8\n-\tldd\t[%o0 + 0x28], %f10\n-\tldd\t[%o0 + 0x30], %f12\n-\tldd\t[%o0 + 0x38], %f14\n-\tldd\t[%o0 + 0x40], %f16\n-\tldd\t[%o0 + 0x48], %f18\n-\tldd\t[%o0 + 0x50], %f20\n-\tldd\t[%o0 + 0x58], %f22\n-\tldd\t[%o0 + 0x60], %f24\n-\tldd\t[%o0 + 0x68], %f26\n-\tldd\t[%o0 + 0x70], %f28\n-\tldd\t[%o0 + 0x78], %f30\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tldd\t[%o0 + 0x80], %f0\n-\tldd\t[%o0 + 0x88], %f2\n-\tDES_ROUND(4, 6, 32, 32)\n-\tldd\t[%o0 + 0x90], %f4\n-\tldd\t[%o0 + 0x98], %f6\n-\tDES_ROUND(8, 10, 32, 32)\n-\tldd\t[%o0 + 0xa0], %f8\n-\tldd\t[%o0 + 0xa8], %f10\n-\tDES_ROUND(12, 14, 32, 32)\n-\tldd\t[%o0 + 0xb0], %f12\n-\tldd\t[%o0 + 0xb8], %f14\n-\tDES_ROUND(16, 18, 32, 32)\n-\tldd\t[%o0 + 0xc0], %f16\n-\tldd\t[%o0 + 0xc8], %f18\n-\tDES_ROUND(20, 22, 32, 32)\n-\tldd\t[%o0 + 0xd0], %f20\n-\tldd\t[%o0 + 0xd8], %f22\n-\tDES_ROUND(24, 26, 32, 32)\n-\tldd\t[%o0 + 0xe0], %f24\n-\tldd\t[%o0 + 0xe8], %f26\n-\tDES_ROUND(28, 30, 32, 32)\n-\tldd\t[%o0 + 0xf0], %f28\n-\tldd\t[%o0 + 0xf8], %f30\n-\tDES_IIP(32, 32)\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tldd\t[%o0 + 0x100], %f0\n-\tldd\t[%o0 + 0x108], %f2\n-\tDES_ROUND(4, 6, 32, 32)\n-\tldd\t[%o0 + 0x110], %f4\n-\tldd\t[%o0 + 0x118], %f6\n-\tDES_ROUND(8, 10, 32, 32)\n-\tldd\t[%o0 + 0x120], %f8\n-\tldd\t[%o0 + 0x128], %f10\n-\tDES_ROUND(12, 14, 32, 32)\n-\tldd\t[%o0 + 0x130], %f12\n-\tldd\t[%o0 + 0x138], %f14\n-\tDES_ROUND(16, 18, 32, 32)\n-\tldd\t[%o0 + 0x140], %f16\n-\tldd\t[%o0 + 0x148], %f18\n-\tDES_ROUND(20, 22, 32, 32)\n-\tldd\t[%o0 + 0x150], %f20\n-\tldd\t[%o0 + 0x158], %f22\n-\tDES_ROUND(24, 26, 32, 32)\n-\tldd\t[%o0 + 0x160], %f24\n-\tldd\t[%o0 + 0x168], %f26\n-\tDES_ROUND(28, 30, 32, 32)\n-\tldd\t[%o0 + 0x170], %f28\n-\tldd\t[%o0 + 0x178], %f30\n-\tDES_IIP(32, 32)\n-\tDES_IP(32, 32)\n-\tDES_ROUND(0, 2, 32, 32)\n-\tDES_ROUND(4, 6, 32, 32)\n-\tDES_ROUND(8, 10, 32, 32)\n-\tDES_ROUND(12, 14, 32, 32)\n-\tDES_ROUND(16, 18, 32, 32)\n-\tDES_ROUND(20, 22, 32, 32)\n-\tDES_ROUND(24, 26, 32, 32)\n-\tDES_ROUND(28, 30, 32, 32)\n-\tDES_IIP(32, 32)\n-\n-\tstd\t%f32, [%o2 + 0x00]\n-\tretl\n-\t VISExit\n-ENDPROC(des3_ede_sparc64_crypt)\n-\n-\t.align\t32\n-ENTRY(des3_ede_sparc64_load_keys)\n-\t/* %o0=key */\n-\tVISEntry\n-\tldd\t[%o0 + 0x00], %f0\n-\tldd\t[%o0 + 0x08], %f2\n-\tldd\t[%o0 + 0x10], %f4\n-\tldd\t[%o0 + 0x18], %f6\n-\tldd\t[%o0 + 0x20], %f8\n-\tldd\t[%o0 + 0x28], %f10\n-\tldd\t[%o0 + 0x30], %f12\n-\tldd\t[%o0 + 0x38], %f14\n-\tldd\t[%o0 + 0x40], %f16\n-\tldd\t[%o0 + 0x48], %f18\n-\tldd\t[%o0 + 0x50], %f20\n-\tldd\t[%o0 + 0x58], %f22\n-\tldd\t[%o0 + 0x60], %f24\n-\tldd\t[%o0 + 0x68], %f26\n-\tldd\t[%o0 + 0x70], %f28\n-\tldd\t[%o0 + 0x78], %f30\n-\tldd\t[%o0 + 0x80], %f32\n-\tldd\t[%o0 + 0x88], %f34\n-\tldd\t[%o0 + 0x90], %f36\n-\tldd\t[%o0 + 0x98], %f38\n-\tldd\t[%o0 + 0xa0], %f40\n-\tldd\t[%o0 + 0xa8], %f42\n-\tldd\t[%o0 + 0xb0], %f44\n-\tldd\t[%o0 + 0xb8], %f46\n-\tldd\t[%o0 + 0xc0], %f48\n-\tldd\t[%o0 + 0xc8], %f50\n-\tldd\t[%o0 + 0xd0], %f52\n-\tldd\t[%o0 + 0xd8], %f54\n-\tldd\t[%o0 + 0xe0], %f56\n-\tretl\n-\t ldd\t[%o0 + 0xe8], %f58\n-ENDPROC(des3_ede_sparc64_load_keys)\n-\n-#define DES3_LOOP_BODY(X) \\\n-\tDES_IP(X, X) \\\n-\tDES_ROUND(0, 2, X, X) \\\n-\tDES_ROUND(4, 6, X, X) \\\n-\tDES_ROUND(8, 10, X, X) \\\n-\tDES_ROUND(12, 14, X, X) \\\n-\tDES_ROUND(16, 18, X, X) \\\n-\tldd\t[%o0 + 0xf0], %f16; \\\n-\tldd\t[%o0 + 0xf8], %f18; \\\n-\tDES_ROUND(20, 22, X, X) \\\n-\tldd\t[%o0 + 0x100], %f20; \\\n-\tldd\t[%o0 + 0x108], %f22; \\\n-\tDES_ROUND(24, 26, X, X) \\\n-\tldd\t[%o0 + 0x110], %f24; \\\n-\tldd\t[%o0 + 0x118], %f26; \\\n-\tDES_ROUND(28, 30, X, X) \\\n-\tldd\t[%o0 + 0x120], %f28; \\\n-\tldd\t[%o0 + 0x128], %f30; \\\n-\tDES_IIP(X, X) \\\n-\tDES_IP(X, X) \\\n-\tDES_ROUND(32, 34, X, X) \\\n-\tldd\t[%o0 + 0x130], %f0; \\\n-\tldd\t[%o0 + 0x138], %f2; \\\n-\tDES_ROUND(36, 38, X, X) \\\n-\tldd\t[%o0 + 0x140], %f4; \\\n-\tldd\t[%o0 + 0x148], %f6; \\\n-\tDES_ROUND(40, 42, X, X) \\\n-\tldd\t[%o0 + 0x150], %f8; \\\n-\tldd\t[%o0 + 0x158], %f10; \\\n-\tDES_ROUND(44, 46, X, X) \\\n-\tldd\t[%o0 + 0x160], %f12; \\\n-\tldd\t[%o0 + 0x168], %f14; \\\n-\tDES_ROUND(48, 50, X, X) \\\n-\tDES_ROUND(52, 54, X, X) \\\n-\tDES_ROUND(56, 58, X, X) \\\n-\tDES_ROUND(16, 18, X, X) \\\n-\tldd\t[%o0 + 0x170], %f16; \\\n-\tldd\t[%o0 + 0x178], %f18; \\\n-\tDES_IIP(X, X) \\\n-\tDES_IP(X, X) \\\n-\tDES_ROUND(20, 22, X, X) \\\n-\tldd\t[%o0 + 0x50], %f20; \\\n-\tldd\t[%o0 + 0x58], %f22; \\\n-\tDES_ROUND(24, 26, X, X) \\\n-\tldd\t[%o0 + 0x60], %f24; \\\n-\tldd\t[%o0 + 0x68], %f26; \\\n-\tDES_ROUND(28, 30, X, X) \\\n-\tldd\t[%o0 + 0x70], %f28; \\\n-\tldd\t[%o0 + 0x78], %f30; \\\n-\tDES_ROUND(0, 2, X, X) \\\n-\tldd\t[%o0 + 0x00], %f0; \\\n-\tldd\t[%o0 + 0x08], %f2; \\\n-\tDES_ROUND(4, 6, X, X) \\\n-\tldd\t[%o0 + 0x10], %f4; \\\n-\tldd\t[%o0 + 0x18], %f6; \\\n-\tDES_ROUND(8, 10, X, X) \\\n-\tldd\t[%o0 + 0x20], %f8; \\\n-\tldd\t[%o0 + 0x28], %f10; \\\n-\tDES_ROUND(12, 14, X, X) \\\n-\tldd\t[%o0 + 0x30], %f12; \\\n-\tldd\t[%o0 + 0x38], %f14; \\\n-\tDES_ROUND(16, 18, X, X) \\\n-\tldd\t[%o0 + 0x40], %f16; \\\n-\tldd\t[%o0 + 0x48], %f18; \\\n-\tDES_IIP(X, X)\n-\n-\t.align\t32\n-ENTRY(des3_ede_sparc64_ecb_crypt)\n-\t/* %o0=key, %o1=input, %o2=output, %o3=len */\n-1:\tldd\t[%o1 + 0x00], %f60\n-\tDES3_LOOP_BODY(60)\n-\tstd\t%f60, [%o2 + 0x00]\n-\tadd\t%o1, 0x08, %o1\n-\tsubcc\t%o3, 0x08, %o3\n-\tbne,pt\t%icc, 1b\n-\t add\t%o2, 0x08, %o2\n-\tretl\n-\t nop\n-ENDPROC(des3_ede_sparc64_ecb_crypt)\n-\n-\t.align\t32\n-ENTRY(des3_ede_sparc64_cbc_encrypt)\n-\t/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */\n-\tldd\t[%o4 + 0x00], %f60\n-1:\tldd\t[%o1 + 0x00], %f62\n-\tfxor\t%f60, %f62, %f60\n-\tDES3_LOOP_BODY(60)\n-\tstd\t%f60, [%o2 + 0x00]\n-\tadd\t%o1, 0x08, %o1\n-\tsubcc\t%o3, 0x08, %o3\n-\tbne,pt\t%icc, 1b\n-\t add\t%o2, 0x08, %o2\n-\tretl\n-\t std\t%f60, [%o4 + 0x00]\n-ENDPROC(des3_ede_sparc64_cbc_encrypt)\n-\n-\t.align\t32\n-ENTRY(des3_ede_sparc64_cbc_decrypt)\n-\t/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */\n-\tldd\t[%o4 + 0x00], %f62\n-1:\tldx\t[%o1 + 0x00], %g1\n-\tMOVXTOD_G1_F60\n-\tDES3_LOOP_BODY(60)\n-\tfxor\t%f62, %f60, %f60\n-\tMOVXTOD_G1_F62\n-\tstd\t%f60, [%o2 + 0x00]\n-\tadd\t%o1, 0x08, %o1\n-\tsubcc\t%o3, 0x08, %o3\n-\tbne,pt\t%icc, 1b\n-\t add\t%o2, 0x08, %o2\n-\tretl\n-\t stx\t%g1, [%o4 + 0x00]\n-ENDPROC(des3_ede_sparc64_cbc_decrypt)\ndiff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c\ndeleted file mode 100644\nindex e50ec4cd57cd..000000000000\n--- a/arch/sparc/crypto/des_glue.c\n+++ /dev/null\n@@ -1,482 +0,0 @@\n-// SPDX-License-Identifier: GPL-2.0-only\n-/* Glue code for DES encryption optimized for sparc64 crypto opcodes.\n- *\n- * Copyright (C) 2012 David S. Miller <davem@davemloft.net>\n- */\n-\n-#define pr_fmt(fmt)\tKBUILD_MODNAME \": \" fmt\n-\n-#include <linux/crypto.h>\n-#include <linux/init.h>\n-#include <linux/module.h>\n-#include <linux/mm.h>\n-#include <linux/types.h>\n-#include <crypto/algapi.h>\n-#include <crypto/internal/des.h>\n-#include <crypto/internal/skcipher.h>\n-\n-#include <asm/fpumacro.h>\n-#include <asm/opcodes.h>\n-#include <asm/pstate.h>\n-#include <asm/elf.h>\n-\n-struct des_sparc64_ctx {\n-\tu64 encrypt_expkey[DES_EXPKEY_WORDS / 2];\n-\tu64 decrypt_expkey[DES_EXPKEY_WORDS / 2];\n-};\n-\n-struct des3_ede_sparc64_ctx {\n-\tu64 encrypt_expkey[DES3_EDE_EXPKEY_WORDS / 2];\n-\tu64 decrypt_expkey[DES3_EDE_EXPKEY_WORDS / 2];\n-};\n-\n-static void encrypt_to_decrypt(u64 *d, const u64 *e)\n-{\n-\tconst u64 *s = e + (DES_EXPKEY_WORDS / 2) - 1;\n-\tint i;\n-\n-\tfor (i = 0; i < DES_EXPKEY_WORDS / 2; i++)\n-\t\t*d++ = *s--;\n-}\n-\n-extern void des_sparc64_key_expand(const u32 *input_key, u64 *key);\n-\n-static int des_set_key(struct crypto_tfm *tfm, const u8 *key,\n-\t\t       unsigned int keylen)\n-{\n-\tstruct des_sparc64_ctx *dctx = crypto_tfm_ctx(tfm);\n-\tint err;\n-\n-\t/* Even though we have special instructions for key expansion,\n-\t * we call des_verify_key() so that we don't have to write our own\n-\t * weak key detection code.\n-\t */\n-\terr = crypto_des_verify_key(tfm, key);\n-\tif (err)\n-\t\treturn err;\n-\n-\tdes_sparc64_key_expand((const u32 *) key, &dctx->encrypt_expkey[0]);\n-\tencrypt_to_decrypt(&dctx->decrypt_expkey[0], &dctx->encrypt_expkey[0]);\n-\n-\treturn 0;\n-}\n-\n-static int des_set_key_skcipher(struct crypto_skcipher *tfm, const u8 *key,\n-\t\t\t\tunsigned int keylen)\n-{\n-\treturn des_set_key(crypto_skcipher_tfm(tfm), key, keylen);\n-}\n-\n-extern void des_sparc64_crypt(const u64 *key, const u64 *input,\n-\t\t\t      u64 *output);\n-\n-static void sparc_des_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)\n-{\n-\tstruct des_sparc64_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tconst u64 *K = ctx->encrypt_expkey;\n-\n-\tdes_sparc64_crypt(K, (const u64 *) src, (u64 *) dst);\n-}\n-\n-static void sparc_des_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)\n-{\n-\tstruct des_sparc64_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tconst u64 *K = ctx->decrypt_expkey;\n-\n-\tdes_sparc64_crypt(K, (const u64 *) src, (u64 *) dst);\n-}\n-\n-extern void des_sparc64_load_keys(const u64 *key);\n-\n-extern void des_sparc64_ecb_crypt(const u64 *input, u64 *output,\n-\t\t\t\t  unsigned int len);\n-\n-static int __ecb_crypt(struct skcipher_request *req, bool encrypt)\n-{\n-\tstruct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);\n-\tconst struct des_sparc64_ctx *ctx = crypto_skcipher_ctx(tfm);\n-\tstruct skcipher_walk walk;\n-\tunsigned int nbytes;\n-\tint err;\n-\n-\terr = skcipher_walk_virt(&walk, req, true);\n-\tif (err)\n-\t\treturn err;\n-\n-\tif (encrypt)\n-\t\tdes_sparc64_load_keys(&ctx->encrypt_expkey[0]);\n-\telse\n-\t\tdes_sparc64_load_keys(&ctx->decrypt_expkey[0]);\n-\twhile ((nbytes = walk.nbytes) != 0) {\n-\t\tdes_sparc64_ecb_crypt(walk.src.virt.addr, walk.dst.virt.addr,\n-\t\t\t\t      round_down(nbytes, DES_BLOCK_SIZE));\n-\t\terr = skcipher_walk_done(&walk, nbytes % DES_BLOCK_SIZE);\n-\t}\n-\tfprs_write(0);\n-\treturn err;\n-}\n-\n-static int ecb_encrypt(struct skcipher_request *req)\n-{\n-\treturn __ecb_crypt(req, true);\n-}\n-\n-static int ecb_decrypt(struct skcipher_request *req)\n-{\n-\treturn __ecb_crypt(req, false);\n-}\n-\n-extern void des_sparc64_cbc_encrypt(const u64 *input, u64 *output,\n-\t\t\t\t    unsigned int len, u64 *iv);\n-\n-extern void des_sparc64_cbc_decrypt(const u64 *input, u64 *output,\n-\t\t\t\t    unsigned int len, u64 *iv);\n-\n-static int __cbc_crypt(struct skcipher_request *req, bool encrypt)\n-{\n-\tstruct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);\n-\tconst struct des_sparc64_ctx *ctx = crypto_skcipher_ctx(tfm);\n-\tstruct skcipher_walk walk;\n-\tunsigned int nbytes;\n-\tint err;\n-\n-\terr = skcipher_walk_virt(&walk, req, true);\n-\tif (err)\n-\t\treturn err;\n-\n-\tif (encrypt)\n-\t\tdes_sparc64_load_keys(&ctx->encrypt_expkey[0]);\n-\telse\n-\t\tdes_sparc64_load_keys(&ctx->decrypt_expkey[0]);\n-\twhile ((nbytes = walk.nbytes) != 0) {\n-\t\tif (encrypt)\n-\t\t\tdes_sparc64_cbc_encrypt(walk.src.virt.addr,\n-\t\t\t\t\t\twalk.dst.virt.addr,\n-\t\t\t\t\t\tround_down(nbytes,\n-\t\t\t\t\t\t\t   DES_BLOCK_SIZE),\n-\t\t\t\t\t\twalk.iv);\n-\t\telse\n-\t\t\tdes_sparc64_cbc_decrypt(walk.src.virt.addr,\n-\t\t\t\t\t\twalk.dst.virt.addr,\n-\t\t\t\t\t\tround_down(nbytes,\n-\t\t\t\t\t\t\t   DES_BLOCK_SIZE),\n-\t\t\t\t\t\twalk.iv);\n-\t\terr = skcipher_walk_done(&walk, nbytes % DES_BLOCK_SIZE);\n-\t}\n-\tfprs_write(0);\n-\treturn err;\n-}\n-\n-static int cbc_encrypt(struct skcipher_request *req)\n-{\n-\treturn __cbc_crypt(req, true);\n-}\n-\n-static int cbc_decrypt(struct skcipher_request *req)\n-{\n-\treturn __cbc_crypt(req, false);\n-}\n-\n-static int des3_ede_set_key(struct crypto_tfm *tfm, const u8 *key,\n-\t\t\t    unsigned int keylen)\n-{\n-\tstruct des3_ede_sparc64_ctx *dctx = crypto_tfm_ctx(tfm);\n-\tu64 k1[DES_EXPKEY_WORDS / 2];\n-\tu64 k2[DES_EXPKEY_WORDS / 2];\n-\tu64 k3[DES_EXPKEY_WORDS / 2];\n-\tint err;\n-\n-\terr = crypto_des3_ede_verify_key(tfm, key);\n-\tif (err)\n-\t\treturn err;\n-\n-\tdes_sparc64_key_expand((const u32 *)key, k1);\n-\tkey += DES_KEY_SIZE;\n-\tdes_sparc64_key_expand((const u32 *)key, k2);\n-\tkey += DES_KEY_SIZE;\n-\tdes_sparc64_key_expand((const u32 *)key, k3);\n-\n-\tmemcpy(&dctx->encrypt_expkey[0], &k1[0], sizeof(k1));\n-\tencrypt_to_decrypt(&dctx->encrypt_expkey[DES_EXPKEY_WORDS / 2], &k2[0]);\n-\tmemcpy(&dctx->encrypt_expkey[(DES_EXPKEY_WORDS / 2) * 2],\n-\t       &k3[0], sizeof(k3));\n-\n-\tencrypt_to_decrypt(&dctx->decrypt_expkey[0], &k3[0]);\n-\tmemcpy(&dctx->decrypt_expkey[DES_EXPKEY_WORDS / 2],\n-\t       &k2[0], sizeof(k2));\n-\tencrypt_to_decrypt(&dctx->decrypt_expkey[(DES_EXPKEY_WORDS / 2) * 2],\n-\t\t\t   &k1[0]);\n-\n-\treturn 0;\n-}\n-\n-static int des3_ede_set_key_skcipher(struct crypto_skcipher *tfm, const u8 *key,\n-\t\t\t\t     unsigned int keylen)\n-{\n-\treturn des3_ede_set_key(crypto_skcipher_tfm(tfm), key, keylen);\n-}\n-\n-extern void des3_ede_sparc64_crypt(const u64 *key, const u64 *input,\n-\t\t\t\t   u64 *output);\n-\n-static void sparc_des3_ede_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)\n-{\n-\tstruct des3_ede_sparc64_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tconst u64 *K = ctx->encrypt_expkey;\n-\n-\tdes3_ede_sparc64_crypt(K, (const u64 *) src, (u64 *) dst);\n-}\n-\n-static void sparc_des3_ede_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)\n-{\n-\tstruct des3_ede_sparc64_ctx *ctx = crypto_tfm_ctx(tfm);\n-\tconst u64 *K = ctx->decrypt_expkey;\n-\n-\tdes3_ede_sparc64_crypt(K, (const u64 *) src, (u64 *) dst);\n-}\n-\n-extern void des3_ede_sparc64_load_keys(const u64 *key);\n-\n-extern void des3_ede_sparc64_ecb_crypt(const u64 *expkey, const u64 *input,\n-\t\t\t\t       u64 *output, unsigned int len);\n-\n-static int __ecb3_crypt(struct skcipher_request *req, bool encrypt)\n-{\n-\tstruct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);\n-\tconst struct des3_ede_sparc64_ctx *ctx = crypto_skcipher_ctx(tfm);\n-\tstruct skcipher_walk walk;\n-\tconst u64 *K;\n-\tunsigned int nbytes;\n-\tint err;\n-\n-\terr = skcipher_walk_virt(&walk, req, true);\n-\tif (err)\n-\t\treturn err;\n-\n-\tif (encrypt)\n-\t\tK = &ctx->encrypt_expkey[0];\n-\telse\n-\t\tK = &ctx->decrypt_expkey[0];\n-\tdes3_ede_sparc64_load_keys(K);\n-\twhile ((nbytes = walk.nbytes) != 0) {\n-\t\tdes3_ede_sparc64_ecb_crypt(K, walk.src.virt.addr,\n-\t\t\t\t\t   walk.dst.virt.addr,\n-\t\t\t\t\t   round_down(nbytes, DES_BLOCK_SIZE));\n-\t\terr = skcipher_walk_done(&walk, nbytes % DES_BLOCK_SIZE);\n-\t}\n-\tfprs_write(0);\n-\treturn err;\n-}\n-\n-static int ecb3_encrypt(struct skcipher_request *req)\n-{\n-\treturn __ecb3_crypt(req, true);\n-}\n-\n-static int ecb3_decrypt(struct skcipher_request *req)\n-{\n-\treturn __ecb3_crypt(req, false);\n-}\n-\n-extern void des3_ede_sparc64_cbc_encrypt(const u64 *expkey, const u64 *input,\n-\t\t\t\t\t u64 *output, unsigned int len,\n-\t\t\t\t\t u64 *iv);\n-\n-extern void des3_ede_sparc64_cbc_decrypt(const u64 *expkey, const u64 *input,\n-\t\t\t\t\t u64 *output, unsigned int len,\n-\t\t\t\t\t u64 *iv);\n-\n-static int __cbc3_crypt(struct skcipher_request *req, bool encrypt)\n-{\n-\tstruct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);\n-\tconst struct des3_ede_sparc64_ctx *ctx = crypto_skcipher_ctx(tfm);\n-\tstruct skcipher_walk walk;\n-\tconst u64 *K;\n-\tunsigned int nbytes;\n-\tint err;\n-\n-\terr = skcipher_walk_virt(&walk, req, true);\n-\tif (err)\n-\t\treturn err;\n-\n-\tif (encrypt)\n-\t\tK = &ctx->encrypt_expkey[0];\n-\telse\n-\t\tK = &ctx->decrypt_expkey[0];\n-\tdes3_ede_sparc64_load_keys(K);\n-\twhile ((nbytes = walk.nbytes) != 0) {\n-\t\tif (encrypt)\n-\t\t\tdes3_ede_sparc64_cbc_encrypt(K, walk.src.virt.addr,\n-\t\t\t\t\t\t     walk.dst.virt.addr,\n-\t\t\t\t\t\t     round_down(nbytes,\n-\t\t\t\t\t\t\t\tDES_BLOCK_SIZE),\n-\t\t\t\t\t\t     walk.iv);\n-\t\telse\n-\t\t\tdes3_ede_sparc64_cbc_decrypt(K, walk.src.virt.addr,\n-\t\t\t\t\t\t     walk.dst.virt.addr,\n-\t\t\t\t\t\t     round_down(nbytes,\n-\t\t\t\t\t\t\t\tDES_BLOCK_SIZE),\n-\t\t\t\t\t\t     walk.iv);\n-\t\terr = skcipher_walk_done(&walk, nbytes % DES_BLOCK_SIZE);\n-\t}\n-\tfprs_write(0);\n-\treturn err;\n-}\n-\n-static int cbc3_encrypt(struct skcipher_request *req)\n-{\n-\treturn __cbc3_crypt(req, true);\n-}\n-\n-static int cbc3_decrypt(struct skcipher_request *req)\n-{\n-\treturn __cbc3_crypt(req, false);\n-}\n-\n-static struct crypto_alg cipher_algs[] = {\n-\t{\n-\t\t.cra_name\t\t= \"des\",\n-\t\t.cra_driver_name\t= \"des-sparc64\",\n-\t\t.cra_priority\t\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.cra_flags\t\t= CRYPTO_ALG_TYPE_CIPHER,\n-\t\t.cra_blocksize\t\t= DES_BLOCK_SIZE,\n-\t\t.cra_ctxsize\t\t= sizeof(struct des_sparc64_ctx),\n-\t\t.cra_alignmask\t\t= 7,\n-\t\t.cra_module\t\t= THIS_MODULE,\n-\t\t.cra_u\t= {\n-\t\t\t.cipher\t= {\n-\t\t\t\t.cia_min_keysize\t= DES_KEY_SIZE,\n-\t\t\t\t.cia_max_keysize\t= DES_KEY_SIZE,\n-\t\t\t\t.cia_setkey\t\t= des_set_key,\n-\t\t\t\t.cia_encrypt\t\t= sparc_des_encrypt,\n-\t\t\t\t.cia_decrypt\t\t= sparc_des_decrypt\n-\t\t\t}\n-\t\t}\n-\t}, {\n-\t\t.cra_name\t\t= \"des3_ede\",\n-\t\t.cra_driver_name\t= \"des3_ede-sparc64\",\n-\t\t.cra_priority\t\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.cra_flags\t\t= CRYPTO_ALG_TYPE_CIPHER,\n-\t\t.cra_blocksize\t\t= DES3_EDE_BLOCK_SIZE,\n-\t\t.cra_ctxsize\t\t= sizeof(struct des3_ede_sparc64_ctx),\n-\t\t.cra_alignmask\t\t= 7,\n-\t\t.cra_module\t\t= THIS_MODULE,\n-\t\t.cra_u\t= {\n-\t\t\t.cipher\t= {\n-\t\t\t\t.cia_min_keysize\t= DES3_EDE_KEY_SIZE,\n-\t\t\t\t.cia_max_keysize\t= DES3_EDE_KEY_SIZE,\n-\t\t\t\t.cia_setkey\t\t= des3_ede_set_key,\n-\t\t\t\t.cia_encrypt\t\t= sparc_des3_ede_encrypt,\n-\t\t\t\t.cia_decrypt\t\t= sparc_des3_ede_decrypt\n-\t\t\t}\n-\t\t}\n-\t}\n-};\n-\n-static struct skcipher_alg skcipher_algs[] = {\n-\t{\n-\t\t.base.cra_name\t\t= \"ecb(des)\",\n-\t\t.base.cra_driver_name\t= \"ecb-des-sparc64\",\n-\t\t.base.cra_priority\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.base.cra_blocksize\t= DES_BLOCK_SIZE,\n-\t\t.base.cra_ctxsize\t= sizeof(struct des_sparc64_ctx),\n-\t\t.base.cra_alignmask\t= 7,\n-\t\t.base.cra_module\t= THIS_MODULE,\n-\t\t.min_keysize\t\t= DES_KEY_SIZE,\n-\t\t.max_keysize\t\t= DES_KEY_SIZE,\n-\t\t.setkey\t\t\t= des_set_key_skcipher,\n-\t\t.encrypt\t\t= ecb_encrypt,\n-\t\t.decrypt\t\t= ecb_decrypt,\n-\t}, {\n-\t\t.base.cra_name\t\t= \"cbc(des)\",\n-\t\t.base.cra_driver_name\t= \"cbc-des-sparc64\",\n-\t\t.base.cra_priority\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.base.cra_blocksize\t= DES_BLOCK_SIZE,\n-\t\t.base.cra_ctxsize\t= sizeof(struct des_sparc64_ctx),\n-\t\t.base.cra_alignmask\t= 7,\n-\t\t.base.cra_module\t= THIS_MODULE,\n-\t\t.min_keysize\t\t= DES_KEY_SIZE,\n-\t\t.max_keysize\t\t= DES_KEY_SIZE,\n-\t\t.ivsize\t\t\t= DES_BLOCK_SIZE,\n-\t\t.setkey\t\t\t= des_set_key_skcipher,\n-\t\t.encrypt\t\t= cbc_encrypt,\n-\t\t.decrypt\t\t= cbc_decrypt,\n-\t}, {\n-\t\t.base.cra_name\t\t= \"ecb(des3_ede)\",\n-\t\t.base.cra_driver_name\t= \"ecb-des3_ede-sparc64\",\n-\t\t.base.cra_priority\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.base.cra_blocksize\t= DES3_EDE_BLOCK_SIZE,\n-\t\t.base.cra_ctxsize\t= sizeof(struct des3_ede_sparc64_ctx),\n-\t\t.base.cra_alignmask\t= 7,\n-\t\t.base.cra_module\t= THIS_MODULE,\n-\t\t.min_keysize\t\t= DES3_EDE_KEY_SIZE,\n-\t\t.max_keysize\t\t= DES3_EDE_KEY_SIZE,\n-\t\t.setkey\t\t\t= des3_ede_set_key_skcipher,\n-\t\t.encrypt\t\t= ecb3_encrypt,\n-\t\t.decrypt\t\t= ecb3_decrypt,\n-\t}, {\n-\t\t.base.cra_name\t\t= \"cbc(des3_ede)\",\n-\t\t.base.cra_driver_name\t= \"cbc-des3_ede-sparc64\",\n-\t\t.base.cra_priority\t= SPARC_CR_OPCODE_PRIORITY,\n-\t\t.base.cra_blocksize\t= DES3_EDE_BLOCK_SIZE,\n-\t\t.base.cra_ctxsize\t= sizeof(struct des3_ede_sparc64_ctx),\n-\t\t.base.cra_alignmask\t= 7,\n-\t\t.base.cra_module\t= THIS_MODULE,\n-\t\t.min_keysize\t\t= DES3_EDE_KEY_SIZE,\n-\t\t.max_keysize\t\t= DES3_EDE_KEY_SIZE,\n-\t\t.ivsize\t\t\t= DES3_EDE_BLOCK_SIZE,\n-\t\t.setkey\t\t\t= des3_ede_set_key_skcipher,\n-\t\t.encrypt\t\t= cbc3_encrypt,\n-\t\t.decrypt\t\t= cbc3_decrypt,\n-\t}\n-};\n-\n-static bool __init sparc64_has_des_opcode(void)\n-{\n-\tunsigned long cfr;\n-\n-\tif (!(sparc64_elf_hwcap & HWCAP_SPARC_CRYPTO))\n-\t\treturn false;\n-\n-\t__asm__ __volatile__(\"rd %%asr26, %0\" : \"=r\" (cfr));\n-\tif (!(cfr & CFR_DES))\n-\t\treturn false;\n-\n-\treturn true;\n-}\n-\n-static int __init des_sparc64_mod_init(void)\n-{\n-\tint err;\n-\n-\tif (!sparc64_has_des_opcode()) {\n-\t\tpr_info(\"sparc64 des opcodes not available.\\n\");\n-\t\treturn -ENODEV;\n-\t}\n-\tpr_info(\"Using sparc64 des opcodes optimized DES implementation\\n\");\n-\terr = crypto_register_algs(cipher_algs, ARRAY_SIZE(cipher_algs));\n-\tif (err)\n-\t\treturn err;\n-\terr = crypto_register_skciphers(skcipher_algs,\n-\t\t\t\t\tARRAY_SIZE(skcipher_algs));\n-\tif (err)\n-\t\tcrypto_unregister_algs(cipher_algs, ARRAY_SIZE(cipher_algs));\n-\treturn err;\n-}\n-\n-static void __exit des_sparc64_mod_fini(void)\n-{\n-\tcrypto_unregister_algs(cipher_algs, ARRAY_SIZE(cipher_algs));\n-\tcrypto_unregister_skciphers(skcipher_algs, ARRAY_SIZE(skcipher_algs));\n-}\n-\n-module_init(des_sparc64_mod_init);\n-module_exit(des_sparc64_mod_fini);\n-\n-MODULE_LICENSE(\"GPL\");\n-MODULE_DESCRIPTION(\"DES & Triple DES EDE Cipher Algorithms, sparc64 des opcode accelerated\");\n-\n-MODULE_ALIAS_CRYPTO(\"des\");\n-MODULE_ALIAS_CRYPTO(\"des3_ede\");\n-\n-#include \"crop_devid.c\"\n",
    "prefixes": [
        "2/3"
    ]
}