diff --git a/target/linux/ar71xx/Makefile b/target/linux/ar71xx/Makefile index 3f5bc6724..6d5b4c52b 100644 --- a/target/linux/ar71xx/Makefile +++ b/target/linux/ar71xx/Makefile @@ -13,7 +13,7 @@ FEATURES:=usbgadget CPU_TYPE:=24kc SUBTARGETS:=generic nand mikrotik -KERNEL_PATCHVER:=4.4 +KERNEL_PATCHVER:=4.9 include $(INCLUDE_DIR)/target.mk diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 index 1f4d9f4c3..4793bf4de 100644 --- a/target/linux/ar71xx/config-4.4 +++ b/target/linux/ar71xx/config-4.4 @@ -223,8 +223,8 @@ CONFIG_ATH79_MACH_UBNT=y CONFIG_ATH79_MACH_UBNT_UNIFIAC=y CONFIG_ATH79_MACH_UBNT_XM=y CONFIG_ATH79_MACH_WEIO=y -CONFIG_ATH79_MACH_WHR_HP_G300N=y # CONFIG_ATH79_MACH_WI2A_AC200I is not set +CONFIG_ATH79_MACH_WHR_HP_G300N=y CONFIG_ATH79_MACH_WLAE_AG300N=y CONFIG_ATH79_MACH_WLR8100=y CONFIG_ATH79_MACH_WNDAP360=y @@ -374,7 +374,6 @@ CONFIG_MIPS_CLOCK_VSYSCALL=y CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER=y # CONFIG_MIPS_CMDLINE_FROM_DTB is not set # CONFIG_MIPS_ELF_APPENDED_DTB is not set -CONFIG_MIPS_FPU_EMULATOR=y # CONFIG_MIPS_HUGE_TLB_SUPPORT is not set CONFIG_MIPS_L1_CACHE_SHIFT=5 CONFIG_MIPS_MACHINE=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c index 9e08c157e..c6c646322 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c @@ -35,15 +35,15 @@ #define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset */ #define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg Clock Input */ -#define ARCHER_C25_74HC_GPIO_BASE QCA956X_GPIO_COUNT -#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 -#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 -#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 -#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 -#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 -#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 -#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 -#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 +#define ARCHER_C25_74HC_GPIO_BASE 32 +#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER (ARCHER_C25_74HC_GPIO_BASE + 4) +#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN (ARCHER_C25_74HC_GPIO_BASE + 5) +#define ARCHER_C25_74HC_GPIO_LED_WLAN2 (ARCHER_C25_74HC_GPIO_BASE + 6) +#define ARCHER_C25_74HC_GPIO_LED_WLAN5 (ARCHER_C25_74HC_GPIO_BASE + 7) +#define ARCHER_C25_74HC_GPIO_LED_LAN1 (ARCHER_C25_74HC_GPIO_BASE + 0) +#define ARCHER_C25_74HC_GPIO_LED_LAN2 (ARCHER_C25_74HC_GPIO_BASE + 1) +#define ARCHER_C25_74HC_GPIO_LED_LAN3 (ARCHER_C25_74HC_GPIO_BASE + 2) +#define ARCHER_C25_74HC_GPIO_LED_LAN4 (ARCHER_C25_74HC_GPIO_BASE + 3) #define ARCHER_C25_V1_SSR_BIT_0 0 #define ARCHER_C25_V1_SSR_BIT_1 1 diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c index da15919a5..3c85a2055 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c59-v1.c @@ -43,15 +43,15 @@ #define ARCHER_C59_GPIO_SHIFT_SRCLR 19 #define ARCHER_C59_GPIO_SHIFT_RCLK 20 -#define ARCHER_C59_74HC_GPIO_BASE QCA956X_GPIO_COUNT -#define ARCHER_C59_74HC_GPIO_LED_POWER 23 -#define ARCHER_C59_74HC_GPIO_LED_WLAN2 24 -#define ARCHER_C59_74HC_GPIO_LED_WLAN5 25 -#define ARCHER_C59_74HC_GPIO_LED_LAN 26 -#define ARCHER_C59_74HC_GPIO_LED_WAN_GREEN 27 -#define ARCHER_C59_74HC_GPIO_LED_WAN_AMBER 28 -#define ARCHER_C59_74HC_GPIO_LED_WPS 29 -#define ARCHER_C59_74HC_GPIO_LED_USB 30 +#define ARCHER_C59_74HC_GPIO_BASE 32 +#define ARCHER_C59_74HC_GPIO_LED_POWER (ARCHER_C59_74HC_GPIO_BASE + 0) +#define ARCHER_C59_74HC_GPIO_LED_WLAN2 (ARCHER_C59_74HC_GPIO_BASE + 1) +#define ARCHER_C59_74HC_GPIO_LED_WLAN5 (ARCHER_C59_74HC_GPIO_BASE + 2) +#define ARCHER_C59_74HC_GPIO_LED_LAN (ARCHER_C59_74HC_GPIO_BASE + 3) +#define ARCHER_C59_74HC_GPIO_LED_WAN_GREEN (ARCHER_C59_74HC_GPIO_BASE + 4) +#define ARCHER_C59_74HC_GPIO_LED_WAN_AMBER (ARCHER_C59_74HC_GPIO_BASE + 5) +#define ARCHER_C59_74HC_GPIO_LED_WPS (ARCHER_C59_74HC_GPIO_BASE + 6) +#define ARCHER_C59_74HC_GPIO_LED_USB (ARCHER_C59_74HC_GPIO_BASE + 7) #define ARCHER_C59_V1_SSR_BIT_0 0 #define ARCHER_C59_V1_SSR_BIT_1 1 diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c index 64955c799..21b8e8cf8 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7-v4.c @@ -56,7 +56,7 @@ #define ARCHER_C7_GPIO_LED_USB1 7 #define ARCHER_C7_GPIO_LED_USB2 8 -#define ARCHER_C7_74HC_GPIO_BASE QCA956X_GPIO_COUNT +#define ARCHER_C7_74HC_GPIO_BASE 32 #define ARCHER_C7_GPIO_LED_WPS (ARCHER_C7_74HC_GPIO_BASE + 0) #define ARCHER_C7_GPIO_LED_LAN1 (ARCHER_C7_74HC_GPIO_BASE + 1) #define ARCHER_C7_GPIO_LED_LAN2 (ARCHER_C7_74HC_GPIO_BASE + 2) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb91x.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb91x.c index 64f927dc6..691566fa8 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb91x.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb91x.c @@ -53,7 +53,7 @@ #define RB91X_FLAG_USB BIT(0) #define RB91X_FLAG_PCIE BIT(1) -#define RB91X_LATCH_GPIO_BASE AR934X_GPIO_COUNT +#define RB91X_LATCH_GPIO_BASE 32 #define RB91X_LATCH_GPIO(_x) (RB91X_LATCH_GPIO_BASE + (_x)) #define RB91X_SSR_GPIO_BASE (RB91X_LATCH_GPIO_BASE + AR934X_GPIO_COUNT) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c index 76f6a0759..32e2bc952 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c @@ -49,15 +49,15 @@ #define TL_WR942N_V1_GPIO_LED_WPS 21 #define TL_WR942N_V1_GPIO_LED_STATUS 22 -#define TL_WR942N_V1_74HC_GPIO_BASE QCA956X_GPIO_COUNT -#define TL_WR942N_V1_74HC_GPIO_LED_LAN4 23 -#define TL_WR942N_V1_74HC_GPIO_LED_LAN3 24 -#define TL_WR942N_V1_74HC_GPIO_LED_LAN2 25 -#define TL_WR942N_V1_74HC_GPIO_LED_LAN1 26 -#define TL_WR942N_V1_74HC_GPIO_LED_WAN_GREEN 27 -#define TL_WR942N_V1_74HC_GPIO_LED_WAN_AMBER 28 -#define TL_WR942N_V1_74HC_GPIO_LED_WLAN 29 -#define TL_WR942N_V1_74HC_GPIO_HUB_RESET 30 /* from u-boot sources */ +#define TL_WR942N_V1_74HC_GPIO_BASE 32 +#define TL_WR942N_V1_74HC_GPIO_LED_LAN4 (TL_WR942N_V1_74HC_GPIO_BASE + 0) +#define TL_WR942N_V1_74HC_GPIO_LED_LAN3 (TL_WR942N_V1_74HC_GPIO_BASE + 1) +#define TL_WR942N_V1_74HC_GPIO_LED_LAN2 (TL_WR942N_V1_74HC_GPIO_BASE + 2) +#define TL_WR942N_V1_74HC_GPIO_LED_LAN1 (TL_WR942N_V1_74HC_GPIO_BASE + 3) +#define TL_WR942N_V1_74HC_GPIO_LED_WAN_GREEN (TL_WR942N_V1_74HC_GPIO_BASE + 4) +#define TL_WR942N_V1_74HC_GPIO_LED_WAN_AMBER (TL_WR942N_V1_74HC_GPIO_BASE + 5) +#define TL_WR942N_V1_74HC_GPIO_LED_WLAN (TL_WR942N_V1_74HC_GPIO_BASE + 6) +#define TL_WR942N_V1_74HC_GPIO_HUB_RESET (TL_WR942N_V1_74HC_GPIO_BASE + 7) /* from u-boot sources */ #define TL_WR942N_V1_SSR_BIT_0 0 #define TL_WR942N_V1_SSR_BIT_1 1 diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c index b397575f7..5bbe9789f 100644 --- a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c +++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c @@ -39,9 +39,31 @@ struct rb4xx_nand_info { struct nand_chip chip; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) struct mtd_info mtd; +#endif }; +static inline struct rb4xx_nand_info *mtd_to_rbinfo(struct mtd_info *mtd) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + return container_of(mtd, struct rb4xx_nand_info, mtd); +#else + struct nand_chip *chip = mtd_to_nand(mtd); + + return container_of(chip, struct rb4xx_nand_info, chip); +#endif +} + +static struct mtd_info *rbinfo_to_mtd(struct rb4xx_nand_info *nfc) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + return &nfc->mtd; +#else + return nand_to_mtd(&nfc->chip); +#endif +} + #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) /* * We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader @@ -191,6 +213,7 @@ static void rb4xx_nand_read_buf(struct mtd_info *mtd, unsigned char *buf, static int rb4xx_nand_probe(struct platform_device *pdev) { struct rb4xx_nand_info *info; + struct mtd_info *mtd; int ret; printk(KERN_INFO DRV_DESC " version " DRV_VERSION "\n"); @@ -259,8 +282,12 @@ static int rb4xx_nand_probe(struct platform_device *pdev) } info->chip.priv = &info; - info->mtd.priv = &info->chip; - info->mtd.owner = THIS_MODULE; + mtd = rbinfo_to_mtd(info); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + mtd->priv = &info->chip; +#endif + mtd->owner = THIS_MODULE; info->chip.cmd_ctrl = rb4xx_nand_cmd_ctrl; info->chip.dev_ready = rb4xx_nand_dev_ready; @@ -270,30 +297,33 @@ static int rb4xx_nand_probe(struct platform_device *pdev) info->chip.chip_delay = 25; info->chip.ecc.mode = NAND_ECC_SOFT; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + info->chip.ecc.algo = NAND_ECC_HAMMING; +#endif info->chip.options = NAND_NO_SUBPAGE_WRITE; platform_set_drvdata(pdev, info); - ret = nand_scan_ident(&info->mtd, 1, NULL); + ret = nand_scan_ident(mtd, 1, NULL); if (ret) { ret = -ENXIO; goto err_free_info; } - if (info->mtd.writesize == 512) + if (mtd->writesize == 512) #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) info->chip.ecc.layout = &rb4xx_nand_ecclayout; #else - mtd_set_ooblayout(&info->mtd, &rb4xx_nand_ecclayout_ops); + mtd_set_ooblayout(mtd, &rb4xx_nand_ecclayout_ops); #endif - ret = nand_scan_tail(&info->mtd); + ret = nand_scan_tail(mtd); if (ret) { return -ENXIO; goto err_set_drvdata; } - mtd_device_register(&info->mtd, rb4xx_nand_partitions, + mtd_device_register(mtd, rb4xx_nand_partitions, ARRAY_SIZE(rb4xx_nand_partitions)); if (ret) goto err_release_nand; @@ -301,7 +331,7 @@ static int rb4xx_nand_probe(struct platform_device *pdev) return 0; err_release_nand: - nand_release(&info->mtd); + nand_release(mtd); err_set_drvdata: platform_set_drvdata(pdev, NULL); err_free_info: @@ -322,7 +352,7 @@ static int rb4xx_nand_remove(struct platform_device *pdev) { struct rb4xx_nand_info *info = platform_get_drvdata(pdev); - nand_release(&info->mtd); + nand_release(rbinfo_to_mtd(info)); platform_set_drvdata(pdev, NULL); kfree(info); gpio_free(RB4XX_NAND_GPIO_NCE); diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c index f8a6722cb..dbada68dd 100644 --- a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c +++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c @@ -41,13 +41,30 @@ struct rb750_nand_info { struct nand_chip chip; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) struct mtd_info mtd; +#endif struct rb7xx_nand_platform_data *pdata; }; static inline struct rb750_nand_info *mtd_to_rbinfo(struct mtd_info *mtd) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) return container_of(mtd, struct rb750_nand_info, mtd); +#else + struct nand_chip *chip = mtd_to_nand(mtd); + + return container_of(chip, struct rb750_nand_info, chip); +#endif +} + +static struct mtd_info *rbinfo_to_mtd(struct rb750_nand_info *nfc) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + return &nfc->mtd; +#else + return nand_to_mtd(&nfc->chip); +#endif } #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) @@ -304,6 +321,7 @@ static int rb750_nand_probe(struct platform_device *pdev) { struct rb750_nand_info *info; struct rb7xx_nand_platform_data *pdata; + struct mtd_info *mtd; int ret; printk(KERN_INFO DRV_DESC " version " DRV_VERSION "\n"); @@ -317,8 +335,12 @@ static int rb750_nand_probe(struct platform_device *pdev) return -ENOMEM; info->chip.priv = &info; - info->mtd.priv = &info->chip; - info->mtd.owner = THIS_MODULE; + + mtd = rbinfo_to_mtd(info); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + mtd->priv = &info->chip; +#endif + mtd->owner = THIS_MODULE; info->chip.select_chip = rb750_nand_select_chip; info->chip.cmd_ctrl = rb750_nand_cmd_ctrl; @@ -329,6 +351,9 @@ static int rb750_nand_probe(struct platform_device *pdev) info->chip.chip_delay = 25; info->chip.ecc.mode = NAND_ECC_SOFT; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + info->chip.ecc.algo = NAND_ECC_HAMMING; +#endif info->chip.options = NAND_NO_SUBPAGE_WRITE; info->pdata = pdata; @@ -337,26 +362,26 @@ static int rb750_nand_probe(struct platform_device *pdev) rb750_nand_gpio_init(info); - ret = nand_scan_ident(&info->mtd, 1, NULL); + ret = nand_scan_ident(mtd, 1, NULL); if (ret) { ret = -ENXIO; goto err_free_info; } - if (info->mtd.writesize == 512) + if (mtd->writesize == 512) #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) info->chip.ecc.layout = &rb750_nand_ecclayout; #else - mtd_set_ooblayout(&info->mtd, &rb750_nand_ecclayout_ops); + mtd_set_ooblayout(mtd, &rb750_nand_ecclayout_ops); #endif - ret = nand_scan_tail(&info->mtd); + ret = nand_scan_tail(mtd); if (ret) { return -ENXIO; goto err_set_drvdata; } - ret = mtd_device_register(&info->mtd, rb750_nand_partitions, + ret = mtd_device_register(mtd, rb750_nand_partitions, ARRAY_SIZE(rb750_nand_partitions)); if (ret) goto err_release_nand; @@ -364,7 +389,7 @@ static int rb750_nand_probe(struct platform_device *pdev) return 0; err_release_nand: - nand_release(&info->mtd); + nand_release(mtd); err_set_drvdata: platform_set_drvdata(pdev, NULL); err_free_info: @@ -376,7 +401,7 @@ static int rb750_nand_remove(struct platform_device *pdev) { struct rb750_nand_info *info = platform_get_drvdata(pdev); - nand_release(&info->mtd); + nand_release(rbinfo_to_mtd(info)); platform_set_drvdata(pdev, NULL); kfree(info); diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c index 15b1816ae..c808f3998 100644 --- a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c +++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c @@ -40,7 +40,9 @@ struct rb91x_nand_info { struct nand_chip chip; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) struct mtd_info mtd; +#endif struct device *dev; int gpio_nce; @@ -54,9 +56,25 @@ struct rb91x_nand_info { static inline struct rb91x_nand_info *mtd_to_rbinfo(struct mtd_info *mtd) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) return container_of(mtd, struct rb91x_nand_info, mtd); +#else + struct nand_chip *chip = mtd_to_nand(mtd); + + return container_of(chip, struct rb91x_nand_info, chip); +#endif } +static struct mtd_info *rbinfo_to_mtd(struct rb91x_nand_info *nfc) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + return &nfc->mtd; +#else + return nand_to_mtd(&nfc->chip); +#endif +} + + #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) /* * We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader @@ -340,6 +358,7 @@ static int rb91x_nand_probe(struct platform_device *pdev) { struct rb91x_nand_info *rbni; struct rb91x_nand_platform_data *pdata; + struct mtd_info *mtd; int ret; pr_info(DRV_DESC "\n"); @@ -362,8 +381,12 @@ static int rb91x_nand_probe(struct platform_device *pdev) rbni->gpio_nle = pdata->gpio_nle; rbni->chip.priv = &rbni; - rbni->mtd.priv = &rbni->chip; - rbni->mtd.owner = THIS_MODULE; + mtd = rbinfo_to_mtd(rbni); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) + mtd->priv = &rbni->chip; +#endif + mtd->owner = THIS_MODULE; rbni->chip.cmd_ctrl = rb91x_nand_cmd_ctrl; rbni->chip.dev_ready = rb91x_nand_dev_ready; @@ -373,6 +396,9 @@ static int rb91x_nand_probe(struct platform_device *pdev) rbni->chip.chip_delay = 25; rbni->chip.ecc.mode = NAND_ECC_SOFT; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) + rbni->chip.ecc.algo = NAND_ECC_HAMMING; +#endif rbni->chip.options = NAND_NO_SUBPAGE_WRITE; platform_set_drvdata(pdev, rbni); @@ -381,22 +407,22 @@ static int rb91x_nand_probe(struct platform_device *pdev) if (ret) return ret; - ret = nand_scan_ident(&rbni->mtd, 1, NULL); + ret = nand_scan_ident(mtd, 1, NULL); if (ret) return ret; - if (rbni->mtd.writesize == 512) + if (mtd->writesize == 512) #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) rbni->chip.ecc.layout = &rb91x_nand_ecclayout; #else - mtd_set_ooblayout(&rbni->mtd, &rb91x_nand_ecclayout_ops); + mtd_set_ooblayout(mtd, &rb91x_nand_ecclayout_ops); #endif - ret = nand_scan_tail(&rbni->mtd); + ret = nand_scan_tail(mtd); if (ret) return ret; - ret = mtd_device_register(&rbni->mtd, rb91x_nand_partitions, + ret = mtd_device_register(mtd, rb91x_nand_partitions, ARRAY_SIZE(rb91x_nand_partitions)); if (ret) goto err_release_nand; @@ -404,7 +430,7 @@ static int rb91x_nand_probe(struct platform_device *pdev) return 0; err_release_nand: - nand_release(&rbni->mtd); + nand_release(mtd); return ret; } @@ -412,7 +438,7 @@ static int rb91x_nand_remove(struct platform_device *pdev) { struct rb91x_nand_info *info = platform_get_drvdata(pdev); - nand_release(&info->mtd); + nand_release(rbinfo_to_mtd(info)); return 0; } diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk index 6f5a7016e..3c5fcc3f3 100644 --- a/target/linux/ar71xx/image/generic.mk +++ b/target/linux/ar71xx/image/generic.mk @@ -358,7 +358,6 @@ define Device/dr344 MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(nvram),64k(art)ro,7744k@0x50000(firmware) IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | pad-to $$$$(ROOTFS_SIZE) | append-kernel | check-size $$$$(IMAGE_SIZE) endef -TARGET_DEVICES += dr344 define Device/dr531 DEVICE_TITLE := Wallys DR531 diff --git a/target/linux/ar71xx/image/lzma-loader/src/Makefile b/target/linux/ar71xx/image/lzma-loader/src/Makefile index 5f10bdb8f..682b31fe8 100644 --- a/target/linux/ar71xx/image/lzma-loader/src/Makefile +++ b/target/linux/ar71xx/image/lzma-loader/src/Makefile @@ -37,11 +37,13 @@ CFLAGS = -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -Os \ -mabi=32 -march=mips32r2 \ -Wa,-32 -Wa,-march=mips32r2 -Wa,-mips32r2 -Wa,--trap CFLAGS += -D_LZMA_PROB32 +CFLAGS += -flto ASFLAGS = $(CFLAGS) -D__ASSEMBLY__ -LDFLAGS = -static --gc-sections -no-warn-mismatch -LDFLAGS += -e startup -T loader.lds -Ttext $(LZMA_TEXT_START) +LDFLAGS = -static -Wl,--gc-sections -Wl,-no-warn-mismatch +LDFLAGS += -Wl,-e,startup -T loader.lds -Wl,-Ttext,$(LZMA_TEXT_START) +LDFLAGS += -flto -fwhole-program O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32) @@ -86,7 +88,7 @@ data.o: $(LOADER_DATA) $(LD) -r -b binary --oformat $(O_FORMAT) -T lzma-data.lds -o $@ $< loader: $(OBJECTS) - $(LD) $(LDFLAGS) -o $@ $(OBJECTS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) loader.bin: loader $(OBJCOPY) $(BIN_FLAGS) $< $@ diff --git a/target/linux/ar71xx/image/lzma-loader/src/head.S b/target/linux/ar71xx/image/lzma-loader/src/head.S index 47a7c9bd6..d414b14d1 100644 --- a/target/linux/ar71xx/image/lzma-loader/src/head.S +++ b/target/linux/ar71xx/image/lzma-loader/src/head.S @@ -42,6 +42,19 @@ LEAF(startup) mtc0 t0, CP0_STATUS ehb + /* + * Some bootloaders set the 'Kseg0 coherency algorithm' to + * 'Cacheable, noncoherent, write-through, no write allocate' + * and this cause performance issues. Let's go and change it to + * 'Cacheable, noncoherent, write-back, write allocate' + */ + mfc0 t0, CP0_CONFIG + li t1, ~7 #~CONF_CM_CMASK + and t0, t1 + ori t0, 3 #CONF_CM_CACHABLE_NONCOHERENT + mtc0 t0, CP0_CONFIG + nop + mtc0 zero, CP0_COUNT mtc0 zero, CP0_COMPARE ehb diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk index 4e81251d0..6d5b0fe8d 100644 --- a/target/linux/ar71xx/image/tp-link.mk +++ b/target/linux/ar71xx/image/tp-link.mk @@ -150,7 +150,7 @@ define Device/archer-c60-v1 MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware) SUPPORTED_DEVICES := archer-c60-v1 endef -TARGET_DEVICES += archer-c25-v1 archer-c58-v1 archer-c59-v1 archer-c60-v1 +TARGET_DEVICES += archer-c25-v1 archer-c59-v1 define Device/archer-c5-v1 $(Device/tplink-16mlzma) @@ -1043,7 +1043,6 @@ define Device/tl-wr902ac-v1 append-metadata | check-size $$$$(IMAGE_SIZE) MTDPARTS := spi0.0:128k(u-boot)ro,7360k(firmware),640k(tplink)ro,64k(art)ro endef -TARGET_DEVICES += tl-wr902ac-v1 define Device/tl-wr940n-v4 $(Device/tplink-8mlzma) @@ -1118,4 +1117,4 @@ define Device/tl-wr942n-v1 MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),13120k(rootfs),64k(product-info)ro,64k(partition-table)ro,256k(oem-config)ro,1344k(oem-vars)ro,64k(ART)ro,14464k@0x20000(firmware) SUPPORTED_DEVICES := tl-wr942n-v1 endef -TARGET_DEVICES += tl-wr940n-v4 tl-wr941nd-v2 tl-wr941nd-v3 tl-wr941nd-v4 tl-wr941nd-v5 tl-wr941nd-v6 tl-wr941nd-v6-cn tl-wr942n-v1 +TARGET_DEVICES += tl-wr940n-v4 tl-wr941nd-v2 tl-wr941nd-v3 tl-wr941nd-v4 tl-wr941nd-v5 tl-wr941nd-v6 tl-wr941nd-v6-cn diff --git a/target/linux/ar71xx/image/ubnt.mk b/target/linux/ar71xx/image/ubnt.mk index f80f2f1b3..dfc795bb2 100644 --- a/target/linux/ar71xx/image/ubnt.mk +++ b/target/linux/ar71xx/image/ubnt.mk @@ -256,4 +256,3 @@ define Device/ubnt-unifi-outdoor-plus BOARDNAME := UBNT-UOP DEVICE_PROFILE := UBNT endef -TARGET_DEVICES += ubnt-uap-pro ubnt-unifi-outdoor-plus diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default index e333166e9..42f9882bb 100644 --- a/target/linux/ar71xx/mikrotik/config-default +++ b/target/linux/ar71xx/mikrotik/config-default @@ -231,6 +231,7 @@ CONFIG_MTD_NAND_RB4XX=y CONFIG_MTD_NAND_RB750=y CONFIG_MTD_NAND_RB91X=y # CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y # CONFIG_MTD_SPLIT_EVA_FW is not set # CONFIG_MTD_SPLIT_TPLINK_FW is not set # CONFIG_MTD_TPLINK_PARTS is not set