From patchwork Sat Jul 6 23:48:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cade Richard X-Patchwork-Id: 1957642 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=rj7BYLlA; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=A2cuYT48; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WGnCR62byz1xr7 for ; Sun, 7 Jul 2024 09:48:51 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Message-Id:MIME-Version:Subject: Date:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=ZLftudUWc/ZJ5TtIb9D1aL5RxvLKGDlR4JgtaUpnMnM=; b=rj7BYLlAdV3Bp/ e68MsITWSaML918w2ItQhKDEnX9KSCAo86w+7A3hB5w/TJnfrELoJJJXdx/f0vy3L1e+8M/QYpCmp xP3qFDaWnqytQJY6a86yfLhWEYVWqCyC4AplO9kDC+lVEg3M1sdBzivdRSKnM8/iyspKzg7im9mKc t2QCWEQ9zMQy+WPco37YFz2SYlYgulgfeRt9sBN/uaVKw7ynkosic1NbCUI3GsPgxP2jM0JHt4jPw IGrvi6SYsuunHhtAAPFgvPPwWQoBqhpw0MoJ8wHdK+qhsTVlQKGW7tUCjKfP9zpufkoZgdL/JDC52 KvLn76TWEZ2Q8aJz+l0w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQF98-000000014yx-2PQY; Sat, 06 Jul 2024 23:48:50 +0000 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQF94-000000014yE-3Or7 for kvm-riscv@lists.infradead.org; Sat, 06 Jul 2024 23:48:48 +0000 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-7515437ff16so1795971a12.2 for ; Sat, 06 Jul 2024 16:48:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720309726; x=1720914526; darn=lists.infradead.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Mghg7f2ee8jgMSe4q+5emCfOCWip+frGRaZu05S8tC4=; b=A2cuYT488ZOLr2AJHukyPF3Mm15QZVg4xpn9HrZEkJ4nASS042XceKHejHx6tkURmG ZGxmkM7KBsYrc25/bgJP2DatIVrMeYgPb7jqeiHF4zKErXgDddPHmu4zw7CcQSQMmeUU rYtzeD9yA6tAuxbxLR9Uq4luZrKhIzVC095QMRhJ0thHYKWxreZ4++9XbBqtZb7S18Cf mS8dMq0gfXSjqUCUqvDySSTeElHJLOC4QfsdNQ7zlDEMTXmsy/NHig/jkH+TPjffpwaN NrGsXPmTvpLLd5gfz0prIm+kh152QrzMkUhKyhkdjsRL2bomTRYJFS9iXfiLnOWsCrhs jyvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720309726; x=1720914526; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Mghg7f2ee8jgMSe4q+5emCfOCWip+frGRaZu05S8tC4=; b=v1ui72nF0r+YsRZL9uP6NBkf8aARo+Y0Y6Qwp9AsNwl7G5HAF33Zvczo4RrnpJL8QE tv6JzvgnEJknIqiW5uZ/8osyUYLOUlNOuCrKISH7Uy1fQg7UlTOksr/dhn+HG7oWMyQN RwNvLnVi8VYqLWz84LZg82xtXpzxw+EH1Kt/74dcdIRyXUa/ng336NgzEgxA/TpOaffD CbjXf6LQXsjfvS4rn+l9PF83/srbgdt0OmIPVNoxmHfQieA+rVzxqatJVokSGL5IzE0d /+pCdEawCu//EvvOW0bJ0Tlh5AG+UggEV1xFYnvgNLqgZxoSu3KptVHjqnr6NDFN7ibI ALNA== X-Forwarded-Encrypted: i=1; AJvYcCVOFH/qDha89j4ZmbORL6p5HFpa0/mnjdEsJcOsxTm9ie8jL0W6wqG0LDZRlTUnIFlFURipk/ujqFsr80o/H6E/A/u9O3DCYsXxNbpwlg== X-Gm-Message-State: AOJu0YzSTg1PO5DzQHTONGaRbm11sU45bQZbJrtqhcsRGDzvpRbLWzCG V2NMmF/ARHFu14IIDxVIpqytnh1AZaZZh8Y44T34N7aCL2k58f+m X-Google-Smtp-Source: AGHT+IEbxO/7OSoMR/865Iu//yNuzmE9aWo6vQZK/9xlvhxqZKXVIQLIRRXEQarmSizmYZkTV5a04g== X-Received: by 2002:a05:6a20:2446:b0:1be:ca24:964c with SMTP id adf61e73a8af0-1c0cc8784e7mr12075064637.16.1720309725765; Sat, 06 Jul 2024 16:48:45 -0700 (PDT) Received: from [127.0.1.1] (23-93-181-73.fiber.dynamic.sonic.net. [23.93.181.73]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2c99aa0ae28sm5531726a91.45.2024.07.06.16.48.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jul 2024 16:48:45 -0700 (PDT) From: Cade Richard X-Google-Original-From: Cade Richard Date: Sat, 06 Jul 2024 16:48:44 -0700 Subject: [PATCH kvm-unit-tests] riscv: sbi: debug console write tests MIME-Version: 1.0 Message-Id: <20240706-sbi-dbcn-write-tests-v1-1-b754e51699f8@berkeley.edu> X-B4-Tracking: v=1; b=H4sIANvXiWYC/x3MQQ5AMBBA0avIrE3SlqCuIhbolNmUdBok4u4ay 7f4/wGhyCTQFw9EOll4Dxm6LGDZprASsssGo0ytWtWgzIxuXgJekRNhIkmCtTGd9bqymhzk9Ij k+f63w/i+H/fb7N9mAAAA To: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org Cc: andrew.jones@linux.dev, atishp@rivosinc.com, cade.richard@berkeley.edu, jamestiotio@gmail.com X-Mailer: b4 0.13.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240706_164846_897747_6739F9DB X-CRM114-Status: GOOD ( 10.66 ) X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: --- Signed-off-by: Cade Richard --- lib/riscv/asm/sbi.h | 7 +++++++ riscv/sbi.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/lib/riscv/asm/sbi.h b/lib/riscv/asm/sbi.h index d82a384d..c5fa84ae 100644 --- a/lib/riscv/asm/sbi.h +++ b/lib/riscv/asm/sbi.h @@ -18,6 +18,7 @@ enum sbi_ext_id { SBI_EXT_BASE = 0x10, SBI_ [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:530 listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [cade.richard(at)gmail.com] X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org --- Signed-off-by: Cade Richard --- lib/riscv/asm/sbi.h | 7 +++++++ riscv/sbi.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) --- base-commit: 40e1fd76ffc80b1d43214e31a023aaf087ece987 change-id: 20240706-sbi-dbcn-write-tests-42289f1391ed Best regards, diff --git a/lib/riscv/asm/sbi.h b/lib/riscv/asm/sbi.h index d82a384d..c5fa84ae 100644 --- a/lib/riscv/asm/sbi.h +++ b/lib/riscv/asm/sbi.h @@ -18,6 +18,7 @@ enum sbi_ext_id { SBI_EXT_BASE = 0x10, SBI_EXT_HSM = 0x48534d, SBI_EXT_SRST = 0x53525354, + SBI_EXT_DBCN = 0x4442434E, }; enum sbi_ext_base_fid { @@ -37,6 +38,12 @@ enum sbi_ext_hsm_fid { SBI_EXT_HSM_HART_SUSPEND, }; +enum sbi_ext_dbcn_fid { + SBI_EXT_DBCN_CONSOLE_WRITE = 0, + SBI_EXT_DBCN_CONSOLE_READ, + SBI_EXT_DBCN_CONSOLE_WRITE_BYTE, +}; + struct sbiret { long error; long value; diff --git a/riscv/sbi.c b/riscv/sbi.c index 762e9711..b93ef5d8 100644 --- a/riscv/sbi.c +++ b/riscv/sbi.c @@ -7,6 +7,10 @@ #include #include #include +#include + +#define DBCN_WRITE_TEST_STRING "DBCN_WRITE_TEST_STRING\n" +#define DBCN_WRITE_BYTE_TEST_BYTE (u8)'a' static void help(void) { @@ -19,6 +23,11 @@ static struct sbiret __base_sbi_ecall(int fid, unsigned long arg0) return sbi_ecall(SBI_EXT_BASE, fid, arg0, 0, 0, 0, 0, 0); } +static struct sbiret __dbcn_sbi_ecall(int fid, unsigned long arg0, unsigned long arg1, unsigned long arg2) +{ + return sbi_ecall(SBI_EXT_DBCN, fid, arg0, arg1, arg2, 0, 0, 0); +} + static bool env_or_skip(const char *env) { if (!getenv(env)) { @@ -112,6 +121,55 @@ static void check_base(void) report_prefix_pop(); } +static void check_dbcn(void) +{ + + struct sbiret ret; + unsigned long num_bytes, base_addr_lo, base_addr_hi; + + report_prefix_push("dbcn"); + + ret = __base_sbi_ecall(SBI_EXT_BASE_PROBE_EXT, SBI_EXT_DBCN); + if (!ret.value) { + report_skip("DBCN extension unavailable"); + report_prefix_pop(); + return; + } + + report_prefix_push("write"); + + num_bytes = strlen(DBCN_WRITE_TEST_STRING); + base_addr_hi = 0x0; + base_addr_lo = virt_to_phys((void *) &DBCN_WRITE_TEST_STRING); + + do { + ret = __dbcn_sbi_ecall(SBI_EXT_DBCN_CONSOLE_WRITE, num_bytes, base_addr_lo, base_addr_hi); + num_bytes -= ret.value; + base_addr_lo += ret.value; + } while (num_bytes != 0 && ret.error == SBI_SUCCESS) ; + report(SBI_SUCCESS == ret.error, "write success"); + report(ret.value == num_bytes, "correct number of bytes written"); + + // Bytes are read from memory and written to the console + if (env_or_skip("INVALID_READ_ADDR")) { + base_addr_lo = strtol(getenv("INVALID_READ_ADDR"), NULL, 0); + ret = __dbcn_sbi_ecall(SBI_EXT_DBCN_CONSOLE_WRITE, num_bytes, base_addr_lo, base_addr_hi); + report(ret.error == SBI_ERR_INVALID_PARAM, "invalid parameter: address"); + }; + + report_prefix_pop(); + + report_prefix_push("write_byte"); + + puts("DBCN_WRITE TEST CHAR: "); + ret = __dbcn_sbi_ecall(SBI_EXT_DBCN_CONSOLE_WRITE_BYTE, (u8)DBCN_WRITE_BYTE_TEST_BYTE, 0, 0); + puts("\n"); + report(ret.error == SBI_SUCCESS, "write success"); + report(ret.value == 0, "expected ret.value"); + + report_prefix_pop(); +} + int main(int argc, char **argv) { @@ -122,6 +180,7 @@ int main(int argc, char **argv) report_prefix_push("sbi"); check_base(); + check_dbcn(); return report_summary(); }