From patchwork Fri Jan 12 17:02:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 10161407 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 48F53602A7 for ; Fri, 12 Jan 2018 17:02:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36CA4288BC for ; Fri, 12 Jan 2018 17:02:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B7A7289B5; Fri, 12 Jan 2018 17:02:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 92FAC288BC for ; Fri, 12 Jan 2018 17:02:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CB2B46E8C7; Fri, 12 Jan 2018 17:02:27 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qt0-x241.google.com (mail-qt0-x241.google.com [IPv6:2607:f8b0:400d:c0d::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 755636E8FB; Fri, 12 Jan 2018 17:02:26 +0000 (UTC) Received: by mail-qt0-x241.google.com with SMTP id c2so6802153qtn.9; Fri, 12 Jan 2018 09:02:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Wvprxivei8D6M4s9E+HY4ykYO5SYrKxrshzP7TTxWxM=; b=UFo+40VScPl7Bb3OHhO19MWd9nMzB3SIfndhwohBbzL4lx45dmF7tsGSSVMR7bhyPv QvTj3EaDllBibiW/dN5JDPrLThSSvyK+iUpB1r7CBSDxxgXEVuAclVHA/wthWafrWqTQ rVJSWDPdmY8gV2nK7kjxKVaD0GVlIVGeGzGGNFhP6WYpP321dl1X5Y6uItkfQwvZldIM 41aMHmSHpqzMxBX4jDhcxJk38pw1lTu8QdYO98GrMI/FhlxJZHDXK8e+BZFcq8SC7ExX M2sZjY+wLBST6k7yZTFkaAKOCduGHeRGK/WQ1Z9aUczbjDpuwIowI7nrep6cweLemCVS D2kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Wvprxivei8D6M4s9E+HY4ykYO5SYrKxrshzP7TTxWxM=; b=USVHE/MAk2Zme2kBq3P0GjRJtwgnT7AQWELHCwJ5nDzZR8A8ZNhKxKhtEhsHb7owE/ 6Zw3MKqELctmk5u7ZSKrWLB5U/lBms06GSXR4XBfSFVCI9HnYZxqG0UvLWbsVNFZa5lw cbQ8AnIDZv02jCwJTyQj/2iidZAN3vuFmmpI3Jj5j080uzxjL33cGHmQS/Op6SZk61Am i8r5Q/m5Ffd4WpO2jz0rPKlMXwum2Dy8zKOF3CkoU8X/+b47/IiV5a+4h3+muoyKXJ/x 1zXWljCL2Xgk5rK6VlvyUb62VUf/K+BZ9RrpoTJnONAK986p4+AyEInPrZd9uZYiFFyS L31w== X-Gm-Message-State: AKwxytf4uA3CYbUOrz22m/2EDQ1b6K038loX/ueM2RudaFjuWm9iaR1T LMGQEjwohMcjJYokENpCjdnwyQ== X-Google-Smtp-Source: ACJfBotRSAyuUjtH3sojK9boah8VfUhiHtslffq042PEuj4MAZ0paZGeK695umfWU33VpiMduDu3Eg== X-Received: by 10.200.57.129 with SMTP id v1mr38479576qte.50.1515776544274; Fri, 12 Jan 2018 09:02:24 -0800 (PST) Received: from localhost (p200300E41F21CF00227DB10B7BBDB590.dip0.t-ipconnect.de. [2003:e4:1f21:cf00:227d:b10b:7bbd:b590]) by smtp.gmail.com with ESMTPSA id d7sm13922437qtc.13.2018.01.12.09.02.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Jan 2018 09:02:23 -0800 (PST) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH libdrm 2/2] drm/tegra: Sanitize format modifiers Date: Fri, 12 Jan 2018 18:02:16 +0100 Message-Id: <20180112170216.19397-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180112170216.19397-1-thierry.reding@gmail.com> References: <20180112170216.19397-1-thierry.reding@gmail.com> Cc: mesa-dev@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Thierry Reding The existing format modifier definitions were merged prematurely, and recent work has unveiled that the definitions are suboptimal in several ways: - The format specifiers, except for one, are not Tegra specific, but the names don't reflect that. - The number space is split into two, reserving 32 bits for some "parameter" which most of the modifiers are not going to have. - Symbolic names for the modifiers are not using the standard DRM_FORMAT_MOD_* prefix, which makes them awkward to use. - The vendor prefix NV is somewhat ambiguous. Fortunately, nobody's started using these modifiers, so we can still fix the above issues. Do so by using the standard prefix. Also, remove TEGRA from the name of those modifiers that exist on NVIDIA GPUs as well. In case of the block linear modifiers, make the "parameter" smaller (4 bits, though only 6 values are valid) and don't let that leak into any of the other modifiers. Finally, also use the more canonical NVIDIA instead of the ambiguous NV prefix. Signed-off-by: Thierry Reding --- include/drm/drm_fourcc.h | 36 +++++++++++++++++++----------------- tests/modetest/modetest.c | 28 ++++++++++++++-------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h index a76ed8f9e383..e04613d30a13 100644 --- a/include/drm/drm_fourcc.h +++ b/include/drm/drm_fourcc.h @@ -178,7 +178,7 @@ extern "C" { #define DRM_FORMAT_MOD_VENDOR_NONE 0 #define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 #define DRM_FORMAT_MOD_VENDOR_AMD 0x02 -#define DRM_FORMAT_MOD_VENDOR_NV 0x03 +#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 #define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 #define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 #define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 @@ -338,29 +338,17 @@ extern "C" { */ #define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) -/* NVIDIA Tegra frame buffer modifiers */ - -/* - * Some modifiers take parameters, for example the number of vertical GOBs in - * a block. Reserve the lower 32 bits for parameters - */ -#define __fourcc_mod_tegra_mode_shift 32 -#define fourcc_mod_tegra_code(val, params) \ - fourcc_mod_code(NV, ((((__u64)val) << __fourcc_mod_tegra_mode_shift) | params)) -#define fourcc_mod_tegra_mod(m) \ - (m & ~((1ULL << __fourcc_mod_tegra_mode_shift) - 1)) -#define fourcc_mod_tegra_param(m) \ - (m & ((1ULL << __fourcc_mod_tegra_mode_shift) - 1)) +/* NVIDIA frame buffer modifiers */ /* * Tegra Tiled Layout, used by Tegra 2, 3 and 4. * * Pixels are arranged in simple tiles of 16 x 16 bytes. */ -#define NV_FORMAT_MOD_TEGRA_TILED fourcc_mod_tegra_code(1, 0) +#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) /* - * Tegra 16Bx2 Block Linear layout, used by TK1/TX1 + * 16Bx2 Block Linear layout, used by desktop GPUs, and Tegra K1 and later * * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked * vertically by a power of 2 (1 to 32 GOBs) to form a block. @@ -380,7 +368,21 @@ extern "C" { * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format * in full detail. */ -#define NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(v) fourcc_mod_tegra_code(2, v) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ + fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf)) + +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ + fourcc_mod_code(NVIDIA, 0x10) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ + fourcc_mod_code(NVIDIA, 0x11) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ + fourcc_mod_code(NVIDIA, 0x12) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ + fourcc_mod_code(NVIDIA, 0x13) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ + fourcc_mod_code(NVIDIA, 0x14) +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ + fourcc_mod_code(NVIDIA, 0x15) /* * Broadcom VC4 "T" format diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 62d933272423..701547f4b648 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -278,20 +278,20 @@ static const char *modifier_to_string(uint64_t modifier) return "VIVANTE_SPLIT_TILED"; case DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED: return "VIVANTE_SPLIT_SUPER_TILED"; - case NV_FORMAT_MOD_TEGRA_TILED: - return "MOD_TEGRA_TILED"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(0): - return "MOD_TEGRA_16BX2_BLOCK(0)"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(1): - return "MOD_TEGRA_16BX2_BLOCK(1)"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(2): - return "MOD_TEGRA_16BX2_BLOCK(2)"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(3): - return "MOD_TEGRA_16BX2_BLOCK(3)"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(4): - return "MOD_TEGRA_16BX2_BLOCK(4)"; - case NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(5): - return "MOD_TEGRA_16BX2_BLOCK(5)"; + case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED: + return "NVIDIA_TEGRA_TILED"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0): + return "NVIDIA_16BX2_BLOCK(0)"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1): + return "NVIDIA_16BX2_BLOCK(1)"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2): + return "NVIDIA_16BX2_BLOCK(2)"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3): + return "NVIDIA_16BX2_BLOCK(3)"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4): + return "NVIDIA_16BX2_BLOCK(4)"; + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5): + return "NVIDIA_16BX2_BLOCK(5)"; case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED: return "MOD_BROADCOM_VC4_T_TILED"; default: