From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A7EEC06510 for ; Tue, 2 Jul 2019 20:31:14 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D9A8E21897 for ; Tue, 2 Jul 2019 20:31:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TCnekBuP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D9A8E21897 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id E581D2156; Tue, 2 Jul 2019 20:31:10 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 972F7212A for ; Tue, 2 Jul 2019 20:26:58 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-qt1-f195.google.com (mail-qt1-f195.google.com [209.85.160.195]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 1DB05834 for ; Tue, 2 Jul 2019 20:26:58 +0000 (UTC) Received: by mail-qt1-f195.google.com with SMTP id w17so20130223qto.10 for ; Tue, 02 Jul 2019 13:26:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J/H70/FePQbdKZEz0YI3H5/o3CPPkZQZGrIygUbL5uE=; b=TCnekBuPYD3hUrz8zIp0zu2L4/GpJvf48ABFai2kUMx5JRSj+cJ9F4qllXaSyBUW3P jUaysD401DDUnfOo3Klccf/XsoXJ16g19L5I8D93FmKem3TenRjTAPawa623RFJCL6qK d63Y6sMyeBjwYA4P/+VM58+DDKEo538UFqKZCsoF75gu8J+6hJVvOWOGyd58UpTYAb57 q5Ld3cG0P/Xnf8kMmLLMqTAZ1oqG80KTqDM7j+N5I9qC+N6LWOdROwCPko32+cCB7Ltn Y3vEBK04m3JwgwmnrrbIBtdJmXO9XPmSAo0oShklDieS2klivlvOqFdhJBLIoDcBywvk KvSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J/H70/FePQbdKZEz0YI3H5/o3CPPkZQZGrIygUbL5uE=; b=YLguQt3WiuYNl6Y2fh419MZnTCGJ+4WWBvRNzJO5cBKwHd0NLkOumOZ8Q6KWg6oLIr 8li+3kCk3VEn54O+fGkKspQlNxRb+eMxnNjFJ9ogdyZvaFnWViYY/88uliBPlP3XAcYa AI1Ya6rz52g0QVsWt/Fn2AfBz4YoigcN7Q0XcVxFO7mbsvy0JJToUP+psfJ3DFHZ9z/F ZG1frEzHO3nV6V8OL1FBwiboNGT/28zJPbXODvKZBHCSESa1MnbkBJvoqLhoe6zXzg18 Y3V7UbBE6qXZjFH+M+/+nSzGqPI9cyLUzepEw1kC5U6tZ8ERCo0s99RKn6ciHu9bVbPS VmRQ== X-Gm-Message-State: APjAAAUkyEWjR8qI4eAFH0MBrIImCJhfA9nUiqN5qO0yB0aowieOF5B7 kwZKmD27WmzsYRIsq8tlsMO8SHf6jalfGw== X-Google-Smtp-Source: APXvYqwBpRrG3Pu/9gU8tjH7/kzX84pSdwZg+HHw7dt535o3fbveN8pbp8WelpaRmR8Le4djtZu+DQ== X-Received: by 2002:ac8:36b9:: with SMTP id a54mr27547900qtc.300.1562099216912; Tue, 02 Jul 2019 13:26:56 -0700 (PDT) Received: from localhost ([2601:184:4780:7861:5010:5849:d76d:b714]) by smtp.gmail.com with ESMTPSA id d38sm7249904qtb.95.2019.07.02.13.26.56 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 13:26:56 -0700 (PDT) From: Rob Clark To: iommu@lists.linux-foundation.org, dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] iommu: add support for drivers that manage iommu explicitly Date: Tue, 2 Jul 2019 13:26:18 -0700 Message-Id: <20190702202631.32148-2-robdclark@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190702202631.32148-1-robdclark@gmail.com> References: <20190702202631.32148-1-robdclark@gmail.com> MIME-Version: 1.0 Cc: Rob Clark , aarch64-laptops@lists.linaro.org, Ulf Hansson , Heikki Krogerus , Greg Kroah-Hartman , "Rafael J. Wysocki" , Rasmus Villemoes , linux-kernel@vger.kernel.org, Sudeep Holla , Joe Perches , Bartosz Golaszewski X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org From: Rob Clark Avoid attaching any non-driver managed domain if the driver indicates that it manages the iommu directly. This solves a couple problems that drm/msm + arm-smmu has with the iommu framework: 1) In some cases the bootloader takes the iommu out of bypass and enables the display. This is in particular a problem on the aarch64 laptops that exist these days, and modern snapdragon android devices. (Older devices also enabled the display in bootloader but did not take the iommu out of bypass.) Attaching a DMA or IDENTITY domain while scanout is active, before the driver has a chance to intervene, makes things go *boom* 2) We are currently blocked on landing support for GPU per-context pagetables because of the domain attached before driver's ->probe() is called. This solves both problems. Signed-off-by: Rob Clark --- drivers/iommu/iommu.c | 11 +++++++++++ include/linux/device.h | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 0c674d80c37f..efa0957f9772 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1573,6 +1573,17 @@ static int __iommu_attach_device(struct iommu_domain *domain, domain->ops->is_attach_deferred(domain, dev)) return 0; + /* + * If driver is going to manage iommu directly, then avoid + * attaching any non driver managed domain. There could + * be already active dma underway (ie. scanout in case of + * bootloader enabled display), and interfering with that + * will make things go *boom* + */ + if ((domain->type != IOMMU_DOMAIN_UNMANAGED) && + dev->driver && dev->driver->driver_manages_iommu) + return 0; + if (unlikely(domain->ops->attach_dev == NULL)) return -ENODEV; diff --git a/include/linux/device.h b/include/linux/device.h index e138baabe01e..d98aa4d3c8c3 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -282,7 +282,8 @@ struct device_driver { struct module *owner; const char *mod_name; /* used for built-in modules */ - bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ + bool suppress_bind_attrs:1; /* disables bind/unbind via sysfs */ + bool driver_manages_iommu:1; /* driver manages IOMMU explicitly */ enum probe_type probe_type; const struct of_device_id *of_match_table; -- 2.20.1 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Subject: [PATCH 1/2] iommu: add support for drivers that manage iommu explicitly Date: Tue, 2 Jul 2019 13:26:18 -0700 Message-ID: <20190702202631.32148-2-robdclark@gmail.com> References: <20190702202631.32148-1-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by gabe.freedesktop.org (Postfix) with ESMTPS id C7CD66E03A for ; Tue, 2 Jul 2019 20:26:57 +0000 (UTC) Received: by mail-qt1-x841.google.com with SMTP id m29so41949qtu.1 for ; Tue, 02 Jul 2019 13:26:57 -0700 (PDT) In-Reply-To: <20190702202631.32148-1-robdclark@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: iommu@lists.linux-foundation.org, dri-devel@lists.freedesktop.org Cc: Rob Clark , aarch64-laptops@lists.linaro.org, Ulf Hansson , Heikki Krogerus , Greg Kroah-Hartman , "Rafael J. Wysocki" , Rasmus Villemoes , linux-kernel@vger.kernel.org, Vivek Gautam , Sudeep Holla , Joe Perches , Bartosz Golaszewski List-Id: dri-devel@lists.freedesktop.org RnJvbTogUm9iIENsYXJrIDxyb2JkY2xhcmtAY2hyb21pdW0ub3JnPgoKQXZvaWQgYXR0YWNoaW5n IGFueSBub24tZHJpdmVyIG1hbmFnZWQgZG9tYWluIGlmIHRoZSBkcml2ZXIgaW5kaWNhdGVzCnRo YXQgaXQgbWFuYWdlcyB0aGUgaW9tbXUgZGlyZWN0bHkuCgpUaGlzIHNvbHZlcyBhIGNvdXBsZSBw cm9ibGVtcyB0aGF0IGRybS9tc20gKyBhcm0tc21tdSBoYXMgd2l0aCB0aGUgaW9tbXUKZnJhbWV3 b3JrOgoKMSkgSW4gc29tZSBjYXNlcyB0aGUgYm9vdGxvYWRlciB0YWtlcyB0aGUgaW9tbXUgb3V0 IG9mIGJ5cGFzcyBhbmQKICAgZW5hYmxlcyB0aGUgZGlzcGxheS4gIFRoaXMgaXMgaW4gcGFydGlj dWxhciBhIHByb2JsZW0gb24gdGhlIGFhcmNoNjQKICAgbGFwdG9wcyB0aGF0IGV4aXN0IHRoZXNl IGRheXMsIGFuZCBtb2Rlcm4gc25hcGRyYWdvbiBhbmRyb2lkIGRldmljZXMuCiAgIChPbGRlciBk ZXZpY2VzIGFsc28gZW5hYmxlZCB0aGUgZGlzcGxheSBpbiBib290bG9hZGVyIGJ1dCBkaWQgbm90 CiAgIHRha2UgdGhlIGlvbW11IG91dCBvZiBieXBhc3MuKSAgQXR0YWNoaW5nIGEgRE1BIG9yIElE RU5USVRZIGRvbWFpbgogICB3aGlsZSBzY2Fub3V0IGlzIGFjdGl2ZSwgYmVmb3JlIHRoZSBkcml2 ZXIgaGFzIGEgY2hhbmNlIHRvIGludGVydmVuZSwKICAgbWFrZXMgdGhpbmdzIGdvICpib29tKgoK MikgV2UgYXJlIGN1cnJlbnRseSBibG9ja2VkIG9uIGxhbmRpbmcgc3VwcG9ydCBmb3IgR1BVIHBl ci1jb250ZXh0CiAgIHBhZ2V0YWJsZXMgYmVjYXVzZSBvZiB0aGUgZG9tYWluIGF0dGFjaGVkIGJl Zm9yZSBkcml2ZXIncyAtPnByb2JlKCkKICAgaXMgY2FsbGVkLgoKVGhpcyBzb2x2ZXMgYm90aCBw cm9ibGVtcy4KClNpZ25lZC1vZmYtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGNocm9taXVtLm9y Zz4KLS0tCiBkcml2ZXJzL2lvbW11L2lvbW11LmMgIHwgMTEgKysrKysrKysrKysKIGluY2x1ZGUv bGludXgvZGV2aWNlLmggfCAgMyArKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW9tbXUuYyBiL2Ry aXZlcnMvaW9tbXUvaW9tbXUuYwppbmRleCAwYzY3NGQ4MGMzN2YuLmVmYTA5NTdmOTc3MiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9pb21tdS9pb21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW9tbXUu YwpAQCAtMTU3Myw2ICsxNTczLDE3IEBAIHN0YXRpYyBpbnQgX19pb21tdV9hdHRhY2hfZGV2aWNl KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkgICAgZG9tYWluLT5vcHMtPmlzX2F0dGFj aF9kZWZlcnJlZChkb21haW4sIGRldikpCiAJCXJldHVybiAwOwogCisJLyoKKwkgKiBJZiBkcml2 ZXIgaXMgZ29pbmcgdG8gbWFuYWdlIGlvbW11IGRpcmVjdGx5LCB0aGVuIGF2b2lkCisJICogYXR0 YWNoaW5nIGFueSBub24gZHJpdmVyIG1hbmFnZWQgZG9tYWluLiAgVGhlcmUgY291bGQKKwkgKiBi ZSBhbHJlYWR5IGFjdGl2ZSBkbWEgdW5kZXJ3YXkgKGllLiBzY2Fub3V0IGluIGNhc2Ugb2YKKwkg KiBib290bG9hZGVyIGVuYWJsZWQgZGlzcGxheSksIGFuZCBpbnRlcmZlcmluZyB3aXRoIHRoYXQK KwkgKiB3aWxsIG1ha2UgdGhpbmdzIGdvICpib29tKgorCSAqLworCWlmICgoZG9tYWluLT50eXBl ICE9IElPTU1VX0RPTUFJTl9VTk1BTkFHRUQpICYmCisJICAgIGRldi0+ZHJpdmVyICYmIGRldi0+ ZHJpdmVyLT5kcml2ZXJfbWFuYWdlc19pb21tdSkKKwkJcmV0dXJuIDA7CisKIAlpZiAodW5saWtl bHkoZG9tYWluLT5vcHMtPmF0dGFjaF9kZXYgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwog CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZp Y2UuaAppbmRleCBlMTM4YmFhYmUwMWUuLmQ5OGFhNGQzYzhjMyAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0yODIsNyAr MjgyLDggQEAgc3RydWN0IGRldmljZV9kcml2ZXIgewogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsK IAljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8K IAotCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlh IHN5c2ZzICovCisJYm9vbCBzdXBwcmVzc19iaW5kX2F0dHJzOjE7CS8qIGRpc2FibGVzIGJpbmQv dW5iaW5kIHZpYSBzeXNmcyAqLworCWJvb2wgZHJpdmVyX21hbmFnZXNfaW9tbXU6MTsJLyogZHJp dmVyIG1hbmFnZXMgSU9NTVUgZXhwbGljaXRseSAqLwogCWVudW0gcHJvYmVfdHlwZSBwcm9iZV90 eXBlOwogCiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZAkqb2ZfbWF0Y2hfdGFibGU7Ci0tIAoy LjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74556C5B57D for ; Wed, 3 Jul 2019 00:43:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4A78B218AD for ; Wed, 3 Jul 2019 00:43:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TCnekBuP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727172AbfGCAnt (ORCPT ); Tue, 2 Jul 2019 20:43:49 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:35050 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726736AbfGCAns (ORCPT ); Tue, 2 Jul 2019 20:43:48 -0400 Received: by mail-qt1-f196.google.com with SMTP id d23so727907qto.2 for ; Tue, 02 Jul 2019 17:43:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J/H70/FePQbdKZEz0YI3H5/o3CPPkZQZGrIygUbL5uE=; b=TCnekBuPYD3hUrz8zIp0zu2L4/GpJvf48ABFai2kUMx5JRSj+cJ9F4qllXaSyBUW3P jUaysD401DDUnfOo3Klccf/XsoXJ16g19L5I8D93FmKem3TenRjTAPawa623RFJCL6qK d63Y6sMyeBjwYA4P/+VM58+DDKEo538UFqKZCsoF75gu8J+6hJVvOWOGyd58UpTYAb57 q5Ld3cG0P/Xnf8kMmLLMqTAZ1oqG80KTqDM7j+N5I9qC+N6LWOdROwCPko32+cCB7Ltn Y3vEBK04m3JwgwmnrrbIBtdJmXO9XPmSAo0oShklDieS2klivlvOqFdhJBLIoDcBywvk KvSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J/H70/FePQbdKZEz0YI3H5/o3CPPkZQZGrIygUbL5uE=; b=ggg6U2vaal+NR3nIscEYmu3uUTwlN9Rv2vhRefMVKrowF/YtrcszxYhDJlpgSsb4+T zw8eLXSVV9ZAdNjja5vVbvRytaVZXTHDR2T2nmuv3EQSzArPe5nIhBPzwZ8iLEZ7lzVy V73X8MXDPVC/ZZyG5DagFNyTeAykoa+bxVesvExOoWP2IQIghmBPzspaaMHTWVzq3jw0 N8jKSMUQz+uZWUzXJvB1GgD/u8N4nihGtYEDoXtLdPMcv8YLLjcUyKcp5hg2IZXRZYjT zRJ5v6FwrnGI4MM9yp6gqYmu3MnYyauppA2wNgzidfjTASeXHCp6ZUOjdUEBYXRqB0tt L4Xg== X-Gm-Message-State: APjAAAUxsfOkIkhXcZUDa7TbFvYGluzO2Iau2rqpG1eWBsCsE/589v+Q gZgaXU+Fby6JiCr2h9snxUsXaKy3y31GuA== X-Google-Smtp-Source: APXvYqwBpRrG3Pu/9gU8tjH7/kzX84pSdwZg+HHw7dt535o3fbveN8pbp8WelpaRmR8Le4djtZu+DQ== X-Received: by 2002:ac8:36b9:: with SMTP id a54mr27547900qtc.300.1562099216912; Tue, 02 Jul 2019 13:26:56 -0700 (PDT) Received: from localhost ([2601:184:4780:7861:5010:5849:d76d:b714]) by smtp.gmail.com with ESMTPSA id d38sm7249904qtb.95.2019.07.02.13.26.56 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 13:26:56 -0700 (PDT) From: Rob Clark To: iommu@lists.linux-foundation.org, dri-devel@lists.freedesktop.org Cc: aarch64-laptops@lists.linaro.org, Jordan Crouse , Rob Clark , Joerg Roedel , Greg Kroah-Hartman , "Rafael J. Wysocki" , Ulf Hansson , Rasmus Villemoes , Heikki Krogerus , Vivek Gautam , Bartosz Golaszewski , Joe Perches , Sudeep Holla , linux-kernel@vger.kernel.org Subject: [PATCH 1/2] iommu: add support for drivers that manage iommu explicitly Date: Tue, 2 Jul 2019 13:26:18 -0700 Message-Id: <20190702202631.32148-2-robdclark@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190702202631.32148-1-robdclark@gmail.com> References: <20190702202631.32148-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rob Clark Avoid attaching any non-driver managed domain if the driver indicates that it manages the iommu directly. This solves a couple problems that drm/msm + arm-smmu has with the iommu framework: 1) In some cases the bootloader takes the iommu out of bypass and enables the display. This is in particular a problem on the aarch64 laptops that exist these days, and modern snapdragon android devices. (Older devices also enabled the display in bootloader but did not take the iommu out of bypass.) Attaching a DMA or IDENTITY domain while scanout is active, before the driver has a chance to intervene, makes things go *boom* 2) We are currently blocked on landing support for GPU per-context pagetables because of the domain attached before driver's ->probe() is called. This solves both problems. Signed-off-by: Rob Clark --- drivers/iommu/iommu.c | 11 +++++++++++ include/linux/device.h | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 0c674d80c37f..efa0957f9772 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1573,6 +1573,17 @@ static int __iommu_attach_device(struct iommu_domain *domain, domain->ops->is_attach_deferred(domain, dev)) return 0; + /* + * If driver is going to manage iommu directly, then avoid + * attaching any non driver managed domain. There could + * be already active dma underway (ie. scanout in case of + * bootloader enabled display), and interfering with that + * will make things go *boom* + */ + if ((domain->type != IOMMU_DOMAIN_UNMANAGED) && + dev->driver && dev->driver->driver_manages_iommu) + return 0; + if (unlikely(domain->ops->attach_dev == NULL)) return -ENODEV; diff --git a/include/linux/device.h b/include/linux/device.h index e138baabe01e..d98aa4d3c8c3 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -282,7 +282,8 @@ struct device_driver { struct module *owner; const char *mod_name; /* used for built-in modules */ - bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ + bool suppress_bind_attrs:1; /* disables bind/unbind via sysfs */ + bool driver_manages_iommu:1; /* driver manages IOMMU explicitly */ enum probe_type probe_type; const struct of_device_id *of_match_table; -- 2.20.1