All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-09-20  8:11 ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

v3:
* Updated patch 3 based on comments

v2:
* Updated patches 1,3 based on comments
* Added Acked-by to patch 2

Original message:

Hi all,

this series adds support for the HW video decoder, NVDEC,
on Tegra234 (Orin). The main change is a switch from Falcon
to RISC-V for the internal microcontroller, which brings along
a change in how the engine is booted. Otherwise it is backwards
compatible with earlier versions.

In previous iterations, firmware was simply loaded from disk and
written into engine internal memory. Now, the engine has a
bootrom that loads the firmware from a carveout where it has been
loaded by the system bootloader; however, we still need to tell it
where that carveout is loaded and some offsets into it. For that,
the first patch adds a new memory controller API to query the
carveout address. The offsets are read from device tree -- the
expectation is that at flashing time (when the firmware is also
flashed), the flasher also delivers a device tree overlay with
values corresponding to the flashed firmware.

The currently available Linux for Tegra release doesn't yet
include this device tree overlay flashing, and the firmware version
it contains is incompatible with this series. The plan is to fix
that for the next Linux for Tegra release, but if necessary, we
can postpone merging of this series to once those changes are
available.

Thanks!
Mikko

Mikko Perttunen (8):
  memory: tegra: Add API for retrieving carveout bounds
  dt-bindings: Add headers for NVDEC on Tegra234
  dt-bindings: Add bindings for Tegra234 NVDEC
  arm64: tegra: Add NVDEC on Tegra234
  gpu: host1x: Add stream ID register data for NVDEC on Tegra234
  drm/tegra: nvdec: Support multiple clocks
  drm/tegra: Add code for booting RISC-V based engines
  drm/tegra: Add Tegra234 support to NVDEC driver

 .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++
 arch/arm64/boot/dts/nvidia/tegra234.dtsi      |  27 +++
 drivers/gpu/drm/tegra/Makefile                |   3 +-
 drivers/gpu/drm/tegra/drm.c                   |   1 +
 drivers/gpu/drm/tegra/nvdec.c                 | 171 +++++++++++++++---
 drivers/gpu/drm/tegra/riscv.c                 | 106 +++++++++++
 drivers/gpu/drm/tegra/riscv.h                 |  30 +++
 drivers/gpu/host1x/dev.c                      |  12 ++
 drivers/memory/tegra/mc.c                     |  25 +++
 drivers/memory/tegra/tegra234.c               |   5 +
 include/dt-bindings/clock/tegra234-clock.h    |   4 +
 include/dt-bindings/memory/tegra234-mc.h      |   3 +
 .../dt-bindings/power/tegra234-powergate.h    |   1 +
 include/dt-bindings/reset/tegra234-reset.h    |   1 +
 include/soc/tegra/mc.h                        |  11 ++
 15 files changed, 530 insertions(+), 26 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
 create mode 100644 drivers/gpu/drm/tegra/riscv.c
 create mode 100644 drivers/gpu/drm/tegra/riscv.h

-- 
2.37.0


^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-09-20  8:11 ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

v3:
* Updated patch 3 based on comments

v2:
* Updated patches 1,3 based on comments
* Added Acked-by to patch 2

Original message:

Hi all,

this series adds support for the HW video decoder, NVDEC,
on Tegra234 (Orin). The main change is a switch from Falcon
to RISC-V for the internal microcontroller, which brings along
a change in how the engine is booted. Otherwise it is backwards
compatible with earlier versions.

In previous iterations, firmware was simply loaded from disk and
written into engine internal memory. Now, the engine has a
bootrom that loads the firmware from a carveout where it has been
loaded by the system bootloader; however, we still need to tell it
where that carveout is loaded and some offsets into it. For that,
the first patch adds a new memory controller API to query the
carveout address. The offsets are read from device tree -- the
expectation is that at flashing time (when the firmware is also
flashed), the flasher also delivers a device tree overlay with
values corresponding to the flashed firmware.

The currently available Linux for Tegra release doesn't yet
include this device tree overlay flashing, and the firmware version
it contains is incompatible with this series. The plan is to fix
that for the next Linux for Tegra release, but if necessary, we
can postpone merging of this series to once those changes are
available.

Thanks!
Mikko

Mikko Perttunen (8):
  memory: tegra: Add API for retrieving carveout bounds
  dt-bindings: Add headers for NVDEC on Tegra234
  dt-bindings: Add bindings for Tegra234 NVDEC
  arm64: tegra: Add NVDEC on Tegra234
  gpu: host1x: Add stream ID register data for NVDEC on Tegra234
  drm/tegra: nvdec: Support multiple clocks
  drm/tegra: Add code for booting RISC-V based engines
  drm/tegra: Add Tegra234 support to NVDEC driver

 .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++
 arch/arm64/boot/dts/nvidia/tegra234.dtsi      |  27 +++
 drivers/gpu/drm/tegra/Makefile                |   3 +-
 drivers/gpu/drm/tegra/drm.c                   |   1 +
 drivers/gpu/drm/tegra/nvdec.c                 | 171 +++++++++++++++---
 drivers/gpu/drm/tegra/riscv.c                 | 106 +++++++++++
 drivers/gpu/drm/tegra/riscv.h                 |  30 +++
 drivers/gpu/host1x/dev.c                      |  12 ++
 drivers/memory/tegra/mc.c                     |  25 +++
 drivers/memory/tegra/tegra234.c               |   5 +
 include/dt-bindings/clock/tegra234-clock.h    |   4 +
 include/dt-bindings/memory/tegra234-mc.h      |   3 +
 .../dt-bindings/power/tegra234-powergate.h    |   1 +
 include/dt-bindings/reset/tegra234-reset.h    |   1 +
 include/soc/tegra/mc.h                        |  11 ++
 15 files changed, 530 insertions(+), 26 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
 create mode 100644 drivers/gpu/drm/tegra/riscv.c
 create mode 100644 drivers/gpu/drm/tegra/riscv.h

-- 
2.37.0


^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:11   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
has been loaded by a bootloader. When booting NVDEC, we need to tell it
the address of this firmware, which we can determine by checking the
starting address of the carveout. As such, add an MC API to query the
bounds of carveouts, and add related information on Tegra234.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
v2:
- Add check for 64-bit phys_addr_t. In practice phys_addr_t
  is always 64 bits where this runs, but it avoids warnings in
  compile test.
---
 drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
 drivers/memory/tegra/tegra234.c |  5 +++++
 include/soc/tegra/mc.h          | 11 +++++++++++
 3 files changed, 41 insertions(+)

diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c
index 2f7a58a9df1a..592907546ee6 100644
--- a/drivers/memory/tegra/mc.c
+++ b/drivers/memory/tegra/mc.c
@@ -107,6 +107,31 @@ int tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev)
 }
 EXPORT_SYMBOL_GPL(tegra_mc_probe_device);
 
+int tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                               phys_addr_t *base, u64 *size)
+{
+	u32 offset;
+
+	if (id < 1 || id >= mc->soc->num_carveouts)
+		return -EINVAL;
+
+	if (id < 6)
+		offset = 0xc0c + 0x50 * (id - 1);
+	else
+		offset = 0x2004 + 0x50 * (id - 6);
+
+	*base = mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x0);
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+	*base |= (phys_addr_t)mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x4) << 32;
+#endif
+
+	if (size)
+		*size = mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x8) << 17;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(tegra_mc_get_carveout_info);
+
 static int tegra_mc_block_dma_common(struct tegra_mc *mc,
 				     const struct tegra_mc_reset *rst)
 {
diff --git a/drivers/memory/tegra/tegra234.c b/drivers/memory/tegra/tegra234.c
index a9e8fd99730f..74d291d66366 100644
--- a/drivers/memory/tegra/tegra234.c
+++ b/drivers/memory/tegra/tegra234.c
@@ -187,4 +187,9 @@ const struct tegra_mc_soc tegra234_mc_soc = {
 	.ops = &tegra186_mc_ops,
 	.ch_intmask = 0x0000ff00,
 	.global_intstatus_channel_shift = 8,
+	/*
+	 * Additionally, there are lite carveouts but those are not currently
+	 * supported.
+	 */
+	.num_carveouts = 32,
 };
diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h
index 47ce6d434427..51a2263e1bc5 100644
--- a/include/soc/tegra/mc.h
+++ b/include/soc/tegra/mc.h
@@ -193,6 +193,8 @@ struct tegra_mc_soc {
 	unsigned int num_address_bits;
 	unsigned int atom_size;
 
+	unsigned int num_carveouts;
+
 	u16 client_id_mask;
 	u8 num_channels;
 
@@ -244,6 +246,8 @@ unsigned int tegra_mc_get_emem_device_count(struct tegra_mc *mc);
 #ifdef CONFIG_TEGRA_MC
 struct tegra_mc *devm_tegra_memory_controller_get(struct device *dev);
 int tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev);
+int tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                               phys_addr_t *base, u64 *size);
 #else
 static inline struct tegra_mc *
 devm_tegra_memory_controller_get(struct device *dev)
@@ -256,6 +260,13 @@ tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev)
 {
 	return -ENODEV;
 }
+
+static inline int
+tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                           phys_addr_t *base, u64 *size)
+{
+	return -ENODEV;
+}
 #endif
 
 #endif /* __SOC_TEGRA_MC_H__ */
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-09-20  8:11   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
has been loaded by a bootloader. When booting NVDEC, we need to tell it
the address of this firmware, which we can determine by checking the
starting address of the carveout. As such, add an MC API to query the
bounds of carveouts, and add related information on Tegra234.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
v2:
- Add check for 64-bit phys_addr_t. In practice phys_addr_t
  is always 64 bits where this runs, but it avoids warnings in
  compile test.
---
 drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
 drivers/memory/tegra/tegra234.c |  5 +++++
 include/soc/tegra/mc.h          | 11 +++++++++++
 3 files changed, 41 insertions(+)

diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c
index 2f7a58a9df1a..592907546ee6 100644
--- a/drivers/memory/tegra/mc.c
+++ b/drivers/memory/tegra/mc.c
@@ -107,6 +107,31 @@ int tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev)
 }
 EXPORT_SYMBOL_GPL(tegra_mc_probe_device);
 
+int tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                               phys_addr_t *base, u64 *size)
+{
+	u32 offset;
+
+	if (id < 1 || id >= mc->soc->num_carveouts)
+		return -EINVAL;
+
+	if (id < 6)
+		offset = 0xc0c + 0x50 * (id - 1);
+	else
+		offset = 0x2004 + 0x50 * (id - 6);
+
+	*base = mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x0);
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+	*base |= (phys_addr_t)mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x4) << 32;
+#endif
+
+	if (size)
+		*size = mc_ch_readl(mc, MC_BROADCAST_CHANNEL, offset + 0x8) << 17;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(tegra_mc_get_carveout_info);
+
 static int tegra_mc_block_dma_common(struct tegra_mc *mc,
 				     const struct tegra_mc_reset *rst)
 {
diff --git a/drivers/memory/tegra/tegra234.c b/drivers/memory/tegra/tegra234.c
index a9e8fd99730f..74d291d66366 100644
--- a/drivers/memory/tegra/tegra234.c
+++ b/drivers/memory/tegra/tegra234.c
@@ -187,4 +187,9 @@ const struct tegra_mc_soc tegra234_mc_soc = {
 	.ops = &tegra186_mc_ops,
 	.ch_intmask = 0x0000ff00,
 	.global_intstatus_channel_shift = 8,
+	/*
+	 * Additionally, there are lite carveouts but those are not currently
+	 * supported.
+	 */
+	.num_carveouts = 32,
 };
diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h
index 47ce6d434427..51a2263e1bc5 100644
--- a/include/soc/tegra/mc.h
+++ b/include/soc/tegra/mc.h
@@ -193,6 +193,8 @@ struct tegra_mc_soc {
 	unsigned int num_address_bits;
 	unsigned int atom_size;
 
+	unsigned int num_carveouts;
+
 	u16 client_id_mask;
 	u8 num_channels;
 
@@ -244,6 +246,8 @@ unsigned int tegra_mc_get_emem_device_count(struct tegra_mc *mc);
 #ifdef CONFIG_TEGRA_MC
 struct tegra_mc *devm_tegra_memory_controller_get(struct device *dev);
 int tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev);
+int tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                               phys_addr_t *base, u64 *size);
 #else
 static inline struct tegra_mc *
 devm_tegra_memory_controller_get(struct device *dev)
@@ -256,6 +260,13 @@ tegra_mc_probe_device(struct tegra_mc *mc, struct device *dev)
 {
 	return -ENODEV;
 }
+
+static inline int
+tegra_mc_get_carveout_info(struct tegra_mc *mc, unsigned int id,
+                           phys_addr_t *base, u64 *size)
+{
+	return -ENODEV;
+}
 #endif
 
 #endif /* __SOC_TEGRA_MC_H__ */
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 2/8] dt-bindings: Add headers for NVDEC on Tegra234
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:11   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Krzysztof Kozlowski, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Add clock, memory controller, powergate and reset dt-binding headers
necessary for NVDEC.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 include/dt-bindings/clock/tegra234-clock.h     | 4 ++++
 include/dt-bindings/memory/tegra234-mc.h       | 3 +++
 include/dt-bindings/power/tegra234-powergate.h | 1 +
 include/dt-bindings/reset/tegra234-reset.h     | 1 +
 4 files changed, 9 insertions(+)

diff --git a/include/dt-bindings/clock/tegra234-clock.h b/include/dt-bindings/clock/tegra234-clock.h
index 173364a93381..25b4a3fb4588 100644
--- a/include/dt-bindings/clock/tegra234-clock.h
+++ b/include/dt-bindings/clock/tegra234-clock.h
@@ -82,6 +82,8 @@
 #define TEGRA234_CLK_I2S6			66U
 /** @brief clock recovered from I2S6 input */
 #define TEGRA234_CLK_I2S6_SYNC_INPUT		67U
+/** @brief output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_NVDEC */
+#define TEGRA234_CLK_NVDEC                      83U
 /** PLL controlled by CLK_RST_CONTROLLER_PLLA_BASE for use by audio clocks */
 #define TEGRA234_CLK_PLLA			93U
 /** @brief PLLP clk output */
@@ -130,6 +132,8 @@
 #define TEGRA234_CLK_SYNC_I2S5			149U
 /** @brief output of mux controlled by CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S6 */
 #define TEGRA234_CLK_SYNC_I2S6			150U
+/** output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_PKA */
+#define TEGRA234_CLK_TSEC_PKA                   154U
 /** @brief output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_UARTA */
 #define TEGRA234_CLK_UARTA			155U
 /** @brief output of gate CLK_ENB_PEX1_CORE_6 */
diff --git a/include/dt-bindings/memory/tegra234-mc.h b/include/dt-bindings/memory/tegra234-mc.h
index 62987b47ce81..75f0bd30d365 100644
--- a/include/dt-bindings/memory/tegra234-mc.h
+++ b/include/dt-bindings/memory/tegra234-mc.h
@@ -32,6 +32,7 @@
 #define TEGRA234_SID_PCIE10	0x0b
 #define TEGRA234_SID_BPMP	0x10
 #define TEGRA234_SID_HOST1X	0x27
+#define TEGRA234_SID_NVDEC	0x29
 #define TEGRA234_SID_VIC	0x34
 
 /*
@@ -91,6 +92,8 @@
 #define TEGRA234_MEMORY_CLIENT_SDMMCWAB 0x67
 #define TEGRA234_MEMORY_CLIENT_VICSRD 0x6c
 #define TEGRA234_MEMORY_CLIENT_VICSWR 0x6d
+#define TEGRA234_MEMORY_CLIENT_NVDECSRD 0x78
+#define TEGRA234_MEMORY_CLIENT_NVDECSWR 0x79
 /* BPMP read client */
 #define TEGRA234_MEMORY_CLIENT_BPMPR 0x93
 /* BPMP write client */
diff --git a/include/dt-bindings/power/tegra234-powergate.h b/include/dt-bindings/power/tegra234-powergate.h
index ae9286cef85c..e5dc1e00be95 100644
--- a/include/dt-bindings/power/tegra234-powergate.h
+++ b/include/dt-bindings/power/tegra234-powergate.h
@@ -19,6 +19,7 @@
 #define TEGRA234_POWER_DOMAIN_MGBEB	18U
 #define TEGRA234_POWER_DOMAIN_MGBEC	19U
 #define TEGRA234_POWER_DOMAIN_MGBED	20U
+#define TEGRA234_POWER_DOMAIN_NVDEC     23U
 #define TEGRA234_POWER_DOMAIN_VIC	29U
 
 #endif
diff --git a/include/dt-bindings/reset/tegra234-reset.h b/include/dt-bindings/reset/tegra234-reset.h
index d48d22b2bc7f..17163019316c 100644
--- a/include/dt-bindings/reset/tegra234-reset.h
+++ b/include/dt-bindings/reset/tegra234-reset.h
@@ -30,6 +30,7 @@
 #define TEGRA234_RESET_I2C7			33U
 #define TEGRA234_RESET_I2C8			34U
 #define TEGRA234_RESET_I2C9			35U
+#define TEGRA234_RESET_NVDEC                    44U
 #define TEGRA234_RESET_MGBE0_PCS		45U
 #define TEGRA234_RESET_MGBE0_MAC		46U
 #define TEGRA234_RESET_MGBE1_PCS		49U
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 2/8] dt-bindings: Add headers for NVDEC on Tegra234
@ 2022-09-20  8:11   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Krzysztof Kozlowski, Ashish Mhetre,
	Sameer Pujar, dri-devel, linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Add clock, memory controller, powergate and reset dt-binding headers
necessary for NVDEC.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 include/dt-bindings/clock/tegra234-clock.h     | 4 ++++
 include/dt-bindings/memory/tegra234-mc.h       | 3 +++
 include/dt-bindings/power/tegra234-powergate.h | 1 +
 include/dt-bindings/reset/tegra234-reset.h     | 1 +
 4 files changed, 9 insertions(+)

diff --git a/include/dt-bindings/clock/tegra234-clock.h b/include/dt-bindings/clock/tegra234-clock.h
index 173364a93381..25b4a3fb4588 100644
--- a/include/dt-bindings/clock/tegra234-clock.h
+++ b/include/dt-bindings/clock/tegra234-clock.h
@@ -82,6 +82,8 @@
 #define TEGRA234_CLK_I2S6			66U
 /** @brief clock recovered from I2S6 input */
 #define TEGRA234_CLK_I2S6_SYNC_INPUT		67U
+/** @brief output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_NVDEC */
+#define TEGRA234_CLK_NVDEC                      83U
 /** PLL controlled by CLK_RST_CONTROLLER_PLLA_BASE for use by audio clocks */
 #define TEGRA234_CLK_PLLA			93U
 /** @brief PLLP clk output */
@@ -130,6 +132,8 @@
 #define TEGRA234_CLK_SYNC_I2S5			149U
 /** @brief output of mux controlled by CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S6 */
 #define TEGRA234_CLK_SYNC_I2S6			150U
+/** output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_PKA */
+#define TEGRA234_CLK_TSEC_PKA                   154U
 /** @brief output of mux controlled by CLK_RST_CONTROLLER_CLK_SOURCE_UARTA */
 #define TEGRA234_CLK_UARTA			155U
 /** @brief output of gate CLK_ENB_PEX1_CORE_6 */
diff --git a/include/dt-bindings/memory/tegra234-mc.h b/include/dt-bindings/memory/tegra234-mc.h
index 62987b47ce81..75f0bd30d365 100644
--- a/include/dt-bindings/memory/tegra234-mc.h
+++ b/include/dt-bindings/memory/tegra234-mc.h
@@ -32,6 +32,7 @@
 #define TEGRA234_SID_PCIE10	0x0b
 #define TEGRA234_SID_BPMP	0x10
 #define TEGRA234_SID_HOST1X	0x27
+#define TEGRA234_SID_NVDEC	0x29
 #define TEGRA234_SID_VIC	0x34
 
 /*
@@ -91,6 +92,8 @@
 #define TEGRA234_MEMORY_CLIENT_SDMMCWAB 0x67
 #define TEGRA234_MEMORY_CLIENT_VICSRD 0x6c
 #define TEGRA234_MEMORY_CLIENT_VICSWR 0x6d
+#define TEGRA234_MEMORY_CLIENT_NVDECSRD 0x78
+#define TEGRA234_MEMORY_CLIENT_NVDECSWR 0x79
 /* BPMP read client */
 #define TEGRA234_MEMORY_CLIENT_BPMPR 0x93
 /* BPMP write client */
diff --git a/include/dt-bindings/power/tegra234-powergate.h b/include/dt-bindings/power/tegra234-powergate.h
index ae9286cef85c..e5dc1e00be95 100644
--- a/include/dt-bindings/power/tegra234-powergate.h
+++ b/include/dt-bindings/power/tegra234-powergate.h
@@ -19,6 +19,7 @@
 #define TEGRA234_POWER_DOMAIN_MGBEB	18U
 #define TEGRA234_POWER_DOMAIN_MGBEC	19U
 #define TEGRA234_POWER_DOMAIN_MGBED	20U
+#define TEGRA234_POWER_DOMAIN_NVDEC     23U
 #define TEGRA234_POWER_DOMAIN_VIC	29U
 
 #endif
diff --git a/include/dt-bindings/reset/tegra234-reset.h b/include/dt-bindings/reset/tegra234-reset.h
index d48d22b2bc7f..17163019316c 100644
--- a/include/dt-bindings/reset/tegra234-reset.h
+++ b/include/dt-bindings/reset/tegra234-reset.h
@@ -30,6 +30,7 @@
 #define TEGRA234_RESET_I2C7			33U
 #define TEGRA234_RESET_I2C8			34U
 #define TEGRA234_RESET_I2C9			35U
+#define TEGRA234_RESET_NVDEC                    44U
 #define TEGRA234_RESET_MGBE0_PCS		45U
 #define TEGRA234_RESET_MGBE0_MAC		46U
 #define TEGRA234_RESET_MGBE1_PCS		49U
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 3/8] dt-bindings: Add bindings for Tegra234 NVDEC
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:11   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Update NVDEC bindings for Tegra234. This new engine version only has
two memory clients, but now requires three clocks, and as a bigger
change the engine loads firmware from a secure carveout configured by
the bootloader.

For the latter, we need to add a phandle to the memory controller
to query the location of this carveout, and several other properties
containing offsets into the firmware inside the carveout. This
carveout is not accessible by the CPU, but is needed by NVDEC,
so we need this information to be relayed from the bootloader.

As the binding was getting large with many conditional properties,
also split the Tegra234 version out into a separate file.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
v3:
- Adjusted descriptions for firmware-related DT properties
  as requested.
- Small update to commit message.
v2:
- Split out into separate file to avoid complexity with
  conditionals etc.
---
 .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++++
 1 file changed, 156 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml

diff --git a/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml b/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
new file mode 100644
index 000000000000..7cc2dd525a96
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
@@ -0,0 +1,156 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/gpu/host1x/nvidia,tegra234-nvdec.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Device tree binding for NVIDIA Tegra234 NVDEC
+
+description: |
+  NVDEC is the hardware video decoder present on NVIDIA Tegra210
+  and newer chips. It is located on the Host1x bus and typically
+  programmed through Host1x channels.
+
+maintainers:
+  - Thierry Reding <treding@gmail.com>
+  - Mikko Perttunen <mperttunen@nvidia.com>
+
+properties:
+  $nodename:
+    pattern: "^nvdec@[0-9a-f]*$"
+
+  compatible:
+    enum:
+      - nvidia,tegra234-nvdec
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 3
+
+  clock-names:
+    items:
+      - const: nvdec
+      - const: fuse
+      - const: tsec_pka
+
+  resets:
+    maxItems: 1
+
+  reset-names:
+    items:
+      - const: nvdec
+
+  power-domains:
+    maxItems: 1
+
+  iommus:
+    maxItems: 1
+
+  dma-coherent: true
+
+  interconnects:
+    items:
+      - description: DMA read memory client
+      - description: DMA write memory client
+
+  interconnect-names:
+    items:
+      - const: dma-mem
+      - const: write
+
+  nvidia,memory-controller:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description:
+      phandle to the memory controller for determining information for the NVDEC
+      firmware secure carveout. This carveout is configured by the bootloader and
+      not accessible to CPU.
+
+  nvidia,bl-manifest-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader manifest from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,bl-code-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader code section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,bl-data-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader data section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-manifest-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system manifest from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-code-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system code section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-data-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system data section from beginning of firmware that was configured
+      by the bootloader.
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - resets
+  - reset-names
+  - power-domains
+  - nvidia,memory-controller
+  - nvidia,bl-manifest-offset
+  - nvidia,bl-code-offset
+  - nvidia,bl-data-offset
+  - nvidia,os-manifest-offset
+  - nvidia,os-code-offset
+  - nvidia,os-data-offset
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/tegra234-clock.h>
+    #include <dt-bindings/memory/tegra234-mc.h>
+    #include <dt-bindings/power/tegra234-powergate.h>
+    #include <dt-bindings/reset/tegra234-reset.h>
+
+    nvdec@15480000 {
+            compatible = "nvidia,tegra234-nvdec";
+            reg = <0x15480000 0x00040000>;
+            clocks = <&bpmp TEGRA234_CLK_NVDEC>,
+                     <&bpmp TEGRA234_CLK_FUSE>,
+                     <&bpmp TEGRA234_CLK_TSEC_PKA>;
+            clock-names = "nvdec", "fuse", "tsec_pka";
+            resets = <&bpmp TEGRA234_RESET_NVDEC>;
+            reset-names = "nvdec";
+            power-domains = <&bpmp TEGRA234_POWER_DOMAIN_NVDEC>;
+            interconnects = <&mc TEGRA234_MEMORY_CLIENT_NVDECSRD &emc>,
+                            <&mc TEGRA234_MEMORY_CLIENT_NVDECSWR &emc>;
+            interconnect-names = "dma-mem", "write";
+            iommus = <&smmu_niso1 TEGRA234_SID_NVDEC>;
+            dma-coherent;
+
+            nvidia,memory-controller = <&mc>;
+
+            /* Placeholder values, to be replaced with values from overlay */
+            nvidia,bl-manifest-offset = <0>;
+            nvidia,bl-data-offset = <0>;
+            nvidia,bl-code-offset = <0>;
+            nvidia,os-manifest-offset = <0>;
+            nvidia,os-data-offset = <0>;
+            nvidia,os-code-offset = <0>;
+    };
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 3/8] dt-bindings: Add bindings for Tegra234 NVDEC
@ 2022-09-20  8:11   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Update NVDEC bindings for Tegra234. This new engine version only has
two memory clients, but now requires three clocks, and as a bigger
change the engine loads firmware from a secure carveout configured by
the bootloader.

For the latter, we need to add a phandle to the memory controller
to query the location of this carveout, and several other properties
containing offsets into the firmware inside the carveout. This
carveout is not accessible by the CPU, but is needed by NVDEC,
so we need this information to be relayed from the bootloader.

As the binding was getting large with many conditional properties,
also split the Tegra234 version out into a separate file.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
v3:
- Adjusted descriptions for firmware-related DT properties
  as requested.
- Small update to commit message.
v2:
- Split out into separate file to avoid complexity with
  conditionals etc.
---
 .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++++
 1 file changed, 156 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml

diff --git a/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml b/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
new file mode 100644
index 000000000000..7cc2dd525a96
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
@@ -0,0 +1,156 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/gpu/host1x/nvidia,tegra234-nvdec.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Device tree binding for NVIDIA Tegra234 NVDEC
+
+description: |
+  NVDEC is the hardware video decoder present on NVIDIA Tegra210
+  and newer chips. It is located on the Host1x bus and typically
+  programmed through Host1x channels.
+
+maintainers:
+  - Thierry Reding <treding@gmail.com>
+  - Mikko Perttunen <mperttunen@nvidia.com>
+
+properties:
+  $nodename:
+    pattern: "^nvdec@[0-9a-f]*$"
+
+  compatible:
+    enum:
+      - nvidia,tegra234-nvdec
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 3
+
+  clock-names:
+    items:
+      - const: nvdec
+      - const: fuse
+      - const: tsec_pka
+
+  resets:
+    maxItems: 1
+
+  reset-names:
+    items:
+      - const: nvdec
+
+  power-domains:
+    maxItems: 1
+
+  iommus:
+    maxItems: 1
+
+  dma-coherent: true
+
+  interconnects:
+    items:
+      - description: DMA read memory client
+      - description: DMA write memory client
+
+  interconnect-names:
+    items:
+      - const: dma-mem
+      - const: write
+
+  nvidia,memory-controller:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description:
+      phandle to the memory controller for determining information for the NVDEC
+      firmware secure carveout. This carveout is configured by the bootloader and
+      not accessible to CPU.
+
+  nvidia,bl-manifest-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader manifest from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,bl-code-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader code section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,bl-data-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to bootloader data section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-manifest-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system manifest from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-code-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system code section from beginning of firmware that was configured by
+      the bootloader.
+
+  nvidia,os-data-offset:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Offset to operating system data section from beginning of firmware that was configured
+      by the bootloader.
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - resets
+  - reset-names
+  - power-domains
+  - nvidia,memory-controller
+  - nvidia,bl-manifest-offset
+  - nvidia,bl-code-offset
+  - nvidia,bl-data-offset
+  - nvidia,os-manifest-offset
+  - nvidia,os-code-offset
+  - nvidia,os-data-offset
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/tegra234-clock.h>
+    #include <dt-bindings/memory/tegra234-mc.h>
+    #include <dt-bindings/power/tegra234-powergate.h>
+    #include <dt-bindings/reset/tegra234-reset.h>
+
+    nvdec@15480000 {
+            compatible = "nvidia,tegra234-nvdec";
+            reg = <0x15480000 0x00040000>;
+            clocks = <&bpmp TEGRA234_CLK_NVDEC>,
+                     <&bpmp TEGRA234_CLK_FUSE>,
+                     <&bpmp TEGRA234_CLK_TSEC_PKA>;
+            clock-names = "nvdec", "fuse", "tsec_pka";
+            resets = <&bpmp TEGRA234_RESET_NVDEC>;
+            reset-names = "nvdec";
+            power-domains = <&bpmp TEGRA234_POWER_DOMAIN_NVDEC>;
+            interconnects = <&mc TEGRA234_MEMORY_CLIENT_NVDECSRD &emc>,
+                            <&mc TEGRA234_MEMORY_CLIENT_NVDECSWR &emc>;
+            interconnect-names = "dma-mem", "write";
+            iommus = <&smmu_niso1 TEGRA234_SID_NVDEC>;
+            dma-coherent;
+
+            nvidia,memory-controller = <&mc>;
+
+            /* Placeholder values, to be replaced with values from overlay */
+            nvidia,bl-manifest-offset = <0>;
+            nvidia,bl-data-offset = <0>;
+            nvidia,bl-code-offset = <0>;
+            nvidia,os-manifest-offset = <0>;
+            nvidia,os-data-offset = <0>;
+            nvidia,os-code-offset = <0>;
+    };
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 4/8] arm64: tegra: Add NVDEC on Tegra234
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:11   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Add a device tree node for NVDEC on Tegra234.

Booting the firmware requires some information regarding offsets
within the firmware binary. These are passed through the device
tree, but since the values vary depending on the firmware version,
and the firmware itself is not available to the OS, the flasher is
expected to provide a device tree overlay with values corresponding
to the firmware it is flashing. The overlay then replaces the
placeholder values here.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 arch/arm64/boot/dts/nvidia/tegra234.dtsi | 27 ++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
index 81a0f599685f..65d49b27bc5f 100644
--- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi
+++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
@@ -586,6 +586,33 @@ vic@15340000 {
 				iommus = <&smmu_niso1 TEGRA234_SID_VIC>;
 				dma-coherent;
 			};
+
+			nvdec@15480000 {
+				compatible = "nvidia,tegra234-nvdec";
+				reg = <0x15480000 0x00040000>;
+				clocks = <&bpmp TEGRA234_CLK_NVDEC>,
+				         <&bpmp TEGRA234_CLK_FUSE>,
+				         <&bpmp TEGRA234_CLK_TSEC_PKA>;
+				clock-names = "nvdec", "fuse", "tsec_pka";
+				resets = <&bpmp TEGRA234_RESET_NVDEC>;
+				reset-names = "nvdec";
+				power-domains = <&bpmp TEGRA234_POWER_DOMAIN_NVDEC>;
+				interconnects = <&mc TEGRA234_MEMORY_CLIENT_NVDECSRD &emc>,
+				                <&mc TEGRA234_MEMORY_CLIENT_NVDECSWR &emc>;
+				interconnect-names = "dma-mem", "write";
+				iommus = <&smmu_niso1 TEGRA234_SID_NVDEC>;
+				dma-coherent;
+
+				nvidia,memory-controller = <&mc>;
+
+				/* Placeholder values, to be replaced with values from overlay */
+				nvidia,bl-manifest-offset = <0>;
+				nvidia,bl-data-offset = <0>;
+				nvidia,bl-code-offset = <0>;
+				nvidia,os-manifest-offset = <0>;
+				nvidia,os-data-offset = <0>;
+				nvidia,os-code-offset = <0>;
+			};
 		};
 
 		gpio: gpio@2200000 {
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 4/8] arm64: tegra: Add NVDEC on Tegra234
@ 2022-09-20  8:11   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:11 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Add a device tree node for NVDEC on Tegra234.

Booting the firmware requires some information regarding offsets
within the firmware binary. These are passed through the device
tree, but since the values vary depending on the firmware version,
and the firmware itself is not available to the OS, the flasher is
expected to provide a device tree overlay with values corresponding
to the firmware it is flashing. The overlay then replaces the
placeholder values here.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 arch/arm64/boot/dts/nvidia/tegra234.dtsi | 27 ++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
index 81a0f599685f..65d49b27bc5f 100644
--- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi
+++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
@@ -586,6 +586,33 @@ vic@15340000 {
 				iommus = <&smmu_niso1 TEGRA234_SID_VIC>;
 				dma-coherent;
 			};
+
+			nvdec@15480000 {
+				compatible = "nvidia,tegra234-nvdec";
+				reg = <0x15480000 0x00040000>;
+				clocks = <&bpmp TEGRA234_CLK_NVDEC>,
+				         <&bpmp TEGRA234_CLK_FUSE>,
+				         <&bpmp TEGRA234_CLK_TSEC_PKA>;
+				clock-names = "nvdec", "fuse", "tsec_pka";
+				resets = <&bpmp TEGRA234_RESET_NVDEC>;
+				reset-names = "nvdec";
+				power-domains = <&bpmp TEGRA234_POWER_DOMAIN_NVDEC>;
+				interconnects = <&mc TEGRA234_MEMORY_CLIENT_NVDECSRD &emc>,
+				                <&mc TEGRA234_MEMORY_CLIENT_NVDECSWR &emc>;
+				interconnect-names = "dma-mem", "write";
+				iommus = <&smmu_niso1 TEGRA234_SID_NVDEC>;
+				dma-coherent;
+
+				nvidia,memory-controller = <&mc>;
+
+				/* Placeholder values, to be replaced with values from overlay */
+				nvidia,bl-manifest-offset = <0>;
+				nvidia,bl-data-offset = <0>;
+				nvidia,bl-code-offset = <0>;
+				nvidia,os-manifest-offset = <0>;
+				nvidia,os-data-offset = <0>;
+				nvidia,os-code-offset = <0>;
+			};
 		};
 
 		gpio: gpio@2200000 {
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 5/8] gpu: host1x: Add stream ID register data for NVDEC on Tegra234
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:12   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Add entries for NVDEC to the Tegra234 SID table.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/host1x/dev.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
index 0cd3f97e7e49..d6b4614f968f 100644
--- a/drivers/gpu/host1x/dev.c
+++ b/drivers/gpu/host1x/dev.c
@@ -225,6 +225,18 @@ static const struct host1x_sid_entry tegra234_sid_table[] = {
 		.offset = 0x34,
 		.limit = 0x34
 	},
+	{
+		/* NVDEC channel */
+		.base = 0x17c8,
+		.offset = 0x30,
+		.limit = 0x30,
+	},
+	{
+		/* NVDEC MMIO */
+		.base = 0x1698,
+		.offset = 0x34,
+		.limit = 0x34,
+	},
 };
 
 static const struct host1x_info host1x08_info = {
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 5/8] gpu: host1x: Add stream ID register data for NVDEC on Tegra234
@ 2022-09-20  8:12   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Add entries for NVDEC to the Tegra234 SID table.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/host1x/dev.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
index 0cd3f97e7e49..d6b4614f968f 100644
--- a/drivers/gpu/host1x/dev.c
+++ b/drivers/gpu/host1x/dev.c
@@ -225,6 +225,18 @@ static const struct host1x_sid_entry tegra234_sid_table[] = {
 		.offset = 0x34,
 		.limit = 0x34
 	},
+	{
+		/* NVDEC channel */
+		.base = 0x17c8,
+		.offset = 0x30,
+		.limit = 0x30,
+	},
+	{
+		/* NVDEC MMIO */
+		.base = 0x1698,
+		.offset = 0x34,
+		.limit = 0x34,
+	},
 };
 
 static const struct host1x_info host1x08_info = {
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 6/8] drm/tegra: nvdec: Support multiple clocks
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:12   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

NVDEC on Tegra234 requires multiple clocks. Add support for that.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/nvdec.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/tegra/nvdec.c b/drivers/gpu/drm/tegra/nvdec.c
index 276fe0472730..05af4d107421 100644
--- a/drivers/gpu/drm/tegra/nvdec.c
+++ b/drivers/gpu/drm/tegra/nvdec.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2015-2021, NVIDIA Corporation.
+ * Copyright (c) 2015-2022, NVIDIA Corporation.
  */
 
 #include <linux/clk.h>
@@ -28,6 +28,7 @@ struct nvdec_config {
 	const char *firmware;
 	unsigned int version;
 	bool supports_sid;
+	bool has_extra_clocks;
 };
 
 struct nvdec {
@@ -37,7 +38,8 @@ struct nvdec {
 	struct tegra_drm_client client;
 	struct host1x_channel *channel;
 	struct device *dev;
-	struct clk *clk;
+	struct clk_bulk_data clks[3];
+	unsigned int num_clks;
 
 	/* Platform configuration */
 	const struct nvdec_config *config;
@@ -258,7 +260,7 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 	struct nvdec *nvdec = dev_get_drvdata(dev);
 	int err;
 
-	err = clk_prepare_enable(nvdec->clk);
+	err = clk_bulk_prepare_enable(nvdec->num_clks, nvdec->clks);
 	if (err < 0)
 		return err;
 
@@ -275,7 +277,7 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 	return 0;
 
 disable:
-	clk_disable_unprepare(nvdec->clk);
+	clk_bulk_disable_unprepare(nvdec->num_clks, nvdec->clks);
 	return err;
 }
 
@@ -285,7 +287,7 @@ static __maybe_unused int nvdec_runtime_suspend(struct device *dev)
 
 	host1x_channel_stop(nvdec->channel);
 
-	clk_disable_unprepare(nvdec->clk);
+	clk_bulk_disable_unprepare(nvdec->num_clks, nvdec->clks);
 
 	return 0;
 }
@@ -383,13 +385,22 @@ static int nvdec_probe(struct platform_device *pdev)
 	if (IS_ERR(nvdec->regs))
 		return PTR_ERR(nvdec->regs);
 
-	nvdec->clk = devm_clk_get(dev, NULL);
-	if (IS_ERR(nvdec->clk)) {
-		dev_err(&pdev->dev, "failed to get clock\n");
-		return PTR_ERR(nvdec->clk);
+	nvdec->clks[0].id = "nvdec";
+	nvdec->num_clks = 1;
+
+	if (nvdec->config->has_extra_clocks) {
+		nvdec->num_clks = 3;
+		nvdec->clks[1].id = "fuse";
+		nvdec->clks[2].id = "tsec_pka";
+	}
+
+	err = devm_clk_bulk_get(dev, nvdec->num_clks, nvdec->clks);
+	if (err) {
+		dev_err(&pdev->dev, "failed to get clock(s)\n");
+		return err;
 	}
 
-	err = clk_set_rate(nvdec->clk, ULONG_MAX);
+	err = clk_set_rate(nvdec->clks[0].clk, ULONG_MAX);
 	if (err < 0) {
 		dev_err(&pdev->dev, "failed to set clock rate\n");
 		return err;
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 6/8] drm/tegra: nvdec: Support multiple clocks
@ 2022-09-20  8:12   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

NVDEC on Tegra234 requires multiple clocks. Add support for that.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/nvdec.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/tegra/nvdec.c b/drivers/gpu/drm/tegra/nvdec.c
index 276fe0472730..05af4d107421 100644
--- a/drivers/gpu/drm/tegra/nvdec.c
+++ b/drivers/gpu/drm/tegra/nvdec.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2015-2021, NVIDIA Corporation.
+ * Copyright (c) 2015-2022, NVIDIA Corporation.
  */
 
 #include <linux/clk.h>
@@ -28,6 +28,7 @@ struct nvdec_config {
 	const char *firmware;
 	unsigned int version;
 	bool supports_sid;
+	bool has_extra_clocks;
 };
 
 struct nvdec {
@@ -37,7 +38,8 @@ struct nvdec {
 	struct tegra_drm_client client;
 	struct host1x_channel *channel;
 	struct device *dev;
-	struct clk *clk;
+	struct clk_bulk_data clks[3];
+	unsigned int num_clks;
 
 	/* Platform configuration */
 	const struct nvdec_config *config;
@@ -258,7 +260,7 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 	struct nvdec *nvdec = dev_get_drvdata(dev);
 	int err;
 
-	err = clk_prepare_enable(nvdec->clk);
+	err = clk_bulk_prepare_enable(nvdec->num_clks, nvdec->clks);
 	if (err < 0)
 		return err;
 
@@ -275,7 +277,7 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 	return 0;
 
 disable:
-	clk_disable_unprepare(nvdec->clk);
+	clk_bulk_disable_unprepare(nvdec->num_clks, nvdec->clks);
 	return err;
 }
 
@@ -285,7 +287,7 @@ static __maybe_unused int nvdec_runtime_suspend(struct device *dev)
 
 	host1x_channel_stop(nvdec->channel);
 
-	clk_disable_unprepare(nvdec->clk);
+	clk_bulk_disable_unprepare(nvdec->num_clks, nvdec->clks);
 
 	return 0;
 }
@@ -383,13 +385,22 @@ static int nvdec_probe(struct platform_device *pdev)
 	if (IS_ERR(nvdec->regs))
 		return PTR_ERR(nvdec->regs);
 
-	nvdec->clk = devm_clk_get(dev, NULL);
-	if (IS_ERR(nvdec->clk)) {
-		dev_err(&pdev->dev, "failed to get clock\n");
-		return PTR_ERR(nvdec->clk);
+	nvdec->clks[0].id = "nvdec";
+	nvdec->num_clks = 1;
+
+	if (nvdec->config->has_extra_clocks) {
+		nvdec->num_clks = 3;
+		nvdec->clks[1].id = "fuse";
+		nvdec->clks[2].id = "tsec_pka";
+	}
+
+	err = devm_clk_bulk_get(dev, nvdec->num_clks, nvdec->clks);
+	if (err) {
+		dev_err(&pdev->dev, "failed to get clock(s)\n");
+		return err;
 	}
 
-	err = clk_set_rate(nvdec->clk, ULONG_MAX);
+	err = clk_set_rate(nvdec->clks[0].clk, ULONG_MAX);
 	if (err < 0) {
 		dev_err(&pdev->dev, "failed to set clock rate\n");
 		return err;
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 7/8] drm/tegra: Add code for booting RISC-V based engines
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:12   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Add helper code for booting RISC-V based engines where firmware is
located in a carveout.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/Makefile |   3 +-
 drivers/gpu/drm/tegra/riscv.c  | 106 +++++++++++++++++++++++++++++++++
 drivers/gpu/drm/tegra/riscv.h  |  30 ++++++++++
 3 files changed, 138 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/tegra/riscv.c
 create mode 100644 drivers/gpu/drm/tegra/riscv.h

diff --git a/drivers/gpu/drm/tegra/Makefile b/drivers/gpu/drm/tegra/Makefile
index df6cc986aeba..bb0d2c144b55 100644
--- a/drivers/gpu/drm/tegra/Makefile
+++ b/drivers/gpu/drm/tegra/Makefile
@@ -24,7 +24,8 @@ tegra-drm-y := \
 	gr3d.o \
 	falcon.o \
 	vic.o \
-	nvdec.o
+	nvdec.o \
+	riscv.o
 
 tegra-drm-y += trace.o
 
diff --git a/drivers/gpu/drm/tegra/riscv.c b/drivers/gpu/drm/tegra/riscv.c
new file mode 100644
index 000000000000..6580416408f8
--- /dev/null
+++ b/drivers/gpu/drm/tegra/riscv.c
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2022, NVIDIA Corporation.
+ */
+
+#include <linux/dev_printk.h>
+#include <linux/device.h>
+#include <linux/iopoll.h>
+#include <linux/of.h>
+
+#include "riscv.h"
+
+#define RISCV_CPUCTL					0x4388
+#define RISCV_CPUCTL_STARTCPU_TRUE			(1 << 0)
+#define RISCV_BR_RETCODE				0x465c
+#define RISCV_BR_RETCODE_RESULT_V(x)			((x) & 0x3)
+#define RISCV_BR_RETCODE_RESULT_PASS_V			3
+#define RISCV_BCR_CTRL					0x4668
+#define RISCV_BCR_CTRL_CORE_SELECT_RISCV		(1 << 4)
+#define RISCV_BCR_DMACFG				0x466c
+#define RISCV_BCR_DMACFG_TARGET_LOCAL_FB		(0 << 0)
+#define RISCV_BCR_DMACFG_LOCK_LOCKED			(1 << 31)
+#define RISCV_BCR_DMAADDR_PKCPARAM_LO			0x4670
+#define RISCV_BCR_DMAADDR_PKCPARAM_HI			0x4674
+#define RISCV_BCR_DMAADDR_FMCCODE_LO			0x4678
+#define RISCV_BCR_DMAADDR_FMCCODE_HI			0x467c
+#define RISCV_BCR_DMAADDR_FMCDATA_LO			0x4680
+#define RISCV_BCR_DMAADDR_FMCDATA_HI			0x4684
+#define RISCV_BCR_DMACFG_SEC				0x4694
+#define RISCV_BCR_DMACFG_SEC_GSCID(v)			((v) << 16)
+
+static void riscv_writel(struct tegra_drm_riscv *riscv, u32 value, u32 offset)
+{
+	writel(value, riscv->regs + offset);
+}
+
+int tegra_drm_riscv_read_descriptors(struct tegra_drm_riscv *riscv)
+{
+	struct tegra_drm_riscv_descriptor *bl = &riscv->bl_desc;
+	struct tegra_drm_riscv_descriptor *os = &riscv->os_desc;
+	const struct device_node *np = riscv->dev->of_node;
+	int err;
+
+#define READ_PROP(name, location) \
+	err = of_property_read_u32(np, name, location); \
+	if (err) { \
+		dev_err(riscv->dev, "failed to read " name ": %d\n", err); \
+		return err; \
+	}
+
+	READ_PROP("nvidia,bl-manifest-offset", &bl->manifest_offset);
+	READ_PROP("nvidia,bl-code-offset", &bl->code_offset);
+	READ_PROP("nvidia,bl-data-offset", &bl->data_offset);
+	READ_PROP("nvidia,os-manifest-offset", &os->manifest_offset);
+	READ_PROP("nvidia,os-code-offset", &os->code_offset);
+	READ_PROP("nvidia,os-data-offset", &os->data_offset);
+#undef READ_PROP
+
+	if (bl->manifest_offset == 0 && bl->code_offset == 0 &&
+	    bl->data_offset == 0 && os->manifest_offset == 0 &&
+	    os->code_offset == 0 && os->data_offset == 0) {
+		dev_err(riscv->dev, "descriptors not available\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+int tegra_drm_riscv_boot_bootrom(struct tegra_drm_riscv *riscv, phys_addr_t image_address,
+				 u32 gscid, const struct tegra_drm_riscv_descriptor *desc)
+{
+	phys_addr_t addr;
+	int err;
+	u32 val;
+
+	riscv_writel(riscv, RISCV_BCR_CTRL_CORE_SELECT_RISCV, RISCV_BCR_CTRL);
+
+	addr = image_address + desc->manifest_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_PKCPARAM_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_PKCPARAM_HI);
+
+	addr = image_address + desc->code_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCCODE_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCCODE_HI);
+
+	addr = image_address + desc->data_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCDATA_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCDATA_HI);
+
+	riscv_writel(riscv, RISCV_BCR_DMACFG_SEC_GSCID(gscid), RISCV_BCR_DMACFG_SEC);
+	riscv_writel(riscv,
+		RISCV_BCR_DMACFG_TARGET_LOCAL_FB | RISCV_BCR_DMACFG_LOCK_LOCKED, RISCV_BCR_DMACFG);
+
+	riscv_writel(riscv, RISCV_CPUCTL_STARTCPU_TRUE, RISCV_CPUCTL);
+
+	err = readl_poll_timeout(
+		riscv->regs + RISCV_BR_RETCODE, val,
+		RISCV_BR_RETCODE_RESULT_V(val) == RISCV_BR_RETCODE_RESULT_PASS_V,
+		10, 100000);
+	if (err) {
+		dev_err(riscv->dev, "error during bootrom execution. BR_RETCODE=%d\n", val);
+		return err;
+	}
+
+	return 0;
+}
diff --git a/drivers/gpu/drm/tegra/riscv.h b/drivers/gpu/drm/tegra/riscv.h
new file mode 100644
index 000000000000..bbeb2db078b6
--- /dev/null
+++ b/drivers/gpu/drm/tegra/riscv.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022, NVIDIA Corporation.
+ */
+
+#ifndef DRM_TEGRA_RISCV_H
+#define DRM_TEGRA_RISCV_H
+
+struct tegra_drm_riscv_descriptor {
+	u32 manifest_offset;
+	u32 code_offset;
+	u32 code_size;
+	u32 data_offset;
+	u32 data_size;
+};
+
+struct tegra_drm_riscv {
+	/* User initializes */
+	struct device *dev;
+	void __iomem *regs;
+
+	struct tegra_drm_riscv_descriptor bl_desc;
+	struct tegra_drm_riscv_descriptor os_desc;
+};
+
+int tegra_drm_riscv_read_descriptors(struct tegra_drm_riscv *riscv);
+int tegra_drm_riscv_boot_bootrom(struct tegra_drm_riscv *riscv, phys_addr_t image_address,
+				 u32 gscid, const struct tegra_drm_riscv_descriptor *desc);
+
+#endif
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 7/8] drm/tegra: Add code for booting RISC-V based engines
@ 2022-09-20  8:12   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Add helper code for booting RISC-V based engines where firmware is
located in a carveout.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/Makefile |   3 +-
 drivers/gpu/drm/tegra/riscv.c  | 106 +++++++++++++++++++++++++++++++++
 drivers/gpu/drm/tegra/riscv.h  |  30 ++++++++++
 3 files changed, 138 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/tegra/riscv.c
 create mode 100644 drivers/gpu/drm/tegra/riscv.h

diff --git a/drivers/gpu/drm/tegra/Makefile b/drivers/gpu/drm/tegra/Makefile
index df6cc986aeba..bb0d2c144b55 100644
--- a/drivers/gpu/drm/tegra/Makefile
+++ b/drivers/gpu/drm/tegra/Makefile
@@ -24,7 +24,8 @@ tegra-drm-y := \
 	gr3d.o \
 	falcon.o \
 	vic.o \
-	nvdec.o
+	nvdec.o \
+	riscv.o
 
 tegra-drm-y += trace.o
 
diff --git a/drivers/gpu/drm/tegra/riscv.c b/drivers/gpu/drm/tegra/riscv.c
new file mode 100644
index 000000000000..6580416408f8
--- /dev/null
+++ b/drivers/gpu/drm/tegra/riscv.c
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2022, NVIDIA Corporation.
+ */
+
+#include <linux/dev_printk.h>
+#include <linux/device.h>
+#include <linux/iopoll.h>
+#include <linux/of.h>
+
+#include "riscv.h"
+
+#define RISCV_CPUCTL					0x4388
+#define RISCV_CPUCTL_STARTCPU_TRUE			(1 << 0)
+#define RISCV_BR_RETCODE				0x465c
+#define RISCV_BR_RETCODE_RESULT_V(x)			((x) & 0x3)
+#define RISCV_BR_RETCODE_RESULT_PASS_V			3
+#define RISCV_BCR_CTRL					0x4668
+#define RISCV_BCR_CTRL_CORE_SELECT_RISCV		(1 << 4)
+#define RISCV_BCR_DMACFG				0x466c
+#define RISCV_BCR_DMACFG_TARGET_LOCAL_FB		(0 << 0)
+#define RISCV_BCR_DMACFG_LOCK_LOCKED			(1 << 31)
+#define RISCV_BCR_DMAADDR_PKCPARAM_LO			0x4670
+#define RISCV_BCR_DMAADDR_PKCPARAM_HI			0x4674
+#define RISCV_BCR_DMAADDR_FMCCODE_LO			0x4678
+#define RISCV_BCR_DMAADDR_FMCCODE_HI			0x467c
+#define RISCV_BCR_DMAADDR_FMCDATA_LO			0x4680
+#define RISCV_BCR_DMAADDR_FMCDATA_HI			0x4684
+#define RISCV_BCR_DMACFG_SEC				0x4694
+#define RISCV_BCR_DMACFG_SEC_GSCID(v)			((v) << 16)
+
+static void riscv_writel(struct tegra_drm_riscv *riscv, u32 value, u32 offset)
+{
+	writel(value, riscv->regs + offset);
+}
+
+int tegra_drm_riscv_read_descriptors(struct tegra_drm_riscv *riscv)
+{
+	struct tegra_drm_riscv_descriptor *bl = &riscv->bl_desc;
+	struct tegra_drm_riscv_descriptor *os = &riscv->os_desc;
+	const struct device_node *np = riscv->dev->of_node;
+	int err;
+
+#define READ_PROP(name, location) \
+	err = of_property_read_u32(np, name, location); \
+	if (err) { \
+		dev_err(riscv->dev, "failed to read " name ": %d\n", err); \
+		return err; \
+	}
+
+	READ_PROP("nvidia,bl-manifest-offset", &bl->manifest_offset);
+	READ_PROP("nvidia,bl-code-offset", &bl->code_offset);
+	READ_PROP("nvidia,bl-data-offset", &bl->data_offset);
+	READ_PROP("nvidia,os-manifest-offset", &os->manifest_offset);
+	READ_PROP("nvidia,os-code-offset", &os->code_offset);
+	READ_PROP("nvidia,os-data-offset", &os->data_offset);
+#undef READ_PROP
+
+	if (bl->manifest_offset == 0 && bl->code_offset == 0 &&
+	    bl->data_offset == 0 && os->manifest_offset == 0 &&
+	    os->code_offset == 0 && os->data_offset == 0) {
+		dev_err(riscv->dev, "descriptors not available\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+int tegra_drm_riscv_boot_bootrom(struct tegra_drm_riscv *riscv, phys_addr_t image_address,
+				 u32 gscid, const struct tegra_drm_riscv_descriptor *desc)
+{
+	phys_addr_t addr;
+	int err;
+	u32 val;
+
+	riscv_writel(riscv, RISCV_BCR_CTRL_CORE_SELECT_RISCV, RISCV_BCR_CTRL);
+
+	addr = image_address + desc->manifest_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_PKCPARAM_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_PKCPARAM_HI);
+
+	addr = image_address + desc->code_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCCODE_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCCODE_HI);
+
+	addr = image_address + desc->data_offset;
+	riscv_writel(riscv, lower_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCDATA_LO);
+	riscv_writel(riscv, upper_32_bits(addr >> 8), RISCV_BCR_DMAADDR_FMCDATA_HI);
+
+	riscv_writel(riscv, RISCV_BCR_DMACFG_SEC_GSCID(gscid), RISCV_BCR_DMACFG_SEC);
+	riscv_writel(riscv,
+		RISCV_BCR_DMACFG_TARGET_LOCAL_FB | RISCV_BCR_DMACFG_LOCK_LOCKED, RISCV_BCR_DMACFG);
+
+	riscv_writel(riscv, RISCV_CPUCTL_STARTCPU_TRUE, RISCV_CPUCTL);
+
+	err = readl_poll_timeout(
+		riscv->regs + RISCV_BR_RETCODE, val,
+		RISCV_BR_RETCODE_RESULT_V(val) == RISCV_BR_RETCODE_RESULT_PASS_V,
+		10, 100000);
+	if (err) {
+		dev_err(riscv->dev, "error during bootrom execution. BR_RETCODE=%d\n", val);
+		return err;
+	}
+
+	return 0;
+}
diff --git a/drivers/gpu/drm/tegra/riscv.h b/drivers/gpu/drm/tegra/riscv.h
new file mode 100644
index 000000000000..bbeb2db078b6
--- /dev/null
+++ b/drivers/gpu/drm/tegra/riscv.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022, NVIDIA Corporation.
+ */
+
+#ifndef DRM_TEGRA_RISCV_H
+#define DRM_TEGRA_RISCV_H
+
+struct tegra_drm_riscv_descriptor {
+	u32 manifest_offset;
+	u32 code_offset;
+	u32 code_size;
+	u32 data_offset;
+	u32 data_size;
+};
+
+struct tegra_drm_riscv {
+	/* User initializes */
+	struct device *dev;
+	void __iomem *regs;
+
+	struct tegra_drm_riscv_descriptor bl_desc;
+	struct tegra_drm_riscv_descriptor os_desc;
+};
+
+int tegra_drm_riscv_read_descriptors(struct tegra_drm_riscv *riscv);
+int tegra_drm_riscv_boot_bootrom(struct tegra_drm_riscv *riscv, phys_addr_t image_address,
+				 u32 gscid, const struct tegra_drm_riscv_descriptor *desc);
+
+#endif
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 8/8] drm/tegra: Add Tegra234 support to NVDEC driver
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-20  8:12   ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

From: Mikko Perttunen <mperttunen@nvidia.com>

Add support for the Tegra234 version of NVDEC to the NVDEC driver.
This version sports a RISC-V controller and requires a few additional
clocks. After firmware has been loaded, the behavior is, however,
backwards compatible.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/drm.c   |   1 +
 drivers/gpu/drm/tegra/nvdec.c | 140 ++++++++++++++++++++++++++++++----
 2 files changed, 126 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 6748ec1e0005..a014f11e9edb 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -1382,6 +1382,7 @@ static const struct of_device_id host1x_drm_subdevs[] = {
 	{ .compatible = "nvidia,tegra194-vic", },
 	{ .compatible = "nvidia,tegra194-nvdec", },
 	{ .compatible = "nvidia,tegra234-vic", },
+	{ .compatible = "nvidia,tegra234-nvdec", },
 	{ /* sentinel */ }
 };
 
diff --git a/drivers/gpu/drm/tegra/nvdec.c b/drivers/gpu/drm/tegra/nvdec.c
index 05af4d107421..10fd21517281 100644
--- a/drivers/gpu/drm/tegra/nvdec.c
+++ b/drivers/gpu/drm/tegra/nvdec.c
@@ -8,6 +8,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/host1x.h>
 #include <linux/iommu.h>
+#include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -16,18 +17,21 @@
 #include <linux/pm_runtime.h>
 #include <linux/reset.h>
 
-#include <soc/tegra/pmc.h>
+#include <soc/tegra/mc.h>
 
 #include "drm.h"
 #include "falcon.h"
+#include "riscv.h"
 #include "vic.h"
 
+#define NVDEC_FALCON_DEBUGINFO			0x1094
 #define NVDEC_TFBIF_TRANSCFG			0x2c44
 
 struct nvdec_config {
 	const char *firmware;
 	unsigned int version;
 	bool supports_sid;
+	bool has_riscv;
 	bool has_extra_clocks;
 };
 
@@ -40,9 +44,14 @@ struct nvdec {
 	struct device *dev;
 	struct clk_bulk_data clks[3];
 	unsigned int num_clks;
+	struct reset_control *reset;
 
 	/* Platform configuration */
 	const struct nvdec_config *config;
+
+	/* RISC-V specific data */
+	struct tegra_drm_riscv riscv;
+	phys_addr_t carveout_base;
 };
 
 static inline struct nvdec *to_nvdec(struct tegra_drm_client *client)
@@ -56,7 +65,7 @@ static inline void nvdec_writel(struct nvdec *nvdec, u32 value,
 	writel(value, nvdec->regs + offset);
 }
 
-static int nvdec_boot(struct nvdec *nvdec)
+static int nvdec_boot_falcon(struct nvdec *nvdec)
 {
 #ifdef CONFIG_IOMMU_API
 	struct iommu_fwspec *spec = dev_iommu_fwspec_get(nvdec->dev);
@@ -92,6 +101,64 @@ static int nvdec_boot(struct nvdec *nvdec)
 	return 0;
 }
 
+static int nvdec_wait_debuginfo(struct nvdec *nvdec, const char *phase)
+{
+	int err;
+	u32 val;
+
+	err = readl_poll_timeout(nvdec->regs + NVDEC_FALCON_DEBUGINFO, val, val == 0x0, 10, 100000);
+	if (err) {
+		dev_err(nvdec->dev, "failed to boot %s, debuginfo=0x%x\n", phase, val);
+		return err;
+	}
+
+	return 0;
+}
+
+static int nvdec_boot_riscv(struct nvdec *nvdec)
+{
+	int err;
+
+	err = reset_control_acquire(nvdec->reset);
+	if (err)
+		return err;
+
+	nvdec_writel(nvdec, 0xabcd1234, NVDEC_FALCON_DEBUGINFO);
+
+	err = tegra_drm_riscv_boot_bootrom(&nvdec->riscv, nvdec->carveout_base, 1,
+					   &nvdec->riscv.bl_desc);
+	if (err) {
+		dev_err(nvdec->dev, "failed to execute bootloader\n");
+		goto release_reset;
+	}
+
+	err = nvdec_wait_debuginfo(nvdec, "bootloader");
+	if (err)
+		goto release_reset;
+
+	err = reset_control_reset(nvdec->reset);
+	if (err)
+		goto release_reset;
+
+	nvdec_writel(nvdec, 0xabcd1234, NVDEC_FALCON_DEBUGINFO);
+
+	err = tegra_drm_riscv_boot_bootrom(&nvdec->riscv, nvdec->carveout_base, 1,
+					   &nvdec->riscv.os_desc);
+	if (err) {
+		dev_err(nvdec->dev, "failed to execute firmware\n");
+		goto release_reset;
+	}
+
+	err = nvdec_wait_debuginfo(nvdec, "firmware");
+	if (err)
+		goto release_reset;
+
+release_reset:
+	reset_control_release(nvdec->reset);
+
+	return err;
+}
+
 static int nvdec_init(struct host1x_client *client)
 {
 	struct tegra_drm_client *drm = host1x_to_drm_client(client);
@@ -191,7 +258,7 @@ static const struct host1x_client_ops nvdec_client_ops = {
 	.exit = nvdec_exit,
 };
 
-static int nvdec_load_firmware(struct nvdec *nvdec)
+static int nvdec_load_falcon_firmware(struct nvdec *nvdec)
 {
 	struct host1x_client *client = &nvdec->client.base;
 	struct tegra_drm *tegra = nvdec->client.drm;
@@ -254,7 +321,6 @@ static int nvdec_load_firmware(struct nvdec *nvdec)
 	return err;
 }
 
-
 static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 {
 	struct nvdec *nvdec = dev_get_drvdata(dev);
@@ -266,13 +332,19 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 
 	usleep_range(10, 20);
 
-	err = nvdec_load_firmware(nvdec);
-	if (err < 0)
-		goto disable;
+	if (nvdec->config->has_riscv) {
+		err = nvdec_boot_riscv(nvdec);
+		if (err < 0)
+			goto disable;
+	} else {
+		err = nvdec_load_falcon_firmware(nvdec);
+		if (err < 0)
+			goto disable;
 
-	err = nvdec_boot(nvdec);
-	if (err < 0)
-		goto disable;
+		err = nvdec_boot_falcon(nvdec);
+		if (err < 0)
+			goto disable;
+	}
 
 	return 0;
 
@@ -348,10 +420,18 @@ static const struct nvdec_config nvdec_t194_config = {
 	.supports_sid = true,
 };
 
+static const struct nvdec_config nvdec_t234_config = {
+	.version = 0x23,
+	.supports_sid = true,
+	.has_riscv = true,
+	.has_extra_clocks = true,
+};
+
 static const struct of_device_id tegra_nvdec_of_match[] = {
 	{ .compatible = "nvidia,tegra210-nvdec", .data = &nvdec_t210_config },
 	{ .compatible = "nvidia,tegra186-nvdec", .data = &nvdec_t186_config },
 	{ .compatible = "nvidia,tegra194-nvdec", .data = &nvdec_t194_config },
+	{ .compatible = "nvidia,tegra234-nvdec", .data = &nvdec_t234_config },
 	{ },
 };
 MODULE_DEVICE_TABLE(of, tegra_nvdec_of_match);
@@ -410,12 +490,42 @@ static int nvdec_probe(struct platform_device *pdev)
 	if (err < 0)
 		host_class = HOST1X_CLASS_NVDEC;
 
-	nvdec->falcon.dev = dev;
-	nvdec->falcon.regs = nvdec->regs;
+	if (nvdec->config->has_riscv) {
+		struct tegra_mc *mc;
 
-	err = falcon_init(&nvdec->falcon);
-	if (err < 0)
-		return err;
+		mc = devm_tegra_memory_controller_get(dev);
+		if (IS_ERR(mc)) {
+			dev_err_probe(dev, PTR_ERR(mc),
+				"failed to get memory controller handle\n");
+			return PTR_ERR(mc);
+		}
+
+		err = tegra_mc_get_carveout_info(mc, 1, &nvdec->carveout_base, NULL);
+		if (err) {
+			dev_err(dev, "failed to get carveout info: %d\n", err);
+			return err;
+		}
+
+		nvdec->reset = devm_reset_control_get_exclusive_released(dev, "nvdec");
+		if (IS_ERR(nvdec->reset)) {
+			dev_err_probe(dev, PTR_ERR(nvdec->reset), "failed to get reset\n");
+			return PTR_ERR(nvdec->reset);
+		}
+
+		nvdec->riscv.dev = dev;
+		nvdec->riscv.regs = nvdec->regs;
+
+		err = tegra_drm_riscv_read_descriptors(&nvdec->riscv);
+		if (err < 0)
+			return err;
+	} else {
+		nvdec->falcon.dev = dev;
+		nvdec->falcon.regs = nvdec->regs;
+
+		err = falcon_init(&nvdec->falcon);
+		if (err < 0)
+			return err;
+	}
 
 	platform_set_drvdata(pdev, nvdec);
 
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v3 8/8] drm/tegra: Add Tegra234 support to NVDEC driver
@ 2022-09-20  8:12   ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-20  8:12 UTC (permalink / raw)
  To: Thierry Reding, David Airlie, Daniel Vetter, Rob Herring,
	Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

From: Mikko Perttunen <mperttunen@nvidia.com>

Add support for the Tegra234 version of NVDEC to the NVDEC driver.
This version sports a RISC-V controller and requires a few additional
clocks. After firmware has been loaded, the behavior is, however,
backwards compatible.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
---
 drivers/gpu/drm/tegra/drm.c   |   1 +
 drivers/gpu/drm/tegra/nvdec.c | 140 ++++++++++++++++++++++++++++++----
 2 files changed, 126 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 6748ec1e0005..a014f11e9edb 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -1382,6 +1382,7 @@ static const struct of_device_id host1x_drm_subdevs[] = {
 	{ .compatible = "nvidia,tegra194-vic", },
 	{ .compatible = "nvidia,tegra194-nvdec", },
 	{ .compatible = "nvidia,tegra234-vic", },
+	{ .compatible = "nvidia,tegra234-nvdec", },
 	{ /* sentinel */ }
 };
 
diff --git a/drivers/gpu/drm/tegra/nvdec.c b/drivers/gpu/drm/tegra/nvdec.c
index 05af4d107421..10fd21517281 100644
--- a/drivers/gpu/drm/tegra/nvdec.c
+++ b/drivers/gpu/drm/tegra/nvdec.c
@@ -8,6 +8,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/host1x.h>
 #include <linux/iommu.h>
+#include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -16,18 +17,21 @@
 #include <linux/pm_runtime.h>
 #include <linux/reset.h>
 
-#include <soc/tegra/pmc.h>
+#include <soc/tegra/mc.h>
 
 #include "drm.h"
 #include "falcon.h"
+#include "riscv.h"
 #include "vic.h"
 
+#define NVDEC_FALCON_DEBUGINFO			0x1094
 #define NVDEC_TFBIF_TRANSCFG			0x2c44
 
 struct nvdec_config {
 	const char *firmware;
 	unsigned int version;
 	bool supports_sid;
+	bool has_riscv;
 	bool has_extra_clocks;
 };
 
@@ -40,9 +44,14 @@ struct nvdec {
 	struct device *dev;
 	struct clk_bulk_data clks[3];
 	unsigned int num_clks;
+	struct reset_control *reset;
 
 	/* Platform configuration */
 	const struct nvdec_config *config;
+
+	/* RISC-V specific data */
+	struct tegra_drm_riscv riscv;
+	phys_addr_t carveout_base;
 };
 
 static inline struct nvdec *to_nvdec(struct tegra_drm_client *client)
@@ -56,7 +65,7 @@ static inline void nvdec_writel(struct nvdec *nvdec, u32 value,
 	writel(value, nvdec->regs + offset);
 }
 
-static int nvdec_boot(struct nvdec *nvdec)
+static int nvdec_boot_falcon(struct nvdec *nvdec)
 {
 #ifdef CONFIG_IOMMU_API
 	struct iommu_fwspec *spec = dev_iommu_fwspec_get(nvdec->dev);
@@ -92,6 +101,64 @@ static int nvdec_boot(struct nvdec *nvdec)
 	return 0;
 }
 
+static int nvdec_wait_debuginfo(struct nvdec *nvdec, const char *phase)
+{
+	int err;
+	u32 val;
+
+	err = readl_poll_timeout(nvdec->regs + NVDEC_FALCON_DEBUGINFO, val, val == 0x0, 10, 100000);
+	if (err) {
+		dev_err(nvdec->dev, "failed to boot %s, debuginfo=0x%x\n", phase, val);
+		return err;
+	}
+
+	return 0;
+}
+
+static int nvdec_boot_riscv(struct nvdec *nvdec)
+{
+	int err;
+
+	err = reset_control_acquire(nvdec->reset);
+	if (err)
+		return err;
+
+	nvdec_writel(nvdec, 0xabcd1234, NVDEC_FALCON_DEBUGINFO);
+
+	err = tegra_drm_riscv_boot_bootrom(&nvdec->riscv, nvdec->carveout_base, 1,
+					   &nvdec->riscv.bl_desc);
+	if (err) {
+		dev_err(nvdec->dev, "failed to execute bootloader\n");
+		goto release_reset;
+	}
+
+	err = nvdec_wait_debuginfo(nvdec, "bootloader");
+	if (err)
+		goto release_reset;
+
+	err = reset_control_reset(nvdec->reset);
+	if (err)
+		goto release_reset;
+
+	nvdec_writel(nvdec, 0xabcd1234, NVDEC_FALCON_DEBUGINFO);
+
+	err = tegra_drm_riscv_boot_bootrom(&nvdec->riscv, nvdec->carveout_base, 1,
+					   &nvdec->riscv.os_desc);
+	if (err) {
+		dev_err(nvdec->dev, "failed to execute firmware\n");
+		goto release_reset;
+	}
+
+	err = nvdec_wait_debuginfo(nvdec, "firmware");
+	if (err)
+		goto release_reset;
+
+release_reset:
+	reset_control_release(nvdec->reset);
+
+	return err;
+}
+
 static int nvdec_init(struct host1x_client *client)
 {
 	struct tegra_drm_client *drm = host1x_to_drm_client(client);
@@ -191,7 +258,7 @@ static const struct host1x_client_ops nvdec_client_ops = {
 	.exit = nvdec_exit,
 };
 
-static int nvdec_load_firmware(struct nvdec *nvdec)
+static int nvdec_load_falcon_firmware(struct nvdec *nvdec)
 {
 	struct host1x_client *client = &nvdec->client.base;
 	struct tegra_drm *tegra = nvdec->client.drm;
@@ -254,7 +321,6 @@ static int nvdec_load_firmware(struct nvdec *nvdec)
 	return err;
 }
 
-
 static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 {
 	struct nvdec *nvdec = dev_get_drvdata(dev);
@@ -266,13 +332,19 @@ static __maybe_unused int nvdec_runtime_resume(struct device *dev)
 
 	usleep_range(10, 20);
 
-	err = nvdec_load_firmware(nvdec);
-	if (err < 0)
-		goto disable;
+	if (nvdec->config->has_riscv) {
+		err = nvdec_boot_riscv(nvdec);
+		if (err < 0)
+			goto disable;
+	} else {
+		err = nvdec_load_falcon_firmware(nvdec);
+		if (err < 0)
+			goto disable;
 
-	err = nvdec_boot(nvdec);
-	if (err < 0)
-		goto disable;
+		err = nvdec_boot_falcon(nvdec);
+		if (err < 0)
+			goto disable;
+	}
 
 	return 0;
 
@@ -348,10 +420,18 @@ static const struct nvdec_config nvdec_t194_config = {
 	.supports_sid = true,
 };
 
+static const struct nvdec_config nvdec_t234_config = {
+	.version = 0x23,
+	.supports_sid = true,
+	.has_riscv = true,
+	.has_extra_clocks = true,
+};
+
 static const struct of_device_id tegra_nvdec_of_match[] = {
 	{ .compatible = "nvidia,tegra210-nvdec", .data = &nvdec_t210_config },
 	{ .compatible = "nvidia,tegra186-nvdec", .data = &nvdec_t186_config },
 	{ .compatible = "nvidia,tegra194-nvdec", .data = &nvdec_t194_config },
+	{ .compatible = "nvidia,tegra234-nvdec", .data = &nvdec_t234_config },
 	{ },
 };
 MODULE_DEVICE_TABLE(of, tegra_nvdec_of_match);
@@ -410,12 +490,42 @@ static int nvdec_probe(struct platform_device *pdev)
 	if (err < 0)
 		host_class = HOST1X_CLASS_NVDEC;
 
-	nvdec->falcon.dev = dev;
-	nvdec->falcon.regs = nvdec->regs;
+	if (nvdec->config->has_riscv) {
+		struct tegra_mc *mc;
 
-	err = falcon_init(&nvdec->falcon);
-	if (err < 0)
-		return err;
+		mc = devm_tegra_memory_controller_get(dev);
+		if (IS_ERR(mc)) {
+			dev_err_probe(dev, PTR_ERR(mc),
+				"failed to get memory controller handle\n");
+			return PTR_ERR(mc);
+		}
+
+		err = tegra_mc_get_carveout_info(mc, 1, &nvdec->carveout_base, NULL);
+		if (err) {
+			dev_err(dev, "failed to get carveout info: %d\n", err);
+			return err;
+		}
+
+		nvdec->reset = devm_reset_control_get_exclusive_released(dev, "nvdec");
+		if (IS_ERR(nvdec->reset)) {
+			dev_err_probe(dev, PTR_ERR(nvdec->reset), "failed to get reset\n");
+			return PTR_ERR(nvdec->reset);
+		}
+
+		nvdec->riscv.dev = dev;
+		nvdec->riscv.regs = nvdec->regs;
+
+		err = tegra_drm_riscv_read_descriptors(&nvdec->riscv);
+		if (err < 0)
+			return err;
+	} else {
+		nvdec->falcon.dev = dev;
+		nvdec->falcon.regs = nvdec->regs;
+
+		err = falcon_init(&nvdec->falcon);
+		if (err < 0)
+			return err;
+	}
 
 	platform_set_drvdata(pdev, nvdec);
 
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-09-21  7:26   ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:26 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> v3:
> * Updated patch 3 based on comments
> 
> v2:
> * Updated patches 1,3 based on comments
> * Added Acked-by to patch 2
> 
> Original message:
> 
> Hi all,
> 
> this series adds support for the HW video decoder, NVDEC,
> on Tegra234 (Orin). The main change is a switch from Falcon
> to RISC-V for the internal microcontroller, which brings along
> a change in how the engine is booted. Otherwise it is backwards
> compatible with earlier versions.

I asked you to describe the dependencies and patch merging strategy.
It's still not here, so I assume there are no and I am taking patches
relevant to me.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-09-21  7:26   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:26 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> v3:
> * Updated patch 3 based on comments
> 
> v2:
> * Updated patches 1,3 based on comments
> * Added Acked-by to patch 2
> 
> Original message:
> 
> Hi all,
> 
> this series adds support for the HW video decoder, NVDEC,
> on Tegra234 (Orin). The main change is a switch from Falcon
> to RISC-V for the internal microcontroller, which brings along
> a change in how the engine is booted. Otherwise it is backwards
> compatible with earlier versions.

I asked you to describe the dependencies and patch merging strategy.
It's still not here, so I assume there are no and I am taking patches
relevant to me.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-09-20  8:11   ` Mikko Perttunen
@ 2022-09-21  7:28     ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:28 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v2:
> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>   is always 64 bits where this runs, but it avoids warnings in
>   compile test.
> ---
>  drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>  drivers/memory/tegra/tegra234.c |  5 +++++
>  include/soc/tegra/mc.h          | 11 +++++++++++

I still need here Thierry's ack.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-09-21  7:28     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:28 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v2:
> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>   is always 64 bits where this runs, but it avoids warnings in
>   compile test.
> ---
>  drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>  drivers/memory/tegra/tegra234.c |  5 +++++
>  include/soc/tegra/mc.h          | 11 +++++++++++

I still need here Thierry's ack.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
  2022-09-21  7:26   ` Krzysztof Kozlowski
@ 2022-09-21  7:50     ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-21  7:50 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 9/21/22 10:26, Krzysztof Kozlowski wrote:
> On 20/09/2022 10:11, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> v3:
>> * Updated patch 3 based on comments
>>
>> v2:
>> * Updated patches 1,3 based on comments
>> * Added Acked-by to patch 2
>>
>> Original message:
>>
>> Hi all,
>>
>> this series adds support for the HW video decoder, NVDEC,
>> on Tegra234 (Orin). The main change is a switch from Falcon
>> to RISC-V for the internal microcontroller, which brings along
>> a change in how the engine is booted. Otherwise it is backwards
>> compatible with earlier versions.
> 
> I asked you to describe the dependencies and patch merging strategy.
> It's still not here, so I assume there are no and I am taking patches
> relevant to me.
> 
> Best regards,
> Krzysztof

Sorry, I described it in the earlier email and forgot to add it to the 
cover letter..

Patch 8 does depend on patch 1 so it would be better to take the memory 
patch with it, or however works best from maintainership point of view 
(not my expertise).

thanks,
Mikko

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-09-21  7:50     ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-21  7:50 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 9/21/22 10:26, Krzysztof Kozlowski wrote:
> On 20/09/2022 10:11, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> v3:
>> * Updated patch 3 based on comments
>>
>> v2:
>> * Updated patches 1,3 based on comments
>> * Added Acked-by to patch 2
>>
>> Original message:
>>
>> Hi all,
>>
>> this series adds support for the HW video decoder, NVDEC,
>> on Tegra234 (Orin). The main change is a switch from Falcon
>> to RISC-V for the internal microcontroller, which brings along
>> a change in how the engine is booted. Otherwise it is backwards
>> compatible with earlier versions.
> 
> I asked you to describe the dependencies and patch merging strategy.
> It's still not here, so I assume there are no and I am taking patches
> relevant to me.
> 
> Best regards,
> Krzysztof

Sorry, I described it in the earlier email and forgot to add it to the 
cover letter..

Patch 8 does depend on patch 1 so it would be better to take the memory 
patch with it, or however works best from maintainership point of view 
(not my expertise).

thanks,
Mikko

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
  2022-09-21  7:50     ` Mikko Perttunen
@ 2022-09-21  7:53       ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:53 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 21/09/2022 09:50, Mikko Perttunen wrote:
> On 9/21/22 10:26, Krzysztof Kozlowski wrote:
>> On 20/09/2022 10:11, Mikko Perttunen wrote:
>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>
>>> v3:
>>> * Updated patch 3 based on comments
>>>
>>> v2:
>>> * Updated patches 1,3 based on comments
>>> * Added Acked-by to patch 2
>>>
>>> Original message:
>>>
>>> Hi all,
>>>
>>> this series adds support for the HW video decoder, NVDEC,
>>> on Tegra234 (Orin). The main change is a switch from Falcon
>>> to RISC-V for the internal microcontroller, which brings along
>>> a change in how the engine is booted. Otherwise it is backwards
>>> compatible with earlier versions.
>>
>> I asked you to describe the dependencies and patch merging strategy.
>> It's still not here, so I assume there are no and I am taking patches
>> relevant to me.
>>
>> Best regards,
>> Krzysztof
> 
> Sorry, I described it in the earlier email and forgot to add it to the 
> cover letter..

Please keep it in cover letter. We all get too many emails and too many
patchsets to remember. Plus, things can change and such dependency can
disappear after some versions.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-09-21  7:53       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21  7:53 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 21/09/2022 09:50, Mikko Perttunen wrote:
> On 9/21/22 10:26, Krzysztof Kozlowski wrote:
>> On 20/09/2022 10:11, Mikko Perttunen wrote:
>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>
>>> v3:
>>> * Updated patch 3 based on comments
>>>
>>> v2:
>>> * Updated patches 1,3 based on comments
>>> * Added Acked-by to patch 2
>>>
>>> Original message:
>>>
>>> Hi all,
>>>
>>> this series adds support for the HW video decoder, NVDEC,
>>> on Tegra234 (Orin). The main change is a switch from Falcon
>>> to RISC-V for the internal microcontroller, which brings along
>>> a change in how the engine is booted. Otherwise it is backwards
>>> compatible with earlier versions.
>>
>> I asked you to describe the dependencies and patch merging strategy.
>> It's still not here, so I assume there are no and I am taking patches
>> relevant to me.
>>
>> Best regards,
>> Krzysztof
> 
> Sorry, I described it in the earlier email and forgot to add it to the 
> cover letter..

Please keep it in cover letter. We all get too many emails and too many
patchsets to remember. Plus, things can change and such dependency can
disappear after some versions.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-09-20  8:11   ` Mikko Perttunen
@ 2022-09-21 18:37     ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21 18:37 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-09-21 18:37     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-21 18:37 UTC (permalink / raw)
  To: Mikko Perttunen, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 20/09/2022 10:11, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-09-21 18:37     ` Krzysztof Kozlowski
@ 2022-09-21 18:54       ` Mikko Perttunen
  -1 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-21 18:54 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: Mikko Perttunen, Ashish Mhetre, Sameer Pujar, dri-devel,
	linux-tegra, devicetree, linux-kernel

On 9/21/22 21:37, Krzysztof Kozlowski wrote:
> On 20/09/2022 10:11, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>> the address of this firmware, which we can determine by checking the
>> starting address of the carveout. As such, add an MC API to query the
>> bounds of carveouts, and add related information on Tegra234.
>>
>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> 
> 
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> 
> 
> Best regards,
> Krzysztof
> 

Thanks!

Mikko

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-09-21 18:54       ` Mikko Perttunen
  0 siblings, 0 replies; 46+ messages in thread
From: Mikko Perttunen @ 2022-09-21 18:54 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, David Airlie, Daniel Vetter,
	Rob Herring, Krzysztof Kozlowski, Jonathan Hunter
  Cc: devicetree, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, linux-tegra, Ashish Mhetre

On 9/21/22 21:37, Krzysztof Kozlowski wrote:
> On 20/09/2022 10:11, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>> the address of this firmware, which we can determine by checking the
>> starting address of the carveout. As such, add an MC API to query the
>> bounds of carveouts, and add related information on Tegra234.
>>
>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> 
> 
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> 
> 
> Best regards,
> Krzysztof
> 

Thanks!

Mikko

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 3/8] dt-bindings: Add bindings for Tegra234 NVDEC
  2022-09-20  8:11   ` Mikko Perttunen
@ 2022-10-03 16:16     ` Rob Herring
  -1 siblings, 0 replies; 46+ messages in thread
From: Rob Herring @ 2022-10-03 16:16 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: Thierry Reding, Jonathan Hunter, Rob Herring,
	Krzysztof Kozlowski, linux-tegra, Ashish Mhetre, Daniel Vetter,
	devicetree, linux-kernel, Mikko Perttunen, Sameer Pujar,
	David Airlie, dri-devel

On Tue, 20 Sep 2022 11:11:58 +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> Update NVDEC bindings for Tegra234. This new engine version only has
> two memory clients, but now requires three clocks, and as a bigger
> change the engine loads firmware from a secure carveout configured by
> the bootloader.
> 
> For the latter, we need to add a phandle to the memory controller
> to query the location of this carveout, and several other properties
> containing offsets into the firmware inside the carveout. This
> carveout is not accessible by the CPU, but is needed by NVDEC,
> so we need this information to be relayed from the bootloader.
> 
> As the binding was getting large with many conditional properties,
> also split the Tegra234 version out into a separate file.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v3:
> - Adjusted descriptions for firmware-related DT properties
>   as requested.
> - Small update to commit message.
> v2:
> - Split out into separate file to avoid complexity with
>   conditionals etc.
> ---
>  .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++++
>  1 file changed, 156 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 3/8] dt-bindings: Add bindings for Tegra234 NVDEC
@ 2022-10-03 16:16     ` Rob Herring
  0 siblings, 0 replies; 46+ messages in thread
From: Rob Herring @ 2022-10-03 16:16 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel,
	Rob Herring, Jonathan Hunter, Thierry Reding, dri-devel,
	Krzysztof Kozlowski, linux-tegra, Mikko Perttunen, Ashish Mhetre

On Tue, 20 Sep 2022 11:11:58 +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> Update NVDEC bindings for Tegra234. This new engine version only has
> two memory clients, but now requires three clocks, and as a bigger
> change the engine loads firmware from a secure carveout configured by
> the bootloader.
> 
> For the latter, we need to add a phandle to the memory controller
> to query the location of this carveout, and several other properties
> containing offsets into the firmware inside the carveout. This
> carveout is not accessible by the CPU, but is needed by NVDEC,
> so we need this information to be relayed from the bootloader.
> 
> As the binding was getting large with many conditional properties,
> also split the Tegra234 version out into a separate file.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v3:
> - Adjusted descriptions for firmware-related DT properties
>   as requested.
> - Small update to commit message.
> v2:
> - Split out into separate file to avoid complexity with
>   conditionals etc.
> ---
>  .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++++
>  1 file changed, 156 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-09-20  8:11   ` Mikko Perttunen
@ 2022-10-24 13:15     ` Thierry Reding
  -1 siblings, 0 replies; 46+ messages in thread
From: Thierry Reding @ 2022-10-24 13:15 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, Krzysztof Kozlowski, linux-tegra,
	Jonathan Hunter, Ashish Mhetre

[-- Attachment #1: Type: text/plain, Size: 1100 bytes --]

On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v2:
> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>   is always 64 bits where this runs, but it avoids warnings in
>   compile test.
> ---
>  drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>  drivers/memory/tegra/tegra234.c |  5 +++++
>  include/soc/tegra/mc.h          | 11 +++++++++++
>  3 files changed, 41 insertions(+)

Krzysztof,

I've applied this to the same tree as the patch that uses it for now.
Let me know if you want me to put this on a separate stable branch for
you to pull in.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-10-24 13:15     ` Thierry Reding
  0 siblings, 0 replies; 46+ messages in thread
From: Thierry Reding @ 2022-10-24 13:15 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Jonathan Hunter, Mikko Perttunen, Ashish Mhetre, Sameer Pujar,
	dri-devel, linux-tegra, devicetree, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1100 bytes --]

On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
> has been loaded by a bootloader. When booting NVDEC, we need to tell it
> the address of this firmware, which we can determine by checking the
> starting address of the carveout. As such, add an MC API to query the
> bounds of carveouts, and add related information on Tegra234.
> 
> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> v2:
> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>   is always 64 bits where this runs, but it avoids warnings in
>   compile test.
> ---
>  drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>  drivers/memory/tegra/tegra234.c |  5 +++++
>  include/soc/tegra/mc.h          | 11 +++++++++++
>  3 files changed, 41 insertions(+)

Krzysztof,

I've applied this to the same tree as the patch that uses it for now.
Let me know if you want me to put this on a separate stable branch for
you to pull in.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
  2022-09-20  8:11 ` Mikko Perttunen
@ 2022-10-24 13:15   ` Thierry Reding
  -1 siblings, 0 replies; 46+ messages in thread
From: Thierry Reding @ 2022-10-24 13:15 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, Krzysztof Kozlowski, linux-tegra,
	Jonathan Hunter, Ashish Mhetre

[-- Attachment #1: Type: text/plain, Size: 3289 bytes --]

On Tue, Sep 20, 2022 at 11:11:55AM +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> v3:
> * Updated patch 3 based on comments
> 
> v2:
> * Updated patches 1,3 based on comments
> * Added Acked-by to patch 2
> 
> Original message:
> 
> Hi all,
> 
> this series adds support for the HW video decoder, NVDEC,
> on Tegra234 (Orin). The main change is a switch from Falcon
> to RISC-V for the internal microcontroller, which brings along
> a change in how the engine is booted. Otherwise it is backwards
> compatible with earlier versions.
> 
> In previous iterations, firmware was simply loaded from disk and
> written into engine internal memory. Now, the engine has a
> bootrom that loads the firmware from a carveout where it has been
> loaded by the system bootloader; however, we still need to tell it
> where that carveout is loaded and some offsets into it. For that,
> the first patch adds a new memory controller API to query the
> carveout address. The offsets are read from device tree -- the
> expectation is that at flashing time (when the firmware is also
> flashed), the flasher also delivers a device tree overlay with
> values corresponding to the flashed firmware.
> 
> The currently available Linux for Tegra release doesn't yet
> include this device tree overlay flashing, and the firmware version
> it contains is incompatible with this series. The plan is to fix
> that for the next Linux for Tegra release, but if necessary, we
> can postpone merging of this series to once those changes are
> available.
> 
> Thanks!
> Mikko
> 
> Mikko Perttunen (8):
>   memory: tegra: Add API for retrieving carveout bounds
>   dt-bindings: Add headers for NVDEC on Tegra234
>   dt-bindings: Add bindings for Tegra234 NVDEC
>   arm64: tegra: Add NVDEC on Tegra234
>   gpu: host1x: Add stream ID register data for NVDEC on Tegra234
>   drm/tegra: nvdec: Support multiple clocks
>   drm/tegra: Add code for booting RISC-V based engines
>   drm/tegra: Add Tegra234 support to NVDEC driver
> 
>  .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++
>  arch/arm64/boot/dts/nvidia/tegra234.dtsi      |  27 +++
>  drivers/gpu/drm/tegra/Makefile                |   3 +-
>  drivers/gpu/drm/tegra/drm.c                   |   1 +
>  drivers/gpu/drm/tegra/nvdec.c                 | 171 +++++++++++++++---
>  drivers/gpu/drm/tegra/riscv.c                 | 106 +++++++++++
>  drivers/gpu/drm/tegra/riscv.h                 |  30 +++
>  drivers/gpu/host1x/dev.c                      |  12 ++
>  drivers/memory/tegra/mc.c                     |  25 +++
>  drivers/memory/tegra/tegra234.c               |   5 +
>  include/dt-bindings/clock/tegra234-clock.h    |   4 +
>  include/dt-bindings/memory/tegra234-mc.h      |   3 +
>  .../dt-bindings/power/tegra234-powergate.h    |   1 +
>  include/dt-bindings/reset/tegra234-reset.h    |   1 +
>  include/soc/tegra/mc.h                        |  11 ++
>  15 files changed, 530 insertions(+), 26 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
>  create mode 100644 drivers/gpu/drm/tegra/riscv.c
>  create mode 100644 drivers/gpu/drm/tegra/riscv.h

Applied, thanks.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 0/8] Support for NVDEC on Tegra234
@ 2022-10-24 13:15   ` Thierry Reding
  0 siblings, 0 replies; 46+ messages in thread
From: Thierry Reding @ 2022-10-24 13:15 UTC (permalink / raw)
  To: Mikko Perttunen
  Cc: David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
	Jonathan Hunter, Mikko Perttunen, Ashish Mhetre, Sameer Pujar,
	dri-devel, linux-tegra, devicetree, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3289 bytes --]

On Tue, Sep 20, 2022 at 11:11:55AM +0300, Mikko Perttunen wrote:
> From: Mikko Perttunen <mperttunen@nvidia.com>
> 
> v3:
> * Updated patch 3 based on comments
> 
> v2:
> * Updated patches 1,3 based on comments
> * Added Acked-by to patch 2
> 
> Original message:
> 
> Hi all,
> 
> this series adds support for the HW video decoder, NVDEC,
> on Tegra234 (Orin). The main change is a switch from Falcon
> to RISC-V for the internal microcontroller, which brings along
> a change in how the engine is booted. Otherwise it is backwards
> compatible with earlier versions.
> 
> In previous iterations, firmware was simply loaded from disk and
> written into engine internal memory. Now, the engine has a
> bootrom that loads the firmware from a carveout where it has been
> loaded by the system bootloader; however, we still need to tell it
> where that carveout is loaded and some offsets into it. For that,
> the first patch adds a new memory controller API to query the
> carveout address. The offsets are read from device tree -- the
> expectation is that at flashing time (when the firmware is also
> flashed), the flasher also delivers a device tree overlay with
> values corresponding to the flashed firmware.
> 
> The currently available Linux for Tegra release doesn't yet
> include this device tree overlay flashing, and the firmware version
> it contains is incompatible with this series. The plan is to fix
> that for the next Linux for Tegra release, but if necessary, we
> can postpone merging of this series to once those changes are
> available.
> 
> Thanks!
> Mikko
> 
> Mikko Perttunen (8):
>   memory: tegra: Add API for retrieving carveout bounds
>   dt-bindings: Add headers for NVDEC on Tegra234
>   dt-bindings: Add bindings for Tegra234 NVDEC
>   arm64: tegra: Add NVDEC on Tegra234
>   gpu: host1x: Add stream ID register data for NVDEC on Tegra234
>   drm/tegra: nvdec: Support multiple clocks
>   drm/tegra: Add code for booting RISC-V based engines
>   drm/tegra: Add Tegra234 support to NVDEC driver
> 
>  .../gpu/host1x/nvidia,tegra234-nvdec.yaml     | 156 ++++++++++++++++
>  arch/arm64/boot/dts/nvidia/tegra234.dtsi      |  27 +++
>  drivers/gpu/drm/tegra/Makefile                |   3 +-
>  drivers/gpu/drm/tegra/drm.c                   |   1 +
>  drivers/gpu/drm/tegra/nvdec.c                 | 171 +++++++++++++++---
>  drivers/gpu/drm/tegra/riscv.c                 | 106 +++++++++++
>  drivers/gpu/drm/tegra/riscv.h                 |  30 +++
>  drivers/gpu/host1x/dev.c                      |  12 ++
>  drivers/memory/tegra/mc.c                     |  25 +++
>  drivers/memory/tegra/tegra234.c               |   5 +
>  include/dt-bindings/clock/tegra234-clock.h    |   4 +
>  include/dt-bindings/memory/tegra234-mc.h      |   3 +
>  .../dt-bindings/power/tegra234-powergate.h    |   1 +
>  include/dt-bindings/reset/tegra234-reset.h    |   1 +
>  include/soc/tegra/mc.h                        |  11 ++
>  15 files changed, 530 insertions(+), 26 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/gpu/host1x/nvidia,tegra234-nvdec.yaml
>  create mode 100644 drivers/gpu/drm/tegra/riscv.c
>  create mode 100644 drivers/gpu/drm/tegra/riscv.h

Applied, thanks.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-10-24 13:15     ` Thierry Reding
@ 2022-11-04 15:33       ` Jon Hunter
  -1 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 15:33 UTC (permalink / raw)
  To: Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: David Airlie, Daniel Vetter, Rob Herring, Mikko Perttunen,
	Ashish Mhetre, Sameer Pujar, dri-devel, linux-tegra, devicetree,
	linux-kernel

Hi Thierry, Krzysztof,

On 24/10/2022 14:15, Thierry Reding wrote:
> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>> the address of this firmware, which we can determine by checking the
>> starting address of the carveout. As such, add an MC API to query the
>> bounds of carveouts, and add related information on Tegra234.
>>
>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>> ---
>> v2:
>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>    is always 64 bits where this runs, but it avoids warnings in
>>    compile test.
>> ---
>>   drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>   drivers/memory/tegra/tegra234.c |  5 +++++
>>   include/soc/tegra/mc.h          | 11 +++++++++++
>>   3 files changed, 41 insertions(+)
> 
> Krzysztof,
> 
> I've applied this to the same tree as the patch that uses it for now.
> Let me know if you want me to put this on a separate stable branch for
> you to pull in.

Any update on this?

Thanks!
Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-11-04 15:33       ` Jon Hunter
  0 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 15:33 UTC (permalink / raw)
  To: Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, linux-tegra, Ashish Mhetre

Hi Thierry, Krzysztof,

On 24/10/2022 14:15, Thierry Reding wrote:
> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>
>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>> the address of this firmware, which we can determine by checking the
>> starting address of the carveout. As such, add an MC API to query the
>> bounds of carveouts, and add related information on Tegra234.
>>
>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>> ---
>> v2:
>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>    is always 64 bits where this runs, but it avoids warnings in
>>    compile test.
>> ---
>>   drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>   drivers/memory/tegra/tegra234.c |  5 +++++
>>   include/soc/tegra/mc.h          | 11 +++++++++++
>>   3 files changed, 41 insertions(+)
> 
> Krzysztof,
> 
> I've applied this to the same tree as the patch that uses it for now.
> Let me know if you want me to put this on a separate stable branch for
> you to pull in.

Any update on this?

Thanks!
Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-11-04 15:33       ` Jon Hunter
@ 2022-11-04 15:35         ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-11-04 15:35 UTC (permalink / raw)
  To: Jon Hunter, Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: David Airlie, Daniel Vetter, Rob Herring, Mikko Perttunen,
	Ashish Mhetre, Sameer Pujar, dri-devel, linux-tegra, devicetree,
	linux-kernel

On 04/11/2022 11:33, Jon Hunter wrote:
> Hi Thierry, Krzysztof,
> 
> On 24/10/2022 14:15, Thierry Reding wrote:
>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>
>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>> the address of this firmware, which we can determine by checking the
>>> starting address of the carveout. As such, add an MC API to query the
>>> bounds of carveouts, and add related information on Tegra234.
>>>
>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>> ---
>>> v2:
>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>    is always 64 bits where this runs, but it avoids warnings in
>>>    compile test.
>>> ---
>>>   drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>   drivers/memory/tegra/tegra234.c |  5 +++++
>>>   include/soc/tegra/mc.h          | 11 +++++++++++
>>>   3 files changed, 41 insertions(+)
>>
>> Krzysztof,
>>
>> I've applied this to the same tree as the patch that uses it for now.
>> Let me know if you want me to put this on a separate stable branch for
>> you to pull in.
> 
> Any update on this?

What kind of update do you expect?

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-11-04 15:35         ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-11-04 15:35 UTC (permalink / raw)
  To: Jon Hunter, Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, linux-tegra, Ashish Mhetre

On 04/11/2022 11:33, Jon Hunter wrote:
> Hi Thierry, Krzysztof,
> 
> On 24/10/2022 14:15, Thierry Reding wrote:
>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>
>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>> the address of this firmware, which we can determine by checking the
>>> starting address of the carveout. As such, add an MC API to query the
>>> bounds of carveouts, and add related information on Tegra234.
>>>
>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>> ---
>>> v2:
>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>    is always 64 bits where this runs, but it avoids warnings in
>>>    compile test.
>>> ---
>>>   drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>   drivers/memory/tegra/tegra234.c |  5 +++++
>>>   include/soc/tegra/mc.h          | 11 +++++++++++
>>>   3 files changed, 41 insertions(+)
>>
>> Krzysztof,
>>
>> I've applied this to the same tree as the patch that uses it for now.
>> Let me know if you want me to put this on a separate stable branch for
>> you to pull in.
> 
> Any update on this?

What kind of update do you expect?

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-11-04 15:35         ` Krzysztof Kozlowski
@ 2022-11-04 15:46           ` Jon Hunter
  -1 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 15:46 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, Mikko Perttunen,
	Krzysztof Kozlowski
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, linux-tegra, Ashish Mhetre


On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
> On 04/11/2022 11:33, Jon Hunter wrote:
>> Hi Thierry, Krzysztof,
>>
>> On 24/10/2022 14:15, Thierry Reding wrote:
>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>
>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>> the address of this firmware, which we can determine by checking the
>>>> starting address of the carveout. As such, add an MC API to query the
>>>> bounds of carveouts, and add related information on Tegra234.
>>>>
>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>> ---
>>>> v2:
>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>     is always 64 bits where this runs, but it avoids warnings in
>>>>     compile test.
>>>> ---
>>>>    drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>    drivers/memory/tegra/tegra234.c |  5 +++++
>>>>    include/soc/tegra/mc.h          | 11 +++++++++++
>>>>    3 files changed, 41 insertions(+)
>>>
>>> Krzysztof,
>>>
>>> I've applied this to the same tree as the patch that uses it for now.
>>> Let me know if you want me to put this on a separate stable branch for
>>> you to pull in.
>>
>> Any update on this?
> 
> What kind of update do you expect?

Ha! I guess I should be more explicit :-)

Well, I would like to see this change in -next and so I was hoping that 
you would respond to the above to indicate how you would like to pull 
this in.

Cheers!
Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-11-04 15:46           ` Jon Hunter
  0 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 15:46 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, Mikko Perttunen,
	Krzysztof Kozlowski
  Cc: David Airlie, Daniel Vetter, Rob Herring, Mikko Perttunen,
	Ashish Mhetre, Sameer Pujar, dri-devel, linux-tegra, devicetree,
	linux-kernel


On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
> On 04/11/2022 11:33, Jon Hunter wrote:
>> Hi Thierry, Krzysztof,
>>
>> On 24/10/2022 14:15, Thierry Reding wrote:
>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>
>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>> the address of this firmware, which we can determine by checking the
>>>> starting address of the carveout. As such, add an MC API to query the
>>>> bounds of carveouts, and add related information on Tegra234.
>>>>
>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>> ---
>>>> v2:
>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>     is always 64 bits where this runs, but it avoids warnings in
>>>>     compile test.
>>>> ---
>>>>    drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>    drivers/memory/tegra/tegra234.c |  5 +++++
>>>>    include/soc/tegra/mc.h          | 11 +++++++++++
>>>>    3 files changed, 41 insertions(+)
>>>
>>> Krzysztof,
>>>
>>> I've applied this to the same tree as the patch that uses it for now.
>>> Let me know if you want me to put this on a separate stable branch for
>>> you to pull in.
>>
>> Any update on this?
> 
> What kind of update do you expect?

Ha! I guess I should be more explicit :-)

Well, I would like to see this change in -next and so I was hoping that 
you would respond to the above to indicate how you would like to pull 
this in.

Cheers!
Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-11-04 15:46           ` Jon Hunter
@ 2022-11-04 15:48             ` Krzysztof Kozlowski
  -1 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-11-04 15:48 UTC (permalink / raw)
  To: Jon Hunter, Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: David Airlie, Daniel Vetter, Rob Herring, Mikko Perttunen,
	Ashish Mhetre, Sameer Pujar, dri-devel, linux-tegra, devicetree,
	linux-kernel

On 04/11/2022 11:46, Jon Hunter wrote:
> 
> On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
>> On 04/11/2022 11:33, Jon Hunter wrote:
>>> Hi Thierry, Krzysztof,
>>>
>>> On 24/10/2022 14:15, Thierry Reding wrote:
>>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>
>>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>>> the address of this firmware, which we can determine by checking the
>>>>> starting address of the carveout. As such, add an MC API to query the
>>>>> bounds of carveouts, and add related information on Tegra234.
>>>>>
>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>> ---
>>>>> v2:
>>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>>     is always 64 bits where this runs, but it avoids warnings in
>>>>>     compile test.
>>>>> ---
>>>>>    drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>>    drivers/memory/tegra/tegra234.c |  5 +++++
>>>>>    include/soc/tegra/mc.h          | 11 +++++++++++
>>>>>    3 files changed, 41 insertions(+)
>>>>
>>>> Krzysztof,
>>>>
>>>> I've applied this to the same tree as the patch that uses it for now.
>>>> Let me know if you want me to put this on a separate stable branch for
>>>> you to pull in.
>>>
>>> Any update on this?
>>
>> What kind of update do you expect?
> 
> Ha! I guess I should be more explicit :-)
> 
> Well, I would like to see this change in -next and so I was hoping that 
> you would respond to the above to indicate how you would like to pull 
> this in.

The change will be in next via Thierry. I do not have to pull this in.

The maintainer which applies patches is responsible for:
1. Having his tree in linux-next,
2. Sending the patches to upstream maintainer (e.g. arm-soc, Linus)
later in pull request.

There is no job for me here, if I agree with Thierry. There would be a
job if I needed a separate stable branch, but that I did not decide
yet... Do you think I need to pull it? If so, why?

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-11-04 15:48             ` Krzysztof Kozlowski
  0 siblings, 0 replies; 46+ messages in thread
From: Krzysztof Kozlowski @ 2022-11-04 15:48 UTC (permalink / raw)
  To: Jon Hunter, Thierry Reding, Mikko Perttunen, Krzysztof Kozlowski
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, linux-tegra, Ashish Mhetre

On 04/11/2022 11:46, Jon Hunter wrote:
> 
> On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
>> On 04/11/2022 11:33, Jon Hunter wrote:
>>> Hi Thierry, Krzysztof,
>>>
>>> On 24/10/2022 14:15, Thierry Reding wrote:
>>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>
>>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>>> the address of this firmware, which we can determine by checking the
>>>>> starting address of the carveout. As such, add an MC API to query the
>>>>> bounds of carveouts, and add related information on Tegra234.
>>>>>
>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>> ---
>>>>> v2:
>>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>>     is always 64 bits where this runs, but it avoids warnings in
>>>>>     compile test.
>>>>> ---
>>>>>    drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>>    drivers/memory/tegra/tegra234.c |  5 +++++
>>>>>    include/soc/tegra/mc.h          | 11 +++++++++++
>>>>>    3 files changed, 41 insertions(+)
>>>>
>>>> Krzysztof,
>>>>
>>>> I've applied this to the same tree as the patch that uses it for now.
>>>> Let me know if you want me to put this on a separate stable branch for
>>>> you to pull in.
>>>
>>> Any update on this?
>>
>> What kind of update do you expect?
> 
> Ha! I guess I should be more explicit :-)
> 
> Well, I would like to see this change in -next and so I was hoping that 
> you would respond to the above to indicate how you would like to pull 
> this in.

The change will be in next via Thierry. I do not have to pull this in.

The maintainer which applies patches is responsible for:
1. Having his tree in linux-next,
2. Sending the patches to upstream maintainer (e.g. arm-soc, Linus)
later in pull request.

There is no job for me here, if I agree with Thierry. There would be a
job if I needed a separate stable branch, but that I did not decide
yet... Do you think I need to pull it? If so, why?

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
  2022-11-04 15:48             ` Krzysztof Kozlowski
@ 2022-11-04 16:01               ` Jon Hunter
  -1 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 16:01 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, Mikko Perttunen,
	Krzysztof Kozlowski
  Cc: David Airlie, Daniel Vetter, Rob Herring, Mikko Perttunen,
	Ashish Mhetre, Sameer Pujar, dri-devel, linux-tegra, devicetree,
	linux-kernel


On 04/11/2022 15:48, Krzysztof Kozlowski wrote:
> On 04/11/2022 11:46, Jon Hunter wrote:
>>
>> On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
>>> On 04/11/2022 11:33, Jon Hunter wrote:
>>>> Hi Thierry, Krzysztof,
>>>>
>>>> On 24/10/2022 14:15, Thierry Reding wrote:
>>>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>>
>>>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>>>> the address of this firmware, which we can determine by checking the
>>>>>> starting address of the carveout. As such, add an MC API to query the
>>>>>> bounds of carveouts, and add related information on Tegra234.
>>>>>>
>>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>> ---
>>>>>> v2:
>>>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>>>      is always 64 bits where this runs, but it avoids warnings in
>>>>>>      compile test.
>>>>>> ---
>>>>>>     drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>>>     drivers/memory/tegra/tegra234.c |  5 +++++
>>>>>>     include/soc/tegra/mc.h          | 11 +++++++++++
>>>>>>     3 files changed, 41 insertions(+)
>>>>>
>>>>> Krzysztof,
>>>>>
>>>>> I've applied this to the same tree as the patch that uses it for now.
>>>>> Let me know if you want me to put this on a separate stable branch for
>>>>> you to pull in.
>>>>
>>>> Any update on this?
>>>
>>> What kind of update do you expect?
>>
>> Ha! I guess I should be more explicit :-)
>>
>> Well, I would like to see this change in -next and so I was hoping that
>> you would respond to the above to indicate how you would like to pull
>> this in.
> 
> The change will be in next via Thierry. I do not have to pull this in.
> 
> The maintainer which applies patches is responsible for:
> 1. Having his tree in linux-next,
> 2. Sending the patches to upstream maintainer (e.g. arm-soc, Linus)
> later in pull request.
> 
> There is no job for me here, if I agree with Thierry. There would be a
> job if I needed a separate stable branch, but that I did not decide
> yet... Do you think I need to pull it? If so, why?


No. Like I said I just want to get this into -next for testing. I had 
_wrongly_ assumed that Thierry was waiting on feedback from you. I see 
this is not the case and so let me check with Thierry where this is.

Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

* Re: [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds
@ 2022-11-04 16:01               ` Jon Hunter
  0 siblings, 0 replies; 46+ messages in thread
From: Jon Hunter @ 2022-11-04 16:01 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Thierry Reding, Mikko Perttunen,
	Krzysztof Kozlowski
  Cc: devicetree, David Airlie, Sameer Pujar, linux-kernel, dri-devel,
	Mikko Perttunen, Rob Herring, linux-tegra, Ashish Mhetre


On 04/11/2022 15:48, Krzysztof Kozlowski wrote:
> On 04/11/2022 11:46, Jon Hunter wrote:
>>
>> On 04/11/2022 15:35, Krzysztof Kozlowski wrote:
>>> On 04/11/2022 11:33, Jon Hunter wrote:
>>>> Hi Thierry, Krzysztof,
>>>>
>>>> On 24/10/2022 14:15, Thierry Reding wrote:
>>>>> On Tue, Sep 20, 2022 at 11:11:56AM +0300, Mikko Perttunen wrote:
>>>>>> From: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>>
>>>>>> On Tegra234 NVDEC firmware is loaded from a secure carveout, where it
>>>>>> has been loaded by a bootloader. When booting NVDEC, we need to tell it
>>>>>> the address of this firmware, which we can determine by checking the
>>>>>> starting address of the carveout. As such, add an MC API to query the
>>>>>> bounds of carveouts, and add related information on Tegra234.
>>>>>>
>>>>>> Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
>>>>>> ---
>>>>>> v2:
>>>>>> - Add check for 64-bit phys_addr_t. In practice phys_addr_t
>>>>>>      is always 64 bits where this runs, but it avoids warnings in
>>>>>>      compile test.
>>>>>> ---
>>>>>>     drivers/memory/tegra/mc.c       | 25 +++++++++++++++++++++++++
>>>>>>     drivers/memory/tegra/tegra234.c |  5 +++++
>>>>>>     include/soc/tegra/mc.h          | 11 +++++++++++
>>>>>>     3 files changed, 41 insertions(+)
>>>>>
>>>>> Krzysztof,
>>>>>
>>>>> I've applied this to the same tree as the patch that uses it for now.
>>>>> Let me know if you want me to put this on a separate stable branch for
>>>>> you to pull in.
>>>>
>>>> Any update on this?
>>>
>>> What kind of update do you expect?
>>
>> Ha! I guess I should be more explicit :-)
>>
>> Well, I would like to see this change in -next and so I was hoping that
>> you would respond to the above to indicate how you would like to pull
>> this in.
> 
> The change will be in next via Thierry. I do not have to pull this in.
> 
> The maintainer which applies patches is responsible for:
> 1. Having his tree in linux-next,
> 2. Sending the patches to upstream maintainer (e.g. arm-soc, Linus)
> later in pull request.
> 
> There is no job for me here, if I agree with Thierry. There would be a
> job if I needed a separate stable branch, but that I did not decide
> yet... Do you think I need to pull it? If so, why?


No. Like I said I just want to get this into -next for testing. I had 
_wrongly_ assumed that Thierry was waiting on feedback from you. I see 
this is not the case and so let me check with Thierry where this is.

Jon

-- 
nvpublic

^ permalink raw reply	[flat|nested] 46+ messages in thread

end of thread, other threads:[~2022-11-04 16:02 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-20  8:11 [PATCH v3 0/8] Support for NVDEC on Tegra234 Mikko Perttunen
2022-09-20  8:11 ` Mikko Perttunen
2022-09-20  8:11 ` [PATCH v3 1/8] memory: tegra: Add API for retrieving carveout bounds Mikko Perttunen
2022-09-20  8:11   ` Mikko Perttunen
2022-09-21  7:28   ` Krzysztof Kozlowski
2022-09-21  7:28     ` Krzysztof Kozlowski
2022-09-21 18:37   ` Krzysztof Kozlowski
2022-09-21 18:37     ` Krzysztof Kozlowski
2022-09-21 18:54     ` Mikko Perttunen
2022-09-21 18:54       ` Mikko Perttunen
2022-10-24 13:15   ` Thierry Reding
2022-10-24 13:15     ` Thierry Reding
2022-11-04 15:33     ` Jon Hunter
2022-11-04 15:33       ` Jon Hunter
2022-11-04 15:35       ` Krzysztof Kozlowski
2022-11-04 15:35         ` Krzysztof Kozlowski
2022-11-04 15:46         ` Jon Hunter
2022-11-04 15:46           ` Jon Hunter
2022-11-04 15:48           ` Krzysztof Kozlowski
2022-11-04 15:48             ` Krzysztof Kozlowski
2022-11-04 16:01             ` Jon Hunter
2022-11-04 16:01               ` Jon Hunter
2022-09-20  8:11 ` [PATCH v3 2/8] dt-bindings: Add headers for NVDEC on Tegra234 Mikko Perttunen
2022-09-20  8:11   ` Mikko Perttunen
2022-09-20  8:11 ` [PATCH v3 3/8] dt-bindings: Add bindings for Tegra234 NVDEC Mikko Perttunen
2022-09-20  8:11   ` Mikko Perttunen
2022-10-03 16:16   ` Rob Herring
2022-10-03 16:16     ` Rob Herring
2022-09-20  8:11 ` [PATCH v3 4/8] arm64: tegra: Add NVDEC on Tegra234 Mikko Perttunen
2022-09-20  8:11   ` Mikko Perttunen
2022-09-20  8:12 ` [PATCH v3 5/8] gpu: host1x: Add stream ID register data for " Mikko Perttunen
2022-09-20  8:12   ` Mikko Perttunen
2022-09-20  8:12 ` [PATCH v3 6/8] drm/tegra: nvdec: Support multiple clocks Mikko Perttunen
2022-09-20  8:12   ` Mikko Perttunen
2022-09-20  8:12 ` [PATCH v3 7/8] drm/tegra: Add code for booting RISC-V based engines Mikko Perttunen
2022-09-20  8:12   ` Mikko Perttunen
2022-09-20  8:12 ` [PATCH v3 8/8] drm/tegra: Add Tegra234 support to NVDEC driver Mikko Perttunen
2022-09-20  8:12   ` Mikko Perttunen
2022-09-21  7:26 ` [PATCH v3 0/8] Support for NVDEC on Tegra234 Krzysztof Kozlowski
2022-09-21  7:26   ` Krzysztof Kozlowski
2022-09-21  7:50   ` Mikko Perttunen
2022-09-21  7:50     ` Mikko Perttunen
2022-09-21  7:53     ` Krzysztof Kozlowski
2022-09-21  7:53       ` Krzysztof Kozlowski
2022-10-24 13:15 ` Thierry Reding
2022-10-24 13:15   ` Thierry Reding

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.