Received: by 10.223.148.5 with SMTP id 5csp6727345wrq; Wed, 17 Jan 2018 18:16:38 -0800 (PST) X-Google-Smtp-Source: ACJfBouIZGcSHxa8/Bvk+SilLVBqRKQmf2CcjAgMW8M+HGNwOZVSi4+8j4aXhqD9kg1N97jeY2ly X-Received: by 10.99.97.200 with SMTP id v191mr30559170pgb.121.1516241798314; Wed, 17 Jan 2018 18:16:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516241798; cv=none; d=google.com; s=arc-20160816; b=mEXRPLmcOVEeZ6mW7PFHgf7zShCtizI8azOsVDbWaIG6Z1SXzqqrswzot2vLx5lu9O mPNapwExLRYkg7ewqEFa0K7hRtwjBqWWqVu3zTDRH5dcUh7V0b8ra3/Ay28tBiMT1dsM C494EcR0cY7zfJ/PhLrUVpgAGJ2h0RsyhSY2oPCWeSnGsMLrMO3mob+J7CJv/Cyke2OD ObmpHRisMt9+YZqQThxRitgAfC1vPRj4ltRIaodcPmnanW4VxAe/h/QqQLeOtvnh6/6Y WB5sqGO/qJusUGdR4QbJwwLiCv2AWaDrzhm4CMbVfizCeqrBi1tPdC4BdVgfAz096d0F D4Hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dmarc-filter :arc-authentication-results; bh=Qe6i3Fl4GBl3oMat69KaSwvgtM1X7A0VlVbLV/Iol84=; b=IywV4RNv6XjEDaat9PgFR7fB4UKVnVLNgJiM1z/EGjgQk2gbNfxFCeXHOzs5x3vptm hwqfsgDRxtNNYR02AdixxB6ddQ6yqNa22sweKCGpAcM+4DuO/AGHlpbaa6mhO6aA9N0O AIlYfqkLTx2N4tyjqDkJVIxnJQCkYAIrgTocT0VYsqQ0+CVtKETW6W48Xsg4d/cDEXHX rZkC1iGUeIxw0Jlbx9/jJnEDfJgEriOnH8FyMlegx/o7UFB8Gt/BU44r76xM4QW/ARJQ AwzaZV3YsVaJI8yod7eTv4SekCZ+olBoKpmxlFng/x/GjJHZXfaYLT7NhU2t/nL/uhQR VvlA== 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 o12si5507009plg.133.2018.01.17.18.16.24; Wed, 17 Jan 2018 18:16:38 -0800 (PST) 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 S1753095AbeARCP5 (ORCPT + 99 others); Wed, 17 Jan 2018 21:15:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:54616 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752819AbeARCPz (ORCPT ); Wed, 17 Jan 2018 21:15:55 -0500 Received: from mail-qt0-f176.google.com (mail-qt0-f176.google.com [209.85.216.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3359E2175C; Thu, 18 Jan 2018 02:15:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3359E2175C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=robh+dt@kernel.org Received: by mail-qt0-f176.google.com with SMTP id d4so26737273qtj.5; Wed, 17 Jan 2018 18:15:55 -0800 (PST) X-Gm-Message-State: AKwxytc7Qd9G5pSI+emqzaNip+MJtyWVuc3yjetMdxdif/jwbDG3aIjV UyQQ4MJxsEnYwhqhzKvpBby+k8MaTRCTYfruYg== X-Received: by 10.237.38.5 with SMTP id z5mr24869197qtc.180.1516241754350; Wed, 17 Jan 2018 18:15:54 -0800 (PST) MIME-Version: 1.0 Received: by 10.12.130.36 with HTTP; Wed, 17 Jan 2018 18:15:33 -0800 (PST) In-Reply-To: <1516058925-46522-5-git-send-email-jim2101024@gmail.com> References: <1516058925-46522-1-git-send-email-jim2101024@gmail.com> <1516058925-46522-5-git-send-email-jim2101024@gmail.com> From: Rob Herring Date: Wed, 17 Jan 2018 20:15:33 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 4/8] PCI: brcmstb: Add dma-range mapping for inbound traffic To: Jim Quinlan Cc: "linux-kernel@vger.kernel.org" , Bjorn Helgaas , Catalin Marinas , Will Deacon , Brian Norris , Russell King , Robin Murphy , Christoph Hellwig , Florian Fainelli , Jonas Gorski , Lorenzo Pieralisi , Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux-MIPS , linux-pci@vger.kernel.org, Kevin Cernekee , Ralf Baechle , bcm-kernel-feedback-list@broadcom.com, Gregory Fong , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 15, 2018 at 5:28 PM, Jim Quinlan wrote: > The Broadcom STB PCIe host controller is intimately related to the > memory subsystem. This close relationship adds complexity to how cpu > system memory is mapped to PCIe memory. Ideally, this mapping is an > identity mapping, or an identity mapping off by a constant. Not so in > this case. > > Consider the Broadcom reference board BCM97445LCC_4X8 which has 6 GB > of system memory. Here is how the PCIe controller maps the > system memory to PCIe memory: > > memc0-a@[ 0....3fffffff] <=> pci@[ 0....3fffffff] > memc0-b@[100000000...13fffffff] <=> pci@[ 40000000....7fffffff] > memc1-a@[ 40000000....7fffffff] <=> pci@[ 80000000....bfffffff] > memc1-b@[300000000...33fffffff] <=> pci@[ c0000000....ffffffff] > memc2-a@[ 80000000....bfffffff] <=> pci@[100000000...13fffffff] > memc2-b@[c00000000...c3fffffff] <=> pci@[140000000...17fffffff] > > Although there are some "gaps" that can be added between the > individual mappings by software, the permutation of memory regions for > the most part is fixed by HW. The solution of having something close > to an identity mapping is not possible. > > The idea behind this HW design is that the same PCIe module can > act as an RC or EP, and if it acts as an EP it concatenates all > of system memory into a BAR so anything can be accessed. Unfortunately, > when the PCIe block is in the role of an RC it also presents this > "BAR" to downstream PCIe devices, rather than offering an identity map > between its system memory and PCIe space. > > Suppose that an endpoint driver allocs some DMA memory. Suppose this > memory is located at 0x6000_0000, which is in the middle of memc1-a. > The driver wants a dma_addr_t value that it can pass on to the EP to > use. Without doing any custom mapping, the EP will use this value for > DMA: the driver will get a dma_addr_t equal to 0x6000_0000. But this > won't work; the device needs a dma_addr_t that reflects the PCIe space > address, namely 0xa000_0000. > > So, essentially the solution to this problem must modify the > dma_addr_t returned by the DMA routines routines. There are two > ways (I know of) of doing this: > > (a) overriding/redefining the dma_to_phys() and phys_to_dma() calls > that are used by the dma_ops routines. This is the approach of > > arch/mips/cavium-octeon/dma-octeon.c MIPS is rarely an example to follow. :) > In ARM and ARM64 these two routines are defiend in asm/dma-mapping.h > as static inline functions. > > (b) Subscribe to a notifier that notifies when a device is added to a > bus. When this happens, set_dma_ops() can be called for the device. > This method is mentioned in: > > http://lxr.free-electrons.com/source/drivers/of/platform.c?v=3.16#L152 Why refer to an external website when you can just refer to the source of the project this patch applies to directly. > where it says as a comment > > "In case if platform code need to use own special DMA > configuration, it can use Platform bus notifier and > handle BUS_NOTIFY_ADD_DEVICE event to fix up DMA > configuration." In the current tree, this comment is in drivers/of/device.c. > Solution (b) is what this commit does. It uses its own set of > dma_ops which are wrappers around the arch_dma_ops. The > wrappers translate the dma addresses before/after invoking > the arch_dma_ops, as appropriate.