From patchwork Fri Apr 6 14:19:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 895721 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="AJTO8z86"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="H5dV0PTC"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40HhgN63yLz9s16 for ; Sat, 7 Apr 2018 00:20:32 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5Xhdw7YTGPOVVrRNkh6MfSO32vVOYhlIIVq85v+51lY=; b=AJTO8z86a7lqK+ D8YAccAiZ6A35QSQKb+EkKo2OrhqlxkeAv83LhXiEVHnwxoLizbA7CK1Gldky3lc7eZhj0vB3+Mnt ejIhJa4gSLrfevwnf6yNCxCg35cM0KIVu1Ff2on1EsDWZOmg0HXFZBwEvsfQtXLbUyGmQw26CyVsI XZYTI6H5slQR2N3itEYYYPPq1HLpjfN4cUlxjglDy7ut6iTJNDWsb5KCa1vUVK1/R8lK9PRgrfqEx 2NhGYD6y+kuPJK9fZBfkhXFtcWZmVMh34bJLy5GJnNU26m0XZu6L6w9xjJKbzVWoicJQYoik2uM6+ rzZ9NPoS9AmqrKYbkyvQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1f4SE4-0001Jx-J7; Fri, 06 Apr 2018 14:20:24 +0000 Received: from mail-lf0-x242.google.com ([2a00:1450:4010:c07::242]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1f4SDY-0008Ct-W7 for linux-arm-kernel@lists.infradead.org; Fri, 06 Apr 2018 14:19:54 +0000 Received: by mail-lf0-x242.google.com with SMTP id m200-v6so793418lfm.4 for ; Fri, 06 Apr 2018 07:19:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0+zmRrO9BO89uqK08WJUwFs7r0N/cCmhTWuQadd9BYI=; b=H5dV0PTC17048nAk/ISKxdiIt+ESxOdCv2jXwO4+gkT3S5yey/5B+scZV0MzIbgMPw ORU7zkEJALQzQFhxx8kJkx+2Df2nqiU4UgHQjrYma8nAFXHuOAH9S55wSpRE3u9B30xT S3gLFazKjFoYrDMV8A7TaDqyLq/onX+teWc00= 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=0+zmRrO9BO89uqK08WJUwFs7r0N/cCmhTWuQadd9BYI=; b=pjBeVJ8+psdLUnOZ+nHflW3kG+oK/MLuq563IwWjldM+BDkZ2/5SbRFxsK43suzcUu ZQ/zTyzgfaEiPYhqqDQl4r8HJ9jFKWyk9cxQsdMnUCDvr3U6Sb8RtamOMSBnJpvkY0Fl C5iZTHhfAKjv+whzGZ8BddQJTOURht8gQy/nb8LFcknWSr4knFmET9iMXyoECTjsdc3C TgPQJmNvlX+O3DU+kNQ25SJJmhbx+XrO7bGn3xzSusVhX+9SqolT7Rvv7z0E9dXokma4 Mjhzy29djO8p/kbSHMxrSdF54L7yQkYpiI/36QDis+NDj4Mg/xNYkn7aClhm2y0AG3WN wFqA== X-Gm-Message-State: ALQs6tAr/GssIpI6xQFfgfwWGxu8ABgmMZcFjFC6xcxljBkzi8zatQur SlBv4Uc2gTAc0PP7Xz9E8tMvXnzoNA4= X-Google-Smtp-Source: AIpwx499O7ZVlg/nv97oiVQMZdCSXIEToq3tspy0H7cR4QiUcWGN46hW7a0vZROeBYcWtYbLssBklQ== X-Received: by 2002:a19:6919:: with SMTP id e25-v6mr16195720lfc.52.1523024381061; Fri, 06 Apr 2018 07:19:41 -0700 (PDT) Received: from genomnajs.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id e8-v6sm2098137lfc.88.2018.04.06.07.19.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Apr 2018 07:19:40 -0700 (PDT) From: Linus Walleij To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt , Liviu Dudau Subject: [PATCH 2/2 v2] drm/pl111: Enable device-specific assigned memory Date: Fri, 6 Apr 2018 16:19:35 +0200 Message-Id: <20180406141935.6801-2-linus.walleij@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180406141935.6801-1-linus.walleij@linaro.org> References: <20180406141935.6801-1-linus.walleij@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180406_071953_038152_CF519DCA X-CRM114-Status: GOOD ( 18.05 ) X-Spam-Score: -0.8 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-0.8 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2a00:1450:4010:c07:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Linus Walleij , Mali DP Maintainers , linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org List-Id: linux-imx-kernel.lists.patchwork.ozlabs.org The Versatile Express has 8 MB of dedicated video RAM (VRAM) on the motherboard, which is what we should be using for the PL111 if available. On this platform, the memory backplane is constructed so that only this memory will work properly with the CLCD on the motherboard, using any other memory region just gives random snow on the display. The CA9 Versatile Express also has a PL111 instance on its core tile. This is OK, it has been tested with the motherboard VRAM and that works just as fine as regular CMA memory. The memory is assigned to the device using the memory-region device tree property and a "shared-dma-pool" reserved memory pool like this: reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; vram: vram@48000000 { compatible = "shared-dma-pool"; reg = <0x48000000 0x00800000>; no-map; }; }; clcd@1f000 { compatible = "arm,pl111", "arm,primecell"; (...) memory-region = <&vram>; }ยท; Cc: Liviu Dudau Cc: Mali DP Maintainers Signed-off-by: Linus Walleij --- ChangeLog v1->v2: - Make sure to also call of_reserved_mem_device_release() at remove() and errorpath. --- drivers/gpu/drm/pl111/pl111_drv.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index 4621259d5387..bc57c15d9fe4 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include @@ -257,6 +258,10 @@ static int pl111_amba_probe(struct amba_device *amba_dev, drm->dev_private = priv; priv->variant = variant; + ret = of_reserved_mem_device_init(dev); + if (!ret) + dev_info(dev, "using device-specific reserved memory\n"); + if (of_property_read_u32(dev->of_node, "max-memory-bandwidth", &priv->memory_bw)) { dev_info(dev, "no max memory bandwidth specified, assume unlimited\n"); @@ -275,7 +280,8 @@ static int pl111_amba_probe(struct amba_device *amba_dev, priv->regs = devm_ioremap_resource(dev, &amba_dev->res); if (IS_ERR(priv->regs)) { dev_err(dev, "%s failed mmio\n", __func__); - return PTR_ERR(priv->regs); + ret = PTR_ERR(priv->regs); + goto mem_rel; } /* This may override some variant settings */ @@ -305,11 +311,15 @@ static int pl111_amba_probe(struct amba_device *amba_dev, dev_unref: drm_dev_unref(drm); +mem_rel: + of_reserved_mem_device_release(dev); + return ret; } static int pl111_amba_remove(struct amba_device *amba_dev) { + struct device *dev = &amba_dev->dev; struct drm_device *drm = amba_get_drvdata(amba_dev); struct pl111_drm_dev_private *priv = drm->dev_private; @@ -319,6 +329,7 @@ static int pl111_amba_remove(struct amba_device *amba_dev) drm_panel_bridge_remove(priv->bridge); drm_mode_config_cleanup(drm); drm_dev_unref(drm); + of_reserved_mem_device_release(dev); return 0; }