From nobody Fri Dec 19 19:20:46 2025 Received: from smtp1.tecnico.ulisboa.pt (smtp1.tecnico.ulisboa.pt [193.136.128.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82E04286885; Fri, 6 Jun 2025 10:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.136.128.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; cv=none; b=NXYv4D27Aqnnji8W9BdcxCQ7OCeip3GPPqRVfTzxu83LWM7f7KleT6lyUfiPpxJ11Qzl5GZF7HnM9Qao1Jfw5KdXdoQxUR09OkF6Xdfcv1KyJk4kHT/I6xKGYoPI6DMh2gfa2AOv6tdzd91ZRefHDdH2H7Ni7rxu+FZAcVbTGY4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; c=relaxed/simple; bh=uVhKmlFX6xxJiRtWYdWQLCViIsAC6XjpfsprqmIcIR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mmQVS8uZ8cRDcSBOWp6Q65IDgzKypKEAF/DJo/uEgiBHyq/TuCGjT3dO7Wi1W/T7g/szRpXJQR6o6dBJYeYZsiJlAXcMz1iW2kCuDkpNXGdnou3J0TeUgncqkWJf/KdRjGQSAH/t+/rjNMwUYPN8ty5v5o+M822lzucYANetv8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt; spf=pass smtp.mailfrom=tecnico.ulisboa.pt; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b=v3U2l8dU; arc=none smtp.client-ip=193.136.128.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b="v3U2l8dU" Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTP id 3168D6002C17; Fri, 6 Jun 2025 11:45:57 +0100 (WEST) X-Virus-Scanned: by amavis-2.13.0 (20230106) (Debian) at tecnico.ulisboa.pt Received: from smtp1.tecnico.ulisboa.pt ([127.0.0.1]) by localhost (smtp1.tecnico.ulisboa.pt [127.0.0.1]) (amavis, port 10025) with LMTP id MaIk7XNqnTIi; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) Received: from mail1.tecnico.ulisboa.pt (mail1.ist.utl.pt [IPv6:2001:690:2100:1::b3dd:b9ac]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTPS id 4F3B26003C31; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tecnico.ulisboa.pt; s=mail; t=1749206751; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Lop7ASnFxNTnFxxr2Eh/Ar6Wd8pdtjHObOvjqPD826Q=; b=v3U2l8dU8QZuyh3RP+DuUbLvxe4minLcnV80Cbg+9Nm9TUQAYFuOteiKga/sAtfyrZ3oLo eoVwRYZgTknnODyaFM1mhKfyX7WZLVrERIL87FT5ZisQgmQQ23RN8/7CsPhfoBQVcVsjvX iwkvgyYVqQZVWZvZhbKc266ISMlOIY0= Received: from [192.168.1.151] (unknown [IPv6:2001:8a0:57db:f00:3ee2:38aa:e2c9:7dde]) (Authenticated sender: ist187313) by mail1.tecnico.ulisboa.pt (Postfix) with ESMTPSA id 26BE9360088; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) From: Diogo Ivo Date: Fri, 06 Jun 2025 11:45:34 +0100 Subject: [PATCH 1/3] drm/tegra: Add NVJPG driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250606-diogo-nvjpg-v1-1-5f2c36feeb39@tecnico.ulisboa.pt> References: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> In-Reply-To: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> To: Thierry Reding , Mikko Perttunen , David Airlie , Simona Vetter , Jonathan Hunter , Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1749206748; l=11983; i=diogo.ivo@tecnico.ulisboa.pt; s=20240529; h=from:subject:message-id; bh=uVhKmlFX6xxJiRtWYdWQLCViIsAC6XjpfsprqmIcIR8=; b=+5/sdjjIIBv+LL3RhQzFECYelndCtjCA1iNPFMzqWEi3FiXfJeUdtSNJCTVhQwhJ+7+D2Qi5Y JIRunI72N7NBy3ib2YIfpR/VW8qoE7ACsSK07Lt1tZg2Hx5epX2o1v4 X-Developer-Key: i=diogo.ivo@tecnico.ulisboa.pt; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= Add support for booting and using NVJPG on Tegra210 to the Host1x and TegraDRM drivers. This driver only supports the new TegraDRM uAPI. Signed-off-by: Diogo Ivo --- drivers/gpu/drm/tegra/Makefile | 1 + drivers/gpu/drm/tegra/drm.c | 2 + drivers/gpu/drm/tegra/drm.h | 1 + drivers/gpu/drm/tegra/nvjpg.c | 379 +++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 383 insertions(+) diff --git a/drivers/gpu/drm/tegra/Makefile b/drivers/gpu/drm/tegra/Makefile index 6fc4b504e7861df8802f3f0f5d6faf9eb167b27a..e399b40d64a1d2070b27c2219a3= 6693a8e3edc61 100644 --- a/drivers/gpu/drm/tegra/Makefile +++ b/drivers/gpu/drm/tegra/Makefile @@ -25,6 +25,7 @@ tegra-drm-y :=3D \ falcon.o \ vic.o \ nvdec.o \ + nvjpg.o \ riscv.o =20 tegra-drm-y +=3D trace.o diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 4596073fe28fa1beb6689da305775f4468714548..f44fb145920ae77dda82780a659= a98c88ea25a5a 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -1383,6 +1383,7 @@ static const struct of_device_id host1x_drm_subdevs[]= =3D { { .compatible =3D "nvidia,tegra210-sor1", }, { .compatible =3D "nvidia,tegra210-vic", }, { .compatible =3D "nvidia,tegra210-nvdec", }, + { .compatible =3D "nvidia,tegra210-nvjpg", }, { .compatible =3D "nvidia,tegra186-display", }, { .compatible =3D "nvidia,tegra186-dc", }, { .compatible =3D "nvidia,tegra186-sor", }, @@ -1421,6 +1422,7 @@ static struct platform_driver * const drivers[] =3D { &tegra_gr3d_driver, &tegra_vic_driver, &tegra_nvdec_driver, + &tegra_nvjpg_driver, }; =20 static int __init host1x_drm_init(void) diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h index 0b65e69f3a8add906e48b471804ad45bb3241455..64c8577720245564c421b85057a= 02419e235a6b6 100644 --- a/drivers/gpu/drm/tegra/drm.h +++ b/drivers/gpu/drm/tegra/drm.h @@ -212,5 +212,6 @@ extern struct platform_driver tegra_gr2d_driver; extern struct platform_driver tegra_gr3d_driver; extern struct platform_driver tegra_vic_driver; extern struct platform_driver tegra_nvdec_driver; +extern struct platform_driver tegra_nvjpg_driver; =20 #endif /* HOST1X_DRM_H */ diff --git a/drivers/gpu/drm/tegra/nvjpg.c b/drivers/gpu/drm/tegra/nvjpg.c new file mode 100644 index 0000000000000000000000000000000000000000..57aa74d339d9cea08746aa91b5c= 8d846962988ee --- /dev/null +++ b/drivers/gpu/drm/tegra/nvjpg.c @@ -0,0 +1,379 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "drm.h" +#include "falcon.h" + +struct nvjpg_config { + const char *firmware; + unsigned int version; +}; + +struct nvjpg { + struct falcon falcon; + + void __iomem *regs; + struct tegra_drm_client client; + struct device *dev; + struct clk *clk; + struct reset_control *rst; + + /* Platform configuration */ + const struct nvjpg_config *config; +}; + +static inline struct nvjpg *to_nvjpg(struct tegra_drm_client *client) +{ + return container_of(client, struct nvjpg, client); +} + +static int nvjpg_init(struct host1x_client *client) +{ + struct tegra_drm_client *drm =3D host1x_to_drm_client(client); + struct drm_device *dev =3D dev_get_drvdata(client->host); + struct tegra_drm *tegra =3D dev->dev_private; + struct nvjpg *nvjpg =3D to_nvjpg(drm); + int err; + + err =3D host1x_client_iommu_attach(client); + if (err < 0 && err !=3D -ENODEV) { + dev_err(nvjpg->dev, "failed to attach to domain: %d\n", err); + return err; + } + + err =3D tegra_drm_register_client(tegra, drm); + if (err < 0) + goto detach; + + /* + * Inherit the DMA parameters (such as maximum segment size) from the + * parent host1x device. + */ + client->dev->dma_parms =3D client->host->dma_parms; + + return 0; + +detach: + host1x_client_iommu_detach(client); + + return err; +} + +static int nvjpg_exit(struct host1x_client *client) +{ + struct tegra_drm_client *drm =3D host1x_to_drm_client(client); + struct drm_device *dev =3D dev_get_drvdata(client->host); + struct tegra_drm *tegra =3D dev->dev_private; + struct nvjpg *nvjpg =3D to_nvjpg(drm); + int err; + + /* avoid a dangling pointer just in case this disappears */ + client->dev->dma_parms =3D NULL; + + err =3D tegra_drm_unregister_client(tegra, drm); + if (err < 0) + return err; + + pm_runtime_dont_use_autosuspend(client->dev); + pm_runtime_force_suspend(client->dev); + + host1x_client_iommu_detach(client); + + if (client->group) { + dma_unmap_single(nvjpg->dev, nvjpg->falcon.firmware.phys, + nvjpg->falcon.firmware.size, DMA_TO_DEVICE); + tegra_drm_free(tegra, nvjpg->falcon.firmware.size, + nvjpg->falcon.firmware.virt, + nvjpg->falcon.firmware.iova); + } else { + dma_free_coherent(nvjpg->dev, nvjpg->falcon.firmware.size, + nvjpg->falcon.firmware.virt, + nvjpg->falcon.firmware.iova); + } + + return 0; +} + +static const struct host1x_client_ops nvjpg_client_ops =3D { + .init =3D nvjpg_init, + .exit =3D nvjpg_exit, +}; + +static int nvjpg_load_falcon_firmware(struct nvjpg *nvjpg) +{ + struct host1x_client *client =3D &nvjpg->client.base; + struct tegra_drm *tegra =3D nvjpg->client.drm; + dma_addr_t iova; + size_t size; + void *virt; + int err; + + if (nvjpg->falcon.firmware.virt) + return 0; + + err =3D falcon_read_firmware(&nvjpg->falcon, nvjpg->config->firmware); + if (err < 0) + return err; + + size =3D nvjpg->falcon.firmware.size; + + if (!client->group) { + virt =3D dma_alloc_coherent(nvjpg->dev, size, &iova, GFP_KERNEL); + + err =3D dma_mapping_error(nvjpg->dev, iova); + if (err < 0) + return err; + } else { + virt =3D tegra_drm_alloc(tegra, size, &iova); + if (IS_ERR(virt)) + return PTR_ERR(virt); + } + + nvjpg->falcon.firmware.virt =3D virt; + nvjpg->falcon.firmware.iova =3D iova; + + err =3D falcon_load_firmware(&nvjpg->falcon); + if (err < 0) + goto cleanup; + + /* + * In this case we have received an IOVA from the shared domain, so we + * need to make sure to get the physical address so that the DMA API + * knows what memory pages to flush the cache for. + */ + if (client->group) { + dma_addr_t phys; + + phys =3D dma_map_single(nvjpg->dev, virt, size, DMA_TO_DEVICE); + + err =3D dma_mapping_error(nvjpg->dev, phys); + if (err < 0) + goto cleanup; + + nvjpg->falcon.firmware.phys =3D phys; + } + + return 0; + +cleanup: + if (!client->group) + dma_free_coherent(nvjpg->dev, size, virt, iova); + else + tegra_drm_free(tegra, size, virt, iova); + + return err; +} + +static __maybe_unused int nvjpg_runtime_resume(struct device *dev) +{ + struct nvjpg *nvjpg =3D dev_get_drvdata(dev); + int err; + + err =3D clk_prepare_enable(nvjpg->clk); + if (err < 0) + return err; + + usleep_range(20, 30); + + if (nvjpg->rst) { + err =3D reset_control_acquire(nvjpg->rst); + if (err < 0) { + dev_err(dev, "failed to acquire reset: %d\n", err); + goto disable_clk; + } + + err =3D reset_control_deassert(nvjpg->rst); + if (err < 0) { + dev_err(dev, "failed to deassert reset: %d\n", err); + goto release_reset; + } + + usleep_range(20, 30); + } + + err =3D nvjpg_load_falcon_firmware(nvjpg); + if (err < 0) + goto assert_reset; + + err =3D falcon_boot(&nvjpg->falcon); + if (err < 0) + goto assert_reset; + + return 0; + +assert_reset: + reset_control_assert(nvjpg->rst); +release_reset: + reset_control_release(nvjpg->rst); +disable_clk: + clk_disable_unprepare(nvjpg->clk); + return err; +} + +static __maybe_unused int nvjpg_runtime_suspend(struct device *dev) +{ + struct nvjpg *nvjpg =3D dev_get_drvdata(dev); + int err; + + if (nvjpg->rst) { + err =3D reset_control_assert(nvjpg->rst); + if (err < 0) { + dev_err(dev, "failed to assert reset: %d\n", err); + return err; + } + + usleep_range(20, 30); + reset_control_release(nvjpg->rst); + } + + clk_disable_unprepare(nvjpg->clk); + + return 0; +} + +static int nvjpg_can_use_memory_ctx(struct tegra_drm_client *client, bool = *supported) +{ + *supported =3D false; + + return 0; +} + +static const struct tegra_drm_client_ops nvjpg_ops =3D { + .get_streamid_offset =3D NULL, + .can_use_memory_ctx =3D nvjpg_can_use_memory_ctx, +}; +#define NVIDIA_TEGRA_210_NVJPG_FIRMWARE "nvidia/tegra210/nvjpg.bin" + +static const struct nvjpg_config nvjpg_t210_config =3D { + .firmware =3D NVIDIA_TEGRA_210_NVJPG_FIRMWARE, + .version =3D 0x21, +}; + +static const struct of_device_id tegra_nvjpg_of_match[] =3D { + { .compatible =3D "nvidia,tegra210-nvjpg", .data =3D &nvjpg_t210_config }, + { }, +}; +MODULE_DEVICE_TABLE(of, tegra_nvjpg_of_match); + +static int nvjpg_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct nvjpg *nvjpg; + int err; + + /* inherit DMA mask from host1x parent */ + err =3D dma_coerce_mask_and_coherent(dev, *dev->parent->dma_mask); + if (err < 0) { + dev_err(&pdev->dev, "failed to set DMA mask: %d\n", err); + return err; + } + + nvjpg =3D devm_kzalloc(dev, sizeof(*nvjpg), GFP_KERNEL); + if (!nvjpg) + return -ENOMEM; + + nvjpg->config =3D of_device_get_match_data(dev); + + nvjpg->regs =3D devm_platform_get_and_ioremap_resource(pdev, 0, NULL); + if (IS_ERR(nvjpg->regs)) + return PTR_ERR(nvjpg->regs); + + nvjpg->rst =3D devm_reset_control_get_exclusive_released(&pdev->dev, "nvj= pg"); + if (IS_ERR(nvjpg->rst)) { + err =3D PTR_ERR(nvjpg->rst); + + if (err !=3D -EBUSY || WARN_ON(!pdev->dev.pm_domain)) { + dev_err(&pdev->dev, "failed to get reset control: %d\n", + err); + return err; + } + + /* + * At this point, the reset control is most likely being used + * by the generic power domain implementation. With any luck + * the power domain will have taken care of resetting the SOR + * and we don't have to do anything. + */ + nvjpg->rst =3D NULL; + } + + nvjpg->clk =3D devm_clk_get(dev, "nvjpg"); + if (IS_ERR(nvjpg->clk)) { + dev_err(&pdev->dev, "failed to get clock\n"); + return PTR_ERR(nvjpg->clk); + } + + nvjpg->falcon.dev =3D dev; + nvjpg->falcon.regs =3D nvjpg->regs; + + err =3D falcon_init(&nvjpg->falcon); + if (err < 0) + return err; + + platform_set_drvdata(pdev, nvjpg); + + INIT_LIST_HEAD(&nvjpg->client.base.list); + nvjpg->client.base.ops =3D &nvjpg_client_ops; + nvjpg->client.base.dev =3D dev; + nvjpg->client.base.class =3D HOST1X_CLASS_NVJPG; + nvjpg->dev =3D dev; + + INIT_LIST_HEAD(&nvjpg->client.list); + nvjpg->client.version =3D nvjpg->config->version; + nvjpg->client.ops =3D &nvjpg_ops; + + err =3D host1x_client_register(&nvjpg->client.base); + if (err < 0) { + dev_err(dev, "failed to register host1x client: %d\n", err); + goto exit_falcon; + } + + pm_runtime_use_autosuspend(dev); + pm_runtime_set_autosuspend_delay(dev, 500); + devm_pm_runtime_enable(dev); + + return 0; + +exit_falcon: + falcon_exit(&nvjpg->falcon); + + return err; +} + +static void nvjpg_remove(struct platform_device *pdev) +{ + struct nvjpg *nvjpg =3D platform_get_drvdata(pdev); + + host1x_client_unregister(&nvjpg->client.base); + falcon_exit(&nvjpg->falcon); +} + +static const struct dev_pm_ops nvjpg_pm_ops =3D { + SET_RUNTIME_PM_OPS(nvjpg_runtime_suspend, nvjpg_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) +}; + +struct platform_driver tegra_nvjpg_driver =3D { + .driver =3D { + .name =3D "tegra-nvjpg", + .of_match_table =3D tegra_nvjpg_of_match, + .pm =3D &nvjpg_pm_ops + }, + .probe =3D nvjpg_probe, + .remove =3D nvjpg_remove, +}; + +#if IS_ENABLED(CONFIG_ARCH_TEGRA_210_SOC) +MODULE_FIRMWARE(NVIDIA_TEGRA_210_NVJPG_FIRMWARE); +#endif --=20 2.49.0 From nobody Fri Dec 19 19:20:46 2025 Received: from smtp1.tecnico.ulisboa.pt (smtp1.tecnico.ulisboa.pt [193.136.128.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82E6C286887; Fri, 6 Jun 2025 10:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.136.128.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; cv=none; b=RSRpSLP3G8YLcDtU/Y5nJjnZPLda8SnIvJUv3ZpOGkRcqEXnMA0y0Cj/Wwx18KuYVCWDg7FFxOQsjFeQrgF6FL3KiSHYz87jSmEd659Jx7RH8KDLpBxPQlLFMrb+Zy0tYnBREyjyJKscb+miUSnD88BbN/MX2Wkk06BuzY4qly8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; c=relaxed/simple; bh=q9+0oSCFBDd2MWoVLijNz55CY4fughnVcsPn8mNInYs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dkwa5uASRYz6QfKn32AEihFeyFC6xijAYe9nfkoH/v70QAW4aC6iyU71S2sveoAK+poaj0B9LRypWG7ykeVc487BXx6M2F/sutx/F95q+Vdzf0bZ3/b8DbepFZfwpYY1PifiXAEtIiMdlldv7Y5spg3ALFqjhZ30CPTZtj/Lya4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt; spf=pass smtp.mailfrom=tecnico.ulisboa.pt; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b=nN76/b5F; arc=none smtp.client-ip=193.136.128.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b="nN76/b5F" Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTP id 1313E600025B; Fri, 6 Jun 2025 11:45:57 +0100 (WEST) X-Virus-Scanned: by amavis-2.13.0 (20230106) (Debian) at tecnico.ulisboa.pt Received: from smtp1.tecnico.ulisboa.pt ([127.0.0.1]) by localhost (smtp1.tecnico.ulisboa.pt [127.0.0.1]) (amavis, port 10025) with LMTP id SKFrJ_ufbfh2; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) Received: from mail1.tecnico.ulisboa.pt (mail1.ist.utl.pt [193.136.128.10]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTPS id 669866003C38; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tecnico.ulisboa.pt; s=mail; t=1749206751; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZaEG+cKz+JD7aGSqShRfi6WuHINMdAa8GgHkpLiaHhg=; b=nN76/b5Fc9fyfazu0yO0KBn+vM+8+8tl9N5fWxOVFy+I8pjCzdBXaUeivJaffJjKVYtolc GJgeZsZoA4bPsjYmOgWHdtjBMn9vbhI4SIvReWQUEBaQJJHRSB0mB7Hib5d5/YHpbtmxKz 5bTrPnw7B1V9JV999yBWUGIWTmhZexE= Received: from [192.168.1.151] (unknown [IPv6:2001:8a0:57db:f00:3ee2:38aa:e2c9:7dde]) (Authenticated sender: ist187313) by mail1.tecnico.ulisboa.pt (Postfix) with ESMTPSA id 42E1036008A; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) From: Diogo Ivo Date: Fri, 06 Jun 2025 11:45:35 +0100 Subject: [PATCH 2/3] arm64: tegra: Add NVJPG power-domain node Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250606-diogo-nvjpg-v1-2-5f2c36feeb39@tecnico.ulisboa.pt> References: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> In-Reply-To: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> To: Thierry Reding , Mikko Perttunen , David Airlie , Simona Vetter , Jonathan Hunter , Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1749206748; l=837; i=diogo.ivo@tecnico.ulisboa.pt; s=20240529; h=from:subject:message-id; bh=q9+0oSCFBDd2MWoVLijNz55CY4fughnVcsPn8mNInYs=; b=t8KGWayT1F1ZRaHRceA/xKDnrS5cgasfW6I8W+gARg/gYoalH/NIMfV+R8JL2J5vnJPiZDmpj drsywr+cHJzCOkrYb0fzGtqS+sBMw0GedI2DZjsU7tLm4/sCmTTve2r X-Developer-Key: i=diogo.ivo@tecnico.ulisboa.pt; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= Add the NVJPG power-domain node in order to support the NVJPG accelerator. Signed-off-by: Diogo Ivo Reviewed-by: Mikko Perttunen --- arch/arm64/boot/dts/nvidia/tegra210.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts= /nvidia/tegra210.dtsi index 402b0ede1472af625d9d9e811f5af306d436cc98..6f8cdf012f0f12a16716e9d479c= 46b330bbb7dda 100644 --- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi @@ -947,6 +947,12 @@ pd_xusbhost: xusbc { resets =3D <&tegra_car TEGRA210_CLK_XUSB_HOST>; #power-domain-cells =3D <0>; }; + + pd_nvjpg: nvjpg { + clocks =3D <&tegra_car TEGRA210_CLK_NVJPG>; + resets =3D <&tegra_car 195>; + #power-domain-cells =3D <0>; + }; }; }; =20 --=20 2.49.0 From nobody Fri Dec 19 19:20:46 2025 Received: from smtp1.tecnico.ulisboa.pt (smtp1.tecnico.ulisboa.pt [193.136.128.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82D8A28643F; Fri, 6 Jun 2025 10:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.136.128.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; cv=none; b=KOOt09dkz+XFJoN9ydCn54Pbm40hucp4pUSHlpFZCNSwZ/tC4YHpd612lhbkg0raesApbrazMQyPQ+Dx540lUm0QMfh89UQSmtil42m7kRWAVFP9aadeLNljQzV42DLhwoQuV+N2WsSlZEY89XDr+QRn7g1yCNgcNu/A17aj4+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749206767; c=relaxed/simple; bh=+723/NY6KvxdN/NVCwc/Xg4at7iqHe19s5FcoIyfirg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Fxsq6Qd9RLHu9xuX/h99LAv1YbYcJVn6ySDsncIIfFg58lK6XZ0AFWNlcGRqCRQ8EDbmrYYdEur9ZAMHwiMTGIQovapHHglVsaHgIUe18G6a54pW+ZLCEwtv00cKtyXcglpMB0iqARTZBzcMw0S+3rWw4EhPz/9PAhTE7RG/siw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt; spf=pass smtp.mailfrom=tecnico.ulisboa.pt; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b=Xc9ZCPYr; arc=none smtp.client-ip=193.136.128.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tecnico.ulisboa.pt Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=tecnico.ulisboa.pt header.i=@tecnico.ulisboa.pt header.b="Xc9ZCPYr" Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTP id 5A3AD6002C18; Fri, 6 Jun 2025 11:45:57 +0100 (WEST) X-Virus-Scanned: by amavis-2.13.0 (20230106) (Debian) at tecnico.ulisboa.pt Received: from smtp1.tecnico.ulisboa.pt ([127.0.0.1]) by localhost (smtp1.tecnico.ulisboa.pt [127.0.0.1]) (amavis, port 10025) with LMTP id DAvTjK_YH0C4; Fri, 6 Jun 2025 11:45:52 +0100 (WEST) Received: from mail1.tecnico.ulisboa.pt (mail1.ist.utl.pt [193.136.128.10]) by smtp1.tecnico.ulisboa.pt (Postfix) with ESMTPS id 810AB6003C3B; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tecnico.ulisboa.pt; s=mail; t=1749206751; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=g3RaW7nJDY4u0LgCaykCArI3bAHh2H+SVvOp/hfhgUg=; b=Xc9ZCPYrHFG5E5SkpLETHHz2Kkbzf5BzgsIeC7MhYq8dyOF4d8glxXhgu0rbb3jkMaDiHp 8qUTrvEdB9rYPUSBg2WQ88eaDohmZegGtvakWR1o7C+PHYslhg4cONyvF034pdaYhFwc7w 9r5nKQnYON05kBIiDk3NF6yInetiMpI= Received: from [192.168.1.151] (unknown [IPv6:2001:8a0:57db:f00:3ee2:38aa:e2c9:7dde]) (Authenticated sender: ist187313) by mail1.tecnico.ulisboa.pt (Postfix) with ESMTPSA id 5B86336008B; Fri, 6 Jun 2025 11:45:51 +0100 (WEST) From: Diogo Ivo Date: Fri, 06 Jun 2025 11:45:36 +0100 Subject: [PATCH 3/3] arm64: tegra: Add NVJPG node Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250606-diogo-nvjpg-v1-3-5f2c36feeb39@tecnico.ulisboa.pt> References: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> In-Reply-To: <20250606-diogo-nvjpg-v1-0-5f2c36feeb39@tecnico.ulisboa.pt> To: Thierry Reding , Mikko Perttunen , David Airlie , Simona Vetter , Jonathan Hunter , Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1749206748; l=1018; i=diogo.ivo@tecnico.ulisboa.pt; s=20240529; h=from:subject:message-id; bh=+723/NY6KvxdN/NVCwc/Xg4at7iqHe19s5FcoIyfirg=; b=vLVZFQrZn4UcAC2DS79V2Tka/+rkbmSG2SzFuLdk4ZaguRvAfmXaJBG5imLAXrQZTN3HcBvjK 2koOIxwEcb8CUFXkIxVk29ff3avixffo84Bk5LHkmdxtHFSMpUXoJBU X-Developer-Key: i=diogo.ivo@tecnico.ulisboa.pt; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= The Tegra X1 chip contains a NVJPG accelerator capable of encoding/decoding JPEG files in hardware, so add its DT node. Signed-off-by: Diogo Ivo Reviewed-by: Mikko Perttunen --- arch/arm64/boot/dts/nvidia/tegra210.dtsi | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts= /nvidia/tegra210.dtsi index 6f8cdf012f0f12a16716e9d479c46b330bbb7dda..087f38256fd40f57c4685e907f9= 682eb49ee31db 100644 --- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi @@ -253,7 +253,13 @@ vic@54340000 { nvjpg@54380000 { compatible =3D "nvidia,tegra210-nvjpg"; reg =3D <0x0 0x54380000 0x0 0x00040000>; - status =3D "disabled"; + clocks =3D <&tegra_car TEGRA210_CLK_NVJPG>; + clock-names =3D "nvjpg"; + resets =3D <&tegra_car 195>; + reset-names =3D "nvjpg"; + + iommus =3D <&mc TEGRA_SWGROUP_NVJPG>; + power-domains =3D <&pd_nvjpg>; }; =20 dsib: dsi@54400000 { --=20 2.49.0