tegra: add new target
New target introduces initial support for NVIDIA Tegra SoC based devices. It focuses on Tegra 2 CPUs, for successors supporting NEON instruction set the target should be split in two subtargets. This initial commit doesn't create any device image, it's groundwork for further additions. Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
This commit is contained in:
		
				
					committed by
					
						
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			
						parent
						
							de3eb0d8a0
						
					
				
				
					commit
					42f96ed941
				
			
							
								
								
									
										29
									
								
								target/linux/tegra/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								target/linux/tegra/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2017-2019 Tomasz Maciej Nowak <tomek_n@o2.pl>
 | 
			
		||||
#
 | 
			
		||||
# This is free software, licensed under the GNU General Public License v2.
 | 
			
		||||
# See /LICENSE for more information.
 | 
			
		||||
#
 | 
			
		||||
include $(TOPDIR)/rules.mk
 | 
			
		||||
 | 
			
		||||
ARCH := arm
 | 
			
		||||
BOARD := tegra
 | 
			
		||||
BOARDNAME := NVIDIA Tegra
 | 
			
		||||
FEATURES := audio boot-part display ext4 fpu gpio pci pcie rootfs-part rtc squashfs usb
 | 
			
		||||
CPU_TYPE := cortex-a9
 | 
			
		||||
CPU_SUBTYPE := vfpv3
 | 
			
		||||
MAINTAINER := Tomasz Maciej Nowak <tomek_n@o2.pl>
 | 
			
		||||
 | 
			
		||||
KERNEL_PATCHVER := 4.14
 | 
			
		||||
 | 
			
		||||
include $(INCLUDE_DIR)/target.mk
 | 
			
		||||
 | 
			
		||||
KERNELNAME := zImage dtbs
 | 
			
		||||
 | 
			
		||||
DEFAULT_PACKAGES += e2fsprogs mkf2fs partx-utils
 | 
			
		||||
 | 
			
		||||
define Target/Description
 | 
			
		||||
	Build firmware image for NVIDIA Tegra SoC devices.
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(eval $(call BuildTarget))
 | 
			
		||||
							
								
								
									
										4
									
								
								target/linux/tegra/base-files/etc/inittab
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								target/linux/tegra/base-files/etc/inittab
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
::sysinit:/etc/init.d/rcS S boot
 | 
			
		||||
::shutdown:/etc/init.d/rcS K shutdown
 | 
			
		||||
::askconsole:/usr/libexec/login.sh
 | 
			
		||||
tty1::askfirst:/usr/libexec/login.sh
 | 
			
		||||
							
								
								
									
										22
									
								
								target/linux/tegra/base-files/lib/preinit/79_move_config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								target/linux/tegra/base-files/lib/preinit/79_move_config
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
move_config() {
 | 
			
		||||
	local partdev
 | 
			
		||||
 | 
			
		||||
	. /lib/upgrade/common.sh
 | 
			
		||||
 | 
			
		||||
	if export_bootdevice && export_partdevice partdev 1; then
 | 
			
		||||
		mkdir -p /boot
 | 
			
		||||
		if mount -o ro,noatime "/dev/$partdev" /boot; then
 | 
			
		||||
			if [ -f /boot/sysupgrade.tgz ]; then
 | 
			
		||||
				mount /boot -o remount,rw,noatime
 | 
			
		||||
				mv -f /boot/sysupgrade.tgz /
 | 
			
		||||
			fi
 | 
			
		||||
			umount /boot
 | 
			
		||||
			rm -fR /boot
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
boot_hook_add preinit_mount_root move_config
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								target/linux/tegra/base-files/lib/upgrade/platform.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								target/linux/tegra/base-files/lib/upgrade/platform.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
REQUIRE_IMAGE_METADATA=1
 | 
			
		||||
 | 
			
		||||
get_magic_at() {
 | 
			
		||||
	local pos="$2"
 | 
			
		||||
	get_image "$1" | dd bs=1 count=2 skip="$pos" 2>/dev/null | hexdump -v -n 2 -e '1/1 "%02x"'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platform_check_image() {
 | 
			
		||||
	local diskdev partdev diff
 | 
			
		||||
 | 
			
		||||
	[ "$#" -gt 1 ] && return 1
 | 
			
		||||
 | 
			
		||||
	case "$(get_magic_at "$1" 510)" in
 | 
			
		||||
		55aa) ;;
 | 
			
		||||
		*)
 | 
			
		||||
			echo "Failed to verify MBR boot signature."
 | 
			
		||||
			return 1
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	export_bootdevice && export_partdevice diskdev 0 || {
 | 
			
		||||
		echo "Unable to determine upgrade device"
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	get_partitions "/dev/$diskdev" bootdisk
 | 
			
		||||
 | 
			
		||||
	#extract the boot sector from the image
 | 
			
		||||
	get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
 | 
			
		||||
 | 
			
		||||
	get_partitions /tmp/image.bs image
 | 
			
		||||
 | 
			
		||||
	#compare tables
 | 
			
		||||
	diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | 
			
		||||
 | 
			
		||||
	rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
 | 
			
		||||
 | 
			
		||||
	if [ -n "$diff" ]; then
 | 
			
		||||
		echo "Partition layout has changed. Full image will be written."
 | 
			
		||||
		ask_bool 0 "Abort" && exit 1
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platform_copy_config() {
 | 
			
		||||
	local partdev
 | 
			
		||||
 | 
			
		||||
	if export_partdevice partdev 1; then
 | 
			
		||||
		mount -o rw,noatime "/dev/$partdev" /mnt
 | 
			
		||||
		cp -af "$CONF_TAR" /mnt/
 | 
			
		||||
		umount /mnt
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platform_do_upgrade() {
 | 
			
		||||
	local diskdev partdev diff
 | 
			
		||||
 | 
			
		||||
	export_bootdevice && export_partdevice diskdev 0 || {
 | 
			
		||||
		echo "Unable to determine upgrade device"
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sync
 | 
			
		||||
 | 
			
		||||
	if [ "$SAVE_PARTITIONS" = "1" ]; then
 | 
			
		||||
		get_partitions "/dev/$diskdev" bootdisk
 | 
			
		||||
 | 
			
		||||
		#extract the boot sector from the image
 | 
			
		||||
		get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
 | 
			
		||||
 | 
			
		||||
		get_partitions /tmp/image.bs image
 | 
			
		||||
 | 
			
		||||
		#compare tables
 | 
			
		||||
		diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | 
			
		||||
	else
 | 
			
		||||
		diff=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if [ -n "$diff" ]; then
 | 
			
		||||
		get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
 | 
			
		||||
 | 
			
		||||
		# Separate removal and addtion is necessary; otherwise, partition 1
 | 
			
		||||
		# will be missing if it overlaps with the old partition 2
 | 
			
		||||
		partx -d - "/dev/$diskdev"
 | 
			
		||||
		partx -a - "/dev/$diskdev"
 | 
			
		||||
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	#iterate over each partition from the image and write it to the boot disk
 | 
			
		||||
	while read part start size; do
 | 
			
		||||
		if export_partdevice partdev $part; then
 | 
			
		||||
			echo "Writing image to /dev/$partdev..."
 | 
			
		||||
			get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
 | 
			
		||||
		else
 | 
			
		||||
			echo "Unable to find partition $part device, skipped."
 | 
			
		||||
		fi
 | 
			
		||||
	done < /tmp/partmap.image
 | 
			
		||||
 | 
			
		||||
	#copy partition uuid
 | 
			
		||||
	echo "Writing new UUID to /dev/$diskdev..."
 | 
			
		||||
	get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										556
									
								
								target/linux/tegra/config-4.14
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										556
									
								
								target/linux/tegra/config-4.14
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,556 @@
 | 
			
		||||
CONFIG_AC97_BUS=y
 | 
			
		||||
# CONFIG_AHCI_TEGRA is not set
 | 
			
		||||
CONFIG_ALIGNMENT_TRAP=y
 | 
			
		||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
 | 
			
		||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
 | 
			
		||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
 | 
			
		||||
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 | 
			
		||||
CONFIG_ARCH_HAS_RESET_CONTROLLER=y
 | 
			
		||||
CONFIG_ARCH_HAS_SET_MEMORY=y
 | 
			
		||||
CONFIG_ARCH_HAS_SG_CHAIN=y
 | 
			
		||||
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 | 
			
		||||
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
 | 
			
		||||
CONFIG_ARCH_HAS_TICK_BROADCAST=y
 | 
			
		||||
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 | 
			
		||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 | 
			
		||||
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 | 
			
		||||
CONFIG_ARCH_MULTIPLATFORM=y
 | 
			
		||||
# CONFIG_ARCH_MULTI_CPU_AUTO is not set
 | 
			
		||||
CONFIG_ARCH_MULTI_V6_V7=y
 | 
			
		||||
CONFIG_ARCH_MULTI_V7=y
 | 
			
		||||
CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y
 | 
			
		||||
CONFIG_ARCH_NR_GPIO=1024
 | 
			
		||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
 | 
			
		||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
 | 
			
		||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 | 
			
		||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
 | 
			
		||||
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 | 
			
		||||
CONFIG_ARCH_SUPPORTS_FIRMWARE=y
 | 
			
		||||
CONFIG_ARCH_SUPPORTS_TRUSTED_FOUNDATIONS=y
 | 
			
		||||
CONFIG_ARCH_SUPPORTS_UPROBES=y
 | 
			
		||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
 | 
			
		||||
CONFIG_ARCH_TEGRA=y
 | 
			
		||||
# CONFIG_ARCH_TEGRA_114_SOC is not set
 | 
			
		||||
# CONFIG_ARCH_TEGRA_124_SOC is not set
 | 
			
		||||
CONFIG_ARCH_TEGRA_2x_SOC=y
 | 
			
		||||
# CONFIG_ARCH_TEGRA_3x_SOC is not set
 | 
			
		||||
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 | 
			
		||||
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
 | 
			
		||||
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 | 
			
		||||
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 | 
			
		||||
CONFIG_ARM=y
 | 
			
		||||
CONFIG_ARM_AMBA=y
 | 
			
		||||
CONFIG_ARM_ARCH_TIMER=y
 | 
			
		||||
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
 | 
			
		||||
CONFIG_ARM_CPU_SUSPEND=y
 | 
			
		||||
CONFIG_ARM_CRYPTO=y
 | 
			
		||||
CONFIG_ARM_ERRATA_720789=y
 | 
			
		||||
CONFIG_ARM_ERRATA_754327=y
 | 
			
		||||
CONFIG_ARM_ERRATA_764369=y
 | 
			
		||||
CONFIG_ARM_GIC=y
 | 
			
		||||
CONFIG_ARM_HAS_SG_CHAIN=y
 | 
			
		||||
CONFIG_ARM_HEAVY_MB=y
 | 
			
		||||
CONFIG_ARM_L1_CACHE_SHIFT=6
 | 
			
		||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
 | 
			
		||||
# CONFIG_ARM_LPAE is not set
 | 
			
		||||
CONFIG_ARM_PATCH_IDIV=y
 | 
			
		||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
 | 
			
		||||
# CONFIG_ARM_PL172_MPMC is not set
 | 
			
		||||
# CONFIG_ARM_SMMU is not set
 | 
			
		||||
# CONFIG_ARM_SP805_WATCHDOG is not set
 | 
			
		||||
CONFIG_ARM_TEGRA20_CPUFREQ=y
 | 
			
		||||
CONFIG_ARM_THUMB=y
 | 
			
		||||
CONFIG_ARM_THUMBEE=y
 | 
			
		||||
CONFIG_ARM_VIRT_EXT=y
 | 
			
		||||
CONFIG_ASN1=y
 | 
			
		||||
CONFIG_ATA=y
 | 
			
		||||
CONFIG_ATAGS=y
 | 
			
		||||
CONFIG_AUTO_ZRELADDR=y
 | 
			
		||||
CONFIG_BLK_DEV_BSG=y
 | 
			
		||||
CONFIG_BLK_DEV_LOOP=y
 | 
			
		||||
CONFIG_BLK_MQ_PCI=y
 | 
			
		||||
CONFIG_BLK_SCSI_REQUEST=y
 | 
			
		||||
CONFIG_BOUNCE=y
 | 
			
		||||
CONFIG_CACHE_L2X0=y
 | 
			
		||||
CONFIG_CLKDEV_LOOKUP=y
 | 
			
		||||
CONFIG_CLKSRC_MMIO=y
 | 
			
		||||
CONFIG_CLONE_BACKWARDS=y
 | 
			
		||||
CONFIG_CLZ_TAB=y
 | 
			
		||||
CONFIG_CMA=y
 | 
			
		||||
CONFIG_CMA_ALIGNMENT=8
 | 
			
		||||
CONFIG_CMA_AREAS=7
 | 
			
		||||
# CONFIG_CMA_DEBUG is not set
 | 
			
		||||
# CONFIG_CMA_DEBUGFS is not set
 | 
			
		||||
CONFIG_CMA_SIZE_MBYTES=16
 | 
			
		||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
 | 
			
		||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
 | 
			
		||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
 | 
			
		||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
 | 
			
		||||
CONFIG_COMMON_CLK=y
 | 
			
		||||
# CONFIG_CPUFREQ_DT is not set
 | 
			
		||||
CONFIG_CPU_32v6K=y
 | 
			
		||||
CONFIG_CPU_32v7=y
 | 
			
		||||
CONFIG_CPU_ABRT_EV7=y
 | 
			
		||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
 | 
			
		||||
CONFIG_CPU_CACHE_V7=y
 | 
			
		||||
CONFIG_CPU_CACHE_VIPT=y
 | 
			
		||||
CONFIG_CPU_COPY_V6=y
 | 
			
		||||
CONFIG_CPU_CP15=y
 | 
			
		||||
CONFIG_CPU_CP15_MMU=y
 | 
			
		||||
CONFIG_CPU_FREQ=y
 | 
			
		||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 | 
			
		||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_COMMON=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
 | 
			
		||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
 | 
			
		||||
# CONFIG_CPU_FREQ_STAT is not set
 | 
			
		||||
CONFIG_CPU_HAS_ASID=y
 | 
			
		||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
 | 
			
		||||
# CONFIG_CPU_ICACHE_DISABLE is not set
 | 
			
		||||
CONFIG_CPU_IDLE=y
 | 
			
		||||
CONFIG_CPU_IDLE_GOV_LADDER=y
 | 
			
		||||
CONFIG_CPU_PABRT_V7=y
 | 
			
		||||
CONFIG_CPU_PM=y
 | 
			
		||||
CONFIG_CPU_RMAP=y
 | 
			
		||||
CONFIG_CPU_SPECTRE=y
 | 
			
		||||
CONFIG_CPU_THUMB_CAPABLE=y
 | 
			
		||||
CONFIG_CPU_TLB_V7=y
 | 
			
		||||
CONFIG_CPU_V7=y
 | 
			
		||||
CONFIG_CRC16=y
 | 
			
		||||
# CONFIG_CRC32_SARWATE is not set
 | 
			
		||||
CONFIG_CRC32_SLICEBY8=y
 | 
			
		||||
CONFIG_CROSS_MEMORY_ATTACH=y
 | 
			
		||||
CONFIG_CRYPTO_ACOMP2=y
 | 
			
		||||
CONFIG_CRYPTO_AEAD=y
 | 
			
		||||
CONFIG_CRYPTO_AEAD2=y
 | 
			
		||||
CONFIG_CRYPTO_AES_ARM=y
 | 
			
		||||
CONFIG_CRYPTO_AKCIPHER=y
 | 
			
		||||
CONFIG_CRYPTO_AKCIPHER2=y
 | 
			
		||||
CONFIG_CRYPTO_CRC32=y
 | 
			
		||||
CONFIG_CRYPTO_CRC32C=y
 | 
			
		||||
CONFIG_CRYPTO_CRYPTD=y
 | 
			
		||||
CONFIG_CRYPTO_DEFLATE=y
 | 
			
		||||
CONFIG_CRYPTO_DRBG=y
 | 
			
		||||
CONFIG_CRYPTO_DRBG_HMAC=y
 | 
			
		||||
CONFIG_CRYPTO_DRBG_MENU=y
 | 
			
		||||
CONFIG_CRYPTO_ECHAINIV=y
 | 
			
		||||
CONFIG_CRYPTO_HASH=y
 | 
			
		||||
CONFIG_CRYPTO_HASH2=y
 | 
			
		||||
CONFIG_CRYPTO_HMAC=y
 | 
			
		||||
CONFIG_CRYPTO_JITTERENTROPY=y
 | 
			
		||||
CONFIG_CRYPTO_LZ4=y
 | 
			
		||||
CONFIG_CRYPTO_LZ4HC=y
 | 
			
		||||
CONFIG_CRYPTO_LZO=y
 | 
			
		||||
CONFIG_CRYPTO_MANAGER=y
 | 
			
		||||
CONFIG_CRYPTO_MANAGER2=y
 | 
			
		||||
CONFIG_CRYPTO_NULL=y
 | 
			
		||||
CONFIG_CRYPTO_NULL2=y
 | 
			
		||||
CONFIG_CRYPTO_RNG=y
 | 
			
		||||
CONFIG_CRYPTO_RNG2=y
 | 
			
		||||
CONFIG_CRYPTO_RNG_DEFAULT=y
 | 
			
		||||
CONFIG_CRYPTO_RSA=y
 | 
			
		||||
CONFIG_CRYPTO_SEQIV=y
 | 
			
		||||
CONFIG_CRYPTO_SHA1=y
 | 
			
		||||
CONFIG_CRYPTO_SHA1_ARM=y
 | 
			
		||||
CONFIG_CRYPTO_SHA256=y
 | 
			
		||||
CONFIG_CRYPTO_SHA256_ARM=y
 | 
			
		||||
CONFIG_CRYPTO_SHA512_ARM=y
 | 
			
		||||
CONFIG_CRYPTO_TWOFISH=y
 | 
			
		||||
CONFIG_CRYPTO_TWOFISH_COMMON=y
 | 
			
		||||
CONFIG_CRYPTO_WORKQUEUE=y
 | 
			
		||||
CONFIG_DCACHE_WORD_ACCESS=y
 | 
			
		||||
CONFIG_DEBUG_ALIGN_RODATA=y
 | 
			
		||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
 | 
			
		||||
# CONFIG_DEBUG_UART_8250 is not set
 | 
			
		||||
# CONFIG_DEBUG_USER is not set
 | 
			
		||||
# CONFIG_DEVPORT is not set
 | 
			
		||||
CONFIG_DMADEVICES=y
 | 
			
		||||
CONFIG_DMA_CMA=y
 | 
			
		||||
CONFIG_DMA_ENGINE=y
 | 
			
		||||
CONFIG_DMA_OF=y
 | 
			
		||||
CONFIG_DMA_SHARED_BUFFER=y
 | 
			
		||||
CONFIG_DNOTIFY=y
 | 
			
		||||
CONFIG_DRM=y
 | 
			
		||||
CONFIG_DRM_BRIDGE=y
 | 
			
		||||
CONFIG_DRM_FBDEV_EMULATION=y
 | 
			
		||||
CONFIG_DRM_FBDEV_OVERALLOC=100
 | 
			
		||||
CONFIG_DRM_KMS_FB_HELPER=y
 | 
			
		||||
CONFIG_DRM_KMS_HELPER=y
 | 
			
		||||
CONFIG_DRM_MIPI_DSI=y
 | 
			
		||||
CONFIG_DRM_PANEL=y
 | 
			
		||||
CONFIG_DRM_PANEL_BRIDGE=y
 | 
			
		||||
CONFIG_DRM_TEGRA=y
 | 
			
		||||
# CONFIG_DRM_TEGRA_DEBUG is not set
 | 
			
		||||
# CONFIG_DRM_TEGRA_STAGING is not set
 | 
			
		||||
CONFIG_DTC=y
 | 
			
		||||
CONFIG_EDAC_ATOMIC_SCRUB=y
 | 
			
		||||
CONFIG_EDAC_SUPPORT=y
 | 
			
		||||
CONFIG_ENABLE_MUST_CHECK=y
 | 
			
		||||
CONFIG_EXT4_FS=y
 | 
			
		||||
CONFIG_EXTCON=y
 | 
			
		||||
# CONFIG_F2FS_CHECK_FS is not set
 | 
			
		||||
CONFIG_F2FS_FS=y
 | 
			
		||||
# CONFIG_F2FS_FS_SECURITY is not set
 | 
			
		||||
CONFIG_F2FS_FS_XATTR=y
 | 
			
		||||
CONFIG_F2FS_STAT_FS=y
 | 
			
		||||
CONFIG_FB=y
 | 
			
		||||
CONFIG_FB_CFB_COPYAREA=y
 | 
			
		||||
CONFIG_FB_CFB_FILLRECT=y
 | 
			
		||||
CONFIG_FB_CFB_IMAGEBLIT=y
 | 
			
		||||
CONFIG_FB_CMDLINE=y
 | 
			
		||||
CONFIG_FB_DEFERRED_IO=y
 | 
			
		||||
# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set
 | 
			
		||||
CONFIG_FB_SYS_COPYAREA=y
 | 
			
		||||
CONFIG_FB_SYS_FILLRECT=y
 | 
			
		||||
CONFIG_FB_SYS_FOPS=y
 | 
			
		||||
CONFIG_FB_SYS_IMAGEBLIT=y
 | 
			
		||||
CONFIG_FIX_EARLYCON_MEM=y
 | 
			
		||||
CONFIG_FRAME_POINTER=y
 | 
			
		||||
CONFIG_FREEZER=y
 | 
			
		||||
CONFIG_FS_MBCACHE=y
 | 
			
		||||
CONFIG_GENERIC_ALLOCATOR=y
 | 
			
		||||
CONFIG_GENERIC_ARCH_TOPOLOGY=y
 | 
			
		||||
CONFIG_GENERIC_BUG=y
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS=y
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
 | 
			
		||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
 | 
			
		||||
CONFIG_GENERIC_EARLY_IOREMAP=y
 | 
			
		||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
 | 
			
		||||
CONFIG_GENERIC_IO=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_MIGRATION=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_SHOW=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
 | 
			
		||||
CONFIG_GENERIC_MSI_IRQ=y
 | 
			
		||||
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
 | 
			
		||||
CONFIG_GENERIC_PCI_IOMAP=y
 | 
			
		||||
CONFIG_GENERIC_PHY=y
 | 
			
		||||
CONFIG_GENERIC_PINCONF=y
 | 
			
		||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
 | 
			
		||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
 | 
			
		||||
CONFIG_GENERIC_SCHED_CLOCK=y
 | 
			
		||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
 | 
			
		||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
 | 
			
		||||
CONFIG_GENERIC_STRNLEN_USER=y
 | 
			
		||||
CONFIG_GENERIC_TIME_VSYSCALL=y
 | 
			
		||||
CONFIG_GLOB=y
 | 
			
		||||
CONFIG_GPIOLIB=y
 | 
			
		||||
CONFIG_GPIO_SYSFS=y
 | 
			
		||||
CONFIG_GPIO_TEGRA=y
 | 
			
		||||
# CONFIG_GRO_CELLS is not set
 | 
			
		||||
CONFIG_HANDLE_DOMAIN_IRQ=y
 | 
			
		||||
CONFIG_HARDEN_BRANCH_PREDICTOR=y
 | 
			
		||||
CONFIG_HARDIRQS_SW_RESEND=y
 | 
			
		||||
CONFIG_HAS_DMA=y
 | 
			
		||||
CONFIG_HAS_IOMEM=y
 | 
			
		||||
CONFIG_HAS_IOPORT_MAP=y
 | 
			
		||||
# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
 | 
			
		||||
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
 | 
			
		||||
CONFIG_HAVE_ARCH_BITREVERSE=y
 | 
			
		||||
CONFIG_HAVE_ARCH_JUMP_LABEL=y
 | 
			
		||||
CONFIG_HAVE_ARCH_KGDB=y
 | 
			
		||||
CONFIG_HAVE_ARCH_PFN_VALID=y
 | 
			
		||||
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 | 
			
		||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
 | 
			
		||||
CONFIG_HAVE_ARM_ARCH_TIMER=y
 | 
			
		||||
CONFIG_HAVE_ARM_SCU=y
 | 
			
		||||
CONFIG_HAVE_ARM_SMCCC=y
 | 
			
		||||
CONFIG_HAVE_ARM_TWD=y
 | 
			
		||||
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 | 
			
		||||
CONFIG_HAVE_CC_STACKPROTECTOR=y
 | 
			
		||||
CONFIG_HAVE_CLK=y
 | 
			
		||||
CONFIG_HAVE_CLK_PREPARE=y
 | 
			
		||||
CONFIG_HAVE_CONTEXT_TRACKING=y
 | 
			
		||||
CONFIG_HAVE_C_RECORDMCOUNT=y
 | 
			
		||||
CONFIG_HAVE_DEBUG_KMEMLEAK=y
 | 
			
		||||
CONFIG_HAVE_DMA_API_DEBUG=y
 | 
			
		||||
CONFIG_HAVE_DMA_CONTIGUOUS=y
 | 
			
		||||
CONFIG_HAVE_DYNAMIC_FTRACE=y
 | 
			
		||||
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
 | 
			
		||||
CONFIG_HAVE_EBPF_JIT=y
 | 
			
		||||
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
 | 
			
		||||
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 | 
			
		||||
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
 | 
			
		||||
CONFIG_HAVE_FUNCTION_TRACER=y
 | 
			
		||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
 | 
			
		||||
CONFIG_HAVE_IDE=y
 | 
			
		||||
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 | 
			
		||||
CONFIG_HAVE_MEMBLOCK=y
 | 
			
		||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
 | 
			
		||||
CONFIG_HAVE_NET_DSA=y
 | 
			
		||||
CONFIG_HAVE_OPROFILE=y
 | 
			
		||||
CONFIG_HAVE_OPTPROBES=y
 | 
			
		||||
CONFIG_HAVE_PERF_EVENTS=y
 | 
			
		||||
CONFIG_HAVE_PERF_REGS=y
 | 
			
		||||
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
 | 
			
		||||
CONFIG_HAVE_PROC_CPU=y
 | 
			
		||||
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 | 
			
		||||
CONFIG_HAVE_SMP=y
 | 
			
		||||
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
 | 
			
		||||
CONFIG_HAVE_UID16=y
 | 
			
		||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 | 
			
		||||
CONFIG_HDMI=y
 | 
			
		||||
CONFIG_HID=y
 | 
			
		||||
CONFIG_HIDRAW=y
 | 
			
		||||
CONFIG_HID_GENERIC=y
 | 
			
		||||
CONFIG_HIGHMEM=y
 | 
			
		||||
CONFIG_HIGHPTE=y
 | 
			
		||||
CONFIG_HOTPLUG_CPU=y
 | 
			
		||||
CONFIG_HWMON=y
 | 
			
		||||
CONFIG_HZ_FIXED=0
 | 
			
		||||
CONFIG_HZ_PERIODIC=y
 | 
			
		||||
CONFIG_I2C=y
 | 
			
		||||
CONFIG_I2C_ALGOBIT=y
 | 
			
		||||
CONFIG_I2C_BOARDINFO=y
 | 
			
		||||
CONFIG_I2C_COMPAT=y
 | 
			
		||||
CONFIG_I2C_TEGRA=y
 | 
			
		||||
CONFIG_INITRAMFS_SOURCE=""
 | 
			
		||||
CONFIG_INPUT=y
 | 
			
		||||
CONFIG_INPUT_KEYBOARD=y
 | 
			
		||||
CONFIG_IOMMU_API=y
 | 
			
		||||
CONFIG_IOMMU_HELPER=y
 | 
			
		||||
CONFIG_IOMMU_IOVA=y
 | 
			
		||||
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
 | 
			
		||||
# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set
 | 
			
		||||
CONFIG_IOMMU_SUPPORT=y
 | 
			
		||||
CONFIG_IRQCHIP=y
 | 
			
		||||
CONFIG_IRQ_DOMAIN=y
 | 
			
		||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
 | 
			
		||||
CONFIG_IRQ_FORCED_THREADING=y
 | 
			
		||||
CONFIG_IRQ_WORK=y
 | 
			
		||||
CONFIG_JBD2=y
 | 
			
		||||
CONFIG_KEYBOARD_ATKBD=y
 | 
			
		||||
CONFIG_LIBFDT=y
 | 
			
		||||
CONFIG_LOCK_SPIN_ON_OWNER=y
 | 
			
		||||
CONFIG_LZ4HC_COMPRESS=y
 | 
			
		||||
CONFIG_LZ4_COMPRESS=y
 | 
			
		||||
CONFIG_LZ4_DECOMPRESS=y
 | 
			
		||||
CONFIG_LZO_COMPRESS=y
 | 
			
		||||
CONFIG_LZO_DECOMPRESS=y
 | 
			
		||||
# CONFIG_MDIO_BUS is not set
 | 
			
		||||
CONFIG_MEMORY=y
 | 
			
		||||
CONFIG_MEMORY_ISOLATION=y
 | 
			
		||||
# CONFIG_MFD_NVEC is not set
 | 
			
		||||
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
 | 
			
		||||
CONFIG_MIGHT_HAVE_PCI=y
 | 
			
		||||
CONFIG_MIGRATION=y
 | 
			
		||||
CONFIG_MMC=y
 | 
			
		||||
CONFIG_MMC_BLOCK=y
 | 
			
		||||
CONFIG_MMC_SDHCI=y
 | 
			
		||||
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
 | 
			
		||||
# CONFIG_MMC_SDHCI_PCI is not set
 | 
			
		||||
CONFIG_MMC_SDHCI_PLTFM=y
 | 
			
		||||
CONFIG_MMC_SDHCI_TEGRA=y
 | 
			
		||||
# CONFIG_MMC_TIFM_SD is not set
 | 
			
		||||
CONFIG_MODULES_USE_ELF_REL=y
 | 
			
		||||
CONFIG_MPILIB=y
 | 
			
		||||
CONFIG_MTD_M25P80=y
 | 
			
		||||
CONFIG_MTD_SPI_NOR=y
 | 
			
		||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
 | 
			
		||||
CONFIG_MULTI_IRQ_HANDLER=y
 | 
			
		||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
 | 
			
		||||
CONFIG_NEED_DMA_MAP_STATE=y
 | 
			
		||||
# CONFIG_NEON is not set
 | 
			
		||||
CONFIG_NET_FLOW_LIMIT=y
 | 
			
		||||
CONFIG_NLS=y
 | 
			
		||||
CONFIG_NO_BOOTMEM=y
 | 
			
		||||
CONFIG_NR_CPUS=4
 | 
			
		||||
CONFIG_NVMEM=y
 | 
			
		||||
CONFIG_OF=y
 | 
			
		||||
CONFIG_OF_ADDRESS=y
 | 
			
		||||
CONFIG_OF_ADDRESS_PCI=y
 | 
			
		||||
CONFIG_OF_EARLY_FLATTREE=y
 | 
			
		||||
CONFIG_OF_FLATTREE=y
 | 
			
		||||
CONFIG_OF_GPIO=y
 | 
			
		||||
CONFIG_OF_IOMMU=y
 | 
			
		||||
CONFIG_OF_IRQ=y
 | 
			
		||||
CONFIG_OF_NET=y
 | 
			
		||||
CONFIG_OF_PCI=y
 | 
			
		||||
CONFIG_OF_PCI_IRQ=y
 | 
			
		||||
CONFIG_OF_RESERVED_MEM=y
 | 
			
		||||
CONFIG_OLD_SIGACTION=y
 | 
			
		||||
CONFIG_OLD_SIGSUSPEND3=y
 | 
			
		||||
CONFIG_OUTER_CACHE=y
 | 
			
		||||
CONFIG_OUTER_CACHE_SYNC=y
 | 
			
		||||
CONFIG_PADATA=y
 | 
			
		||||
CONFIG_PAGE_OFFSET=0xC0000000
 | 
			
		||||
CONFIG_PCI=y
 | 
			
		||||
CONFIG_PCIEAER=y
 | 
			
		||||
CONFIG_PCIEASPM=y
 | 
			
		||||
# CONFIG_PCIEASPM_DEBUG is not set
 | 
			
		||||
CONFIG_PCIEASPM_DEFAULT=y
 | 
			
		||||
# CONFIG_PCIEASPM_PERFORMANCE is not set
 | 
			
		||||
# CONFIG_PCIEASPM_POWERSAVE is not set
 | 
			
		||||
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
 | 
			
		||||
CONFIG_PCIEPORTBUS=y
 | 
			
		||||
CONFIG_PCIE_PME=y
 | 
			
		||||
CONFIG_PCI_DOMAINS=y
 | 
			
		||||
CONFIG_PCI_DOMAINS_GENERIC=y
 | 
			
		||||
CONFIG_PCI_MSI=y
 | 
			
		||||
CONFIG_PCI_MSI_IRQ_DOMAIN=y
 | 
			
		||||
CONFIG_PCI_TEGRA=y
 | 
			
		||||
CONFIG_PERF_USE_VMALLOC=y
 | 
			
		||||
CONFIG_PGTABLE_LEVELS=2
 | 
			
		||||
CONFIG_PHY_TEGRA_XUSB=y
 | 
			
		||||
CONFIG_PINCTRL=y
 | 
			
		||||
CONFIG_PINCTRL_TEGRA=y
 | 
			
		||||
CONFIG_PINCTRL_TEGRA20=y
 | 
			
		||||
CONFIG_PINCTRL_TEGRA_XUSB=y
 | 
			
		||||
# CONFIG_PL310_ERRATA_588369 is not set
 | 
			
		||||
CONFIG_PL310_ERRATA_727915=y
 | 
			
		||||
# CONFIG_PL310_ERRATA_753970 is not set
 | 
			
		||||
CONFIG_PL310_ERRATA_769419=y
 | 
			
		||||
CONFIG_PM=y
 | 
			
		||||
CONFIG_PM_CLK=y
 | 
			
		||||
# CONFIG_PM_DEBUG is not set
 | 
			
		||||
CONFIG_PM_OPP=y
 | 
			
		||||
CONFIG_PM_SLEEP=y
 | 
			
		||||
CONFIG_PM_SLEEP_SMP=y
 | 
			
		||||
CONFIG_POWER_RESET=y
 | 
			
		||||
CONFIG_POWER_RESET_GPIO=y
 | 
			
		||||
CONFIG_POWER_SUPPLY=y
 | 
			
		||||
CONFIG_PROC_PAGE_MONITOR=y
 | 
			
		||||
CONFIG_PWM=y
 | 
			
		||||
CONFIG_PWM_SYSFS=y
 | 
			
		||||
CONFIG_PWM_TEGRA=y
 | 
			
		||||
CONFIG_RAS=y
 | 
			
		||||
CONFIG_RATIONAL=y
 | 
			
		||||
CONFIG_RCU_CPU_STALL_TIMEOUT=21
 | 
			
		||||
# CONFIG_RCU_EXPERT is not set
 | 
			
		||||
CONFIG_RCU_NEED_SEGCBLIST=y
 | 
			
		||||
CONFIG_RCU_STALL_COMMON=y
 | 
			
		||||
CONFIG_REGMAP=y
 | 
			
		||||
CONFIG_REGMAP_I2C=y
 | 
			
		||||
CONFIG_REGMAP_MMIO=y
 | 
			
		||||
CONFIG_REGMAP_SPI=y
 | 
			
		||||
CONFIG_REGULATOR=y
 | 
			
		||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
			
		||||
CONFIG_REGULATOR_GPIO=y
 | 
			
		||||
CONFIG_RESET_CONTROLLER=y
 | 
			
		||||
CONFIG_RFS_ACCEL=y
 | 
			
		||||
CONFIG_RPS=y
 | 
			
		||||
CONFIG_RTC_CLASS=y
 | 
			
		||||
# CONFIG_RTC_DRV_CMOS is not set
 | 
			
		||||
CONFIG_RTC_DRV_TEGRA=y
 | 
			
		||||
CONFIG_RTC_I2C_AND_SPI=y
 | 
			
		||||
CONFIG_RTC_NVMEM=y
 | 
			
		||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
 | 
			
		||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 | 
			
		||||
# CONFIG_SCHED_INFO is not set
 | 
			
		||||
CONFIG_SCSI=y
 | 
			
		||||
# CONFIG_SCSI_LOWLEVEL is not set
 | 
			
		||||
# CONFIG_SCSI_PROC_FS is not set
 | 
			
		||||
CONFIG_SERIAL_8250_FSL=y
 | 
			
		||||
# CONFIG_SERIAL_AMBA_PL011 is not set
 | 
			
		||||
CONFIG_SERIAL_OF_PLATFORM=y
 | 
			
		||||
CONFIG_SERIAL_TEGRA=y
 | 
			
		||||
CONFIG_SERIO=y
 | 
			
		||||
CONFIG_SERIO_LIBPS2=y
 | 
			
		||||
CONFIG_SG_POOL=y
 | 
			
		||||
CONFIG_SMP=y
 | 
			
		||||
CONFIG_SMP_ON_UP=y
 | 
			
		||||
CONFIG_SND=y
 | 
			
		||||
# CONFIG_SND_COMPRESS_OFFLOAD is not set
 | 
			
		||||
CONFIG_SND_DMAENGINE_PCM=y
 | 
			
		||||
# CONFIG_SND_DRIVERS is not set
 | 
			
		||||
# CONFIG_SND_HDA_TEGRA is not set
 | 
			
		||||
CONFIG_SND_JACK=y
 | 
			
		||||
CONFIG_SND_JACK_INPUT_DEV=y
 | 
			
		||||
# CONFIG_SND_PCI is not set
 | 
			
		||||
CONFIG_SND_PCM=y
 | 
			
		||||
# CONFIG_SND_PROC_FS is not set
 | 
			
		||||
CONFIG_SND_SIMPLE_CARD=y
 | 
			
		||||
CONFIG_SND_SIMPLE_CARD_UTILS=y
 | 
			
		||||
CONFIG_SND_SOC=y
 | 
			
		||||
CONFIG_SND_SOC_AC97_BUS=y
 | 
			
		||||
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 | 
			
		||||
CONFIG_SND_SOC_I2C_AND_SPI=y
 | 
			
		||||
CONFIG_SND_SOC_TEGRA=y
 | 
			
		||||
CONFIG_SND_SOC_TEGRA20_AC97=y
 | 
			
		||||
CONFIG_SND_SOC_TEGRA20_DAS=y
 | 
			
		||||
CONFIG_SND_SOC_TEGRA20_I2S=y
 | 
			
		||||
CONFIG_SND_SOC_TEGRA20_SPDIF=y
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA30_AHUB is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA30_I2S is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_ALC5632 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_MAX98090 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_RT5640 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_RT5677 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_SGTL5000 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_TRIMSLICE is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_WM8753 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_WM8903 is not set
 | 
			
		||||
# CONFIG_SND_SOC_TEGRA_WM9712 is not set
 | 
			
		||||
# CONFIG_SND_USB is not set
 | 
			
		||||
CONFIG_SOC_BUS=y
 | 
			
		||||
CONFIG_SOC_TEGRA_FLOWCTRL=y
 | 
			
		||||
CONFIG_SOC_TEGRA_FUSE=y
 | 
			
		||||
CONFIG_SOC_TEGRA_PMC=y
 | 
			
		||||
CONFIG_SOUND=y
 | 
			
		||||
CONFIG_SOUND_OSS_CORE=y
 | 
			
		||||
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
 | 
			
		||||
CONFIG_SPARSE_IRQ=y
 | 
			
		||||
CONFIG_SPI=y
 | 
			
		||||
CONFIG_SPI_MASTER=y
 | 
			
		||||
# CONFIG_SPI_TEGRA114 is not set
 | 
			
		||||
CONFIG_SPI_TEGRA20_SFLASH=y
 | 
			
		||||
CONFIG_SPI_TEGRA20_SLINK=y
 | 
			
		||||
CONFIG_SRCU=y
 | 
			
		||||
CONFIG_SUSPEND=y
 | 
			
		||||
CONFIG_SUSPEND_FREEZER=y
 | 
			
		||||
CONFIG_SWIOTLB=y
 | 
			
		||||
CONFIG_SWP_EMULATE=y
 | 
			
		||||
CONFIG_SYNC_FILE=y
 | 
			
		||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
 | 
			
		||||
CONFIG_TEGRA20_APB_DMA=y
 | 
			
		||||
CONFIG_TEGRA20_MC=y
 | 
			
		||||
CONFIG_TEGRA_AHB=y
 | 
			
		||||
CONFIG_TEGRA_GMI=y
 | 
			
		||||
CONFIG_TEGRA_HOST1X=y
 | 
			
		||||
CONFIG_TEGRA_HOST1X_FIREWALL=y
 | 
			
		||||
CONFIG_TEGRA_IOMMU_GART=y
 | 
			
		||||
# CONFIG_TEGRA_IOMMU_SMMU is not set
 | 
			
		||||
# CONFIG_TEGRA_IVC is not set
 | 
			
		||||
CONFIG_TEGRA_MC=y
 | 
			
		||||
CONFIG_TEGRA_TIMER=y
 | 
			
		||||
CONFIG_TEGRA_WATCHDOG=y
 | 
			
		||||
# CONFIG_THUMB2_KERNEL is not set
 | 
			
		||||
CONFIG_TICK_CPU_ACCOUNTING=y
 | 
			
		||||
CONFIG_TIMER_OF=y
 | 
			
		||||
CONFIG_TIMER_PROBE=y
 | 
			
		||||
CONFIG_TREE_RCU=y
 | 
			
		||||
CONFIG_TREE_SRCU=y
 | 
			
		||||
CONFIG_TRUSTED_FOUNDATIONS=y
 | 
			
		||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
 | 
			
		||||
CONFIG_USB=y
 | 
			
		||||
CONFIG_USB_COMMON=y
 | 
			
		||||
CONFIG_USB_EHCI_HCD=y
 | 
			
		||||
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
 | 
			
		||||
CONFIG_USB_EHCI_TEGRA=y
 | 
			
		||||
CONFIG_USB_HID=y
 | 
			
		||||
CONFIG_USB_HIDDEV=y
 | 
			
		||||
CONFIG_USB_PHY=y
 | 
			
		||||
CONFIG_USB_SUPPORT=y
 | 
			
		||||
CONFIG_USB_ULPI=y
 | 
			
		||||
CONFIG_USB_ULPI_VIEWPORT=y
 | 
			
		||||
# CONFIG_USERIO is not set
 | 
			
		||||
CONFIG_USE_OF=y
 | 
			
		||||
CONFIG_VDSO=y
 | 
			
		||||
CONFIG_VECTORS_BASE=0xffff0000
 | 
			
		||||
# CONFIG_VFIO is not set
 | 
			
		||||
CONFIG_VFP=y
 | 
			
		||||
CONFIG_VFPv3=y
 | 
			
		||||
CONFIG_WATCHDOG_CORE=y
 | 
			
		||||
CONFIG_XPS=y
 | 
			
		||||
CONFIG_XZ_DEC_ARM=y
 | 
			
		||||
CONFIG_XZ_DEC_ARMTHUMB=y
 | 
			
		||||
CONFIG_XZ_DEC_BCJ=y
 | 
			
		||||
CONFIG_ZBOOT_ROM_BSS=0
 | 
			
		||||
CONFIG_ZBOOT_ROM_TEXT=0
 | 
			
		||||
CONFIG_ZLIB_DEFLATE=y
 | 
			
		||||
CONFIG_ZLIB_INFLATE=y
 | 
			
		||||
							
								
								
									
										47
									
								
								target/linux/tegra/image/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								target/linux/tegra/image/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2017-2019 Tomasz Maciej Nowak <tomek_n@o2.pl>
 | 
			
		||||
#
 | 
			
		||||
# This is free software, licensed under the GNU General Public License v2.
 | 
			
		||||
# See /LICENSE for more information.
 | 
			
		||||
#
 | 
			
		||||
include $(TOPDIR)/rules.mk
 | 
			
		||||
include $(INCLUDE_DIR)/image.mk
 | 
			
		||||
 | 
			
		||||
SIGNATURE:=$(shell printf "%.8s" $(SOURCE_DATE_EPOCH))
 | 
			
		||||
 | 
			
		||||
define Build/tegra-sdcard
 | 
			
		||||
	rm -fR $@.boot
 | 
			
		||||
	mkdir -p $@.boot
 | 
			
		||||
	$(CP) $(KDIR)/$(KERNEL_NAME) $@.boot
 | 
			
		||||
	$(if $(DEVICE_DTS),\
 | 
			
		||||
		$(foreach dtb,$(DEVICE_DTS),$(CP) $(DTS_DIR)/$(dtb).dtb $@.boot), \
 | 
			
		||||
		$(CP) $(DTS_DIR)/*.dtb $@.boot)
 | 
			
		||||
	sed \
 | 
			
		||||
		-e 's#@ROOT@#$(SIGNATURE)#g' \
 | 
			
		||||
		-e 's#@KERNEL@#$(KERNEL_NAME)#g' \
 | 
			
		||||
		$(BOOT_SCRIPT) > $@-boot.scr
 | 
			
		||||
	mkimage -A arm -O linux -T script -C none -a 0 -e 0 \
 | 
			
		||||
		-n '$(DEVICE_TITLE) OpenWrt bootscript' \
 | 
			
		||||
		-d $@-boot.scr \
 | 
			
		||||
		$@.boot/boot.scr
 | 
			
		||||
 | 
			
		||||
	PADDING="$(CONFIG_TARGET_IMAGES_PAD)" \
 | 
			
		||||
	SIGNATURE="$(SIGNATURE)" \
 | 
			
		||||
	$(SCRIPT_DIR)/gen_image_generic.sh \
 | 
			
		||||
		$@ \
 | 
			
		||||
		$(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \
 | 
			
		||||
		$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \
 | 
			
		||||
		2048
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
DEVICE_VARS += BOOT_SCRIPT
 | 
			
		||||
define Device/Default
 | 
			
		||||
  BOOT_SCRIPT := generic-bootscript
 | 
			
		||||
  IMAGES := sdcard.img.gz
 | 
			
		||||
  IMAGE/sdcard.img.gz := tegra-sdcard | gzip | append-metadata
 | 
			
		||||
  KERNEL_NAME := zImage
 | 
			
		||||
  KERNEL := kernel-bin
 | 
			
		||||
  PROFILES := Default
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(eval $(call BuildImage))
 | 
			
		||||
							
								
								
									
										6
									
								
								target/linux/tegra/image/generic-bootscript
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								target/linux/tegra/image/generic-bootscript
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
setenv bootargs "root=PARTUUID=@ROOT@-02 rw rootwait console=ttyS0,115200 console=tty0"
 | 
			
		||||
 | 
			
		||||
load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /@KERNEL@
 | 
			
		||||
load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /${soc}-${board}.dtb
 | 
			
		||||
 | 
			
		||||
bootz ${kernel_addr_r} - ${fdt_addr_r}
 | 
			
		||||
@@ -0,0 +1,77 @@
 | 
			
		||||
From patchwork Fri Jul 13 11:32:42 2018
 | 
			
		||||
Content-Type: text/plain; charset="utf-8"
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Transfer-Encoding: 7bit
 | 
			
		||||
Subject: serial8250 on tegra hsuart: recover from spurious interrupts due to
 | 
			
		||||
 tegra2 silicon bug
 | 
			
		||||
X-Patchwork-Submitter: "David R. Piegdon" <lkml@p23q.org>
 | 
			
		||||
X-Patchwork-Id: 943440
 | 
			
		||||
Message-Id: <4676ea34-69ce-5422-1ded-94218b89f7d9@p23q.org>
 | 
			
		||||
To: linux-tegra@vger.kernel.org
 | 
			
		||||
Date: Fri, 13 Jul 2018 11:32:42 +0000
 | 
			
		||||
From: "David R. Piegdon" <lkml@p23q.org>
 | 
			
		||||
List-Id: <linux-tegra.vger.kernel.org>
 | 
			
		||||
 | 
			
		||||
Hi,
 | 
			
		||||
a while back I sent a few mails regarding spurious interrupts in the
 | 
			
		||||
UARTA (hsuart) block of the Tegra2 SoC, when using the 8250 driver for
 | 
			
		||||
it instead of the hsuart driver. After going down a pretty deep
 | 
			
		||||
debugging/testing hole, I think I found a patch that fixes the issue. So
 | 
			
		||||
far testing in a reboot-cycle suggests that the error frequency dropped
 | 
			
		||||
from >3% of all reboots to at least <0.05% of all reboots. Tests
 | 
			
		||||
continue to run over the weekend.
 | 
			
		||||
 | 
			
		||||
The patch below already is a second iteration; the first did not reset
 | 
			
		||||
the MCR or contain the lines below '// clear interrupts'. This resulted
 | 
			
		||||
in no more spurious interrupts, but in a few % of spurious interrupts
 | 
			
		||||
that were recovered the UART block did not receive any characters any
 | 
			
		||||
more. So further resetting was required to fully reacquire operational
 | 
			
		||||
state of the UART block.
 | 
			
		||||
 | 
			
		||||
I'd love any comments/suggestions on this!
 | 
			
		||||
 | 
			
		||||
Cheers,
 | 
			
		||||
 | 
			
		||||
David
 | 
			
		||||
 | 
			
		||||
--- a/drivers/tty/serial/8250/8250_core.c
 | 
			
		||||
+++ b/drivers/tty/serial/8250/8250_core.c
 | 
			
		||||
@@ -140,6 +140,38 @@ static irqreturn_t serial8250_interrupt(
 | 
			
		||||
 				"serial8250: too much work for irq%d\n", irq);
 | 
			
		||||
 			break;
 | 
			
		||||
 		}
 | 
			
		||||
+
 | 
			
		||||
+#ifdef CONFIG_ARCH_TEGRA_2x_SOC
 | 
			
		||||
+		if (!handled && (port->type == PORT_TEGRA)) {
 | 
			
		||||
+			/*
 | 
			
		||||
+			 * Fix Tegra 2 CPU silicon bug where sometimes
 | 
			
		||||
+			 * "TX holding register empty" interrupts result in a
 | 
			
		||||
+			 * bad (metastable?) state in Tegras HSUART IP core.
 | 
			
		||||
+			 * Only way to recover seems to be to reset all
 | 
			
		||||
+			 * interrupts as well as the TX queue and the MCR.
 | 
			
		||||
+			 * But we don't want to loose any outgoing characters,
 | 
			
		||||
+			 * so only do it if the RX and TX queues are empty.
 | 
			
		||||
+			 */
 | 
			
		||||
+			unsigned char lsr = port->serial_in(port, UART_LSR);
 | 
			
		||||
+			const unsigned char fifo_empty_mask =
 | 
			
		||||
+						(UART_LSR_TEMT | UART_LSR_THRE);
 | 
			
		||||
+			if (((lsr & (UART_LSR_DR | fifo_empty_mask)) ==
 | 
			
		||||
+							fifo_empty_mask)) {
 | 
			
		||||
+				port->serial_out(port, UART_IER, 0);
 | 
			
		||||
+				port->serial_out(port, UART_MCR, 0);
 | 
			
		||||
+				serial8250_clear_and_reinit_fifos(up);
 | 
			
		||||
+				port->serial_out(port, UART_MCR, up->mcr);
 | 
			
		||||
+				port->serial_out(port, UART_IER, up->ier);
 | 
			
		||||
+				// clear interrupts
 | 
			
		||||
+				serial_port_in(port, UART_LSR);
 | 
			
		||||
+				serial_port_in(port, UART_RX);
 | 
			
		||||
+				serial_port_in(port, UART_IIR);
 | 
			
		||||
+				serial_port_in(port, UART_MSR);
 | 
			
		||||
+				up->lsr_saved_flags = 0;
 | 
			
		||||
+				up->msr_saved_flags = 0;
 | 
			
		||||
+			}
 | 
			
		||||
+		}
 | 
			
		||||
+#endif
 | 
			
		||||
 	} while (l != end);
 | 
			
		||||
 
 | 
			
		||||
 	spin_unlock(&i->lock);
 | 
			
		||||
		Reference in New Issue
	
	Block a user