From patchwork Mon Dec 10 12:03:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10723253 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D5898112E for ; Tue, 11 Dec 2018 09:19:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C5FCD29E9A for ; Tue, 11 Dec 2018 09:19:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BAA2529E9D; Tue, 11 Dec 2018 09:19:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AADAE29A9C for ; Tue, 11 Dec 2018 09:19:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 349EE89D7F; Tue, 11 Dec 2018 09:18:55 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pg1-x541.google.com (mail-pg1-x541.google.com [IPv6:2607:f8b0:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 802E86E3FD for ; Mon, 10 Dec 2018 12:05:37 +0000 (UTC) Received: by mail-pg1-x541.google.com with SMTP id z11so4889144pgu.0 for ; Mon, 10 Dec 2018 04:05:37 -0800 (PST) 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:mime-version :content-transfer-encoding; bh=JCpbLhEp7H2kPMSM70FruLoUy5+B58yMAhAZ92UrWKc=; b=VdAMhB7qUAk1NZGp8xw2loenEkG5z1H1RQxWiONmpaRD0KIptY4j16eyXucYkEKpgg D0wWb6ltLjNXnqexh9WdMnm87d4st+ulpspchKhKdpY2DRpDnFtwqrheXEByl3ogzug5 A2wbouz/MOpugURzZblYcWzuAQUCsQiEXPahLQXsil2POp5AScjokEH8d/w1N4nix3bQ wvx2+Hxw1qZvujRI8vlKXnq94H5piL9/K1WPcP390kob91uU8epgHw76kssmdtsyUm3X 0E1upW7igcF08VQfZOQaXaxTpDcgleTe22HV5qE9PpS/0QINEnxyrTBVYtTl6jrBQlmQ 63rA== X-Gm-Message-State: AA+aEWYDbfyRFqgtQeap3dBv/0g70Ng2qTvOTj9TOWEITJzS2HhIec+b NF5DNrHBguEiMEGVOKLc0N0= X-Google-Smtp-Source: AFSGD/WgRkmv7ZXd6hXroorjibJ56AFWa++yelrqwbAu26yjCLH0zlODWpPjivE+AOMkBGimBCuNSA== X-Received: by 2002:a63:cc12:: with SMTP id x18mr10568057pgf.33.1544443537078; Mon, 10 Dec 2018 04:05:37 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id o84sm19755181pfi.172.2018.12.10.04.05.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Dec 2018 04:05:36 -0800 (PST) From: Dmitry Osipenko To: Marcel Ziswiler , Mikko Perttunen , Thierry Reding Subject: [RFC PATCH v1] drm/tegra: vic: Defer firmware loading until it is really needed Date: Mon, 10 Dec 2018 15:03:38 +0300 Message-Id: <20181210120338.29288-1-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 11 Dec 2018 09:18:52 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP DRM driver fails to load if VIC firmware is missing, let's defer the firmware loading until it is really needed. This eliminates the need to have initrd with the firmware if DRM driver is compiled as built-in. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/tegra/vic.c | 43 +++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/tegra/vic.c b/drivers/gpu/drm/tegra/vic.c index d47983deb1cf..efb75f290ff0 100644 --- a/drivers/gpu/drm/tegra/vic.c +++ b/drivers/gpu/drm/tegra/vic.c @@ -96,6 +96,34 @@ static int vic_runtime_suspend(struct device *dev) return 0; } +static int vic_load_firmware(struct vic *vic) +{ + struct host1x_client *client = &vic->client.base; + struct drm_device *dev = dev_get_drvdata(client->parent); + struct tegra_drm *tegra = dev->dev_private; + int err; + + if (vic->falcon.data) + return 0; + + vic->falcon.data = tegra; + + err = falcon_read_firmware(&vic->falcon, vic->config->firmware); + if (err < 0) + goto err_cleanup; + + err = falcon_load_firmware(&vic->falcon); + if (err < 0) + goto err_cleanup; + + return 0; + +err_cleanup: + vic->falcon.data = NULL; + + return err; +} + static int vic_boot(struct vic *vic) { u32 fce_ucode_size, fce_bin_data_offset; @@ -105,6 +133,10 @@ static int vic_boot(struct vic *vic) if (vic->booted) return 0; + err = vic_load_firmware(vic); + if (err < 0) + return err; + /* setup clockgating registers */ vic_writel(vic, CG_IDLE_CG_DLY_CNT(4) | CG_IDLE_CG_EN | @@ -181,13 +213,6 @@ static int vic_init(struct host1x_client *client) vic->domain = tegra->domain; } - if (!vic->falcon.data) { - vic->falcon.data = tegra; - err = falcon_load_firmware(&vic->falcon); - if (err < 0) - goto detach; - } - vic->channel = host1x_channel_request(client->dev); if (!vic->channel) { err = -ENOMEM; @@ -372,10 +397,6 @@ static int vic_probe(struct platform_device *pdev) if (err < 0) return err; - err = falcon_read_firmware(&vic->falcon, vic->config->firmware); - if (err < 0) - goto exit_falcon; - platform_set_drvdata(pdev, vic); INIT_LIST_HEAD(&vic->client.base.list);