#! /bin/bash
# SPDX-License-Identifier: GPL-2.0-only

# Copyright (C) 2015 Frank Rowand
#


usage() {

	# use spaces instead of tabs in the usage message
	cat >&2 <<eod

Usage:

   `basename $0` DTx
        decompile DTx

   `basename $0` DTx_1 DTx_2
        diff DTx_1 and DTx_2


      --annotate    synonym for -T
      --color       synonym for -c (requires diff with --color support)
       -c           enable colored output
       -f           print full dts in diff (--unified=99999)
       -h           synonym for --help
       -help        synonym for --help
      --help        print this message and exit
       -s SRCTREE   linux kernel source tree is at path SRCTREE
                        (default is current directory)
       -S           linux kernel source tree is at root of current git repo
       -T           annotate output .dts with input source file and line
                        (-T -T for more details)
       -u           unsorted, do not sort DTx


Each DTx is processed by the dtc compiler to produce a sorted dts source
file.  If DTx is a dts source file then it is pre-processed in the same
manner as done for the compile of the dts source file in the Linux kernel
build system ('#include' and '/include/' directives are processed).

If two DTx are provided, the resulting dts source files are diffed.

If DTx is a directory, it is treated as a DT subtree, such as
  /proc/device-tree.

If DTx contains the binary blob magic value in the first four bytes,
  it is treated as a binary blob (aka .dtb or FDT).

Otherwise DTx is treated as a dts source file (aka .dts).

   If this script is not run from the root of the linux source tree,
   and DTx utilizes '#include' or '/include/' then the path of the
   linux source tree can be provided by '-s SRCTREE' or '-S' so that
   include paths will be set properly.

   The shell variable \${ARCH} must provide the architecture containing
   the dts source file for include paths to be set properly for '#include'
   or '/include/' to be processed.

   If DTx_1 and DTx_2 are in different architectures, then this script
   may not work since \${ARCH} is part of the include path.  Two possible
   workarounds:

      `basename $0` \\
          <(ARCH=arch_of_dtx_1 `basename $0` DTx_1) \\
          <(ARCH=arch_of_dtx_2 `basename $0` DTx_2)

      `basename $0` ARCH=arch_of_dtx_1 DTx_1 >tmp_dtx_1.dts
      `basename $0` ARCH=arch_of_dtx_2 DTx_2 >tmp_dtx_2.dts
      `basename $0` tmp_dtx_1.dts tmp_dtx_2.dts
      rm tmp_dtx_1.dts tmp_dtx_2.dts

   If DTx_1 and DTx_2 are in different directories, then this script will
   add the path of DTx_1 and DTx_2 to the include paths.  If DTx_2 includes
   a local file that exists in both the path of DTx_1 and DTx_2 then the
   file in the path of DTx_1 will incorrectly be included.  Possible
   workaround:

      `basename $0` DTx_1 >tmp_dtx_1.dts
      `basename $0` DTx_2 >tmp_dtx_2.dts
      `basename $0` tmp_dtx_1.dts tmp_dtx_2.dts
      rm tmp_dtx_1.dts tmp_dtx_2.dts

eod
}


compile_to_dts() {

	dtx="$1"
	dtc_include="$2"

	if [ -d "${dtx}" ] ; then

		# -----  input is file tree

		if ( ! ${DTC} -I fs ${dtx} ) ; then
			exit 3
		fi

	elif [ -f "${dtx}" ] && [ -r "${dtx}" ] ; then

		magic=`hexdump -n 4 -e '/1 "%02x"' ${dtx}`
		if [ "${magic}" = "d00dfeed" ] ; then

			# -----  input is FDT (binary blob)

			if ( ! ${DTC} -I dtb ${dtx} ) ; then
				exit 3
			fi

			return

		fi

		# -----  input is DTS (source)

		if ( cpp ${cpp_flags} -x assembler-with-cpp ${dtx} \
			| ${DTC} ${dtc_include} -I dts ) ; then
			return
		fi

		echo ""                                                      >&2
		echo "Possible hints to resolve the above error:"            >&2
		echo "  (hints might not fix the problem)"                   >&2

		hint_given=0

		if [ "${ARCH}" = "" ] ; then
			hint_given=1
			echo ""                                              >&2
			echo "  shell variable \$ARCH not set"               >&2
		fi

		dtx_arch=`echo "/${dtx}" | sed -e 's|.*/arch/||' -e 's|/.*||'`

		if [ "${dtx_arch}" != ""  -a "${dtx_arch}" != "${ARCH}" ] ; then
			hint_given=1
			echo ""                                              >&2
			echo "  architecture ${dtx_arch} is in file path,"   >&2
			echo "  but does not match shell variable \$ARCH"    >&2
			echo "  >>\$ARCH<< is: >>${ARCH}<<"                  >&2
		fi

		if [ ! -d ${srctree}/arch/${ARCH} ] ; then
			hint_given=1
			echo ""                                              >&2
			echo "  ${srctree}/arch/${ARCH}/ does not exist"     >&2
			echo "  Is \$ARCH='${ARCH}' correct?"                >&2
			echo "  Possible fix: use '-s' option"               >&2

			git_root=`git rev-parse --show-toplevel 2>/dev/null`
			if [ -d ${git_root}/arch/ ] ; then
				echo "  Possible fix: use '-S' option"       >&2
			fi
		fi

		if [ $hint_given = 0 ] ; then
			echo ""                                              >&2
			echo "  No hints available."                         >&2
		fi

		echo ""                                                      >&2

		exit 3

	else
		echo ""                                                     >&2
		echo "ERROR: ${dtx} does not exist or is not readable"      >&2
		echo ""                                                     >&2
		exit 2
	fi

}


# -----  start of script

annotate=""
cmd_diff=0
diff_flags="-u"
diff_color=""
dtx_file_1=""
dtx_file_2=""
dtc_sort="-s"
help=0
srctree=""


while [ $# -gt 0 ] ; do

	case $1 in

	-c | --color )
		if diff --color /dev/null /dev/null 2>/dev/null ; then
			diff_color="--color=always"
		fi
		shift
		;;

	-f )
		diff_flags="--unified=999999"
		shift
		;;

	-h | -help | --help )
		help=1
		shift
		;;

	-s )
		srctree="$2"
		shift 2
		;;

	-S )
		git_root=`git rev-parse --show-toplevel 2>/dev/null`
		srctree="${git_root}"
		shift
		;;

	-T | --annotate )
		if [ "${annotate}"  = "" ] ; then
			annotate="-T"
		elif [ "${annotate}"  = "-T" ] ; then
			annotate="-T -T"
		fi
		shift
		;;
	-u )
		dtc_sort=""
		shift
		;;

	*)
		if [ "${dtx_file_1}"  = "" ] ; then
			dtx_file_1="$1"
		elif [ "${dtx_file_2}" = "" ] ; then
			dtx_file_2="$1"
		else
			echo ""                                             >&2
			echo "ERROR: Unexpected parameter: $1"              >&2
			echo ""                                             >&2
			exit 2
		fi
		shift
		;;

	esac

done

if [ "${srctree}" = "" ] ; then
	srctree="."
fi

if [ "${dtx_file_2}" != "" ]; then
	cmd_diff=1
fi

if (( ${help} )) ; then
	usage
	exit 1
fi

# this must follow check for ${help}
if [ "${dtx_file_1}" = "" ]; then
	echo ""                                                             >&2
	echo "ERROR: parameter DTx required"                                >&2
	echo ""                                                             >&2
	exit 2
fi


# -----  prefer dtc from linux kernel, allow fallback to dtc in $PATH

if [ "${KBUILD_OUTPUT:0:2}" = ".." ] ; then
	__KBUILD_OUTPUT="${srctree}/${KBUILD_OUTPUT}"
elif [ "${KBUILD_OUTPUT}" = "" ] ; then
	__KBUILD_OUTPUT="."
else
	__KBUILD_OUTPUT="${KBUILD_OUTPUT}"
fi

DTC="${__KBUILD_OUTPUT}/scripts/dtc/dtc"

if [ ! -x ${DTC} ] ; then
	__DTC="dtc"
	if grep -q "^CONFIG_DTC=y" ${__KBUILD_OUTPUT}/.config 2>/dev/null; then
		make_command='
         make scripts'
	else
		make_command='
         Enable CONFIG_DTC in the kernel configuration
         make scripts'
	fi
	if ( ! which ${__DTC} >/dev/null ) ; then

		# use spaces instead of tabs in the error message
		cat >&2 <<eod

ERROR: unable to find a 'dtc' program

   Preferred 'dtc' (built from Linux kernel source tree) was not found or
   is not executable.

      'dtc' is: ${DTC}

      If it does not exist, create it from the root of the Linux source tree:
${make_command}

      If not at the root of the Linux kernel source tree -s SRCTREE or -S
      may need to be specified to find 'dtc'.

      If 'O=\${dir}' is specified in your Linux builds, this script requires
      'export KBUILD_OUTPUT=\${dir}' or add \${dir}/scripts/dtc to \$PATH
      before running.

      If \${KBUILD_OUTPUT} is a relative path, then '-s SRCDIR', -S, or run
      this script from the root of the Linux kernel source tree is required.

   Fallback '${__DTC}' was also not in \${PATH} or is not executable.

eod
		exit 2
	fi
	DTC=${__DTC}
fi


# -----  cpp and dtc flags same as for linux source tree build of .dtb files,
#        plus directories of the dtx file(s)

dtx_path_1_dtc_include="-i `dirname ${dtx_file_1}`"

dtx_path_2_dtc_include=""
if (( ${cmd_diff} )) ; then
	dtx_path_2_dtc_include="-i `dirname ${dtx_file_2}`"
fi

cpp_flags="\
	-nostdinc                                  \
	-I${srctree}/scripts/dtc/include-prefixes  \
	-undef -D__DTS__"

DTC="\
	${DTC}                                     \
	-i ${srctree}/scripts/dtc/include-prefixes \
	-O dts -qq -f ${dtc_sort} ${annotate} -o -"


# -----  do the diff or decompile

if (( ${cmd_diff} )) ; then

	diff ${diff_flags} ${diff_color} --label "${dtx_file_1}" --label "${dtx_file_2}" \
		<(compile_to_dts "${dtx_file_1}" "${dtx_path_1_dtc_include}") \
		<(compile_to_dts "${dtx_file_2}" "${dtx_path_2_dtc_include}")

else

	compile_to_dts "${dtx_file_1}" "${dtx_path_1_dtc_include}"

fi
