Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp578857yba; Mon, 1 Apr 2019 12:13:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqwLDBJA3RR0d3XI4CXJBNVxSZHup33kXp2FWGJXOGld0XWhQcZ+2iWEKm53BEGSETw52+59 X-Received: by 2002:a17:902:6b05:: with SMTP id o5mr65596241plk.90.1554146026671; Mon, 01 Apr 2019 12:13:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554146026; cv=none; d=google.com; s=arc-20160816; b=B1ZboDNmO1vSAv9YhVK0H0xe6IjavsHzQuRPUfgVKFb3RmfKQ8KVzkZiCE16hSFfop r1YY3sLY8PpO98yA5fZnmQdtX3ZlFGrAwcyBy4AELk6WeL4Ou986MxmB1OeL/u0bX0uA OJG26k+iCwozsZQDYdi1SntY7hDD+m8/x06dKgNMsXvZxmhyL9ZPmlO1EYVBjybBiZ1b TdJ4ZS2nk8lrXdIEFEYV1XVh+IsrqEFkQxKt8klV8X206YRw9ituGumyCNRl+rnoeMnF JJrR4EE1cpDXZ+BXTf6GjtJT3VkzDspg1iCTGTjQZj/m9DfEExjHM4Mvp4w80ZDRhg/1 IZRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=VnYVZguvWFrEG03qChlnq7wErEOEK/C7ys9gUoEwUfA=; b=NBMSOQL5tbtGC9VnzQO4mmGJjXMxrlWvZ0APX1iXNXJaAJPnSgTBBpRL+FEcn8XEzz FEkVKrEdEXCu5Cj5of3789P0/fR2SWsiEZlXmP2fCBjh77OQkXe7cTha+Ha0cKB8fsrv YpPI0x9yOkggFPsJkYDmsCB4Sf7qrqiD/GmrkrDkCft2uvrlMpOvRlkQy9YG5EvycTT7 W7pp+uG2wQAjCXnhT8cp9oxv9GBbwZK6iTnCcvZ8WkzcBtzkK0czViDcDiCN83rvlgSE RWR7njCVxEQFgP2axUizWhuXzjY6HScJ8ItaKi+sA5Boq/x5DtC2YV/iGGlHtTP49zv5 3qGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3si7974138pgs.42.2019.04.01.12.13.31; Mon, 01 Apr 2019 12:13:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728830AbfDATLF (ORCPT + 99 others); Mon, 1 Apr 2019 15:11:05 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:40818 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728733AbfDATLF (ORCPT ); Mon, 1 Apr 2019 15:11:05 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3EE0780D; Mon, 1 Apr 2019 12:11:04 -0700 (PDT) Received: from [10.1.196.75] (e110467-lin.cambridge.arm.com [10.1.196.75]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9609B3F59C; Mon, 1 Apr 2019 12:11:01 -0700 (PDT) Subject: Re: [PATCH v3 1/3] iommu: io-pgtable: Add ARM Mali midgard MMU page table format To: Rob Herring , dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Will Deacon , Joerg Roedel , iommu@lists.linux-foundation.org, Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Alyssa Rosenzweig , Lyude Paul , Eric Anholt , Neil Armstrong References: <20190401074730.12241-1-robh@kernel.org> <20190401074730.12241-2-robh@kernel.org> From: Robin Murphy Message-ID: <8d091874-11b0-e348-c4f1-dd1bcfa4bf97@arm.com> Date: Mon, 1 Apr 2019 20:11:00 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <20190401074730.12241-2-robh@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/04/2019 08:47, Rob Herring wrote: > ARM Mali midgard GPU is similar to standard 64-bit stage 1 page tables, but > have a few differences. Add a new format type to represent the format. The > input address size is 48-bits and the output address size is 40-bits (and > possibly less?). Note that the later bifrost GPUs follow the standard > 64-bit stage 1 format. > > The differences in the format compared to 64-bit stage 1 format are: > > The 3rd level page entry bits are 0x1 instead of 0x3 for page entries. > > The access flags are not read-only and unprivileged, but read and write. > This is similar to stage 2 entries, but the memory attributes field matches > stage 1 being an index. > > The nG bit is not set by the vendor driver. This one didn't seem to matter, > but we'll keep it aligned to the vendor driver. > > Cc: Will Deacon > Cc: Robin Murphy > Cc: Joerg Roedel > Cc: linux-arm-kernel@lists.infradead.org > Cc: iommu@lists.linux-foundation.org > Signed-off-by: Rob Herring > --- > Please ack this as I need to apply it to the drm-misc tree. Or we need a > stable branch with this patch. With the diff below squashed in to address my outstanding style nits, Acked-by: Robin Murphy I don't foresee any conflicting io-pgtable changes to prevent this going via DRM, but I'll leave the final say up to Joerg. Thanks, Robin. ----->8----- diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c index 98551d0cff59..55ed039da166 100644 --- a/drivers/iommu/io-pgtable-arm.c +++ b/drivers/iommu/io-pgtable-arm.c @@ -197,12 +197,13 @@ struct arm_lpae_io_pgtable { typedef u64 arm_lpae_iopte; -static inline bool iopte_leaf(arm_lpae_iopte pte, int l, enum io_pgtable_fmt fmt) +static inline bool iopte_leaf(arm_lpae_iopte pte, int lvl, + enum io_pgtable_fmt fmt) { - if ((l == (ARM_LPAE_MAX_LEVELS - 1)) && (fmt != ARM_MALI_LPAE)) - return iopte_type(pte,l) == ARM_LPAE_PTE_TYPE_PAGE; + if (lvl == (ARM_LPAE_MAX_LEVELS - 1) && fmt != ARM_MALI_LPAE) + return iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_PAGE; - return iopte_type(pte,l) == ARM_LPAE_PTE_TYPE_BLOCK; + return iopte_type(pte, lvl) == ARM_LPAE_PTE_TYPE_BLOCK; } static arm_lpae_iopte paddr_to_iopte(phys_addr_t paddr, @@ -310,13 +311,10 @@ static void __arm_lpae_init_pte(struct arm_lpae_io_pgtable *data, if (data->iop.cfg.quirks & IO_PGTABLE_QUIRK_ARM_NS) pte |= ARM_LPAE_PTE_NS; - if (lvl == ARM_LPAE_MAX_LEVELS - 1) { - if (data->iop.fmt == ARM_MALI_LPAE) - pte |= ARM_LPAE_PTE_TYPE_BLOCK; - else - pte |= ARM_LPAE_PTE_TYPE_PAGE; - } else + if (data->iop.fmt != ARM_MALI_LPAE && lvl != ARM_LPAE_MAX_LEVELS - 1) pte |= ARM_LPAE_PTE_TYPE_BLOCK; + else + pte |= ARM_LPAE_PTE_TYPE_PAGE; if (data->iop.fmt != ARM_MALI_LPAE) pte |= ARM_LPAE_PTE_AF;