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