diff mbox series

[OpenWrt-Devel,4/9] sunxi: switch to lzma compressed fit image

Message ID 20190114175429.7320-5-oskari@lemmela.net
State Changes Requested
Delegated to: Hauke Mehrtens
Headers show
Series sunxi: add support for pine64-lts | expand

Commit Message

Oskari Lemmelä Jan. 14, 2019, 5:54 p.m. UTC
Use LZMA compressed fit image to load kernel and dtb.
Fit image can be used load kernel and dtb from SPI flash.

Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
---
 package/boot/uboot-sunxi/uEnv-a64.txt      |  5 ++-
 package/boot/uboot-sunxi/uEnv-default.txt  |  5 ++-
 package/boot/uboot-sunxi/uEnv-pangolin.txt |  5 ++-
 target/linux/sunxi/Makefile                |  2 +-
 target/linux/sunxi/cortexa53/target.mk     |  1 -
 target/linux/sunxi/image/Makefile          | 17 +++++++---
 target/linux/sunxi/image/cortex-a53.mk     | 25 ++++-----------
 target/linux/sunxi/image/cortex-a7.mk      | 36 +++++++++++-----------
 target/linux/sunxi/image/cortex-a8.mk      | 11 ++++---
 9 files changed, 49 insertions(+), 58 deletions(-)

Comments

Hauke Mehrtens Jan. 26, 2019, 11:13 p.m. UTC | #1
On 1/14/19 6:54 PM, Oskari Lemmela wrote:
> Use LZMA compressed fit image to load kernel and dtb.
> Fit image can be used load kernel and dtb from SPI flash.
> 
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> ---
>  package/boot/uboot-sunxi/uEnv-a64.txt      |  5 ++-
>  package/boot/uboot-sunxi/uEnv-default.txt  |  5 ++-
>  package/boot/uboot-sunxi/uEnv-pangolin.txt |  5 ++-
>  target/linux/sunxi/Makefile                |  2 +-
>  target/linux/sunxi/cortexa53/target.mk     |  1 -
>  target/linux/sunxi/image/Makefile          | 17 +++++++---
>  target/linux/sunxi/image/cortex-a53.mk     | 25 ++++-----------
>  target/linux/sunxi/image/cortex-a7.mk      | 36 +++++++++++-----------
>  target/linux/sunxi/image/cortex-a8.mk      | 11 ++++---
>  9 files changed, 49 insertions(+), 58 deletions(-)
> 

My H3 Xunlong Orange Pi R1 does not boot fit images, CONFIG_FIT is not
set in my U-Boot configuration.

I am getting this error:
-------------------------------------------------------------------
Scanning mmc 0:1...
Found U-Boot script /boot.scr
301 bytes read in 1 ms (293.9 KiB/s)
## Executing script at 43100000
2770296 bytes read in 125 ms (21.1 MiB/s)
Wrong Image Format for bootm command
ERROR: can't get kernel image!
SCRIPT FAILED: continuing...

Device 0: device type unknown
... is now current device
ethernet@1c30000 Waiting for PHY auto negotiation to complete.. done
BOOTP broadcast 1
-------------------------------------------------------------------

I activated these U-Boot configuration options:
CONFIG_FIT=y
CONFIG_LZMA=y
and now I am hitting the next problem:
-------------------------------------------------------------------
Found U-Boot script /boot.scr
301 bytes read in 2 ms (146.5 KiB/s)
## Executing script at 43100000
2772324 bytes read in 126 ms (21 MiB/s)
## Loading kernel from FIT Image at 43300000 ...
   Using 'config@1' configuration
   Trying 'kernel@1' kernel subimage
     Description:  ARM OpenWrt Linux-4.14.95
     Type:         Kernel Image
     Compression:  lzma compressed
     Data Start:   0x433000e4
     Data Size:    2755114 Bytes = 2.6 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x42000000
     Entry Point:  0x42000000
     Hash algo:    crc32
     Hash value:   62b0495d
     Hash algo:    sha1
     Hash value:   ca607078b06de248018641320577e910a1967dab
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 43300000 ...
   Using 'config@1' configuration
   Trying 'fdt@1' fdt subimage
     Description:  ARM OpenWrt sun8i-h2-plus-orangepi-r1 device tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x435a0c54
     Data Size:    15325 Bytes = 15 KiB
     Architecture: ARM
     Hash algo:    crc32
     Hash value:   c9c29924
     Hash algo:    sha1
     Hash value:   6f4bee23444eb246cc8287c40ebb240cdf45aa9d
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Booting using the fdt blob at 0x435a0c54
EHCI failed to shut down host controller.
EHCI failed to shut down host controller.
   Uncompressing Kernel Image ... Image too large: increase
CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
resetting ...
-------------------------------------------------------------------

My H5 Xunlong Orange Pi Zero Plus works fine.

Hauke
Oskari Lemmelä Jan. 27, 2019, 6:25 p.m. UTC | #2
Hi,

On 27.1.2019 1.13, Hauke Mehrtens wrote:
> On 1/14/19 6:54 PM, Oskari Lemmela wrote:
>> Use LZMA compressed fit image to load kernel and dtb.
>> Fit image can be used load kernel and dtb from SPI flash.
>>
>> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
>> ---
>>  package/boot/uboot-sunxi/uEnv-a64.txt      |  5 ++-
>>  package/boot/uboot-sunxi/uEnv-default.txt  |  5 ++-
>>  package/boot/uboot-sunxi/uEnv-pangolin.txt |  5 ++-
>>  target/linux/sunxi/Makefile                |  2 +-
>>  target/linux/sunxi/cortexa53/target.mk     |  1 -
>>  target/linux/sunxi/image/Makefile          | 17 +++++++---
>>  target/linux/sunxi/image/cortex-a53.mk     | 25 ++++-----------
>>  target/linux/sunxi/image/cortex-a7.mk      | 36 +++++++++++-----------
>>  target/linux/sunxi/image/cortex-a8.mk      | 11 ++++---
>>  9 files changed, 49 insertions(+), 58 deletions(-)
>>
> My H3 Xunlong Orange Pi R1 does not boot fit images, CONFIG_FIT is not
> set in my U-Boot configuration.
>
> I am getting this error:
> -------------------------------------------------------------------
> Scanning mmc 0:1...
> Found U-Boot script /boot.scr
> 301 bytes read in 1 ms (293.9 KiB/s)
> ## Executing script at 43100000
> 2770296 bytes read in 125 ms (21.1 MiB/s)
> Wrong Image Format for bootm command
> ERROR: can't get kernel image!
> SCRIPT FAILED: continuing...
>
> Device 0: device type unknown
> ... is now current device
> ethernet@1c30000 Waiting for PHY auto negotiation to complete.. done
> BOOTP broadcast 1
> -------------------------------------------------------------------
>
> I activated these U-Boot configuration options:
> CONFIG_FIT=y
> CONFIG_LZMA=y
> and now I am hitting the next problem:
> -------------------------------------------------------------------
> Found U-Boot script /boot.scr
> 301 bytes read in 2 ms (146.5 KiB/s)
> ## Executing script at 43100000
> 2772324 bytes read in 126 ms (21 MiB/s)
> ## Loading kernel from FIT Image at 43300000 ...
>    Using 'config@1' configuration
>    Trying 'kernel@1' kernel subimage
>      Description:  ARM OpenWrt Linux-4.14.95
>      Type:         Kernel Image
>      Compression:  lzma compressed
>      Data Start:   0x433000e4
>      Data Size:    2755114 Bytes = 2.6 MiB
>      Architecture: ARM
>      OS:           Linux
>      Load Address: 0x42000000
>      Entry Point:  0x42000000
>      Hash algo:    crc32
>      Hash value:   62b0495d
>      Hash algo:    sha1
>      Hash value:   ca607078b06de248018641320577e910a1967dab
>    Verifying Hash Integrity ... crc32+ sha1+ OK
> ## Loading fdt from FIT Image at 43300000 ...
>    Using 'config@1' configuration
>    Trying 'fdt@1' fdt subimage
>      Description:  ARM OpenWrt sun8i-h2-plus-orangepi-r1 device tree blob
>      Type:         Flat Device Tree
>      Compression:  uncompressed
>      Data Start:   0x435a0c54
>      Data Size:    15325 Bytes = 15 KiB
>      Architecture: ARM
>      Hash algo:    crc32
>      Hash value:   c9c29924
>      Hash algo:    sha1
>      Hash value:   6f4bee23444eb246cc8287c40ebb240cdf45aa9d
>    Verifying Hash Integrity ... crc32+ sha1+ OK
>    Booting using the fdt blob at 0x435a0c54
> EHCI failed to shut down host controller.
> EHCI failed to shut down host controller.
>    Uncompressing Kernel Image ... Image too large: increase
> CONFIG_SYS_BOOTM_LEN
> Must RESET board to recover
> resetting ...
> -------------------------------------------------------------------
>
> My H5 Xunlong Orange Pi Zero Plus works fine.
>
> Hauke
Thanks for testing. I did not expect that some of targets does not have
CONFIG_FIT enabled.
I'll modify patch so that only cortex-a53 platforms use this lzma and
fit image boot.

U-boot is not currently updated while running sysupgrade. That has to
implemented before
FIT boot can be enabled to other sunxi targets.

Thanks,
Oskari
diff mbox series

Patch

diff --git a/package/boot/uboot-sunxi/uEnv-a64.txt b/package/boot/uboot-sunxi/uEnv-a64.txt
index 7a717fdc0f..713f4fbdc3 100644
--- a/package/boot/uboot-sunxi/uEnv-a64.txt
+++ b/package/boot/uboot-sunxi/uEnv-a64.txt
@@ -1,5 +1,4 @@ 
-setenv loadkernel fatload mmc 0 \$kernel_addr_r uImage
-setenv loaddtb fatload mmc 0 \$fdt_addr_r dtb
+setenv loadkernel fatload mmc 0 \$ramdisk_addr_r uImage
 setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait earlycon=uart,mmio32,0x01c28000
-setenv uenvcmd run loadkernel \&\& run loaddtb \&\& booti \$kernel_addr_r - \$fdt_addr_r
+setenv uenvcmd run loadkernel \&\& bootm \$ramdisk_addr_r
 run uenvcmd
diff --git a/package/boot/uboot-sunxi/uEnv-default.txt b/package/boot/uboot-sunxi/uEnv-default.txt
index e024954516..ac478f9635 100644
--- a/package/boot/uboot-sunxi/uEnv-default.txt
+++ b/package/boot/uboot-sunxi/uEnv-default.txt
@@ -1,6 +1,5 @@ 
 setenv fdt_high ffffffff
-setenv loadkernel fatload mmc 0 \$kernel_addr_r uImage
-setenv loaddtb fatload mmc 0 \$fdt_addr_r dtb
+setenv loadkernel fatload mmc 0 \$ramdisk_addr_r uImage
 setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
-setenv uenvcmd run loadkernel \&\& run loaddtb \&\& bootm \$kernel_addr_r - \$fdt_addr_r
+setenv uenvcmd run loadkernel \&\& bootm \$ramdisk_addr_r
 run uenvcmd
diff --git a/package/boot/uboot-sunxi/uEnv-pangolin.txt b/package/boot/uboot-sunxi/uEnv-pangolin.txt
index 9c4fa11220..2d4651c7a9 100644
--- a/package/boot/uboot-sunxi/uEnv-pangolin.txt
+++ b/package/boot/uboot-sunxi/uEnv-pangolin.txt
@@ -1,6 +1,5 @@ 
 setenv fdt_high ffffffff
-setenv loadkernel fatload mmc 0 \$kernel_addr_r uImage
-setenv loaddtb fatload mmc 0 \$fdt_addr_r dtb
+setenv loadkernel fatload mmc 0 \$ramdisk_addr_r uImage
 setenv bootargs console=ttyS2,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
-setenv uenvcmd run loadkernel \&\& run loaddtb \&\& bootm \$kernel_addr_r - \$fdt_addr_r
+setenv uenvcmd run loadkernel \&\& bootm \$ramdisk_addr_r
 run uenvcmd
diff --git a/target/linux/sunxi/Makefile b/target/linux/sunxi/Makefile
index 8d09d4e939..b024f5e3a2 100644
--- a/target/linux/sunxi/Makefile
+++ b/target/linux/sunxi/Makefile
@@ -15,7 +15,7 @@  SUBTARGETS:=cortexa8 cortexa7 cortexa53
 MAINTAINER:=Zoltan HERPAI <wigyori@uid0.hu>
 
 KERNEL_PATCHVER:=4.14
-KERNELNAME:=zImage dtbs
+KERNELNAME:=Image dtbs
 
 # A10: Cortex-A8
 # A13: Cortex-A8
diff --git a/target/linux/sunxi/cortexa53/target.mk b/target/linux/sunxi/cortexa53/target.mk
index 6715d00bda..4e2c320bc0 100644
--- a/target/linux/sunxi/cortexa53/target.mk
+++ b/target/linux/sunxi/cortexa53/target.mk
@@ -10,4 +10,3 @@  include $(TOPDIR)/rules.mk
 ARCH:=aarch64
 BOARDNAME:=Allwinner A64
 CPU_TYPE:=cortex-a53
-KERNELNAME:=Image dtbs
diff --git a/target/linux/sunxi/image/Makefile b/target/linux/sunxi/image/Makefile
index 8f95c61906..b24cf70928 100644
--- a/target/linux/sunxi/image/Makefile
+++ b/target/linux/sunxi/image/Makefile
@@ -11,14 +11,11 @@  include $(INCLUDE_DIR)/image.mk
 FAT32_BLOCK_SIZE=1024
 FAT32_BLOCKS=$(shell echo $$(($(CONFIG_SUNXI_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
 
-KERNEL_LOADADDR:=0x40008000
-
 define Build/sunxi-sdcard
 	rm -f $@.boot
 	mkfs.fat $@.boot -C $(FAT32_BLOCKS)
 
 	mcopy -i $@.boot $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-boot.scr ::boot.scr
-	mcopy -i $@.boot $(DTS_DIR)/$(SUNXI_DTS).dtb ::dtb
 	mcopy -i $@.boot $(IMAGE_KERNEL) ::uImage
 	./gen_sunxi_sdcard_img.sh $@ \
 		$@.boot \
@@ -33,12 +30,22 @@  endef
 define Device/Default
   PROFILES := Default
   DEVICE_VARS := SUNXI_DTS SUNXI_UBOOT
-  KERNEL_NAME := zImage
-  KERNEL := kernel-bin | uImage none
+  KERNEL_NAME := Image
+  SUNXI_DTS := $(1)
   IMAGES := sdcard.img.gz
   IMAGE/sdcard.img.gz := sunxi-sdcard | append-metadata | gzip
 endef
 
+define Device/FitImageLzma
+  KERNEL_LOADADDR:=0x42000000
+  KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(SUNXI_DTS).dtb
+endef
+
+define Device/FitImageLzma64
+  KERNEL_LOADADDR:=0x40080000
+  KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/allwinner/$$(SUNXI_DTS).dtb
+endef
+
 include cortex-a7.mk
 include cortex-a8.mk
 include cortex-a53.mk
diff --git a/target/linux/sunxi/image/cortex-a53.mk b/target/linux/sunxi/image/cortex-a53.mk
index 65551407ce..c7f3fa5733 100644
--- a/target/linux/sunxi/image/cortex-a53.mk
+++ b/target/linux/sunxi/image/cortex-a53.mk
@@ -8,62 +8,49 @@ 
 ifeq ($(SUBTARGET),cortexa53)
 
 define Device/sun50i-h5-nanopi-neo-plus2
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Nanopi NEO Plus2 (H5)
   SUPPORTED_DEVICES:=nanopi-neo-plus2
-  SUNXI_DTS:=allwinner/sun50i-h5-nanopi-neo-plus2
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-h5-nanopi-neo-plus2
 
 define Device/sun50i-h5-nanopi-neo2
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Nanopi NEO2 (H5)
   SUPPORTED_DEVICES:=nanopi-neo2
-  SUNXI_DTS:=allwinner/sun50i-h5-nanopi-neo2
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-h5-nanopi-neo2
 
 define Device/sun50i-a64-pine64-plus
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Pine64 Plus A64
   SUPPORTED_DEVICES:=pine64,pine64-plus
-  SUNXI_DTS:=allwinner/sun50i-a64-pine64-plus
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-a64-pine64-plus
 
 define Device/sun50i-a64-sopine-baseboard
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Pine64 Sopine
   SUPPORTED_DEVICES:=pine64,sopine-baseboard
-  SUNXI_DTS:=allwinner/sun50i-a64-sopine-baseboard
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-a64-sopine-baseboard
 
-
 define Device/sun50i-h5-orangepi-zero-plus
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Xunlong Orange Pi Zero Plus
   SUPPORTED_DEVICES:=xunlong,orangepi-zero-plus
-  SUNXI_DTS:=allwinner/sun50i-h5-orangepi-zero-plus
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-h5-orangepi-zero-plus
 
 define Device/sun50i-h5-orangepi-pc2
+  $(call Device/FitImageLzma64)
   DEVICE_TITLE:=Xunlong Orange Pi PC2
   SUPPORTED_DEVICES:=xunlong,orangepi-pc2
-  SUNXI_DTS:=allwinner/sun50i-h5-orangepi-pc2
-  KERNEL_NAME := Image
-  KERNEL := kernel-bin
 endef
 
 TARGET_DEVICES += sun50i-h5-orangepi-pc2
diff --git a/target/linux/sunxi/image/cortex-a7.mk b/target/linux/sunxi/image/cortex-a7.mk
index 969864bb76..30b137a117 100644
--- a/target/linux/sunxi/image/cortex-a7.mk
+++ b/target/linux/sunxi/image/cortex-a7.mk
@@ -9,180 +9,180 @@ 
 ifeq ($(SUBTARGET),cortexa7)
 
 define Device/sun7i-a20-olinuxino-lime
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A20-OLinuXino-LIME
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-rtc-sunxi
   SUPPORTED_DEVICES:=olimex,a20-olinuxino-lime
-  SUNXI_DTS:=sun7i-a20-olinuxino-lime
 endef
 
 TARGET_DEVICES += sun7i-a20-olinuxino-lime
 
 
 define Device/sun7i-a20-olinuxino-lime2
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A20-OLinuXino-LIME2
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-rtc-sunxi kmod-usb-hid
   SUPPORTED_DEVICES:=olimex,a20-olinuxino-lime2
-  SUNXI_DTS:=sun7i-a20-olinuxino-lime2
 endef
 
 TARGET_DEVICES += sun7i-a20-olinuxino-lime2
 
 
 define Device/sun7i-a20-olinuxino-lime2-emmc
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A20-OLinuXino-LIME2-eMMC
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-rtc-sunxi kmod-usb-hid
   SUPPORTED_DEVICES:=olimex,a20-olinuxino-lime2-emmc
-  SUNXI_DTS:=sun7i-a20-olinuxino-lime2-emmc
 endef
 
 TARGET_DEVICES += sun7i-a20-olinuxino-lime2-emmc
 
 
 define Device/sun7i-a20-olinuxino-micro
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A20-Olinuxino Micro
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-sun4i-emac kmod-rtc-sunxi
   SUPPORTED_DEVICES:=olimex,a20-olinuxino-micro
-  SUNXI_DTS:=sun7i-a20-olinuxino-micro
 endef
 
 TARGET_DEVICES += sun7i-a20-olinuxino-micro
 
 
 define Device/sun7i-a20-bananapi
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=LeMaker Banana Pi
   DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-ata-core kmod-ata-sunxi
   SUPPORTED_DEVICES:=lemaker,bananapi
-  SUNXI_DTS:=sun7i-a20-bananapi
 endef
 
 TARGET_DEVICES += sun7i-a20-bananapi
 
 
 define Device/sun7i-a20-bananapro
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=LeMaker Banana Pro
   DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-ata-core kmod-ata-sunxi kmod-brcmfmac
   SUPPORTED_DEVICES:=lemaker,bananapro
-  SUNXI_DTS:=sun7i-a20-bananapro
 endef
 
 TARGET_DEVICES += sun7i-a20-bananapro
 
 
 define Device/sun7i-a20-cubieboard2
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Cubietech Cubieboard2
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-sun4i-emac kmod-rtc-sunxi
   SUPPORTED_DEVICES:=cubietech,cubieboard2
-  SUNXI_DTS:=sun7i-a20-cubieboard2
 endef
 
 TARGET_DEVICES += sun7i-a20-cubieboard2
 
 
 define Device/sun7i-a20-cubietruck
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Cubietech Cubietruck
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-rtc-sunxi kmod-brcmfmac
   SUPPORTED_DEVICES:=cubietech,cubietruck
-  SUNXI_DTS:=sun7i-a20-cubietruck
 endef
 
 TARGET_DEVICES += sun7i-a20-cubietruck
 
 
 define Device/sun7i-a20-lamobo-r1
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Lamobo R1
   DEVICE_PACKAGES:=kmod-ata-sunxi kmod-rtl8192cu swconfig wpad-basic
   SUPPORTED_DEVICES:=lamobo,lamobo-r1
-  SUNXI_DTS:=sun7i-a20-lamobo-r1
 endef
 
 TARGET_DEVICES += sun7i-a20-lamobo-r1
 
 
 define Device/sun6i-a31-m9
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Mele M9 top set box
   DEVICE_PACKAGES:=kmod-sun4i-emac kmod-rtc-sunxi kmod-rtl8192cu
   SUPPORTED_DEVICES:=mele,m9
-  SUNXI_DTS:=sun6i-a31-m9
 endef
 
 TARGET_DEVICES += sun6i-a31-m9
 
 
 define Device/sun8i-h2-plus-orangepi-zero
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Xunlong Orange Pi Zero
   DEVICE_PACKAGES:=kmod-rtc-sunxi
   SUPPORTED_DEVICES:=xunlong,orangepi-zero
-  SUNXI_DTS:=sun8i-h2-plus-orangepi-zero
 endef
 
 TARGET_DEVICES += sun8i-h2-plus-orangepi-zero
 
 
 define Device/sun8i-h2-plus-orangepi-r1
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Xunlong Orange Pi R1
   DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-usb-net kmod-usb-net-rtl8152
   SUPPORTED_DEVICES:=xunlong,orangepi-r1
-  SUNXI_DTS:=sun8i-h2-plus-orangepi-r1
 endef
 
 TARGET_DEVICES += sun8i-h2-plus-orangepi-r1
 
 
 define Device/sun8i-h3-nanopi-m1-plus
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=FriendlyArm NanoPi M1 Plus
   DEVICE_PACKAGES:=kmod-rtc-sunxi \
 	kmod-leds-gpio kmod-ledtrig-heartbeat \
 	kmod-brcmfmac brcmfmac-firmware-43430-sdio wpad-basic
   SUPPORTED_DEVICES:=friendlyarm,nanopi-m1-plus
-  SUNXI_DTS:=sun8i-h3-nanopi-m1-plus
 endef
 
 TARGET_DEVICES += sun8i-h3-nanopi-m1-plus
 
 
 define Device/sun8i-h3-nanopi-neo
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=FriendlyARM NanoPi NEO
   SUPPORTED_DEVICES:=friendlyarm,nanopi-neo
-  SUNXI_DTS:=sun8i-h3-nanopi-neo
 endef
 
 TARGET_DEVICES += sun8i-h3-nanopi-neo
 
 
 define Device/sun8i-h3-orangepi-pc
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Xunlong Orange Pi PC
   DEVICE_PACKAGES:=kmod-rtc-sunxi kmod-gpio-button-hotplug
   SUPPORTED_DEVICES:=xunlong,orangepi-pc
-  SUNXI_DTS:=sun8i-h3-orangepi-pc
 endef
 
 TARGET_DEVICES += sun8i-h3-orangepi-pc
 
 
 define Device/sun8i-h3-orangepi-plus
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Xunlong Orange Pi Plus
   DEVICE_PACKAGES:=kmod-rtc-sunxi
   SUPPORTED_DEVICES:=xunlong,orangepi-plus
-  SUNXI_DTS:=sun8i-h3-orangepi-plus
 endef
 
 TARGET_DEVICES += sun8i-h3-orangepi-plus
 
 define Device/sun8i-h3-orangepi-2
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Xunlong Orange Pi 2
   DEVICE_PACKAGES:=kmod-rtc-sunxi
   SUPPORTED_DEVICES:=xunlong,orangepi-2
-  SUNXI_DTS:=sun8i-h3-orangepi-2
 endef
 
 TARGET_DEVICES += sun8i-h3-orangepi-2
 
 
 define Device/sun7i-a20-pcduino3
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=LinkSprite pcDuino3
   DEVICE_PACKAGES:=kmod-sun4i-emac kmod-rtc-sunxi kmod-ata-core kmod-ata-sunxi kmod-rtl8xxxu rtl8188eu-firmware
   SUPPORTED_DEVICES:=linksprite,pcduino3
-  SUNXI_DTS:=sun7i-a20-pcduino3
 endef
 
 TARGET_DEVICES += sun7i-a20-pcduino3
diff --git a/target/linux/sunxi/image/cortex-a8.mk b/target/linux/sunxi/image/cortex-a8.mk
index 564a66f938..71a3d97265 100644
--- a/target/linux/sunxi/image/cortex-a8.mk
+++ b/target/linux/sunxi/image/cortex-a8.mk
@@ -8,16 +8,17 @@ 
 ifeq ($(SUBTARGET),cortexa8)
 
 define Device/sun4i-a10-olinuxino-lime
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A10-OLinuXino-LIME
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-sun4i-emac kmod-rtc-sunxi
   SUPPORTED_DEVICES:=olimex,a10-olinuxino-lime
-  SUNXI_DTS:=sun4i-a10-olinuxino-lime
 endef
 
 TARGET_DEVICES += sun4i-a10-olinuxino-lime
 
 
 define Device/sun5i-a13-olimex-som
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A13 SOM
   DEVICE_PACKAGES:=kmod-rtl8192cu
   SUPPORTED_DEVICES:=olimex,a13-olinuxino
@@ -28,40 +29,40 @@  TARGET_DEVICES += sun5i-a13-olimex-som
 
 
 define Device/sun5i-a13-olinuxino
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Olimex A13-Olinuxino
   DEVICE_PACKAGES:=kmod-rtl8192cu
   SUPPORTED_DEVICES:=olimex,a13-olinuxino
-  SUNXI_DTS:=sun5i-a13-olinuxino
 endef
 
 TARGET_DEVICES += sun5i-a13-olinuxino
 
 
 define Device/sun4i-a10-cubieboard
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=Cubietech Cubieboard
   DEVICE_PACKAGES:=kmod-ata-core kmod-ata-sunxi kmod-sun4i-emac kmod-rtc-sunxi
   SUPPORTED_DEVICES:=cubietech,a10-cubieboard
-  SUNXI_DTS:=sun4i-a10-cubieboard
 endef
 
 TARGET_DEVICES += sun4i-a10-cubieboard
 
 
 define Device/sun4i-a10-pcduino
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=LinkSprite pcDuino
   DEVICE_PACKAGES:=kmod-sun4i-emac kmod-rtc-sunxi kmod-rtl8192cu
   SUPPORTED_DEVICES:=linksprite,a10-pcduino
-  SUNXI_DTS:=sun4i-a10-pcduino
 endef
 
 TARGET_DEVICES += sun4i-a10-pcduino
 
 
 define Device/sun4i-a10-marsboard
+  $(call Device/FitImageLzma)
   DEVICE_TITLE:=HAOYU Electronics Marsboard A10
   DEVICE_PACKAGES:=mod-ata-core kmod-ata-sunxi kmod-sun4i-emac kmod-rtc-sunxi sound-soc-sunxi
   SUPPORTED_DEVICES:=marsboard,a10-marsboard
-  SUNXI_DTS:=sun4i-a10-marsboard
 endef
 
 TARGET_DEVICES += sun4i-a10-marsboard