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: 1010389 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gsgNgp1S"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43D1xJ1fSxz9s3q for ; Mon, 10 Dec 2018 23:05:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727361AbeLJMFj (ORCPT ); Mon, 10 Dec 2018 07:05:39 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:44492 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727323AbeLJMFi (ORCPT ); Mon, 10 Dec 2018 07:05:38 -0500 Received: by mail-pf1-f195.google.com with SMTP id u6so5288591pfh.11 for ; Mon, 10 Dec 2018 04:05:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=JCpbLhEp7H2kPMSM70FruLoUy5+B58yMAhAZ92UrWKc=; b=gsgNgp1Sz6a6AJuT5gL9FBKeZ/yLiKwWS+UsXolfHgya1iKgpR4vU6PM2vq5rNjBog 2gmHyt1X2pC8OAgRQJSg9jUmZZsxA0h24iLP6Ieqm1CLXGkUEOtrvdcgrsMZdgIpnCCk t4pu+iWbCcJFY0FMNNDBS9PYZFkI0MJ3vs7fWqwNaegicBKIPr1Ng66qYvgHu0gjRMS2 PJ+B9Nw0/JdZ2jL3SWi7GHCWMbhJnFdZ7sIzG5guHJrU5u2WKxM2fiB2gXzSkPlEP+rE 0uSj5/z0f4G4r0AHbdRDu091EUfhAbGoW3CAPLtvLvzqjDY1W5OqvzJNCJnMWzrOB1tp sVHA== 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=nNGON7ImTU+8iWNO88dAvn4VKW9IJBpKilWFWSqARkQ+dnqsu6zTNyfIutKhWhNkey 2n1E/S5wJlw4zYeFbxw3thOT+UDq7ddDLlDYLZdXXODqaM1ErA73H12/9wf8OnxRIyPT T/YKgEydlXDqrCJ3eMCXSE6IVn3g6nY1tk472rpYP5qJPvInAO+Q5kBuY1KUZS3HqZuG bGVu7d1SF1frCHUcKDVwwdtReFOZod0tfcoSAtmK2KPQlssO099ylx0nAsTRxiD2d9c7 NHHgwldlna7bznajxzBElR6uEKsPT5RebV1icYZDYMIGheQuFKBYDsPlpWoNVu1AqFua cmlw== X-Gm-Message-State: AA+aEWYgn53zi5NVrBRUFjNepk7UqEH7l3ywiktBPEd4fptGoa1svDP0 lDE+6vSeBaG1wh6+aYNJBh6RO1Ss 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 Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org 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 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 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);