From 59a24174d4722751f9c4d83d651f256d9a49dbc9 Mon Sep 17 00:00:00 2001 From: Mikko Perttunen Date: Wed, 10 Aug 2022 17:09:16 +0300 Subject: [PATCH] drm/tegra: Add NVENC/NVJPG support on Tegra234 Add NVENC/NVJPG support on Tegra234. These work similarly to the ones on Tegra194, so no big changes. Bug 3778105 Signed-off-by: Mikko Perttunen Change-Id: I4a4b12d5625f927c69a6dc1c6b6bade1bca7b171 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2771770 (cherry picked from commit ee6576a1493dae1ddc5c8dc3b415d0987f670390) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2759062 Reviewed-by: Jonathan Hunter GVS: Gerrit_Virtual_Submit Tested-by: Jonathan Hunter --- drivers/gpu/drm/tegra/drm.c | 2 ++ drivers/gpu/drm/tegra/nvenc.c | 13 +++++++++++++ drivers/gpu/drm/tegra/nvjpg.c | 25 ++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index e2206d89..e75fa2c0 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -1399,6 +1399,8 @@ static const struct of_device_id host1x_drm_subdevs[] = { { .compatible = "nvidia,tegra194-nvjpg", }, { .compatible = "nvidia,tegra234-vic", }, { .compatible = "nvidia,tegra234-nvdec", }, + { .compatible = "nvidia,tegra234-nvenc", }, + { .compatible = "nvidia,tegra234-nvjpg", }, { /* sentinel */ } }; diff --git a/drivers/gpu/drm/tegra/nvenc.c b/drivers/gpu/drm/tegra/nvenc.c index dcd9c245..a39b71d4 100644 --- a/drivers/gpu/drm/tegra/nvenc.c +++ b/drivers/gpu/drm/tegra/nvenc.c @@ -348,10 +348,20 @@ static const struct nvenc_config nvenc_t194_config = { .num_instances = 2, }; +#define NVIDIA_TEGRA_234_NVENC_FIRMWARE "nvidia/tegra234/nvenc.bin" + +static const struct nvenc_config nvenc_t234_config = { + .firmware = NVIDIA_TEGRA_234_NVENC_FIRMWARE, + .version = 0x23, + .supports_sid = true, + .num_instances = 1, +}; + static const struct of_device_id tegra_nvenc_of_match[] = { { .compatible = "nvidia,tegra210-nvenc", .data = &nvenc_t210_config }, { .compatible = "nvidia,tegra186-nvenc", .data = &nvenc_t186_config }, { .compatible = "nvidia,tegra194-nvenc", .data = &nvenc_t194_config }, + { .compatible = "nvidia,tegra234-nvenc", .data = &nvenc_t234_config }, { }, }; MODULE_DEVICE_TABLE(of, tegra_nvenc_of_match); @@ -479,3 +489,6 @@ MODULE_FIRMWARE(NVIDIA_TEGRA_186_NVENC_FIRMWARE); #if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) MODULE_FIRMWARE(NVIDIA_TEGRA_194_NVENC_FIRMWARE); #endif +#if IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) +MODULE_FIRMWARE(NVIDIA_TEGRA_234_NVENC_FIRMWARE); +#endif diff --git a/drivers/gpu/drm/tegra/nvjpg.c b/drivers/gpu/drm/tegra/nvjpg.c index cca55ffd..e95d0612 100644 --- a/drivers/gpu/drm/tegra/nvjpg.c +++ b/drivers/gpu/drm/tegra/nvjpg.c @@ -25,6 +25,7 @@ struct nvjpg_config { const char *firmware; unsigned int version; bool supports_sid; + unsigned int num_instances; }; struct nvjpg { @@ -326,6 +327,7 @@ static const struct nvjpg_config nvjpg_t210_config = { .firmware = NVIDIA_TEGRA_210_NVJPG_FIRMWARE, .version = 0x21, .supports_sid = false, + .num_instances = 1, }; #define NVIDIA_TEGRA_186_NVJPG_FIRMWARE "nvidia/tegra186/nvjpg.bin" @@ -334,6 +336,7 @@ static const struct nvjpg_config nvjpg_t186_config = { .firmware = NVIDIA_TEGRA_186_NVJPG_FIRMWARE, .version = 0x18, .supports_sid = true, + .num_instances = 1, }; #define NVIDIA_TEGRA_194_NVJPG_FIRMWARE "nvidia/tegra194/nvjpg.bin" @@ -342,12 +345,23 @@ static const struct nvjpg_config nvjpg_t194_config = { .firmware = NVIDIA_TEGRA_194_NVJPG_FIRMWARE, .version = 0x19, .supports_sid = true, + .num_instances = 1, +}; + +#define NVIDIA_TEGRA_234_NVJPG_FIRMWARE "nvidia/tegra234/nvjpg.bin" + +static const struct nvjpg_config nvjpg_t234_config = { + .firmware = NVIDIA_TEGRA_234_NVJPG_FIRMWARE, + .version = 0x23, + .supports_sid = true, + .num_instances = 2, }; static const struct of_device_id tegra_nvjpg_of_match[] = { { .compatible = "nvidia,tegra210-nvjpg", .data = &nvjpg_t210_config }, { .compatible = "nvidia,tegra186-nvjpg", .data = &nvjpg_t186_config }, { .compatible = "nvidia,tegra194-nvjpg", .data = &nvjpg_t194_config }, + { .compatible = "nvidia,tegra234-nvjpg", .data = &nvjpg_t234_config }, { }, }; MODULE_DEVICE_TABLE(of, tegra_nvjpg_of_match); @@ -357,6 +371,7 @@ static int nvjpg_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct host1x_syncpt **syncpts; struct nvjpg *nvjpg; + u32 host_class; int err; /* inherit DMA mask from host1x parent */ @@ -392,6 +407,11 @@ static int nvjpg_probe(struct platform_device *pdev) return err; } + err = of_property_read_u32(dev->of_node, "nvidia,host1x-class", + &host_class); + if (err < 0) + host_class = HOST1X_CLASS_NVJPG; + nvjpg->falcon.dev = dev; nvjpg->falcon.regs = nvjpg->regs; @@ -404,7 +424,7 @@ static int nvjpg_probe(struct platform_device *pdev) INIT_LIST_HEAD(&nvjpg->client.base.list); nvjpg->client.base.ops = &nvjpg_client_ops; nvjpg->client.base.dev = dev; - nvjpg->client.base.class = HOST1X_CLASS_NVJPG; + nvjpg->client.base.class = host_class; nvjpg->client.base.syncpts = syncpts; nvjpg->client.base.num_syncpts = 1; nvjpg->dev = dev; @@ -469,3 +489,6 @@ MODULE_FIRMWARE(NVIDIA_TEGRA_186_NVJPG_FIRMWARE); #if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) MODULE_FIRMWARE(NVIDIA_TEGRA_194_NVJPG_FIRMWARE); #endif +#if IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) +MODULE_FIRMWARE(NVIDIA_TEGRA_234_NVJPG_FIRMWARE); +#endif