Module Name:    src
Committed By:   jakllsch
Date:           Sat Aug 29 19:06:18 UTC 2020

Modified Files:
        src/sys/arch/arm/nvidia: files.tegra tegra_xusb.c
        src/sys/arch/evbarm/conf: mk.generic
Removed Files:
        src/sys/arch/arm/nvidia: tegra_xusb-fw.mk

Log Message:
tegra_xusb: fix xusb static firmware build

To work around objcopy and ld now being unable to create a EABI5 object
from a binary, use the assembler directive .incbin in inline assembly
to pull in the firmware blob.

This also probably makes TEGRA210_XUSB_BIN_STATIC actually work.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/arch/arm/nvidia/files.tegra
cvs rdiff -u -r1.2 -r0 src/sys/arch/arm/nvidia/tegra_xusb-fw.mk
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_xusb.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/evbarm/conf/mk.generic

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/nvidia/files.tegra
diff -u src/sys/arch/arm/nvidia/files.tegra:1.51 src/sys/arch/arm/nvidia/files.tegra:1.52
--- src/sys/arch/arm/nvidia/files.tegra:1.51	Wed Jul  8 22:28:21 2020
+++ src/sys/arch/arm/nvidia/files.tegra	Sat Aug 29 19:06:17 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.tegra,v 1.51 2020/07/08 22:28:21 uwe Exp $
+#	$NetBSD: files.tegra,v 1.52 2020/08/29 19:06:17 jakllsch Exp $
 #
 # Configuration info for NVIDIA Tegra ARM Peripherals
 #
@@ -108,6 +108,8 @@ file	arch/arm/nvidia/tegra_ehci.c		tegra
 attach	xhci at fdt with tegra_xusb : firmload
 file	arch/arm/nvidia/tegra_xusb.c		tegra_xusb
 defflag	opt_tegra.h				TEGRA_XUSB_DEBUG
+defflag	opt_tegra.h				TEGRA124_XUSB_BIN_STATIC
+defflag	opt_tegra.h				TEGRA210_XUSB_BIN_STATIC
 
 # SDMMC
 attach	sdhc at fdt with tegra_sdhc

Index: src/sys/arch/arm/nvidia/tegra_xusb.c
diff -u src/sys/arch/arm/nvidia/tegra_xusb.c:1.19 src/sys/arch/arm/nvidia/tegra_xusb.c:1.20
--- src/sys/arch/arm/nvidia/tegra_xusb.c:1.19	Sun Oct 13 06:11:31 2019
+++ src/sys/arch/arm/nvidia/tegra_xusb.c	Sat Aug 29 19:06:17 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_xusb.c,v 1.19 2019/10/13 06:11:31 skrll Exp $ */
+/* $NetBSD: tegra_xusb.c,v 1.20 2020/08/29 19:06:17 jakllsch Exp $ */
 
 /*
  * Copyright (c) 2016 Jonathan A. Kollasch
@@ -30,7 +30,7 @@
 #include "opt_tegra.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_xusb.c,v 1.19 2019/10/13 06:11:31 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_xusb.c,v 1.20 2020/08/29 19:06:17 jakllsch Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -74,13 +74,29 @@ static void	tegra_xusb_mountroot(device_
 static int	tegra_xusb_intr_mbox(void *);
 
 #ifdef TEGRA124_XUSB_BIN_STATIC
-extern const char _binary_tegra124_xusb_bin_size[];
 extern const char _binary_tegra124_xusb_bin_start[];
+extern const char _binary_tegra124_xusb_bin_end[];
+__asm__(
+".section \".rodata\"\n"
+"_binary_tegra124_xusb_bin_start:\n"
+".incbin \"../external/nvidia-firmware/tegra/dist/tegra124/xusb.bin\"\n"
+".size _binary_tegra124_xusb_bin_start, . - _binary_tegra124_xusb_bin_start\n"
+"_binary_tegra124_xusb_bin_end:\n"
+".previous\n"
+);
 #endif
 
 #ifdef TEGRA210_XUSB_BIN_STATIC
-extern const char _binary_tegra210_xusb_bin_size[];
 extern const char _binary_tegra210_xusb_bin_start[];
+extern const char _binary_tegra210_xusb_bin_end[];
+__asm__(
+".section \".rodata\"\n"
+"_binary_tegra210_xusb_bin_start:\n"
+".incbin \"../external/nvidia-firmware/tegra/dist/tegra210/xusb.bin\"\n"
+".size _binary_tegra210_xusb_bin_start, . - _binary_tegra210_xusb_bin_start\n"
+"_binary_tegra210_xusb_bin_end:\n"
+".previous\n"
+);
 #endif
 
 enum xusb_type {
@@ -729,7 +745,8 @@ tegra_xusb_open_fw(struct tegra_xusb_sof
 	switch (psc->sc_txd->txd_type) {
 	case XUSB_T124:
 #if defined(TEGRA124_XUSB_BIN_STATIC)
-		firmware_size = (uintptr_t)&_binary_tegra124_xusb_bin_size;
+		firmware_size = (uintptr_t)&_binary_tegra124_xusb_bin_end
+		    - (uintptr_t)&_binary_tegra124_xusb_bin_start;
 		fw_static = __UNCONST(_binary_tegra124_xusb_bin_start);
 #else
 		fw_path = "nvidia/tegra124";
@@ -737,7 +754,8 @@ tegra_xusb_open_fw(struct tegra_xusb_sof
 		break;
 	case XUSB_T210:
 #if defined(TEGRA210_XUSB_BIN_STATIC)
-		firmware_size = (uintptr_t)&_binary_tegra210_xusb_bin_size;
+		firmware_size = (uintptr_t)&_binary_tegra210_xusb_bin_end
+		    - (uintptr_t)&_binary_tegra210_xusb_bin_start;
 		fw_static = __UNCONST(_binary_tegra210_xusb_bin_start);
 #else
 		fw_path = "nvidia/tegra210";

Index: src/sys/arch/evbarm/conf/mk.generic
diff -u src/sys/arch/evbarm/conf/mk.generic:1.9 src/sys/arch/evbarm/conf/mk.generic:1.10
--- src/sys/arch/evbarm/conf/mk.generic:1.9	Mon Dec 16 11:00:30 2019
+++ src/sys/arch/evbarm/conf/mk.generic	Sat Aug 29 19:06:18 2020
@@ -1,6 +1,4 @@
-#	$NetBSD: mk.generic,v 1.9 2019/12/16 11:00:30 skrll Exp $
-
-.include "$S/arch/arm/nvidia/tegra_xusb-fw.mk"
+#	$NetBSD: mk.generic,v 1.10 2020/08/29 19:06:18 jakllsch Exp $
 
 .if !empty(MACHINE_ARCH:M*eb)
 EXTRA_LINKFLAGS+=	--be8

Reply via email to