From nobody Thu Apr 11 09:59:22 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4VFZt26TLTz5H7b5; Thu, 11 Apr 2024 09:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4VFZt25gN5z4kjn; Thu, 11 Apr 2024 09:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1712829562; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=g5yuuiUaB0Os3JzBByL1ZVed/dYjlloY3VWE0ZR69Jo=; b=CnURqwu+93+AxLkAqweAx5Xz7xcNm0WhuQ2zmQ49Khd0/G8YC0/1FrLiLwSP/MKGBv/U3t RWAc+npadEPaceMv7DKc34UChZZbJoF2pgXgP5lub9igaqvAj4fyR3eGBPbDjyRpzyRHFz 581lx99kTYUiif94L0MhJUu1tVJWyHYbfrRyiISKghNovp8K/VmS/voIHoCf0eBuhb0chn i4jzwoShKAT3fBMtUfVSFduV0kqeSM5xfiFT/hP+Hoxq3b7FGBH9dvUnD8R9iagSf/kboZ zbeeroezrlKoCeKC5m91SdQx3Q/FYVS7F4l+cg8dQ5RlITMuw9wgNYKYh31TRQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1712829562; a=rsa-sha256; cv=none; b=fSq8Q1eIr0rtiNrr2HDFUM6J+f4/SF7d9VsAotdIpTJomYExl819ovc171Db0DdVCCAgMD sfIso9eDloCS9QK4f6jh/NmBV/N/DVXKy/t0UASoakTgtfonH+9s2ndNidigTnCIp18eeD 0l2XbKFZrlErrz9511jojGLdzXiL4kf8/PR/j2MkuN/YMpd/GdYcHNbW0Gd6BZNWYTwyCW SNDXGq3pWc4yQxdAeQG6DqjubJHOOOcLFmn5Eg/8XEuDFlVonKiF6Ad7ipQzd8eWVDIHzR 6PdrQ8M0aLi95Jdh4nqyp1SpJFaeT4u88utWOXI0H0D478yrjos7XJDeYt3N0g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1712829562; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=g5yuuiUaB0Os3JzBByL1ZVed/dYjlloY3VWE0ZR69Jo=; b=XyKmPzGevlfV+yywAOQwlILKTJmaqZiH0+FcfVMHlDdesjrArXEt5YLPIKHWFDN2UCYdWr km4XWWkb+mwm1Mkuu1raLJwhThbQ8Uunae+O6gwQaFXQCSunIO8YelfvhVvrXLHknWGP5l TmNVIZq4CVmYUR51P5VQi/hnck9vV9qXj755rHR3TpaZyRQJoNH1gHZR1fMlNSEbypkjAx EbSoBywtO3CnZ/XZ0VtS3WptbUOFuY8AWIwz8cBFgbNRbriqZevtrTET1h367CDbeIUpSE j6PfWhBMmk/Z5/acQh/4/AGgwdEOQPXzokgD9SRWG4bvq7UwB3YbQC5Qh4dxaw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4VFZt25Hghz1Gb0; Thu, 11 Apr 2024 09:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 43B9xMBe090428; Thu, 11 Apr 2024 09:59:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 43B9xMwK090425; Thu, 11 Apr 2024 09:59:22 GMT (envelope-from git) Date: Thu, 11 Apr 2024 09:59:22 GMT Message-Id: <202404110959.43B9xMwK090425@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 5ea251c4ed6e - main - scmi: Add an SCMI SMC transport driver List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: dev-commits-src-all+owner@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5ea251c4ed6e511050037db62600ddf815b623d2 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=5ea251c4ed6e511050037db62600ddf815b623d2 commit 5ea251c4ed6e511050037db62600ddf815b623d2 Author: Andrew Turner AuthorDate: 2023-10-04 13:00:50 +0000 Commit: Andrew Turner CommitDate: 2024-04-11 09:58:56 +0000 scmi: Add an SCMI SMC transport driver Using the SCMI transport interface add a new SMC transport to the SCMI stack. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43040 --- sys/conf/files.arm64 | 1 + sys/dev/firmware/arm/scmi_smc.c | 131 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64 index 5541a18af659..a22ffa2b7f0c 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -274,6 +274,7 @@ dev/firmware/arm/scmi.c optional fdt scmi dev/firmware/arm/scmi_clk.c optional fdt scmi dev/firmware/arm/scmi_if.m optional fdt scmi dev/firmware/arm/scmi_mailbox.c optional fdt scmi +dev/firmware/arm/scmi_smc.c optional fdt scmi dev/firmware/arm/scmi_shmem.c optional fdt scmi dev/gpio/pl061.c optional pl061 gpio diff --git a/sys/dev/firmware/arm/scmi_smc.c b/sys/dev/firmware/arm/scmi_smc.c new file mode 100644 index 000000000000..ff5f4a2d1491 --- /dev/null +++ b/sys/dev/firmware/arm/scmi_smc.c @@ -0,0 +1,131 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2022 Ruslan Bukin + * Copyright (c) 2023 Arm Ltd + * + * This work was supported by Innovate UK project 105694, "Digital Security + * by Design (DSbD) Technology Platform Prototype". + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "scmi.h" +#include "scmi_protocols.h" + +struct scmi_smc_softc { + struct scmi_softc base; + uint32_t smc_id; +}; + +static int +scmi_smc_xfer_msg(device_t dev) +{ + struct scmi_smc_softc *sc; + + sc = device_get_softc(dev); + SCMI_ASSERT_LOCKED(&sc->base); + + arm_smccc_smc(sc->smc_id, 0, 0, 0, 0, 0, 0, 0, NULL); + + return (0); +} + +static int +scmi_smc_probe(device_t dev) +{ + + if (!ofw_bus_is_compatible(dev, "arm,scmi-smc")) + return (ENXIO); + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + device_set_desc(dev, "ARM SCMI SCM interface driver"); + + return (BUS_PROBE_DEFAULT); +} + +static int +scmi_smc_attach(device_t dev) +{ + struct scmi_smc_softc *sc; + phandle_t node; + ssize_t len; + + sc = device_get_softc(dev); + + node = ofw_bus_get_node(dev); + len = OF_getencprop(node, "arm,smc-id", &sc->smc_id, + sizeof(sc->smc_id)); + if (len <= 0) { + device_printf(dev, "No SMC ID found\n"); + return (EINVAL); + } + + device_printf(dev, "smc id %x\n", sc->smc_id); + + return (scmi_attach(dev)); +} + +static int +scmi_smc_detach(device_t dev) +{ + + return (0); +} + +static device_method_t scmi_smc_methods[] = { + DEVMETHOD(device_probe, scmi_smc_probe), + DEVMETHOD(device_attach, scmi_smc_attach), + DEVMETHOD(device_detach, scmi_smc_detach), + + /* SCMI interface */ + DEVMETHOD(scmi_xfer_msg, scmi_smc_xfer_msg), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(scmi_smc, scmi_smc_driver, scmi_smc_methods, + sizeof(struct scmi_smc_softc), scmi_driver); + +/* Needs to be after the mmio_sram driver */ +EARLY_DRIVER_MODULE(scmi_smc, simplebus, scmi_smc_driver, 0, 0, + BUS_PASS_SUPPORTDEV + BUS_PASS_ORDER_LATE); +MODULE_VERSION(scmi_smc, 1);