From patchwork Tue Jan 31 00:18:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 13122094 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3F57EC636D6 for ; Tue, 31 Jan 2023 00:20:29 +0000 (UTC) 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:In-Reply-To:References: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: List-Owner; bh=G+734kT3xx2VlcRRLQ7Pw8LzhL8VmVA/PKIPmWtLNAQ=; b=Wf1oZpCShP5vgM eQF6E/4jneadabF3nCkElCA7kmzNBCoO/Qw9h+53VNHeGtG3Gs9snFW8cwaWCW7hlYgrOP9ontVTo MVooOGw6NOYuQRfQmlebvR49mHs2db3Du3a5PM1eNKeEeoIwr+Rm4TrxadDbJ524fHtZM4xpUjjAc pUe8auIMjO4zCgR99vpUfTyvo9yag3y+AdyiKyzj4D5u9EaWUBex4dEJDbNUn0t4rHnV4//+D5ZTA rmIyul2YXn8TfQHwbUbVUCcx5iDctlaWk9yeQfWSLLcRyWVNQpMyabBgRr4eoOmx6DSoL2tLh6tmx eNaLZoIsPUiBm3kMynZg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pMeMl-005rFi-TC; Tue, 31 Jan 2023 00:19:16 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pMeMY-005rDU-Pv for linux-arm-kernel@lists.infradead.org; Tue, 31 Jan 2023 00:19:04 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 670DF61314; Tue, 31 Jan 2023 00:19:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40FA6C4339C; Tue, 31 Jan 2023 00:19:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1675124341; bh=m8cRG5J5CU3+v22jhKANeRH3MCUcNQv0IfTj/2uE4Eg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fnOkCtVqo5TLMy+NW8KQ432uxT2xlygjBSGXljzXNkac6zaZ8gxd23JkA8iaUzDsS opDXLcEl4PLeVeJp7XZq4j4P4ALk4YSHNP8fJlLQt5oaqJq/jz5PMmtr4GIfAd+ZB7 QRAv/ipy2MD86d7WVhPuOKrWWbmExrAktr6cxFFQEex5SimNBsoHQIEkNJ1WeN7byP Zr6K8u5TAxEmy0Yc0rr8/wjwLj9/EFyOIZJMI/20oqtGzqP1BkG1j8zgKpTit2SO70 HXRnjVUSFmwNmINVnXAlL9xDGfCaJ/hyKUow+PyzI5Oi76xW+7ZjicpVih86qfY96n IE6uMsl7W0Euw== From: Mark Brown Date: Tue, 31 Jan 2023 00:18:43 +0000 Subject: [PATCH v4 1/5] arm64/sysreg: Allow enumerations to be declared as signed or unsigned MIME-Version: 1.0 Message-Id: <20221207-arm64-sysreg-helpers-v4-1-25b6b3fb9d18@kernel.org> References: <20221207-arm64-sysreg-helpers-v4-0-25b6b3fb9d18@kernel.org> In-Reply-To: <20221207-arm64-sysreg-helpers-v4-0-25b6b3fb9d18@kernel.org> To: Catalin Marinas , Will Deacon Cc: Suzuki K Poulose , James Morse , Mark Rutland , Amit Daniel Kachhap , linux-arm-kernel@lists.infradead.org, Mark Brown X-Mailer: b4 0.12.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2126; i=broonie@kernel.org; h=from:subject:message-id; bh=m8cRG5J5CU3+v22jhKANeRH3MCUcNQv0IfTj/2uE4Eg=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBj2F5uBqTvkrOkqNIpOACsrsfo0bKYmMmJfeEf7M7q 3vqCR+2JATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCY9hebgAKCRAk1otyXVSH0EdSB/ 94tnHh/lheVKNgdrYQ15uL7ivmLJOIIv+Dkbzj59Xf3wxAMt8Q9SICaNIwDwFVaYMMJd2b9P9aDYSG geJPwyKXu+deOgANQVTa47m2yVvcNjKgeosrcpHMw9pMtf5RH595/f6+0zgPf0YrDG+bsIGLWilS2P ewIbbqWHmAS0zwQY16BPtFNatCT22IEXPgkv6W8gmkdZIoQO/tYK9qWOLYtaLR4FQKI/fJef/gmCqM oFFzfjONIev6J9JVNYjtVJA27QzEBPeBs0Vn/tnzWXKE3v8wnGhZJpdxTiJCYgGpLHWwT0xdFZ9aoV OGpDcEUVMY+O+o0wJUz526sIVaVNl+ X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230130_161902_946067_393180B8 X-CRM114-Status: GOOD ( 12.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Many of our enumerations follow a standard scheme where the values can be treated as signed however there are some where the value must be treated as signed and others that are simple enumerations where there is no clear ordering to the values. Provide new field types SignedEnum and UnsignedEnum which allows the signedness to be specified in the sysreg definition and emit a REG_FIELD_SIGNED define for these which is a boolean corresponding to our current FTR_UNSIGNED and FTR_SIGNED macros. Existing Enums will need to be converted, since these do not have a define generated anyone wishing to use the sign of one of these will need to explicitly annotate that field so nothing should start going wrong by default. Acked-by: Mark Rutland Signed-off-by: Mark Brown --- arch/arm64/tools/gen-sysreg.awk | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/arch/arm64/tools/gen-sysreg.awk b/arch/arm64/tools/gen-sysreg.awk index c350164a3955..7f27d66a17e1 100755 --- a/arch/arm64/tools/gen-sysreg.awk +++ b/arch/arm64/tools/gen-sysreg.awk @@ -44,6 +44,11 @@ function define_field(reg, field, msb, lsb) { define(reg "_" field "_WIDTH", msb - lsb + 1) } +# Print a field _SIGNED definition for a field +function define_field_sign(reg, field, sign) { + define(reg "_" field "_SIGNED", sign) +} + # Parse a "[:]" string into the global variables @msb and @lsb function parse_bitdef(reg, field, bitdef, _bits) { @@ -233,6 +238,30 @@ END { next } +/^SignedEnum/ { + change_block("Enum<", "Sysreg", "Enum") + expect_fields(3) + field = $3 + parse_bitdef(reg, field, $2) + + define_field(reg, field, msb, lsb) + define_field_sign(reg, field, "true") + + next +} + +/^UnsignedEnum/ { + change_block("Enum<", "Sysreg", "Enum") + expect_fields(3) + field = $3 + parse_bitdef(reg, field, $2) + + define_field(reg, field, msb, lsb) + define_field_sign(reg, field, "false") + + next +} + /^Enum/ { change_block("Enum", "Sysreg", "Enum") expect_fields(3)