From patchwork Thu Jul 31 10:46:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 375206 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id AB36714009B for ; Thu, 31 Jul 2014 20:47:13 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751356AbaGaKq7 (ORCPT ); Thu, 31 Jul 2014 06:46:59 -0400 Received: from mail-wi0-f175.google.com ([209.85.212.175]:50088 "EHLO mail-wi0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750764AbaGaKq6 (ORCPT ); Thu, 31 Jul 2014 06:46:58 -0400 Received: by mail-wi0-f175.google.com with SMTP id ho1so9098169wib.8 for ; Thu, 31 Jul 2014 03:46:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=30sTWhTUwGRleyygrNNsQSznqHD7KDA+GbqTm0+p8Xs=; b=BTcrEQfAe5IxiGhh0MPaJYk+h2cS6l3tHSKFcuwm2jkX8vZCfMm8Duym5UrdB54RbP U++0AtReNvGFDDiUvbYn2ocaJtpfOVVqhS8jwsA0hq1Zuso3pMzV+pp6ExSMX9t6oofY vtYfpF1+qW7lXD+VOeFQYk1MK1Fjh+Qx/Ywp/fBZaJDRNPXvu/jEZ/wiFym2AjPwc2Pn GZI5micGFxF1uiPEeCPXO25DwvHoT6lzxjmY53iCEkPktWi5OJsytR6gzH7R3stBn1C8 2mv12LYE7YZnCzHIE+Q0d/ocB94LojQw/xmA75A6s0dPfkWzs1KCAu5O7U5BKhbgMKxJ x28A== X-Received: by 10.180.212.113 with SMTP id nj17mr11768329wic.46.1406803612643; Thu, 31 Jul 2014 03:46:52 -0700 (PDT) Received: from localhost (port-1968.pppoe.wtnet.de. [84.46.7.183]) by mx.google.com with ESMTPSA id ex4sm65123898wic.2.2014.07.31.03.46.50 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jul 2014 03:46:51 -0700 (PDT) Date: Thu, 31 Jul 2014 12:46:49 +0200 From: Thierry Reding To: Joerg Roedel Cc: Mark Rutland , Rob Herring , Pawel Moll , Ian Campbell , Kumar Gala , Stephen Warren , Arnd Bergmann , Will Deacon , Cho KyongHo , Grant Grundler , Dave P Martin , Marc Zyngier , Hiroshi Doyu , Olav Haugan , Varun Sethi , "devicetree@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "linux-arm-kernel@lists.infradead.org" , "linux-tegra@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v4] devicetree: Add generic IOMMU device tree bindings Message-ID: <20140731104648.GD7458@ulmo> References: <1404487757-18829-1-git-send-email-thierry.reding@gmail.com> <20140730152646.GC20162@leverpostej> <20140731083923.GA31218@ulmo> <20140731092241.GA21850@leverpostej> <20140731101807.GB7458@ulmo> <20140731102351.GJ9809@8bytes.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20140731102351.GJ9809@8bytes.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org On Thu, Jul 31, 2014 at 12:23:51PM +0200, Joerg Roedel wrote: > On Thu, Jul 31, 2014 at 12:18:08PM +0200, Thierry Reding wrote: > > It looks like this hasn't been applied yet, so I can send out a v5 > > shortly with the requested changes addressed. > > Yes, please send a v5 with the requested changes and all Reviewed-bys > and Acked-bys this got so far. I'll take it into my tree then if nobody > else objects. I just sent out v5, although I trimmed the Cc list a little since it was growing somewhat long. But I've kept everyone that gave feedback on v4 as well as the lists. For reference I've attached the diff since v4. Thierry diff --git a/Documentation/devicetree/bindings/iommu/iommu.txt b/Documentation/devicetree/bindings/iommu/iommu.txt index 464a81eaaf61..5a8b4624defc 100644 --- a/Documentation/devicetree/bindings/iommu/iommu.txt +++ b/Documentation/devicetree/bindings/iommu/iommu.txt @@ -82,7 +82,9 @@ device's parent node it will be ignored. An exception to this rule is if the referenced IOMMU is disabled, in which case the "dma-ranges" property of the parent shall take effect. Note that merely disabling a device tree node does not guarantee that the IOMMU is really disabled since the hardware may not -have a means to turn off translation. +have a means to turn off translation. But it is invalid in such cases to +disable the IOMMU's device tree node in the first place because it would +prevent any driver from properly setting up the translations. Notes: @@ -108,7 +110,7 @@ Single-master IOMMU: }; master { - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; Multiple-master IOMMU with fixed associations: @@ -117,8 +119,12 @@ Multiple-master IOMMU with fixed associations: /* multiple-master IOMMU */ iommu { /* - * Masters are statically associated with this IOMMU and - * address translation is always enabled. + * Masters are statically associated with this IOMMU and share + * the same address translations because the IOMMU does not + * have sufficient information to distinguish between masters. + * + * Consequently address translation is always on or off for + * all masters at any given point in time. */ #iommu-cells = <0>; }; @@ -126,13 +132,13 @@ Multiple-master IOMMU with fixed associations: /* static association with IOMMU */ master@1 { reg = <1>; - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; /* static association with IOMMU */ master@2 { reg = <2>; - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; Multiple-master IOMMU: @@ -145,28 +151,32 @@ Multiple-master IOMMU: master@1 { /* device has master ID 42 in the IOMMU */ - iommus = <&/iommu 42>; + iommus = <&{/iommu} 42>; }; master@2 { /* device has master IDs 23 and 24 in the IOMMU */ - iommus = <&/iommu 23>, <&/iommu 24>; + iommus = <&{/iommu} 23>, <&{/iommu} 24>; }; Multiple-master IOMMU with configurable DMA window: --------------------------------------------------- / { - #address-cells = <1>; - #size-cells = <1>; - iommu { - /* master ID, address and length of DMA window */ + /* + * One cell for the master ID and one cell for the + * address of the DMA window. The length of the DMA + * window is encoded in two cells. + * + * The DMA window is the range addressable by the + * master (i.e. the I/O virtual address space). + */ #iommu-cells = <4>; }; master { /* master ID 42, 4 GiB DMA window starting at 0 */ - iommus = <&/iommu 42 0 0x1 0x0>; + iommus = <&{/iommu} 42 0 0x1 0x0>; }; };