All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value
@ 2016-04-12 17:17 Stephen Warren
  2016-04-13  2:12 ` Alexandre Courbot
  2016-04-13 14:04 ` Thierry Reding
  0 siblings, 2 replies; 3+ messages in thread
From: Stephen Warren @ 2016-04-12 17:17 UTC (permalink / raw)
  To: u-boot

From: Stephen Warren <swarren@nvidia.com>

In current Linux kernel Tegra DT files, 64-bit addresses are represented
in unit addresses as a pair of comma-separated 32-bit values. Apparently
this is no longer the correct representation for simple busses, and the
unit address should be represented as a single 64-bit value. If this is
changed in the DTs, arm/arm/mach-tegra/board2.c:ft_system_setup() will no
longer be able to find and enable the GPU node, since it looks up the node
by name.

Fix that function to enable nodes based on their compatible value rather
than their node name. This will work no matter what the node name is, i.e
for DTs both before and after any rename operation.

Cc: Thierry Reding <treding@nvidia.com>
Cc: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/include/asm/arch-tegra/gpu.h |  2 +-
 arch/arm/mach-tegra/board2.c          | 20 +++++++++++++-------
 arch/arm/mach-tegra/gpu.c             | 15 ++++++++-------
 3 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/arch/arm/include/asm/arch-tegra/gpu.h b/arch/arm/include/asm/arch-tegra/gpu.h
index 4423386f2805..6be9f6157b36 100644
--- a/arch/arm/include/asm/arch-tegra/gpu.h
+++ b/arch/arm/include/asm/arch-tegra/gpu.h
@@ -26,7 +26,7 @@ int tegra_gpu_enable_node(void *blob, const char *gpupath);
 
 #else /* CONFIG_OF_LIBFDT */
 
-static inline int tegra_gpu_enable_node(void *blob, const char *gpupath)
+static inline int tegra_gpu_enable_node(void *blob, const char *compat)
 {
 	return 0;
 }
diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c
index ac274e17e8bd..141d6e1cb555 100644
--- a/arch/arm/mach-tegra/board2.c
+++ b/arch/arm/mach-tegra/board2.c
@@ -404,16 +404,22 @@ ulong board_get_usable_ram_top(ulong total_size)
  */
 int ft_system_setup(void *blob, bd_t *bd)
 {
-	const char *gpu_path =
-#if defined(CONFIG_TEGRA124) || defined(CONFIG_TEGRA210)
-		"/gpu at 0,57000000";
-#else
-		NULL;
+	const char *gpu_compats[] = {
+#if defined(CONFIG_TEGRA124)
+		"nvidia,gk20a",
+#endif
+#if defined(CONFIG_TEGRA210)
+		"nvidia,gm20b",
 #endif
+	};
+	int i, ret;
 
 	/* Enable GPU node if GPU setup has been performed */
-	if (gpu_path != NULL)
-		return tegra_gpu_enable_node(blob, gpu_path);
+	for (i = 0; i < ARRAY_SIZE(gpu_compats); i++) {
+		ret = tegra_gpu_enable_node(blob, gpu_compats[i]);
+		if (ret)
+			return ret;
+	}
 
 	return 0;
 }
diff --git a/arch/arm/mach-tegra/gpu.c b/arch/arm/mach-tegra/gpu.c
index 0dbddd45d415..74b64a620c5f 100644
--- a/arch/arm/mach-tegra/gpu.c
+++ b/arch/arm/mach-tegra/gpu.c
@@ -33,16 +33,17 @@ void tegra_gpu_config(void)
 
 #if defined(CONFIG_OF_LIBFDT)
 
-int tegra_gpu_enable_node(void *blob, const char *gpupath)
+int tegra_gpu_enable_node(void *blob, const char *compat)
 {
 	int offset;
 
-	if (_configured) {
-		offset = fdt_path_offset(blob, gpupath);
-		if (offset > 0) {
-			fdt_status_okay(blob, offset);
-			debug("enabled GPU node %s\n", gpupath);
-		}
+	if (!_configured)
+		return 0;
+
+	offset = fdt_node_offset_by_compatible(blob, -1, compat);
+	while (offset != -FDT_ERR_NOTFOUND) {
+		fdt_status_okay(blob, offset);
+		offset = fdt_node_offset_by_compatible(blob, offset, compat);
 	}
 
 	return 0;
-- 
2.8.1

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

* [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value
  2016-04-12 17:17 [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value Stephen Warren
@ 2016-04-13  2:12 ` Alexandre Courbot
  2016-04-13 14:04 ` Thierry Reding
  1 sibling, 0 replies; 3+ messages in thread
From: Alexandre Courbot @ 2016-04-13  2:12 UTC (permalink / raw)
  To: u-boot

On 04/13/2016 02:17 AM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> In current Linux kernel Tegra DT files, 64-bit addresses are represented
> in unit addresses as a pair of comma-separated 32-bit values. Apparently
> this is no longer the correct representation for simple busses, and the
> unit address should be represented as a single 64-bit value. If this is
> changed in the DTs, arm/arm/mach-tegra/board2.c:ft_system_setup() will no
> longer be able to find and enable the GPU node, since it looks up the node
> by name.
>
> Fix that function to enable nodes based on their compatible value rather
> than their node name. This will work no matter what the node name is, i.e
> for DTs both before and after any rename operation.

Generally speaking it is also much better to do it that way. Thanks!

Acked-by: Alexandre Courbot <acourbot@nvidia.com>

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

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

* [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value
  2016-04-12 17:17 [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value Stephen Warren
  2016-04-13  2:12 ` Alexandre Courbot
@ 2016-04-13 14:04 ` Thierry Reding
  1 sibling, 0 replies; 3+ messages in thread
From: Thierry Reding @ 2016-04-13 14:04 UTC (permalink / raw)
  To: u-boot

On Tue, Apr 12, 2016 at 11:17:39AM -0600, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> In current Linux kernel Tegra DT files, 64-bit addresses are represented
> in unit addresses as a pair of comma-separated 32-bit values. Apparently
> this is no longer the correct representation for simple busses, and the
> unit address should be represented as a single 64-bit value. If this is
> changed in the DTs, arm/arm/mach-tegra/board2.c:ft_system_setup() will no
> longer be able to find and enable the GPU node, since it looks up the node
> by name.
> 
> Fix that function to enable nodes based on their compatible value rather
> than their node name. This will work no matter what the node name is, i.e
> for DTs both before and after any rename operation.
> 
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Alexandre Courbot <acourbot@nvidia.com>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
>  arch/arm/include/asm/arch-tegra/gpu.h |  2 +-
>  arch/arm/mach-tegra/board2.c          | 20 +++++++++++++-------
>  arch/arm/mach-tegra/gpu.c             | 15 ++++++++-------
>  3 files changed, 22 insertions(+), 15 deletions(-)
> 
> diff --git a/arch/arm/include/asm/arch-tegra/gpu.h b/arch/arm/include/asm/arch-tegra/gpu.h
> index 4423386f2805..6be9f6157b36 100644
> --- a/arch/arm/include/asm/arch-tegra/gpu.h
> +++ b/arch/arm/include/asm/arch-tegra/gpu.h
> @@ -26,7 +26,7 @@ int tegra_gpu_enable_node(void *blob, const char *gpupath);
>  
>  #else /* CONFIG_OF_LIBFDT */
>  
> -static inline int tegra_gpu_enable_node(void *blob, const char *gpupath)
> +static inline int tegra_gpu_enable_node(void *blob, const char *compat)
>  {
>  	return 0;
>  }
> diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c
> index ac274e17e8bd..141d6e1cb555 100644
> --- a/arch/arm/mach-tegra/board2.c
> +++ b/arch/arm/mach-tegra/board2.c
> @@ -404,16 +404,22 @@ ulong board_get_usable_ram_top(ulong total_size)
>   */
>  int ft_system_setup(void *blob, bd_t *bd)
>  {
> -	const char *gpu_path =
> -#if defined(CONFIG_TEGRA124) || defined(CONFIG_TEGRA210)
> -		"/gpu at 0,57000000";
> -#else
> -		NULL;
> +	const char *gpu_compats[] = {
> +#if defined(CONFIG_TEGRA124)
> +		"nvidia,gk20a",
> +#endif
> +#if defined(CONFIG_TEGRA210)
> +		"nvidia,gm20b",
>  #endif
> +	};
> +	int i, ret;

Perhaps unsigned int for i, but meh...

Reviewed-by: Thierry Reding <treding@nvidia.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160413/ad8d4f1e/attachment.sig>

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

end of thread, other threads:[~2016-04-13 14:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-12 17:17 [U-Boot] [PATCH] ARM: tegra: enable GPU node by compatible value Stephen Warren
2016-04-13  2:12 ` Alexandre Courbot
2016-04-13 14:04 ` 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.