Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp3936358pxb; Tue, 7 Sep 2021 10:43:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXC4Cr8067Aw9jaz26uAiqVBpAx8MeuTOBM90p7/yGRu1tWuRhkbUr+3pQJJo/z6cO4KSP X-Received: by 2002:aa7:c24c:: with SMTP id y12mr672792edo.149.1631036605801; Tue, 07 Sep 2021 10:43:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631036605; cv=none; d=google.com; s=arc-20160816; b=JgWRa8GDYtqG0c6mKzGZf6ABb6+yaUoo+v5FYV4zsObYzquyn3NjAgXJGAB7CNyell Qi9jv4aBgsHN4+3XHc4iZHgwrwZsoCEronRfJCEl33gyaplASLaY+//jom8kRoAMU0hw BuUUqZuRyoYu7c9LliM54DUBFCHKZh7eH8AtdLAlgJrP0rOUeVI7PlvNB2PYmB6S++0G Iy0mE47PYV8+rTl82Eozv5KLdyKZiZrYiUV2rfiYJflCb1pwrkIzBF5AVUwQXQKdI6xK /NVLEY7amLDgHvyL+QpYoowRE0yOUhnF708zHGXUOjmAtI2iJ+SiaB4oc8Q9aIKNc0J1 f2tQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LwepDWImkuIA5stkYQAIEg9VyHhfX67GLfbm+wF6adQ=; b=s0bpjNaM/CnERauIQlewWcCjQPETRUnp6hIuT3zaksEG95x/loYwVmYZWo84ZFyJ6G 1XgsqdSTXI0evOq4PcvW0lK2ZI3iVMB4dSK541IJkDTFGbG2hlOss1pnDTcSRnQLA/wg iKiOMw2edS5rKUMy6cTETZnIIFfM9y5ddpL9K2YMS8cFNc3fJ4NKxZCQOchx7s8bUpP5 HAZ8zkcZ7EXsb6tb2v2U+lzb5LubR4SuewIy27OA3I5yre6a/qTAxU6sIbeRHTvkmLDX 8oE9ZIcR40QY31ig0BI9+e2B+4Qe+ri1p6Drtdv+iojGn8EcEVv4r3WrtNcuRKcn2ti4 0vhA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@walle.cc header.s=mail2016061301 header.b=aEmFIGSq; 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 k1si11259198ejx.491.2021.09.07.10.43.02; Tue, 07 Sep 2021 10:43:25 -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; dkim=pass header.i=@walle.cc header.s=mail2016061301 header.b=aEmFIGSq; 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 S1345225AbhIGQvI (ORCPT + 99 others); Tue, 7 Sep 2021 12:51:08 -0400 Received: from ssl.serverraum.org ([176.9.125.105]:50729 "EHLO ssl.serverraum.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234571AbhIGQvD (ORCPT ); Tue, 7 Sep 2021 12:51:03 -0400 Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id 91D2B2224D; Tue, 7 Sep 2021 18:49:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1631033394; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LwepDWImkuIA5stkYQAIEg9VyHhfX67GLfbm+wF6adQ=; b=aEmFIGSqVk9XaLG5RHuDYC3l7m9PIozNeuwEwotWmQQiUd8vSmVQwXLQl2L2ud38FvkRFg /m7jXKipzlst87bIt8MXLjZ3oaluzRoWtXEkdUuxzd/e3YG/G61jl4YgfmqfJzU6CbUOIO UZljlmKMibS8zYXH/U9rGQfeAOSiobQ= From: Michael Walle To: Robin Murphy , etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: "Lukas F . Hartmann" , Marek Vasut , Lucas Stach , Russell King , Christian Gmeiner , David Airlie , Daniel Vetter , Michael Walle Subject: [PATCH v2 3/3] drm/etnaviv: use a 32 bit mask as coherent DMA mask Date: Tue, 7 Sep 2021 18:49:45 +0200 Message-Id: <20210907164945.2309815-4-michael@walle.cc> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210907164945.2309815-1-michael@walle.cc> References: <20210907164945.2309815-1-michael@walle.cc> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The STLB and the first command buffer (which is used to set up the TLBs) has a 32 bit size restriction in hardware. There seems to be no way to specify addresses larger than 32 bit. Keep it simple and restict the addresses to the lower 4 GiB range for all coherent DMA memory allocations. Please note, that platform_device_alloc() will initialize dev->dma_mask to point to pdev->platform_dma_mask, thus dma_set_mask() will work as expected. While at it, move the dma_mask setup code to the of_dma_configure() to keep all the DMA setup code next to each other. Suggested-by: Lucas Stach Signed-off-by: Michael Walle --- drivers/gpu/drm/etnaviv/etnaviv_drv.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c index 54eb653ca295..0b756ecb1bc2 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c @@ -613,6 +613,24 @@ static int etnaviv_pdev_probe(struct platform_device *pdev) component_match_add(dev, &match, compare_str, names[i]); } + /* + * PTA and MTLB can have 40 bit base addresses, but + * unfortunately, an entry in the MTLB can only point to a + * 32 bit base address of a STLB. Moreover, to initialize the + * MMU we need a command buffer with a 32 bit address because + * without an MMU there is only an indentity mapping between + * the internal 32 bit addresses and the bus addresses. + * + * To make things easy, we set the dma_coherent_mask to 32 + * bit to make sure we are allocating the command buffers and + * TLBs in the lower 4 GiB address space. + */ + if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(40)) || + dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32))) { + dev_dbg(&pdev->dev, "No suitable DMA available\n"); + return -ENODEV; + } + /* * Apply the same DMA configuration to the virtual etnaviv * device as the GPU we found. This assumes that all Vivante @@ -671,8 +689,6 @@ static int __init etnaviv_init(void) of_node_put(np); goto unregister_platform_driver; } - pdev->dev.coherent_dma_mask = DMA_BIT_MASK(40); - pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; ret = platform_device_add(pdev); if (ret) { -- 2.30.2