ARM: tegra: enable GPU node by compatible value
Subsystems (3)
PATCH 1/1 ARM: tegra: enable GPU node by compatible value
From: Stephen Warren <[email protected]>
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.
--- 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(-)
arch/arm/include/asm/arch-tegra/gpu.h +1 -1
@@ -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 ; }
arch/arm/mach-tegra/board2.c +13 -7
@@ -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 ; }
arch/arm/mach-tegra/gpu.c +8 -7
@@ -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 ;
Signature · 1 line
2.8.1
PATCH 1/1 ARM: tegra: enable GPU node by compatible value
Quoted 10 lines · Stephen Warren
From: Stephen Warren <[email protected]>
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.
Quoted 3 lines
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!
-----------------------------------------------------------------------------------
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.
-----------------------------------------------------------------------------------
PATCH 1/1 ARM: tegra: enable GPU node by compatible value
In reply to Stephen WarrenQuoted 48 lines · Stephen Warren
From: Stephen Warren <[email protected]>
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 <[email protected]>Cc Alexandre Courbot <[email protected]>Signed-off-by Stephen Warren <[email protected]>--- 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(-)arch/arm/include/asm/arch-tegra/gpu.h +1
-1@@ -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 ; }arch/arm/mach-tegra/board2.c +0
-4@@ -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
arch/arm/mach-tegra/board2.c ulong board_get_usable_ram_top(ulong total_size) · line 415
Quoted 10 lines
arch/arm/mach-tegra/board2.c +8
-1-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...
-------------- 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>