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