From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F765C433DB for ; Tue, 5 Jan 2021 16:37:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2F95322CB3 for ; Tue, 5 Jan 2021 16:37:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728477AbhAEQhp (ORCPT ); Tue, 5 Jan 2021 11:37:45 -0500 Received: from foss.arm.com ([217.140.110.172]:57214 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726132AbhAEQhp (ORCPT ); Tue, 5 Jan 2021 11:37:45 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1533A1FB; Tue, 5 Jan 2021 08:36:59 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.195.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 321C63F70D; Tue, 5 Jan 2021 08:36:57 -0800 (PST) From: Andre Przywara To: Will Deacon , Catalin Marinas , Ard Biesheuvel , Russell King , Marc Zyngier Cc: Theodore Ts'o , Sudeep Holla , Mark Rutland , Mark Brown , Lorenzo Pieralisi , Linus Walleij , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org Subject: [PATCH v5 0/5] ARM: arm64: Add SMCCC TRNG entropy service Date: Tue, 5 Jan 2021 16:36:47 +0000 Message-Id: <20210105163652.23646-1-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, a small update to v4, also observing the priority of SMCCC vs. RNDR in the early version of the function (as reported by broonie). Plus adding review tags and rebasing on v5.11-rc2. Changelog below. Will, Catalin: it would be much appreciated if you could consider taking patch 1/5. This contains the common definitions, and is a prerequisite for every other patch, although they are somewhat independent and likely will need to go through different subsystems. Cheers, Andre ============================== The ARM architected TRNG firmware interface, described in ARM spec DEN0098[1], defines an ARM SMCCC based interface to a true random number generator, provided by firmware. This series collects all the patches implementing this in various places: as a user feeding into the ARCH_RANDOM pool, both for ARM and arm64, and as a service provider for KVM guests. Patch 1 introduces the interface definition used by all three entities. Patch 2 prepares the Arm SMCCC firmware driver to probe for the interface. This patch is needed to avoid a later dependency on *two* patches (there might be a better solution to this problem). Patch 3 implements the ARM part, patch 4 is the arm64 version. The final patch 5 adds support to provide random numbers to KVM guests. This was tested on: - QEMU -kernel (no SMCCC, regression test) - Juno w/ prototype of the h/w Trusted RNG support - mainline KVM (SMCCC, but no TRNG: regression test) - ARM and arm64 KVM guests, using the KVM service in patch 5/5 Based on v5.11-rc2, please let me know if I should rebase it on something else. A git repo is accessible at: https://gitlab.arm.com/linux-arm/linux-ap/-/commits/smccc-trng/v5/ Cheers, Andre [1] https://developer.arm.com/documentation/den0098/latest/ Changelog v4 ... v5: - change order of SMCCC call vs. RNDR call in arch_get_random_seed_long_early - adding Sudeep's R-b: tags Changelog v3 ... v4: - include cache.h to always have __ro_after_init defined - change order of SMCCC call vs. RNDR call in arm64's archrandom.h - adding LinusW's R-b: tags Changelog v2 ... v3: - ARM: fix compilation with randconfig - arm64: use SMCCC call also in arch_get_random_seed_long_early() - KVM: comment on return value usage - KVM: use more interesting UUID (enjoy, Marc!) - KVM: use bitmaps instead of open coded long arrays - KVM: drop direct usage of arch_get_random() interface Changelog "v1" ... v2: - trigger ARCH_RANDOM initialisation from the SMCCC firmware driver - use a single bool in smccc.c to hold the initialisation state for arm64 - handle endianess correctly in the KVM provider Andre Przywara (2): firmware: smccc: Introduce SMCCC TRNG framework arm64: Add support for SMCCC TRNG entropy source Ard Biesheuvel (3): firmware: smccc: Add SMCCC TRNG function call IDs ARM: implement support for SMCCC TRNG entropy source KVM: arm64: implement the TRNG hypervisor call arch/arm/Kconfig | 4 ++ arch/arm/include/asm/archrandom.h | 74 +++++++++++++++++++++++++ arch/arm64/include/asm/archrandom.h | 82 ++++++++++++++++++++++++---- arch/arm64/include/asm/kvm_host.h | 2 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/hypercalls.c | 6 ++ arch/arm64/kvm/trng.c | 85 +++++++++++++++++++++++++++++ drivers/firmware/smccc/smccc.c | 6 ++ include/linux/arm-smccc.h | 31 +++++++++++ 9 files changed, 281 insertions(+), 11 deletions(-) create mode 100644 arch/arm/include/asm/archrandom.h create mode 100644 arch/arm64/kvm/trng.c -- 2.17.1