From nobody Mon Dec 20 13:59:18 2021 X-Original-To: dev-commits-src-main@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 9B20118FBF64; Mon, 20 Dec 2021 13:59:19 +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 4JHh5y6D21z3Dtr; Mon, 20 Dec 2021 13:59:18 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 8C79117982; Mon, 20 Dec 2021 13:59:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1BKDxI9M029324; Mon, 20 Dec 2021 13:59:18 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1BKDxIlh029323; Mon, 20 Dec 2021 13:59:18 GMT (envelope-from git) Date: Mon, 20 Dec 2021 13:59:18 GMT Message-Id: <202112201359.1BKDxIlh029323@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: c399283c71e3 - main - Add an loader command on arm64 to sync the cache List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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: c399283c71e310e1573e8d27f9cb9d27a4ea3376 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1640008758; 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=NX3hfK7ovwouhBicS/35PfVtiGz5BhhglXRdwrMHqec=; b=IjtV1xEkP8hCrKjwMexW1P03n/Hb/aQ7UG9w9qOxrhmyoQxHnIPkS4/go1SncnxAaW7WUb 4ByeiWMgVvSOAuTEGTRuux/rDWlEDN+MgMQB+hETITo6MYhN+kILPB/DgB4UB1QpGE9B/C hwwRFfEwmjLp52GnGNRmzOBu7sW+gqY5dhNzPf7XcA1PE/j01BIfBAoy3u8E6lhcTiBG39 vi0in5OHDKW0jg0s7WRLkIT/QXfPyvTYe79XLdRzCjS+SLe5vW8GscyjDt1Pb/06o6HD4Z eM/iYw8VB6Umyw+1cxMxLdXsEfRsf5ev+xsvH3wjzWbxkpQrV2nwEuGOr7eVuA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1640008758; a=rsa-sha256; cv=none; b=pGQujFDuI9yMKmz38ipy4I9dptJJQL/m9UYLb8OizOubipNB5G2gNyPRGUSn4I9yWb5MiE 0pwtOyY7dHcW2ZCMeG0NdtdB0kW+WNzgdxZCUXHGM024MaTcjMSfH7MOKrajCzUlrWFMMG Zir1YcYvRC1JixFs3UZAFCqDL8d/cHucgsFczZ3WF7ZwyPlnfBfBw7HsYjGi6L0RjiAkT4 iENZkLzHGt4wLtIValQRFW3OmZFLfkg/0Rd5Qi+zD9BuTkC2eJN2X+hF/9BTursxX11K0M viyiUUPkXN6mwD5cZKvcLTm2ZGpV5FuWH0jIAEAajtf2vMYLaqTD9mW6fmjHnQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=c399283c71e310e1573e8d27f9cb9d27a4ea3376 commit c399283c71e310e1573e8d27f9cb9d27a4ea3376 Author: Andrew Turner AuthorDate: 2021-12-20 13:42:15 +0000 Commit: Andrew Turner CommitDate: 2021-12-20 13:58:36 +0000 Add an loader command on arm64 to sync the cache On boot we don't need to perform any CPU cache management when the IDC and DIC fields in the ctr_el0 register are set. Add a command to tell loader to ignore these fields. This could be useful, for example, if the hardware is misreporting the values and we are missing a quirk to enable it. It is not expected this will be needed, but is only intended as a workaround to ensure the kernel can still boot. Sponsored by: The FreeBSD Foundation --- stand/arm64/libarm64/cache.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/stand/arm64/libarm64/cache.c b/stand/arm64/libarm64/cache.c index ff52572399ac..105e08cb4257 100644 --- a/stand/arm64/libarm64/cache.c +++ b/stand/arm64/libarm64/cache.c @@ -37,17 +37,30 @@ __FBSDID("$FreeBSD$"); #include #include +#include "bootstrap.h" #include "cache.h" +static long cache_flags; +#define CACHE_FLAG_DIC_OFF (1<<0) +#define CACHE_FLAG_IDC_OFF (1<<1) + static bool get_cache_dic(uint64_t ctr) { + if ((cache_flags & CACHE_FLAG_DIC_OFF) != 0) { + return (false); + } + return (CTR_DIC_VAL(ctr) != 0); } static bool get_cache_idc(uint64_t ctr) { + if ((cache_flags & CACHE_FLAG_IDC_OFF) != 0) { + return (false); + } + return (CTR_IDC_VAL(ctr) != 0); } @@ -112,3 +125,28 @@ cpu_inval_icache(void) : : : "memory"); } } + +static int +command_cache_flags(int argc, char *argv[]) +{ + char *cp; + long new_flags; + + if (argc == 3) { + if (strcmp(argv[1], "set") == 0) { + new_flags = strtol(argv[2], &cp, 0); + if (cp[0] != '\0') { + printf("Invalid flags\n"); + } else { + printf("Setting cache flags to %#lx\n", + new_flags); + cache_flags = new_flags; + return (CMD_OK); + } + } + } + + printf("usage: cache_flags set \n"); + return (CMD_ERROR); +} +COMMAND_SET(cache_flags, "cache_flags", "Set cache flags", command_cache_flags);