Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp3219528pxa; Tue, 18 Aug 2020 09:28:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzG5FQhG9qFbNpmWVDkVwdm6kdIa0LPW+Fyh9dFy+Rcb7SGgpao0hm6gU7/vCZyOrSZtgjL X-Received: by 2002:a17:906:1911:: with SMTP id a17mr19754532eje.431.1597768131623; Tue, 18 Aug 2020 09:28:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597768131; cv=none; d=google.com; s=arc-20160816; b=a21Kl7y9OPnVWKkLliyxkIQOUvLNtqU2E0HifuRwPxIhyf639cZJTVuQibnnoxFwJW 81zKiJQ+YQxltU0OJbvaJ5mz/6mi3ZPpIA9ry1GvyrxXKAEC/p2+FBuTTpoO6ygFmoNg kLmozJgEeJNZuKh8hfvU3oj8d8hYxKFEPoeo2w59xXvb0dOu1ix2O973GsV4lNoha7Xe rMLI+F9QnrELL+HkAsoahe4UPxb+3SdbzBS9ReEllhVTyPzaP+0Zf1+ivrgH3MGYonS7 BaFIN80gqHaqHF+m+h8Oa5IJM8Uldq3VySx2Nul0z1Gk6B11ot4/vawA7qqtsHMY+rfO 39Ow== 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=vSJNlQKLE9XIoLiwTfC3TvIvPWBCtBS8de5eEfQpAu4=; b=QsGeQ1EW6wdd7CQOATnn4GCssIp2wq5oir6dp/umKUEPXkgWwqV4+8Ijs4H+JRpu6k U8ieGkd/xB4gQdyk9L6FRFu6VBh1dvMlzi0FazYXe+J8SzJ+n8QtIvrzQ6iGi3Cj5mcs H3D5haUBsoZ/AUS7Bp8q0DVnHlaNEiAwvIgAb5ckatK5LhlWmwgwMowD/D8CHZ1uWYtp FnMCQyusq32NeSCRYeDnOC07ihO62IAeWtRd5BS6KglW5kAw1ZshoJ4m/XSocKFwxvWN AUQnGC/4y2wM8JTILxs/QE87DLUmzZyuRvbywvSJN4oMWuk/k0OTGKFbtqepPYKM/LC2 O3bA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id uz17si13785107ejb.63.2020.08.18.09.28.26; Tue, 18 Aug 2020 09:28:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726676AbgHRQ1W (ORCPT + 99 others); Tue, 18 Aug 2020 12:27:22 -0400 Received: from foss.arm.com ([217.140.110.172]:44862 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728230AbgHRQ0g (ORCPT ); Tue, 18 Aug 2020 12:26:36 -0400 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 133D21FB; Tue, 18 Aug 2020 09:26:35 -0700 (PDT) Received: from [10.57.40.122] (unknown [10.57.40.122]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 738A13F66B; Tue, 18 Aug 2020 09:26:32 -0700 (PDT) Subject: Re: [PATCH 00/16] IOMMU driver for Kirin 960/970 To: Mauro Carvalho Chehab Cc: Greg Kroah-Hartman , devel@driverdev.osuosl.org, devicetree@vger.kernel.org, Joerg Roedel , Manivannan Sadhasivam , Chenfeng , linuxarm@huawei.com, Wei Xu , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , John Stultz , mauro.chehab@huawei.com, Suzhuangluan , linux-arm-kernel@lists.infradead.org References: <5c7918b6-c506-680b-cb0f-9e5f6a7038d9@arm.com> <20200818172909.71f5243a@coco.lan> From: Robin Murphy Message-ID: <79f40595-7769-aa6a-fbba-53adcffca327@arm.com> Date: Tue, 18 Aug 2020 17:26:30 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: <20200818172909.71f5243a@coco.lan> 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 2020-08-18 16:29, Mauro Carvalho Chehab wrote: > Hi Robin, > > Em Tue, 18 Aug 2020 15:47:55 +0100 > Robin Murphy escreveu: > >> On 2020-08-17 08:49, Mauro Carvalho Chehab wrote: >>> Add a driver for the Kirin 960/970 iommu. >>> >>> As on the past series, this starts from the original 4.9 driver from >>> the 96boards tree: >>> >>> https://github.com/96boards-hikey/linux/tree/hikey970-v4.9 >>> >>> The remaining patches add SPDX headers and make it build and run with >>> the upstream Kernel. >>> >>> Chenfeng (1): >>> iommu: add support for HiSilicon Kirin 960/970 iommu >>> >>> Mauro Carvalho Chehab (15): >>> iommu: hisilicon: remove default iommu_map_sg handler >>> iommu: hisilicon: map and unmap ops gained new arguments >>> iommu: hisi_smmu_lpae: rebase it to work with upstream >>> iommu: hisi_smmu: remove linux/hisi/hisi-iommu.h >>> iommu: hisilicon: cleanup its code style >>> iommu: hisi_smmu_lpae: get rid of IOMMU_SEC and IOMMU_DEVICE >>> iommu: get rid of map/unmap tile functions >>> iommu: hisi_smmu_lpae: use the right code to get domain-priv data >>> iommu: hisi_smmu_lpae: convert it to probe_device >>> iommu: add Hisilicon Kirin970 iommu at the building system >>> iommu: hisi_smmu_lpae: cleanup printk macros >>> iommu: hisi_smmu_lpae: make OF compatible more standard >> >> Echoing the other comments about none of the driver patches being CC'd >> to the IOMMU list... >> >> Still, I dug the series up on lore and frankly I'm not sure what to make >> of it - AFAICS the "driver" is just yet another implementation of Arm >> LPAE pagetable code, with no obvious indication of how those pagetables >> ever get handed off to IOMMU hardware (and indeed no indication of IOMMU >> hardware at all). Can you explain how it's supposed to work? >> >> And as a pre-emptive strike, we really don't need any more LPAE >> implementations - that's what the io-pgtable library is all about (which >> incidentally has been around since 4.0...). I think that should make the >> issue of preserving authorship largely moot since there's no need to >> preserve most of the code anyway ;) > > I didn't know about that, since I got a Hikey 970 board for the first time > about one month ago, and that's the first time I looked into iommu code. > > My end goal with this is to make the DRM/KMS driver to work with upstream > Kernels. > > The full patch series are at: > > https://github.com/mchehab/linux/commits/hikey970/to_upstream-2.0-v1.1 > > (I need to put a new version there, after some changes due to recent > upstream discussions at the regulator's part of the code) > > Basically, the DT binding has this, for IOMMU: > > > smmu_lpae { > compatible = "hisilicon,smmu-lpae"; > }; > > ... > dpe: dpe@e8600000 { > compatible = "hisilicon,kirin970-dpe"; > memory-region = <&drm_dma_reserved>; > ... > iommu_info { > start-addr = <0x8000>; > size = <0xbfff8000>; > }; > } > > This is used by kirin9xx_drm_dss.c in order to enable and use > the iommu: > > > static int dss_enable_iommu(struct platform_device *pdev, struct dss_hw_ctx *ctx) > { > struct device *dev = NULL; > > dev = &pdev->dev; > > /* create iommu domain */ > ctx->mmu_domain = iommu_domain_alloc(dev->bus); > if (!ctx->mmu_domain) { > pr_err("iommu_domain_alloc failed!\n"); > return -EINVAL; > } > > iommu_attach_device(ctx->mmu_domain, dev); > > return 0; > } > > The only place where the IOMMU domain is used is on this part of the > code(error part simplified here) [1]: > > void hisi_dss_smmu_on(struct dss_hw_ctx *ctx) > { > uint64_t fama_phy_pgd_base; > uint32_t phy_pgd_base; > ... > fama_phy_pgd_base = iommu_iova_to_phys(ctx->mmu_domain, 0); > phy_pgd_base = (uint32_t)fama_phy_pgd_base; > if (WARN_ON(!phy_pgd_base)) > return; > > set_reg(smmu_base + SMMU_CB_TTBR0, phy_pgd_base, 32, 0); > } > > [1] https://github.com/mchehab/linux/commit/36da105e719b47bbe9d6cb7e5619b30c7f3eb1bd > > In other words, the driver needs to get the physical address of the frame > buffer (mapped via iommu) in order to set some DRM-specific register. > > Yeah, the above code is somewhat hackish. I would love to replace > this part by a more standard approach. OK, so from a quick look at that, my impression is that your display controller has its own MMU and you don't need to pretend to use the IOMMU API at all. Just have the DRM driver use io-pgtable directly to run its own set of ARM_32_LPAE_S1 pagetables - see Panfrost for an example (but try to ignore the wacky "Mali LPAE" format). Robin.