mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-26 00:31:47 +00:00
commit
fa20ec72a9
20 changed files with 1963 additions and 156 deletions
BIN
bin/rda8810_modem.bin
Normal file
BIN
bin/rda8810_modem.bin
Normal file
Binary file not shown.
8
config/boards/orangepi2g-iot.wip
Normal file
8
config/boards/orangepi2g-iot.wip
Normal file
|
@ -0,0 +1,8 @@
|
|||
# RDA8810 Wi-Fi BT 2G headless
|
||||
BOARD_NAME="Orange Pi 2G-IOT"
|
||||
LINUXFAMILY="rda8810"
|
||||
BOOTCONFIG="rda8810_config"
|
||||
MODULES=""
|
||||
CLI_TARGET=""
|
||||
KERNEL_TARGET="default"
|
||||
BUILD_DESKTOP="no"
|
20
config/boards/orangepiwin.conf
Normal file
20
config/boards/orangepiwin.conf
Normal file
|
@ -0,0 +1,20 @@
|
|||
# A64 1GB RAM
|
||||
BOARD_NAME="Orange Pi Win"
|
||||
LINUXFAMILY="sun50iw2"
|
||||
BOOTCONFIG="orangepi_win_defconfig"
|
||||
MODULES=""
|
||||
MODULES_NEXT=""
|
||||
CPUMIN="480000"
|
||||
CPUMAX="1296000"
|
||||
#
|
||||
CLI_TARGET=""
|
||||
DESKTOP_TARGET=""
|
||||
KERNEL_TARGET="dev"
|
||||
#
|
||||
CLI_BETA_TARGET="xenial:dev"
|
||||
DESKTOP_BETA_TARGET="xenial:dev"
|
||||
#
|
||||
BOARDRATING=""
|
||||
CHIP="https://docs.armbian.com/Hardware_Allwinner-H5-A64/"
|
||||
HARDWARE="https://linux-sunxi.org/Orange_Pi_Win_Plus"
|
||||
FORUMS="https://forum.armbian.com/index.php/forum/11-other-boards/"
|
17
config/boards/wandboard-quad.wip
Normal file
17
config/boards/wandboard-quad.wip
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Freescale i.MX6 quad core GbE/Wifi/BT
|
||||
BOARD_NAME="Wandboard Quad"
|
||||
LINUXFAMILY="cubox"
|
||||
BOOTCONFIG="wandboard_defconfig"
|
||||
MODULES=""
|
||||
MODULES_NEXT="brcmfmac"
|
||||
CLI_TARGET="jessie,xenial:next"
|
||||
DESKTOP_TARGET=""
|
||||
KERNEL_TARGET="next"
|
||||
#
|
||||
CLI_BETA_TARGET=""
|
||||
DESKTOP_BETA_TARGET=""
|
||||
#
|
||||
BOARDRATING=""
|
||||
CHIP="http://docs.armbian.com/Hardware_Freescale-imx6/#cubox-and-hummingboard-boards"
|
||||
HARDWARE="http://www.wandboard.org"
|
||||
FORUMS="http://forum.armbian.com/index.php/forum/5-freescale-imx6x"
|
36
config/bootscripts/boot-rda8810.cmd
Normal file
36
config/bootscripts/boot-rda8810.cmd
Normal file
|
@ -0,0 +1,36 @@
|
|||
# DO NOT EDIT THIS FILE
|
||||
#
|
||||
# Please edit /boot/armbianEnv.txt to set supported parameters
|
||||
#
|
||||
|
||||
# default values
|
||||
setenv verbosity "1"
|
||||
setenv init_modem "yes"
|
||||
|
||||
if test "${boot_device}" = "mmc"; then
|
||||
|
||||
setenv rootdev "/dev/mmcblk0p2"
|
||||
setenv rootfstype "ext4"
|
||||
|
||||
if ext2load mmc 0:1 ${load_addr} armbianEnv.txt; then
|
||||
env import -t ${load_addr} ${filesize}
|
||||
fi
|
||||
|
||||
setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} console=ttyS0,921600 panic=10 consoleblank=0 loglevel=${verbosity} ${extraargs} ${extraboardargs}"
|
||||
|
||||
ext2load mmc 0:1 ${initrd_addr} uInitrd
|
||||
ext2load mmc 0:1 ${kernel_addr} zImage
|
||||
ext2load mmc 0:1 ${modem_addr} modem.bin
|
||||
else
|
||||
echo "NAND boot is not implemented yet"
|
||||
fi
|
||||
|
||||
if test "${init_modem}" = "yes"; then
|
||||
mdcom_loadm ${modem_addr}
|
||||
mdcom_check 1
|
||||
fi
|
||||
|
||||
bootz ${kernel_addr} ${initrd_addr}
|
||||
|
||||
# Recompile with:
|
||||
# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
|
|
@ -21,6 +21,7 @@ case $BRANCH in
|
|||
KERNELSOURCE=$MAINLINE_KERNEL_SOURCE
|
||||
KERNELBRANCH=$MAINLINE_KERNEL_BRANCH
|
||||
KERNELDIR=$MAINLINE_KERNEL_DIR
|
||||
BOOTPATCHDIR='u-boot-cubox-next'
|
||||
;;
|
||||
|
||||
dev)
|
||||
|
@ -42,6 +43,22 @@ write_uboot_platform()
|
|||
dd if=$1/u-boot.img of=$2 bs=1K seek=42 status=noxfer > /dev/null 2>&1
|
||||
}
|
||||
|
||||
if [[ $BOARD == "wandboard-quad" ]]; then
|
||||
unset UBOOT_NEEDS_GCC && UBOOT_ALT_GCC='> 6.1'
|
||||
unset KERNEL_NEEDS_GCC && KERNEL_ALT_GCC='> 6.1'
|
||||
CPUMAX=1008000
|
||||
GOVERNOR=ondemand
|
||||
HAS_UUID_SUPPORT=yes
|
||||
BOOTSOURCE=$MAINLINE_UBOOT_SOURCE
|
||||
BOOTDIR=$MAINLINE_UBOOT_DIR
|
||||
BOOTBRANCH="branch:v2017.03"
|
||||
write_uboot_platform()
|
||||
{
|
||||
dd if=$1/SPL of=$2 bs=512 seek=2 status=noxfer > /dev/null 2>&1
|
||||
dd if=$1/u-boot.img of=$2 seek=69 bs=1k status=noxfer > /dev/null 2>&1
|
||||
}
|
||||
fi
|
||||
|
||||
family_tweaks()
|
||||
{
|
||||
# default lirc configuration
|
||||
|
|
33
config/sources/rda8810.conf
Normal file
33
config/sources/rda8810.conf
Normal file
|
@ -0,0 +1,33 @@
|
|||
BOOTSOURCE='https://github.com/zador-blood-stained/u-boot-orangepi2g'
|
||||
BOOTBRANCH='branch:master'
|
||||
BOOTDIR='u-boot-rda8810'
|
||||
BOOTPATCHDIR='u-boot-rda8810'
|
||||
BOOTSCRIPT='boot-rda8810.cmd:boot.cmd'
|
||||
|
||||
BOOTFS_TYPE=ext2
|
||||
OFFSET=2
|
||||
|
||||
UBOOT_TARGET_MAP=';;u-boot.rda'
|
||||
|
||||
UBOOT_NEEDS_GCC='< 5.0'
|
||||
UBOOT_COMPILER='arm-linux-gnueabi-'
|
||||
|
||||
KERNELSOURCE='https://github.com/zador-blood-stained/linux-orangepi2g'
|
||||
KERNELBRANCH='branch:master'
|
||||
KERNELDIR='linux-rda8810'
|
||||
|
||||
KERNEL_NEEDS_GCC='< 5.0'
|
||||
|
||||
CPUMIN=392000
|
||||
CPUMAX=996000
|
||||
GOVERNOR=interactive
|
||||
|
||||
write_uboot_platform()
|
||||
{
|
||||
dd if=$1/u-boot.rda of=$2 bs=512 seek=256 count=4096 status=noxfer > /dev/null 2>&1
|
||||
}
|
||||
|
||||
family_tweaks()
|
||||
{
|
||||
cp $SRC/lib/bin/rda8810_modem.bin $CACHEDIR/$SDCARD/boot/modem.bin
|
||||
}
|
|
@ -1,15 +1,16 @@
|
|||
BOOTSCRIPT="boot-rockchip.cmd:boot.cmd"
|
||||
BOOTENV_FILE='rockchip-default.txt'
|
||||
UBOOT_TARGET_MAP=";;$SRC/lib/bin/rk3288_boot.bin u-boot-dtb.img spl/u-boot-spl-dtb.bin"
|
||||
UBOOT_TARGET_MAP=";;$SRC/lib/bin/rk3288_boot.bin u-boot-dtb.bin spl/u-boot-spl-dtb.bin"
|
||||
|
||||
UBOOT_ALT_GCC='> 6.1'
|
||||
|
||||
HAS_UUID_SUPPORT=yes
|
||||
BOOTDELAY=0
|
||||
|
||||
BOOTSOURCE='https://github.com/mqmaker/u-boot-rockchip'
|
||||
BOOTBRANCH='branch:miqi/devel'
|
||||
BOOTDIR='u-boot-miqi'
|
||||
BOOTSOURCE=$MAINLINE_UBOOT_SOURCE
|
||||
BOOTDIR=$MAINLINE_UBOOT_DIR
|
||||
BOOTBRANCH="branch:master"
|
||||
|
||||
SERIALCON=ttyS2
|
||||
|
||||
case $BRANCH in
|
||||
|
@ -31,31 +32,15 @@ CPUMIN="600000"
|
|||
CPUMAX="1900000"
|
||||
GOVERNOR="conservative"
|
||||
|
||||
|
||||
write_uboot_platform()
|
||||
{
|
||||
dd if=/dev/zero of=$2 bs=1k count=1023 seek=1 status=noxfer > /dev/null 2>&1
|
||||
mkimage -n rk3288 -T rksd -d $1/u-boot-spl-dtb.bin $1/out > /dev/null 2>&1
|
||||
dd if=$1/out of=$2 seek=64 status=noxfer > /dev/null 2>&1
|
||||
dd if=$1/u-boot-dtb.img of=$2 seek=256 status=noxfer > /dev/null 2>&1
|
||||
cat $1/u-boot-dtb.bin >> $1/out
|
||||
dd if=$1/out of=$2 seek=64 conv=notrunc > /dev/null 2>&1
|
||||
}
|
||||
|
||||
if [[ $BOARD == "tinkerboard" ]]; then
|
||||
|
||||
UBOOT_TARGET_MAP=";;$SRC/lib/bin/rk3288_boot.bin u-boot-dtb.bin spl/u-boot-spl-dtb.bin"
|
||||
|
||||
BOOTSOURCE=$MAINLINE_UBOOT_SOURCE
|
||||
BOOTDIR=$MAINLINE_UBOOT_DIR
|
||||
BOOTBRANCH="branch:master"
|
||||
|
||||
write_uboot_platform()
|
||||
{
|
||||
dd if=/dev/zero of=$2 bs=1k count=1023 seek=1 status=noxfer > /dev/null 2>&1
|
||||
mkimage -n rk3288 -T rksd -d $1/u-boot-spl-dtb.bin $1/out > /dev/null 2>&1
|
||||
cat $1/u-boot-dtb.bin >> $1/out
|
||||
dd if=$1/out of=$2 seek=64 conv=notrunc > /dev/null 2>&1
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
family_tweaks()
|
||||
{
|
||||
|
|
349
patch/kernel/rda8810-default/packaging-3.10-DEFAULT.patch
Normal file
349
patch/kernel/rda8810-default/packaging-3.10-DEFAULT.patch
Normal file
|
@ -0,0 +1,349 @@
|
|||
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
|
||||
index 3001ec5a..bcf4cac1 100644
|
||||
--- a/scripts/package/builddeb
|
||||
+++ b/scripts/package/builddeb
|
||||
@@ -61,8 +63,30 @@ create_package() {
|
||||
forcearch="-DArchitecture=$debarch"
|
||||
fi
|
||||
|
||||
+ # Create preinstall and post install script to remove dtb
|
||||
+ if [[ "$1" == *dtb* ]]; then
|
||||
+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst
|
||||
+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst
|
||||
+ echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst
|
||||
+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst
|
||||
+ echo "exit 0" >> $pdir/DEBIAN/preinst
|
||||
+ chmod 775 $pdir/DEBIAN/preinst
|
||||
+ #
|
||||
+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/postinst
|
||||
+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst
|
||||
+ echo "exit 0" >> $pdir/DEBIAN/postinst
|
||||
+ chmod 775 $pdir/DEBIAN/postinst
|
||||
+ fi
|
||||
+
|
||||
+ # Create postinstall script for headers
|
||||
+ if [[ "$1" == *headers* ]]; then
|
||||
+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; make -s scripts >/dev/null 2>&1" >> $pdir/DEBIAN/postinst
|
||||
+ echo "exit 0" >> $pdir/DEBIAN/postinst
|
||||
+ chmod 775 $pdir/DEBIAN/postinst
|
||||
+ fi
|
||||
+
|
||||
# Create the package
|
||||
- dpkg-gencontrol -isp $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
|
||||
+ dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
|
||||
dpkg --build "$pdir" ..
|
||||
}
|
||||
|
||||
@@ -78,49 +102,72 @@ tmpdir="$objtree/debian/tmp"
|
||||
fwdir="$objtree/debian/fwtmp"
|
||||
kernel_headers_dir="$objtree/debian/hdrtmp"
|
||||
libc_headers_dir="$objtree/debian/headertmp"
|
||||
-packagename=linux-image-$version
|
||||
-fwpackagename=linux-firmware-image
|
||||
-kernel_headers_packagename=linux-headers-$version
|
||||
-libc_headers_packagename=linux-libc-dev
|
||||
+dtb_dir="$objtree/debian/dtbtmp"
|
||||
+dbg_dir="$objtree/debian/dbgtmp"
|
||||
+packagename=linux-image"$LOCALVERSION"
|
||||
+fwpackagename=linux-firmware-image"$LOCALVERSION"
|
||||
+kernel_headers_packagename=linux-headers"$LOCALVERSION"
|
||||
+dtb_packagename=linux-dtb"$LOCALVERSION"
|
||||
+libc_headers_packagename=linux-libc-dev"$LOCALVERSION"
|
||||
+dbg_packagename=$packagename-dbg
|
||||
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
packagename=user-mode-linux-$version
|
||||
fi
|
||||
|
||||
+# Not all arches have the same installed path in debian
|
||||
+# XXX: have each arch Makefile export a variable of the canonical image install
|
||||
+# path instead
|
||||
+case $ARCH in
|
||||
+um)
|
||||
+ installed_image_path="usr/bin/linux-$version"
|
||||
+ ;;
|
||||
+parisc|mips|powerpc)
|
||||
+ installed_image_path="boot/vmlinux-$version"
|
||||
+ ;;
|
||||
+*)
|
||||
+ installed_image_path="boot/zImage-$version"
|
||||
+esac
|
||||
+
|
||||
+BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
|
||||
+
|
||||
# Setup the directory structure
|
||||
-rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
|
||||
+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir"
|
||||
mkdir -m 755 -p "$tmpdir/DEBIAN"
|
||||
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
|
||||
mkdir -m 755 -p "$fwdir/DEBIAN"
|
||||
mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename"
|
||||
mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
|
||||
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
|
||||
+
|
||||
+mkdir -m 755 -p "$dtb_dir/DEBIAN"
|
||||
+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename"
|
||||
+
|
||||
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
|
||||
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
|
||||
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
|
||||
fi
|
||||
+if [ -n "$BUILD_DEBUG" ] ; then
|
||||
+ mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
|
||||
+ mkdir -m 755 -p "$dbg_dir/DEBIAN"
|
||||
+fi
|
||||
|
||||
# Build and install the kernel
|
||||
if [ "$ARCH" = "um" ] ; then
|
||||
$MAKE linux
|
||||
cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
|
||||
- cp .config "$tmpdir/usr/share/doc/$packagename/config"
|
||||
+ cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
|
||||
gzip "$tmpdir/usr/share/doc/$packagename/config"
|
||||
- cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
|
||||
-else
|
||||
+else
|
||||
cp System.map "$tmpdir/boot/System.map-$version"
|
||||
- cp .config "$tmpdir/boot/config-$version"
|
||||
- # Not all arches include the boot path in KBUILD_IMAGE
|
||||
- if [ -e $KBUILD_IMAGE ]; then
|
||||
- cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
|
||||
- else
|
||||
- cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
|
||||
- fi
|
||||
+ cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
|
||||
fi
|
||||
+# odroid c1 need uimage
|
||||
+cp arch/$ARCH/boot/zImage "$tmpdir/$installed_image_path"
|
||||
|
||||
-if grep -q '^CONFIG_MODULES=y' .config ; then
|
||||
+if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
|
||||
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
|
||||
rm -f "$tmpdir/lib/modules/$version/build"
|
||||
rm -f "$tmpdir/lib/modules/$version/source"
|
||||
@@ -128,6 +175,24 @@ if grep -q '^CONFIG_MODULES=y' .config ; then
|
||||
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
|
||||
rmdir "$tmpdir/lib/modules/$version"
|
||||
fi
|
||||
+ if [ -n "$BUILD_DEBUG" ] ; then
|
||||
+ for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
|
||||
+ module=lib/modules/$module
|
||||
+ mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
|
||||
+ # only keep debug symbols in the debug file
|
||||
+ $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
|
||||
+ # strip original module from debug symbols
|
||||
+ $OBJCOPY --strip-debug $tmpdir/$module
|
||||
+ # then add a link to those
|
||||
+ $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
|
||||
+ done
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then
|
||||
+ mkdir -p "$tmpdir/boot/dtb-""$version"
|
||||
+ cp $objtree/arch/arm/boot/dts/*.dtb $dtb_dir/boot/dtb-$version
|
||||
+ #INSTALL_DTBS_PATH="$dtb_dir/boot/dtb" $MAKE KBUILD_SRC= dtbs_install
|
||||
fi
|
||||
|
||||
if [ "$ARCH" != "um" ]; then
|
||||
@@ -137,24 +202,78 @@ fi
|
||||
|
||||
# Install the maintainer scripts
|
||||
# Note: hook scripts under /etc/kernel are also executed by official Debian
|
||||
-# kernel packages, as well as kernel packages built using make-kpkg
|
||||
+# kernel packages, as well as kernel packages built using make-kpkg.
|
||||
+# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
|
||||
+# so do we; recent versions of dracut and initramfs-tools will obey this.
|
||||
debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
|
||||
+if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then
|
||||
+ want_initrd=Yes
|
||||
+else
|
||||
+ want_initrd=No
|
||||
+fi
|
||||
for script in postinst postrm preinst prerm ; do
|
||||
mkdir -p "$tmpdir$debhookdir/$script.d"
|
||||
cat <<EOF > "$tmpdir/DEBIAN/$script"
|
||||
-#!/bin/sh
|
||||
+#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Pass maintainer script parameters to hook scripts
|
||||
+
|
||||
export DEB_MAINT_PARAMS="\$*"
|
||||
|
||||
-test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
|
||||
+# Tell initramfs builder whether it's wanted
|
||||
+
|
||||
+export INITRD=$want_initrd
|
||||
+
|
||||
+test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
|
||||
exit 0
|
||||
EOF
|
||||
chmod 755 "$tmpdir/DEBIAN/$script"
|
||||
done
|
||||
|
||||
+##
|
||||
+## Create sym link to kernel image
|
||||
+##
|
||||
+kernel_tmp_version="${installed_image_path////\\/}"
|
||||
+sed -e "s/set -e//g" -i $tmpdir/DEBIAN/postinst
|
||||
+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst
|
||||
+cat >> $tmpdir/DEBIAN/postinst <<EOT
|
||||
+ln -sf $(basename $kernel_tmp_version) /boot/zImage > /dev/null 2>&1 || mv /$kernel_tmp_version /boot/zImage
|
||||
+
|
||||
+
|
||||
+exit 0
|
||||
+EOT
|
||||
+##
|
||||
+## FAT install workaround
|
||||
+##
|
||||
+sed -e "s/set -e//g" -i $tmpdir/DEBIAN/preinst
|
||||
+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst
|
||||
+cat >> $tmpdir/DEBIAN/preinst <<EOT
|
||||
+# exit if we are running chroot
|
||||
+if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi
|
||||
+
|
||||
+check_and_unmount (){
|
||||
+boot_device=\$(mountpoint -d /boot)
|
||||
+
|
||||
+for file in /dev/* ; do
|
||||
+ CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file))
|
||||
+ if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then
|
||||
+ boot_partition=\$file
|
||||
+ break;
|
||||
+ fi
|
||||
+done
|
||||
+
|
||||
+bootfstype=\$(blkid -s TYPE -o value \$boot_partition)
|
||||
+if [ "\$bootfstype" = "vfat" ]; then
|
||||
+rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/zImage
|
||||
+fi
|
||||
+}
|
||||
+mountpoint -q /boot && check_and_unmount
|
||||
+EOT
|
||||
+echo "exit 0" >> $tmpdir/DEBIAN/preinst
|
||||
+
|
||||
+
|
||||
# Try to determine maintainer and email values
|
||||
if [ -n "$DEBEMAIL" ]; then
|
||||
email=$DEBEMAIL
|
||||
@@ -172,9 +291,19 @@ else
|
||||
fi
|
||||
maintainer="$name <$email>"
|
||||
|
||||
+# Try to determine distribution
|
||||
+if [ -n "$KDEB_CHANGELOG_DIST" ]; then
|
||||
+ distribution=$KDEB_CHANGELOG_DIST
|
||||
+elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ]; then
|
||||
+ : # nothing to do in this case
|
||||
+else
|
||||
+ distribution="unstable"
|
||||
+ echo >&2 "Using default distribution of 'unstable' in the changelog"
|
||||
+ echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
|
||||
+fi
|
||||
# Generate a simple changelog template
|
||||
cat <<EOF > debian/changelog
|
||||
-linux-upstream ($packageversion) unstable; urgency=low
|
||||
+linux-upstream ($packageversion) $distribution; urgency=low
|
||||
|
||||
* Custom built Linux kernel.
|
||||
|
||||
@@ -242,21 +371,32 @@ EOF
|
||||
|
||||
fi
|
||||
|
||||
-# Build header package
|
||||
-(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
|
||||
-(cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
|
||||
-(cd $objtree; find arch/$SRCARCH/include .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
|
||||
+# Build kernel header package
|
||||
+(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
|
||||
+(cd $srctree; find arch/$SRCARCH/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
|
||||
+(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
|
||||
+(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
|
||||
+(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
|
||||
destdir=$kernel_headers_dir/usr/src/linux-headers-$version
|
||||
mkdir -p "$destdir"
|
||||
-(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
|
||||
-(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
|
||||
+######################## headers patch
|
||||
+ZACNI=$(pwd)
|
||||
+cd $destdir
|
||||
+patch -p1 < /tmp/headers-debian-byteshift.patch
|
||||
+cd $ZACNI
|
||||
+######################## headers patch
|
||||
+(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
|
||||
+(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
|
||||
+(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
|
||||
ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
|
||||
rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
|
||||
|
||||
+(cd "$destdir"; make M=scripts clean)
|
||||
+
|
||||
cat <<EOF >> debian/control
|
||||
|
||||
Package: $kernel_headers_packagename
|
||||
-Provides: linux-headers, linux-headers-2.6
|
||||
+Provides: linux-headers
|
||||
Architecture: any
|
||||
Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
|
||||
This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
|
||||
@@ -282,6 +422,16 @@ fi
|
||||
|
||||
cat <<EOF >> debian/control
|
||||
|
||||
+Package: $dtb_packagename
|
||||
+Architecture: any
|
||||
+Description: Linux DTB, version $version
|
||||
+ This package contains device blobs from the Linux kernel, version $version.
|
||||
+EOF
|
||||
+
|
||||
+#create_package "$dtb_packagename" "$dtb_dir"
|
||||
+
|
||||
+cat <<EOF >> debian/control
|
||||
+
|
||||
Package: $libc_headers_packagename
|
||||
Section: devel
|
||||
Provides: linux-kernel-headers
|
||||
@@ -293,9 +443,35 @@ EOF
|
||||
|
||||
if [ "$ARCH" != "um" ]; then
|
||||
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
|
||||
- create_package "$libc_headers_packagename" "$libc_headers_dir"
|
||||
+# create_package "$libc_headers_packagename" "$libc_headers_dir"
|
||||
fi
|
||||
|
||||
create_package "$packagename" "$tmpdir"
|
||||
|
||||
-exit 0
|
||||
+if [ -n "$BUILD_DEBUG" ] ; then
|
||||
+ # Build debug package
|
||||
+ # Different tools want the image in different locations
|
||||
+ # perf
|
||||
+ mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
|
||||
+ cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
|
||||
+ # systemtap
|
||||
+ mkdir -p $dbg_dir/usr/lib/debug/boot/
|
||||
+ ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
|
||||
+ # kdump-tools
|
||||
+ ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
|
||||
+
|
||||
+ cat <<EOF >> debian/control
|
||||
+
|
||||
+Package: $dbg_packagename
|
||||
+Section: debug
|
||||
+Provides: linux-debug, linux-debug-$version
|
||||
+Architecture: any
|
||||
+Description: Linux kernel debugging symbols for $version
|
||||
+ This package will come in handy if you need to debug the kernel. It provides
|
||||
+ all the necessary debug symbols for the kernel and its modules.
|
||||
+EOF
|
||||
+
|
||||
+ create_package "$dbg_packagename" "$dbg_dir"
|
||||
+fi
|
||||
+
|
||||
+exit 0
|
||||
\ No newline at end of file
|
153
patch/kernel/sun50iw2-dev/add_orangepiwin_dts.patch
Normal file
153
patch/kernel/sun50iw2-dev/add_orangepiwin_dts.patch
Normal file
|
@ -0,0 +1,153 @@
|
|||
diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile
|
||||
index 244e8b7..65dfa1b 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/Makefile
|
||||
+++ b/arch/arm64/boot/dts/allwinner/Makefile
|
||||
@@ -1,4 +1,5 @@
|
||||
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-bananapi-m64.dtb
|
||||
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-orangepiwin.dtb
|
||||
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb
|
||||
dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-pc2.dtb
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepiwin.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepiwin.dts
|
||||
new file mode 100644
|
||||
index 0000000..4fc6ffd
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepiwin.dts
|
||||
@@ -0,0 +1,137 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2016 ARM Ltd.
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
+#include "sun50i-a64-pine64.dts"
|
||||
+
|
||||
+/ {
|
||||
+ model = "OrangePiWin";
|
||||
+ compatible = "orangepiwin", "allwinner,sun50i-a64";
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 14 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ wifi_pwrseq: wifi_pwrseq {
|
||||
+ compatible = "mmc-pwrseq-simple";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&wifi_en_pin>;
|
||||
+ reset-gpios = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
|
||||
+ };
|
||||
+
|
||||
+ reg_usb1_vbus: usb1-vbus {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb1_vbus_pin_a>;
|
||||
+ regulator-name = "usb1-vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-boot-on;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 7 GPIO_ACTIVE_HIGH>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ /* TODO: Camera, touchscreen, etc. */
|
||||
+};
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emac_rgmii_pins>;
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ phy-mode = "rgmii";
|
||||
+};
|
||||
+
|
||||
+&mmc1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc1_pins>;
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ vqmmc-supply = <®_vcc3v3>;
|
||||
+ mmc-pwrseq = <&wifi_pwrseq>;
|
||||
+ bus-width = <4>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ brcmf: bcrmf@1 {
|
||||
+ reg = <1>;
|
||||
+ compatible = "brcm,bcm4329-fmac";
|
||||
+ interrupt-parent = <&r_pio>;
|
||||
+ interrupts = <0 7 IRQ_TYPE_LEVEL_LOW>; /* PL7 / EINT7 */
|
||||
+ interrupt-names = "host-wake";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pio {
|
||||
+ usb1_vbus_pin_a: usb1_vbus_pin@0 {
|
||||
+ allwinner,pins = "PD7";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&r_pio {
|
||||
+ wifi_en_pin: wifi_en_pin@0 {
|
||||
+ allwinner,pins = "PL8";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&usb_otg {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbphy {
|
||||
+ usb1_vbus-supply = <®_usb1_vbus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
404
patch/kernel/sun50iw2-dev/add_sun50i_a64_rccu.patch
Normal file
404
patch/kernel/sun50iw2-dev/add_sun50i_a64_rccu.patch
Normal file
|
@ -0,0 +1,404 @@
|
|||
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
|
||||
index 8af8f4be8e3b..fbd3f8cd5c22 100644
|
||||
--- a/drivers/clk/sunxi-ng/Kconfig
|
||||
+++ b/drivers/clk/sunxi-ng/Kconfig
|
||||
@@ -151,4 +151,10 @@ config SUN9I_A80_CCU
|
||||
default MACH_SUN9I
|
||||
depends on MACH_SUN9I || COMPILE_TEST
|
||||
|
||||
+config SUN8I_R_CCU
|
||||
+ bool "Support for Allwinner SoCs' PRCM CCUs"
|
||||
+ select SUNXI_CCU_DIV
|
||||
+ select SUNXI_CCU_GATE
|
||||
+ default MACH_SUN8I || (ARCH_SUNXI && ARM64)
|
||||
+
|
||||
endif
|
||||
diff --git a/drivers/clk/sunxi-ng/Makefile b/drivers/clk/sunxi-ng/Makefile
|
||||
index 6feaac0c5600..0ec02fe14c50 100644
|
||||
--- a/drivers/clk/sunxi-ng/Makefile
|
||||
+++ b/drivers/clk/sunxi-ng/Makefile
|
||||
@@ -25,6 +25,7 @@ obj-$(CONFIG_SUN8I_A23_CCU) += ccu-sun8i-a23.o
|
||||
obj-$(CONFIG_SUN8I_A33_CCU) += ccu-sun8i-a33.o
|
||||
obj-$(CONFIG_SUN8I_H3_CCU) += ccu-sun8i-h3.o
|
||||
obj-$(CONFIG_SUN8I_V3S_CCU) += ccu-sun8i-v3s.o
|
||||
+obj-$(CONFIG_SUN8I_R_CCU) += ccu-sun8i-r.o
|
||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80.o
|
||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-de.o
|
||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-usb.o
|
||||
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r.c b/drivers/clk/sunxi-ng/ccu-sun8i-r.c
|
||||
new file mode 100644
|
||||
index 000000000000..0d027d53dbdf
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r.c
|
||||
@@ -0,0 +1,213 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2016 Icenowy Zheng <icenowy@aosc.xyz>
|
||||
+ *
|
||||
+ * This software is licensed under the terms of the GNU General Public
|
||||
+ * License version 2, as published by the Free Software Foundation, and
|
||||
+ * may be copied, distributed, and modified under those terms.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/clk-provider.h>
|
||||
+#include <linux/of_address.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+
|
||||
+#include "ccu_common.h"
|
||||
+#include "ccu_reset.h"
|
||||
+
|
||||
+#include "ccu_div.h"
|
||||
+#include "ccu_gate.h"
|
||||
+#include "ccu_mp.h"
|
||||
+#include "ccu_nm.h"
|
||||
+
|
||||
+#include "ccu-sun8i-r.h"
|
||||
+
|
||||
+static const char * const ar100_parents[] = { "osc32k", "osc24M",
|
||||
+ "pll-periph0", "iosc" };
|
||||
+
|
||||
+static struct ccu_div ar100_clk = {
|
||||
+ .div = _SUNXI_CCU_DIV_FLAGS(4, 2, CLK_DIVIDER_POWER_OF_TWO),
|
||||
+
|
||||
+ .mux = {
|
||||
+ .shift = 16,
|
||||
+ .width = 2,
|
||||
+
|
||||
+ .variable_prediv = {
|
||||
+ .index = 2,
|
||||
+ .shift = 8,
|
||||
+ .width = 5,
|
||||
+ },
|
||||
+ },
|
||||
+
|
||||
+ .common = {
|
||||
+ .reg = 0x00,
|
||||
+ .features = CCU_FEATURE_VARIABLE_PREDIV,
|
||||
+ .hw.init = CLK_HW_INIT_PARENTS("ar100",
|
||||
+ ar100_parents,
|
||||
+ &ccu_div_ops,
|
||||
+ 0),
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static CLK_FIXED_FACTOR(ahb0_clk, "ahb0", "ar100", 1, 1, 0);
|
||||
+
|
||||
+static struct ccu_div apb0_clk = {
|
||||
+ .div = _SUNXI_CCU_DIV_FLAGS(0, 2, CLK_DIVIDER_POWER_OF_TWO),
|
||||
+
|
||||
+ .common = {
|
||||
+ .reg = 0x0c,
|
||||
+ .hw.init = CLK_HW_INIT("apb0",
|
||||
+ "ahb0",
|
||||
+ &ccu_div_ops,
|
||||
+ 0),
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static SUNXI_CCU_GATE(apb0_pio_clk, "apb0-pio", "apb0",
|
||||
+ 0x28, BIT(0), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_ir_clk, "apb0-ir", "apb0",
|
||||
+ 0x28, BIT(1), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_timer_clk, "apb0-timer", "apb0",
|
||||
+ 0x28, BIT(2), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_rsb_clk, "apb0-rsb", "apb0",
|
||||
+ 0x28, BIT(3), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_uart_clk, "apb0-uart", "apb0",
|
||||
+ 0x28, BIT(4), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_i2c_clk, "apb0-i2c", "apb0",
|
||||
+ 0x28, BIT(6), 0);
|
||||
+static SUNXI_CCU_GATE(apb0_twd_clk, "apb0-twd", "apb0",
|
||||
+ 0x28, BIT(7), 0);
|
||||
+
|
||||
+static const char * const r_mod0_default_parents[] = { "osc32K", "osc24M" };
|
||||
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir_clk, "ir",
|
||||
+ r_mod0_default_parents, 0x54,
|
||||
+ 0, 4, /* M */
|
||||
+ 16, 2, /* P */
|
||||
+ 24, 2, /* mux */
|
||||
+ BIT(31), /* gate */
|
||||
+ 0);
|
||||
+
|
||||
+static struct ccu_common *sun8i_h3_r_ccu_clks[] = {
|
||||
+ &ar100_clk.common,
|
||||
+ &apb0_clk.common,
|
||||
+ &apb0_pio_clk.common,
|
||||
+ &apb0_ir_clk.common,
|
||||
+ &apb0_timer_clk.common,
|
||||
+ &apb0_uart_clk.common,
|
||||
+ &apb0_i2c_clk.common,
|
||||
+ &apb0_twd_clk.common,
|
||||
+ &ir_clk.common,
|
||||
+};
|
||||
+
|
||||
+static struct ccu_common *sun50i_a64_r_ccu_clks[] = {
|
||||
+ &ar100_clk.common,
|
||||
+ &apb0_clk.common,
|
||||
+ &apb0_pio_clk.common,
|
||||
+ &apb0_ir_clk.common,
|
||||
+ &apb0_timer_clk.common,
|
||||
+ &apb0_rsb_clk.common,
|
||||
+ &apb0_uart_clk.common,
|
||||
+ &apb0_i2c_clk.common,
|
||||
+ &apb0_twd_clk.common,
|
||||
+ &ir_clk.common,
|
||||
+};
|
||||
+
|
||||
+static struct clk_hw_onecell_data sun8i_h3_r_hw_clks = {
|
||||
+ .hws = {
|
||||
+ [CLK_AR100] = &ar100_clk.common.hw,
|
||||
+ [CLK_AHB0] = &ahb0_clk.hw,
|
||||
+ [CLK_APB0] = &apb0_clk.common.hw,
|
||||
+ [CLK_APB0_PIO] = &apb0_pio_clk.common.hw,
|
||||
+ [CLK_APB0_IR] = &apb0_ir_clk.common.hw,
|
||||
+ [CLK_APB0_TIMER] = &apb0_timer_clk.common.hw,
|
||||
+ [CLK_APB0_UART] = &apb0_uart_clk.common.hw,
|
||||
+ [CLK_APB0_I2C] = &apb0_i2c_clk.common.hw,
|
||||
+ [CLK_APB0_TWD] = &apb0_twd_clk.common.hw,
|
||||
+ [CLK_IR] = &ir_clk.common.hw,
|
||||
+ },
|
||||
+ .num = CLK_NUMBER,
|
||||
+};
|
||||
+
|
||||
+static struct clk_hw_onecell_data sun50i_a64_r_hw_clks = {
|
||||
+ .hws = {
|
||||
+ [CLK_AR100] = &ar100_clk.common.hw,
|
||||
+ [CLK_AHB0] = &ahb0_clk.hw,
|
||||
+ [CLK_APB0] = &apb0_clk.common.hw,
|
||||
+ [CLK_APB0_PIO] = &apb0_pio_clk.common.hw,
|
||||
+ [CLK_APB0_IR] = &apb0_ir_clk.common.hw,
|
||||
+ [CLK_APB0_TIMER] = &apb0_timer_clk.common.hw,
|
||||
+ [CLK_APB0_RSB] = &apb0_rsb_clk.common.hw,
|
||||
+ [CLK_APB0_UART] = &apb0_uart_clk.common.hw,
|
||||
+ [CLK_APB0_I2C] = &apb0_i2c_clk.common.hw,
|
||||
+ [CLK_APB0_TWD] = &apb0_twd_clk.common.hw,
|
||||
+ [CLK_IR] = &ir_clk.common.hw,
|
||||
+ },
|
||||
+ .num = CLK_NUMBER,
|
||||
+};
|
||||
+
|
||||
+static struct ccu_reset_map sun8i_h3_r_ccu_resets[] = {
|
||||
+ [RST_APB0_IR] = { 0xb0, BIT(1) },
|
||||
+ [RST_APB0_TIMER] = { 0xb0, BIT(2) },
|
||||
+ [RST_APB0_UART] = { 0xb0, BIT(4) },
|
||||
+ [RST_APB0_I2C] = { 0xb0, BIT(6) },
|
||||
+};
|
||||
+
|
||||
+static struct ccu_reset_map sun50i_a64_r_ccu_resets[] = {
|
||||
+ [RST_APB0_IR] = { 0xb0, BIT(1) },
|
||||
+ [RST_APB0_TIMER] = { 0xb0, BIT(2) },
|
||||
+ [RST_APB0_RSB] = { 0xb0, BIT(3) },
|
||||
+ [RST_APB0_UART] = { 0xb0, BIT(4) },
|
||||
+ [RST_APB0_I2C] = { 0xb0, BIT(6) },
|
||||
+};
|
||||
+
|
||||
+static const struct sunxi_ccu_desc sun8i_h3_r_ccu_desc = {
|
||||
+ .ccu_clks = sun8i_h3_r_ccu_clks,
|
||||
+ .num_ccu_clks = ARRAY_SIZE(sun8i_h3_r_ccu_clks),
|
||||
+
|
||||
+ .hw_clks = &sun8i_h3_r_hw_clks,
|
||||
+
|
||||
+ .resets = sun8i_h3_r_ccu_resets,
|
||||
+ .num_resets = ARRAY_SIZE(sun8i_h3_r_ccu_resets),
|
||||
+};
|
||||
+
|
||||
+static const struct sunxi_ccu_desc sun50i_a64_r_ccu_desc = {
|
||||
+ .ccu_clks = sun50i_a64_r_ccu_clks,
|
||||
+ .num_ccu_clks = ARRAY_SIZE(sun50i_a64_r_ccu_clks),
|
||||
+
|
||||
+ .hw_clks = &sun50i_a64_r_hw_clks,
|
||||
+
|
||||
+ .resets = sun50i_a64_r_ccu_resets,
|
||||
+ .num_resets = ARRAY_SIZE(sun50i_a64_r_ccu_resets),
|
||||
+};
|
||||
+
|
||||
+static void __init sunxi_r_ccu_init(struct device_node *node,
|
||||
+ const struct sunxi_ccu_desc *desc)
|
||||
+{
|
||||
+ void __iomem *reg;
|
||||
+
|
||||
+ reg = of_io_request_and_map(node, 0, of_node_full_name(node));
|
||||
+ if (IS_ERR(reg)) {
|
||||
+ pr_err("%s: Could not map the clock registers\n",
|
||||
+ of_node_full_name(node));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ sunxi_ccu_probe(node, reg, desc);
|
||||
+}
|
||||
+
|
||||
+static void __init sun8i_h3_r_ccu_setup(struct device_node *node)
|
||||
+{
|
||||
+ sunxi_r_ccu_init(node, &sun8i_h3_r_ccu_desc);
|
||||
+}
|
||||
+CLK_OF_DECLARE(sun8i_h3_r_ccu, "allwinner,sun8i-h3-r-ccu",
|
||||
+ sun8i_h3_r_ccu_setup);
|
||||
+
|
||||
+static void __init sun50i_a64_r_ccu_setup(struct device_node *node)
|
||||
+{
|
||||
+ sunxi_r_ccu_init(node, &sun50i_a64_r_ccu_desc);
|
||||
+}
|
||||
+CLK_OF_DECLARE(sun50i_a64_r_ccu, "allwinner,sun50i-a64-r-ccu",
|
||||
+ sun50i_a64_r_ccu_setup);
|
||||
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r.h b/drivers/clk/sunxi-ng/ccu-sun8i-r.h
|
||||
new file mode 100644
|
||||
index 000000000000..eaa431fd1d8f
|
||||
--- /dev/null
|
||||
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r.h
|
||||
@@ -0,0 +1,27 @@
|
||||
+/*
|
||||
+ * Copyright 2016 Icenowy <icenowy@aosc.xyz>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _CCU_SUN8I_R_H
|
||||
+#define _CCU_SUN8I_R_H_
|
||||
+
|
||||
+#include <dt-bindings/clock/sun8i-r-ccu.h>
|
||||
+#include <dt-bindings/reset/sun8i-r-ccu.h>
|
||||
+
|
||||
+/* AHB/APB bus clocks are not exported */
|
||||
+#define CLK_AHB0 1
|
||||
+#define CLK_APB0 2
|
||||
+
|
||||
+#define CLK_NUMBER (CLK_APB0_TWD + 1)
|
||||
+
|
||||
+#endif /* _CCU_SUN8I_R_H */
|
||||
diff --git a/include/dt-bindings/clock/sun8i-r-ccu.h b/include/dt-bindings/clock/sun8i-r-ccu.h
|
||||
new file mode 100644
|
||||
index 000000000000..779d20aa0d05
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/clock/sun8i-r-ccu.h
|
||||
@@ -0,0 +1,59 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2016 Icenowy Zheng <icenowy@aosc.xyz>
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_CLK_SUN8I_R_CCU_H_
|
||||
+#define _DT_BINDINGS_CLK_SUN8I_R_CCU_H_
|
||||
+
|
||||
+#define CLK_AR100 0
|
||||
+
|
||||
+#define CLK_APB0_PIO 3
|
||||
+#define CLK_APB0_IR 4
|
||||
+#define CLK_APB0_TIMER 5
|
||||
+#define CLK_APB0_RSB 6
|
||||
+#define CLK_APB0_UART 7
|
||||
+/* 8 is reserved for CLK_APB0_W1 on A31 */
|
||||
+#define CLK_APB0_I2C 9
|
||||
+#define CLK_APB0_TWD 10
|
||||
+
|
||||
+#define CLK_IR 11
|
||||
+
|
||||
+#endif /* _DT_BINDINGS_CLK_SUN8I_R_CCU_H_ */
|
||||
diff --git a/include/dt-bindings/reset/sun8i-r-ccu.h b/include/dt-bindings/reset/sun8i-r-ccu.h
|
||||
new file mode 100644
|
||||
index 000000000000..4ba64f3d6fc9
|
||||
--- /dev/null
|
||||
+++ b/include/dt-bindings/reset/sun8i-r-ccu.h
|
||||
@@ -0,0 +1,53 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2016 Icenowy Zheng <icenowy@aosc.xyz>
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _DT_BINDINGS_RST_SUN8I_R_CCU_H_
|
||||
+#define _DT_BINDINGS_RST_SUN8I_R_CCU_H_
|
||||
+
|
||||
+#define RST_APB0_IR 0
|
||||
+#define RST_APB0_TIMER 1
|
||||
+#define RST_APB0_RSB 2
|
||||
+#define RST_APB0_UART 3
|
||||
+/* 4 is reserved for RST_APB0_W1 on A31 */
|
||||
+#define RST_APB0_I2C 5
|
||||
+
|
||||
+#endif /* _DT_BINDINGS_RST_SUN8I_R_CCU_H_ */
|
||||
|
215
patch/kernel/sun50iw2-dev/add_sun50i_a64_rpio.patch
Normal file
215
patch/kernel/sun50iw2-dev/add_sun50i_a64_rpio.patch
Normal file
|
@ -0,0 +1,215 @@
|
|||
diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig
|
||||
index a84bfa7f3c05..a0c419ac2a3b 100644
|
||||
--- a/drivers/pinctrl/sunxi/Kconfig
|
||||
+++ b/drivers/pinctrl/sunxi/Kconfig
|
||||
@@ -68,6 +68,10 @@ config PINCTRL_SUN50I_A64
|
||||
def_bool ARM64 && ARCH_SUNXI
|
||||
select PINCTRL_SUNXI
|
||||
|
||||
+config PINCTRL_SUN50I_A64_R
|
||||
+ def_bool ARM64 && ARCH_SUNXI
|
||||
+ select PINCTRL_SUNXI
|
||||
+
|
||||
config PINCTRL_SUN50I_H5
|
||||
def_bool ARM64 && ARCH_SUNXI
|
||||
select PINCTRL_SUNXI
|
||||
diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile
|
||||
index 04ccb88ebd5f..df4ccd6cd44c 100644
|
||||
--- a/drivers/pinctrl/sunxi/Makefile
|
||||
+++ b/drivers/pinctrl/sunxi/Makefile
|
||||
@@ -11,6 +11,7 @@ obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_A33) += pinctrl-sun8i-a33.o
|
||||
obj-$(CONFIG_PINCTRL_SUN50I_A64) += pinctrl-sun50i-a64.o
|
||||
+obj-$(CONFIG_PINCTRL_SUN50I_A64_R) += pinctrl-sun50i-a64-r.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_A83T) += pinctrl-sun8i-a83t.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_H3) += pinctrl-sun8i-h3.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_H3_R) += pinctrl-sun8i-h3-r.o
|
||||
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64-r.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64-r.c
|
||||
new file mode 100644
|
||||
index 000000000000..415870e82cbf
|
||||
--- /dev/null
|
||||
+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64-r.c
|
||||
@@ -0,0 +1,125 @@
|
||||
+/*
|
||||
+ * Allwinner A64 SoCs special pins pinctrl driver.
|
||||
+ *
|
||||
+ * Based on pinctrl-sun8i-a23-r.c
|
||||
+ *
|
||||
+ * Copyright (C) 2016 Icenowy Zheng
|
||||
+ * Icenowy Zheng <icenowy@aosc.xyz>
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Chen-Yu Tsai
|
||||
+ * Chen-Yu Tsai <wens@csie.org>
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Boris Brezillon
|
||||
+ * Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
+ *
|
||||
+ * Copyright (C) 2014 Maxime Ripard
|
||||
+ * Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
+ *
|
||||
+ * This file is licensed under the terms of the GNU General Public
|
||||
+ * License version 2. This program is licensed "as is" without any
|
||||
+ * warranty of any kind, whether express or implied.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/of_device.h>
|
||||
+#include <linux/pinctrl/pinctrl.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/reset.h>
|
||||
+
|
||||
+#include "pinctrl-sunxi.h"
|
||||
+
|
||||
+static const struct sunxi_desc_pin sun50i_a64_r_pins[] = {
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 0),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_rsb"), /* SCK */
|
||||
+ SUNXI_FUNCTION(0x3, "s_i2c"), /* SCK */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), /* PL_EINT0 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 1),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_rsb"), /* SDA */
|
||||
+ SUNXI_FUNCTION(0x3, "s_i2c"), /* SDA */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), /* PL_EINT1 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 2),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_uart"), /* TX */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), /* PL_EINT2 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 3),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_uart"), /* RX */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), /* PL_EINT3 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 4),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_jtag"), /* MS */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), /* PL_EINT4 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 5),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_jtag"), /* CK */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), /* PL_EINT5 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 6),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_jtag"), /* DO */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), /* PL_EINT6 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 7),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_jtag"), /* DI */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), /* PL_EINT7 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 8),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_i2c"), /* SCK */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), /* PL_EINT8 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 9),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_i2c"), /* SDA */
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), /* PL_EINT9 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 10),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_pwm"),
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)), /* PL_EINT10 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 11),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION(0x2, "s_cir_rx"),
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)), /* PL_EINT11 */
|
||||
+ SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 12),
|
||||
+ SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
+ SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
+ SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)), /* PL_EINT12 */
|
||||
+};
|
||||
+
|
||||
+static const struct sunxi_pinctrl_desc sun50i_a64_r_pinctrl_data = {
|
||||
+ .pins = sun50i_a64_r_pins,
|
||||
+ .npins = ARRAY_SIZE(sun50i_a64_r_pins),
|
||||
+ .pin_base = PL_BASE,
|
||||
+ .irq_banks = 1,
|
||||
+};
|
||||
+
|
||||
+static int sun50i_a64_r_pinctrl_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ return sunxi_pinctrl_init(pdev,
|
||||
+ &sun50i_a64_r_pinctrl_data);
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id sun50i_a64_r_pinctrl_match[] = {
|
||||
+ { .compatible = "allwinner,sun50i-a64-r-pinctrl", },
|
||||
+ {}
|
||||
+};
|
||||
+
|
||||
+static struct platform_driver sun50i_a64_r_pinctrl_driver = {
|
||||
+ .probe = sun50i_a64_r_pinctrl_probe,
|
||||
+ .driver = {
|
||||
+ .name = "sun50i-a64-r-pinctrl",
|
||||
+ .of_match_table = sun50i_a64_r_pinctrl_match,
|
||||
+ },
|
||||
+};
|
||||
+builtin_platform_driver(sun50i_a64_r_pinctrl_driver);
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
index 02c0385..c0773d8 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
@@ -43,8 +43,10 @@
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/sun50i-a64-ccu.h>
|
||||
+#include <dt-bindings/clock/sun8i-r-ccu.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/reset/sun50i-a64-ccu.h>
|
||||
+#include <dt-bindings/reset/sun8i-r-ccu.h>
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
@@ -98,6 +100,13 @@
|
||||
clock-output-names = "osc32k";
|
||||
};
|
||||
|
||||
+ osc32000: osc32000_clk {
|
||||
+ #clock-cells = <0>;
|
||||
+ compatible = "fixed-clock";
|
||||
+ clock-frequency = <32000>;
|
||||
+ clock-output-names = "osc32000";
|
||||
+ };
|
||||
+
|
||||
psci {
|
||||
compatible = "arm,psci-0.2";
|
||||
method = "smc";
|
||||
@@ -306,6 +315,27 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ r_ccu: clock@1f01400 {
|
||||
+ compatible = "allwinner,sun50i-a64-r-ccu";
|
||||
+ reg = <0x01f01400 0x100>;
|
||||
+ clocks = <&osc24M>, <&osc32k>, <&osc32000>;
|
||||
+ clock-names = "hosc", "losc", "iosc";
|
||||
+ #clock-cells = <1>;
|
||||
+ #reset-cells = <1>;
|
||||
+ };
|
||||
+
|
||||
+ r_pio: pinctrl@1f02c00 {
|
||||
+ compatible = "allwinner,sun50i-a64-r-pinctrl";
|
||||
+ reg = <0x01f02c00 0x400>;
|
||||
+ interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ clocks = <&r_ccu CLK_APB0_PIO>, <&osc24M>, <&osc32k>;
|
||||
+ clock-names = "apb", "hosc", "losc";
|
||||
+ gpio-controller;
|
||||
+ #gpio-cells = <3>;
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <3>;
|
||||
+ };
|
||||
+
|
||||
uart0: serial@1c28000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x01c28000 0x400>;
|
109
patch/kernel/sun50iw2-dev/add_sun50i_a64_spi.patch
Normal file
109
patch/kernel/sun50iw2-dev/add_sun50i_a64_spi.patch
Normal file
|
@ -0,0 +1,109 @@
|
|||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
index 02c0385..c0773d8 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
@@ -43,8 +43,10 @@
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/sun50i-a64-ccu.h>
|
||||
+#include <dt-bindings/clock/sun8i-r-ccu.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/reset/sun50i-a64-ccu.h>
|
||||
+#include <dt-bindings/reset/sun8i-r-ccu.h>
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
@@ -98,6 +100,13 @@
|
||||
clock-output-names = "osc32k";
|
||||
};
|
||||
|
||||
+ osc32000: osc32000_clk {
|
||||
+ #clock-cells = <0>;
|
||||
+ compatible = "fixed-clock";
|
||||
+ clock-frequency = <32000>;
|
||||
+ clock-output-names = "osc32000";
|
||||
+ };
|
||||
+
|
||||
psci {
|
||||
compatible = "arm,psci-0.2";
|
||||
method = "smc";
|
||||
@@ -276,6 +301,16 @@
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
+ spi0_pins: spi0 {
|
||||
+ pins = "PC0", "PC1", "PC2", "PC3";
|
||||
+ function = "spi0";
|
||||
+ };
|
||||
+
|
||||
+ spi1_pins: spi1 {
|
||||
+ pins = "PA15", "PA16", "PA14", "PA13";
|
||||
+ function = "spi1";
|
||||
+ };
|
||||
+
|
||||
uart0_pins_a: uart0@0 {
|
||||
pins = "PB8", "PB9";
|
||||
function = "uart0";
|
||||
@@ -306,6 +315,27 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ r_ccu: clock@1f01400 {
|
||||
+ compatible = "allwinner,sun50i-a64-r-ccu";
|
||||
+ reg = <0x01f01400 0x100>;
|
||||
+ clocks = <&osc24M>, <&osc32k>, <&osc32000>;
|
||||
+ clock-names = "hosc", "losc", "iosc";
|
||||
+ #clock-cells = <1>;
|
||||
+ #reset-cells = <1>;
|
||||
+ };
|
||||
+
|
||||
+ r_pio: pinctrl@1f02c00 {
|
||||
+ compatible = "allwinner,sun50i-a64-r-pinctrl";
|
||||
+ reg = <0x01f02c00 0x400>;
|
||||
+ interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ clocks = <&r_ccu CLK_APB0_PIO>, <&osc24M>, <&osc32k>;
|
||||
+ clock-names = "apb", "hosc", "losc";
|
||||
+ gpio-controller;
|
||||
+ #gpio-cells = <3>;
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <3>;
|
||||
+ };
|
||||
+
|
||||
uart0: serial@1c28000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x01c28000 0x400>;
|
||||
@@ -431,5 +487,34 @@
|
||||
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
+
|
||||
+ spi0: spi@01c68000 {
|
||||
+ compatible = "allwinner,sun8i-h3-spi";
|
||||
+ reg = <0x01c68000 0x1000>;
|
||||
+ interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
|
||||
+ clock-names = "ahb", "mod";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi0_pins>;
|
||||
+ resets = <&ccu RST_BUS_SPI0>;
|
||||
+ status = "disabled";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ };
|
||||
+
|
||||
+ spi1: spi@01c69000 {
|
||||
+ compatible = "allwinner,sun8i-h3-spi";
|
||||
+ reg = <0x01c69000 0x1000>;
|
||||
+ interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
|
||||
+ clock-names = "ahb", "mod";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi1_pins>;
|
||||
+ resets = <&ccu RST_BUS_SPI1>;
|
||||
+ status = "disabled";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ };
|
||||
+
|
||||
};
|
||||
};
|
|
@ -0,0 +1,196 @@
|
|||
From 035006342a2951d92d0150e5c44c8a7c48436360 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Nelson <robertcnelson@gmail.com>
|
||||
Date: Tue, 14 Mar 2017 09:54:27 -0500
|
||||
Subject: [PATCH] wandboard: uEnv.txt, bootz, n fixes
|
||||
|
||||
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
|
||||
---
|
||||
configs/wandboard_defconfig | 4 ++
|
||||
include/configs/wandboard.h | 125 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 127 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configs/wandboard_defconfig b/configs/wandboard_defconfig
|
||||
index f4c9b6bc76..b4f81d0a27 100644
|
||||
--- a/configs/wandboard_defconfig
|
||||
+++ b/configs/wandboard_defconfig
|
||||
@@ -18,6 +18,10 @@ CONFIG_BOARD_EARLY_INIT_F=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_EXT_SUPPORT=y
|
||||
CONFIG_SPL_I2C_SUPPORT=y
|
||||
+CONFIG_AUTOBOOT_KEYED=y
|
||||
+CONFIG_AUTOBOOT_PROMPT="Press SPACE to abort autoboot in %d seconds\n"
|
||||
+CONFIG_AUTOBOOT_DELAY_STR="d"
|
||||
+CONFIG_AUTOBOOT_STOP_STR=" "
|
||||
# CONFIG_CMD_IMLS is not set
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
CONFIG_CMD_MMC=y
|
||||
diff --git a/include/configs/wandboard.h b/include/configs/wandboard.h
|
||||
index 7e9757a480..a19b7efe95 100644
|
||||
--- a/include/configs/wandboard.h
|
||||
+++ b/include/configs/wandboard.h
|
||||
@@ -91,10 +91,16 @@
|
||||
"fdtfile=undefined\0" \
|
||||
"fdt_high=0xffffffff\0" \
|
||||
"initrd_high=0xffffffff\0" \
|
||||
+ "rdaddr=0x12A00000\0" \
|
||||
"fdt_addr_r=0x18000000\0" \
|
||||
"fdt_addr=0x18000000\0" \
|
||||
"ip_dyn=yes\0" \
|
||||
- "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
|
||||
+ "optargs=\0" \
|
||||
+ "cmdline=\0" \
|
||||
+ "mmcdev=0\0" \
|
||||
+ "mmcpart=1\0" \
|
||||
+ "mmcroot=/dev/mmcblk0p2 ro\0" \
|
||||
+ "mmcrootfstype=ext4 rootwait\0" \
|
||||
"update_sd_firmware_filename=u-boot.imx\0" \
|
||||
"update_sd_firmware=" \
|
||||
"if test ${ip_dyn} = yes; then " \
|
||||
@@ -109,6 +115,11 @@
|
||||
"mmc write ${loadaddr} 0x2 ${fw_sz}; " \
|
||||
"fi; " \
|
||||
"fi\0" \
|
||||
+ "mmcargs=setenv bootargs console=${console} " \
|
||||
+ "${optargs} " \
|
||||
+ "root=${mmcroot} " \
|
||||
+ "rootfstype=${mmcrootfstype} " \
|
||||
+ "${cmdline}\0" \
|
||||
"findfdt="\
|
||||
"if test $board_name = C1 && test $board_rev = MX6Q ; then " \
|
||||
"setenv fdtfile imx6q-wandboard.dtb; fi; " \
|
||||
@@ -120,6 +131,111 @@
|
||||
"setenv fdtfile imx6dl-wandboard-revb1.dtb; fi; " \
|
||||
"if test $fdtfile = undefined; then " \
|
||||
"echo WARNING: Could not determine dtb to use; fi; \0" \
|
||||
+ "loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \
|
||||
+ "loadrd=load ${devtype} ${bootpart} ${rdaddr} ${bootdir}/${rdfile}; setenv rdsize ${filesize}\0" \
|
||||
+ "loadfdt=echo loading ${fdtdir}/${fdtfile} ...; load ${devtype} ${bootpart} ${fdt_addr} ${fdtdir}/${fdtfile}\0" \
|
||||
+ "mmcboot=${devtype} dev ${mmcdev}; " \
|
||||
+ "if ${devtype} rescan; then " \
|
||||
+ "echo SD/MMC found on device ${mmcdev};" \
|
||||
+ "setenv bootpart ${mmcdev}:1; " \
|
||||
+ "echo Checking for: /uEnv.txt ...;" \
|
||||
+ "if test -e ${devtype} ${bootpart} /uEnv.txt; then " \
|
||||
+ "load ${devtype} ${bootpart} ${loadaddr} /uEnv.txt;" \
|
||||
+ "env import -t ${loadaddr} ${filesize};" \
|
||||
+ "echo Loaded environment from /uEnv.txt;" \
|
||||
+ "echo Checking if uenvcmd is set ...;" \
|
||||
+ "if test -n ${uenvcmd}; then " \
|
||||
+ "echo Running uenvcmd ...;" \
|
||||
+ "run uenvcmd;" \
|
||||
+ "fi;" \
|
||||
+ "fi; " \
|
||||
+ "echo Checking for: /boot/uEnv.txt ...;" \
|
||||
+ "for i in 1 2 3 4 5 6 7 ; do " \
|
||||
+ "setenv mmcpart ${i};" \
|
||||
+ "setenv bootpart ${mmcdev}:${mmcpart};" \
|
||||
+ "if test -e ${devtype} ${bootpart} /boot/uEnv.txt; then " \
|
||||
+ "load ${devtype} ${bootpart} ${loadaddr} /boot/uEnv.txt;" \
|
||||
+ "env import -t ${loadaddr} ${filesize};" \
|
||||
+ "echo Loaded environment from /boot/uEnv.txt;" \
|
||||
+ "if test -n ${dtb}; then " \
|
||||
+ "setenv fdtfile ${dtb};" \
|
||||
+ "echo Using: dtb=${fdtfile} ...;" \
|
||||
+ "fi;" \
|
||||
+ "echo Checking if uname_r is set in /boot/uEnv.txt...;" \
|
||||
+ "if test -n ${uname_r}; then " \
|
||||
+ "echo Running uname_boot ...;" \
|
||||
+ "part uuid ${devtype} ${bootpart} partuuid ;" \
|
||||
+ "setenv mmcroot PARTUUID=${partuuid} ro;" \
|
||||
+ "echo Using: mmcroot=${mmcroot} ...;" \
|
||||
+ "run uname_boot;" \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "done;" \
|
||||
+ "fi;\0" \
|
||||
+ "uname_boot="\
|
||||
+ "setenv bootdir /boot; " \
|
||||
+ "setenv bootfile vmlinuz-${uname_r}; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${bootdir}/${bootfile}; then " \
|
||||
+ "echo loading ${bootdir}/${bootfile} ...; "\
|
||||
+ "run loadimage;" \
|
||||
+ "setenv fdtdir /boot/dtbs/${uname_r}; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /usr/lib/linux-image-${uname_r}; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /lib/firmware/${uname_r}/device-tree; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /boot/dtb-${uname_r}; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /boot/dtbs; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /boot/dtb; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "setenv fdtdir /boot; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${fdtdir}/${fdtfile}; then " \
|
||||
+ "run loadfdt;" \
|
||||
+ "else " \
|
||||
+ "echo; echo unable to find ${fdtfile} ...; echo booting legacy ...;"\
|
||||
+ "run mmcargs;" \
|
||||
+ "echo debug: [${bootargs}] ... ;" \
|
||||
+ "echo debug: [bootz ${loadaddr}] ... ;" \
|
||||
+ "bootz ${loadaddr}; " \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "fi;" \
|
||||
+ "fi; " \
|
||||
+ "setenv rdfile initrd.img-${uname_r}; " \
|
||||
+ "if test -e ${devtype} ${bootpart} ${bootdir}/${rdfile}; then " \
|
||||
+ "echo loading ${bootdir}/${rdfile} ...; "\
|
||||
+ "run loadrd;" \
|
||||
+ "if test -n ${uuid}; then " \
|
||||
+ "setenv mmcroot UUID=${uuid} ro;" \
|
||||
+ "fi;" \
|
||||
+ "run mmcargs;" \
|
||||
+ "echo debug: [${bootargs}] ... ;" \
|
||||
+ "echo debug: [bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdt_addr}] ... ;" \
|
||||
+ "bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdt_addr}; " \
|
||||
+ "else " \
|
||||
+ "run mmcargs;" \
|
||||
+ "echo debug: [${bootargs}] ... ;" \
|
||||
+ "echo debug: [bootz ${loadaddr} - ${fdt_addr}] ... ;" \
|
||||
+ "bootz ${loadaddr} - ${fdt_addr}; " \
|
||||
+ "fi;" \
|
||||
+ "fi;\0" \
|
||||
"kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
|
||||
"pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
|
||||
"ramdisk_addr_r=0x13000000\0" \
|
||||
@@ -136,6 +252,11 @@
|
||||
|
||||
#define CONFIG_BOOTCOMMAND \
|
||||
"run findfdt; " \
|
||||
+ "setenv devtype mmc;" \
|
||||
+ "setenv mmcdev 0;" \
|
||||
+ "run mmcboot;" \
|
||||
+ "setenv mmcdev 1;" \
|
||||
+ "run mmcboot;" \
|
||||
"run distro_bootcmd"
|
||||
|
||||
#include <config_distro_bootcmd.h>
|
||||
@@ -154,7 +275,7 @@
|
||||
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
||||
|
||||
/* Environment organization */
|
||||
-#define CONFIG_ENV_SIZE (8 * 1024)
|
||||
+#define CONFIG_ENV_SIZE (10 * 1024)
|
||||
|
||||
#define CONFIG_ENV_IS_IN_MMC
|
||||
#define CONFIG_ENV_OFFSET (768 * 1024)
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
diff --git a/u-boot/arch/arm/dts/sun50i-a64-orangepiwin.dts b/u-boot/arch/arm/dts/sun50i-a64-orangepiwin.dts
|
||||
new file mode 100644
|
||||
index 0000000..68f889d
|
||||
--- /dev/null
|
||||
+++ b/u-boot/arch/arm/dts/sun50i-a64-orangepiwin.dts
|
||||
@@ -0,0 +1,158 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2016 ARM Ltd.
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
+#include "sun50i-a64.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "OrangePiWin";
|
||||
+ compatible = "orangepiwin", "allwinner,sun50i-a64";
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ memory {
|
||||
+ reg = <0x40000000 0x20000000>;
|
||||
+ };
|
||||
+
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart0;
|
||||
+ ethernet0 = &emac;
|
||||
+ };
|
||||
+
|
||||
+ soc {
|
||||
+ reg_vcc3v3: vcc3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 14 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ reg_usb1_vbus: usb1-vbus {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&usb1_vbus_pin_a>;
|
||||
+ regulator-name = "usb1-vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-boot-on;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 7 GPIO_ACTIVE_HIGH>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc0_pins>, <&mmc0_default_cd_pin>;
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ cd-gpios = <&pio 5 6 0>;
|
||||
+ cd-inverted;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pio {
|
||||
+ usb1_vbus_pin_a: usb1_vbus_pin@0 {
|
||||
+ allwinner,pins = "PD7";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbphy {
|
||||
+ usb1_vbus-supply = <®_usb1_vbus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&rgmii_pins>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ phy-handle = <&ext_rgmii_phy>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ mdio {
|
||||
+ ext_rgmii_phy: ethernet-phy@1 {
|
||||
+ reg = <0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+
|
||||
diff --git a/u-boot/arch/arm/dts/Makefile b/u-boot/arch/arm/dts/Makefile
|
||||
index 15f2a76..ad1fb3d 100644
|
||||
--- a/u-boot/arch/arm/dts/Makefile
|
||||
+++ b/u-boot/arch/arm/dts/Makefile
|
||||
@@ -284,7 +284,8 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
|
||||
sun50i-h5-orangepi-pc2.dtb
|
||||
dtb-$(CONFIG_MACH_SUN50I) += \
|
||||
sun50i-a64-pine64-plus.dtb \
|
||||
- sun50i-a64-pine64.dtb
|
||||
+ sun50i-a64-pine64.dtb \
|
||||
+ sun50i-a64-orangepiwin.dtb
|
||||
dtb-$(CONFIG_MACH_SUN9I) += \
|
||||
sun9i-a80-optimus.dtb \
|
||||
sun9i-a80-cubieboard4.dtb
|
||||
diff --git a/u-boot/configs/orangepiwin_defconfig b/u-boot/configs/orangepiwin_defconfig
|
||||
new file mode 100644
|
||||
index 0000000..68f889d
|
||||
--- /dev/null
|
||||
+++ b/u-boot/configs/orangepiwin_defconfig
|
||||
@@ -0,0 +1,13 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_MACH_SUN50I_64=y
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-orangepiwin"
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
+CONFIG_CONSOLE_MUX=y
|
||||
+CONFIG_SPL=y
|
||||
+# CONFIG_CMD_IMLS is not set
|
||||
+# CONFIG_CMD_FLASH is not set
|
||||
+# CONFIG_CMD_FPGA is not set
|
||||
+CONFIG_SUN8I_EMAC=y
|
||||
+CONFIG_USB_EHCI_HCD=y
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 5d56b3c..9c049f1 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -47,6 +47,17 @@ u_boot_a64_so:
|
||||
$(MAKE) -C u-boot ARCH=arm CROSS_COMPILE="$(ccache) aarch64-linux-gnu-"
|
||||
@cp u-boot/u-boot.bin u-boot.bin
|
||||
|
||||
+.PHONY: u_boot_a64_opiwin
|
||||
+u_boot_a64_opiwin:
|
||||
+ $(MAKE) -C u-boot clean
|
||||
+ $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE="$(ccache) arm-linux-gnueabihf-" sun50i_spl32_defconfig
|
||||
+ $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE="$(ccache) arm-linux-gnueabihf-"
|
||||
+ @cp u-boot/spl/sunxi-spl.bin sunxi-spl.bin
|
||||
+ $(MAKE) -C u-boot clean
|
||||
+ $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE="$(ccache) aarch64-linux-gnu-" orangepiwin_defconfig
|
||||
+ $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE="$(ccache) aarch64-linux-gnu-"
|
||||
+ @cp u-boot/u-boot.bin u-boot.bin
|
||||
+
|
||||
.PHONY: arm_trusted_firmware
|
||||
arm_trusted_firmware:
|
||||
$(MAKE) -C arm-trusted-firmware PLAT=sun50iw1p1 DEBUG=1 CROSS_COMPILE="$(ccache) aarch64-linux-gnu-" bl31
|
||||
@@ -72,6 +83,11 @@ pine64so: u_boot_a64_so arm_trusted_firmware
|
||||
@u-boot/tools/mkimage -E -f config.its u-boot.itb
|
||||
@aarch64-linux-gnu-objcopy --gap-fill=0xff -j .text -j .rodata -j .data -j .u_boot_list -j .rela.dyn -j .efi_runtime -j .efi_runtime_rel -I binary -O binary --pad-to=32768 --gap-fill=0xff sunxi-spl.bin u-boot-sunxi-with-spl.bin && cat u-boot.itb >> u-boot-sunxi-with-spl.bin
|
||||
|
||||
+.PHONY: orangepiwin
|
||||
+orangepiwin: u_boot_a64_opiwin arm_trusted_firmware
|
||||
+ @u-boot/tools/mkimage -E -f config.its u-boot.itb
|
||||
+ @aarch64-linux-gnu-objcopy --gap-fill=0xff -j .text -j .rodata -j .data -j .u_boot_list -j .rela.dyn -j .efi_runtime -j .efi_runtime_rel -I binary -O binary --pad-to=32768 --gap-fill=0xff sunxi-spl.bin u-boot-sunxi-with-spl.bin && cat u-boot.itb >> u-boot-sunxi-with-spl.bin
|
||||
+
|
||||
.PHONY: clean
|
||||
clean:
|
||||
[ -f u-boot/Makefile ] && $(MAKE) -C u-boot ARCH=arm clean
|
||||
@@ -86,6 +102,10 @@ pine64_plus_defconfig:
|
||||
pine64_so_defconfig:
|
||||
@cp blobs/sun50i_a64.its config.its
|
||||
|
||||
+.PHONY: orangepi_win_defconfig
|
||||
+orangepi_win_defconfig:
|
||||
+ @cp blobs/sun50i_a64_opiwin.its config.its
|
||||
+
|
||||
.PHONY: orangepi_pc2_defconfig
|
||||
orangepi_pc2_defconfig:
|
||||
@cp blobs/sun50i_h5.its config.its
|
|
@ -41,6 +41,37 @@ set_io_scheduler() {
|
|||
done
|
||||
} # set_io_scheduler
|
||||
|
||||
prepare_temp_monitoring() {
|
||||
# still an ugly hack but better do it just once at startup instead of every login
|
||||
[ -d /etc/armbianmonitor/datasources ] || mkdir -p -m775 /etc/armbianmonitor/datasources
|
||||
|
||||
# AXP209 PMIC check
|
||||
if [[ -f /sys/power/axp_pmu/pmu/temp ]]; then
|
||||
ln -fs /sys/power/axp_pmu/pmu/temp /etc/armbianmonitor/datasources/pmictemp
|
||||
elif [[ -f /sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034//temp1_input ]]; then
|
||||
ln -fs /sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input \
|
||||
/etc/armbianmonitor/datasources/pmictemp
|
||||
fi
|
||||
|
||||
# SoC temp: check standard location first
|
||||
if [[ -d "/sys/devices/virtual/thermal/thermal_zone0" ]]; then
|
||||
# mainline kernel, Armada 38x, sun50i legacy
|
||||
ln -fs /sys/devices/virtual/thermal/thermal_zone0/temp /etc/armbianmonitor/datasources/soctemp
|
||||
elif [[ -d "/sys/class/thermal/thermal_zone1" ]]; then
|
||||
# sun8i legacy
|
||||
ln -fs /sys/class/thermal/thermal_zone1/temp /etc/armbianmonitor/datasources/soctemp
|
||||
elif [[ -d "/sys/devices/virtual/thermal/thermal_zone1" ]]; then
|
||||
# S500
|
||||
ln -fs /sys/devices/virtual/thermal/thermal_zone1/temp /etc/armbianmonitor/datasources/soctemp
|
||||
elif [[ -d "/sys/class/thermal/thermal_zone2" ]]; then
|
||||
# RK3288 legacy
|
||||
ln -fs /sys/class/thermal/thermal_zone2/temp /etc/armbianmonitor/datasources/soctemp
|
||||
elif [[ -d "/sys/devices/platform/a20-tp-hwmon" ]]; then
|
||||
# sun7i legacy
|
||||
ln -fs /sys/devices/platform/a20-tp-hwmon/temp1_input /etc/armbianmonitor/datasources/soctemp
|
||||
fi
|
||||
} # prepare_temp_monitoring
|
||||
|
||||
prepare_board() {
|
||||
# prevent logrotate from compressing rotated logs when /var/log lives on compressed fs
|
||||
CheckDevice=$(for i in /var/log /var / ; do findmnt -n -o SOURCE $i && break ; done)
|
||||
|
@ -52,10 +83,10 @@ prepare_board() {
|
|||
|
||||
# IRQ distribution based on $HARDWARE and/or $BOARD, probably some sort of user feedback (leds)
|
||||
case ${HARDWARE} in
|
||||
Freescale) # i.MX6 boards, send Ethernet to cpu1, MMC to cpu2/cpu3 (when available)
|
||||
echo 2 >/proc/irq/$(awk -F":" "/ethernet/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
|
||||
Freescale) # i.MX6 boards, send Ethernet to cpu3, MMC to cpu1/cpu2 (when available)
|
||||
echo 2 >/proc/irq/$(awk -F":" "/mmc0/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
|
||||
echo 4 >/proc/irq/$(awk -F":" "/mmc1/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
|
||||
echo 8 >/proc/irq/$(awk -F":" "/mmc0/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
|
||||
echo 8 >/proc/irq/$(awk -F":" "/ethernet/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
|
||||
;;
|
||||
gs705a) # Roseapple Pi/LeMaker Guitar: send USB IRQs to cpu1/cpu2, DMA0 to cpu2 and Ethernet + SD card to cpu3
|
||||
echo 2 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
||||
|
@ -70,13 +101,13 @@ prepare_board() {
|
|||
echo 2 >/proc/irq/$i/smp_affinity
|
||||
done
|
||||
;;
|
||||
ODROID-C2) # send eth0 to cpu1, mmc/usb2 to cpu2 and usb1 to cpu3
|
||||
ODROID-C2) # send eth0 to cpu3, mmc/usb2 to cpu2 and usb1 to cpu1
|
||||
# Basics: http://forum.odroid.com/viewtopic.php?f=115&t=8121#p65777
|
||||
echo 1 >/proc/irq/$(awk -F":" "/eth0/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity_list
|
||||
echo 3 >/proc/irq/$(awk -F":" "/eth0/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity_list
|
||||
for i in $(awk -F':' '/sd_emmc|usb2/{print $1}' /proc/interrupts); do
|
||||
echo 2 >/proc/irq/$i/smp_affinity_list
|
||||
done
|
||||
echo 3 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity_list
|
||||
echo 1 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity_list
|
||||
;;
|
||||
ODROID-XU3|EXYNOS) # ODROID XU3/XU4
|
||||
echo 2 >/proc/irq/$(awk -F":" "/usb2/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
|
||||
|
@ -94,13 +125,13 @@ prepare_board() {
|
|||
sun4i|sun5i) # only one core, nothing to improve
|
||||
:
|
||||
;;
|
||||
sun6i) # Banana Pi M2: process eth0 on cpu1, SDIO on cpu2, USB on cpu3
|
||||
echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' </proc/interrupts | sed 's/\ //g')/smp_affinity
|
||||
sun6i) # Banana Pi M2: process eth0 on cpu3, SDIO on cpu2, USB on cpu1
|
||||
echo 8 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' </proc/interrupts | sed 's/\ //g')/smp_affinity
|
||||
for i in $(awk -F':' '/sunxi-mmc/{print $1}' /proc/interrupts); do
|
||||
echo 4 >/proc/irq/$i/smp_affinity
|
||||
done
|
||||
for i in $(awk -F':' '/hcd:usb/{print $1}' /proc/interrupts); do
|
||||
echo 8 >/proc/irq/$i/smp_affinity
|
||||
echo 2 >/proc/irq/$i/smp_affinity
|
||||
done
|
||||
;;
|
||||
sun7i) # try to redistribute eth0 irq to dedicated core
|
||||
|
@ -261,6 +292,7 @@ case $1 in
|
|||
|
||||
# hardware preparation
|
||||
prepare_board &
|
||||
prepare_temp_monitoring &
|
||||
|
||||
# display message, log hardware id to file, write log
|
||||
echo -e "[\e[0;32m ok \x1B[0m] Starting ARM hardware info: $ID (${VERSION})"
|
||||
|
|
|
@ -104,7 +104,7 @@ create_armbian()
|
|||
|
||||
# stop running services
|
||||
StopRunningServices "nfs-|smbd|nmbd|winbind|ftpd|netatalk|monit|cron|webmin|rrdcached" >> $logfile
|
||||
StopRunningServices "log2ram|postgres|mariadb|mysql|postfix|mail|nginx|apache|snmpd" >> $logfile
|
||||
StopRunningServices "log2ram|folder2ram|postgres|mariadb|mysql|postfix|mail|nginx|apache|snmpd" >> $logfile
|
||||
echo -e "\n" >> $logfile
|
||||
logfile="/mnt/rootfs/var/log/nand-sata-install.log"
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# 30-sysinfo - generate the system information
|
||||
# Copyright (c) 2015 Igor Pecovnik
|
||||
# Copyright (c) 2015-2017 Igor Pecovnik
|
||||
|
||||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
|
||||
THIS_SCRIPT="sysinfo"
|
||||
MOTD_DISABLE=""
|
||||
|
@ -17,24 +19,6 @@ storage=/dev/sda1
|
|||
|
||||
# don't edit below here
|
||||
|
||||
function displaytime {
|
||||
# we need dedicated function
|
||||
local T=$(cat /proc/uptime | awk '{print $1}' | sed 's/[.].*//')
|
||||
local D=$((T/60/60/24))
|
||||
local H=$((T/60/60%24))
|
||||
local M=$((T/60%60))
|
||||
local S=$((T%60))
|
||||
local time=$S
|
||||
time=$S" sec"
|
||||
(( $M > 0 )) && time=$M" min"
|
||||
(( $H > 0 )) && time=$H" hour"
|
||||
(( $H > 1 )) && time=$H" hours"
|
||||
(( $D > 0 )) && time=$D" day"
|
||||
(( $D > 1 )) && time=$D" days"
|
||||
printf "Up time: "
|
||||
printf "\x1B[92m%s\x1B[0m\t\t" "$time"
|
||||
}
|
||||
|
||||
function display() {
|
||||
# $1=name $2=value $3=red_limit $4=minimal_show_limit $5=unit $6=after $7=acs/desc{
|
||||
# battery red color is opposite, lower number
|
||||
|
@ -46,122 +30,128 @@ function display() {
|
|||
printf "%-11s%s\t" "$6"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
} # display
|
||||
|
||||
# Battery info for Allwinner
|
||||
# kernel 4.4+
|
||||
axp_dir="/sys/power/axp_pmu"
|
||||
if [[ -e "$axp_dir" ]]; then
|
||||
status_battery_connected=$(cat $axp_dir/battery/connected)
|
||||
if [[ "$status_battery_connected" == "1" ]]; then
|
||||
status_battery_charging=$(cat $axp_dir/charger/charging)
|
||||
status_ac_connect=$(cat $axp_dir/ac/connected)
|
||||
battery_percent=$(cat $axp_dir/battery/capacity)
|
||||
# dispay charging / percentage
|
||||
if [[ "$status_ac_connect" == "1" && "$battery_percent" -lt "100" ]]; then
|
||||
status_battery_text=" charging"
|
||||
elif [[ "$status_ac_connect" == "1" && "$battery_percent" -eq "100" ]]; then
|
||||
status_battery_text=" charged"
|
||||
else
|
||||
status_battery_text=" discharging"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# legacy kernel
|
||||
axp_dir="/sys/class/power_supply"
|
||||
if [[ -e "$axp_dir" && -e "$axp_dir/battery" ]]; then
|
||||
if [[ (("$(cat $axp_dir/battery/voltage_now)" -gt "5" )) ]]; then
|
||||
status_battery_text=" "$(cat $axp_dir/battery/status | awk '{print tolower($0)}')
|
||||
battery_percent=$(cat $axp_dir/battery/capacity)
|
||||
function getboardtemp() {
|
||||
if [ -f /etc/armbianmonitor/datasources/soctemp ]; then
|
||||
read raw_temp </etc/armbianmonitor/datasources/soctemp
|
||||
if [ ${raw_temp} -le 200 ]; then
|
||||
# Allwinner legacy kernels output degree C
|
||||
board_temp=${raw_temp}
|
||||
else
|
||||
# Marvell gets special treatment for whatever reasons
|
||||
grep -qi Marvell /proc/cpuinfo && \
|
||||
board_temp=$(( $(awk '{printf("%d",$1/1000)}' <<<${raw_temp}) - 30 )) || \
|
||||
board_temp=$(awk '{printf("%d",$1/1000)}' <<<${raw_temp})
|
||||
fi
|
||||
elif [ -f /etc/armbianmonitor/datasources/pmictemp ]; then
|
||||
# fallback to PMIC temperature
|
||||
board_temp=$(awk '{printf("%d",$1/1000)}' </etc/armbianmonitor/datasources/pmictemp)
|
||||
fi
|
||||
fi
|
||||
} # getboardtemp
|
||||
|
||||
load=$(cat /proc/loadavg | awk '{print $1}')
|
||||
# workaround that it works on old and new
|
||||
LANG=en_US.UTF-8 free -w &> /dev/null
|
||||
if [[ $? -ne 0 ]]; then
|
||||
memory_usage=$(LANG=en_US.UTF-8 free | awk '/Mem/ {printf("%.0f",(($2-($4+$6+$7))/$2) * 100)}')
|
||||
else
|
||||
memory_usage=$(LANG=en_US.UTF-8 free -w | awk '/Mem/ {printf("%.0f",(($2-($4+$6+$7))/$2) * 100)}')
|
||||
fi
|
||||
memory_total=$(LANG=en_US.UTF-8 free -m | awk '/Mem/ {print $(2)}')
|
||||
users=$(users | wc -w)
|
||||
swap_usage=$(LANG=en_US.UTF-8 free -m | ( awk '/Swap/ { printf("%3.0f", $3/$2*100) }' 2>/dev/null || echo 0 ) | sed 's/ //g')
|
||||
swap_usage=${swap_usage//[!0-9]/} # to remove alfanumeric if swap not used
|
||||
swap_total=$(LANG=en_US.UTF-8 free -m | awk '/Swap/ {print $(2)}')
|
||||
ip_address=$(hostname -I | tr " " "\n" | grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" | tail -n2 | tr "\n" " ")
|
||||
ip_address=$(echo $ip_address | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed 's/ /,/g')
|
||||
root_usage=$(df -h / | awk '/\// {print $(NF-1)}' | sed 's/%//g')
|
||||
root_total=$(df -h / | awk '/\// {print $(NF-4)}')
|
||||
if [ -e "$storage" ]; then
|
||||
storage_usage=$(df -h $storage | grep $storage | awk '/\// {print $(NF-1)}' | sed 's/%//g')
|
||||
storage_total=$(df -h $storage | grep $storage | awk '/\// {print $(NF-4)}')
|
||||
[[ "$storage" == */sd* ]] && hdd_temp=$(hddtemp -u C -nq $storage)
|
||||
fi
|
||||
|
||||
# read temperature from different locations and create a symlink to a unique location
|
||||
[ -d /etc/armbianmonitor/datasources ] || mkdir -p -m775 /etc/armbianmonitor/datasources
|
||||
|
||||
# deal with the exceptions first: legacy Allwinner variants (if SoC is not available take PMU)
|
||||
for tempsource in /sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034 /sys/devices/platform/a20-tp-hwmon ; do
|
||||
if [ -d ${tempsource} ]; then
|
||||
board_temp=$(awk '{printf("%d",$1/1000)}' ${tempsource}/temp1_input)
|
||||
ln -fs ${tempsource}/temp1_input /etc/armbianmonitor/datasources/soctemp
|
||||
function batteryinfo() {
|
||||
# Battery info for Allwinner
|
||||
mainline_dir="/sys/power/axp_pmu"
|
||||
legacy_dir="/sys/class/power_supply"
|
||||
if [[ -e "$mainline_dir" ]]; then
|
||||
read status_battery_connected < $mainline_dir/battery/connected
|
||||
if [[ "$status_battery_connected" == "1" ]]; then
|
||||
read status_battery_charging < $mainline_dir/charger/charging
|
||||
read status_ac_connect < $mainline_dir/ac/connected
|
||||
read battery_percent< $mainline_dir/battery/capacity
|
||||
# dispay charging / percentage
|
||||
if [[ "$status_ac_connect" == "1" && "$battery_percent" -lt "100" ]]; then
|
||||
status_battery_text=" charging"
|
||||
elif [[ "$status_ac_connect" == "1" && "$battery_percent" -eq "100" ]]; then
|
||||
status_battery_text=" charged"
|
||||
else
|
||||
status_battery_text=" discharging"
|
||||
fi
|
||||
fi
|
||||
elif [[ -e "$legacy_dir/battery" ]]; then
|
||||
if [[ (("$(read < $legacy_dir/battery/voltage_now)" -gt "5" )) ]]; then
|
||||
status_battery_text=" "$(awk '{print tolower($0)}' < $legacy_dir/battery/status)
|
||||
read battery_percent <$legacy_dir/battery/capacity
|
||||
fi
|
||||
fi
|
||||
done
|
||||
} # batteryinfo
|
||||
|
||||
# S500 and RK3288 legacy kernels
|
||||
for tempsource in /sys/devices/virtual/thermal/thermal_zone1 /sys/class/thermal/thermal_zone2 ; do
|
||||
if [ -d ${tempsource} ]; then
|
||||
board_temp=$(awk '{printf("%d",$1/1000)}' ${tempsource}/temp)
|
||||
ln -fs ${tempsource}/temp /etc/armbianmonitor/datasources/soctemp
|
||||
fi
|
||||
done
|
||||
|
||||
# where it should be
|
||||
if [[ -d "/sys/devices/virtual/thermal/thermal_zone0/" ]]; then
|
||||
ln -fs /sys/devices/virtual/thermal/thermal_zone0/temp /etc/armbianmonitor/datasources/soctemp
|
||||
case $(cat /sys/devices/virtual/thermal/thermal_zone0/type) in
|
||||
cpu_thermal|armada_thermal) # mainline or Armada LTS kernel
|
||||
board_temp=$(awk '{printf("%d",$1/1000)}' </sys/devices/virtual/thermal/thermal_zone0/temp)
|
||||
;;
|
||||
soc_thermal) # pine64 legacy
|
||||
read board_temp </sys/devices/virtual/thermal/thermal_zone0/temp
|
||||
function ambienttemp() {
|
||||
# read ambient temperature from USB device if available
|
||||
amb_temp=$(temper -c 2>/dev/null)
|
||||
case ${amb_temp} in
|
||||
*"find the USB device"*)
|
||||
echo ""
|
||||
;;
|
||||
*)
|
||||
amb_temp=$(awk '{print $NF}' <<<$amb_temp | sed 's/C//g')
|
||||
echo -n "scale=1;${amb_temp}/1" | grep -oE "\-?[[:digit:]]+.[[:digit:]]"
|
||||
esac
|
||||
fi
|
||||
} # ambienttemp
|
||||
|
||||
# H3 based boards, legacy kernel
|
||||
source /etc/armbian-release
|
||||
if [[ -d "/sys/class/thermal/thermal_zone1" && ${LINUXFAMILY} == "sun8i" ]]; then
|
||||
read board_temp </sys/class/thermal/thermal_zone1/temp
|
||||
ln -fs /sys/devices/virtual/thermal/thermal_zone1/temp /etc/armbianmonitor/datasources/soctemp
|
||||
fi
|
||||
function get_ip_addresses() {
|
||||
# return up to 2 IPv4 address(es) comma separated
|
||||
hostname -I | tr " " "\n" | \
|
||||
grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" | \
|
||||
tail -n2 | sed ':a;N;$!ba;s/\n/,/g'
|
||||
} # get_ip_addresses
|
||||
|
||||
# read ambient temperature from USB device
|
||||
if [[ -n $(which temper) && $(dpkg --print-architecture) == armhf ]]; then
|
||||
amb_temp=$(temper -c)
|
||||
if echo $amb_temp | egrep -qv "Couldn't find the USB device"; then
|
||||
amb_temp=$(echo $amb_temp | awk '{print $NF}' | sed 's/C//g')
|
||||
amb_temp=$(echo "scale=1;${amb_temp}/1" | grep -oE "\-?[[:digit:]]+.[[:digit:]]")
|
||||
else
|
||||
amb_temp=""
|
||||
fi
|
||||
fi
|
||||
function storage_info() {
|
||||
# storage info
|
||||
RootInfo=$(df -h /)
|
||||
root_usage=$(awk '/\// {print $(NF-1)}' <<<${RootInfo} | sed 's/%//g')
|
||||
root_total=$(awk '/\// {print $(NF-4)}' <<<${RootInfo})
|
||||
StorageInfo=$(df -h $storage | grep $storage)
|
||||
if [ -n "${StorageInfo}" ]; then
|
||||
storage_usage=$(awk '/\// {print $(NF-1)}' <<<${StorageInfo} | sed 's/%//g')
|
||||
storage_total=$(awk '/\// {print $(NF-4)}' <<<${StorageInfo})
|
||||
[[ "$storage" == */sd* ]] && hdd_temp=$(hddtemp -u C -nq $storage)
|
||||
fi
|
||||
} # storage_info
|
||||
|
||||
display "System load" "$load" "1" "0" "" ""
|
||||
displaytime
|
||||
display "Local users" "$users" "3" "2" ""
|
||||
# query various systems and send some stuff to the background for overall faster execution.
|
||||
# Works only with ambienttemp and batteryinfo since A20 is slow enough :)
|
||||
amb_temp=$(ambienttemp &)
|
||||
ip_address=$(get_ip_addresses &)
|
||||
batteryinfo
|
||||
storage_info
|
||||
getboardtemp
|
||||
critical_load=$(( 1 + $(grep -c processor /proc/cpuinfo) / 2 ))
|
||||
|
||||
# get uptime, logged in users and load in one take
|
||||
UptimeString=$(uptime | tr -d ',')
|
||||
time=$(awk -F" " '{print $3" "$4}' <<<"${UptimeString}")
|
||||
load="$(awk -F"average: " '{print $2}'<<<"${UptimeString}")"
|
||||
users="$(awk -F" user" '{print $1}'<<<"${UptimeString}")"
|
||||
case ${time} in
|
||||
1:*) # 1-2 hours
|
||||
time=$(awk -F" " '{print $3" hour"}' <<<"${UptimeString}")
|
||||
;;
|
||||
*:*) # 2-24 hours
|
||||
time=$(awk -F" " '{print $3" hours"}' <<<"${UptimeString}")
|
||||
;;
|
||||
esac
|
||||
|
||||
# memory and swap
|
||||
mem_info=$(LANG=en_US.UTF-8 free -w 2>/dev/null | grep "^Mem" || LANG=en_US.UTF-8 free | grep "^Mem")
|
||||
memory_usage=$(awk '{printf("%.0f",(($2-($4+$6+$7))/$2) * 100)}' <<<${mem_info})
|
||||
memory_total=$(awk '{printf("%d",$2/1024)}' <<<${mem_info})
|
||||
swap_info=$(LANG=en_US.UTF-8 free -m | grep "^Swap")
|
||||
swap_usage=$( (awk '/Swap/ { printf("%3.0f", $3/$2*100) }' <<<${swap_info} 2>/dev/null || echo 0) | tr -c -d '[:digit:]')
|
||||
swap_total=$(awk '{print $(2)}' <<<${swap_info})
|
||||
|
||||
# display info
|
||||
display "System load" "${load%% *}" "${critical_load}" "0" "" "${load#* }"
|
||||
printf "Up time: \x1B[92m%s\x1B[0m\t\t" "$time"
|
||||
display "Local users" "${users##* }" "3" "2" ""
|
||||
echo "" # fixed newline
|
||||
display "Memory usage" "$memory_usage" "70" "0" " %" " of $memory_total""Mb"
|
||||
display "Memory usage" "$memory_usage" "70" "0" " %" " of ${memory_total}MB"
|
||||
display "Swap usage" "$swap_usage" "10" "0" " %" " of $swap_total""Mb"
|
||||
printf "IP: "
|
||||
printf "\x1B[92m%s\x1B[0m" "$ip_address"
|
||||
echo "" # fixed newline
|
||||
a=0;b=0;c=0
|
||||
# adjustment for marvell armada. Readings were done on heatsink
|
||||
[[ "$(cat /proc/cpuinfo | grep Marvell)" != "" && $board_temp -gt "60" ]] && board_temp=$(($board_temp-30))
|
||||
display "CPU temp" "$board_temp" "45" "0" "°C" "" ; a=$?
|
||||
display "HDD temp" "$hdd_temp" "45" "0" "°C" "" ; b=$?
|
||||
display "Ambient temp" "$amb_temp" "40" "0" "°C" "" ; c=$?
|
||||
|
@ -171,3 +161,4 @@ display "storage/" "$storage_usage" "90" "1" "%" " of $storage_total"
|
|||
display "Battery" "$battery_percent" "20" "1" "%" "$status_battery_text"
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
|
|
3
scripts/update-motd.d/41-armbian-config
Normal file
3
scripts/update-motd.d/41-armbian-config
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo -e "[\e[31m General system configuration\e[0m: \e[1marmbian-config\e[0m ]\n"
|
|
@ -4,8 +4,4 @@
|
|||
|
||||
printf "New to Armbian? Check the documentation first: \e[0;92mhttps://docs.armbian.com\x1B[0m\n\n"
|
||||
|
||||
if [ -f "/usr/bin/armbian-config" ]; then
|
||||
printf "General system configuration: \e[1marmbian-config\e[0m\n\n"
|
||||
fi
|
||||
|
||||
(sleep 1 && rm "$0") &
|
Loading…
Add table
Reference in a new issue