From ab786b312fd46cf620ecc13a5954dc7e7608f313 Mon Sep 17 00:00:00 2001 From: ThomasKaiser Date: Tue, 5 Sep 2017 04:48:57 -0700 Subject: [PATCH] UAS blacklist broken USB disk enclosures --- config/bootscripts/boot-cubox.cmd | 2 +- config/bootscripts/boot-marvell.cmd | 2 +- .../bootscripts/boot-odroid-xu4-default.ini | 2 +- config/bootscripts/boot-rk3328.cmd | 2 +- config/bootscripts/boot-rockchip.cmd | 2 +- config/bootscripts/boot-sun50i-next.cmd | 2 +- config/bootscripts/boot-sunxi.cmd | 2 +- config/bootscripts/boot-udoo-neo.cmd | 4 +-- config/bootscripts/boot-udoo.cmd | 2 +- packages/bsp/common/etc/init.d/armhwinfo | 26 +++++++++++++++++++ 10 files changed, 36 insertions(+), 10 deletions(-) diff --git a/config/bootscripts/boot-cubox.cmd b/config/bootscripts/boot-cubox.cmd index ea1e876ab7..74c4a36fc7 100644 --- a/config/bootscripts/boot-cubox.cmd +++ b/config/bootscripts/boot-cubox.cmd @@ -29,7 +29,7 @@ fi if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=tty1"; fi if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "${consoleargs} console=ttymxc0,115200"; fi -setenv bootargs "root=${rootdev} rootfstype=${rootfstype} rootwait ${consoleargs} consoleblank=0 video=mxcfb0:dev=hdmi,${disp_mode},if=RGB24,bpp=32 rd.dm=0 rd.luks=0 rd.lvm=0 raid=noautodetect pci=nomsi vt.global_cursor_default=0 loglevel=${verbosity} ${extraargs}" +setenv bootargs "root=${rootdev} rootfstype=${rootfstype} rootwait ${consoleargs} consoleblank=0 video=mxcfb0:dev=hdmi,${disp_mode},if=RGB24,bpp=32 rd.dm=0 rd.luks=0 rd.lvm=0 raid=noautodetect pci=nomsi vt.global_cursor_default=0 loglevel=${verbosity} usb-storage.quirks=${usbstoragequirks} ${extraargs}" ext2load mmc 0 ${fdt_addr} /boot/dtb/${fdt_file} || fatload mmc 0 ${fdt_addr} /dtb/${fdt_file} || ext2load mmc 0 ${fdt_addr} /dtb/${fdt_file} ext2load mmc 0 ${ramdisk_addr} /boot/uInitrd || fatload mmc 0 ${ramdisk_addr} uInitrd || ext2load mmc 0 ${ramdisk_addr} uInitrd ext2load mmc 0 ${loadaddr} /boot/zImage || fatload mmc 0 ${loadaddr} zImage || ext2load mmc 0 ${loadaddr} zImage diff --git a/config/bootscripts/boot-marvell.cmd b/config/bootscripts/boot-marvell.cmd index 78d2d0caac..205ba6c9d6 100644 --- a/config/bootscripts/boot-marvell.cmd +++ b/config/bootscripts/boot-marvell.cmd @@ -26,7 +26,7 @@ if load ${boot_interface} 0:1 ${loadaddr} ${prefix}armbianEnv.txt; then env import -t ${loadaddr} ${filesize} fi -setenv bootargs "console=ttyS0,115200 root=${rootdev} rootwait rootfstype=${rootfstype} ubootdev=${boot_interface} scandelay loglevel=${verbosity} ${extraargs}" +setenv bootargs "console=ttyS0,115200 root=${rootdev} rootwait rootfstype=${rootfstype} ubootdev=${boot_interface} scandelay loglevel=${verbosity} usb-storage.quirks=${usbstoragequirks} ${extraargs}" load ${boot_interface} 0:1 ${fdt_addr} ${prefix}dtb/${fdtfile} load ${boot_interface} 0:1 ${ramdisk_addr_r} ${prefix}uInitrd diff --git a/config/bootscripts/boot-odroid-xu4-default.ini b/config/bootscripts/boot-odroid-xu4-default.ini index c0c1cef82e..30cb3dadb5 100644 --- a/config/bootscripts/boot-odroid-xu4-default.ini +++ b/config/bootscripts/boot-odroid-xu4-default.ini @@ -256,7 +256,7 @@ fdt addr 0x44000000 if test "${cecenable}" = "false"; then fdt rm /cec@101B0000; fi # final boot args -setenv bootargs "${bootrootfs} ${videoconfig} smsc95xx.macaddr=${macaddr} governor=${governor} ${hdmi_phy_control} ${extraargs}" +setenv bootargs "${bootrootfs} ${videoconfig} smsc95xx.macaddr=${macaddr} governor=${governor} ${hdmi_phy_control} usb-storage.quirks=${usbstoragequirks} ${extraargs}" # set DDR frequency dmc ${ddr_freq} diff --git a/config/bootscripts/boot-rk3328.cmd b/config/bootscripts/boot-rk3328.cmd index 4f7c7d915c..6b75009969 100644 --- a/config/bootscripts/boot-rk3328.cmd +++ b/config/bootscripts/boot-rk3328.cmd @@ -27,7 +27,7 @@ if test "${console}" = "serial" || test "${console}" = "both"; then setenv conso # get PARTUUID of first partition on SD/eMMC the boot script was loaded from if test "${devtype}" = "mmc"; then part uuid mmc ${devnum}:1 partuuid; fi -setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ${extraargs} ${extraboardargs}" +setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}" if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory swapaccount=1"; fi diff --git a/config/bootscripts/boot-rockchip.cmd b/config/bootscripts/boot-rockchip.cmd index aa2e5ab444..dd27fb2f3e 100644 --- a/config/bootscripts/boot-rockchip.cmd +++ b/config/bootscripts/boot-rockchip.cmd @@ -16,7 +16,7 @@ if load ${devtype} ${devnum}:1 ${ramdisk_addr_r} /boot/armbianEnv.txt || load ${ env import -t ${ramdisk_addr_r} ${filesize} fi -setenv bootargs "consoleblank=0 scandelay root=${rootdev} rw console=${console} rootfstype=ext4 loglevel=${verbosity} rootwait ${extraargs}" +setenv bootargs "consoleblank=0 scandelay root=${rootdev} rw console=${console} rootfstype=ext4 loglevel=${verbosity} rootwait usb-storage.quirks=${usbstoragequirks} ${extraargs}" ext4load ${devtype} ${devnum}:1 ${fdt_addr_r} /boot/dtb/${fdt_file} || fatload ${devtype} ${devnum}:1 ${fdt_addr_r} dtb/${fdt_file} || ext4load ${devtype} ${devnum}:1 ${fdt_addr_r} dtb/${fdt_file} ext4load ${devtype} ${devnum}:1 ${ramdisk_addr_r} /boot/uInitrd || fatload ${devtype} ${devnum}:1 ${ramdisk_addr_r} uInitrd || ext4load ${devtype} ${devnum}:1 ${ramdisk_addr_r} uInitrd ext4load ${devtype} ${devnum}:1 ${kernel_addr_r} /boot/zImage || fatload ${devtype} ${devnum}:1 ${kernel_addr_r} zImage || ext4load ${devtype} ${devnum}:1 ${kernel_addr_r} zImage diff --git a/config/bootscripts/boot-sun50i-next.cmd b/config/bootscripts/boot-sun50i-next.cmd index 762ea5c67f..695e56f163 100644 --- a/config/bootscripts/boot-sun50i-next.cmd +++ b/config/bootscripts/boot-sun50i-next.cmd @@ -31,7 +31,7 @@ if test "${console}" = "serial" || test "${console}" = "both"; then setenv conso # mmc 0 is always mapped to device u-boot (2016.09+) was loaded from if test "${devtype}" = "mmc"; then part uuid mmc 0:1 partuuid; fi -setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ${extraargs} ${extraboardargs}" +setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}" if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory swapaccount=1"; fi diff --git a/config/bootscripts/boot-sunxi.cmd b/config/bootscripts/boot-sunxi.cmd index ec72b63a77..e5c93ec39d 100644 --- a/config/bootscripts/boot-sunxi.cmd +++ b/config/bootscripts/boot-sunxi.cmd @@ -35,7 +35,7 @@ if test "${console}" = "serial" || test "${console}" = "both"; then setenv conso # mmc 0 is always mapped to device u-boot (2016.09+) was loaded from if test "${devtype}" = "mmc"; then part uuid mmc 0:1 partuuid; fi -setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} hdmi.audio=EDID:0 disp.screen0_output_mode=${disp_mode} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ubootsource=${devtype} ${extraargs} ${extraboardargs}" +setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} hdmi.audio=EDID:0 disp.screen0_output_mode=${disp_mode} panic=10 consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ubootsource=${devtype} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}" if test "${disp_mem_reserves}" = "off"; then setenv bootargs "${bootargs} sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_fb_mem_reserve=16"; fi if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory swapaccount=1"; fi diff --git a/config/bootscripts/boot-udoo-neo.cmd b/config/bootscripts/boot-udoo-neo.cmd index 136770392c..0208f777e6 100644 --- a/config/bootscripts/boot-udoo-neo.cmd +++ b/config/bootscripts/boot-udoo-neo.cmd @@ -24,7 +24,7 @@ fi if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=tty1"; fi if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "${consoleargs} console=ttymxc0,115200"; fi -setenv bootargs "root=${rootdev} rootfstype=ext4 rootwait ${consoleargs} rd.dm=0 rd.luks=0 rd.lvm=0 rw uart_from_osc loglevel=${verbosity} ${extraargs}" +setenv bootargs "root=${rootdev} rootfstype=ext4 rootwait ${consoleargs} rd.dm=0 rd.luks=0 rd.lvm=0 rw uart_from_osc loglevel=${verbosity} usb-storage.quirks=${usbstoragequirks} ${extraargs}" ext2load mmc ${mmcdev}:${mmcpart} ${fw_load_addr} /boot/bin/m4startup.fw ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} /boot/zImage @@ -34,4 +34,4 @@ ext2load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /boot/dtb/${fdt_file} bootz ${loadaddr} ${ramdisk_addr} ${fdt_addr} # Recompile with: -# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr \ No newline at end of file +# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr diff --git a/config/bootscripts/boot-udoo.cmd b/config/bootscripts/boot-udoo.cmd index 7eda98921f..f38e85eff5 100644 --- a/config/bootscripts/boot-udoo.cmd +++ b/config/bootscripts/boot-udoo.cmd @@ -24,7 +24,7 @@ if test "${console}" = "display" || test "${console}" = "both"; then setenv cons if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "${consoleargs} console=ttymxc1,115200"; fi -setenv bootargs "root=${rootdev} rootfstype=ext4 rootwait ${consoleargs} video=mxcfb0:dev=hdmi,${disp_mode},if=RGB24,bpp=32 rd.dm=0 rd.luks=0 rd.lvm=0 raid=noautodetect pci=nomsi ahci_imx.hotplug=1 vt.global_cursor_default=0 loglevel=${verbosity} ${extraargs}" +setenv bootargs "root=${rootdev} rootfstype=ext4 rootwait ${consoleargs} video=mxcfb0:dev=hdmi,${disp_mode},if=RGB24,bpp=32 rd.dm=0 rd.luks=0 rd.lvm=0 raid=noautodetect pci=nomsi ahci_imx.hotplug=1 vt.global_cursor_default=0 loglevel=${verbosity} usb-storage.quirks=${usbstoragequirks} usb-storage.quirks=${usbstoragequirks} ${extraargs}" ext4load mmc 0 ${ramdisk_addr} /boot/uInitrd || fatload mmc 0 ${ramdisk_addr} uInitrd || ext4load mmc 0 ${ramdisk_addr} uInitrd ext4load mmc 0 ${loadaddr} /boot/zImage || fatload mmc 0 ${loadaddr} zImage diff --git a/packages/bsp/common/etc/init.d/armhwinfo b/packages/bsp/common/etc/init.d/armhwinfo index 9098669fab..fb9141131c 100755 --- a/packages/bsp/common/etc/init.d/armhwinfo +++ b/packages/bsp/common/etc/init.d/armhwinfo @@ -353,6 +353,31 @@ check_sd_card_speed() { fi } # check_sd_card_speed +add_usb_storage_quirks() { + # check for /boot/armbianEnv.txt existence + [ -f /boot/armbianEnv.txt ] || return + + # preserve old contents if existent + awk -F"=" '/^usbstoragequirks/ {print $2}' ${TMPFILE} + + # UAS blacklist Norelsys NS1068X and NS1066X since broken. Can be removed once + # they're blacklisted upstream + [ -s ${TMPFILE} ] || echo "0x2537:0x1066:u,0x2537:0x1068:u" >${TMPFILE} + + # check for connected Seagate or WD HDD enclosures and blacklist them all + lsusb | awk -F" " '{print "0x"$6}' | sed 's/:/:0x/' | sort | uniq | while read ; do + case ${REPLY} in + "0x0bc2:"*|"0x1058:"*) + grep -q "${REPLY}" ${TMPFILE} || sed -i "1 s/\$/,${REPLY}:u/" ${TMPFILE} + ;; + esac + done + + read USBQUIRKS <${TMPFILE} + sed -i '/^usbstoragequirks/d' /boot/armbianEnv.txt + echo "usbstoragequirks=${USBQUIRKS}" >>/boot/armbianEnv.txt +} # add_usb_storage_quirks + case $1 in *start*) # set optimal disk scheduler settings @@ -367,6 +392,7 @@ case $1 in # hardware preparation prepare_board & prepare_temp_monitoring & + add_usb_storage_quirks & # display message, log hardware id to file, write log echo -e "[\e[0;32m ok \x1B[0m] Starting ARM hardware info: $ID (${VERSION})"