From patchwork Mon Oct 17 10:46:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 3390 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1380612wrs; Mon, 17 Oct 2022 03:58:30 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6/BBhAKPsjR+F4uNt4u+B+YdCVr04LGAAy8teRTeL/L/f2KqFHt/12b/j9bkTu1/rJyizy X-Received: by 2002:a05:6a00:1501:b0:563:9f05:bd6e with SMTP id q1-20020a056a00150100b005639f05bd6emr12125631pfu.48.1666004310533; Mon, 17 Oct 2022 03:58:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666004310; cv=none; d=google.com; s=arc-20160816; b=V2jeABMPKqlvsMKmwoTTNmz4LbafcIIkD+Y1TJIp8FzuG2TJiENX7VHa7bqTBtS28P q2zf22GXvDPovCfsWlY6qCJlducx31Ztlwu3alJNBvkM88vNp3JHWkaq6H8twZaLlihv edoHbSrEiMY2GaAuaOkWwg7ln1O5l+4NTlx2b0hIDIpboD38mlaxBEwmNU1vprRnjoWj TFIoipl1bU26l+5rVVEt4TUvn0dETL3koUFwPrh41OJ4MzDfP5USa18S/oavxSrznXDG FaDJYM3iokj+JIhfJQsmJ112kXNucKvABPwe35Kltd2M7J/GgjqvFkRJiWHGEOEFtKZq 0+Bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=YGdJu+abhxHHBSod+2U7lIGR4LGbdTSiRfIK2OJW2tA=; b=Eb2oqh5NaAB3eblqu7aHb6Peciii3vbiWFRZkMFem/EWttvJ20Nw3AoWLdX3RUxI5c hSqha6HvqVlwxT7CC2RpdzTXrYMSXmpWJFSpxrlPdcVFAq3jQvY2z/rRmZbpjufZNqsE kCqvnMZrme0wf5/HYxA8qf+axTGm+CGIfsTyyn4dwLBN/vVg5dpsXrqX0l/vd7xwW25X apf7FXSPBkVFE7wq+wR5jd60VNfapzs9MIwMxkIsitAv3rFa+VWXSGFPVxZ2hUcc5wti kP76vf8sCKk3bmZ5apC1IDLJpmsO+XPDqy25xa9YmKXv1+wPsiAtepCOTdh8IJTn9vg8 sFig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o6-20020a056a0015c600b005364d3b5482si13045948pfu.99.2022.10.17.03.58.17; Mon, 17 Oct 2022 03:58:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230199AbiJQKqT (ORCPT + 99 others); Mon, 17 Oct 2022 06:46:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230204AbiJQKqN (ORCPT ); Mon, 17 Oct 2022 06:46:13 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id A3EAC1A04D for ; Mon, 17 Oct 2022 03:46:12 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9D33D1FC4; Mon, 17 Oct 2022 03:46:18 -0700 (PDT) Received: from e122027.arm.com (unknown [10.57.1.201]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 345FD3F67D; Mon, 17 Oct 2022 03:46:11 -0700 (PDT) From: Steven Price To: Alyssa Rosenzweig , =?utf-8?q?Adri?= =?utf-8?q?=C3=A1n_Larumbe?= Cc: Steven Price , Rob Herring , Tomeu Vizoso , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Robin Murphy Subject: [PATCH v2 1/2] drm/panfrost: Remove type name from internal structs Date: Mon, 17 Oct 2022 11:46:01 +0100 Message-Id: <20221017104602.142992-2-steven.price@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017104602.142992-1-steven.price@arm.com> References: <20221017104602.142992-1-steven.price@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746932135385282509?= X-GMAIL-MSGID: =?utf-8?q?1746932135385282509?= The two structs internal to struct panfrost_dump_object_header were named, but sadly that is incompatible with C++, causing an error: "an anonymous union may only have public non-static data members". However nothing refers to struct pan_reg_hdr and struct pan_bomap_hdr and there's no need to export these definitions, so lets drop them. This fixes the C++ build error with the minimum change in userspace API. Reported-by: Adrián Larumbe Fixes: 730c2bf4ad39 ("drm/panfrost: Add support for devcoredump") Signed-off-by: Steven Price --- include/uapi/drm/panfrost_drm.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h index eac87310b348..bd77254be121 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -242,7 +242,7 @@ struct panfrost_dump_object_header { __le32 file_offset; union { - struct pan_reg_hdr { + struct { __le64 jc; __le32 gpu_id; __le32 major; @@ -250,7 +250,7 @@ struct panfrost_dump_object_header { __le64 nbos; } reghdr; - struct pan_bomap_hdr { + struct { __le32 valid; __le64 iova; __le32 data[2]; From patchwork Mon Oct 17 10:46:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Price X-Patchwork-Id: 3388 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1379457wrs; Mon, 17 Oct 2022 03:54:58 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7OW5qGAMJfXFeKCrT51/uDj2xav147E5ArrjEaqe6hSuURo2ghTw/Q/FhaWec9AexXBDTy X-Received: by 2002:a05:6a00:1f10:b0:562:b9e1:55e9 with SMTP id be16-20020a056a001f1000b00562b9e155e9mr11946980pfb.60.1666004097705; Mon, 17 Oct 2022 03:54:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666004097; cv=none; d=google.com; s=arc-20160816; b=pwse3dwS4zikOnU4woVL14ao1GcqNaFRgS8WhSuWEtn2do41LY3Bdnh40LK+FUqc1Z Uk2fXn57/l3bT2bb8gVOh7zqlfNHQ6r1ys2hSxGnFUYTmrJz4mqO7IknN+5oluXU0qvu CXk02RNSuylKbIVfVJFzytcceXKhsYhjRX9qEHGmD1YX+//qD2FKO/i6IlS9byodrPQm QKdf9D9Jlq037eb7vrhjQ8ICjTXNyammJ+8bNBzWSbzW2Fqd859msg3gAINhR3A6XBtB Vw2Pl9mf9mkqcEVaf0JXQrhcOgrzFM/O2vSkv+CVhMvlRj3X62UxpUziwcqxheKYpl+x jXew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=bF5rUID9INrJgWngSlFngurx/D2pTsS8qNtcMV6LKcs=; b=Z5kZD2PoclVIMhBXxwPKQDFDlaWi7Y7UqV4dhFDkr/qv7ZzcH2uEeQTAwaBCnlTX6M rdCc6TjtCELpajoxi6cbD73mGbVcNM7SMvVWdbxss+iMEyxv5vyUA4UpPSfkybipxeLT TjcEgyCHgxbALObo/tRf9VOmditgIOEsOkPKguHVzCkNXtG4ez6uxHNaaR31MiJEHKHq UUY5VkTYJk69gf/n4peiDbkIUZEqUtoNkFBDEpafrfAMshzIPYukcLU0Jcf7TvdPIpNn E6zhaBJgBbitN01EUfeKUDVAA9wZ7tD0XE0WY8hDRCvoWAgq0F/4BkiSLb71upOwtLwK 836Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mq2-20020a17090b380200b001fe41707a2esi21341281pjb.90.2022.10.17.03.54.45; Mon, 17 Oct 2022 03:54:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230292AbiJQKqX (ORCPT + 99 others); Mon, 17 Oct 2022 06:46:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230118AbiJQKqP (ORCPT ); Mon, 17 Oct 2022 06:46:15 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 20572186C8 for ; Mon, 17 Oct 2022 03:46:14 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1E5861042; Mon, 17 Oct 2022 03:46:20 -0700 (PDT) Received: from e122027.arm.com (unknown [10.57.1.201]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A8A503F67D; Mon, 17 Oct 2022 03:46:12 -0700 (PDT) From: Steven Price To: Alyssa Rosenzweig , =?utf-8?q?Adri?= =?utf-8?q?=C3=A1n_Larumbe?= Cc: Steven Price , Rob Herring , Tomeu Vizoso , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Robin Murphy Subject: [PATCH v2 2/2] drm/panfrost: replace endian-specific types with native ones Date: Mon, 17 Oct 2022 11:46:02 +0100 Message-Id: <20221017104602.142992-3-steven.price@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221017104602.142992-1-steven.price@arm.com> References: <20221017104602.142992-1-steven.price@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746931913028866232?= X-GMAIL-MSGID: =?utf-8?q?1746931913028866232?= __le32 and __le64 types aren't portable and are not available on FreeBSD (which uses the same uAPI). Instead of attempting to always output little endian, just use native endianness in the dumps. Tools can detect the endianness in use by looking at the 'magic' field, but equally we don't expect big-endian to be used with Mali (there are no known implementations out there). Bug: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7252 Fixes: 730c2bf4ad39 ("drm/panfrost: Add support for devcoredump") Signed-off-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_dump.c | 36 ++++++++++++------------ include/uapi/drm/panfrost_drm.h | 36 +++++++++++++----------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/panfrost/panfrost_dump.c index 89056a1aac7d..6bd0634e2d58 100644 --- a/drivers/gpu/drm/panfrost/panfrost_dump.c +++ b/drivers/gpu/drm/panfrost/panfrost_dump.c @@ -63,13 +63,13 @@ static void panfrost_core_dump_header(struct panfrost_dump_iterator *iter, { struct panfrost_dump_object_header *hdr = iter->hdr; - hdr->magic = cpu_to_le32(PANFROSTDUMP_MAGIC); - hdr->type = cpu_to_le32(type); - hdr->file_offset = cpu_to_le32(iter->data - iter->start); - hdr->file_size = cpu_to_le32(data_end - iter->data); + hdr->magic = PANFROSTDUMP_MAGIC; + hdr->type = type; + hdr->file_offset = iter->data - iter->start; + hdr->file_size = data_end - iter->data; iter->hdr++; - iter->data += le32_to_cpu(hdr->file_size); + iter->data += hdr->file_size; } static void @@ -93,8 +93,8 @@ panfrost_core_dump_registers(struct panfrost_dump_iterator *iter, reg = panfrost_dump_registers[i] + js_as_offset; - dumpreg->reg = cpu_to_le32(reg); - dumpreg->value = cpu_to_le32(gpu_read(pfdev, reg)); + dumpreg->reg = reg; + dumpreg->value = gpu_read(pfdev, reg); } panfrost_core_dump_header(iter, PANFROSTDUMP_BUF_REG, dumpreg); @@ -106,7 +106,7 @@ void panfrost_core_dump(struct panfrost_job *job) struct panfrost_dump_iterator iter; struct drm_gem_object *dbo; unsigned int n_obj, n_bomap_pages; - __le64 *bomap, *bomap_start; + u64 *bomap, *bomap_start; size_t file_size; u32 as_nr; int slot; @@ -177,11 +177,11 @@ void panfrost_core_dump(struct panfrost_job *job) * For now, we write the job identifier in the register dump header, * so that we can decode the entire dump later with pandecode */ - iter.hdr->reghdr.jc = cpu_to_le64(job->jc); - iter.hdr->reghdr.major = cpu_to_le32(PANFROSTDUMP_MAJOR); - iter.hdr->reghdr.minor = cpu_to_le32(PANFROSTDUMP_MINOR); - iter.hdr->reghdr.gpu_id = cpu_to_le32(pfdev->features.id); - iter.hdr->reghdr.nbos = cpu_to_le64(job->bo_count); + iter.hdr->reghdr.jc = job->jc; + iter.hdr->reghdr.major = PANFROSTDUMP_MAJOR; + iter.hdr->reghdr.minor = PANFROSTDUMP_MINOR; + iter.hdr->reghdr.gpu_id = pfdev->features.id; + iter.hdr->reghdr.nbos = job->bo_count; panfrost_core_dump_registers(&iter, pfdev, as_nr, slot); @@ -218,27 +218,27 @@ void panfrost_core_dump(struct panfrost_job *job) WARN_ON(!mapping->active); - iter.hdr->bomap.data[0] = cpu_to_le32((bomap - bomap_start)); + iter.hdr->bomap.data[0] = bomap - bomap_start; for_each_sgtable_page(bo->base.sgt, &page_iter, 0) { struct page *page = sg_page_iter_page(&page_iter); if (!IS_ERR(page)) { - *bomap++ = cpu_to_le64(page_to_phys(page)); + *bomap++ = page_to_phys(page); } else { dev_err(pfdev->dev, "Panfrost Dump: wrong page\n"); - *bomap++ = ~cpu_to_le64(0); + *bomap++ = 0; } } - iter.hdr->bomap.iova = cpu_to_le64(mapping->mmnode.start << PAGE_SHIFT); + iter.hdr->bomap.iova = mapping->mmnode.start << PAGE_SHIFT; vaddr = map.vaddr; memcpy(iter.data, vaddr, bo->base.base.size); drm_gem_shmem_vunmap(&bo->base, &map); - iter.hdr->bomap.valid = cpu_to_le32(1); + iter.hdr->bomap.valid = 1; dump_header: panfrost_core_dump_header(&iter, PANFROSTDUMP_BUF_BO, iter.data + bo->base.base.size); diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h index bd77254be121..6f93c915cc88 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -235,25 +235,29 @@ struct drm_panfrost_madvise { #define PANFROSTDUMP_BUF_BO (PANFROSTDUMP_BUF_BOMAP + 1) #define PANFROSTDUMP_BUF_TRAILER (PANFROSTDUMP_BUF_BO + 1) +/* + * This structure is the native endianness of the dumping machine, tools can + * detect the endianness by looking at the value in 'magic'. + */ struct panfrost_dump_object_header { - __le32 magic; - __le32 type; - __le32 file_size; - __le32 file_offset; + __u32 magic; + __u32 type; + __u32 file_size; + __u32 file_offset; union { struct { - __le64 jc; - __le32 gpu_id; - __le32 major; - __le32 minor; - __le64 nbos; + __u64 jc; + __u32 gpu_id; + __u32 major; + __u32 minor; + __u64 nbos; } reghdr; - struct { - __le32 valid; - __le64 iova; - __le32 data[2]; + struct pan_bomap_hdr { + __u32 valid; + __u64 iova; + __u32 data[2]; } bomap; /* @@ -261,14 +265,14 @@ struct panfrost_dump_object_header { * with new fields and also keep it 512-byte aligned */ - __le32 sizer[496]; + __u32 sizer[496]; }; }; /* Registers object, an array of these */ struct panfrost_dump_registers { - __le32 reg; - __le32 value; + __u32 reg; + __u32 value; }; #if defined(__cplusplus)