From 041d7abc4aa47d732b264dc50973555af5cf980e Mon Sep 17 00:00:00 2001 From: AmadeusGhost <42570690+AmadeusGhost@users.noreply.github.com> Date: Sat, 28 Nov 2020 16:43:16 +0800 Subject: [PATCH] kernel: bump 5.4 to 5.4.79 and add mt7620-nand driver (#5830) * kernel: bump 5.4 to 5.4.79 * ramips: add mt7620-nand driver for NAND flash This add the mt7620-nand driver and enable nand ubifs for subtarget mt7620 Signed-off-by: Chen Minqiang Co-authored-by: Chen Minqiang --- include/kernel-version.mk | 4 +- package/boot/uboot-envtools/Makefile | 2 +- package/boot/uboot-envtools/files/mvebu | 1 + package/boot/uboot-layerscape/Makefile | 2 +- .../files/fsl_ls1012a-rdb-uEnv.txt | 3 +- .../files/fsl_ls1021a-twr-uEnv.txt | 3 +- .../files/fsl_ls1043a-rdb-uEnv.txt | 3 +- .../files/fsl_ls1046a-rdb-uEnv.txt | 3 +- package/firmware/linux-firmware/Makefile | 6 +- package/firmware/linux-firmware/broadcom.mk | 4 +- package/kernel/exfat/Makefile | 11 +- .../910-unaligned_access_hacks.patch | 2 +- target/linux/bcm27xx/image/Makefile | 16 +- ...de-for-using-the-closed-firmware-for.patch | 2 +- ...0134-spi-spi-bcm2835-Re-enable-HW-CS.patch | 2 +- ...i-bcm2835-Disable-forced-software-CS.patch | 16 +- ...2835-enable-shared-interrupt-support.patch | 2 +- ...ASH-Fix-spi-driver-compiler-warnings.patch | 3 +- ...s-Follow-DMA-parent-for-dma-coherent.patch | 2 +- ...de-dma_direct_map_resource-from-the-.patch | 2 +- ...950-0544-drm-vc4-drv-Support-BCM2711.patch | 2 +- ...-sfp-soft-status-and-control-support.patch | 8 +- ...25p80-mx-disable-software-protection.patch | 2 +- ...or-fix-Spansion-regressions-aliased-.patch | 2 +- ...ort-limiting-4K-sectors-support-base.patch | 6 +- ...or-rework-broken-flash-reset-support.patch | 2 +- ...ne-Fix-parsing-of-part-names-with-co.patch | 61 + .../pending-5.4/754-net-sfp-fix-unbind.patch | 2 +- ...M-dts-imx6qdl-gw5910-add-CC1352-UART.patch | 4 +- ...dl-gw5910-add-support-for-bcm4330-bt.patch | 8 +- ...ts-imx6qdl-gw5910-fix-wlan-regulator.patch | 4 +- ...add-qualcomm-essedma-ethernet-driver.patch | 2 +- ...xq-to-be-adaptive-of-cpus-and-netdev.patch | 14 +- .../716-essedma-reduce-write-reg.patch | 6 +- ...rt-adjusting-OPP-voltages-at-runtime.patch | 2 +- ...e-voltage-tolerance-when-adjusting-t.patch | 4 +- ...Use-bulk-clk-api-and-assert-on-error.patch | 10 +- ...6x-PCI-qcom-Add-ipq8064-rev2-variant.patch | 4 +- ...om-Support-pci-speed-set-for-ipq806x.patch | 4 +- ...06x-net-mdio-add-ipq8064-mdio-driver.patch | 2 +- ...re-PCIe-is-reset-before-init-for-rev.patch | 46 - target/linux/layerscape/armv7/config-5.4 | 3 + target/linux/layerscape/armv8_64b/config-5.4 | 10 + target/linux/layerscape/image/armv7.mk | 1 + target/linux/layerscape/image/armv8_64b.mk | 4 + ...-sysfs-entries-for-suppliers-and-con.patch | 6 +- ...acket-drops-at-low-traffic-rate-due-.patch | 2 +- ...y-Inphi-IN112525_s03-retimer-support.patch | 4 +- ...x-offload-Prepare-for-CAN-FD-support.patch | 10 +- ...devm_platform_ioremap_resource-to-si.patch | 4 +- ...can_irq_state-only-read-timestamp-if.patch | 4 +- ...me-macro-FLEXCAN_IFLAG_MB-FLEXCAN_IF.patch | 8 +- ...can_irq-rename-variable-reg_iflag-re.patch | 2 +- ...me-struct-flexcan_priv-reg_imask-1-2.patch | 8 +- ...ve-TX-mailbox-bit-from-struct-flexca.patch | 8 +- ...ert-struct-flexcan_priv-rx_mask-1-2-.patch | 8 +- ...oduce-struct-flexcan_priv-tx_mask-an.patch | 10 +- ...can_read_reg_iflag_rx-optimize-readi.patch | 4 +- ...can_irq-add-support-for-TX-mailbox-i.patch | 6 +- ...can_mailbox_read-make-use-of-flexcan.patch | 2 +- ...struct-canfd_frame-for-CAN-classic-f.patch | 10 +- ...-can-flexcan-add-CAN-FD-mode-support.patch | 24 +- ...0-can-flexcan-add-CAN-FD-BRS-support.patch | 4 +- ...excan-add-ISO-CAN-FD-feature-support.patch | 6 +- ...Transceiver-Delay-Compensation-suopp.patch | 6 +- ...-0023-can-flexcan-add-imx8qm-support.patch | 2 +- ...24-can-flexcan-add-lx2160ar1-support.patch | 4 +- ...can-add-LPSR-mode-support-for-i.MX7D.patch | 4 +- ...-fix-deadlock-when-using-self-wakeup.patch | 2 +- ...an-add-CAN-wakeup-function-for-i.MX8.patch | 12 +- ...dd-S32V234-support-to-FlexCAN-driver.patch | 6 +- ...low-specifying-s2-prot-bits-when-map.patch | 2 +- ...rop-qman-mmio-cacheable-mapping-hack.patch | 4 +- ...rial-lpuart-add-power-domain-support.patch | 4 +- ...al-fsl_lpuart-add-modem-device-reset.patch | 2 +- ...l-fsl_lpuart-add-magic-SysRq-support.patch | 2 +- ...K-18137-fsl_lpuart-Fix-loopback-mode.patch | 2 +- ...l_lpuart-enable-dma-mode-for-imx8qxp.patch | 55 +- ...rial-fsl_lpuart-enable-loopback-mode.patch | 2 +- ...rial-fsl_lpuart-check-dma_tx_in_prog.patch | 2 +- ...-fsl_lpuart-do-HW-reset-for-communic.patch | 12 +- ...-serial-lpuart-add-runtime-pm-suppor.patch | 22 +- ...uart-enable-wakeup-source-for-lpuart.patch | 14 +- ...rial-fsl_lpuart-enable-two-stop-bits.patch | 6 +- ...ty-serial-lpuart-add-LS1028A-support.patch | 68 - ...l-lpuart-support-UPIO_MEM32-for-lpua.patch | 2 +- ...5-usb-dwc3-add-otg-properties-update.patch | 2 +- ...ayerscape_fix_support_of_LS1012A-RDB.patch | 107 + .../901-fix_irq_type_of_pca953x.patch | 28 + ...cape_improve_support_of_LS1012A-FRDM.patch | 58 + .../patches-5.4/0003-switch-add-mt7531.patch | 4 +- .../patches-5.4/0005-dts-mt7622-add-gsw.patch | 6 +- .../0308-dts-mt7622-add-snand-support.patch | 4 +- ...dts-add-wmac-support-for-mt7622-rfb1.patch | 4 +- .../0990-gsw-rtl8367s-mt7622-support.patch | 2 +- ...ek-Split-PCIe-node-for-MT2712-MT7622.patch | 2 +- ...s-mt7622-rfb-change-to-ax-mtd-layout.patch | 2 +- .../base-files/etc/board.d/02_network | 3 + .../base-files/lib/upgrade/platform.sh | 3 + .../ieee80211/00-wifi-config-migrate | 0 .../base-files/sbin/fan_ctrl.sh | 0 .../boot/dts/armada-370-buffalo-ls421de.dts | 6 +- .../marvell/armada-3720-espressobin-ultra.dts | 241 ++ target/linux/mvebu/image/cortexa53.mk | 11 + ...-for-endpoint-to-be-ready-before-tr.patch} | 0 ...t-rely-on-jiffies-while-holding-spi.patch} | 0 ...troduce-mvneta_update_stats-routine.patch} | 2 +- .../004-add_sata_disk_activity_trigger.patch | 39 - ...uce-page-pool-API-for-sw-buffer-man.patch} | 2 +- ...n-build_skb-in-mvneta_rx_swbm-poll-.patch} | 2 +- ...06-net-mvneta-add-basic-XDP-support.patch} | 2 +- ...eader-prefetch-in-mvneta_swbm_rx_fr.patch} | 2 +- ...vneta-make-tx-buffer-array-agnostic.patch} | 2 +- ...> 009-net-mvneta-add-XDP_TX-support.patch} | 2 +- ...ix-build-skb-for-bm-capable-devices.patch} | 0 ...arm64-dts-uDPU-remove-i2c-fast-mode.patch} | 7 +- ...s-uDPU-SFP-cages-support-3W-modules.patch} | 7 +- ...n-page_pool_recycle_direct-in-mvnet.patch} | 0 ...allow-XDP-program-on-hardware-buffe.patch} | 0 ...P-support-if-sw-bm-is-used-as-fallb.patch} | 0 ...n-link-immediately-after-enabling-t.patch} | 0 ...-PCI-aardvark-Improve-link-training.patch} | 0 ...8-PCI-aardvark-Issue-PERST-via-GPIO.patch} | 0 ...=> 019-PCI-aardvark-Add-PHY-support.patch} | 0 ...-armada-37xx-Set-pcie_reset_pin-to-.patch} | 2 +- ...-armada-37xx-Move-PCIe-comphy-handl.patch} | 2 +- ...-armada-37xx-Move-PCIe-max-link-spe.patch} | 2 +- ...arm64-dts-add-uDPU-i2c-bus-recovery.patch} | 10 +- ...t-touch-PCIe-registers-if-no-card-c.patch} | 0 ...dd-driver-for-LinkStation-power-off.patch} | 32 +- ...initialization-with-old-Marvell-s-A.patch} | 0 ...-espressobin-Add-ethernet-switch-al.patch} | 46 - ...angle-bootloader-s-kernel-arguments.patch} | 0 ...mvebu-armada-38x-enable-libata-leds.patch} | 0 ...tables.patch => 302-add_powertables.patch} | 0 ...-linksys_hardcode_nand_ecc_settings.patch} | 0 ...delay.patch => 304-revert_i2c_delay.patch} | 0 ...=> 305-armada-385-rd-mtd-partitions.patch} | 0 ...306-ARM-mvebu-385-ap-Add-partitions.patch} | 0 ...armada-xp-linksys-mamba-broken-idle.patch} | 0 ... => 308-armada-xp-linksys-mamba-wan.patch} | 0 ...led.patch => 309-linksys-status-led.patch} | 0 ...=> 310-linksys-use-eth0-as-cpu-port.patch} | 0 ...> 311-adjust-compatible-for-linksys.patch} | 0 ...a388-clearfog-emmc-on-clearfog-base.patch} | 0 ...=> 312-helios4-dts-status-led-alias.patch} | 0 ...s-marvell-armada37xx-Add-eth0-alias.patch} | 0 ...-armada-3720-espressobin-add-ports-.patch} | 0 ...-espressobin-remove-COMPHY-nodes-as.patch} | 0 ...witch-PHY-operation-mode-to-2500base.patch | 34 + ..._root.patch => 400-find_active_root.patch} | 0 ...witch-PHY-operation-mode-to-2500base.patch | 20 - ...h => 700-mvneta-tx-queue-workaround.patch} | 0 ...icate-failure-to-enter-deeper-sleep.patch} | 0 ...pci-mvebu-time-out-reset-on-link-up.patch} | 0 ...or-support-mtd-name-from-device-tree.patch | 4 +- target/linux/ramips/mt7620/config-5.4 | 23 + ...38-mtd-ralink-add-mt7620-nand-driver.patch | 2386 +++++++++++++++++ ...driver-support-for-MT7621-nand-flash.patch | 10 +- .../linux/ramips/patches-5.4/991-at803x.patch | 49 +- 160 files changed, 3319 insertions(+), 518 deletions(-) create mode 100644 target/linux/generic/pending-5.4/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch delete mode 100644 target/linux/ipq806x/patches-5.4/096-PCI-qcom-Make-sure-PCIe-is-reset-before-init-for-rev.patch delete mode 100644 target/linux/layerscape/patches-5.4/819-uart-0012-tty-serial-lpuart-add-LS1028A-support.patch create mode 100644 target/linux/layerscape/patches-5.4/900-layerscape_fix_support_of_LS1012A-RDB.patch create mode 100644 target/linux/layerscape/patches-5.4/901-fix_irq_type_of_pca953x.patch create mode 100644 target/linux/layerscape/patches-5.4/902-layerscape_improve_support_of_LS1012A-FRDM.patch rename target/linux/mvebu/{ => cortexa9}/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate (100%) rename target/linux/mvebu/{ => cortexa9}/base-files/sbin/fan_ctrl.sh (100%) create mode 100644 target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts rename target/linux/mvebu/patches-5.4/{402-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch => 001-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch} (100%) rename target/linux/mvebu/patches-5.4/{403-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch => 002-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch} (100%) rename target/linux/mvebu/patches-5.4/{010-net-mvneta-introduce-mvneta_update_stats-routine.patch => 003-net-mvneta-introduce-mvneta_update_stats-routine.patch} (97%) delete mode 100644 target/linux/mvebu/patches-5.4/004-add_sata_disk_activity_trigger.patch rename target/linux/mvebu/patches-5.4/{011-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch => 004-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch} (98%) rename target/linux/mvebu/patches-5.4/{012-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch => 005-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch} (99%) rename target/linux/mvebu/patches-5.4/{013-net-mvneta-add-basic-XDP-support.patch => 006-net-mvneta-add-basic-XDP-support.patch} (99%) rename target/linux/mvebu/patches-5.4/{014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch => 007-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch} (95%) rename target/linux/mvebu/patches-5.4/{015-net-mvneta-make-tx-buffer-array-agnostic.patch => 008-net-mvneta-make-tx-buffer-array-agnostic.patch} (98%) rename target/linux/mvebu/patches-5.4/{016-net-mvneta-add-XDP_TX-support.patch => 009-net-mvneta-add-XDP_TX-support.patch} (98%) rename target/linux/mvebu/patches-5.4/{020-net-mvneta-fix-build-skb-for-bm-capable-devices.patch => 010-net-mvneta-fix-build-skb-for-bm-capable-devices.patch} (100%) rename target/linux/mvebu/patches-5.4/{545-arm64-dts-uDPU-remove-i2c-fast-mode.patch => 011-arm64-dts-uDPU-remove-i2c-fast-mode.patch} (76%) rename target/linux/mvebu/patches-5.4/{546-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch => 012-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch} (81%) rename target/linux/mvebu/patches-5.4/{021-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch => 013-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch} (100%) rename target/linux/mvebu/patches-5.4/{022-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch => 014-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch} (100%) rename target/linux/mvebu/patches-5.4/{023-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch => 015-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch} (100%) rename target/linux/mvebu/patches-5.4/{404-PCI-aardvark-Train-link-immediately-after-enabling-t.patch => 016-PCI-aardvark-Train-link-immediately-after-enabling-t.patch} (100%) rename target/linux/mvebu/patches-5.4/{405-PCI-aardvark-Improve-link-training.patch => 017-PCI-aardvark-Improve-link-training.patch} (100%) rename target/linux/mvebu/patches-5.4/{406-PCI-aardvark-Issue-PERST-via-GPIO.patch => 018-PCI-aardvark-Issue-PERST-via-GPIO.patch} (100%) rename target/linux/mvebu/patches-5.4/{407-PCI-aardvark-Add-PHY-support.patch => 019-PCI-aardvark-Add-PHY-support.patch} (100%) rename target/linux/mvebu/patches-5.4/{552-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch => 020-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch} (99%) rename target/linux/mvebu/patches-5.4/{553-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch => 021-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch} (99%) rename target/linux/mvebu/patches-5.4/{554-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch => 022-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch} (98%) rename target/linux/mvebu/patches-5.4/{551-v5.8-arm64-dts-add-uDPU-i2c-bus-recovery.patch => 023-arm64-dts-add-uDPU-i2c-bus-recovery.patch} (72%) rename target/linux/mvebu/patches-5.4/{408-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch => 024-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch} (100%) rename target/linux/mvebu/patches-5.4/{030-linkstation-poweroff.patch => 025-power-reset-add-driver-for-LinkStation-power-off.patch} (79%) rename target/linux/mvebu/patches-5.4/{410-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch => 026-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch} (100%) rename target/linux/mvebu/patches-5.4/{521-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch => 027-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch} (74%) rename target/linux/mvebu/patches-5.4/{006-mvebu-Mangle-bootloader-s-kernel-arguments.patch => 300-mvebu-Mangle-bootloader-s-kernel-arguments.patch} (100%) rename target/linux/mvebu/patches-5.4/{561-mvebu-armada-38x-enable-libata-leds.patch => 301-mvebu-armada-38x-enable-libata-leds.patch} (100%) rename target/linux/mvebu/patches-5.4/{002-add_powertables.patch => 302-add_powertables.patch} (100%) rename target/linux/mvebu/patches-5.4/{005-linksys_hardcode_nand_ecc_settings.patch => 303-linksys_hardcode_nand_ecc_settings.patch} (100%) rename target/linux/mvebu/patches-5.4/{102-revert_i2c_delay.patch => 304-revert_i2c_delay.patch} (100%) rename target/linux/mvebu/patches-5.4/{205-armada-385-rd-mtd-partitions.patch => 305-armada-385-rd-mtd-partitions.patch} (100%) rename target/linux/mvebu/patches-5.4/{206-ARM-mvebu-385-ap-Add-partitions.patch => 306-ARM-mvebu-385-ap-Add-partitions.patch} (100%) rename target/linux/mvebu/patches-5.4/{230-armada-xp-linksys-mamba-broken-idle.patch => 307-armada-xp-linksys-mamba-broken-idle.patch} (100%) rename target/linux/mvebu/patches-5.4/{231-armada-xp-linksys-mamba-wan.patch => 308-armada-xp-linksys-mamba-wan.patch} (100%) rename target/linux/mvebu/patches-5.4/{240-linksys-status-led.patch => 309-linksys-status-led.patch} (100%) rename target/linux/mvebu/patches-5.4/{241-linksys-use-eth0-as-cpu-port.patch => 310-linksys-use-eth0-as-cpu-port.patch} (100%) rename target/linux/mvebu/patches-5.4/{250-adjust-compatible-for-linksys.patch => 311-adjust-compatible-for-linksys.patch} (100%) rename target/linux/mvebu/patches-5.4/{412-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch => 312-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch} (100%) rename target/linux/mvebu/patches-5.4/{560-helios4-dts-status-led-alias.patch => 312-helios4-dts-status-led-alias.patch} (100%) rename target/linux/mvebu/patches-5.4/{520-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch => 314-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch} (100%) rename target/linux/mvebu/patches-5.4/{522-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch => 315-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch} (100%) rename target/linux/mvebu/patches-5.4/{523-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch => 316-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch} (100%) create mode 100644 target/linux/mvebu/patches-5.4/317-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch rename target/linux/mvebu/patches-5.4/{100-find_active_root.patch => 400-find_active_root.patch} (100%) delete mode 100644 target/linux/mvebu/patches-5.4/550-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch rename target/linux/mvebu/patches-5.4/{300-mvneta-tx-queue-workaround.patch => 700-mvneta-tx-queue-workaround.patch} (100%) rename target/linux/mvebu/patches-5.4/{400-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch => 800-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch} (100%) rename target/linux/mvebu/patches-5.4/{401-pci-mvebu-time-out-reset-on-link-up.patch => 801-pci-mvebu-time-out-reset-on-link-up.patch} (100%) create mode 100644 target/linux/ramips/patches-5.4/0038-mtd-ralink-add-mt7620-nand-driver.patch diff --git a/include/kernel-version.mk b/include/kernel-version.mk index ef49cfd9d..3de3bc705 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -8,11 +8,11 @@ endif LINUX_VERSION-4.14 = .195 LINUX_VERSION-4.19 = .138 -LINUX_VERSION-5.4 = .75 +LINUX_VERSION-5.4 = .79 LINUX_KERNEL_HASH-4.14.195 = 394f28798670240baacd9e2cce521fbd79f8da5e1fc191695b0e11381445a021 LINUX_KERNEL_HASH-4.19.138 = d15c27d05f6c527269b75b30cc72972748e55720e7e00ad8abbaa4fe3b1d5e02 -LINUX_KERNEL_HASH-5.4.75 = d2466fd6eb5433e7bf287b617b11b2640c65a7ea93a57eb7a80d7f537cbc1470 +LINUX_KERNEL_HASH-5.4.79 = a59091fb08ff66a344a7842b7c891f36cef609eed1d2944edf475cca8d91ce25 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) diff --git a/package/boot/uboot-envtools/Makefile b/package/boot/uboot-envtools/Makefile index 473704053..73cd083d0 100644 --- a/package/boot/uboot-envtools/Makefile +++ b/package/boot/uboot-envtools/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uboot-envtools PKG_DISTNAME:=u-boot PKG_VERSION:=2020.04 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:= \ diff --git a/package/boot/uboot-envtools/files/mvebu b/package/boot/uboot-envtools/files/mvebu index 85101cf35..afa058a39 100644 --- a/package/boot/uboot-envtools/files/mvebu +++ b/package/boot/uboot-envtools/files/mvebu @@ -26,6 +26,7 @@ glinet,gl-mv1000) ;; globalscale,espressobin|\ globalscale,espressobin-emmc|\ +globalscale,espressobin-ultra|\ globalscale,espressobin-v7|\ globalscale,espressobin-v7-emmc) idx="$(find_mtd_index u-boot-env)" diff --git a/package/boot/uboot-layerscape/Makefile b/package/boot/uboot-layerscape/Makefile index 5d6a956ae..ec1b45d70 100644 --- a/package/boot/uboot-layerscape/Makefile +++ b/package/boot/uboot-layerscape/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uboot-layerscape PKG_VERSION:=LSDK-20.04-update-290520 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://source.codeaurora.org/external/qoriq/qoriq-components/u-boot diff --git a/package/boot/uboot-layerscape/files/fsl_ls1012a-rdb-uEnv.txt b/package/boot/uboot-layerscape/files/fsl_ls1012a-rdb-uEnv.txt index 906feec9e..1d108a1b0 100644 --- a/package/boot/uboot-layerscape/files/fsl_ls1012a-rdb-uEnv.txt +++ b/package/boot/uboot-layerscape/files/fsl_ls1012a-rdb-uEnv.txt @@ -1,7 +1,6 @@ fdtaddr=0x8f000000 loadaddr=0x81000000 -fdt_high=0xffffffffffffffff -initrd_high=0xffffffffffffffff +bootm_size=0x10000000 qspi_boot=sf probe 0:0;sf read $fdtaddr f00000 100000;sf read $loadaddr 1000000 1000000;bootm $loadaddr - $fdtaddr bootargs=root=/dev/mtdblock8 rootfstype=squashfs,jffs2 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 mtdparts=1550000.spi:1m(bl2),4m(fip),1m(u-boot-env),4m(reserved-1),3m(pfe),2m(reserved-2),1m(dtb),16m(kernel),32m(rootfs),49m@0xf00000(firmware) bootcmd=echo starting openwrt ...;pfe stop;run qspi_boot diff --git a/package/boot/uboot-layerscape/files/fsl_ls1021a-twr-uEnv.txt b/package/boot/uboot-layerscape/files/fsl_ls1021a-twr-uEnv.txt index c0792c51e..6e39e0552 100644 --- a/package/boot/uboot-layerscape/files/fsl_ls1021a-twr-uEnv.txt +++ b/package/boot/uboot-layerscape/files/fsl_ls1021a-twr-uEnv.txt @@ -1,7 +1,6 @@ fdtaddr=0x8f000000 loadaddr=0x81000000 -fdt_high=0xffffffff -initrd_high=0xffffffff +bootm_size=0x10000000 nor_boot=cp.b 60f00000 $fdtaddr 100000;cp.b 61000000 $loadaddr 1000000;bootm $loadaddr - $fdtaddr bootargs=root=/dev/mtdblock6 rootfstype=squashfs,jffs2 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 mtdparts=60000000.nor:1m(rcw),2m(u-boot),1m(u-boot-env),11m(reserved-1),1m(dtb),16m(kernel),32m(rootfs),49m@0xf00000(firmware) cma=64M@0x0-0xb0000000 bootcmd=echo starting openwrt ...;run nor_boot diff --git a/package/boot/uboot-layerscape/files/fsl_ls1043a-rdb-uEnv.txt b/package/boot/uboot-layerscape/files/fsl_ls1043a-rdb-uEnv.txt index 3a958ce90..b381bde18 100644 --- a/package/boot/uboot-layerscape/files/fsl_ls1043a-rdb-uEnv.txt +++ b/package/boot/uboot-layerscape/files/fsl_ls1043a-rdb-uEnv.txt @@ -1,7 +1,6 @@ fdtaddr=0x8f000000 loadaddr=0x81000000 -fdt_high=0xffffffffffffffff -initrd_high=0xffffffffffffffff +bootm_size=0x10000000 hwconfig=fsl_ddr:bank_intlv=auto nor_boot=cp.b 60f00000 $fdtaddr 100000;cp.b 61000000 $loadaddr 1000000;bootm $loadaddr - $fdtaddr bootargs=root=/dev/mtdblock8 rootfstype=squashfs,jffs2 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 mtdparts=60000000.nor:1m(bl2),4m(fip),1m(u-boot-env),3m(reserved-1),256k(fman),5888k(reserved-2),1m(dtb),16m(kernel),32m(rootfs),49m@0xf00000(firmware) diff --git a/package/boot/uboot-layerscape/files/fsl_ls1046a-rdb-uEnv.txt b/package/boot/uboot-layerscape/files/fsl_ls1046a-rdb-uEnv.txt index a9b91e5ac..d24f9ec20 100644 --- a/package/boot/uboot-layerscape/files/fsl_ls1046a-rdb-uEnv.txt +++ b/package/boot/uboot-layerscape/files/fsl_ls1046a-rdb-uEnv.txt @@ -1,7 +1,6 @@ fdtaddr=0x8f000000 loadaddr=0x81000000 -fdt_high=0xffffffffffffffff -initrd_high=0xffffffffffffffff +bootm_size=0x10000000 hwconfig=fsl_ddr:bank_intlv=auto qspi_boot=sf probe 0:0;sf read $fdtaddr f00000 100000;sf read $loadaddr 1000000 1000000;bootm $loadaddr - $fdtaddr bootargs=root=/dev/mtdblock9 rootfstype=squashfs,jffs2 noinitrd earlycon=uart8250,mmio,0x21c0500 console=ttyS0,115200 mtdparts=1550000.spi-0:1m(bl2),4m(fip),1m(u-boot-env),3m(reserved-1),256k(fman),5888k(reserved-2),1m(dtb),16m(kernel),32m(rootfs),49m@0xf00000(firmware) diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile index 9acf5b5dc..877a58d3d 100644 --- a/package/firmware/linux-firmware/Makefile +++ b/package/firmware/linux-firmware/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=linux-firmware -PKG_VERSION:=20201022 -PKG_RELEASE:=1 +PKG_VERSION:=20201118 +PKG_RELEASE:=2 PKG_SOURCE_URL:=@KERNEL/linux/kernel/firmware PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=bf586e0beb4c65f22bf0a79811f259aa0a5a7cc9f70eebecb260525b6914cef7 +PKG_HASH:=863d5a31da725b856a917280d1e3014929b3bc3d4e6e5faecf530c13afb7e2b9 PKG_MAINTAINER:=Felix Fietkau diff --git a/package/firmware/linux-firmware/broadcom.mk b/package/firmware/linux-firmware/broadcom.mk index 4f7492a2d..00f707610 100644 --- a/package/firmware/linux-firmware/broadcom.mk +++ b/package/firmware/linux-firmware/broadcom.mk @@ -101,9 +101,7 @@ Package/brcmfmac-firmware-43455-sdio-rpi-4b = $(call Package/firmware-default,Br define Package/brcmfmac-firmware-43455-sdio-rpi-4b/install $(INSTALL_DIR) $(1)/lib/firmware/brcm $(INSTALL_DATA) \ - $(PKG_BUILD_DIR)/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt \ - $(1)/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt - $(SED) 's/boardflags3=.*/boardflags3=0x44200100/g' \ + $(PKG_BUILD_DIR)/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt \ $(1)/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt endef $(eval $(call BuildPackage,brcmfmac-firmware-43455-sdio-rpi-4b)) diff --git a/package/kernel/exfat/Makefile b/package/kernel/exfat/Makefile index 2cd7b9966..3f873a71e 100644 --- a/package/kernel/exfat/Makefile +++ b/package/kernel/exfat/Makefile @@ -7,29 +7,28 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=exfat -PKG_VERSION:=5.8.7 +PKG_VERSION:=5.10.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/namjaejeon/linux-exfat-oot/tar.gz/$(PKG_VERSION)? -PKG_HASH:=20254677bed3f456e89cc9d757c1a47abbadab4d75640eef4a995370a37be3f4 +PKG_HASH:=0ff77dd7d39eb231d00c3c4909b9fad31ebeeb618bd6fa18fce142becc9c1f98 +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-exfat-oot-$(PKG_VERSION) PKG_MAINTAINER:= PKG_LICENSE:=GPL-2.0-only include $(INCLUDE_DIR)/package.mk -TAR_OPTIONS+= --strip-components 1 -TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS) - define KernelPackage/fs-exfat SECTION:=kernel CATEGORY:=Kernel modules SUBMENU:=Filesystems TITLE:=exFAT kernel module + URL:=https://github.com/namjaejeon/linux-exfat-oot FILES:=$(PKG_BUILD_DIR)/exfat.ko AUTOLOAD:=$(call AutoProbe,exfat) - DEPENDS:=+kmod-nls-base + DEPENDS:= +kmod-nls-base endef define KernelPackage/exfat/description diff --git a/target/linux/ath79/patches-5.4/910-unaligned_access_hacks.patch b/target/linux/ath79/patches-5.4/910-unaligned_access_hacks.patch index e77289dc5..e5aa9dccc 100644 --- a/target/linux/ath79/patches-5.4/910-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-5.4/910-unaligned_access_hacks.patch @@ -864,6 +864,6 @@ ipv6_hdr(skb)->hop_limit != hop_limit || - flowlabel != *((u_int32_t *)ipv6_hdr(skb)))) { + flowlabel != net_hdr_word(ipv6_hdr(skb)))) { - err = ip6_route_me_harder(state->net, skb); + err = ip6_route_me_harder(state->net, state->sk, skb); if (err < 0) ret = NF_DROP_ERR(err); diff --git a/target/linux/bcm27xx/image/Makefile b/target/linux/bcm27xx/image/Makefile index f009b997e..ec0255bc0 100644 --- a/target/linux/bcm27xx/image/Makefile +++ b/target/linux/bcm27xx/image/Makefile @@ -86,7 +86,14 @@ ifeq ($(SUBTARGET),bcm2708) endif define Device/rpi-2 - DEVICE_MODEL := 2B/3B/3B+/3CM/4B + DEVICE_MODEL := 2B/2B 1.2 + DEVICE_VARIANT := (32bit) + DEVICE_ALT0_VENDOR := Raspberry Pi + DEVICE_ALT0_MODEL := 3B/3B+/3CM + DEVICE_ALT0_VARIANT := (32bit) + DEVICE_ALT1_VENDOR := Raspberry Pi + DEVICE_ALT1_MODEL := 4B + DEVICE_ALT1_VARIANT := (32bit) DEVICE_DTS := \ bcm2709-rpi-2-b bcm2710-rpi-2-b \ bcm2710-rpi-3-b bcm2710-rpi-3-b-plus \ @@ -112,7 +119,11 @@ ifeq ($(SUBTARGET),bcm2709) endif define Device/rpi-3 - DEVICE_MODEL := 2B-1.2/3B/3B+/3CM + DEVICE_MODEL := 3B/3B+/3CM + DEVICE_VARIANT := (64bit) + DEVICE_ALT0_VENDOR := Raspberry Pi + DEVICE_ALT0_MODEL := 2B-1.2 + DEVICE_ALT0_VARIANT := (64bit) KERNEL_IMG := kernel8.img DEVICE_DTS := \ broadcom/bcm2710-rpi-2-b \ @@ -136,6 +147,7 @@ endif define Device/rpi-4 DEVICE_MODEL := 4B + DEVICE_VARIANT := (64bit) KERNEL_IMG := kernel8.img DEVICE_DTS := broadcom/bcm2711-rpi-4-b SUPPORTED_DEVICES := \ diff --git a/target/linux/bcm27xx/patches-5.4/950-0095-drm-vc4-Add-a-mode-for-using-the-closed-firmware-for.patch b/target/linux/bcm27xx/patches-5.4/950-0095-drm-vc4-Add-a-mode-for-using-the-closed-firmware-for.patch index d09becc81..a9f3256b3 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0095-drm-vc4-Add-a-mode-for-using-the-closed-firmware-for.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0095-drm-vc4-Add-a-mode-for-using-the-closed-firmware-for.patch @@ -70,7 +70,7 @@ Signed-off-by: Eric Anholt --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c -@@ -345,6 +345,7 @@ static struct platform_driver *const com +@@ -346,6 +346,7 @@ static struct platform_driver *const com &vc4_txp_driver, &vc4_hvs_driver, &vc4_crtc_driver, diff --git a/target/linux/bcm27xx/patches-5.4/950-0134-spi-spi-bcm2835-Re-enable-HW-CS.patch b/target/linux/bcm27xx/patches-5.4/950-0134-spi-spi-bcm2835-Re-enable-HW-CS.patch index d8cac64e8..13dd356f9 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0134-spi-spi-bcm2835-Re-enable-HW-CS.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0134-spi-spi-bcm2835-Re-enable-HW-CS.patch @@ -70,7 +70,7 @@ Signed-off-by: Phil Elwell } static int bcm2835_spi_setup(struct spi_device *spi) -@@ -1289,6 +1337,7 @@ static int bcm2835_spi_probe(struct plat +@@ -1276,6 +1324,7 @@ static int bcm2835_spi_probe(struct plat ctlr->bits_per_word_mask = SPI_BPW_MASK(8); ctlr->num_chipselect = BCM2835_SPI_NUM_CS; ctlr->setup = bcm2835_spi_setup; diff --git a/target/linux/bcm27xx/patches-5.4/950-0135-spi-spi-bcm2835-Disable-forced-software-CS.patch b/target/linux/bcm27xx/patches-5.4/950-0135-spi-spi-bcm2835-Disable-forced-software-CS.patch index 92b237857..752464087 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0135-spi-spi-bcm2835-Disable-forced-software-CS.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0135-spi-spi-bcm2835-Disable-forced-software-CS.patch @@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c -@@ -1279,43 +1279,6 @@ static int bcm2835_spi_setup(struct spi_ +@@ -1278,31 +1278,6 @@ static int bcm2835_spi_setup(struct spi_ return -EINVAL; } @@ -31,21 +31,9 @@ Signed-off-by: Phil Elwell - if (!chip) - return 0; - -- /* -- * Retrieve the corresponding GPIO line used for CS. -- * The inversion semantics will be handled by the GPIO core -- * code, so we pass GPIOS_OUT_LOW for "unasserted" and -- * the correct flag for inversion semantics. The SPI_CS_HIGH -- * on spi->mode cannot be checked for polarity in this case -- * as the flag use_gpio_descriptors enforces SPI_CS_HIGH. -- */ -- if (of_property_read_bool(spi->dev.of_node, "spi-cs-high")) -- lflags = GPIO_ACTIVE_HIGH; -- else -- lflags = GPIO_ACTIVE_LOW; - spi->cs_gpiod = gpiochip_request_own_desc(chip, 8 - spi->chip_select, - DRV_NAME, -- lflags, +- GPIO_LOOKUP_FLAGS_DEFAULT, - GPIOD_OUT_LOW); - if (IS_ERR(spi->cs_gpiod)) - return PTR_ERR(spi->cs_gpiod); diff --git a/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch b/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch index 5e2a36775..fb0a0699c 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0215-spi-bcm2835-enable-shared-interrupt-support.patch @@ -23,7 +23,7 @@ Signed-off-by: Martin Sperl /* Read as many bytes as possible from FIFO */ bcm2835_rd_fifo(bs); /* Write as many bytes as possible to FIFO */ -@@ -1335,7 +1339,8 @@ static int bcm2835_spi_probe(struct plat +@@ -1334,7 +1338,8 @@ static int bcm2835_spi_probe(struct plat bcm2835_wr(bs, BCM2835_SPI_CS, BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); diff --git a/target/linux/bcm27xx/patches-5.4/950-0414-SQUASH-Fix-spi-driver-compiler-warnings.patch b/target/linux/bcm27xx/patches-5.4/950-0414-SQUASH-Fix-spi-driver-compiler-warnings.patch index bccf74b41..f233c4aed 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0414-SQUASH-Fix-spi-driver-compiler-warnings.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0414-SQUASH-Fix-spi-driver-compiler-warnings.patch @@ -12,12 +12,11 @@ Signed-off-by: Phil Elwell --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c -@@ -1230,8 +1230,6 @@ static int bcm2835_spi_setup(struct spi_ +@@ -1230,7 +1230,6 @@ static int bcm2835_spi_setup(struct spi_ { struct spi_controller *ctlr = spi->controller; struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); - struct gpio_chip *chip; -- enum gpio_lookup_flags lflags; u32 cs; /* diff --git a/target/linux/bcm27xx/patches-5.4/950-0436-of-address-Follow-DMA-parent-for-dma-coherent.patch b/target/linux/bcm27xx/patches-5.4/950-0436-of-address-Follow-DMA-parent-for-dma-coherent.patch index dbfb1025c..76af58a12 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0436-of-address-Follow-DMA-parent-for-dma-coherent.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0436-of-address-Follow-DMA-parent-for-dma-coherent.patch @@ -19,7 +19,7 @@ Signed-off-by: Rob Herring --- a/drivers/of/address.c +++ b/drivers/of/address.c -@@ -1023,7 +1023,7 @@ bool of_dma_is_coherent(struct device_no +@@ -1025,7 +1025,7 @@ bool of_dma_is_coherent(struct device_no of_node_put(node); return true; } diff --git a/target/linux/bcm27xx/patches-5.4/950-0450-dma-direct-exclude-dma_direct_map_resource-from-the-.patch b/target/linux/bcm27xx/patches-5.4/950-0450-dma-direct-exclude-dma_direct_map_resource-from-the-.patch index bb6b40551..2534b71b7 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0450-dma-direct-exclude-dma_direct_map_resource-from-the-.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0450-dma-direct-exclude-dma_direct_map_resource-from-the-.patch @@ -104,7 +104,7 @@ Tested-by: Marek Szyprowski } --- a/kernel/dma/swiotlb.c +++ b/kernel/dma/swiotlb.c -@@ -678,7 +678,7 @@ bool swiotlb_map(struct device *dev, phy +@@ -682,7 +682,7 @@ bool swiotlb_map(struct device *dev, phy /* Ensure that the address returned is DMA'ble */ *dma_addr = __phys_to_dma(dev, *phys); diff --git a/target/linux/bcm27xx/patches-5.4/950-0544-drm-vc4-drv-Support-BCM2711.patch b/target/linux/bcm27xx/patches-5.4/950-0544-drm-vc4-drv-Support-BCM2711.patch index 00bac3a2b..9a0f790ff 100644 --- a/target/linux/bcm27xx/patches-5.4/950-0544-drm-vc4-drv-Support-BCM2711.patch +++ b/target/linux/bcm27xx/patches-5.4/950-0544-drm-vc4-drv-Support-BCM2711.patch @@ -17,7 +17,7 @@ Signed-off-by: Maxime Ripard --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c -@@ -368,6 +368,7 @@ static int vc4_platform_drm_remove(struc +@@ -369,6 +369,7 @@ static int vc4_platform_drm_remove(struc } static const struct of_device_id vc4_of_match[] = { diff --git a/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch b/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch index 6e3c87a7e..abc9f65f0 100644 --- a/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch +++ b/target/linux/generic/backport-5.4/744-v5.5-net-sfp-soft-status-and-control-support.patch @@ -187,16 +187,16 @@ Signed-off-by: Russell King int err, i; sfp = sfp_alloc(&pdev->dev); -@@ -2183,7 +2253,7 @@ static int sfp_probe(struct platform_dev - +@@ -2184,7 +2254,7 @@ static int sfp_probe(struct platform_dev sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]); - if (!sfp->gpio_irq[i]) { + if (sfp->gpio_irq[i] < 0) { + sfp->gpio_irq[i] = 0; - poll = true; + sfp->need_poll = true; continue; } -@@ -2195,11 +2265,11 @@ static int sfp_probe(struct platform_dev +@@ -2196,11 +2266,11 @@ static int sfp_probe(struct platform_dev dev_name(sfp->dev), sfp); if (err) { sfp->gpio_irq[i] = 0; diff --git a/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch b/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch index 24d2d4567..7c11ad356 100644 --- a/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch +++ b/target/linux/generic/pending-5.4/465-m25p80-mx-disable-software-protection.patch @@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -4884,6 +4884,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -4883,6 +4883,7 @@ int spi_nor_scan(struct spi_nor *nor, co */ if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL || JEDEC_MFR(nor->info) == SNOR_MFR_INTEL || diff --git a/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch b/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch index c5db43b5e..77b9b72b3 100644 --- a/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch +++ b/target/linux/generic/pending-5.4/466-Revert-mtd-spi-nor-fix-Spansion-regressions-aliased-.patch @@ -25,7 +25,7 @@ Signed-off-by: Matthias Schiffer nor->params.set_4byte = winbond_set_4byte; } -@@ -4886,6 +4887,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -4885,6 +4886,7 @@ int spi_nor_scan(struct spi_nor *nor, co JEDEC_MFR(nor->info) == SNOR_MFR_INTEL || JEDEC_MFR(nor->info) == SNOR_MFR_MACRONIX || JEDEC_MFR(nor->info) == SNOR_MFR_SST || diff --git a/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch b/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch index d3e587ff9..7773a8ec0 100644 --- a/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch +++ b/target/linux/generic/pending-5.4/470-mtd-spi-nor-support-limiting-4K-sectors-support-base.patch @@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau depends on OF && (ARM || ARM64 || COMPILE_TEST) --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -4464,6 +4464,7 @@ static void spi_nor_info_init_params(str +@@ -4463,6 +4463,7 @@ static void spi_nor_info_init_params(str struct spi_nor_erase_map *map = ¶ms->erase_map; const struct flash_info *info = nor->info; struct device_node *np = spi_nor_get_flash_node(nor); @@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau u8 i, erase_mask; /* Initialize legacy flash parameters and settings. */ -@@ -4527,6 +4528,21 @@ static void spi_nor_info_init_params(str +@@ -4526,6 +4527,21 @@ static void spi_nor_info_init_params(str */ erase_mask = 0; i = 0; @@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau if (info->flags & SECT_4K_PMC) { erase_mask |= BIT(i); spi_nor_set_erase_type(&map->erase_type[i], 4096u, -@@ -4538,6 +4554,7 @@ static void spi_nor_info_init_params(str +@@ -4537,6 +4553,7 @@ static void spi_nor_info_init_params(str SPINOR_OP_BE_4K); i++; } diff --git a/target/linux/generic/pending-5.4/481-mtd-spi-nor-rework-broken-flash-reset-support.patch b/target/linux/generic/pending-5.4/481-mtd-spi-nor-rework-broken-flash-reset-support.patch index b2f73a5cb..8add1f779 100644 --- a/target/linux/generic/pending-5.4/481-mtd-spi-nor-rework-broken-flash-reset-support.patch +++ b/target/linux/generic/pending-5.4/481-mtd-spi-nor-rework-broken-flash-reset-support.patch @@ -148,7 +148,7 @@ Signed-off-by: Chuanhong Guo spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE); return ret; } -@@ -4726,9 +4768,13 @@ static int spi_nor_init(struct spi_nor * +@@ -4725,9 +4767,13 @@ static int spi_nor_init(struct spi_nor * * reboots (e.g., crashes). Warn the user (or hopefully, system * designer) that this is bad. */ diff --git a/target/linux/generic/pending-5.4/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch b/target/linux/generic/pending-5.4/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch new file mode 100644 index 000000000..8724c1b7d --- /dev/null +++ b/target/linux/generic/pending-5.4/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch @@ -0,0 +1,61 @@ +From: Sven Eckelmann +Date: Sun, 22 Nov 2020 00:48:33 +0100 +Subject: [PATCH RFC] mtd: parser: cmdline: Fix parsing of part-names with colons + +Some devices (especially QCA ones) are already using hardcoded partition +names with colons in it. The OpenMesh A62 for example provides following +mtd relevant information via cmdline: + + root=31:11 mtdparts=spi0.0:256k(0:SBL1),128k(0:MIBIB),384k(0:QSEE),64k(0:CDT),64k(0:DDRPARAMS),64k(0:APPSBLENV),512k(0:APPSBL),64k(0:ART),64k(custom),64k(0:KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive) rootfsname=rootfs rootwait + +The change to split only on the last colon between mtd-id and partitions +will cause newpart to see following string for the first partition: + + KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive) + +Such a partition list cannot be parsed and thus the device fails to boot. + +Avoid this behavior by making sure that the start of the first part-name +("(") will also be the last byte the mtd-id split algorithm is using for +its colon search. + +Forwarded: https://patchwork.ozlabs.org/project/linux-mtd/patch/20201122001533.985641-1-sven@narfation.org/ +Fixes: eb13fa022741 ("mtd: parser: cmdline: Support MTD names containing one or more colons") +Signed-off-by: Sven Eckelmann + +--- a/drivers/mtd/parsers/cmdlinepart.c ++++ b/drivers/mtd/parsers/cmdlinepart.c +@@ -218,7 +218,7 @@ static int mtdpart_setup_real(char *s) + struct cmdline_mtd_partition *this_mtd; + struct mtd_partition *parts; + int mtd_id_len, num_parts; +- char *p, *mtd_id, *semicol; ++ char *p, *mtd_id, *semicol, *open_parenth; + + /* + * Replace the first ';' by a NULL char so strrchr can work +@@ -228,6 +228,13 @@ static int mtdpart_setup_real(char *s) + if (semicol) + *semicol = '\0'; + ++ /* make sure that part-names with ":" will not be handled as ++ * part of the mtd-id with an ":" ++ */ ++ open_parenth = strchr(s, '('); ++ if (open_parenth) ++ *open_parenth = '\0'; ++ + mtd_id = s; + + /* +@@ -237,6 +244,10 @@ static int mtdpart_setup_real(char *s) + */ + p = strrchr(s, ':'); + ++ /* Restore the '(' now. */ ++ if (open_parenth) ++ *open_parenth = '('; ++ + /* Restore the ';' now. */ + if (semicol) + *semicol = ';'; diff --git a/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch b/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch index d5f364502..8d98a5d7a 100644 --- a/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch +++ b/target/linux/generic/pending-5.4/754-net-sfp-fix-unbind.patch @@ -15,7 +15,7 @@ Signed-off-by: Russell King --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c -@@ -2343,6 +2343,10 @@ static int sfp_remove(struct platform_de +@@ -2344,6 +2344,10 @@ static int sfp_remove(struct platform_de sfp_unregister_socket(sfp->sfp_bus); diff --git a/target/linux/imx6/patches-5.4/006-v5.7-ARM-dts-imx6qdl-gw5910-add-CC1352-UART.patch b/target/linux/imx6/patches-5.4/006-v5.7-ARM-dts-imx6qdl-gw5910-add-CC1352-UART.patch index 5873e9262..72a98a2b1 100644 --- a/target/linux/imx6/patches-5.4/006-v5.7-ARM-dts-imx6qdl-gw5910-add-CC1352-UART.patch +++ b/target/linux/imx6/patches-5.4/006-v5.7-ARM-dts-imx6qdl-gw5910-add-CC1352-UART.patch @@ -13,7 +13,7 @@ Signed-off-by: Shawn Guo --- a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi -@@ -220,6 +220,14 @@ +@@ -218,6 +218,14 @@ status = "okay"; }; @@ -28,7 +28,7 @@ Signed-off-by: Shawn Guo /* Sterling-LWB Bluetooth */ &uart4 { pinctrl-names = "default"; -@@ -411,6 +419,23 @@ +@@ -409,6 +417,23 @@ >; }; diff --git a/target/linux/imx6/patches-5.4/009-v5.8-ARM-dts-imx6qdl-gw5910-add-support-for-bcm4330-bt.patch b/target/linux/imx6/patches-5.4/009-v5.8-ARM-dts-imx6qdl-gw5910-add-support-for-bcm4330-bt.patch index 6cbd6fdd0..545a6fddd 100644 --- a/target/linux/imx6/patches-5.4/009-v5.8-ARM-dts-imx6qdl-gw5910-add-support-for-bcm4330-bt.patch +++ b/target/linux/imx6/patches-5.4/009-v5.8-ARM-dts-imx6qdl-gw5910-add-support-for-bcm4330-bt.patch @@ -18,7 +18,7 @@ Signed-off-by: Shawn Guo --- a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi -@@ -83,19 +83,6 @@ +@@ -81,19 +81,6 @@ regulator-max-microvolt = <3300000>; regulator-always-on; }; @@ -38,7 +38,7 @@ Signed-off-by: Shawn Guo }; -@@ -231,9 +218,14 @@ +@@ -229,9 +216,14 @@ /* Sterling-LWB Bluetooth */ &uart4 { pinctrl-names = "default"; @@ -54,7 +54,7 @@ Signed-off-by: Shawn Guo }; /* GPS */ -@@ -288,6 +280,12 @@ +@@ -286,6 +278,12 @@ >; }; @@ -67,7 +67,7 @@ Signed-off-by: Shawn Guo pinctrl_ecspi3: escpi3grp { fsl,pins = < MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1 -@@ -393,12 +391,6 @@ +@@ -391,12 +389,6 @@ >; }; diff --git a/target/linux/imx6/patches-5.4/010-v5.8-ARM-dts-imx6qdl-gw5910-fix-wlan-regulator.patch b/target/linux/imx6/patches-5.4/010-v5.8-ARM-dts-imx6qdl-gw5910-fix-wlan-regulator.patch index c4cce19b9..ce2fa2ee9 100644 --- a/target/linux/imx6/patches-5.4/010-v5.8-ARM-dts-imx6qdl-gw5910-fix-wlan-regulator.patch +++ b/target/linux/imx6/patches-5.4/010-v5.8-ARM-dts-imx6qdl-gw5910-fix-wlan-regulator.patch @@ -14,7 +14,7 @@ Signed-off-by: Shawn Guo --- a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi -@@ -81,7 +81,6 @@ +@@ -79,7 +79,6 @@ enable-active-high; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; @@ -22,7 +22,7 @@ Signed-off-by: Shawn Guo }; }; -@@ -251,7 +250,7 @@ +@@ -249,7 +248,7 @@ &usdhc2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc2>; diff --git a/target/linux/ipq40xx/patches-5.4/710-net-add-qualcomm-essedma-ethernet-driver.patch b/target/linux/ipq40xx/patches-5.4/710-net-add-qualcomm-essedma-ethernet-driver.patch index 87037eb3a..4d0d39637 100644 --- a/target/linux/ipq40xx/patches-5.4/710-net-add-qualcomm-essedma-ethernet-driver.patch +++ b/target/linux/ipq40xx/patches-5.4/710-net-add-qualcomm-essedma-ethernet-driver.patch @@ -37,7 +37,7 @@ Signed-off-by: Christian Lamparter --- a/drivers/net/ethernet/qualcomm/essedma/edma.c +++ b/drivers/net/ethernet/qualcomm/essedma/edma.c -@@ -1493,7 +1493,7 @@ +@@ -1499,7 +1499,7 @@ int res; if (skb->protocol == htons(ETH_P_IPV6)) { diff --git a/target/linux/ipq40xx/patches-5.4/715-essedma-refine-txq-to-be-adaptive-of-cpus-and-netdev.patch b/target/linux/ipq40xx/patches-5.4/715-essedma-refine-txq-to-be-adaptive-of-cpus-and-netdev.patch index d8d09c142..2864a1d4a 100644 --- a/target/linux/ipq40xx/patches-5.4/715-essedma-refine-txq-to-be-adaptive-of-cpus-and-netdev.patch +++ b/target/linux/ipq40xx/patches-5.4/715-essedma-refine-txq-to-be-adaptive-of-cpus-and-netdev.patch @@ -17,7 +17,7 @@ index 724f355..7a16236 100644 /* edma_alloc_tx_ring() * Allocate Tx descriptors ring */ -@@ -1014,13 +1006,14 @@ static inline u16 edma_tpd_available(struct edma_common_info *edma_cinfo, +@@ -1016,13 +1008,14 @@ static inline u16 edma_tpd_available(struct edma_common_info *edma_cinfo, /* edma_tx_queue_get() * Get the starting number of the queue */ @@ -34,7 +34,7 @@ index 724f355..7a16236 100644 } /* edma_tx_update_hw_idx() -@@ -1389,8 +1382,9 @@ netdev_tx_t edma_xmit(struct sk_buff *skb, +@@ -1391,8 +1384,9 @@ netdev_tx_t edma_xmit(struct sk_buff *skb, } /* this will be one of the 4 TX queues exposed to linux kernel */ @@ -46,7 +46,7 @@ index 724f355..7a16236 100644 etdr = edma_cinfo->tpd_ring[queue_id]; nq = netdev_get_tx_queue(net_dev, txq_id); -@@ -1871,8 +1865,8 @@ void edma_free_irqs(struct edma_adapter *adapter) +@@ -1875,8 +1869,8 @@ void edma_free_irqs(struct edma_adapter *adapter) int i, j; int k = ((edma_cinfo->num_rx_queues == 4) ? 1 : 2); @@ -162,7 +162,7 @@ index d53c63b..2d4770c 100644 if (edma_fill_netdev(edma_cinfo, k, i, j)) { pr_err("Netdev overflow Error\n"); goto err_register; -@@ -1109,9 +1114,12 @@ static int edma_axi_probe(struct platform_device *pdev) +@@ -1105,9 +1110,12 @@ static int edma_axi_probe(struct platform_device *pdev) /* populate per_core_info, do a napi_Add, request 16 TX irqs, * 8 RX irqs, do a napi enable */ @@ -176,7 +176,7 @@ index d53c63b..2d4770c 100644 edma_cinfo->edma_percpu_info[i].napi.state = 0; netif_napi_add(edma_netdev[0], -@@ -1131,7 +1139,7 @@ static int edma_axi_probe(struct platform_device *pdev) +@@ -1127,7 +1135,7 @@ static int edma_axi_probe(struct platform_device *pdev) /* Request irq per core */ for (j = edma_cinfo->edma_percpu_info[i].tx_start; @@ -185,7 +185,7 @@ index d53c63b..2d4770c 100644 sprintf(&edma_tx_irq[j][0], "edma_eth_tx%d", j); err = request_irq(edma_cinfo->tx_irq[j], edma_interrupt, -@@ -1253,7 +1261,7 @@ static int edma_axi_probe(struct platform_device *pdev) +@@ -1251,7 +1259,7 @@ static int edma_axi_probe(struct platform_device *pdev) #endif err_rmap_add_fail: edma_free_irqs(adapter[0]); @@ -194,7 +194,7 @@ index d53c63b..2d4770c 100644 napi_disable(&edma_cinfo->edma_percpu_info[i].napi); err_reset: err_unregister_sysctl_tbl: -@@ -1301,7 +1309,7 @@ static int edma_axi_remove(struct platform_device *pdev) +@@ -1299,7 +1307,7 @@ static int edma_axi_remove(struct platform_device *pdev) unregister_netdev(edma_netdev[i]); edma_stop_rx_tx(hw); diff --git a/target/linux/ipq40xx/patches-5.4/716-essedma-reduce-write-reg.patch b/target/linux/ipq40xx/patches-5.4/716-essedma-reduce-write-reg.patch index 58b87467d..22e52e599 100644 --- a/target/linux/ipq40xx/patches-5.4/716-essedma-reduce-write-reg.patch +++ b/target/linux/ipq40xx/patches-5.4/716-essedma-reduce-write-reg.patch @@ -2,7 +2,7 @@ diff --git a/drivers/net/ethernet/qualcomm/essedma/edma.c b/drivers/net/ethernet index fc274c8..e9d12a4 100644 --- a/drivers/net/ethernet/qualcomm/essedma/edma.c +++ b/drivers/net/ethernet/qualcomm/essedma/edma.c -@@ -2075,15 +2075,13 @@ int edma_poll(struct napi_struct *napi, int budget) +@@ -2079,15 +2079,13 @@ int edma_poll(struct napi_struct *napi, int budget) int i, work_done = 0; u16 rx_pending_fill; @@ -21,7 +21,7 @@ index fc274c8..e9d12a4 100644 /* Every core will have a start, which will be computed * in probe and stored in edma_percpu_info->tx_start variable. -@@ -2098,6 +2096,14 @@ int edma_poll(struct napi_struct *napi, int budget) +@@ -2102,6 +2100,14 @@ int edma_poll(struct napi_struct *napi, int budget) edma_percpu_info->tx_status &= ~(1 << queue_id); } @@ -36,7 +36,7 @@ index fc274c8..e9d12a4 100644 /* Every core will have a start, which will be computed * in probe and stored in edma_percpu_info->tx_start variable. * We will shift the status bit by tx_start to obtain -@@ -2122,15 +2128,6 @@ int edma_poll(struct napi_struct *napi, int budget) +@@ -2126,15 +2132,6 @@ int edma_poll(struct napi_struct *napi, int budget) } } diff --git a/target/linux/ipq806x/patches-5.4/0049-PM-OPP-Support-adjusting-OPP-voltages-at-runtime.patch b/target/linux/ipq806x/patches-5.4/0049-PM-OPP-Support-adjusting-OPP-voltages-at-runtime.patch index 204d6e62d..9efbd583b 100644 --- a/target/linux/ipq806x/patches-5.4/0049-PM-OPP-Support-adjusting-OPP-voltages-at-runtime.patch +++ b/target/linux/ipq806x/patches-5.4/0049-PM-OPP-Support-adjusting-OPP-voltages-at-runtime.patch @@ -39,7 +39,7 @@ Signed-off-by: Sylwester Nawrocki --- a/drivers/opp/core.c +++ b/drivers/opp/core.c -@@ -2101,6 +2101,75 @@ put_table: +@@ -2102,6 +2102,75 @@ put_table: } /** diff --git a/target/linux/ipq806x/patches-5.4/0052-PM-OPP-Update-the-voltage-tolerance-when-adjusting-t.patch b/target/linux/ipq806x/patches-5.4/0052-PM-OPP-Update-the-voltage-tolerance-when-adjusting-t.patch index 122511e46..8498a0b6d 100644 --- a/target/linux/ipq806x/patches-5.4/0052-PM-OPP-Update-the-voltage-tolerance-when-adjusting-t.patch +++ b/target/linux/ipq806x/patches-5.4/0052-PM-OPP-Update-the-voltage-tolerance-when-adjusting-t.patch @@ -17,7 +17,7 @@ Signed-off-by: Georgi Djakov --- a/drivers/opp/core.c +++ b/drivers/opp/core.c -@@ -2141,6 +2141,7 @@ int dev_pm_opp_adjust_voltage(struct dev +@@ -2142,6 +2142,7 @@ int dev_pm_opp_adjust_voltage(struct dev struct opp_table *opp_table; struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); int r = 0; @@ -25,7 +25,7 @@ Signed-off-by: Georgi Djakov /* Find the opp_table */ opp_table = _find_opp_table(dev); -@@ -2170,8 +2171,17 @@ int dev_pm_opp_adjust_voltage(struct dev +@@ -2171,8 +2172,17 @@ int dev_pm_opp_adjust_voltage(struct dev goto adjust_unlock; opp->supplies->u_volt = u_volt; diff --git a/target/linux/ipq806x/patches-5.4/093-4-v5.8-ipq806x-PCI-qcom-Use-bulk-clk-api-and-assert-on-error.patch b/target/linux/ipq806x/patches-5.4/093-4-v5.8-ipq806x-PCI-qcom-Use-bulk-clk-api-and-assert-on-error.patch index 32fc297fe..95531508b 100644 --- a/target/linux/ipq806x/patches-5.4/093-4-v5.8-ipq806x-PCI-qcom-Use-bulk-clk-api-and-assert-on-error.patch +++ b/target/linux/ipq806x/patches-5.4/093-4-v5.8-ipq806x-PCI-qcom-Use-bulk-clk-api-and-assert-on-error.patch @@ -89,10 +89,10 @@ Acked-by: Stanimir Varbanov - clk_disable_unprepare(res->core_clk); - clk_disable_unprepare(res->aux_clk); - clk_disable_unprepare(res->ref_clk); - regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies); - } -@@ -321,47 +310,45 @@ static int qcom_pcie_init_2_1_0(struct q + writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL); + +@@ -334,47 +323,45 @@ static int qcom_pcie_init_2_1_0(struct q return ret; } @@ -161,7 +161,7 @@ Acked-by: Stanimir Varbanov /* enable PCIe clocks and resets */ val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL); -@@ -393,36 +380,6 @@ static int qcom_pcie_init_2_1_0(struct q +@@ -406,36 +393,6 @@ static int qcom_pcie_init_2_1_0(struct q val |= PHY_REFCLK_SSP_EN; writel(val, pcie->parf + PCIE20_PARF_PHY_REFCLK); @@ -198,7 +198,7 @@ Acked-by: Stanimir Varbanov /* wait for clock acquisition */ usleep_range(1000, 1500); -@@ -435,15 +392,19 @@ static int qcom_pcie_init_2_1_0(struct q +@@ -448,15 +405,19 @@ static int qcom_pcie_init_2_1_0(struct q return 0; diff --git a/target/linux/ipq806x/patches-5.4/093-7-v5.8-ipq806x-PCI-qcom-Add-ipq8064-rev2-variant.patch b/target/linux/ipq806x/patches-5.4/093-7-v5.8-ipq806x-PCI-qcom-Add-ipq8064-rev2-variant.patch index 4e8fa41f3..c3d61f164 100644 --- a/target/linux/ipq806x/patches-5.4/093-7-v5.8-ipq806x-PCI-qcom-Add-ipq8064-rev2-variant.patch +++ b/target/linux/ipq806x/patches-5.4/093-7-v5.8-ipq806x-PCI-qcom-Add-ipq8064-rev2-variant.patch @@ -16,7 +16,7 @@ Acked-by: Stanimir Varbanov --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c -@@ -355,7 +355,8 @@ static int qcom_pcie_init_2_1_0(struct q +@@ -368,7 +368,8 @@ static int qcom_pcie_init_2_1_0(struct q val &= ~BIT(0); writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL); @@ -26,7 +26,7 @@ Acked-by: Stanimir Varbanov writel(PCS_DEEMPH_TX_DEEMPH_GEN1(24) | PCS_DEEMPH_TX_DEEMPH_GEN2_3_5DB(24) | PCS_DEEMPH_TX_DEEMPH_GEN2_6DB(34), -@@ -1315,6 +1316,7 @@ err_pm_runtime_put: +@@ -1328,6 +1329,7 @@ err_pm_runtime_put: static const struct of_device_id qcom_pcie_match[] = { { .compatible = "qcom,pcie-apq8084", .data = &ops_1_0_0 }, { .compatible = "qcom,pcie-ipq8064", .data = &ops_2_1_0 }, diff --git a/target/linux/ipq806x/patches-5.4/093-8-v5.8-ipq806x-PCI-qcom-Support-pci-speed-set-for-ipq806x.patch b/target/linux/ipq806x/patches-5.4/093-8-v5.8-ipq806x-PCI-qcom-Support-pci-speed-set-for-ipq806x.patch index 9f60f1461..02ac7460e 100644 --- a/target/linux/ipq806x/patches-5.4/093-8-v5.8-ipq806x-PCI-qcom-Support-pci-speed-set-for-ipq806x.patch +++ b/target/linux/ipq806x/patches-5.4/093-8-v5.8-ipq806x-PCI-qcom-Support-pci-speed-set-for-ipq806x.patch @@ -49,7 +49,7 @@ Backported with light changes: }; #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) -@@ -384,6 +388,11 @@ static int qcom_pcie_init_2_1_0(struct q +@@ -397,6 +401,11 @@ static int qcom_pcie_init_2_1_0(struct q /* wait for clock acquisition */ usleep_range(1000, 1500); @@ -61,7 +61,7 @@ Backported with light changes: /* Set the Max TLP size to 2K, instead of using default of 4K */ writel(CFG_REMOTE_RD_REQ_BRIDGE_SIZE_2K, -@@ -1248,6 +1257,10 @@ static int qcom_pcie_probe(struct platfo +@@ -1261,6 +1270,10 @@ static int qcom_pcie_probe(struct platfo goto err_pm_runtime_put; } diff --git a/target/linux/ipq806x/patches-5.4/094-v5.7-ipq806x-net-mdio-add-ipq8064-mdio-driver.patch b/target/linux/ipq806x/patches-5.4/094-v5.7-ipq806x-net-mdio-add-ipq8064-mdio-driver.patch index fb8c827d6..328942dad 100644 --- a/target/linux/ipq806x/patches-5.4/094-v5.7-ipq806x-net-mdio-add-ipq8064-mdio-driver.patch +++ b/target/linux/ipq806x/patches-5.4/094-v5.7-ipq806x-net-mdio-add-ipq8064-mdio-driver.patch @@ -37,7 +37,7 @@ Signed-off-by: David S. Miller depends on ARCH_MOXART || COMPILE_TEST --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile -@@ -51,6 +51,7 @@ obj-$(CONFIG_MDIO_CAVIUM) += mdio-cavium +@@ -50,6 +50,7 @@ obj-$(CONFIG_MDIO_CAVIUM) += mdio-cavium obj-$(CONFIG_MDIO_GPIO) += mdio-gpio.o obj-$(CONFIG_MDIO_HISI_FEMAC) += mdio-hisi-femac.o obj-$(CONFIG_MDIO_I2C) += mdio-i2c.o diff --git a/target/linux/ipq806x/patches-5.4/096-PCI-qcom-Make-sure-PCIe-is-reset-before-init-for-rev.patch b/target/linux/ipq806x/patches-5.4/096-PCI-qcom-Make-sure-PCIe-is-reset-before-init-for-rev.patch deleted file mode 100644 index 2ca336b05..000000000 --- a/target/linux/ipq806x/patches-5.4/096-PCI-qcom-Make-sure-PCIe-is-reset-before-init-for-rev.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 1960d75e3251659be8276529e4d01cf6993d9f4a Mon Sep 17 00:00:00 2001 -From: Ansuel Smith -Date: Tue, 1 Sep 2020 14:21:44 +0200 -Subject: [PATCH] PCI: qcom: Make sure PCIe is reset before init for rev 2.1.0 - -Qsdk U-Boot can incorrectly leave the PCIe interface in an undefined -state if bootm command is used instead of bootipq. This is caused by the -not deinit of PCIe when bootm is called. Reset the PCIe before init -anyway to fix this U-Boot bug. - -Signed-off-by: Ansuel Smith -Fixes: 82a823833f4e ("PCI: qcom: Add Qualcomm PCIe controller driver") -Cc: stable@vger.kernel.org # v4.19+ ---- - drivers/pci/controller/dwc/pcie-qcom.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - ---- a/drivers/pci/controller/dwc/pcie-qcom.c -+++ b/drivers/pci/controller/dwc/pcie-qcom.c -@@ -296,6 +296,9 @@ static void qcom_pcie_deinit_2_1_0(struc - reset_control_assert(res->por_reset); - reset_control_assert(res->ext_reset); - reset_control_assert(res->phy_reset); -+ -+ writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL); -+ - regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies); - } - -@@ -308,6 +311,16 @@ static int qcom_pcie_init_2_1_0(struct q - u32 val; - int ret; - -+ /* reset the PCIe interface as uboot can leave it undefined state */ -+ reset_control_assert(res->pci_reset); -+ reset_control_assert(res->axi_reset); -+ reset_control_assert(res->ahb_reset); -+ reset_control_assert(res->por_reset); -+ reset_control_assert(res->ext_reset); -+ reset_control_assert(res->phy_reset); -+ -+ writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL); -+ - ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies); - if (ret < 0) { - dev_err(dev, "cannot enable regulators\n"); diff --git a/target/linux/layerscape/armv7/config-5.4 b/target/linux/layerscape/armv7/config-5.4 index 3e242a224..5d70f3a57 100644 --- a/target/linux/layerscape/armv7/config-5.4 +++ b/target/linux/layerscape/armv7/config-5.4 @@ -242,6 +242,9 @@ CONFIG_EVENT_TRACING=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y +CONFIG_F2FS_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_STAT_FS=y CONFIG_FAILOVER=y CONFIG_FAT_FS=y # CONFIG_FEC is not set diff --git a/target/linux/layerscape/armv8_64b/config-5.4 b/target/linux/layerscape/armv8_64b/config-5.4 index a8025dac2..c67fd3e8f 100644 --- a/target/linux/layerscape/armv8_64b/config-5.4 +++ b/target/linux/layerscape/armv8_64b/config-5.4 @@ -267,6 +267,9 @@ CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y CONFIG_EXTCON=y CONFIG_EXTCON_USB_GPIO=y +CONFIG_F2FS_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_STAT_FS=y CONFIG_FAILOVER=y CONFIG_FANOTIFY=y CONFIG_FAT_FS=y @@ -417,10 +420,13 @@ CONFIG_GENERIC_TIME_VSYSCALL=y # CONFIG_GIANFAR is not set CONFIG_GLOB=y CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_IRQCHIP=y CONFIG_GPIO_GENERIC=y CONFIG_GPIO_GENERIC_PLATFORM=y CONFIG_GPIO_MPC8XXX=y CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y CONFIG_HANDLE_DOMAIN_IRQ=y CONFIG_HARDEN_BRANCH_PREDICTOR=y CONFIG_HARDIRQS_SW_RESEND=y @@ -839,6 +845,10 @@ CONFIG_SERIAL_FSL_LPUART=y CONFIG_SERIAL_FSL_LPUART_CONSOLE=y CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_SC16IS7XX=y +CONFIG_SERIAL_SC16IS7XX_CORE=y +# CONFIG_SERIAL_SC16IS7XX_I2C is not set +CONFIG_SERIAL_SC16IS7XX_SPI=y CONFIG_SERIAL_XILINX_PS_UART=y CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y CONFIG_SERIO=y diff --git a/target/linux/layerscape/image/armv7.mk b/target/linux/layerscape/image/armv7.mk index 776a6e5ac..08ef6cb9a 100644 --- a/target/linux/layerscape/image/armv7.mk +++ b/target/linux/layerscape/image/armv7.mk @@ -10,6 +10,7 @@ define Device/Default FILESYSTEMS := squashfs IMAGES := firmware.bin sysupgrade.bin KERNEL := kernel-bin | uImage none + KERNEL_INITRAMFS = kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb KERNEL_NAME := zImage KERNEL_LOADADDR := 0x80008000 KERNEL_ENTRY_POINT := 0x80008000 diff --git a/target/linux/layerscape/image/armv8_64b.mk b/target/linux/layerscape/image/armv8_64b.mk index 23af3e26a..264f7dfd8 100644 --- a/target/linux/layerscape/image/armv8_64b.mk +++ b/target/linux/layerscape/image/armv8_64b.mk @@ -10,6 +10,7 @@ define Device/Default IMAGES := firmware.bin sysupgrade.bin FILESYSTEMS := squashfs KERNEL := kernel-bin | gzip | uImage gzip + KERNEL_INITRAMFS = kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb KERNEL_LOADADDR := 0x80080000 KERNEL_ENTRY_POINT := 0x80080000 DEVICE_DTS = freescale/$(subst _,-,$(1)) @@ -62,6 +63,9 @@ define Device/fsl_ls1012a-rdb DEVICE_PACKAGES += \ layerscape-ppfe \ tfa-ls1012a-rdb \ + kmod-hwmon-ina2xx \ + kmod-iio-fxas21002c-i2c \ + kmod-iio-fxos8700-i2c \ kmod-ppfe IMAGE/firmware.bin := \ ls-clean | \ diff --git a/target/linux/layerscape/patches-5.4/303-core-0002-drivers-base-add-sysfs-entries-for-suppliers-and-con.patch b/target/linux/layerscape/patches-5.4/303-core-0002-drivers-base-add-sysfs-entries-for-suppliers-and-con.patch index 1e4521730..6307ba839 100644 --- a/target/linux/layerscape/patches-5.4/303-core-0002-drivers-base-add-sysfs-entries-for-suppliers-and-con.patch +++ b/target/linux/layerscape/patches-5.4/303-core-0002-drivers-base-add-sysfs-entries-for-suppliers-and-con.patch @@ -32,7 +32,7 @@ Signed-off-by: Ioana Ciornei + a specific device. --- a/drivers/base/core.c +++ b/drivers/base/core.c -@@ -1320,6 +1320,34 @@ static ssize_t online_store(struct devic +@@ -1318,6 +1318,34 @@ static ssize_t online_store(struct devic } static DEVICE_ATTR_RW(online); @@ -67,7 +67,7 @@ Signed-off-by: Ioana Ciornei int device_add_groups(struct device *dev, const struct attribute_group **groups) { return sysfs_create_groups(&dev->kobj, groups); -@@ -1491,8 +1519,20 @@ static int device_add_attrs(struct devic +@@ -1489,8 +1517,20 @@ static int device_add_attrs(struct devic goto err_remove_dev_groups; } @@ -88,7 +88,7 @@ Signed-off-by: Ioana Ciornei err_remove_dev_groups: device_remove_groups(dev, dev->groups); err_remove_type_groups: -@@ -1510,6 +1550,8 @@ static void device_remove_attrs(struct d +@@ -1508,6 +1548,8 @@ static void device_remove_attrs(struct d struct class *class = dev->class; const struct device_type *type = dev->type; diff --git a/target/linux/layerscape/patches-5.4/701-net-0327-at803x-Address-packet-drops-at-low-traffic-rate-due-.patch b/target/linux/layerscape/patches-5.4/701-net-0327-at803x-Address-packet-drops-at-low-traffic-rate-due-.patch index 36c393f2d..303d12245 100644 --- a/target/linux/layerscape/patches-5.4/701-net-0327-at803x-Address-packet-drops-at-low-traffic-rate-due-.patch +++ b/target/linux/layerscape/patches-5.4/701-net-0327-at803x-Address-packet-drops-at-low-traffic-rate-due-.patch @@ -22,7 +22,7 @@ Signed-off-by: Vladimir Oltean --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig -@@ -371,6 +371,16 @@ config AT803X_PHY +@@ -367,6 +367,16 @@ config AT803X_PHY ---help--- Currently supports the AT8030 and AT8035 model diff --git a/target/linux/layerscape/patches-5.4/701-net-0328-net-phy-Inphi-IN112525_s03-retimer-support.patch b/target/linux/layerscape/patches-5.4/701-net-0328-net-phy-Inphi-IN112525_s03-retimer-support.patch index a074c719d..68a0bc4ea 100644 --- a/target/linux/layerscape/patches-5.4/701-net-0328-net-phy-Inphi-IN112525_s03-retimer-support.patch +++ b/target/linux/layerscape/patches-5.4/701-net-0328-net-phy-Inphi-IN112525_s03-retimer-support.patch @@ -15,7 +15,7 @@ Signed-off-by: Florin Chiculita --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig -@@ -479,6 +479,11 @@ config ICPLUS_PHY +@@ -475,6 +475,11 @@ config ICPLUS_PHY ---help--- Currently supports the IP175C and IP1001 PHYs. @@ -29,7 +29,7 @@ Signed-off-by: Florin Chiculita ---help--- --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile -@@ -88,6 +88,7 @@ obj-$(CONFIG_DP83848_PHY) += dp83848.o +@@ -87,6 +87,7 @@ obj-$(CONFIG_DP83848_PHY) += dp83848.o obj-$(CONFIG_DP83867_PHY) += dp83867.o obj-$(CONFIG_FIXED_PHY) += fixed_phy.o obj-$(CONFIG_ICPLUS_PHY) += icplus.o diff --git a/target/linux/layerscape/patches-5.4/802-can-0006-can-rx-offload-Prepare-for-CAN-FD-support.patch b/target/linux/layerscape/patches-5.4/802-can-0006-can-rx-offload-Prepare-for-CAN-FD-support.patch index 30b9e4b10..890c9a999 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0006-can-rx-offload-Prepare-for-CAN-FD-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0006-can-rx-offload-Prepare-for-CAN-FD-support.patch @@ -25,7 +25,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -784,16 +784,23 @@ static inline struct flexcan_priv *rx_of +@@ -783,16 +783,23 @@ static inline struct flexcan_priv *rx_of return container_of(offload, struct flexcan_priv, offload); } @@ -52,7 +52,7 @@ Signed-off-by: Marc Kleine-Budde mb = flexcan_get_mb(priv, n); if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { -@@ -807,7 +814,7 @@ static unsigned int flexcan_mailbox_read +@@ -806,7 +813,7 @@ static unsigned int flexcan_mailbox_read code = reg_ctrl & FLEXCAN_MB_CODE_MASK; if ((code != FLEXCAN_MB_CODE_RX_FULL) && (code != FLEXCAN_MB_CODE_RX_OVERRUN)) @@ -61,7 +61,7 @@ Signed-off-by: Marc Kleine-Budde if (code == FLEXCAN_MB_CODE_RX_OVERRUN) { /* This MB was overrun, we lost data */ -@@ -817,11 +824,17 @@ static unsigned int flexcan_mailbox_read +@@ -816,11 +823,17 @@ static unsigned int flexcan_mailbox_read } else { reg_iflag1 = priv->read(®s->iflag1); if (!(reg_iflag1 & FLEXCAN_IFLAG_RX_FIFO_AVAILABLE)) @@ -80,7 +80,7 @@ Signed-off-by: Marc Kleine-Budde /* increase timstamp to full 32 bit */ *timestamp = reg_ctrl << 16; -@@ -840,7 +853,7 @@ static unsigned int flexcan_mailbox_read +@@ -839,7 +852,7 @@ static unsigned int flexcan_mailbox_read *(__be32 *)(cf->data + i) = data; } @@ -89,7 +89,7 @@ Signed-off-by: Marc Kleine-Budde if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { /* Clear IRQ */ if (n < 32) -@@ -857,7 +870,7 @@ static unsigned int flexcan_mailbox_read +@@ -856,7 +869,7 @@ static unsigned int flexcan_mailbox_read */ priv->read(®s->timer); diff --git a/target/linux/layerscape/patches-5.4/802-can-0007-can-flexcan-use-devm_platform_ioremap_resource-to-si.patch b/target/linux/layerscape/patches-5.4/802-can-0007-can-flexcan-use-devm_platform_ioremap_resource-to-si.patch index b576cec2f..a080c6f6c 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0007-can-flexcan-use-devm_platform_ioremap_resource-to-si.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0007-can-flexcan-use-devm_platform_ioremap_resource-to-si.patch @@ -17,7 +17,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -1570,7 +1570,6 @@ static int flexcan_probe(struct platform +@@ -1569,7 +1569,6 @@ static int flexcan_probe(struct platform struct net_device *dev; struct flexcan_priv *priv; struct regulator *reg_xceiver; @@ -25,7 +25,7 @@ Signed-off-by: Marc Kleine-Budde struct clk *clk_ipg = NULL, *clk_per = NULL; struct flexcan_regs __iomem *regs; int err, irq; -@@ -1605,12 +1604,11 @@ static int flexcan_probe(struct platform +@@ -1604,12 +1603,11 @@ static int flexcan_probe(struct platform clock_freq = clk_get_rate(clk_per); } diff --git a/target/linux/layerscape/patches-5.4/802-can-0008-can-flexcan-flexcan_irq_state-only-read-timestamp-if.patch b/target/linux/layerscape/patches-5.4/802-can-0008-can-flexcan-flexcan_irq_state-only-read-timestamp-if.patch index bc84f5f90..9c2dde99a 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0008-can-flexcan-flexcan_irq_state-only-read-timestamp-if.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0008-can-flexcan-flexcan_irq_state-only-read-timestamp-if.patch @@ -18,7 +18,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -744,8 +744,6 @@ static void flexcan_irq_state(struct net +@@ -743,8 +743,6 @@ static void flexcan_irq_state(struct net u32 timestamp; int err; @@ -27,7 +27,7 @@ Signed-off-by: Marc Kleine-Budde flt = reg_esr & FLEXCAN_ESR_FLT_CONF_MASK; if (likely(flt == FLEXCAN_ESR_FLT_CONF_ACTIVE)) { tx_state = unlikely(reg_esr & FLEXCAN_ESR_TX_WRN) ? -@@ -765,6 +763,8 @@ static void flexcan_irq_state(struct net +@@ -764,6 +762,8 @@ static void flexcan_irq_state(struct net if (likely(new_state == priv->can.state)) return; diff --git a/target/linux/layerscape/patches-5.4/802-can-0009-can-flexcan-rename-macro-FLEXCAN_IFLAG_MB-FLEXCAN_IF.patch b/target/linux/layerscape/patches-5.4/802-can-0009-can-flexcan-rename-macro-FLEXCAN_IFLAG_MB-FLEXCAN_IF.patch index c6960bace..6926a57f4 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0009-can-flexcan-rename-macro-FLEXCAN_IFLAG_MB-FLEXCAN_IF.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0009-can-flexcan-rename-macro-FLEXCAN_IFLAG_MB-FLEXCAN_IF.patch @@ -23,7 +23,7 @@ Signed-off-by: Marc Kleine-Budde #define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7) #define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6) #define FLEXCAN_IFLAG_RX_FIFO_AVAILABLE BIT(5) -@@ -880,7 +880,7 @@ static inline u64 flexcan_read_reg_iflag +@@ -879,7 +879,7 @@ static inline u64 flexcan_read_reg_iflag u32 iflag1, iflag2; iflag2 = priv->read(®s->iflag2) & priv->reg_imask2_default & @@ -32,7 +32,7 @@ Signed-off-by: Marc Kleine-Budde iflag1 = priv->read(®s->iflag1) & priv->reg_imask1_default; return (u64)iflag2 << 32 | iflag1; -@@ -930,7 +930,7 @@ static irqreturn_t flexcan_irq(int irq, +@@ -929,7 +929,7 @@ static irqreturn_t flexcan_irq(int irq, reg_iflag2 = priv->read(®s->iflag2); /* transmission complete interrupt */ @@ -41,7 +41,7 @@ Signed-off-by: Marc Kleine-Budde u32 reg_ctrl = priv->read(&priv->tx_mb->can_ctrl); handled = IRQ_HANDLED; -@@ -942,7 +942,7 @@ static irqreturn_t flexcan_irq(int irq, +@@ -941,7 +941,7 @@ static irqreturn_t flexcan_irq(int irq, /* after sending a RTR frame MB is in RX mode */ priv->write(FLEXCAN_MB_CODE_TX_INACTIVE, &priv->tx_mb->can_ctrl); @@ -50,7 +50,7 @@ Signed-off-by: Marc Kleine-Budde netif_wake_queue(dev); } -@@ -1321,7 +1321,7 @@ static int flexcan_open(struct net_devic +@@ -1320,7 +1320,7 @@ static int flexcan_open(struct net_devic priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); priv->reg_imask1_default = 0; diff --git a/target/linux/layerscape/patches-5.4/802-can-0010-can-flexcan-flexcan_irq-rename-variable-reg_iflag-re.patch b/target/linux/layerscape/patches-5.4/802-can-0010-can-flexcan-flexcan_irq-rename-variable-reg_iflag-re.patch index e2086b74b..8f24e12ef 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0010-can-flexcan-flexcan_irq-rename-variable-reg_iflag-re.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0010-can-flexcan-flexcan_irq-rename-variable-reg_iflag-re.patch @@ -16,7 +16,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -898,13 +898,13 @@ static irqreturn_t flexcan_irq(int irq, +@@ -897,13 +897,13 @@ static irqreturn_t flexcan_irq(int irq, /* reception interrupt */ if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { diff --git a/target/linux/layerscape/patches-5.4/802-can-0011-can-flexcan-rename-struct-flexcan_priv-reg_imask-1-2.patch b/target/linux/layerscape/patches-5.4/802-can-0011-can-flexcan-rename-struct-flexcan_priv-reg_imask-1-2.patch index f8ea72551..e032c850b 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0011-can-flexcan-rename-struct-flexcan_priv-reg_imask-1-2.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0011-can-flexcan-rename-struct-flexcan_priv-reg_imask-1-2.patch @@ -49,7 +49,7 @@ Signed-off-by: Marc Kleine-Budde struct clk *clk_ipg; struct clk *clk_per; -@@ -879,9 +879,9 @@ static inline u64 flexcan_read_reg_iflag +@@ -878,9 +878,9 @@ static inline u64 flexcan_read_reg_iflag struct flexcan_regs __iomem *regs = priv->regs; u32 iflag1, iflag2; @@ -61,7 +61,7 @@ Signed-off-by: Marc Kleine-Budde return (u64)iflag2 << 32 | iflag1; } -@@ -1228,8 +1228,8 @@ static int flexcan_chip_start(struct net +@@ -1227,8 +1227,8 @@ static int flexcan_chip_start(struct net /* enable interrupts atomically */ disable_irq(dev->irq); priv->write(priv->reg_ctrl_default, ®s->ctrl); @@ -72,7 +72,7 @@ Signed-off-by: Marc Kleine-Budde enable_irq(dev->irq); /* print chip status */ -@@ -1320,8 +1320,8 @@ static int flexcan_open(struct net_devic +@@ -1319,8 +1319,8 @@ static int flexcan_open(struct net_devic priv->tx_mb_idx = priv->mb_count - 1; priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); @@ -83,7 +83,7 @@ Signed-off-by: Marc Kleine-Budde priv->offload.mailbox_read = flexcan_mailbox_read; -@@ -1333,12 +1333,12 @@ static int flexcan_open(struct net_devic +@@ -1332,12 +1332,12 @@ static int flexcan_open(struct net_devic imask = GENMASK_ULL(priv->offload.mb_last, priv->offload.mb_first); diff --git a/target/linux/layerscape/patches-5.4/802-can-0012-can-flexcan-remove-TX-mailbox-bit-from-struct-flexca.patch b/target/linux/layerscape/patches-5.4/802-can-0012-can-flexcan-remove-TX-mailbox-bit-from-struct-flexca.patch index ef8fd9d83..d253c9ff3 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0012-can-flexcan-remove-TX-mailbox-bit-from-struct-flexca.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0012-can-flexcan-remove-TX-mailbox-bit-from-struct-flexca.patch @@ -24,7 +24,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -879,8 +879,7 @@ static inline u64 flexcan_read_reg_iflag +@@ -878,8 +878,7 @@ static inline u64 flexcan_read_reg_iflag struct flexcan_regs __iomem *regs = priv->regs; u32 iflag1, iflag2; @@ -34,7 +34,7 @@ Signed-off-by: Marc Kleine-Budde iflag1 = priv->read(®s->iflag1) & priv->rx_mask1; return (u64)iflag2 << 32 | iflag1; -@@ -1229,7 +1228,7 @@ static int flexcan_chip_start(struct net +@@ -1228,7 +1227,7 @@ static int flexcan_chip_start(struct net disable_irq(dev->irq); priv->write(priv->reg_ctrl_default, ®s->ctrl); priv->write(priv->rx_mask1, ®s->imask1); @@ -43,7 +43,7 @@ Signed-off-by: Marc Kleine-Budde enable_irq(dev->irq); /* print chip status */ -@@ -1320,9 +1319,6 @@ static int flexcan_open(struct net_devic +@@ -1319,9 +1318,6 @@ static int flexcan_open(struct net_devic priv->tx_mb_idx = priv->mb_count - 1; priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); @@ -53,7 +53,7 @@ Signed-off-by: Marc Kleine-Budde priv->offload.mailbox_read = flexcan_mailbox_read; if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { -@@ -1333,12 +1329,12 @@ static int flexcan_open(struct net_devic +@@ -1332,12 +1328,12 @@ static int flexcan_open(struct net_devic imask = GENMASK_ULL(priv->offload.mb_last, priv->offload.mb_first); diff --git a/target/linux/layerscape/patches-5.4/802-can-0013-can-flexcan-convert-struct-flexcan_priv-rx_mask-1-2-.patch b/target/linux/layerscape/patches-5.4/802-can-0013-can-flexcan-convert-struct-flexcan_priv-rx_mask-1-2-.patch index c52da3a14..e98cc4ca7 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0013-can-flexcan-convert-struct-flexcan_priv-rx_mask-1-2-.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0013-can-flexcan-convert-struct-flexcan_priv-rx_mask-1-2-.patch @@ -41,7 +41,7 @@ Signed-off-by: Marc Kleine-Budde struct clk *clk_ipg; struct clk *clk_per; -@@ -873,16 +873,15 @@ static struct sk_buff *flexcan_mailbox_r +@@ -872,16 +872,15 @@ static struct sk_buff *flexcan_mailbox_r return skb; } @@ -62,7 +62,7 @@ Signed-off-by: Marc Kleine-Budde } static irqreturn_t flexcan_irq(int irq, void *dev_id) -@@ -1053,6 +1052,7 @@ static int flexcan_chip_start(struct net +@@ -1052,6 +1051,7 @@ static int flexcan_chip_start(struct net struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->regs; u32 reg_mcr, reg_ctrl, reg_ctrl2, reg_mecr; @@ -70,7 +70,7 @@ Signed-off-by: Marc Kleine-Budde int err, i; struct flexcan_mb __iomem *mb; -@@ -1227,8 +1227,9 @@ static int flexcan_chip_start(struct net +@@ -1226,8 +1226,9 @@ static int flexcan_chip_start(struct net /* enable interrupts atomically */ disable_irq(dev->irq); priv->write(priv->reg_ctrl_default, ®s->ctrl); @@ -82,7 +82,7 @@ Signed-off-by: Marc Kleine-Budde enable_irq(dev->irq); /* print chip status */ -@@ -1322,19 +1323,14 @@ static int flexcan_open(struct net_devic +@@ -1321,19 +1322,14 @@ static int flexcan_open(struct net_devic priv->offload.mailbox_read = flexcan_mailbox_read; if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { diff --git a/target/linux/layerscape/patches-5.4/802-can-0014-can-flexcan-introduce-struct-flexcan_priv-tx_mask-an.patch b/target/linux/layerscape/patches-5.4/802-can-0014-can-flexcan-introduce-struct-flexcan_priv-tx_mask-an.patch index b724dc435..f20557fbf 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0014-can-flexcan-introduce-struct-flexcan_priv-tx_mask-an.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0014-can-flexcan-introduce-struct-flexcan_priv-tx_mask-an.patch @@ -39,7 +39,7 @@ Signed-off-by: Marc Kleine-Budde u32 reg_ctrl_default; struct clk *clk_ipg; -@@ -891,7 +891,8 @@ static irqreturn_t flexcan_irq(int irq, +@@ -890,7 +890,8 @@ static irqreturn_t flexcan_irq(int irq, struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->regs; irqreturn_t handled = IRQ_NONE; @@ -49,7 +49,7 @@ Signed-off-by: Marc Kleine-Budde enum can_state last_state = priv->can.state; /* reception interrupt */ -@@ -925,10 +926,10 @@ static irqreturn_t flexcan_irq(int irq, +@@ -924,10 +925,10 @@ static irqreturn_t flexcan_irq(int irq, } } @@ -62,7 +62,7 @@ Signed-off-by: Marc Kleine-Budde u32 reg_ctrl = priv->read(&priv->tx_mb->can_ctrl); handled = IRQ_HANDLED; -@@ -940,7 +941,7 @@ static irqreturn_t flexcan_irq(int irq, +@@ -939,7 +940,7 @@ static irqreturn_t flexcan_irq(int irq, /* after sending a RTR frame MB is in RX mode */ priv->write(FLEXCAN_MB_CODE_TX_INACTIVE, &priv->tx_mb->can_ctrl); @@ -71,7 +71,7 @@ Signed-off-by: Marc Kleine-Budde netif_wake_queue(dev); } -@@ -1227,7 +1228,7 @@ static int flexcan_chip_start(struct net +@@ -1226,7 +1227,7 @@ static int flexcan_chip_start(struct net /* enable interrupts atomically */ disable_irq(dev->irq); priv->write(priv->reg_ctrl_default, ®s->ctrl); @@ -80,7 +80,7 @@ Signed-off-by: Marc Kleine-Budde priv->write(upper_32_bits(reg_imask), ®s->imask2); priv->write(lower_32_bits(reg_imask), ®s->imask1); enable_irq(dev->irq); -@@ -1319,6 +1320,7 @@ static int flexcan_open(struct net_devic +@@ -1318,6 +1319,7 @@ static int flexcan_open(struct net_devic flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_FIFO); priv->tx_mb_idx = priv->mb_count - 1; priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); diff --git a/target/linux/layerscape/patches-5.4/802-can-0015-can-flexcan-flexcan_read_reg_iflag_rx-optimize-readi.patch b/target/linux/layerscape/patches-5.4/802-can-0015-can-flexcan-flexcan_read_reg_iflag_rx-optimize-readi.patch index cf7a6fdcb..466c70ecb 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0015-can-flexcan-flexcan_read_reg_iflag_rx-optimize-readi.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0015-can-flexcan-flexcan_read_reg_iflag_rx-optimize-readi.patch @@ -24,7 +24,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -779,6 +779,23 @@ static void flexcan_irq_state(struct net +@@ -778,6 +778,23 @@ static void flexcan_irq_state(struct net dev->stats.rx_fifo_errors++; } @@ -48,7 +48,7 @@ Signed-off-by: Marc Kleine-Budde static inline struct flexcan_priv *rx_offload_to_priv(struct can_rx_offload *offload) { return container_of(offload, struct flexcan_priv, offload); -@@ -873,17 +890,6 @@ static struct sk_buff *flexcan_mailbox_r +@@ -872,17 +889,6 @@ static struct sk_buff *flexcan_mailbox_r return skb; } diff --git a/target/linux/layerscape/patches-5.4/802-can-0016-can-flexcan-flexcan_irq-add-support-for-TX-mailbox-i.patch b/target/linux/layerscape/patches-5.4/802-can-0016-can-flexcan-flexcan_irq-add-support-for-TX-mailbox-i.patch index 5fb96f451..5286e4b11 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0016-can-flexcan-flexcan_irq-add-support-for-TX-mailbox-i.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0016-can-flexcan-flexcan_irq-add-support-for-TX-mailbox-i.patch @@ -28,7 +28,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -791,11 +791,24 @@ static inline u64 flexcan_read64_mask(st +@@ -790,11 +790,24 @@ static inline u64 flexcan_read64_mask(st return reg & mask; } @@ -53,7 +53,7 @@ Signed-off-by: Marc Kleine-Budde static inline struct flexcan_priv *rx_offload_to_priv(struct can_rx_offload *offload) { return container_of(offload, struct flexcan_priv, offload); -@@ -932,7 +945,7 @@ static irqreturn_t flexcan_irq(int irq, +@@ -931,7 +944,7 @@ static irqreturn_t flexcan_irq(int irq, } } @@ -62,7 +62,7 @@ Signed-off-by: Marc Kleine-Budde /* transmission complete interrupt */ if (reg_iflag_tx & priv->tx_mask) { -@@ -947,7 +960,7 @@ static irqreturn_t flexcan_irq(int irq, +@@ -946,7 +959,7 @@ static irqreturn_t flexcan_irq(int irq, /* after sending a RTR frame MB is in RX mode */ priv->write(FLEXCAN_MB_CODE_TX_INACTIVE, &priv->tx_mb->can_ctrl); diff --git a/target/linux/layerscape/patches-5.4/802-can-0017-can-flexcan-flexcan_mailbox_read-make-use-of-flexcan.patch b/target/linux/layerscape/patches-5.4/802-can-0017-can-flexcan-flexcan_mailbox_read-make-use-of-flexcan.patch index 37c2ed3cf..29ad52f22 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0017-can-flexcan-flexcan_mailbox_read-make-use-of-flexcan.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0017-can-flexcan-flexcan_mailbox_read-make-use-of-flexcan.patch @@ -16,7 +16,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -884,15 +884,10 @@ static struct sk_buff *flexcan_mailbox_r +@@ -883,15 +883,10 @@ static struct sk_buff *flexcan_mailbox_r } mark_as_read: diff --git a/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch b/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch index 968bc11d5..0e229ee5d 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch @@ -15,7 +15,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -628,10 +628,10 @@ static int flexcan_get_berr_counter(cons +@@ -627,10 +627,10 @@ static int flexcan_get_berr_counter(cons static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) { const struct flexcan_priv *priv = netdev_priv(dev); @@ -28,7 +28,7 @@ Signed-off-by: Marc Kleine-Budde int i; if (can_dropped_invalid_skb(dev, skb)) -@@ -639,18 +639,18 @@ static netdev_tx_t flexcan_start_xmit(st +@@ -638,18 +638,18 @@ static netdev_tx_t flexcan_start_xmit(st netif_stop_queue(dev); @@ -53,7 +53,7 @@ Signed-off-by: Marc Kleine-Budde priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); } -@@ -822,7 +822,7 @@ static struct sk_buff *flexcan_mailbox_r +@@ -821,7 +821,7 @@ static struct sk_buff *flexcan_mailbox_r struct flexcan_regs __iomem *regs = priv->regs; struct flexcan_mb __iomem *mb; struct sk_buff *skb; @@ -62,7 +62,7 @@ Signed-off-by: Marc Kleine-Budde u32 reg_ctrl, reg_id, reg_iflag1; int i; -@@ -859,8 +859,8 @@ static struct sk_buff *flexcan_mailbox_r +@@ -858,8 +858,8 @@ static struct sk_buff *flexcan_mailbox_r reg_ctrl = priv->read(&mb->can_ctrl); } @@ -73,7 +73,7 @@ Signed-off-by: Marc Kleine-Budde skb = ERR_PTR(-ENOMEM); goto mark_as_read; } -@@ -870,17 +870,17 @@ static struct sk_buff *flexcan_mailbox_r +@@ -869,17 +869,17 @@ static struct sk_buff *flexcan_mailbox_r reg_id = priv->read(&mb->can_id); if (reg_ctrl & FLEXCAN_MB_CNT_IDE) diff --git a/target/linux/layerscape/patches-5.4/802-can-0019-can-flexcan-add-CAN-FD-mode-support.patch b/target/linux/layerscape/patches-5.4/802-can-0019-can-flexcan-add-CAN-FD-mode-support.patch index e9c8740e6..b6f8a3a3c 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0019-can-flexcan-add-CAN-FD-mode-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0019-can-flexcan-add-CAN-FD-mode-support.patch @@ -93,7 +93,7 @@ Signed-off-by: Marc Kleine-Budde }; struct flexcan_devtype_data { -@@ -337,6 +367,30 @@ static const struct can_bittiming_const +@@ -336,6 +366,30 @@ static const struct can_bittiming_const .brp_inc = 1, }; @@ -124,7 +124,7 @@ Signed-off-by: Marc Kleine-Budde /* FlexCAN module is essentially modelled as a little-endian IP in most * SoCs, i.e the registers as well as the message buffer areas are * implemented in a little-endian fashion. -@@ -631,7 +685,7 @@ static netdev_tx_t flexcan_start_xmit(st +@@ -630,7 +684,7 @@ static netdev_tx_t flexcan_start_xmit(st struct canfd_frame *cfd = (struct canfd_frame *)skb->data; u32 can_id; u32 data; @@ -133,7 +133,7 @@ Signed-off-by: Marc Kleine-Budde int i; if (can_dropped_invalid_skb(dev, skb)) -@@ -649,6 +703,9 @@ static netdev_tx_t flexcan_start_xmit(st +@@ -648,6 +702,9 @@ static netdev_tx_t flexcan_start_xmit(st if (cfd->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; @@ -143,7 +143,7 @@ Signed-off-by: Marc Kleine-Budde for (i = 0; i < cfd->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cfd->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); -@@ -859,7 +916,10 @@ static struct sk_buff *flexcan_mailbox_r +@@ -858,7 +915,10 @@ static struct sk_buff *flexcan_mailbox_r reg_ctrl = priv->read(&mb->can_ctrl); } @@ -155,7 +155,7 @@ Signed-off-by: Marc Kleine-Budde if (unlikely(!skb)) { skb = ERR_PTR(-ENOMEM); goto mark_as_read; -@@ -874,9 +934,17 @@ static struct sk_buff *flexcan_mailbox_r +@@ -873,9 +933,17 @@ static struct sk_buff *flexcan_mailbox_r else cfd->can_id = (reg_id >> 18) & CAN_SFF_MASK; @@ -176,7 +176,7 @@ Signed-off-by: Marc Kleine-Budde for (i = 0; i < cfd->len; i += sizeof(u32)) { __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); -@@ -1021,27 +1089,14 @@ static irqreturn_t flexcan_irq(int irq, +@@ -1020,27 +1088,14 @@ static irqreturn_t flexcan_irq(int irq, static void flexcan_set_bittiming(struct net_device *dev) { @@ -209,7 +209,7 @@ Signed-off-by: Marc Kleine-Budde if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) reg |= FLEXCAN_CTRL_LPB; if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) -@@ -1052,9 +1107,102 @@ static void flexcan_set_bittiming(struct +@@ -1051,9 +1106,102 @@ static void flexcan_set_bittiming(struct netdev_dbg(dev, "writing ctrl=0x%08x\n", reg); priv->write(reg, ®s->ctrl); @@ -315,7 +315,7 @@ Signed-off-by: Marc Kleine-Budde } /* flexcan_chip_start -@@ -1066,7 +1214,7 @@ static int flexcan_chip_start(struct net +@@ -1065,7 +1213,7 @@ static int flexcan_chip_start(struct net { struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->regs; @@ -324,7 +324,7 @@ Signed-off-by: Marc Kleine-Budde u64 reg_imask; int err, i; struct flexcan_mb __iomem *mb; -@@ -1163,6 +1311,26 @@ static int flexcan_chip_start(struct net +@@ -1162,6 +1310,26 @@ static int flexcan_chip_start(struct net netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); priv->write(reg_ctrl, ®s->ctrl); @@ -351,7 +351,7 @@ Signed-off-by: Marc Kleine-Budde if ((priv->devtype_data->quirks & FLEXCAN_QUIRK_ENABLE_EACEN_RRS)) { reg_ctrl2 = priv->read(®s->ctrl2); reg_ctrl2 |= FLEXCAN_CTRL2_EACEN | FLEXCAN_CTRL2_RRS; -@@ -1310,6 +1478,12 @@ static int flexcan_open(struct net_devic +@@ -1309,6 +1477,12 @@ static int flexcan_open(struct net_devic struct flexcan_priv *priv = netdev_priv(dev); int err; @@ -364,7 +364,7 @@ Signed-off-by: Marc Kleine-Budde err = pm_runtime_get_sync(priv->dev); if (err < 0) return err; -@@ -1322,7 +1496,10 @@ static int flexcan_open(struct net_devic +@@ -1321,7 +1495,10 @@ static int flexcan_open(struct net_devic if (err) goto out_close; @@ -376,7 +376,7 @@ Signed-off-by: Marc Kleine-Budde priv->mb_count = (sizeof(priv->regs->mb[0]) / priv->mb_size) + (sizeof(priv->regs->mb[1]) / priv->mb_size); -@@ -1667,6 +1844,18 @@ static int flexcan_probe(struct platform +@@ -1666,6 +1843,18 @@ static int flexcan_probe(struct platform priv->devtype_data = devtype_data; priv->reg_xceiver = reg_xceiver; diff --git a/target/linux/layerscape/patches-5.4/802-can-0020-can-flexcan-add-CAN-FD-BRS-support.patch b/target/linux/layerscape/patches-5.4/802-can-0020-can-flexcan-add-CAN-FD-BRS-support.patch index d569c7fbb..9ddc6b029 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0020-can-flexcan-add-CAN-FD-BRS-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0020-can-flexcan-add-CAN-FD-BRS-support.patch @@ -13,7 +13,7 @@ Signed-off-by: Marc Kleine-Budde --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c -@@ -703,9 +703,13 @@ static netdev_tx_t flexcan_start_xmit(st +@@ -702,9 +702,13 @@ static netdev_tx_t flexcan_start_xmit(st if (cfd->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; @@ -28,7 +28,7 @@ Signed-off-by: Marc Kleine-Budde for (i = 0; i < cfd->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cfd->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); -@@ -936,6 +940,9 @@ static struct sk_buff *flexcan_mailbox_r +@@ -935,6 +939,9 @@ static struct sk_buff *flexcan_mailbox_r if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { cfd->len = can_dlc2len(get_canfd_dlc((reg_ctrl >> 16) & 0xf)); diff --git a/target/linux/layerscape/patches-5.4/802-can-0021-can-flexcan-add-ISO-CAN-FD-feature-support.patch b/target/linux/layerscape/patches-5.4/802-can-0021-can-flexcan-add-ISO-CAN-FD-feature-support.patch index 2c3452b0d..0b987bb5e 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0021-can-flexcan-add-ISO-CAN-FD-feature-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0021-can-flexcan-add-ISO-CAN-FD-feature-support.patch @@ -31,7 +31,7 @@ Signed-off-by: Marc Kleine-Budde /* FLEXCAN memory error control register (MECR) bits */ #define FLEXCAN_MECR_ECRWRDIS BIT(31) -@@ -1323,6 +1324,7 @@ static int flexcan_chip_start(struct net +@@ -1322,6 +1323,7 @@ static int flexcan_chip_start(struct net reg_fdctrl = priv->read(®s->fdctrl) & ~FLEXCAN_FDCTRL_FDRATE; reg_fdctrl &= ~(FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3)); reg_mcr = priv->read(®s->mcr) & ~FLEXCAN_MCR_FDEN; @@ -39,7 +39,7 @@ Signed-off-by: Marc Kleine-Budde /* support BRS when set CAN FD mode * 64 bytes payload per MB and 7 MBs per RAM block by default -@@ -1332,10 +1334,14 @@ static int flexcan_chip_start(struct net +@@ -1331,10 +1333,14 @@ static int flexcan_chip_start(struct net reg_fdctrl |= FLEXCAN_FDCTRL_FDRATE; reg_fdctrl |= FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3); reg_mcr |= FLEXCAN_MCR_FDEN; @@ -54,7 +54,7 @@ Signed-off-by: Marc Kleine-Budde } if ((priv->devtype_data->quirks & FLEXCAN_QUIRK_ENABLE_EACEN_RRS)) { -@@ -1853,7 +1859,7 @@ static int flexcan_probe(struct platform +@@ -1852,7 +1858,7 @@ static int flexcan_probe(struct platform if (priv->devtype_data->quirks & FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD) { if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { diff --git a/target/linux/layerscape/patches-5.4/802-can-0022-can-flexcan-add-Transceiver-Delay-Compensation-suopp.patch b/target/linux/layerscape/patches-5.4/802-can-0022-can-flexcan-add-Transceiver-Delay-Compensation-suopp.patch index ee00ddb5a..dcdc1647a 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0022-can-flexcan-add-Transceiver-Delay-Compensation-suopp.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0022-can-flexcan-add-Transceiver-Delay-Compensation-suopp.patch @@ -31,7 +31,7 @@ Signed-off-by: Marc Kleine-Budde /* FLEXCAN FD Bit Timing register (FDCBT) bits */ #define FLEXCAN_FDCBT_FPRESDIV(x) (((x) & 0x3ff) << 20) -@@ -1101,7 +1104,7 @@ static void flexcan_set_bittiming(struct +@@ -1100,7 +1103,7 @@ static void flexcan_set_bittiming(struct struct can_bittiming *bt = &priv->can.bittiming; struct can_bittiming *dbt = &priv->can.data_bittiming; struct flexcan_regs __iomem *regs = priv->regs; @@ -40,7 +40,7 @@ Signed-off-by: Marc Kleine-Budde reg = priv->read(®s->ctrl); reg &= ~(FLEXCAN_CTRL_LPB | FLEXCAN_CTRL_SMP | FLEXCAN_CTRL_LOM); -@@ -1173,6 +1176,19 @@ static void flexcan_set_bittiming(struct +@@ -1172,6 +1175,19 @@ static void flexcan_set_bittiming(struct FLEXCAN_FDCBT_FPROPSEG(dbt->prop_seg); priv->write(reg_fdcbt, ®s->fdcbt); @@ -60,7 +60,7 @@ Signed-off-by: Marc Kleine-Budde if (bt->brp != dbt->brp) netdev_warn(dev, "Warning!! data brp = %d and brp = %d don't match.\n" "flexcan may not work. consider using different bitrate or data bitrate\n", -@@ -1322,6 +1338,7 @@ static int flexcan_chip_start(struct net +@@ -1321,6 +1337,7 @@ static int flexcan_chip_start(struct net /* FDCTRL */ if (priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) { reg_fdctrl = priv->read(®s->fdctrl) & ~FLEXCAN_FDCTRL_FDRATE; diff --git a/target/linux/layerscape/patches-5.4/802-can-0023-can-flexcan-add-imx8qm-support.patch b/target/linux/layerscape/patches-5.4/802-can-0023-can-flexcan-add-imx8qm-support.patch index 3c8645692..333cbf556 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0023-can-flexcan-add-imx8qm-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0023-can-flexcan-add-imx8qm-support.patch @@ -52,7 +52,7 @@ Signed-off-by: Marc Kleine-Budde static const struct flexcan_devtype_data fsl_vf610_devtype_data = { .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | -@@ -1760,6 +1767,7 @@ out_put_node: +@@ -1759,6 +1766,7 @@ out_put_node: } static const struct of_device_id flexcan_of_match[] = { diff --git a/target/linux/layerscape/patches-5.4/802-can-0024-can-flexcan-add-lx2160ar1-support.patch b/target/linux/layerscape/patches-5.4/802-can-0024-can-flexcan-add-lx2160ar1-support.patch index 0c9dc7d14..1758cc68d 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0024-can-flexcan-add-lx2160ar1-support.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0024-can-flexcan-add-lx2160ar1-support.patch @@ -34,8 +34,8 @@ Signed-off-by: Marc Kleine-Budde + static const struct flexcan_devtype_data fsl_ls1021a_r2_devtype_data = { .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | - FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_BROKEN_PERR_STATE | -@@ -1776,6 +1783,7 @@ static const struct of_device_id flexcan + FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP, +@@ -1775,6 +1782,7 @@ static const struct of_device_id flexcan { .compatible = "fsl,p1010-flexcan", .data = &fsl_p1010_devtype_data, }, { .compatible = "fsl,vf610-flexcan", .data = &fsl_vf610_devtype_data, }, { .compatible = "fsl,ls1021ar2-flexcan", .data = &fsl_ls1021a_r2_devtype_data, }, diff --git a/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch b/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch index 806a02030..6a6e068de 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch @@ -28,7 +28,7 @@ Signed-off-by: Joakim Zhang #include #define DRV_NAME "flexcan" -@@ -1954,9 +1955,7 @@ static int __maybe_unused flexcan_suspen +@@ -1955,9 +1956,7 @@ static int __maybe_unused flexcan_suspen if (err) return err; } else { @@ -39,7 +39,7 @@ Signed-off-by: Joakim Zhang } netif_stop_queue(dev); netif_device_detach(dev); -@@ -1982,7 +1981,9 @@ static int __maybe_unused flexcan_resume +@@ -1983,7 +1982,9 @@ static int __maybe_unused flexcan_resume if (err) return err; } else { diff --git a/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch b/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch index a77139570..da8a40630 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch @@ -47,7 +47,7 @@ Signed-off-by: Joakim Zhang /* FLEXCAN Bit Timing register (CBT) bits */ #define FLEXCAN_CBT_BTF BIT(31) -@@ -1055,6 +1054,12 @@ static irqreturn_t flexcan_irq(int irq, +@@ -1054,6 +1053,12 @@ static irqreturn_t flexcan_irq(int irq, reg_esr = priv->read(®s->esr); diff --git a/target/linux/layerscape/patches-5.4/802-can-0027-can-flexcan-add-CAN-wakeup-function-for-i.MX8.patch b/target/linux/layerscape/patches-5.4/802-can-0027-can-flexcan-add-CAN-wakeup-function-for-i.MX8.patch index 06fd55aaa..d7e40d546 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0027-can-flexcan-add-CAN-wakeup-function-for-i.MX8.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0027-can-flexcan-add-CAN-wakeup-function-for-i.MX8.patch @@ -63,7 +63,7 @@ Signed-off-by: Joakim Zhang }; static const struct flexcan_devtype_data fsl_vf610_devtype_data = { -@@ -504,6 +516,32 @@ static void flexcan_enable_wakeup_irq(st +@@ -503,6 +515,32 @@ static void flexcan_enable_wakeup_irq(st priv->write(reg_mcr, ®s->mcr); } @@ -96,7 +96,7 @@ Signed-off-by: Joakim Zhang static inline int flexcan_enter_stop_mode(struct flexcan_priv *priv) { struct flexcan_regs __iomem *regs = priv->regs; -@@ -513,9 +551,12 @@ static inline int flexcan_enter_stop_mod +@@ -512,9 +550,12 @@ static inline int flexcan_enter_stop_mod reg_mcr |= FLEXCAN_MCR_SLF_WAK; priv->write(reg_mcr, ®s->mcr); @@ -112,7 +112,7 @@ Signed-off-by: Joakim Zhang return flexcan_low_power_enter_ack(priv); } -@@ -526,8 +567,11 @@ static inline int flexcan_exit_stop_mode +@@ -525,8 +566,11 @@ static inline int flexcan_exit_stop_mode u32 reg_mcr; /* remove stop request */ @@ -126,7 +126,7 @@ Signed-off-by: Joakim Zhang reg_mcr = priv->read(®s->mcr); -@@ -1767,11 +1811,6 @@ static int flexcan_setup_stop_mode(struc +@@ -1766,11 +1810,6 @@ static int flexcan_setup_stop_mode(struc gpr_np->full_name, priv->stm.req_gpr, priv->stm.req_bit, priv->stm.ack_gpr, priv->stm.ack_bit); @@ -138,7 +138,7 @@ Signed-off-by: Joakim Zhang return 0; out_put_node: -@@ -1779,6 +1818,30 @@ out_put_node: +@@ -1778,6 +1817,30 @@ out_put_node: return ret; } @@ -169,7 +169,7 @@ Signed-off-by: Joakim Zhang static const struct of_device_id flexcan_of_match[] = { { .compatible = "fsl,imx8qm-flexcan", .data = &fsl_imx8qm_devtype_data, }, { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, }, -@@ -1921,9 +1984,19 @@ static int flexcan_probe(struct platform +@@ -1920,9 +1983,19 @@ static int flexcan_probe(struct platform devm_can_led_init(dev); if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SETUP_STOP_MODE) { diff --git a/target/linux/layerscape/patches-5.4/802-can-0028-can-flexcan-Add-S32V234-support-to-FlexCAN-driver.patch b/target/linux/layerscape/patches-5.4/802-can-0028-can-flexcan-Add-S32V234-support-to-FlexCAN-driver.patch index 0c631356f..6bfeec9ee 100644 --- a/target/linux/layerscape/patches-5.4/802-can-0028-can-flexcan-Add-S32V234-support-to-FlexCAN-driver.patch +++ b/target/linux/layerscape/patches-5.4/802-can-0028-can-flexcan-Add-S32V234-support-to-FlexCAN-driver.patch @@ -25,8 +25,8 @@ Reviewed-by: Leonard Crestez // // Based on code originally by Andrey Volkov -@@ -385,6 +386,10 @@ static const struct flexcan_devtype_data - FLEXCAN_QUIRK_USE_OFF_TIMESTAMP, +@@ -384,6 +385,10 @@ static const struct flexcan_devtype_data + FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP, }; +static struct flexcan_devtype_data fsl_s32v234_devtype_data = { @@ -36,7 +36,7 @@ Reviewed-by: Leonard Crestez static const struct can_bittiming_const flexcan_bittiming_const = { .name = DRV_NAME, .tseg1_min = 4, -@@ -1853,6 +1858,8 @@ static const struct of_device_id flexcan +@@ -1852,6 +1857,8 @@ static const struct of_device_id flexcan { .compatible = "fsl,vf610-flexcan", .data = &fsl_vf610_devtype_data, }, { .compatible = "fsl,ls1021ar2-flexcan", .data = &fsl_ls1021a_r2_devtype_data, }, { .compatible = "fsl,lx2160ar1-flexcan", .data = &fsl_lx2160a_r1_devtype_data, }, diff --git a/target/linux/layerscape/patches-5.4/811-kvm-0002-arm-arm64-KVM-allow-specifying-s2-prot-bits-when-map.patch b/target/linux/layerscape/patches-5.4/811-kvm-0002-arm-arm64-KVM-allow-specifying-s2-prot-bits-when-map.patch index bdc872539..0a2ca6465 100644 --- a/target/linux/layerscape/patches-5.4/811-kvm-0002-arm-arm64-KVM-allow-specifying-s2-prot-bits-when-map.patch +++ b/target/linux/layerscape/patches-5.4/811-kvm-0002-arm-arm64-KVM-allow-specifying-s2-prot-bits-when-map.patch @@ -64,7 +64,7 @@ Signed-off-by: Laurentiu Tudor if (writable) pte = kvm_s2pte_mkwrite(pte); -@@ -2361,7 +2363,7 @@ int kvm_arch_prepare_memory_region(struc +@@ -2362,7 +2364,7 @@ int kvm_arch_prepare_memory_region(struc ret = kvm_phys_addr_ioremap(kvm, gpa, pa, vm_end - vm_start, diff --git a/target/linux/layerscape/patches-5.4/811-kvm-0003-arm-arm64-KVM-drop-qman-mmio-cacheable-mapping-hack.patch b/target/linux/layerscape/patches-5.4/811-kvm-0003-arm-arm64-KVM-drop-qman-mmio-cacheable-mapping-hack.patch index 1b36b61e6..91f48a78b 100644 --- a/target/linux/layerscape/patches-5.4/811-kvm-0003-arm-arm64-KVM-drop-qman-mmio-cacheable-mapping-hack.patch +++ b/target/linux/layerscape/patches-5.4/811-kvm-0003-arm-arm64-KVM-drop-qman-mmio-cacheable-mapping-hack.patch @@ -105,7 +105,7 @@ Signed-off-by: Diana Craciun if (kvm_is_device_pfn(pfn)) { mem_type = PAGE_S2_DEVICE; flags |= KVM_S2PTE_FLAG_IS_IOMAP; -@@ -2351,6 +2395,9 @@ int kvm_arch_prepare_memory_region(struc +@@ -2352,6 +2396,9 @@ int kvm_arch_prepare_memory_region(struc gpa_t gpa = mem->guest_phys_addr + (vm_start - mem->userspace_addr); phys_addr_t pa; @@ -115,7 +115,7 @@ Signed-off-by: Diana Craciun pa = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT; pa += vm_start - vma->vm_start; -@@ -2361,9 +2408,13 @@ int kvm_arch_prepare_memory_region(struc +@@ -2362,9 +2409,13 @@ int kvm_arch_prepare_memory_region(struc goto out; } diff --git a/target/linux/layerscape/patches-5.4/819-uart-0001-tty-serial-lpuart-add-power-domain-support.patch b/target/linux/layerscape/patches-5.4/819-uart-0001-tty-serial-lpuart-add-power-domain-support.patch index aa14f1750..ce93640b5 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0001-tty-serial-lpuart-add-power-domain-support.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0001-tty-serial-lpuart-add-power-domain-support.patch @@ -27,7 +27,7 @@ Signed-off-by: Fugang Duan #include #include #include -@@ -2367,6 +2369,54 @@ static struct uart_driver lpuart_reg = { +@@ -2391,6 +2393,54 @@ static struct uart_driver lpuart_reg = { .cons = LPUART_CONSOLE, }; @@ -82,7 +82,7 @@ Signed-off-by: Fugang Duan static int lpuart_probe(struct platform_device *pdev) { const struct of_device_id *of_id = of_match_device(lpuart_dt_ids, -@@ -2404,6 +2454,10 @@ static int lpuart_probe(struct platform_ +@@ -2428,6 +2478,10 @@ static int lpuart_probe(struct platform_ sport->port.rs485_config = lpuart_config_rs485; diff --git a/target/linux/layerscape/patches-5.4/819-uart-0002-tty-serial-fsl_lpuart-add-modem-device-reset.patch b/target/linux/layerscape/patches-5.4/819-uart-0002-tty-serial-fsl_lpuart-add-modem-device-reset.patch index 9f409a1fa..a287cd7f0 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0002-tty-serial-fsl_lpuart-add-modem-device-reset.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0002-tty-serial-fsl_lpuart-add-modem-device-reset.patch @@ -20,7 +20,7 @@ Signed-off-by: Fugang Duan #include #include #include -@@ -1542,8 +1543,17 @@ static void lpuart32_configure(struct lp +@@ -1555,8 +1556,17 @@ static void lpuart32_configure(struct lp static int lpuart32_startup(struct uart_port *port) { struct lpuart_port *sport = container_of(port, struct lpuart_port, port); diff --git a/target/linux/layerscape/patches-5.4/819-uart-0003-tty-serial-fsl_lpuart-add-magic-SysRq-support.patch b/target/linux/layerscape/patches-5.4/819-uart-0003-tty-serial-fsl_lpuart-add-magic-SysRq-support.patch index bb94b0247..dc2ace7be 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0003-tty-serial-fsl_lpuart-add-magic-SysRq-support.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0003-tty-serial-fsl_lpuart-add-magic-SysRq-support.patch @@ -12,7 +12,7 @@ Signed-off-by: Fugang Duan --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -918,7 +918,12 @@ static void lpuart32_rxint(struct lpuart +@@ -931,7 +931,12 @@ static void lpuart32_rxint(struct lpuart */ sr = lpuart32_read(&sport->port, UARTSTAT); rx = lpuart32_read(&sport->port, UARTDATA); diff --git a/target/linux/layerscape/patches-5.4/819-uart-0004-MLK-18137-fsl_lpuart-Fix-loopback-mode.patch b/target/linux/layerscape/patches-5.4/819-uart-0004-MLK-18137-fsl_lpuart-Fix-loopback-mode.patch index aab529fc7..f3ff33028 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0004-MLK-18137-fsl_lpuart-Fix-loopback-mode.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0004-MLK-18137-fsl_lpuart-Fix-loopback-mode.patch @@ -17,7 +17,7 @@ Signed-off-by: Adriana Reus --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -2452,7 +2452,7 @@ static int lpuart_probe(struct platform_ +@@ -2476,7 +2476,7 @@ static int lpuart_probe(struct platform_ return PTR_ERR(sport->port.membase); sport->port.membase += sdata->reg_off; diff --git a/target/linux/layerscape/patches-5.4/819-uart-0005-tty-serial-fsl_lpuart-enable-dma-mode-for-imx8qxp.patch b/target/linux/layerscape/patches-5.4/819-uart-0005-tty-serial-fsl_lpuart-enable-dma-mode-for-imx8qxp.patch index d4034bb9d..6edcc398d 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0005-tty-serial-fsl_lpuart-enable-dma-mode-for-imx8qxp.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0005-tty-serial-fsl_lpuart-enable-dma-mode-for-imx8qxp.patch @@ -60,7 +60,7 @@ Signed-off-by: Fugang Duan /* Rx DMA timeout in ms, which is used to calculate Rx ring buffer size */ #define DMA_RX_TIMEOUT (10) -@@ -253,6 +260,9 @@ struct lpuart_port { +@@ -254,6 +261,9 @@ struct lpuart_port { unsigned int txfifo_size; unsigned int rxfifo_size; @@ -70,7 +70,7 @@ Signed-off-by: Fugang Duan bool lpuart_dma_tx_use; bool lpuart_dma_rx_use; struct dma_chan *dma_tx_chan; -@@ -278,28 +288,38 @@ struct lpuart_soc_data { +@@ -279,33 +289,45 @@ struct lpuart_soc_data { enum lpuart_type devtype; char iotype; u8 reg_off; @@ -85,13 +85,20 @@ Signed-off-by: Fugang Duan + .rx_dma_cyclic = true, }; - static const struct lpuart_soc_data ls_data = { + static const struct lpuart_soc_data ls1021a_data = { .devtype = LS1021A_LPUART, .iotype = UPIO_MEM32BE, + .rx_watermark = 0, + .rx_dma_cyclic = true, }; + static const struct lpuart_soc_data ls1028a_data = { + .devtype = LS1028A_LPUART, + .iotype = UPIO_MEM32, ++ .rx_watermark = 0, ++ .rx_dma_cyclic = true, + }; + static struct lpuart_soc_data imx7ulp_data = { .devtype = IMX7ULP_LPUART, .iotype = UPIO_MEM32, @@ -109,15 +116,15 @@ Signed-off-by: Fugang Duan }; static const struct of_device_id lpuart_dt_ids[] = { -@@ -313,6 +333,7 @@ MODULE_DEVICE_TABLE(of, lpuart_dt_ids); +@@ -320,6 +342,7 @@ MODULE_DEVICE_TABLE(of, lpuart_dt_ids); /* Forward declare this for the dma callbacks*/ static void lpuart_dma_tx_complete(void *arg); +static int lpuart_sched_rx_dma(struct lpuart_port *sport); - static inline bool is_imx8qxp_lpuart(struct lpuart_port *sport) + static inline bool is_layerscape_lpuart(struct lpuart_port *sport) { -@@ -998,19 +1019,15 @@ static irqreturn_t lpuart32_int(int irq, +@@ -1011,19 +1034,15 @@ static irqreturn_t lpuart32_int(int irq, if ((sts & UARTSTAT_TDRE) && !sport->lpuart_dma_tx_use) lpuart32_txint(sport); @@ -141,7 +148,7 @@ Signed-off-by: Fugang Duan if (lpuart_is_32(sport)) { unsigned long sr = lpuart32_read(&sport->port, UARTSTAT); -@@ -1062,8 +1079,21 @@ static void lpuart_copy_rx_to_tty(struct +@@ -1075,8 +1094,21 @@ static void lpuart_copy_rx_to_tty(struct writeb(cr2, sport->port.membase + UARTCR2); } } @@ -164,7 +171,7 @@ Signed-off-by: Fugang Duan spin_lock_irqsave(&sport->port.lock, flags); -@@ -1126,7 +1156,33 @@ static void lpuart_copy_rx_to_tty(struct +@@ -1139,7 +1171,33 @@ static void lpuart_copy_rx_to_tty(struct spin_unlock_irqrestore(&sport->port.lock, flags); tty_flip_buffer_push(port); @@ -199,7 +206,7 @@ Signed-off-by: Fugang Duan } static void lpuart_dma_rx_complete(void *arg) -@@ -1134,6 +1190,8 @@ static void lpuart_dma_rx_complete(void +@@ -1147,6 +1205,8 @@ static void lpuart_dma_rx_complete(void struct lpuart_port *sport = arg; lpuart_copy_rx_to_tty(sport); @@ -208,7 +215,7 @@ Signed-off-by: Fugang Duan } static void lpuart_timer_func(struct timer_list *t) -@@ -1141,13 +1199,78 @@ static void lpuart_timer_func(struct tim +@@ -1154,13 +1214,78 @@ static void lpuart_timer_func(struct tim struct lpuart_port *sport = from_timer(sport, t, lpuart_timer); lpuart_copy_rx_to_tty(sport); @@ -291,7 +298,7 @@ Signed-off-by: Fugang Duan int bits, baud; struct tty_port *port = &sport->port.state->port; struct tty_struct *tty = port->tty; -@@ -1167,6 +1290,18 @@ static inline int lpuart_start_rx_dma(st +@@ -1180,6 +1305,18 @@ static inline int lpuart_start_rx_dma(st sport->rx_dma_rng_buf_len = (1 << (fls(sport->rx_dma_rng_buf_len) - 1)); if (sport->rx_dma_rng_buf_len < 16) sport->rx_dma_rng_buf_len = 16; @@ -310,7 +317,7 @@ Signed-off-by: Fugang Duan ring->buf = kzalloc(sport->rx_dma_rng_buf_len, GFP_ATOMIC); if (!ring->buf) -@@ -1192,32 +1327,7 @@ static inline int lpuart_start_rx_dma(st +@@ -1205,32 +1342,7 @@ static inline int lpuart_start_rx_dma(st return ret; } @@ -344,7 +351,7 @@ Signed-off-by: Fugang Duan } static void lpuart_dma_rx_free(struct uart_port *port) -@@ -1403,8 +1513,10 @@ static void lpuart_setup_watermark(struc +@@ -1416,8 +1528,10 @@ static void lpuart_setup_watermark(struc writeb(UARTSFIFO_RXUF, sport->port.membase + UARTSFIFO); } @@ -356,7 +363,7 @@ Signed-off-by: Fugang Duan /* Restore cr2 */ writeb(cr2_saved, sport->port.membase + UARTCR2); -@@ -1425,6 +1537,7 @@ static void lpuart32_setup_watermark(str +@@ -1438,6 +1552,7 @@ static void lpuart32_setup_watermark(str { unsigned long val, ctrl; unsigned long ctrl_saved; @@ -364,7 +371,7 @@ Signed-off-by: Fugang Duan ctrl = lpuart32_read(&sport->port, UARTCTRL); ctrl_saved = ctrl; -@@ -1436,12 +1549,26 @@ static void lpuart32_setup_watermark(str +@@ -1449,12 +1564,26 @@ static void lpuart32_setup_watermark(str val = lpuart32_read(&sport->port, UARTFIFO); val |= UARTFIFO_TXFE | UARTFIFO_RXFE; val |= UARTFIFO_TXFLUSH | UARTFIFO_RXFLUSH; @@ -392,7 +399,7 @@ Signed-off-by: Fugang Duan /* Restore cr2 */ lpuart32_write(&sport->port, ctrl_saved, UARTCTRL); } -@@ -1453,17 +1580,29 @@ static void lpuart32_setup_watermark_ena +@@ -1466,17 +1595,29 @@ static void lpuart32_setup_watermark_ena lpuart32_setup_watermark(sport); temp = lpuart32_read(&sport->port, UARTCTRL); @@ -423,7 +430,7 @@ Signed-off-by: Fugang Duan static void lpuart_tx_dma_startup(struct lpuart_port *sport) { u32 uartbaud; -@@ -1527,19 +1666,23 @@ static int lpuart_startup(struct uart_po +@@ -1540,19 +1681,23 @@ static int lpuart_startup(struct uart_po return 0; } @@ -454,7 +461,7 @@ Signed-off-by: Fugang Duan if (!sport->lpuart_dma_tx_use) temp |= UARTCTRL_TIE; lpuart32_write(&sport->port, temp, UARTCTRL); -@@ -1572,12 +1715,12 @@ static int lpuart32_startup(struct uart_ +@@ -1596,12 +1741,12 @@ static int lpuart32_startup(struct uart_ spin_lock_irqsave(&sport->port.lock, flags); @@ -469,7 +476,7 @@ Signed-off-by: Fugang Duan lpuart32_configure(sport); spin_unlock_irqrestore(&sport->port.lock, flags); -@@ -1587,7 +1730,7 @@ static int lpuart32_startup(struct uart_ +@@ -1611,7 +1756,7 @@ static int lpuart32_startup(struct uart_ static void lpuart_dma_shutdown(struct lpuart_port *sport) { if (sport->lpuart_dma_rx_use) { @@ -478,7 +485,7 @@ Signed-off-by: Fugang Duan lpuart_dma_rx_free(&sport->port); } -@@ -1628,11 +1771,22 @@ static void lpuart32_shutdown(struct uar +@@ -1652,11 +1797,22 @@ static void lpuart32_shutdown(struct uar spin_lock_irqsave(&port->lock, flags); @@ -503,7 +510,7 @@ Signed-off-by: Fugang Duan spin_unlock_irqrestore(&port->lock, flags); -@@ -1729,10 +1883,10 @@ lpuart_set_termios(struct uart_port *por +@@ -1753,10 +1909,10 @@ lpuart_set_termios(struct uart_port *por * baud rate and restart Rx DMA path. * * Since timer function acqures sport->port.lock, need to stop before @@ -516,7 +523,7 @@ Signed-off-by: Fugang Duan lpuart_dma_rx_free(&sport->port); } -@@ -1944,10 +2098,10 @@ lpuart32_set_termios(struct uart_port *p +@@ -1968,10 +2124,10 @@ lpuart32_set_termios(struct uart_port *p * baud rate and restart Rx DMA path. * * Since timer function acqures sport->port.lock, need to stop before @@ -529,7 +536,7 @@ Signed-off-by: Fugang Duan lpuart_dma_rx_free(&sport->port); } -@@ -2456,6 +2610,10 @@ static int lpuart_probe(struct platform_ +@@ -2480,6 +2636,10 @@ static int lpuart_probe(struct platform_ sport->port.dev = &pdev->dev; sport->port.type = PORT_LPUART; sport->devtype = sdata->devtype; @@ -540,7 +547,7 @@ Signed-off-by: Fugang Duan ret = platform_get_irq(pdev, 0); if (ret < 0) return ret; -@@ -2618,7 +2776,7 @@ static int lpuart_suspend(struct device +@@ -2642,7 +2802,7 @@ static int lpuart_suspend(struct device * Rx DMA path before suspend and start Rx DMA path on resume. */ if (irq_wake) { diff --git a/target/linux/layerscape/patches-5.4/819-uart-0006-tty-serial-fsl_lpuart-enable-loopback-mode.patch b/target/linux/layerscape/patches-5.4/819-uart-0006-tty-serial-fsl_lpuart-enable-loopback-mode.patch index cfcb6e83f..303aa3b01 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0006-tty-serial-fsl_lpuart-enable-loopback-mode.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0006-tty-serial-fsl_lpuart-enable-loopback-mode.patch @@ -12,7 +12,7 @@ Signed-off-by: Fugang Duan --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -1462,6 +1462,14 @@ static void lpuart32_set_mctrl(struct ua +@@ -1477,6 +1477,14 @@ static void lpuart32_set_mctrl(struct ua temp |= UARTMODIR_TXCTSE; lpuart32_write(port, temp, UARTMODIR); diff --git a/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch b/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch index 58f44e86b..41271f9df 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0007-MLK-15094-tty-serial-fsl_lpuart-check-dma_tx_in_prog.patch @@ -16,7 +16,7 @@ Signed-off-by: Vipul Kumar --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -490,6 +490,10 @@ static void lpuart_dma_tx_complete(void +@@ -505,6 +505,10 @@ static void lpuart_dma_tx_complete(void unsigned long flags; spin_lock_irqsave(&sport->port.lock, flags); diff --git a/target/linux/layerscape/patches-5.4/819-uart-0008-MLK-21445-serial-fsl_lpuart-do-HW-reset-for-communic.patch b/target/linux/layerscape/patches-5.4/819-uart-0008-MLK-21445-serial-fsl_lpuart-do-HW-reset-for-communic.patch index edb0bd20c..ab52567a3 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0008-MLK-21445-serial-fsl_lpuart-do-HW-reset-for-communic.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0008-MLK-21445-serial-fsl_lpuart-do-HW-reset-for-communic.patch @@ -59,9 +59,9 @@ Signed-off-by: Shrikant Bobade #define UARTFIFO_RXIDEN_RDRF 0x3 #define UARTCTRL_IDLECFG 0x7 -@@ -335,6 +345,11 @@ MODULE_DEVICE_TABLE(of, lpuart_dt_ids); - static void lpuart_dma_tx_complete(void *arg); - static int lpuart_sched_rx_dma(struct lpuart_port *sport); +@@ -350,6 +360,11 @@ static inline bool is_layerscape_lpuart( + sport->devtype == LS1028A_LPUART); + } +static inline bool is_imx7ulp_lpuart(struct lpuart_port *sport) +{ @@ -71,7 +71,7 @@ Signed-off-by: Shrikant Bobade static inline bool is_imx8qxp_lpuart(struct lpuart_port *sport) { return sport->devtype == IMX8QXP_LPUART; -@@ -398,6 +413,33 @@ static unsigned int lpuart_get_baud_clk_ +@@ -413,6 +428,33 @@ static unsigned int lpuart_get_baud_clk_ #define lpuart_enable_clks(x) __lpuart_enable_clks(x, true) #define lpuart_disable_clks(x) __lpuart_enable_clks(x, false) @@ -105,7 +105,7 @@ Signed-off-by: Shrikant Bobade static void lpuart_stop_tx(struct uart_port *port) { unsigned char temp; -@@ -2702,6 +2744,10 @@ static int lpuart_probe(struct platform_ +@@ -2728,6 +2770,10 @@ static int lpuart_probe(struct platform_ if (ret) goto failed_attach_port; @@ -116,7 +116,7 @@ Signed-off-by: Shrikant Bobade uart_get_rs485_mode(&pdev->dev, &sport->port.rs485); if (sport->port.rs485.flags & SER_RS485_RX_DURING_TX) -@@ -2725,6 +2771,8 @@ static int lpuart_probe(struct platform_ +@@ -2751,6 +2797,8 @@ static int lpuart_probe(struct platform_ return 0; diff --git a/target/linux/layerscape/patches-5.4/819-uart-0009-MLK-17133-02-tty-serial-lpuart-add-runtime-pm-suppor.patch b/target/linux/layerscape/patches-5.4/819-uart-0009-MLK-17133-02-tty-serial-lpuart-add-runtime-pm-suppor.patch index 7021a6e3c..d819f4790 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0009-MLK-17133-02-tty-serial-lpuart-add-runtime-pm-suppor.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0009-MLK-17133-02-tty-serial-lpuart-add-runtime-pm-suppor.patch @@ -22,7 +22,7 @@ Reviewed-by: Robin Gong #define DRIVER_NAME "fsl-lpuart" #define DEV_NAME "ttyLP" -@@ -844,6 +845,20 @@ static void lpuart32_start_tx(struct uar +@@ -859,6 +860,20 @@ static void lpuart32_start_tx(struct uar } } @@ -43,7 +43,7 @@ Reviewed-by: Robin Gong /* return TIOCSER_TEMT when transmitter is not busy */ static unsigned int lpuart_tx_empty(struct uart_port *port) { -@@ -2257,6 +2272,7 @@ static const struct uart_ops lpuart_pops +@@ -2283,6 +2298,7 @@ static const struct uart_ops lpuart_pops .break_ctl = lpuart_break_ctl, .startup = lpuart_startup, .shutdown = lpuart_shutdown, @@ -51,7 +51,7 @@ Reviewed-by: Robin Gong .set_termios = lpuart_set_termios, .type = lpuart_type, .request_port = lpuart_request_port, -@@ -2281,6 +2297,7 @@ static const struct uart_ops lpuart32_po +@@ -2307,6 +2323,7 @@ static const struct uart_ops lpuart32_po .break_ctl = lpuart32_break_ctl, .startup = lpuart32_startup, .shutdown = lpuart32_shutdown, @@ -59,7 +59,7 @@ Reviewed-by: Robin Gong .set_termios = lpuart32_set_termios, .type = lpuart_type, .request_port = lpuart_request_port, -@@ -2740,6 +2757,11 @@ static int lpuart_probe(struct platform_ +@@ -2766,6 +2783,11 @@ static int lpuart_probe(struct platform_ if (ret) goto failed_irq_request; @@ -71,7 +71,7 @@ Reviewed-by: Robin Gong ret = uart_add_one_port(&lpuart_reg, &sport->port); if (ret) goto failed_attach_port; -@@ -2774,6 +2796,9 @@ static int lpuart_probe(struct platform_ +@@ -2800,6 +2822,9 @@ static int lpuart_probe(struct platform_ failed_reset: uart_remove_one_port(&lpuart_reg, &sport->port); failed_attach_port: @@ -81,7 +81,7 @@ Reviewed-by: Robin Gong failed_irq_request: lpuart_disable_clks(sport); failed_clock_enable: -@@ -2800,15 +2825,41 @@ static int lpuart_remove(struct platform +@@ -2826,15 +2851,41 @@ static int lpuart_remove(struct platform if (sport->dma_rx_chan) dma_release_channel(sport->dma_rx_chan); @@ -123,7 +123,7 @@ Reviewed-by: Robin Gong if (lpuart_is_32(sport)) { /* disable Rx/Tx and interrupts */ -@@ -2822,10 +2873,14 @@ static int lpuart_suspend(struct device +@@ -2848,10 +2899,14 @@ static int lpuart_suspend(struct device writeb(temp, sport->port.membase + UARTCR2); } @@ -138,7 +138,7 @@ Reviewed-by: Robin Gong if (sport->lpuart_dma_rx_use) { /* -@@ -2856,9 +2911,6 @@ static int lpuart_suspend(struct device +@@ -2882,9 +2937,6 @@ static int lpuart_suspend(struct device dmaengine_terminate_all(sport->dma_tx_chan); } @@ -148,7 +148,7 @@ Reviewed-by: Robin Gong return 0; } -@@ -2866,9 +2918,11 @@ static int lpuart_resume(struct device * +@@ -2892,9 +2944,11 @@ static int lpuart_resume(struct device * { struct lpuart_port *sport = dev_get_drvdata(dev); bool irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq)); @@ -162,7 +162,7 @@ Reviewed-by: Robin Gong if (lpuart_is_32(sport)) lpuart32_setup_watermark_enable(sport); -@@ -2889,13 +2943,23 @@ static int lpuart_resume(struct device * +@@ -2915,13 +2969,23 @@ static int lpuart_resume(struct device * if (lpuart_is_32(sport)) lpuart32_configure(sport); @@ -188,7 +188,7 @@ Reviewed-by: Robin Gong static struct platform_driver lpuart_driver = { .probe = lpuart_probe, -@@ -2903,7 +2967,7 @@ static struct platform_driver lpuart_dri +@@ -2929,7 +2993,7 @@ static struct platform_driver lpuart_dri .driver = { .name = "fsl-lpuart", .of_match_table = lpuart_dt_ids, diff --git a/target/linux/layerscape/patches-5.4/819-uart-0010-tty-serial-lpuart-enable-wakeup-source-for-lpuart.patch b/target/linux/layerscape/patches-5.4/819-uart-0010-tty-serial-lpuart-enable-wakeup-source-for-lpuart.patch index 71c75584b..69dc1b465 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0010-tty-serial-lpuart-enable-wakeup-source-for-lpuart.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0010-tty-serial-lpuart-enable-wakeup-source-for-lpuart.patch @@ -28,7 +28,7 @@ Signed-off-by: Fugang Duan #include #include #include -@@ -1707,10 +1708,23 @@ static void lpuart_rx_dma_startup(struct +@@ -1722,10 +1723,23 @@ static void lpuart_rx_dma_startup(struct } } @@ -53,7 +53,7 @@ Signed-off-by: Fugang Duan unsigned char temp; /* determine FIFO size and enable FIFO mode */ -@@ -1723,14 +1737,7 @@ static int lpuart_startup(struct uart_po +@@ -1738,14 +1752,7 @@ static int lpuart_startup(struct uart_po sport->rxfifo_size = UARTFIFO_DEPTH((temp >> UARTPFIFO_RXSIZE_OFF) & UARTPFIFO_FIFOSIZE_MASK); @@ -69,7 +69,7 @@ Signed-off-by: Fugang Duan return 0; } -@@ -1757,11 +1764,27 @@ static void lpuart32_configure(struct lp +@@ -1772,11 +1779,27 @@ static void lpuart32_configure(struct lp lpuart32_write(&sport->port, temp, UARTCTRL); } @@ -98,9 +98,9 @@ Signed-off-by: Fugang Duan unsigned long temp; int ret; -@@ -1782,17 +1805,8 @@ static int lpuart32_startup(struct uart_ - sport->rxfifo_size = UARTFIFO_DEPTH((temp >> UARTFIFO_RXSIZE_OFF) & - UARTFIFO_FIFOSIZE_MASK); +@@ -1808,17 +1831,8 @@ static int lpuart32_startup(struct uart_ + sport->port.fifosize = sport->txfifo_size; + } - spin_lock_irqsave(&sport->port.lock, flags); - @@ -117,7 +117,7 @@ Signed-off-by: Fugang Duan return 0; } -@@ -2850,108 +2864,205 @@ static int lpuart_runtime_resume(struct +@@ -2876,108 +2890,205 @@ static int lpuart_runtime_resume(struct return lpuart_enable_clks(sport); }; diff --git a/target/linux/layerscape/patches-5.4/819-uart-0011-serial-fsl_lpuart-enable-two-stop-bits.patch b/target/linux/layerscape/patches-5.4/819-uart-0011-serial-fsl_lpuart-enable-two-stop-bits.patch index 3f92a1491..2d4c14922 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0011-serial-fsl_lpuart-enable-two-stop-bits.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0011-serial-fsl_lpuart-enable-two-stop-bits.patch @@ -14,7 +14,7 @@ Signed-off-by: Fugang Duan --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -2109,11 +2109,12 @@ lpuart32_set_termios(struct uart_port *p +@@ -2135,11 +2135,12 @@ lpuart32_set_termios(struct uart_port *p { struct lpuart_port *sport = container_of(port, struct lpuart_port, port); unsigned long flags; @@ -28,7 +28,7 @@ Signed-off-by: Fugang Duan modem = lpuart32_read(&sport->port, UARTMODIR); /* * only support CS8 and CS7, and for CS7 must enable PE. -@@ -2150,7 +2151,9 @@ lpuart32_set_termios(struct uart_port *p +@@ -2176,7 +2177,9 @@ lpuart32_set_termios(struct uart_port *p } if (termios->c_cflag & CSTOPB) @@ -39,7 +39,7 @@ Signed-off-by: Fugang Duan /* parity must be enabled when CS7 to match 8-bits format */ if ((termios->c_cflag & CSIZE) == CS7) -@@ -2220,6 +2223,7 @@ lpuart32_set_termios(struct uart_port *p +@@ -2246,6 +2249,7 @@ lpuart32_set_termios(struct uart_port *p lpuart32_write(&sport->port, old_ctrl & ~(UARTCTRL_TE | UARTCTRL_RE), UARTCTRL); diff --git a/target/linux/layerscape/patches-5.4/819-uart-0012-tty-serial-lpuart-add-LS1028A-support.patch b/target/linux/layerscape/patches-5.4/819-uart-0012-tty-serial-lpuart-add-LS1028A-support.patch deleted file mode 100644 index a4cb65cfe..000000000 --- a/target/linux/layerscape/patches-5.4/819-uart-0012-tty-serial-lpuart-add-LS1028A-support.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 932dac0380bbf7276d4111c35674679bc9ad6384 Mon Sep 17 00:00:00 2001 -From: Vabhav Sharma -Date: Thu, 31 Oct 2019 19:20:47 +0530 -Subject: [PATCH] tty: serial: lpuart: add LS1028A support - -NXP LS1028A lpuart is the same IP as LS1021A, but it is -little endian for register accessing instead of big endian -on LS1021A. - -So add LS1028A matching data to distiguish the chips. - -Signed-off-by: Fugang Duan -Signed-off-by: Vabhav Sharma -Acked-by: Fugang Duan ---- - drivers/tty/serial/fsl_lpuart.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - ---- a/drivers/tty/serial/fsl_lpuart.c -+++ b/drivers/tty/serial/fsl_lpuart.c -@@ -3,6 +3,7 @@ - * Freescale lpuart serial port driver - * - * Copyright 2012-2014 Freescale Semiconductor, Inc. -+ * Copyright 2019 NXP - */ - - #if defined(CONFIG_SERIAL_FSL_LPUART_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) -@@ -260,6 +261,7 @@ static DEFINE_IDA(fsl_lpuart_ida); - enum lpuart_type { - VF610_LPUART, - LS1021A_LPUART, -+ LS1028A_LPUART, - IMX7ULP_LPUART, - IMX8QXP_LPUART, - }; -@@ -311,13 +313,20 @@ static const struct lpuart_soc_data vf_d - .rx_dma_cyclic = true, - }; - --static const struct lpuart_soc_data ls_data = { -+static const struct lpuart_soc_data ls1021a_data = { - .devtype = LS1021A_LPUART, - .iotype = UPIO_MEM32BE, - .rx_watermark = 0, - .rx_dma_cyclic = true, - }; - -+static const struct lpuart_soc_data ls1028a_data = { -+ .devtype = LS1028A_LPUART, -+ .iotype = UPIO_MEM32, -+ .rx_watermark = 0, -+ .rx_dma_cyclic = true, -+}; -+ - static struct lpuart_soc_data imx7ulp_data = { - .devtype = IMX7ULP_LPUART, - .iotype = UPIO_MEM32, -@@ -336,7 +345,8 @@ static struct lpuart_soc_data imx8qxp_da - - static const struct of_device_id lpuart_dt_ids[] = { - { .compatible = "fsl,vf610-lpuart", .data = &vf_data, }, -- { .compatible = "fsl,ls1021a-lpuart", .data = &ls_data, }, -+ { .compatible = "fsl,ls1021a-lpuart", .data = &ls1021a_data, }, -+ { .compatible = "fsl,ls1028a-lpuart", .data = &ls1028a_data, }, - { .compatible = "fsl,imx7ulp-lpuart", .data = &imx7ulp_data, }, - { .compatible = "fsl,imx8qxp-lpuart", .data = &imx8qxp_data, }, - { /* sentinel */ } diff --git a/target/linux/layerscape/patches-5.4/819-uart-0013-LF-484-tty-serial-lpuart-support-UPIO_MEM32-for-lpua.patch b/target/linux/layerscape/patches-5.4/819-uart-0013-LF-484-tty-serial-lpuart-support-UPIO_MEM32-for-lpua.patch index 125502ff9..4223d1e2f 100644 --- a/target/linux/layerscape/patches-5.4/819-uart-0013-LF-484-tty-serial-lpuart-support-UPIO_MEM32-for-lpua.patch +++ b/target/linux/layerscape/patches-5.4/819-uart-0013-LF-484-tty-serial-lpuart-support-UPIO_MEM32-for-lpua.patch @@ -24,7 +24,7 @@ Signed-off-by: Peng Fan --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c -@@ -2598,7 +2598,9 @@ static int __init lpuart32_early_console +@@ -2614,7 +2614,9 @@ static int __init lpuart32_early_console if (!device->port.membase) return -ENODEV; diff --git a/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch b/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch index 8a8486b36..95f8af1ee 100644 --- a/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch +++ b/target/linux/layerscape/patches-5.4/820-usb-0005-usb-dwc3-add-otg-properties-update.patch @@ -54,7 +54,7 @@ Signed-off-by: Peter Chen * All 3.1 IP version constants are greater than the 3.0 IP --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c -@@ -3525,6 +3525,10 @@ int dwc3_gadget_init(struct dwc3 *dwc) +@@ -3543,6 +3543,10 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc->gadget.sg_supported = true; dwc->gadget.name = "dwc3-gadget"; dwc->gadget.lpm_capable = true; diff --git a/target/linux/layerscape/patches-5.4/900-layerscape_fix_support_of_LS1012A-RDB.patch b/target/linux/layerscape/patches-5.4/900-layerscape_fix_support_of_LS1012A-RDB.patch new file mode 100644 index 000000000..bcad654e5 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/900-layerscape_fix_support_of_LS1012A-RDB.patch @@ -0,0 +1,107 @@ +From 650480191492845c8eb7e0c2e5b1e37cabc59eff Mon Sep 17 00:00:00 2001 +From: Pawel Dembicki +Date: Fri, 13 Nov 2020 07:17:39 +0100 +Subject: [PATCH 1/2] arm64: dts: fsl-ls1012a-rdb: add i2c devices + +LS1012A-RDB equipped in some i2c devices: + - 3x GPIO Expander: PCAL9555A (NXP) + - Gyro: FXAS21002 (NXP) + - Accelerometer: FXOS8700 (NXP) + - Current & Power Monitor: INA220 (TI) + +This patch add listed devices to dts. + +Signed-off-by: Pawel Dembicki +--- + .../boot/dts/freescale/fsl-ls1012a-rdb.dts | 66 +++++++++++++++++++ + 1 file changed, 66 insertions(+) + +--- a/arch/arm64/boot/dts/freescale/fsl-ls1012a-rdb.dts ++++ b/arch/arm64/boot/dts/freescale/fsl-ls1012a-rdb.dts +@@ -7,6 +7,7 @@ + */ + /dts-v1/; + ++#include + #include "fsl-ls1012a.dtsi" + + / { +@@ -16,6 +17,25 @@ + aliases { + ethernet0 = &pfe_mac0; + ethernet1 = &pfe_mac1; ++ serial0 = &duart0; ++ }; ++ ++ dummy3v3: dummy_reg { ++ compatible = "regulator-fixed"; ++ regulator-name = "dummy_regulator_3v3"; ++ ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ dummy1v8: dummy_reg { ++ compatible = "regulator-fixed"; ++ regulator-name = "dummy_regulator_1v8"; ++ ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; + }; + }; + +@@ -42,6 +62,52 @@ + + &i2c0 { + status = "okay"; ++ ++ accelerometer@1e { ++ compatible = "nxp,fxos8700"; ++ reg = <0x1e>; ++ interrupt-parent = <&gpio26>; ++ interrupts = <13 IRQ_TYPE_EDGE_RISING>; ++ interrupt-names = "INT1"; ++ }; ++ ++ gyroscope@20 { ++ compatible = "nxp,fxas21002c"; ++ reg = <0x20>; ++ vdd-supply = <&dummy3v3>; ++ vddio-supply = <&dummy1v8>; ++ }; ++ ++ gpio@24 { ++ compatible = "nxp,pcal9555a"; ++ reg = <0x24>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ }; ++ ++ gpio25: gpio@25 { ++ compatible = "nxp,pcal9555a"; ++ reg = <0x25>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ }; ++ ++ gpio26: gpio@26 { ++ compatible = "nxp,pcal9555a"; ++ reg = <0x26>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <13 IRQ_TYPE_EDGE_FALLING>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ }; ++ ++ current-sensor@40 { ++ compatible = "ti,ina220"; ++ reg = <0x40>; ++ shunt-resistor = <2000>; ++ }; + }; + + &sata { diff --git a/target/linux/layerscape/patches-5.4/901-fix_irq_type_of_pca953x.patch b/target/linux/layerscape/patches-5.4/901-fix_irq_type_of_pca953x.patch new file mode 100644 index 000000000..a00a24013 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/901-fix_irq_type_of_pca953x.patch @@ -0,0 +1,28 @@ +From 12de4b5e7cbcd193d5abb753ca511fe8f2236846 Mon Sep 17 00:00:00 2001 +From: Pawel Dembicki +Date: Fri, 13 Nov 2020 07:30:03 +0100 +Subject: [PATCH 1/1] gpio-pca953x: hack: Allow to use falling trigger + +Gpio-mpc8xxx driver of Layerscape gpio support only edge interrupts. +Gpio-pca953x allow only low state trigger. This hack fix the problem. + +Signed-off-by: Pawel Dembicki +--- + +--- a/drivers/gpio/gpio-pca953x.c ++++ b/drivers/gpio/gpio-pca953x.c +@@ -879,10 +879,12 @@ static int pca953x_irq_setup(struct pca9 + for (i = 0; i < NBANK(chip); i++) + chip->irq_stat[i] &= reg_direction[i]; + mutex_init(&chip->irq_lock); +- ++ /* gpio-mpc8xxx driver of Layerscape gpio support only edge interrupts. ++ * This hack fix the problem. ++ */ + ret = devm_request_threaded_irq(&client->dev, client->irq, + NULL, pca953x_irq_handler, +- IRQF_TRIGGER_LOW | IRQF_ONESHOT | ++ IRQF_TRIGGER_FALLING | IRQF_ONESHOT | + IRQF_SHARED, + dev_name(&client->dev), chip); + if (ret) { diff --git a/target/linux/layerscape/patches-5.4/902-layerscape_improve_support_of_LS1012A-FRDM.patch b/target/linux/layerscape/patches-5.4/902-layerscape_improve_support_of_LS1012A-FRDM.patch new file mode 100644 index 000000000..62edf43a3 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/902-layerscape_improve_support_of_LS1012A-FRDM.patch @@ -0,0 +1,58 @@ +From 12de4b5e7cbcd193d5abb753ca511fe8f2236846 Mon Sep 17 00:00:00 2001 +From: Pawel Dembicki +Date: Fri, 13 Nov 2020 07:30:03 +0100 +Subject: [PATCH 2/2] arm64: dts: fsl-ls1012a-frdm: add spi-uart device + +This patch adds spi-uart controller to LS1012A-FRDM board dts. +Device is equipped in SC16IS740 from NXP. + +Signed-off-by: Pawel Dembicki +--- + .../boot/dts/freescale/fsl-ls1012a-frdm.dts | 21 +++++++++++++++++++ + 1 file changed, 21 insertions(+) + +--- a/arch/arm64/boot/dts/freescale/fsl-ls1012a-frdm.dts ++++ b/arch/arm64/boot/dts/freescale/fsl-ls1012a-frdm.dts +@@ -7,6 +7,7 @@ + */ + /dts-v1/; + ++#include + #include "fsl-ls1012a.dtsi" + + / { +@@ -16,6 +17,7 @@ + aliases { + ethernet0 = &pfe_mac0; + ethernet1 = &pfe_mac1; ++ serial0 = &duart0; + }; + + sys_mclk: clock-mclk { +@@ -61,6 +63,26 @@ + }; + }; + }; ++ ++&dspi { ++ status = "okay"; ++ bus-num = <0>; ++ ++ serial@0 { ++ reg = <0>; ++ compatible = "nxp,sc16is740"; ++ spi-max-frequency = <4000000>; ++ clocks = <&sc16is7xx_clk>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <13 IRQ_TYPE_EDGE_FALLING>; ++ ++ sc16is7xx_clk: sc16is7xx_clk { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <24000000>; ++ }; ++ }; ++}; + + &duart0 { + status = "okay"; diff --git a/target/linux/mediatek/patches-5.4/0003-switch-add-mt7531.patch b/target/linux/mediatek/patches-5.4/0003-switch-add-mt7531.patch index 2512ed314..6fae99c1f 100644 --- a/target/linux/mediatek/patches-5.4/0003-switch-add-mt7531.patch +++ b/target/linux/mediatek/patches-5.4/0003-switch-add-mt7531.patch @@ -1,6 +1,6 @@ --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig -@@ -333,6 +333,8 @@ config RTL8367B_PHY +@@ -329,6 +329,8 @@ config RTL8367B_PHY endif # RTL8366_SMI @@ -11,7 +11,7 @@ config SFP --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile -@@ -110,3 +110,5 @@ obj-$(CONFIG_STE10XP) += ste10Xp.o +@@ -109,3 +109,5 @@ obj-$(CONFIG_STE10XP) += ste10Xp.o obj-$(CONFIG_TERANETICS_PHY) += teranetics.o obj-$(CONFIG_VITESSE_PHY) += vitesse.o obj-$(CONFIG_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o diff --git a/target/linux/mediatek/patches-5.4/0005-dts-mt7622-add-gsw.patch b/target/linux/mediatek/patches-5.4/0005-dts-mt7622-add-gsw.patch index 906b66153..a51b1293b 100644 --- a/target/linux/mediatek/patches-5.4/0005-dts-mt7622-add-gsw.patch +++ b/target/linux/mediatek/patches-5.4/0005-dts-mt7622-add-gsw.patch @@ -124,7 +124,7 @@ }; reg_1p8v: regulator-1p8v { -@@ -101,23 +115,82 @@ +@@ -101,23 +113,82 @@ }; ð { @@ -214,7 +214,7 @@ }; }; }; -@@ -185,15 +258,28 @@ +@@ -185,15 +256,28 @@ &pcie { pinctrl-names = "default"; @@ -244,7 +244,7 @@ /* eMMC is shared pin with parallel NAND */ emmc_pins_default: emmc-pins-default { mux { -@@ -460,11 +546,11 @@ +@@ -460,11 +544,11 @@ }; &sata { diff --git a/target/linux/mediatek/patches-5.4/0308-dts-mt7622-add-snand-support.patch b/target/linux/mediatek/patches-5.4/0308-dts-mt7622-add-snand-support.patch index 378ccb833..b287780d6 100644 --- a/target/linux/mediatek/patches-5.4/0308-dts-mt7622-add-snand-support.patch +++ b/target/linux/mediatek/patches-5.4/0308-dts-mt7622-add-snand-support.patch @@ -22,7 +22,7 @@ "mediatek,mt8173-nor"; --- a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts +++ b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts -@@ -101,7 +101,7 @@ +@@ -99,7 +99,7 @@ }; &bch { @@ -31,7 +31,7 @@ }; &btif { -@@ -553,6 +553,62 @@ +@@ -551,6 +551,62 @@ status = "disable"; }; diff --git a/target/linux/mediatek/patches-5.4/0310-dts-add-wmac-support-for-mt7622-rfb1.patch b/target/linux/mediatek/patches-5.4/0310-dts-add-wmac-support-for-mt7622-rfb1.patch index bf16062cb..92296060c 100644 --- a/target/linux/mediatek/patches-5.4/0310-dts-add-wmac-support-for-mt7622-rfb1.patch +++ b/target/linux/mediatek/patches-5.4/0310-dts-add-wmac-support-for-mt7622-rfb1.patch @@ -20,7 +20,7 @@ "syscon"; --- a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts +++ b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts -@@ -591,7 +591,7 @@ +@@ -589,7 +589,7 @@ reg = <0x140000 0x0080000>; }; @@ -29,7 +29,7 @@ label = "Factory"; reg = <0x1c0000 0x0040000>; }; -@@ -648,3 +648,8 @@ +@@ -646,3 +646,8 @@ pinctrl-0 = <&watchdog_pins>; status = "okay"; }; diff --git a/target/linux/mediatek/patches-5.4/0990-gsw-rtl8367s-mt7622-support.patch b/target/linux/mediatek/patches-5.4/0990-gsw-rtl8367s-mt7622-support.patch index e4cd77bdc..a3d49e903 100644 --- a/target/linux/mediatek/patches-5.4/0990-gsw-rtl8367s-mt7622-support.patch +++ b/target/linux/mediatek/patches-5.4/0990-gsw-rtl8367s-mt7622-support.patch @@ -15,7 +15,7 @@ depends on HAS_IOMEM --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile -@@ -111,4 +111,5 @@ obj-$(CONFIG_TERANETICS_PHY) += teraneti +@@ -110,4 +110,5 @@ obj-$(CONFIG_TERANETICS_PHY) += teraneti obj-$(CONFIG_VITESSE_PHY) += vitesse.o obj-$(CONFIG_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o obj-$(CONFIG_MT753X_GSW) += mtk/mt753x/ diff --git a/target/linux/mediatek/patches-5.4/0993-arm64-dts-mediatek-Split-PCIe-node-for-MT2712-MT7622.patch b/target/linux/mediatek/patches-5.4/0993-arm64-dts-mediatek-Split-PCIe-node-for-MT2712-MT7622.patch index 3283746e3..cea83710b 100644 --- a/target/linux/mediatek/patches-5.4/0993-arm64-dts-mediatek-Split-PCIe-node-for-MT2712-MT7622.patch +++ b/target/linux/mediatek/patches-5.4/0993-arm64-dts-mediatek-Split-PCIe-node-for-MT2712-MT7622.patch @@ -389,7 +389,7 @@ Signed-off-by: chuanjia.liu <0 0 0 2 &pcie_intc1 1>, --- a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts +++ b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts -@@ -256,18 +256,16 @@ +@@ -254,18 +254,16 @@ }; }; diff --git a/target/linux/mediatek/patches-5.4/1003-dts-mt7622-rfb-change-to-ax-mtd-layout.patch b/target/linux/mediatek/patches-5.4/1003-dts-mt7622-rfb-change-to-ax-mtd-layout.patch index 817948986..74a294f09 100644 --- a/target/linux/mediatek/patches-5.4/1003-dts-mt7622-rfb-change-to-ax-mtd-layout.patch +++ b/target/linux/mediatek/patches-5.4/1003-dts-mt7622-rfb-change-to-ax-mtd-layout.patch @@ -1,6 +1,6 @@ --- a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts +++ b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts -@@ -591,17 +591,17 @@ +@@ -589,17 +589,17 @@ factory: partition@1c0000 { label = "Factory"; diff --git a/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network b/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network index 0a2a2b144..c945251e4 100755 --- a/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network +++ b/target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network @@ -18,6 +18,9 @@ globalscale,espressobin-v7|\ globalscale,espressobin-v7-emmc) ucidef_set_interfaces_lan_wan "lan0 lan1" "wan" ;; +globalscale,espressobin-ultra) + ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3" "wan" + ;; marvell,armada-3720-db|\ methode,udpu) ucidef_set_interfaces_lan_wan "eth1" "eth0" diff --git a/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh index cdf593327..1153fd8f3 100755 --- a/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh +++ b/target/linux/mvebu/cortexa53/base-files/lib/upgrade/platform.sh @@ -11,6 +11,7 @@ platform_check_image() { case "$(board_name)" in globalscale,espressobin|\ globalscale,espressobin-emmc|\ + globalscale,espressobin-ultra|\ globalscale,espressobin-v7|\ globalscale,espressobin-v7-emmc) platform_check_image_sdcard "$1" @@ -25,6 +26,7 @@ platform_do_upgrade() { case "$(board_name)" in globalscale,espressobin|\ globalscale,espressobin-emmc|\ + globalscale,espressobin-ultra|\ globalscale,espressobin-v7|\ globalscale,espressobin-v7-emmc) platform_do_upgrade_sdcard "$1" @@ -41,6 +43,7 @@ platform_copy_config() { case "$(board_name)" in globalscale,espressobin|\ globalscale,espressobin-emmc|\ + globalscale,espressobin-ultra|\ globalscale,espressobin-v7|\ globalscale,espressobin-v7-emmc) platform_copy_config_sdcard diff --git a/target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate b/target/linux/mvebu/cortexa9/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate similarity index 100% rename from target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate rename to target/linux/mvebu/cortexa9/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate diff --git a/target/linux/mvebu/base-files/sbin/fan_ctrl.sh b/target/linux/mvebu/cortexa9/base-files/sbin/fan_ctrl.sh similarity index 100% rename from target/linux/mvebu/base-files/sbin/fan_ctrl.sh rename to target/linux/mvebu/cortexa9/base-files/sbin/fan_ctrl.sh diff --git a/target/linux/mvebu/files/arch/arm/boot/dts/armada-370-buffalo-ls421de.dts b/target/linux/mvebu/files/arch/arm/boot/dts/armada-370-buffalo-ls421de.dts index 458988619..e80466579 100644 --- a/target/linux/mvebu/files/arch/arm/boot/dts/armada-370-buffalo-ls421de.dts +++ b/target/linux/mvebu/files/arch/arm/boot/dts/armada-370-buffalo-ls421de.dts @@ -152,15 +152,13 @@ hdd1_red { label = "ls421de:red:hdd1"; gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; - default-state = "off"; - linux,default-trigger = "disk-activity"; + linux,default-trigger = "ata1"; }; hdd2_red { label = "ls421de:red:hdd2"; gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>; - default-state = "off"; - linux,default-trigger = "disk-activity"; + linux,default-trigger = "ata2"; }; }; diff --git a/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts b/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts new file mode 100644 index 000000000..669b67e5a --- /dev/null +++ b/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts @@ -0,0 +1,241 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Device Tree file for ESPRESSObin-Ultra + * Copyright (C) 2019 Globalscale technologies, Inc. + * + * Jason Hung + */ + +/dts-v1/; + +#include +#include "armada-372x.dtsi" + +/ { + model = "Globalscale Marvell ESPRESSOBin Ultra Board"; + compatible = "globalscale,espressobin-ultra", "marvell,armada3720", + "marvell,armada3710"; + + aliases { + /* for dsa slave device */ + ethernet1 = &switch0port1; + ethernet2 = &switch0port2; + ethernet3 = &switch0port3; + ethernet4 = &switch0port4; + ethernet5 = &switch0port5; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x00000000 0x00000000 0x20000000>; + }; + + reg_usb3_vbus: usb3-vbus { + compatible = "regulator-fixed"; + regulator-name = "usb3-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&gpionb 19 GPIO_ACTIVE_HIGH>; + }; + + usb3_phy: usb3-phy { + compatible = "usb-nop-xceiv"; + vcc-supply = <®_usb3_vbus>; + }; + + leds { + pinctrl-names = "default"; + compatible = "gpio-leds"; + /* No assigned functions to the LEDs by default */ + led1 { + label = "ebin-ultra:blue:led1"; + gpios = <&gpionb 11 GPIO_ACTIVE_LOW>; + }; + led2 { + label = "ebin-ultra:green:led2"; + gpios = <&gpionb 12 GPIO_ACTIVE_LOW>; + }; + led3 { + label = "ebin-ultra:red:led3"; + gpios = <&gpionb 13 GPIO_ACTIVE_LOW>; + }; + led4 { + label = "ebin-ultra:yellow:led4"; + gpios = <&gpionb 14 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&pcie0 { + status = "okay"; +}; + +&sata { + status = "okay"; +}; + +&sdhci0 { + status = "okay"; + non-removable; + bus-width = <8>; + mmc-ddr-1_8v; + mmc-hs400-1_8v; + marvell,pad-type = "fixed-1-8v"; +}; + +&spi0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&spi_quad_pins>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <108000000>; + spi-rx-bus-width = <4>; + spi-tx-bus-width = <4>; + m25p,fast-read; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "firmware"; + reg = <0x0 0x3e0000>; + }; + partition@3e0000 { + label = "hw-info"; + reg = <0x3e0000 0x10000>; + read-only; + }; + partition@3f0000 { + label = "u-boot-env"; + reg = <0x3f0000 0x10000>; + }; + }; + }; +}; + +&uart0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&uart1_pins>; +}; + +&i2c0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins>; + + clock-frequency = <100000>; + + rtc@51 { + compatible = "nxp,pcf8563"; + reg = <0x51>; + }; +}; + +&usb3 { + status = "okay"; + usb-phy = <&usb3_phy>; +}; + +&usb2 { + status = "okay"; +}; + +ð0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&rgmii_pins>; + phy-mode = "rgmii-id"; + + fixed-link { + speed = <1000>; + full-duplex; + }; +}; + +&mdio { + status = "okay"; + + extphy: ethernet-phy@0 { + reg = <1>; + }; + + switch0: switch0@1 { + compatible = "marvell,mv88e6085"; + #address-cells = <1>; + #size-cells = <0>; + reg = <3>; + + dsa,member = <0 0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + switch0port0: port@0 { + reg = <0>; + label = "cpu"; + ethernet = <ð0>; + }; + + switch0port1: port@1 { + reg = <1>; + label = "lan0"; + phy-handle = <&switch0phy1>; + }; + + switch0port2: port@2 { + reg = <2>; + label = "lan1"; + phy-handle = <&switch0phy2>; + }; + + switch0port3: port@3 { + reg = <3>; + label = "lan2"; + phy-handle = <&switch0phy3>; + }; + + switch0port4: port@4 { + reg = <4>; + label = "lan3"; + phy-handle = <&switch0phy4>; + }; + + switch0port5: port@5 { + reg = <5>; + label = "wan"; + phy-handle = <&extphy>; + phy-mode = "sgmii"; + }; + }; + + mdio { + #address-cells = <1>; + #size-cells = <0>; + + switch0phy1: switch0phy1@11 { + reg = <0x11>; + }; + switch0phy2: switch0phy2@12 { + reg = <0x12>; + }; + switch0phy3: switch0phy3@13 { + reg = <0x13>; + }; + switch0phy4: switch0phy4@14 { + reg = <0x14>; + }; + }; + }; +}; diff --git a/target/linux/mvebu/image/cortexa53.mk b/target/linux/mvebu/image/cortexa53.mk index b65f25472..6a3a56865 100644 --- a/target/linux/mvebu/image/cortexa53.mk +++ b/target/linux/mvebu/image/cortexa53.mk @@ -32,6 +32,17 @@ define Device/globalscale_espressobin-emmc endef TARGET_DEVICES += globalscale_espressobin-emmc +define Device/globalscale_espressobin-ultra + $(call Device/Default-arm64) + DEVICE_VENDOR := Marvell + DEVICE_MODEL := ESPRESSObin + DEVICE_VARIANT := Ultra + DEVICE_PACKAGES += kmod-i2c-pxa kmod-rtc-pcf8563 + SOC := armada-3720 + BOOT_SCRIPT := espressobin +endef +TARGET_DEVICES += globalscale_espressobin-ultra + define Device/globalscale_espressobin-v7 $(call Device/Default-arm64) DEVICE_VENDOR := Marvell diff --git a/target/linux/mvebu/patches-5.4/402-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch b/target/linux/mvebu/patches-5.4/001-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/402-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch rename to target/linux/mvebu/patches-5.4/001-PCI-aardvark-Wait-for-endpoint-to-be-ready-before-tr.patch diff --git a/target/linux/mvebu/patches-5.4/403-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch b/target/linux/mvebu/patches-5.4/002-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/403-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch rename to target/linux/mvebu/patches-5.4/002-PCI-aardvark-Don-t-rely-on-jiffies-while-holding-spi.patch diff --git a/target/linux/mvebu/patches-5.4/010-net-mvneta-introduce-mvneta_update_stats-routine.patch b/target/linux/mvebu/patches-5.4/003-net-mvneta-introduce-mvneta_update_stats-routine.patch similarity index 97% rename from target/linux/mvebu/patches-5.4/010-net-mvneta-introduce-mvneta_update_stats-routine.patch rename to target/linux/mvebu/patches-5.4/003-net-mvneta-introduce-mvneta_update_stats-routine.patch index 2c8ed30e4..f6ce6163c 100644 --- a/target/linux/mvebu/patches-5.4/010-net-mvneta-introduce-mvneta_update_stats-routine.patch +++ b/target/linux/mvebu/patches-5.4/003-net-mvneta-introduce-mvneta_update_stats-routine.patch @@ -1,4 +1,4 @@ -From 06815202344ee6c256b63e68c16cdc3b0480f4ee Mon Sep 17 00:00:00 2001 +From ff519e2acd463bff6c5bb4e8d7ed350c9bae885b Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:21 +0200 Subject: [PATCH 1/7] net: mvneta: introduce mvneta_update_stats routine diff --git a/target/linux/mvebu/patches-5.4/004-add_sata_disk_activity_trigger.patch b/target/linux/mvebu/patches-5.4/004-add_sata_disk_activity_trigger.patch deleted file mode 100644 index 2cb8f2549..000000000 --- a/target/linux/mvebu/patches-5.4/004-add_sata_disk_activity_trigger.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 172230195068703b78ad5733a09492f5d6814c09 Mon Sep 17 00:00:00 2001 -From: Ansuel Smith -Date: Tue, 28 Feb 2017 14:15:50 +0100 -Subject: [PATCH] ARM: dts: armada: Add default trigger for sata led - -In others board we have the sata led set to function -with the sata led trigger by default. -This patch makes the same for these board that have sata -led but get disabled by not associating it to any trigger. - -Signed-off-by: Ansuel Smith -Acked-by: Jason Cooper -Signed-off-by: Gregory CLEMENT ---- - arch/arm/boot/dts/armada-385-linksys-caiman.dts | 1 + - arch/arm/boot/dts/armada-385-linksys-cobra.dts | 1 + - arch/arm/boot/dts/armada-xp-linksys-mamba.dts | 1 + - 3 files changed, 3 insertions(+) - ---- a/arch/arm/boot/dts/armada-385-linksys-caiman.dts -+++ b/arch/arm/boot/dts/armada-385-linksys-caiman.dts -@@ -68,6 +68,7 @@ - - sata { - label = "caiman:white:sata"; -+ linux,default-trigger = "disk-activity"; - }; - }; - ---- a/arch/arm/boot/dts/armada-385-linksys-cobra.dts -+++ b/arch/arm/boot/dts/armada-385-linksys-cobra.dts -@@ -68,6 +68,7 @@ - - sata { - label = "cobra:white:sata"; -+ linux,default-trigger = "disk-activity"; - }; - }; - diff --git a/target/linux/mvebu/patches-5.4/011-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch b/target/linux/mvebu/patches-5.4/004-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch similarity index 98% rename from target/linux/mvebu/patches-5.4/011-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch rename to target/linux/mvebu/patches-5.4/004-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch index dbed6df87..fbcae20f7 100644 --- a/target/linux/mvebu/patches-5.4/011-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch +++ b/target/linux/mvebu/patches-5.4/004-net-mvneta-introduce-page-pool-API-for-sw-buffer-man.patch @@ -1,4 +1,4 @@ -From 160f006a6fe904177cbca867c48dfb6d27262dd5 Mon Sep 17 00:00:00 2001 +From 568a3fa24a95476d40afe3f8616bafb543bc4182 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:22 +0200 Subject: [PATCH 2/7] net: mvneta: introduce page pool API for sw buffer diff --git a/target/linux/mvebu/patches-5.4/012-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch b/target/linux/mvebu/patches-5.4/005-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch similarity index 99% rename from target/linux/mvebu/patches-5.4/012-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch rename to target/linux/mvebu/patches-5.4/005-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch index e3269a592..9038ca8ca 100644 --- a/target/linux/mvebu/patches-5.4/012-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch +++ b/target/linux/mvebu/patches-5.4/005-net-mvneta-rely-on-build_skb-in-mvneta_rx_swbm-poll-.patch @@ -1,4 +1,4 @@ -From 00cf2a1d7d58631ba137b9acabe1de1d542625a8 Mon Sep 17 00:00:00 2001 +From 8dc9a0888f4c8e27b25e48ff1b4bc2b3a845cc2d Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:23 +0200 Subject: [PATCH 3/7] net: mvneta: rely on build_skb in mvneta_rx_swbm poll diff --git a/target/linux/mvebu/patches-5.4/013-net-mvneta-add-basic-XDP-support.patch b/target/linux/mvebu/patches-5.4/006-net-mvneta-add-basic-XDP-support.patch similarity index 99% rename from target/linux/mvebu/patches-5.4/013-net-mvneta-add-basic-XDP-support.patch rename to target/linux/mvebu/patches-5.4/006-net-mvneta-add-basic-XDP-support.patch index 62c00ddeb..163632df5 100644 --- a/target/linux/mvebu/patches-5.4/013-net-mvneta-add-basic-XDP-support.patch +++ b/target/linux/mvebu/patches-5.4/006-net-mvneta-add-basic-XDP-support.patch @@ -1,4 +1,4 @@ -From f21366d964bd41a2b823beed36a7c3e7a728857b Mon Sep 17 00:00:00 2001 +From 0db51da7a8e99f0803ec3a8e25c1a66234a219cb Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:24 +0200 Subject: [PATCH 4/7] net: mvneta: add basic XDP support diff --git a/target/linux/mvebu/patches-5.4/014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch b/target/linux/mvebu/patches-5.4/007-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch similarity index 95% rename from target/linux/mvebu/patches-5.4/014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch rename to target/linux/mvebu/patches-5.4/007-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch index ecda48287..e075796e4 100644 --- a/target/linux/mvebu/patches-5.4/014-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch +++ b/target/linux/mvebu/patches-5.4/007-net-mvneta-move-header-prefetch-in-mvneta_swbm_rx_fr.patch @@ -1,4 +1,4 @@ -From 8abaeebfa7ef9a5600f4f596d2e94aa253f47553 Mon Sep 17 00:00:00 2001 +From fa383f6b77a2ed788266fa8fbfb659aa284d2f58 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:25 +0200 Subject: [PATCH 5/7] net: mvneta: move header prefetch in mvneta_swbm_rx_frame diff --git a/target/linux/mvebu/patches-5.4/015-net-mvneta-make-tx-buffer-array-agnostic.patch b/target/linux/mvebu/patches-5.4/008-net-mvneta-make-tx-buffer-array-agnostic.patch similarity index 98% rename from target/linux/mvebu/patches-5.4/015-net-mvneta-make-tx-buffer-array-agnostic.patch rename to target/linux/mvebu/patches-5.4/008-net-mvneta-make-tx-buffer-array-agnostic.patch index 1146c1f2b..e79aa816b 100644 --- a/target/linux/mvebu/patches-5.4/015-net-mvneta-make-tx-buffer-array-agnostic.patch +++ b/target/linux/mvebu/patches-5.4/008-net-mvneta-make-tx-buffer-array-agnostic.patch @@ -1,4 +1,4 @@ -From f7f705a63cd4bd1e3463db7662011717c5149e8a Mon Sep 17 00:00:00 2001 +From 9e58c8b410650b5a6eb5b8fad8474bd8425a4023 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:26 +0200 Subject: [PATCH 6/7] net: mvneta: make tx buffer array agnostic diff --git a/target/linux/mvebu/patches-5.4/016-net-mvneta-add-XDP_TX-support.patch b/target/linux/mvebu/patches-5.4/009-net-mvneta-add-XDP_TX-support.patch similarity index 98% rename from target/linux/mvebu/patches-5.4/016-net-mvneta-add-XDP_TX-support.patch rename to target/linux/mvebu/patches-5.4/009-net-mvneta-add-XDP_TX-support.patch index 012bdee8b..c971030a1 100644 --- a/target/linux/mvebu/patches-5.4/016-net-mvneta-add-XDP_TX-support.patch +++ b/target/linux/mvebu/patches-5.4/009-net-mvneta-add-XDP_TX-support.patch @@ -1,4 +1,4 @@ -From 2ca7bbf394e6d98741f19566b82b3d5a56e9cc2c Mon Sep 17 00:00:00 2001 +From b0a43db9087a21d96e1a0b716b8d9963064b2d58 Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Sat, 19 Oct 2019 10:13:27 +0200 Subject: [PATCH 7/7] net: mvneta: add XDP_TX support diff --git a/target/linux/mvebu/patches-5.4/020-net-mvneta-fix-build-skb-for-bm-capable-devices.patch b/target/linux/mvebu/patches-5.4/010-net-mvneta-fix-build-skb-for-bm-capable-devices.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/020-net-mvneta-fix-build-skb-for-bm-capable-devices.patch rename to target/linux/mvebu/patches-5.4/010-net-mvneta-fix-build-skb-for-bm-capable-devices.patch diff --git a/target/linux/mvebu/patches-5.4/545-arm64-dts-uDPU-remove-i2c-fast-mode.patch b/target/linux/mvebu/patches-5.4/011-arm64-dts-uDPU-remove-i2c-fast-mode.patch similarity index 76% rename from target/linux/mvebu/patches-5.4/545-arm64-dts-uDPU-remove-i2c-fast-mode.patch rename to target/linux/mvebu/patches-5.4/011-arm64-dts-uDPU-remove-i2c-fast-mode.patch index b984eb4ba..2922d49f4 100644 --- a/target/linux/mvebu/patches-5.4/545-arm64-dts-uDPU-remove-i2c-fast-mode.patch +++ b/target/linux/mvebu/patches-5.4/011-arm64-dts-uDPU-remove-i2c-fast-mode.patch @@ -1,12 +1,13 @@ -From 662eb8fc87f982e63ccb9a9df25c7aeabf9fe341 Mon Sep 17 00:00:00 2001 +From fe3ec631a77ded87817f449691710a436a80caa7 Mon Sep 17 00:00:00 2001 From: Russell King -Date: Thu, 14 Nov 2019 00:23:35 +0000 -Subject: [PATCH 658/660] arm64: dts: uDPU: remove i2c-fast-mode +Date: Sat, 16 Nov 2019 11:07:01 +0000 +Subject: [PATCH] arm64: dts: uDPU: remove i2c-fast-mode The I2C bus violates the timing specifications when run in fast mode on the uDPU, so switch to 100kHz mode. Signed-off-by: Russell King +Signed-off-by: Gregory CLEMENT --- arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/linux/mvebu/patches-5.4/546-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch b/target/linux/mvebu/patches-5.4/012-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch similarity index 81% rename from target/linux/mvebu/patches-5.4/546-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch rename to target/linux/mvebu/patches-5.4/012-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch index d025f36a5..1884def2c 100644 --- a/target/linux/mvebu/patches-5.4/546-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch +++ b/target/linux/mvebu/patches-5.4/012-arm64-dts-uDPU-SFP-cages-support-3W-modules.patch @@ -1,7 +1,7 @@ -From 1cb114a20854e34324a2cb308f23054ff8227ffa Mon Sep 17 00:00:00 2001 +From cd592187f9de3c6305d6c1c66f7fac084cb5b846 Mon Sep 17 00:00:00 2001 From: Russell King -Date: Tue, 19 Nov 2019 22:48:50 +0000 -Subject: [PATCH 659/660] arm64: dts: uDPU: SFP cages support 3W modules +Date: Tue, 19 Nov 2019 22:53:04 +0000 +Subject: [PATCH] arm64: dts: uDPU: SFP cages support 3W modules The SFP cages are designed to support up to 3W modules, such as G.hn, G.fast and MoCA modules. Although there is no way for such modules to @@ -9,6 +9,7 @@ declare to software that they consume 3W, we document in DT that this is the designed power level for these cages. Signed-off-by: Russell King +Signed-off-by: Gregory CLEMENT --- arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/linux/mvebu/patches-5.4/021-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch b/target/linux/mvebu/patches-5.4/013-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/021-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch rename to target/linux/mvebu/patches-5.4/013-net-mvneta-rely-on-page_pool_recycle_direct-in-mvnet.patch diff --git a/target/linux/mvebu/patches-5.4/022-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch b/target/linux/mvebu/patches-5.4/014-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/022-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch rename to target/linux/mvebu/patches-5.4/014-mvneta-driver-disallow-XDP-program-on-hardware-buffe.patch diff --git a/target/linux/mvebu/patches-5.4/023-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch b/target/linux/mvebu/patches-5.4/015-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/023-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch rename to target/linux/mvebu/patches-5.4/015-net-mvneta-fix-XDP-support-if-sw-bm-is-used-as-fallb.patch diff --git a/target/linux/mvebu/patches-5.4/404-PCI-aardvark-Train-link-immediately-after-enabling-t.patch b/target/linux/mvebu/patches-5.4/016-PCI-aardvark-Train-link-immediately-after-enabling-t.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/404-PCI-aardvark-Train-link-immediately-after-enabling-t.patch rename to target/linux/mvebu/patches-5.4/016-PCI-aardvark-Train-link-immediately-after-enabling-t.patch diff --git a/target/linux/mvebu/patches-5.4/405-PCI-aardvark-Improve-link-training.patch b/target/linux/mvebu/patches-5.4/017-PCI-aardvark-Improve-link-training.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/405-PCI-aardvark-Improve-link-training.patch rename to target/linux/mvebu/patches-5.4/017-PCI-aardvark-Improve-link-training.patch diff --git a/target/linux/mvebu/patches-5.4/406-PCI-aardvark-Issue-PERST-via-GPIO.patch b/target/linux/mvebu/patches-5.4/018-PCI-aardvark-Issue-PERST-via-GPIO.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/406-PCI-aardvark-Issue-PERST-via-GPIO.patch rename to target/linux/mvebu/patches-5.4/018-PCI-aardvark-Issue-PERST-via-GPIO.patch diff --git a/target/linux/mvebu/patches-5.4/407-PCI-aardvark-Add-PHY-support.patch b/target/linux/mvebu/patches-5.4/019-PCI-aardvark-Add-PHY-support.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/407-PCI-aardvark-Add-PHY-support.patch rename to target/linux/mvebu/patches-5.4/019-PCI-aardvark-Add-PHY-support.patch diff --git a/target/linux/mvebu/patches-5.4/552-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch b/target/linux/mvebu/patches-5.4/020-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch similarity index 99% rename from target/linux/mvebu/patches-5.4/552-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch rename to target/linux/mvebu/patches-5.4/020-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch index 9eeddaeba..87247b63a 100644 --- a/target/linux/mvebu/patches-5.4/552-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch +++ b/target/linux/mvebu/patches-5.4/020-arm64-dts-marvell-armada-37xx-Set-pcie_reset_pin-to-.patch @@ -82,7 +82,7 @@ Signed-off-by: Gregory CLEMENT pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>; --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi -@@ -318,7 +318,7 @@ +@@ -317,7 +317,7 @@ pcie_reset_pins: pcie-reset-pins { groups = "pcie1"; diff --git a/target/linux/mvebu/patches-5.4/553-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch b/target/linux/mvebu/patches-5.4/021-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch similarity index 99% rename from target/linux/mvebu/patches-5.4/553-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch rename to target/linux/mvebu/patches-5.4/021-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch index 0c7830cb4..e92393ff6 100644 --- a/target/linux/mvebu/patches-5.4/553-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch +++ b/target/linux/mvebu/patches-5.4/021-arm64-dts-marvell-armada-37xx-Move-PCIe-comphy-handl.patch @@ -47,7 +47,7 @@ Signed-off-by: Gregory CLEMENT status = "disabled"; --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi -@@ -494,6 +494,7 @@ +@@ -493,6 +493,7 @@ <0 0 0 2 &pcie_intc 1>, <0 0 0 3 &pcie_intc 2>, <0 0 0 4 &pcie_intc 3>; diff --git a/target/linux/mvebu/patches-5.4/554-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch b/target/linux/mvebu/patches-5.4/022-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch similarity index 98% rename from target/linux/mvebu/patches-5.4/554-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch rename to target/linux/mvebu/patches-5.4/022-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch index 04002480c..ad918bef8 100644 --- a/target/linux/mvebu/patches-5.4/554-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch +++ b/target/linux/mvebu/patches-5.4/022-arm64-dts-marvell-armada-37xx-Move-PCIe-max-link-spe.patch @@ -34,7 +34,7 @@ Signed-off-by: Gregory CLEMENT /* enabled by U-Boot if PCIe module is present */ --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi -@@ -494,6 +494,7 @@ +@@ -493,6 +493,7 @@ <0 0 0 2 &pcie_intc 1>, <0 0 0 3 &pcie_intc 2>, <0 0 0 4 &pcie_intc 3>; diff --git a/target/linux/mvebu/patches-5.4/551-v5.8-arm64-dts-add-uDPU-i2c-bus-recovery.patch b/target/linux/mvebu/patches-5.4/023-arm64-dts-add-uDPU-i2c-bus-recovery.patch similarity index 72% rename from target/linux/mvebu/patches-5.4/551-v5.8-arm64-dts-add-uDPU-i2c-bus-recovery.patch rename to target/linux/mvebu/patches-5.4/023-arm64-dts-add-uDPU-i2c-bus-recovery.patch index 53916a59e..818fce85a 100644 --- a/target/linux/mvebu/patches-5.4/551-v5.8-arm64-dts-add-uDPU-i2c-bus-recovery.patch +++ b/target/linux/mvebu/patches-5.4/023-arm64-dts-add-uDPU-i2c-bus-recovery.patch @@ -1,13 +1,11 @@ +From 11b2af36cc874027ce701c5784cb957c99c7de3d Mon Sep 17 00:00:00 2001 From: Russell King -Bcc: linux@mail.armlinux.org.uk -Cc: Vladimir Vid ,Jason Cooper ,Andrew Lunn ,Gregory Clement ,Sebastian Hesselbarth ,Rob Herring ,Mark Rutland ,linux-arm-kernel@lists.infradead.org,devicetree@vger.kernel.org +Date: Wed, 6 May 2020 10:40:37 +0100 Subject: [PATCH] arm64: dts: add uDPU i2c bus recovery -MIME-Version: 1.0 -Content-Disposition: inline -Content-Transfer-Encoding: 8bit -Content-Type: text/plain; charset="utf-8" Signed-off-by: Russell King +Reviewed-by: Andrew Lunn +Signed-off-by: Gregory CLEMENT --- .../boot/dts/marvell/armada-3720-uDPU.dts | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/target/linux/mvebu/patches-5.4/408-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch b/target/linux/mvebu/patches-5.4/024-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/408-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch rename to target/linux/mvebu/patches-5.4/024-PCI-aardvark-Don-t-touch-PCIe-registers-if-no-card-c.patch diff --git a/target/linux/mvebu/patches-5.4/030-linkstation-poweroff.patch b/target/linux/mvebu/patches-5.4/025-power-reset-add-driver-for-LinkStation-power-off.patch similarity index 79% rename from target/linux/mvebu/patches-5.4/030-linkstation-poweroff.patch rename to target/linux/mvebu/patches-5.4/025-power-reset-add-driver-for-LinkStation-power-off.patch index 7b7e8cd03..64ea26559 100644 --- a/target/linux/mvebu/patches-5.4/030-linkstation-poweroff.patch +++ b/target/linux/mvebu/patches-5.4/025-power-reset-add-driver-for-LinkStation-power-off.patch @@ -1,3 +1,33 @@ +From a7f79f99541eff4e6bcae0014eb08d3019337565 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Cabanelas?= +Date: Wed, 15 Jul 2020 15:35:14 +0200 +Subject: [PATCH] power: reset: add driver for LinkStation power off +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Some Buffalo LinkStations perform the power off operation, at restart +time, depending on the state of an output pin (LED2/INTn) at the ethernet +PHY. This pin is also used to wake the machine when a WoL packet is +received by the PHY. + +The driver is required by the Buffalo LinkStation LS421DE (ARM MVEBU), +and other models. Without it, the board remains forever halted if a +power off command is executed, unless the PSU is disconnected and +connected again. + +Add the driver to provide the power off function and also make the WoL +feature to be available. + +Signed-off-by: Daniel González Cabanelas +Signed-off-by: Sebastian Reichel +--- + drivers/power/reset/Kconfig | 11 ++ + drivers/power/reset/Makefile | 1 + + drivers/power/reset/linkstation-poweroff.c | 136 +++++++++++++++++++++ + 3 files changed, 148 insertions(+) + create mode 100644 drivers/power/reset/linkstation-poweroff.c + --- a/drivers/power/reset/Kconfig +++ b/drivers/power/reset/Kconfig @@ -99,6 +99,17 @@ config POWER_RESET_HISI @@ -86,7 +116,7 @@ + __phy_read(phydev, MII_M1011_IEVENT); + + /* If WOL was enabled and a magic packet was received before powering -+ * off, we won't be able to wake up by sending another magic packet. ++ * off, we won't be able to wake up by sending another magic packet. + * Clear WOL status. + */ + __phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_MARVELL_WOL_PAGE); diff --git a/target/linux/mvebu/patches-5.4/410-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch b/target/linux/mvebu/patches-5.4/026-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/410-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch rename to target/linux/mvebu/patches-5.4/026-PCI-aardvark-Fix-initialization-with-old-Marvell-s-A.patch diff --git a/target/linux/mvebu/patches-5.4/521-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch b/target/linux/mvebu/patches-5.4/027-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch similarity index 74% rename from target/linux/mvebu/patches-5.4/521-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch rename to target/linux/mvebu/patches-5.4/027-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch index 61225387d..927670d8b 100644 --- a/target/linux/mvebu/patches-5.4/521-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch +++ b/target/linux/mvebu/patches-5.4/027-arm64-dts-marvell-espressobin-Add-ethernet-switch-al.patch @@ -30,7 +30,6 @@ Signed-off-by: Gregory CLEMENT --- .../dts/marvell/armada-3720-espressobin-v7-emmc.dts | 10 ++++++++-- .../boot/dts/marvell/armada-3720-espressobin-v7.dts | 10 ++++++++-- - .../boot/dts/marvell/armada-3720-espressobin.dtsi | 12 ++++++++---- 3 files changed, 24 insertions(+), 8 deletions(-) --- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin-v7-emmc.dts @@ -87,48 +86,3 @@ Signed-off-by: Gregory CLEMENT reg = <3>; label = "wan"; phy-handle = <&switch0phy2>; ---- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts -+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts -@@ -21,6 +21,10 @@ - - aliases { - ethernet0 = ð0; -+ /* for dsa slave device */ -+ ethernet1 = &switch0port1; -+ ethernet2 = &switch0port2; -+ ethernet3 = &switch0port3; - serial0 = &uart0; - serial1 = &uart1; - }; -@@ -147,7 +151,7 @@ - #address-cells = <1>; - #size-cells = <0>; - -- port@0 { -+ switch0port0: port@0 { - reg = <0>; - label = "cpu"; - ethernet = <ð0>; -@@ -158,19 +162,19 @@ - }; - }; - -- port@1 { -+ switch0port1: port@1 { - reg = <1>; - label = "wan"; - phy-handle = <&switch0phy0>; - }; - -- port@2 { -+ switch0port2: port@2 { - reg = <2>; - label = "lan0"; - phy-handle = <&switch0phy1>; - }; - -- port@3 { -+ switch0port3: port@3 { - reg = <3>; - label = "lan1"; - phy-handle = <&switch0phy2>; diff --git a/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch b/target/linux/mvebu/patches-5.4/300-mvebu-Mangle-bootloader-s-kernel-arguments.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch rename to target/linux/mvebu/patches-5.4/300-mvebu-Mangle-bootloader-s-kernel-arguments.patch diff --git a/target/linux/mvebu/patches-5.4/561-mvebu-armada-38x-enable-libata-leds.patch b/target/linux/mvebu/patches-5.4/301-mvebu-armada-38x-enable-libata-leds.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/561-mvebu-armada-38x-enable-libata-leds.patch rename to target/linux/mvebu/patches-5.4/301-mvebu-armada-38x-enable-libata-leds.patch diff --git a/target/linux/mvebu/patches-5.4/002-add_powertables.patch b/target/linux/mvebu/patches-5.4/302-add_powertables.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/002-add_powertables.patch rename to target/linux/mvebu/patches-5.4/302-add_powertables.patch diff --git a/target/linux/mvebu/patches-5.4/005-linksys_hardcode_nand_ecc_settings.patch b/target/linux/mvebu/patches-5.4/303-linksys_hardcode_nand_ecc_settings.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/005-linksys_hardcode_nand_ecc_settings.patch rename to target/linux/mvebu/patches-5.4/303-linksys_hardcode_nand_ecc_settings.patch diff --git a/target/linux/mvebu/patches-5.4/102-revert_i2c_delay.patch b/target/linux/mvebu/patches-5.4/304-revert_i2c_delay.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/102-revert_i2c_delay.patch rename to target/linux/mvebu/patches-5.4/304-revert_i2c_delay.patch diff --git a/target/linux/mvebu/patches-5.4/205-armada-385-rd-mtd-partitions.patch b/target/linux/mvebu/patches-5.4/305-armada-385-rd-mtd-partitions.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/205-armada-385-rd-mtd-partitions.patch rename to target/linux/mvebu/patches-5.4/305-armada-385-rd-mtd-partitions.patch diff --git a/target/linux/mvebu/patches-5.4/206-ARM-mvebu-385-ap-Add-partitions.patch b/target/linux/mvebu/patches-5.4/306-ARM-mvebu-385-ap-Add-partitions.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/206-ARM-mvebu-385-ap-Add-partitions.patch rename to target/linux/mvebu/patches-5.4/306-ARM-mvebu-385-ap-Add-partitions.patch diff --git a/target/linux/mvebu/patches-5.4/230-armada-xp-linksys-mamba-broken-idle.patch b/target/linux/mvebu/patches-5.4/307-armada-xp-linksys-mamba-broken-idle.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/230-armada-xp-linksys-mamba-broken-idle.patch rename to target/linux/mvebu/patches-5.4/307-armada-xp-linksys-mamba-broken-idle.patch diff --git a/target/linux/mvebu/patches-5.4/231-armada-xp-linksys-mamba-wan.patch b/target/linux/mvebu/patches-5.4/308-armada-xp-linksys-mamba-wan.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/231-armada-xp-linksys-mamba-wan.patch rename to target/linux/mvebu/patches-5.4/308-armada-xp-linksys-mamba-wan.patch diff --git a/target/linux/mvebu/patches-5.4/240-linksys-status-led.patch b/target/linux/mvebu/patches-5.4/309-linksys-status-led.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/240-linksys-status-led.patch rename to target/linux/mvebu/patches-5.4/309-linksys-status-led.patch diff --git a/target/linux/mvebu/patches-5.4/241-linksys-use-eth0-as-cpu-port.patch b/target/linux/mvebu/patches-5.4/310-linksys-use-eth0-as-cpu-port.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/241-linksys-use-eth0-as-cpu-port.patch rename to target/linux/mvebu/patches-5.4/310-linksys-use-eth0-as-cpu-port.patch diff --git a/target/linux/mvebu/patches-5.4/250-adjust-compatible-for-linksys.patch b/target/linux/mvebu/patches-5.4/311-adjust-compatible-for-linksys.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/250-adjust-compatible-for-linksys.patch rename to target/linux/mvebu/patches-5.4/311-adjust-compatible-for-linksys.patch diff --git a/target/linux/mvebu/patches-5.4/412-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch b/target/linux/mvebu/patches-5.4/312-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/412-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch rename to target/linux/mvebu/patches-5.4/312-ARM-dts-armada388-clearfog-emmc-on-clearfog-base.patch diff --git a/target/linux/mvebu/patches-5.4/560-helios4-dts-status-led-alias.patch b/target/linux/mvebu/patches-5.4/312-helios4-dts-status-led-alias.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/560-helios4-dts-status-led-alias.patch rename to target/linux/mvebu/patches-5.4/312-helios4-dts-status-led-alias.patch diff --git a/target/linux/mvebu/patches-5.4/520-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch b/target/linux/mvebu/patches-5.4/314-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/520-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch rename to target/linux/mvebu/patches-5.4/314-arm64-dts-marvell-armada37xx-Add-eth0-alias.patch diff --git a/target/linux/mvebu/patches-5.4/522-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch b/target/linux/mvebu/patches-5.4/315-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/522-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch rename to target/linux/mvebu/patches-5.4/315-arm64-dts-marvell-armada-3720-espressobin-add-ports-.patch diff --git a/target/linux/mvebu/patches-5.4/523-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch b/target/linux/mvebu/patches-5.4/316-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/523-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch rename to target/linux/mvebu/patches-5.4/316-arm64-dts-marvell-espressobin-remove-COMPHY-nodes-as.patch diff --git a/target/linux/mvebu/patches-5.4/317-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch b/target/linux/mvebu/patches-5.4/317-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch new file mode 100644 index 000000000..2240d0b39 --- /dev/null +++ b/target/linux/mvebu/patches-5.4/317-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch @@ -0,0 +1,34 @@ +Certain SFP modules (most notably Nokia GPON ones) first check +connectivity on 1000base-x, and switch to 2500base-x afterwards. This +is considered a quirk so the phylink switches the interface to +2500base-x as well. + +However, after power-cycling the uDPU device, network interface/SFP module +will not work correctly until the module is re-seated. This patch +resolves this issue by forcing the interface to be brought up in +2500base-x mode by default. + +Signed-off-by: Jakov Petrina +Signed-off-by: Vladimir Vid +Cc: Luka Perkov + +--- a/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts ++++ b/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts +@@ -162,7 +162,7 @@ + }; + + ð0 { +- phy-mode = "sgmii"; ++ phy-mode = "2500base-x"; + status = "okay"; + managed = "in-band-status"; + phys = <&comphy1 0>; +@@ -170,7 +170,7 @@ + }; + + ð1 { +- phy-mode = "sgmii"; ++ phy-mode = "2500base-x"; + status = "okay"; + managed = "in-band-status"; + phys = <&comphy0 1>; diff --git a/target/linux/mvebu/patches-5.4/100-find_active_root.patch b/target/linux/mvebu/patches-5.4/400-find_active_root.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/100-find_active_root.patch rename to target/linux/mvebu/patches-5.4/400-find_active_root.patch diff --git a/target/linux/mvebu/patches-5.4/550-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch b/target/linux/mvebu/patches-5.4/550-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch deleted file mode 100644 index 82715312d..000000000 --- a/target/linux/mvebu/patches-5.4/550-arm64-dts-uDPU-switch-PHY-operation-mode-to-2500base.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts -+++ b/arch/arm64/boot/dts/marvell/armada-3720-uDPU.dts -@@ -144,7 +144,7 @@ - }; - - ð0 { -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - status = "okay"; - managed = "in-band-status"; - phys = <&comphy1 0>; -@@ -152,7 +152,7 @@ - }; - - ð1 { -- phy-mode = "sgmii"; -+ phy-mode = "2500base-x"; - status = "okay"; - managed = "in-band-status"; - phys = <&comphy0 1>; diff --git a/target/linux/mvebu/patches-5.4/300-mvneta-tx-queue-workaround.patch b/target/linux/mvebu/patches-5.4/700-mvneta-tx-queue-workaround.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/300-mvneta-tx-queue-workaround.patch rename to target/linux/mvebu/patches-5.4/700-mvneta-tx-queue-workaround.patch diff --git a/target/linux/mvebu/patches-5.4/400-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch b/target/linux/mvebu/patches-5.4/800-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/400-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch rename to target/linux/mvebu/patches-5.4/800-cpuidle-mvebu-indicate-failure-to-enter-deeper-sleep.patch diff --git a/target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch b/target/linux/mvebu/patches-5.4/801-pci-mvebu-time-out-reset-on-link-up.patch similarity index 100% rename from target/linux/mvebu/patches-5.4/401-pci-mvebu-time-out-reset-on-link-up.patch rename to target/linux/mvebu/patches-5.4/801-pci-mvebu-time-out-reset-on-link-up.patch diff --git a/target/linux/pistachio/patches-5.4/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/pistachio/patches-5.4/401-mtd-nor-support-mtd-name-from-device-tree.patch index 4b600d7e8..f156e968a 100644 --- a/target/linux/pistachio/patches-5.4/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/pistachio/patches-5.4/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -4931,6 +4931,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -4930,6 +4930,7 @@ int spi_nor_scan(struct spi_nor *nor, co struct mtd_info *mtd = &nor->mtd; struct device_node *np = spi_nor_get_flash_node(nor); struct spi_nor_flash_parameter *params = &nor->params; @@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma int ret; int i; -@@ -4993,7 +4994,12 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -4992,7 +4993,12 @@ int spi_nor_scan(struct spi_nor *nor, co /* Init flash parameters based on flash_info struct and SFDP */ spi_nor_init_params(nor); diff --git a/target/linux/ramips/mt7620/config-5.4 b/target/linux/ramips/mt7620/config-5.4 index edeff2747..d66e9e110 100644 --- a/target/linux/ramips/mt7620/config-5.4 +++ b/target/linux/ramips/mt7620/config-5.4 @@ -47,6 +47,11 @@ CONFIG_CPU_R4K_CACHE_TLB=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_MSA=y +CONFIG_CRC16=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_RNG2=y CONFIG_CSRC_R4K=y CONFIG_DEBUG_PINCTRL=y @@ -143,6 +148,8 @@ CONFIG_IRQ_MIPS_CPU=y CONFIG_IRQ_WORK=y CONFIG_LIBFDT=y CONFIG_LOCK_DEBUGGING_SUPPORT=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y CONFIG_MARVELL_PHY=y CONFIG_MDIO_BUS=y CONFIG_MDIO_DEVICE=y @@ -166,6 +173,7 @@ CONFIG_MODULES_USE_ELF_REL=y # CONFIG_MT7621_WDT is not set # CONFIG_MTD_CFI_INTELEXT is not set CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_NAND_MT7620=y CONFIG_MTD_PHYSMAP=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y @@ -174,6 +182,12 @@ CONFIG_MTD_SPLIT_JIMAGE_FW=y CONFIG_MTD_SPLIT_SEAMA_FW=y CONFIG_MTD_SPLIT_TPLINK_FW=y CONFIG_MTD_SPLIT_UIMAGE_FW=y +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_BEB_LIMIT=20 +CONFIG_MTD_UBI_BLOCK=y +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_PER_CPU_KM=y CONFIG_NET_RALINK_GSW_MT7620=y @@ -214,6 +228,7 @@ CONFIG_RESET_CONTROLLER=y CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SGL_ALLOC=y CONFIG_SOC_MT7620=y # CONFIG_SOC_MT7621 is not set # CONFIG_SOC_RT288X is not set @@ -241,6 +256,14 @@ CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_TINY_SRCU=y +CONFIG_UBIFS_ATIME_SUPPORT=y +CONFIG_UBIFS_FS=y +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_UBIFS_FS_ZSTD is not set CONFIG_USB_SUPPORT=y CONFIG_USE_OF=y CONFIG_WATCHDOG_CORE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_ZLIB_INFLATE=y diff --git a/target/linux/ramips/patches-5.4/0038-mtd-ralink-add-mt7620-nand-driver.patch b/target/linux/ramips/patches-5.4/0038-mtd-ralink-add-mt7620-nand-driver.patch new file mode 100644 index 000000000..e70b6830e --- /dev/null +++ b/target/linux/ramips/patches-5.4/0038-mtd-ralink-add-mt7620-nand-driver.patch @@ -0,0 +1,2386 @@ +From afb07a5b467217af1df4162c707cbe554a79130d Mon Sep 17 00:00:00 2001 +From: Chen Minqiang +Date: Thu, 3 Sep 2020 03:27:48 +0800 +Subject: [PATCH] mtd ralink add mt7620-nand driver + +--- + drivers/mtd/maps/Kconfig | 4 + + drivers/mtd/maps/Makefile | 1 + + drivers/mtd/maps/ralink_nand.c | 2095 ++++++++++++++++++++++++++++++++ + drivers/mtd/maps/ralink_nand.h | 240 ++++ + 4 files changed, 2340 insertions(+) + create mode 100644 drivers/mtd/maps/ralink_nand.c + create mode 100644 drivers/mtd/maps/ralink_nand.h + +diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig +index bc82305eb..aef3a33cb 100644 +--- a/drivers/mtd/maps/Kconfig ++++ b/drivers/mtd/maps/Kconfig +@@ -401,4 +401,8 @@ config MTD_PISMO + + When built as a module, it will be called pismo.ko + ++config MTD_NAND_MT7620 ++ tristate "Support for NAND on Mediatek MT7620" ++ depends on RALINK && SOC_MT7620 ++ + endmenu +diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile +index 1146009f4..0d41a57bb 100644 +--- a/drivers/mtd/maps/Makefile ++++ b/drivers/mtd/maps/Makefile +@@ -44,3 +44,4 @@ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o + obj-$(CONFIG_MTD_RBTX4939) += rbtx4939-flash.o + obj-$(CONFIG_MTD_VMU) += vmu-flash.o + obj-$(CONFIG_MTD_LANTIQ) += lantiq-flash.o ++obj-$(CONFIG_MTD_NAND_MT7620) += ralink_nand.o +diff --git a/drivers/mtd/maps/ralink_nand.c b/drivers/mtd/maps/ralink_nand.c +new file mode 100644 +index 000000000..7abb8affc +--- /dev/null ++++ b/drivers/mtd/maps/ralink_nand.c +@@ -0,0 +1,2095 @@ ++#define DEBUG ++#include ++#undef DEBUG ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "ralink_nand.h" ++#ifdef RANDOM_GEN_BAD_BLOCK ++#include ++#endif ++ ++#define LARGE_MTD_BOOT_PART_SIZE (CFG_BLOCKSIZE<<2) ++#define LARGE_MTD_CONFIG_PART_SIZE (CFG_BLOCKSIZE<<2) ++#define LARGE_MTD_FACTORY_PART_SIZE (CFG_BLOCKSIZE<<1) ++ ++#define BLOCK_ALIGNED(a) ((a) & (CFG_BLOCKSIZE - 1)) ++ ++#define READ_STATUS_RETRY 1000 ++ ++struct nand_ecclayout { ++ __u32 eccbytes; ++ __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; ++ __u32 oobavail; ++ struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; ++}; ++ ++struct mtd_info *ranfc_mtd = NULL; ++ ++int skipbbt = 0; ++int ranfc_debug = 1; ++static int ranfc_bbt = 1; ++#if defined (WORKAROUND_RX_BUF_OV) ++static int ranfc_verify = 1; ++#endif ++static u32 nand_addrlen; ++ ++#if 0 ++module_param(ranfc_debug, int, 0644); ++module_param(ranfc_bbt, int, 0644); ++module_param(ranfc_verify, int, 0644); ++#endif ++ ++#if 0 ++#define ra_dbg(args...) do { if (ranfc_debug) printk(args); } while(0) ++#else ++#define ra_dbg(args...) ++#endif ++ ++#define CLEAR_INT_STATUS() ra_outl(NFC_INT_ST, ra_inl(NFC_INT_ST)) ++#define NFC_TRANS_DONE() (ra_inl(NFC_INT_ST) & INT_ST_ND_DONE) ++ ++int is_nand_page_2048 = 0; ++const unsigned int nand_size_map[2][3] = {{25, 30, 30}, {20, 27, 30}}; ++ ++static int nfc_wait_ready(int snooze_ms); ++ ++static const char * const mtk_probe_types[] = { "cmdlinepart", "ofpart", NULL }; ++ ++/** ++ * reset nand chip ++ */ ++static int nfc_chip_reset(void) ++{ ++ int status; ++ ++ //ra_dbg("%s:\n", __func__); ++ ++ // reset nand flash ++ ra_outl(NFC_CMD1, 0x0); ++ ra_outl(NFC_CMD2, 0xff); ++ ra_outl(NFC_ADDR, 0x0); ++ ra_outl(NFC_CONF, 0x0411); ++ ++ status = nfc_wait_ready(5); //erase wait 5us ++ if (status & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ } ++ ++ return (int)(status & NAND_STATUS_FAIL); ++} ++ ++/** ++ * clear NFC and flash chip. ++ */ ++static int nfc_all_reset(void) ++{ ++ int retry; ++ ++ ra_dbg("%s: \n", __func__); ++ ++ // reset controller ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer ++ ++ CLEAR_INT_STATUS(); ++ ++ retry = READ_STATUS_RETRY; ++ while ((ra_inl(NFC_INT_ST) & 0x02) != 0x02 && retry--); ++ if (retry <= 0) { ++ printk("nfc_all_reset: clean buffer fail \n"); ++ return -1; ++ } ++ ++ retry = READ_STATUS_RETRY; ++ while ((ra_inl(NFC_STATUS) & 0x1) != 0x0 && retry--) { //fixme, controller is busy ? ++ udelay(1); ++ } ++ ++ nfc_chip_reset(); ++ ++ return 0; ++} ++ ++/** NOTICE: only called by nfc_wait_ready(). ++ * @return -1, nfc can not get transction done ++ * @return 0, ok. ++ */ ++static int _nfc_read_status(char *status) ++{ ++ unsigned long cmd1, conf; ++ int int_st, nfc_st; ++ int retry; ++ ++ cmd1 = 0x70; ++ conf = 0x000101 | (1 << 20); ++ ++ //fixme, should we check nfc status? ++ CLEAR_INT_STATUS(); ++ ++ ra_outl(NFC_CMD1, cmd1); ++ ra_outl(NFC_CONF, conf); ++ ++ /* FIXME, ++ * 1. since we have no wired ready signal, directly ++ * calling this function is not gurantee to read right status under ready state. ++ * 2. the other side, we can not determine how long to become ready, this timeout retry is nonsense. ++ * 3. SUGGESTION: call nfc_read_status() from nfc_wait_ready(), ++ * that is aware about caller (in sementics) and has snooze plused nfc ND_DONE. ++ */ ++ retry = READ_STATUS_RETRY; ++ do { ++ nfc_st = ra_inl(NFC_STATUS); ++ int_st = ra_inl(NFC_INT_ST); ++ ++ ndelay(10); ++ } while (!(int_st & INT_ST_RX_BUF_RDY) && retry--); ++ ++ if (!(int_st & INT_ST_RX_BUF_RDY)) { ++ printk("nfc_read_status: NFC fail, int_st(%x), retry:%x. nfc:%x, reset nfc and flash. \n", ++ int_st, retry, nfc_st); ++ nfc_all_reset(); ++ *status = NAND_STATUS_FAIL; ++ return -1; ++ } ++ ++ *status = (char)(le32_to_cpu(ra_inl(NFC_DATA)) & 0x0ff); ++ return 0; ++} ++ ++/** ++ * @return !0, chip protect. ++ * @return 0, chip not protected. ++ */ ++static int nfc_check_wp(void) ++{ ++ /* Check the WP bit */ ++#if !defined CONFIG_NOT_SUPPORT_WP ++ return !!(ra_inl(NFC_CTRL) & 0x01); ++#else ++ char result = 0; ++ int ret; ++ ++ ret = _nfc_read_status(&result); ++ //FIXME, if ret < 0 ++ ++ return !(result & NAND_STATUS_WP); ++#endif ++} ++ ++#if !defined CONFIG_NOT_SUPPORT_RB ++/* ++ * @return !0, chip ready. ++ * @return 0, chip busy. ++ */ ++static int nfc_device_ready(void) ++{ ++ /* Check the ready */ ++ return !!(ra_inl(NFC_STATUS) & 0x04); ++} ++#endif ++ ++/** ++ * generic function to get data from flash. ++ * @return data length reading from flash. ++ */ ++static int _ra_nand_pull_data(char *buf, int len, int use_gdma) ++{ ++#ifdef RW_DATA_BY_BYTE ++ char *p = buf; ++#else ++ __u32 *p = (__u32 *)buf; ++#endif ++ int retry, int_st; ++ unsigned int ret_data; ++ int ret_size; ++ ++ // receive data by use_gdma ++ if (use_gdma) { ++ //if (_ra_nand_dma_pull((unsigned long)p, len)) { ++ if (1) { ++ printk("%s: fail \n", __func__); ++ len = -1; //return error ++ } ++ ++ return len; ++ } ++ ++ //fixme: retry count size? ++ retry = READ_STATUS_RETRY; ++ // no gdma ++ while (len > 0) { ++ int_st = ra_inl(NFC_INT_ST); ++ if (int_st & INT_ST_RX_BUF_RDY) { ++ ++ ret_data = ra_inl(NFC_DATA); ++ ra_outl(NFC_INT_ST, INT_ST_RX_BUF_RDY); ++#ifdef RW_DATA_BY_BYTE ++ ret_size = sizeof(unsigned int); ++ ret_size = min(ret_size, len); ++ len -= ret_size; ++ while (ret_size-- > 0) { ++ //nfc is little endian ++ *p++ = ret_data & 0x0ff; ++ ret_data >>= 8; ++ } ++#else ++ ret_size = min(len, 4); ++ len -= ret_size; ++ if (ret_size == 4) ++ *p++ = ret_data; ++ else { ++ __u8 *q = (__u8 *)p; ++ while (ret_size-- > 0) { ++ *q++ = ret_data & 0x0ff; ++ ret_data >>= 8; ++ } ++ p = (__u32 *)q; ++ } ++#endif ++ retry = READ_STATUS_RETRY; ++ } ++ else if (int_st & INT_ST_ND_DONE) { ++ break; ++ } ++ else { ++ udelay(1); ++ if (retry-- < 0) ++ break; ++ } ++ } ++ ++#ifdef RW_DATA_BY_BYTE ++ return (int)(p - buf); ++#else ++ return ((int)p - (int)buf); ++#endif ++} ++ ++/** ++ * generic function to put data into flash. ++ * @return data length writing into flash. ++ */ ++static int _ra_nand_push_data(char *buf, int len, int use_gdma) ++{ ++#ifdef RW_DATA_BY_BYTE ++ char *p = buf; ++#else ++ __u32 *p = (__u32 *)buf; ++#endif ++ int retry, int_st; ++ unsigned int tx_data = 0; ++ int tx_size, iter = 0; ++ ++ // receive data by use_gdma ++ if (use_gdma) { ++ //if (_ra_nand_dma_push((unsigned long)p, len)) ++ if (1) ++ len = 0; ++ printk("%s: fail \n", __func__); ++ return len; ++ } ++ ++ // no gdma ++ retry = READ_STATUS_RETRY; ++ while (len > 0) { ++ int_st = ra_inl(NFC_INT_ST); ++ if (int_st & INT_ST_TX_BUF_RDY) { ++#ifdef RW_DATA_BY_BYTE ++ tx_size = min(len, (int)sizeof(unsigned long)); ++ for (iter = 0; iter < tx_size; iter++) { ++ tx_data |= (*p++ << (8*iter)); ++ } ++#else ++ tx_size = min(len, 4); ++ if (tx_size == 4) ++ tx_data = (*p++); ++ else { ++ __u8 *q = (__u8 *)p; ++ for (iter = 0; iter < tx_size; iter++) ++ tx_data |= (*q++ << (8*iter)); ++ p = (__u32 *)q; ++ } ++#endif ++ ra_outl(NFC_INT_ST, INT_ST_TX_BUF_RDY); ++ ra_outl(NFC_DATA, tx_data); ++ len -= tx_size; ++ retry = READ_STATUS_RETRY; ++ } ++ else if (int_st & INT_ST_ND_DONE) { ++ break; ++ } ++ else { ++ udelay(1); ++ if (retry-- < 0) { ++ ra_dbg("%s p:%p buf:%p \n", __func__, p, buf); ++ break; ++ } ++ } ++ } ++ ++#ifdef RW_DATA_BY_BYTE ++ return (int)(p - buf); ++#else ++ return ((int)p - (int)buf); ++#endif ++} ++ ++static int nfc_select_chip(struct ra_nand_chip *ra, int chipnr) ++{ ++#if (CONFIG_NUMCHIPS == 1) ++ if (!(chipnr < CONFIG_NUMCHIPS)) ++ return -1; ++ return 0; ++#else ++ BUG(); ++#endif ++} ++ ++/** @return -1: chip_select fail ++ * 0 : both CE and WP==0 are OK ++ * 1 : CE OK and WP==1 ++ */ ++static int nfc_enable_chip(struct ra_nand_chip *ra, unsigned int offs, int read_only) ++{ ++ int chipnr = offs >> ra->chip_shift; ++ ++ ra_dbg("%s: offs:%x read_only:%x \n", __func__, offs, read_only); ++ ++ chipnr = nfc_select_chip(ra, chipnr); ++ if (chipnr < 0) { ++ printk("%s: chip select error, offs(%x)\n", __func__, offs); ++ return -1; ++ } ++ ++ if (!read_only) ++ return nfc_check_wp(); ++ ++ return 0; ++} ++ ++/** wait nand chip becomeing ready and return queried status. ++ * @param snooze: sleep time in ms unit before polling device ready. ++ * @return status of nand chip ++ * @return NAN_STATUS_FAIL if something unexpected. ++ */ ++static int nfc_wait_ready(int snooze_ms) ++{ ++ int retry; ++ char status; ++ ++ // wait nfc idle, ++ if (snooze_ms == 0) ++ snooze_ms = 1; ++ else ++ schedule_timeout(snooze_ms * HZ / 1000); ++ ++ snooze_ms = retry = snooze_ms *1000000 / 100 ; // ndelay(100) ++ ++ while (!NFC_TRANS_DONE() && retry--) { ++ if (!cond_resched()) ++ ndelay(100); ++ } ++ ++ if (!NFC_TRANS_DONE()) { ++ printk("nfc_wait_ready: no transaction done \n"); ++ return NAND_STATUS_FAIL; ++ } ++ ++#if !defined (CONFIG_NOT_SUPPORT_RB) ++ //fixme ++ while(!(status = nfc_device_ready()) && retry--) { ++ ndelay(100); ++ } ++ ++ if (status == 0) { ++ printk("nfc_wait_ready: no device ready. \n"); ++ return NAND_STATUS_FAIL; ++ } ++ ++ _nfc_read_status(&status); ++ return status; ++#else ++ ++ while(retry--) { ++ _nfc_read_status(&status); ++ if (status & NAND_STATUS_READY) ++ break; ++ ndelay(100); ++ } ++ if (retry<0) ++ printk("nfc_wait_ready 2: no device ready, status(%x). \n", status); ++ ++ return status; ++#endif ++} ++ ++/** ++ * return 0: erase OK ++ * return -EIO: fail ++ */ ++int nfc_erase_block(struct ra_nand_chip *ra, int row_addr) ++{ ++ unsigned long cmd1, cmd2, bus_addr, conf; ++ char status; ++ ++ cmd1 = 0x60; ++ cmd2 = 0xd0; ++ bus_addr = row_addr; ++ conf = 0x00511 | ((CFG_ROW_ADDR_CYCLE)<<16); ++ ++ // set NFC ++ ra_dbg("%s: cmd1: %lx, cmd2:%lx bus_addr: %lx, conf: %lx \n", ++ __func__, cmd1, cmd2, bus_addr, conf); ++ ++ //fixme, should we check nfc status? ++ CLEAR_INT_STATUS(); ++ ++ ra_outl(NFC_CMD1, cmd1); ++ ra_outl(NFC_CMD2, cmd2); ++ ra_outl(NFC_ADDR, bus_addr); ++ ra_outl(NFC_CONF, conf); ++ ++ status = nfc_wait_ready(3); //erase wait 3ms ++ if (status & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++static inline int _nfc_read_raw_data(int cmd1, int cmd2, int bus_addr, int bus_addr2, int conf, char *buf, int len, int flags) ++{ ++ int ret; ++ ++ CLEAR_INT_STATUS(); ++ ra_outl(NFC_CMD1, cmd1); ++ ra_outl(NFC_CMD2, cmd2); ++ ra_outl(NFC_ADDR, bus_addr); ++#if defined (CONFIG_SOC_MT7620) ++ ra_outl(NFC_ADDR2, bus_addr2); ++#endif ++ ra_outl(NFC_CONF, conf); ++ ++ ret = _ra_nand_pull_data(buf, len, 0); ++ if (ret != len) { ++ ra_dbg("%s: ret:%x (%x) \n", __func__, ret, len); ++ return NAND_STATUS_FAIL; ++ } ++ ++ //FIXME, this section is not necessary ++ ret = nfc_wait_ready(0); //wait ready ++ /* to prevent the DATA FIFO 's old data from next operation */ ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer ++ ++ if (ret & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ return NAND_STATUS_FAIL; ++ } ++ ++ return 0; ++} ++ ++static inline int _nfc_write_raw_data(int cmd1, int cmd3, int bus_addr, int bus_addr2, int conf, char *buf, int len, int flags) ++{ ++ int ret; ++ ++ CLEAR_INT_STATUS(); ++ ra_outl(NFC_CMD1, cmd1); ++ ra_outl(NFC_CMD3, cmd3); ++ ra_outl(NFC_ADDR, bus_addr); ++#if defined (CONFIG_SOC_MT7620) ++ ra_outl(NFC_ADDR2, bus_addr2); ++#endif ++ ra_outl(NFC_CONF, conf); ++ ++ ret = _ra_nand_push_data(buf, len, 0); ++ if (ret != len) { ++ ra_dbg("%s: ret:%x (%x) \n", __func__, ret, len); ++ return NAND_STATUS_FAIL; ++ } ++ ++ ret = nfc_wait_ready(1); //write wait 1ms ++ /* to prevent the DATA FIFO 's old data from next operation */ ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x02); //clear data buffer ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) & ~0x02); //clear data buffer ++ ++ if (ret & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ return NAND_STATUS_FAIL; ++ } ++ ++ return 0; ++} ++ ++/** ++ * @return !0: fail ++ * @return 0: OK ++ */ ++int nfc_read_oob(struct ra_nand_chip *ra, int page, unsigned int offs, char *buf, int len, int flags) ++{ ++ unsigned int cmd1 = 0, cmd2 = 0, conf = 0; ++ unsigned int bus_addr = 0, bus_addr2 = 0; ++ unsigned int ecc_en; ++ int use_gdma; ++ int status; ++ ++ int pages_perblock = 1<<(ra->erase_shift - ra->page_shift); ++ // constrain of nfc read function ++ ++#if defined (WORKAROUND_RX_BUF_OV) ++ BUG_ON (len > 60); //problem of rx-buffer overrun ++#endif ++ BUG_ON (offs >> ra->oob_shift); //page boundry ++ BUG_ON ((unsigned int)(((offs + len) >> ra->oob_shift) + page) > ++ ((page + pages_perblock) & ~(pages_perblock-1))); //block boundry ++ ++ use_gdma = flags & FLAG_USE_GDMA; ++ ecc_en = flags & FLAG_ECC_EN; ++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); ++ cmd1 = 0x0; ++ cmd2 = 0x30; ++ conf = 0x000511| ((CFG_ADDR_CYCLE)<<16) | (len << 20); ++ } ++ else { ++ cmd1 = 0x50; ++ conf = 0x000141| ((CFG_ADDR_CYCLE)<<16) | (len << 20); ++ } ++ if (ecc_en) ++ conf |= (1<<3); ++ if (use_gdma) ++ conf |= (1<<2); ++ ++ ra_dbg("%s: cmd1:%x, bus_addr:%x, conf:%x, len:%x, flag:%x\n", ++ __func__, cmd1, bus_addr, conf, len, flags); ++ ++ status = _nfc_read_raw_data(cmd1, cmd2, bus_addr, bus_addr2, conf, buf, len, flags); ++ if (status & NAND_STATUS_FAIL) { ++ printk("%s: fail\n", __func__); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++/** ++ * @return !0: fail ++ * @return 0: OK ++ */ ++int nfc_write_oob(struct ra_nand_chip *ra, int page, unsigned int offs, char *buf, int len, int flags) ++{ ++ unsigned int cmd1 = 0, cmd3=0, conf = 0; ++ unsigned int bus_addr = 0, bus_addr2 = 0; ++ int use_gdma; ++ int status; ++ ++ int pages_perblock = 1<<(ra->erase_shift - ra->page_shift); ++ // constrain of nfc read function ++ ++ BUG_ON (offs >> ra->oob_shift); //page boundry ++ BUG_ON ((unsigned int)(((offs + len) >> ra->oob_shift) + page) > ++ ((page + pages_perblock) & ~(pages_perblock-1))); //block boundry ++ ++ use_gdma = flags & FLAG_USE_GDMA; ++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); ++ conf = 0x001123 | ((CFG_ADDR_CYCLE)<<16) | ((len) << 20); ++ } ++ else { ++ cmd1 = 0x08050; ++ cmd3 = 0x10; ++ conf = 0x001223 | ((CFG_ADDR_CYCLE)<<16) | ((len) << 20); ++ } ++ if (use_gdma) ++ conf |= (1<<2); ++ ++ // set NFC ++ ra_dbg("%s: cmd1: %x, cmd3: %x bus_addr: %x, conf: %x, len:%x\n", ++ __func__, cmd1, cmd3, bus_addr, conf, len); ++ ++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, len, flags); ++ if (status & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++ ++int nfc_read_page(struct ra_nand_chip *ra, char *buf, int page, int flags); ++int nfc_write_page(struct ra_nand_chip *ra, char *buf, int page, int flags); ++ ++ ++#if !defined (WORKAROUND_RX_BUF_OV) ++static int one_bit_correction(char *ecc, char *expected, int *bytes, int *bits); ++int nfc_ecc_verify(struct ra_nand_chip *ra, char *buf, int page, int mode) ++{ ++ int ret, i; ++ char *p, *e; ++ int ecc; ++ ++ //ra_dbg("%s, page:%x mode:%d\n", __func__, page, mode); ++ ++ if (mode == FL_WRITING) { ++ int len = CFG_PAGESIZE + CFG_PAGE_OOBSIZE; ++ int conf = 0x000141| ((CFG_ADDR_CYCLE)<<16) | (len << 20); ++ conf |= (1<<3); //(ecc_en) ++ //conf |= (1<<2); // (use_gdma) ++ ++ p = ra->readback_buffers; ++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_ECC_EN); ++ if (ret == 0) ++ goto ecc_check; ++ ++ //FIXME, double comfirm ++ printk("%s: read back fail, try again \n",__func__); ++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_ECC_EN); ++ if (ret != 0) { ++ printk("\t%s: read back fail agian \n",__func__); ++ goto bad_block; ++ } ++ } ++ else if (mode == FL_READING) { ++ p = buf; ++ } ++ else ++ return -2; ++ ++ecc_check: ++ p += CFG_PAGESIZE; ++ if (!is_nand_page_2048) { ++ ecc = ra_inl(NFC_ECC); ++ if (ecc == 0) //clean page. ++ return 0; ++ e = (char*)&ecc; ++ for (i=0; ireadback_buffers, page, FLAG_NONE); ++ if (ret != 0) //double comfirm ++ ret = nfc_read_page(ra, ra->readback_buffers, page, FLAG_NONE); ++ ++ if (ret != 0) { ++ printk("%s: mode:%x read back fail \n", __func__, mode); ++ return -1; ++ } ++ return memcmp(buf, ra->readback_buffers, 1<page_shift); ++ } ++ ++ if (mode == FL_READING) { ++#if 0 ++ if (ra->sandbox_page == 0) ++ return 0; ++ ++ ret = nfc_write_page(ra, buf, ra->sandbox_page, FLAG_USE_GDMA | FLAG_ECC_EN); ++ if (ret != 0) { ++ printk("%s, fail write sandbox_page \n", __func__); ++ return -1; ++ } ++#else ++ /** @note: ++ * The following command is actually not 'write' command to drive NFC to write flash. ++ * However, it can make NFC to calculate ECC, that will be used to compare with original ones. ++ * --YT ++ */ ++ unsigned int conf = 0x001223| (CFG_ADDR_CYCLE<<16) | (0x200 << 20) | (1<<3) | (1<<2); ++ _nfc_write_raw_data(0xff, 0xff, ra->sandbox_page<page_shift, conf, buf, 0x200, FLAG_USE_GDMA); ++#endif ++ ++ ecc = ra_inl(NFC_ECC); ++ if (ecc == 0) //clean page. ++ return 0; ++ e = (char*)&ecc; ++ p = buf + (1<page_shift); ++ for (i=0; i 0) { ++ int len; ++#if defined (WORKAROUND_RX_BUF_OV) ++ len = min(60, size); ++#else ++ len = size; ++#endif ++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)) | (offs & ((1<> (CFG_COLUMN_ADDR_CYCLE*8); ++ cmd1 = 0x0; ++ cmd2 = 0x30; ++ conf = 0x000511| ((CFG_ADDR_CYCLE)<<16) | (len << 20); ++ } ++ else { ++ if (offs & ~(CFG_PAGESIZE-1)) ++ cmd1 = 0x50; ++ else if (offs & ~((1<buffers_page = -1; //cached ++ } ++ ++ return 0; ++} ++ ++ ++/** ++ * @return -EIO, fail to write ++ * @return 0, OK ++ */ ++int nfc_write_page(struct ra_nand_chip *ra, char *buf, int page, int flags) ++{ ++ unsigned int cmd1 = 0, cmd3, conf = 0; ++ unsigned int bus_addr = 0, bus_addr2 = 0; ++ unsigned int ecc_en; ++ int use_gdma; ++ int size; ++ char status; ++ uint8_t *oob = buf + (1<page_shift); ++ ++ use_gdma = flags & FLAG_USE_GDMA; ++ ecc_en = flags & FLAG_ECC_EN; ++ ++ oob[ra->badblockpos] = 0xff; //tag as good block. ++ ra->buffers_page = -1; //cached ++ ++ page = page & (CFG_CHIPSIZE-1); //chip boundary ++ size = CFG_PAGESIZE + CFG_PAGE_OOBSIZE; //add oobsize ++ bus_addr = (page << (CFG_COLUMN_ADDR_CYCLE*8)); //write_page always write from offset 0. ++ ++ if (is_nand_page_2048) { ++ bus_addr2 = page >> (CFG_COLUMN_ADDR_CYCLE*8); ++ cmd1 = 0x80; ++ cmd3 = 0x10; ++ conf = 0x001123| ((CFG_ADDR_CYCLE)<<16) | (size << 20); ++ } ++ else { ++ cmd1 = 0x8000; ++ cmd3 = 0x10; ++ conf = 0x001223| ((CFG_ADDR_CYCLE)<<16) | (size << 20); ++ } ++ if (ecc_en) ++ conf |= (1<<3); //enable ecc ++ if (use_gdma) ++ conf |= (1<<2); ++ ++ // set NFC ++ ra_dbg("nfc_write_page: cmd1: %x, cmd3: %x bus_addr: %x, conf: %x, len:%x\n", ++ cmd1, cmd3, bus_addr, conf, size); ++ ++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, size, flags); ++ if (status & NAND_STATUS_FAIL) { ++ printk("%s: fail \n", __func__); ++ return -EIO; ++ } ++ ++ ++ if (flags & FLAG_VERIFY) { // verify and correct ecc ++ status = nfc_ecc_verify(ra, buf, page, FL_WRITING); ++ ++#ifdef RANDOM_GEN_BAD_BLOCK ++ if (((random32() & 0x1ff) == 0x0) && (page >= 0x100)) // randomly create bad block ++ { ++ printk("hmm... create a bad block at page %x\n", (bus_addr >> 16)); ++ status = -1; ++ } ++#endif ++ ++ if (status != 0) { ++ printk("%s: ecc_verify fail: ret:%x \n", __func__, status); ++ oob[ra->badblockpos] = 0x33; ++ page -= page % (CFG_BLOCKSIZE/CFG_PAGESIZE); ++ printk("create a bad block at page %x\n", page); ++ if (!is_nand_page_2048) ++ status = nfc_write_oob(ra, page, ra->badblockpos, oob+ra->badblockpos, 1, flags); ++ else ++ { ++ status = _nfc_write_raw_data(cmd1, cmd3, bus_addr, bus_addr2, conf, buf, size, flags); ++ nfc_write_oob(ra, page, 0, oob, 16, FLAG_NONE); ++ } ++ return -EBADMSG; ++ } ++ } ++ ++ ra->buffers_page = page; //cached ++ return 0; ++} ++ ++ ++ ++/************************************************************* ++ * nand internal process ++ *************************************************************/ ++ ++/** ++ * nand_release_device - [GENERIC] release chip ++ * @mtd: MTD device structure ++ * ++ * Deselect, release chip lock and wake up anyone waiting on the device ++ */ ++static void nand_release_device(struct ra_nand_chip *ra) ++{ ++ /* De-select the NAND device */ ++ nfc_select_chip(ra, -1); ++ ++ /* Release the controller and the chip */ ++ ra->state = FL_READY; ++ ++ mutex_unlock(ra->controller); ++} ++ ++/** ++ * nand_get_device - [GENERIC] Get chip for selected access ++ * @chip: the nand chip descriptor ++ * @mtd: MTD device structure ++ * @new_state: the state which is requested ++ * ++ * Get the device and lock it for exclusive access ++ */ ++static int ++nand_get_device(struct ra_nand_chip *ra, int new_state) ++{ ++ int ret = 0; ++ ++ ret = mutex_lock_interruptible(ra->controller); ++ if (!ret) ++ ra->state = new_state; ++ ++ return ret; ++} ++ ++/************************************************************* ++ * nand internal process ++ *************************************************************/ ++ ++int ra_nand_bbt_get(struct ra_nand_chip *ra, int block) ++{ ++ int byte, bits; ++ bits = block * BBTTAG_BITS; ++ ++ byte = bits / 8; ++ bits = bits % 8; ++ ++ return (ra->bbt[byte] >> bits) & BBTTAG_BITS_MASK; ++} ++ ++int ra_nand_bbt_set(struct ra_nand_chip *ra, int block, int tag) ++{ ++ int byte, bits; ++ bits = block * BBTTAG_BITS; ++ ++ byte = bits / 8; ++ bits = bits % 8; ++ ++ // If previous tag is bad, dont overwrite it ++ if (((ra->bbt[byte] >> bits) & BBTTAG_BITS_MASK) == BBT_TAG_BAD) ++ { ++ return BBT_TAG_BAD; ++ } ++ ++ ra->bbt[byte] = (ra->bbt[byte] & ~(BBTTAG_BITS_MASK << bits)) | ((tag & BBTTAG_BITS_MASK) << bits); ++ ++ return tag; ++} ++ ++/** ++ * nand_block_checkbad - [GENERIC] Check if a block is marked bad ++ * @mtd: MTD device structure ++ * @ofs: offset from device start ++ * ++ * Check, if the block is bad. Either by reading the bad block table or ++ * calling of the scan function. ++ */ ++int nand_block_checkbad(struct ra_nand_chip *ra, loff_t offs) ++{ ++ int page, block; ++ int ret = 4; ++ unsigned int tag; ++ char *str[]= {"UNK", "RES", "BAD", "GOOD"}; ++ ++ if (ranfc_bbt == 0) ++ return 0; ++ ++ { ++ // align with chip ++ ++ offs = offs & ((1<chip_shift) -1); ++ ++ page = offs >> ra->page_shift; ++ block = offs >> ra->erase_shift; ++ } ++ ++ tag = ra_nand_bbt_get(ra, block); ++ ++ if (tag == BBT_TAG_UNKNOWN) { ++ ret = nfc_read_oob(ra, page, ra->badblockpos, (char*)&tag, 1, FLAG_NONE); ++ if (ret == 0) ++ tag = ((le32_to_cpu(tag) & 0x0ff) == 0x0ff) ? BBT_TAG_GOOD : BBT_TAG_BAD; ++ else ++ tag = BBT_TAG_BAD; ++ ++ ra_nand_bbt_set(ra, block, tag); ++ } ++ ++ if (tag != BBT_TAG_GOOD) { ++ printk("%s: offs:%x tag: %s \n", __func__, (unsigned int)offs, str[tag]); ++ return 1; ++ } ++ else ++ return 0; ++} ++ ++/** ++ * nand_block_markbad - ++ */ ++int nand_block_markbad(struct ra_nand_chip *ra, loff_t offs) ++{ ++ int page, block; ++ int ret = 4; ++ unsigned int tag; ++ char *ecc; ++ ++ // align with chip ++ ra_dbg("%s offs: %x \n", __func__, (int)offs); ++ ++ offs = offs & ((1<chip_shift) -1); ++ ++ page = offs >> ra->page_shift; ++ block = offs >> ra->erase_shift; ++ ++ tag = ra_nand_bbt_get(ra, block); ++ ++ if (tag == BBT_TAG_BAD) { ++ printk("%s: mark repeatedly \n", __func__); ++ return 0; ++ } ++ ++ // new tag as bad ++ tag =BBT_TAG_BAD; ++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_NONE); ++ if (ret != 0) { ++ printk("%s: fail to read bad block tag \n", __func__); ++ goto tag_bbt; ++ } ++ ++ ecc = &ra->buffers[(1<page_shift)+ra->badblockpos]; ++ if (*ecc == (char)0x0ff) { ++ //tag into flash ++ *ecc = (char)tag; ++ ret = nfc_write_page(ra, ra->buffers, page, FLAG_USE_GDMA); ++ if (ret) ++ printk("%s: fail to write bad block tag \n", __func__); ++ } ++ ++tag_bbt: ++ //update bbt ++ ra_nand_bbt_set(ra, block, tag); ++ ++ return 0; ++} ++ ++#if defined (WORKAROUND_RX_BUF_OV) ++/** ++ * to find a bad block for ecc verify of read_page ++ */ ++unsigned int nand_bbt_find_sandbox(struct ra_nand_chip *ra) ++{ ++ loff_t offs = 0; ++ int chipsize = 1 << ra->chip_shift; ++ int blocksize = 1 << ra->erase_shift; ++ ++ ++ while (offs < chipsize) { ++ if (nand_block_checkbad(ra, offs)) //scan and verify the unknown tag ++ break; ++ offs += blocksize; ++ } ++ ++ if (offs >= chipsize) { ++ offs = chipsize - blocksize; ++ } ++ ++ ra_nand_bbt_set(ra, (unsigned int)offs>>ra->erase_shift, BBT_TAG_RES); // tag bbt only, instead of update badblockpos of flash. ++ return (offs >> ra->page_shift); ++} ++#endif ++ ++/** ++ * nand_erase_nand - [Internal] erase block(s) ++ * @mtd: MTD device structure ++ * @instr: erase instruction ++ * @allowbbt: allow erasing the bbt area ++ * ++ * Erase one ore more blocks ++ */ ++static int _nand_erase_nand(struct ra_nand_chip *ra, struct erase_info *instr) ++{ ++ int page, len, status, ret, state; ++ unsigned int addr, blocksize = 1<erase_shift; ++ ++ ra_dbg("%s: start:%x, len:%x \n", __func__, ++ (unsigned int)instr->addr, (unsigned int)instr->len); ++ ++//#define BLOCK_ALIGNED(a) ((a) & (blocksize - 1)) // already defined ++ ++ if (BLOCK_ALIGNED(instr->addr) || BLOCK_ALIGNED(instr->len)) { ++ ra_dbg("%s: erase block not aligned, addr:%x len:%x\n", __func__, instr->addr, instr->len); ++ return -EINVAL; ++ } ++ ++ instr->fail_addr = 0xffffffff; ++ ++ len = instr->len; ++ addr = instr->addr; ++ state = MTD_ERASING; ++ ++ while (len) { ++ ++ page = (int)(addr >> ra->page_shift); ++ ++ /* select device and check wp */ ++ if (nfc_enable_chip(ra, addr, 0)) { ++ printk("%s: nand is write protected \n", __func__); ++ state = MTD_ERASE_FAILED; ++ goto erase_exit; ++ } ++ ++ /* if we have a bad block, we do not erase bad blocks */ ++ if (nand_block_checkbad(ra, addr)) { ++ printk(KERN_WARNING "nand_erase: attempt to erase a " ++ "bad block at 0x%08x\n", addr); ++ state = MTD_ERASE_FAILED; ++ goto erase_exit; ++ } ++ ++ /* ++ * Invalidate the page cache, if we erase the block which ++ * contains the current cached page ++ */ ++ if (BLOCK_ALIGNED(addr) == BLOCK_ALIGNED(ra->buffers_page << ra->page_shift)) ++ ra->buffers_page = -1; ++ ++ status = nfc_erase_block(ra, page); ++ /* See if block erase succeeded */ ++ if (status) { ++ printk("%s: failed erase, page 0x%08x\n", __func__, page); ++ state = MTD_ERASE_FAILED; ++ instr->fail_addr = (page << ra->page_shift); ++ goto erase_exit; ++ } ++ ++ /* Increment page address and decrement length */ ++ len -= blocksize; ++ addr += blocksize; ++ ++ } ++ state = MTD_ERASE_DONE; ++ ++erase_exit: ++ ++ ret = ((state == MTD_ERASE_DONE) ? 0 : -EIO); ++ ++ if (ret) { ++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); ++ } ++ ++ /* Return more or less happy */ ++ return ret; ++} ++ ++static int ++nand_write_oob_buf(struct ra_nand_chip *ra, uint8_t *buf, uint8_t *oob, size_t size, ++ int mode, int ooboffs) ++{ ++ size_t oobsize = 1<oob_shift; ++ struct nand_oobfree *free; ++ uint32_t woffs = ooboffs; ++ int retsize = 0; ++ ++ ra_dbg("%s: size:%x, mode:%x, offs:%x \n", __func__, size, mode, ooboffs); ++ ++ switch(mode) { ++ case MTD_OPS_PLACE_OOB: ++ case MTD_OPS_RAW: ++ if (ooboffs > oobsize) ++ return -1; ++ ++ size = min(size, oobsize - ooboffs); ++ memcpy(buf + ooboffs, oob, size); ++ retsize = size; ++ break; ++ ++ case MTD_OPS_AUTO_OOB: ++ if (ooboffs > ra->oob->oobavail) ++ return -1; ++ ++ while (size) { ++ for(free = ra->oob->oobfree; free->length && size; free++) { ++ int wlen = free->length - woffs; ++ int bytes = 0; ++ ++ /* Write request not from offset 0 ? */ ++ if (wlen <= 0) { ++ woffs = -wlen; ++ continue; ++ } ++ ++ bytes = min_t(size_t, size, wlen); ++ memcpy (buf + free->offset + woffs, oob, bytes); ++ woffs = 0; ++ oob += bytes; ++ size -= bytes; ++ retsize += bytes; ++ } ++ buf += oobsize; ++ } ++ break; ++ ++ default: ++ BUG(); ++ } ++ ++ return retsize; ++} ++ ++static int nand_read_oob_buf(struct ra_nand_chip *ra, uint8_t *oob, size_t size, ++ int mode, int ooboffs) ++{ ++ size_t oobsize = 1<oob_shift; ++ uint8_t *buf = ra->buffers + (1<page_shift); ++ int retsize=0; ++ ++ ra_dbg("%s: size:%x, mode:%x, offs:%x \n", __func__, size, mode, ooboffs); ++ ++ switch(mode) { ++ case MTD_OPS_PLACE_OOB: ++ case MTD_OPS_RAW: ++ if (ooboffs > oobsize) ++ return -1; ++ ++ size = min(size, oobsize - ooboffs); ++ memcpy(oob, buf + ooboffs, size); ++ return size; ++ ++ case MTD_OPS_AUTO_OOB: { ++ struct nand_oobfree *free; ++ uint32_t woffs = ooboffs; ++ ++ if (ooboffs > ra->oob->oobavail) ++ return -1; ++ ++ size = min(size, ra->oob->oobavail - ooboffs); ++ for(free = ra->oob->oobfree; free->length && size; free++) { ++ int wlen = free->length - woffs; ++ int bytes = 0; ++ ++ /* Write request not from offset 0 ? */ ++ if (wlen <= 0) { ++ woffs = -wlen; ++ continue; ++ } ++ ++ bytes = min_t(size_t, size, wlen); ++ memcpy (oob, buf + free->offset + woffs, bytes); ++ woffs = 0; ++ oob += bytes; ++ size -= bytes; ++ retsize += bytes; ++ } ++ return retsize; ++ } ++ default: ++ BUG(); ++ } ++ ++ return -1; ++} ++ ++/** ++ * nand_do_write_ops - [Internal] NAND write with ECC ++ * @mtd: MTD device structure ++ * @to: offset to write to ++ * @ops: oob operations description structure ++ * ++ * NAND write with ECC ++ */ ++static int nand_do_write_ops(struct ra_nand_chip *ra, loff_t to, ++ struct mtd_oob_ops *ops) ++{ ++ int page; ++ uint32_t datalen = ops->len; ++ uint32_t ooblen = ops->ooblen; ++ uint8_t *oob = ops->oobbuf; ++ uint8_t *data = ops->datbuf; ++ int pagesize = (1<page_shift); ++ int pagemask = (pagesize -1); ++ int oobsize = 1<oob_shift; ++ loff_t addr = to; ++ //int i = 0; //for ra_dbg only ++ ++ ra_dbg("%s: to:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x oobmode:%x \n", ++ __func__, (unsigned int)to, data, oob, datalen, ooblen, ops->ooboffs, ops->mode); ++ ++ ops->retlen = 0; ++ ops->oobretlen = 0; ++ ++ ++ /* Invalidate the page cache, when we write to the cached page */ ++ ra->buffers_page = -1; ++ ++ ++ if (data ==0) ++ datalen = 0; ++ ++ // oob sequential (burst) write ++ if (datalen == 0 && ooblen) { ++ int len = ((ooblen + ops->ooboffs) + (ra->oob->oobavail - 1)) / ra->oob->oobavail * oobsize; ++ ++ /* select chip, and check if it is write protected */ ++ if (nfc_enable_chip(ra, addr, 0)) ++ return -EIO; ++ ++ //FIXME, need sanity check of block boundary ++ page = (int)((to & ((1<chip_shift)-1)) >> ra->page_shift); //chip boundary ++ memset(ra->buffers, 0x0ff, pagesize); ++ //fixme, should we reserve the original content? ++ if (ops->mode == MTD_OPS_AUTO_OOB) { ++ nfc_read_oob(ra, page, 0, ra->buffers, len, FLAG_NONE); ++ } ++ //prepare buffers ++ if (ooblen != 8) ++ { ++ nand_write_oob_buf(ra, ra->buffers, oob, ooblen, ops->mode, ops->ooboffs); ++ // write out buffer to chip ++ nfc_write_oob(ra, page, 0, ra->buffers, len, FLAG_USE_GDMA); ++ } ++ ++ ops->oobretlen = ooblen; ++ ooblen = 0; ++ } ++ ++ // data sequential (burst) write ++ if (datalen && ooblen == 0) { ++ // ranfc can not support write_data_burst, since hw-ecc and fifo constraints.. ++ } ++ ++ // page write ++ while(datalen || ooblen) { ++ int len; ++ int ret; ++ int offs; ++ int ecc_en = 0; ++ ++ ra_dbg("%s (%d): addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", ++ __func__, i++, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); ++ ++ page = (int)((addr & ((1<chip_shift)-1)) >> ra->page_shift); //chip boundary ++ ++ /* select chip, and check if it is write protected */ ++ if (nfc_enable_chip(ra, addr, 0)) ++ return -EIO; ++ ++ // oob write ++ if (ops->mode == MTD_OPS_AUTO_OOB) { ++ //fixme, this path is not yet varified ++ nfc_read_oob(ra, page, 0, ra->buffers + pagesize, oobsize, FLAG_NONE); ++ } ++ if (oob && ooblen > 0) { ++ len = nand_write_oob_buf(ra, ra->buffers + pagesize, oob, ooblen, ops->mode, ops->ooboffs); ++ if (len < 0) ++ return -EINVAL; ++ ++ oob += len; ++ ops->oobretlen += len; ++ ooblen -= len; ++ } ++ ++ // data write ++ offs = addr & pagemask; ++ len = min_t(size_t, datalen, pagesize - offs); ++ if (data && len > 0) { ++ memcpy(ra->buffers + offs, data, len); // we can not sure ops->buf wether is DMA-able. ++ ++ data += len; ++ datalen -= len; ++ ops->retlen += len; ++ ++ ecc_en = FLAG_ECC_EN; ++ } ++ ret = nfc_write_page(ra, ra->buffers, page, FLAG_USE_GDMA | FLAG_VERIFY | ++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0 : ecc_en )); ++ if (ret) { ++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); ++ return ret; ++ } ++ ++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_GOOD); ++ ++ addr = (page+1) << ra->page_shift; ++ ++ } ++ return 0; ++} ++ ++/** ++ * nand_do_read_ops - [Internal] Read data with ECC ++ * ++ * @mtd: MTD device structure ++ * @from: offset to read from ++ * @ops: oob ops structure ++ * ++ * Internal function. Called with chip held. ++ */ ++static int nand_do_read_ops(struct ra_nand_chip *ra, loff_t from, ++ struct mtd_oob_ops *ops) ++{ ++ int page; ++ uint32_t datalen = ops->len; ++ uint32_t ooblen = ops->ooblen; ++ uint8_t *oob = ops->oobbuf; ++ uint8_t *data = ops->datbuf; ++ int pagesize = (1<page_shift); ++ int pagemask = (pagesize -1); ++ loff_t addr = from; ++ //int i = 0; //for ra_dbg only ++ ++ ra_dbg("%s: addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", ++ __func__, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); ++ ++ ops->retlen = 0; ++ ops->oobretlen = 0; ++ if (data == 0) ++ datalen = 0; ++ ++ ++ while(datalen || ooblen) { ++ int len; ++ int ret; ++ int offs; ++ ++ ra_dbg("%s (%d): addr:%x, ops data:%p, oob:%p datalen:%x ooblen:%x, ooboffs:%x \n", ++ __func__, i++, (unsigned int)addr, data, oob, datalen, ooblen, ops->ooboffs); ++ /* select chip */ ++ if (nfc_enable_chip(ra, addr, 1) < 0) ++ return -EIO; ++ ++ page = (int)((addr & ((1<chip_shift)-1)) >> ra->page_shift); ++ ++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_VERIFY | ++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0: FLAG_ECC_EN )); ++ //FIXME, something strange here, some page needs 2 more tries to guarantee read success. ++ if (ret) { ++ printk("read again:\n"); ++ ret = nfc_read_page(ra, ra->buffers, page, FLAG_VERIFY | ++ ((ops->mode == MTD_OPS_RAW || ops->mode == MTD_OPS_PLACE_OOB) ? 0: FLAG_ECC_EN )); ++ ++ if (ret) { ++ printk("read again fail \n"); ++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_BAD); ++ if ((ret != -EUCLEAN) && (ret != -EBADMSG)) { ++ return ret; ++ } ++ else { ++ /* ecc verification fail, but data need to be returned. */ ++ } ++ } ++ else { ++ printk(" read agian susccess \n"); ++ } ++ } ++ ++ // oob read ++ if (oob && ooblen > 0) { ++ len = nand_read_oob_buf(ra, oob, ooblen, ops->mode, ops->ooboffs); ++ if (len < 0) { ++ printk("nand_read_oob_buf: fail return %x \n", len); ++ return -EINVAL; ++ } ++ ++ oob += len; ++ ops->oobretlen += len; ++ ooblen -= len; ++ } ++ ++ // data read ++ offs = addr & pagemask; ++ len = min_t(size_t, datalen, pagesize - offs); ++ if (data && len > 0) { ++ memcpy(data, ra->buffers + offs, len); // we can not sure ops->buf wether is DMA-able. ++ ++ data += len; ++ datalen -= len; ++ ops->retlen += len; ++ if (ret) ++ return ret; ++ } ++ ++ ++ ra_nand_bbt_set(ra, addr >> ra->erase_shift, BBT_TAG_GOOD); ++ // address go further to next page, instead of increasing of length of write. This avoids some special cases wrong. ++ addr = (page+1) << ra->page_shift; ++ } ++ return 0; ++} ++ ++static int ++ramtd_nand_erase(struct mtd_info *mtd, struct erase_info *instr) ++{ ++ struct ra_nand_chip *ra = (struct ra_nand_chip *)mtd->priv; ++ int ret; ++ ++ ra_dbg("%s: start:%x, len:%x \n", __func__, ++ (unsigned int)instr->addr, (unsigned int)instr->len); ++ ++ nand_get_device(ra, FL_ERASING); ++ ret = _nand_erase_nand((struct ra_nand_chip *)mtd->priv, instr); ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++static int ++ramtd_nand_write(struct mtd_info *mtd, loff_t to, size_t len, ++ size_t *retlen, const uint8_t *buf) ++{ ++ struct ra_nand_chip *ra = mtd->priv; ++ struct mtd_oob_ops ops; ++ int ret; ++ ++ ra_dbg("%s: to 0x%x len=0x%x\n", __func__, to, len); ++ ++ if ((to + len) > mtd->size) ++ return -EINVAL; ++ ++ if (!len) ++ return 0; ++ ++ nand_get_device(ra, FL_WRITING); ++ ++ memset(&ops, 0, sizeof(ops)); ++ ops.len = len; ++ ops.datbuf = (uint8_t *)buf; ++ ops.oobbuf = NULL; ++ ops.mode = MTD_OPS_AUTO_OOB; ++ ++ ret = nand_do_write_ops(ra, to, &ops); ++ ++ *retlen = ops.retlen; ++ ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++static int ++ramtd_nand_read(struct mtd_info *mtd, loff_t from, size_t len, ++ size_t *retlen, uint8_t *buf) ++{ ++ struct ra_nand_chip *ra = mtd->priv; ++ int ret; ++ struct mtd_oob_ops ops; ++ ++ ra_dbg("%s: mtd:%p from:%x, len:%x, buf:%p \n", __func__, mtd, (unsigned int)from, len, buf); ++ ++ /* Do not allow reads past end of device */ ++ if ((from + len) > mtd->size) ++ return -EINVAL; ++ if (!len) ++ return 0; ++ ++ nand_get_device(ra, FL_READING); ++ ++ memset(&ops, 0, sizeof(ops)); ++ ops.len = len; ++ ops.datbuf = buf; ++ ops.oobbuf = NULL; ++ ops.mode = MTD_OPS_AUTO_OOB; ++ ++ ret = nand_do_read_ops(ra, from, &ops); ++ ++ *retlen = ops.retlen; ++ ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++static int ++ramtd_nand_readoob(struct mtd_info *mtd, loff_t from, ++ struct mtd_oob_ops *ops) ++{ ++ struct ra_nand_chip *ra = mtd->priv; ++ int ret; ++ ++ ra_dbg("%s: \n", __func__); ++ ++ nand_get_device(ra, FL_READING); ++ ++ ret = nand_do_read_ops(ra, from, ops); ++ ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++static int ++ramtd_nand_writeoob(struct mtd_info *mtd, loff_t to, ++ struct mtd_oob_ops *ops) ++{ ++ struct ra_nand_chip *ra = mtd->priv; ++ int ret; ++ ++ nand_get_device(ra, FL_READING); ++ ret = nand_do_write_ops(ra, to, ops); ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++static int ++ramtd_nand_block_isbad(struct mtd_info *mtd, loff_t offs) ++{ ++ if (offs > mtd->size) ++ return -EINVAL; ++ ++ return nand_block_checkbad((struct ra_nand_chip *)mtd->priv, offs); ++} ++ ++static int ++ramtd_nand_block_markbad(struct mtd_info *mtd, loff_t ofs) ++{ ++ struct ra_nand_chip *ra = mtd->priv; ++ int ret; ++ ++ ra_dbg("%s: \n", __func__); ++ nand_get_device(ra, FL_WRITING); ++ ret = nand_block_markbad(ra, ofs); ++ nand_release_device(ra); ++ ++ return ret; ++} ++ ++// 1-bit error detection ++static int one_bit_correction(char *ecc1, char *ecc2, int *bytes, int *bits) ++{ ++ // check if ecc and expected are all valid ++ char *p, nibble, crumb; ++ int i, xor, iecc1 = 0, iecc2 = 0; ++ ++ printk("correction : %x %x %x\n", ecc1[0], ecc1[1], ecc1[2]); ++ printk("correction : %x %x %x\n", ecc2[0], ecc2[1], ecc2[2]); ++ ++ p = (char *)ecc1; ++ for (i = 0; i < CONFIG_ECC_BYTES; i++) ++ { ++ nibble = *(p+i) & 0xf; ++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && ++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) ++ return -1; ++ nibble = ((*(p+i)) >> 4) & 0xf; ++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && ++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) ++ return -1; ++ } ++ ++ p = (char *)ecc2; ++ for (i = 0; i < CONFIG_ECC_BYTES; i++) ++ { ++ nibble = *(p+i) & 0xf; ++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && ++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) ++ return -1; ++ nibble = ((*(p+i)) >> 4) & 0xf; ++ if ((nibble != 0x0) && (nibble != 0xf) && (nibble != 0x3) && (nibble != 0xc) && ++ (nibble != 0x5) && (nibble != 0xa) && (nibble != 0x6) && (nibble != 0x9)) ++ return -1; ++ } ++ ++ memcpy(&iecc1, ecc1, 3); ++ memcpy(&iecc2, ecc2, 3); ++ ++ xor = iecc1 ^ iecc2; ++ printk("xor = %x (%x %x)\n", xor, iecc1, iecc2); ++ ++ *bytes = 0; ++ for (i = 0; i < 9; i++) ++ { ++ crumb = (xor >> (2*i)) & 0x3; ++ if ((crumb == 0x0) || (crumb == 0x3)) ++ return -1; ++ if (crumb == 0x2) ++ *bytes += (1 << i); ++ } ++ ++ *bits = 0; ++ for (i = 0; i < 3; i++) ++ { ++ crumb = (xor >> (18 + 2*i)) & 0x3; ++ if ((crumb == 0x0) || (crumb == 0x3)) ++ return -1; ++ if (crumb == 0x2) ++ *bits += (1 << i); ++ } ++ ++ return 0; ++} ++ ++/************************************************************ ++ * the init/exit section. ++ */ ++ ++static struct nand_ecclayout ra_oob_layout = { ++ .eccbytes = CONFIG_ECC_BYTES, ++ .eccpos = {5, 6, 7}, ++ .oobfree = { ++ {.offset = 0, .length = 4}, ++ {.offset = 8, .length = 8}, ++ {.offset = 0, .length = 0} ++ }, ++#define RA_CHIP_OOB_AVAIL (4+8) ++ .oobavail = RA_CHIP_OOB_AVAIL, ++ // 5th byte is bad-block flag. ++}; ++ ++static int ++mtk_nand_probe(struct platform_device *pdev) ++{ ++ struct mtd_part_parser_data ppdata; ++ struct ra_nand_chip *ra; ++ int alloc_size, bbt_size, buffers_size, reg, err; ++ unsigned char chip_mode = 12; ++ ++ /* if(ra_check_flash_type()!=BOOT_FROM_NAND) { ++ return 0; ++ }*/ ++ ++ //FIXME: config 512 or 2048-byte page according to HWCONF ++#if defined (CONFIG_SOC_MT7620) ++ ra_outl(RALINK_SYSCTL_BASE+0x60, ra_inl(RALINK_SYSCTL_BASE+0x60) & ~(0x3<<18)); ++ reg = ra_inl(RALINK_SYSCTL_BASE+0x10); ++ chip_mode = (reg & 0x0F); ++ if((chip_mode==1)||(chip_mode==11)) { ++ ra_or(NFC_CONF1, 1); ++ is_nand_page_2048 = 1; ++ nand_addrlen = ((chip_mode!=11) ? 4 : 5); ++ printk("!!! nand page size = 2048, addr len=%d\n", nand_addrlen); ++ } ++ else { ++ ra_and(NFC_CONF1, ~1); ++ is_nand_page_2048 = 0; ++ nand_addrlen = ((chip_mode!=10) ? 3 : 4); ++ printk("!!! nand page size = 512, addr len=%d\n", nand_addrlen); ++ } ++#else ++ is_nand_page_2048 = 0; ++ nand_addrlen = 3; ++ printk("!!! nand page size = 512, addr len=%d\n", nand_addrlen); ++#endif ++ ++#if defined (CONFIG_SOC_MT7620) ++ //config ECC location ++ ra_and(NFC_CONF1, 0xfff000ff); ++ ra_or(NFC_CONF1, ((CONFIG_ECC_OFFSET + 2) << 16) + ++ ((CONFIG_ECC_OFFSET + 1) << 12) + ++ (CONFIG_ECC_OFFSET << 8)); ++#endif ++ ++#define ALIGNE_16(a) (((unsigned long)(a)+15) & ~15) ++ buffers_size = ALIGNE_16((1<buffers ++ bbt_size = BBTTAG_BITS * (1<<(CONFIG_CHIP_SIZE_BIT - (CONFIG_PAGE_SIZE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT))) / 8; //ra->bbt ++ bbt_size = ALIGNE_16(bbt_size); ++ ++ alloc_size = buffers_size + bbt_size; ++ alloc_size += buffers_size; //for ra->readback_buffers ++ alloc_size += sizeof(*ra); ++ alloc_size += sizeof(*ranfc_mtd); ++ ++ //make sure gpio-0 is input ++ ra_outl(RALINK_PIO_BASE+0x24, ra_inl(RALINK_PIO_BASE+0x24) & ~0x01); ++ ++ ra = (struct ra_nand_chip *)kzalloc(alloc_size, GFP_KERNEL | GFP_DMA); ++ if (!ra) { ++ printk("%s: mem alloc fail \n", __func__); ++ return -ENOMEM; ++ } ++ memset(ra, 0, alloc_size); ++ ++ //dynamic ++ ra->buffers = (char *)((char *)ra + sizeof(*ra)); ++ ra->readback_buffers = ra->buffers + buffers_size; ++ ra->bbt = ra->readback_buffers + buffers_size; ++ ranfc_mtd = (struct mtd_info *)(ra->bbt + bbt_size); ++ ++ //static ++ ra->numchips = CONFIG_NUMCHIPS; ++ ra->chip_shift = CONFIG_CHIP_SIZE_BIT; ++ ra->page_shift = CONFIG_PAGE_SIZE_BIT; ++ ra->oob_shift = CONFIG_OOBSIZE_PER_PAGE_BIT; ++ ra->erase_shift = (CONFIG_PAGE_SIZE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT); ++ ra->badblockpos = CONFIG_BAD_BLOCK_POS; ++ ra_oob_layout.eccpos[0] = CONFIG_ECC_OFFSET; ++ ra_oob_layout.eccpos[1] = CONFIG_ECC_OFFSET + 1; ++ ra_oob_layout.eccpos[2] = CONFIG_ECC_OFFSET + 2; ++ ra->oob = &ra_oob_layout; ++ ra->buffers_page = -1; ++ ++#if defined (WORKAROUND_RX_BUF_OV) ++ if (ranfc_verify) { ++ ra->sandbox_page = nand_bbt_find_sandbox(ra); ++ } ++#endif ++ ra_outl(NFC_CTRL, ra_inl(NFC_CTRL) | 0x01); //set wp to high ++ nfc_all_reset(); ++ ++ ranfc_mtd->type = MTD_NANDFLASH; ++ ranfc_mtd->flags = MTD_CAP_NANDFLASH; ++ ranfc_mtd->size = CONFIG_NUMCHIPS * CFG_CHIPSIZE; ++ ranfc_mtd->erasesize = CFG_BLOCKSIZE; ++ ranfc_mtd->writesize = CFG_PAGESIZE; ++ ranfc_mtd->writebufsize = ranfc_mtd->writesize; ++ ranfc_mtd->oobsize = CFG_PAGE_OOBSIZE; ++ ranfc_mtd->oobavail = RA_CHIP_OOB_AVAIL; ++ ranfc_mtd->name = "ra_nfc"; ++ //ranfc_mtd->index ++ //ranfc_mtd->ecclayout = &ra_oob_layout; ++ //ranfc_mtd->numberaseregions ++ //ranfc_mtd->eraseregions ++ //ranfc_mtd->bansize ++ ranfc_mtd->_erase = ramtd_nand_erase; ++ //ranfc_mtd->point ++ //ranfc_mtd->unpoint ++ ranfc_mtd->_read = ramtd_nand_read; ++ ranfc_mtd->_write = ramtd_nand_write; ++ //ranfc_mtd->_read_oob = ramtd_nand_readoob; ++ //ranfc_mtd->_write_oob = ramtd_nand_writeoob; ++ //ranfc_mtd->get_fact_prot_info; ranfc_mtd->read_fact_prot_reg; ++ //ranfc_mtd->get_user_prot_info; ranfc_mtd->read_user_prot_reg; ++ //ranfc_mtd->write_user_prot_reg; ranfc_mtd->lock_user_prot_reg; ++ //ranfc_mtd->writev; ranfc_mtd->sync; ranfc_mtd->lock; ranfc_mtd->unlock; ranfc_mtd->suspend; ranfc_mtd->resume; ++ ranfc_mtd->_block_isbad = ramtd_nand_block_isbad; ++ ranfc_mtd->_block_markbad = ramtd_nand_block_markbad; ++ //ranfc_mtd->reboot_notifier ++ //ranfc_mtd->ecc_stats; ++ // subpage_sht; ++ ++ //ranfc_mtd->get_device; ranfc_mtd->put_device ++ ranfc_mtd->priv = ra; ++ ++ ranfc_mtd->owner = THIS_MODULE; ++ ra->controller = &ra->hwcontrol; ++ mutex_init(ra->controller); ++ ++ printk("%s: alloc %x, at %p , btt(%p, %x), ranfc_mtd:%p\n", ++ __func__, alloc_size, ra, ra->bbt, bbt_size, ranfc_mtd); ++ ++ mtd_set_of_node(ranfc_mtd, pdev->dev.of_node); ++ err = mtd_device_parse_register(ranfc_mtd, mtk_probe_types, ++ &ppdata, NULL, 0); ++ ++ return err; ++} ++ ++static int ++mtk_nand_remove(struct platform_device *pdev) ++{ ++ struct ra_nand_chip *ra; ++ ++ if (ranfc_mtd) { ++ ra = (struct ra_nand_chip *)ranfc_mtd->priv; ++ ++ /* Deregister partitions */ ++ //del_mtd_partitions(ranfc_mtd); ++ kfree(ra); ++ } ++ return 0; ++} ++ ++static const struct of_device_id mtk_nand_match[] = { ++ { .compatible = "mtk,mt7620-nand" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(of, mtk_nand_match); ++ ++static struct platform_driver mtk_nand_driver = { ++ .probe = mtk_nand_probe, ++ .remove = mtk_nand_remove, ++ .driver = { ++ .name = "mt7620_nand", ++ .owner = THIS_MODULE, ++ .of_match_table = mtk_nand_match, ++ }, ++}; ++ ++module_platform_driver(mtk_nand_driver); ++ ++MODULE_LICENSE("GPL"); +diff --git a/drivers/mtd/maps/ralink_nand.h b/drivers/mtd/maps/ralink_nand.h +new file mode 100644 +index 000000000..b94dc0947 +--- /dev/null ++++ b/drivers/mtd/maps/ralink_nand.h +@@ -0,0 +1,240 @@ ++#ifndef RT2880_NAND_H ++#define RT2880_NAND_H ++ ++#include ++ ++#define MTD_ERASE_PENDING 0x01 ++#define MTD_ERASING 0x02 ++#define MTD_ERASE_SUSPEND 0x04 ++#define MTD_ERASE_DONE 0x08 ++#define MTD_ERASE_FAILED 0x10 ++ ++#define MTD_FAIL_ADDR_UNKNOWN -1LL ++ ++//#include "gdma.h" ++ ++#define RALINK_SYSCTL_BASE 0xB0000000 ++#define RALINK_PIO_BASE 0xB0000600 ++#define RALINK_NAND_CTRL_BASE 0xB0000810 ++#define CONFIG_RALINK_MT7620 ++ ++#define SKIP_BAD_BLOCK ++//#define RANDOM_GEN_BAD_BLOCK ++ ++#define ra_inl(addr) (*(volatile unsigned int *)(addr)) ++#define ra_outl(addr, value) (*(volatile unsigned int *)(addr) = (value)) ++#define ra_aor(addr, a_mask, o_value) ra_outl(addr, (ra_inl(addr) & (a_mask)) | (o_value)) ++#define ra_and(addr, a_mask) ra_aor(addr, a_mask, 0) ++#define ra_or(addr, o_value) ra_aor(addr, -1, o_value) ++ ++ ++#define CONFIG_NUMCHIPS 1 ++#define CONFIG_NOT_SUPPORT_WP //rt3052 has no WP signal for chip. ++//#define CONFIG_NOT_SUPPORT_RB ++ ++extern int is_nand_page_2048; ++extern const unsigned int nand_size_map[2][3]; ++ ++//chip ++// chip geometry: SAMSUNG small size 32MB. ++#define CONFIG_CHIP_SIZE_BIT (nand_size_map[is_nand_page_2048][nand_addrlen-3]) //! (1<=32)? 31 : CONFIG_CHIP_SIZE_BIT)) ++//#define CFG_CHIPSIZE (1 << CONFIG_CHIP_SIZE_BIT) ++#define CFG_PAGESIZE (1 << CONFIG_PAGE_SIZE_BIT) ++#define CFG_BLOCKSIZE (CFG_PAGESIZE << CONFIG_NUMPAGE_PER_BLOCK_BIT) ++#define CFG_NUMPAGE (1 << (CONFIG_CHIP_SIZE_BIT - CONFIG_PAGE_SIZE_BIT)) ++#define CFG_NUMBLOCK (CFG_NUMPAGE >> CONFIG_NUMPAGE_PER_BLOCK_BIT) ++#define CFG_BLOCK_OOBSIZE (1 << (CONFIG_OOBSIZE_PER_PAGE_BIT + CONFIG_NUMPAGE_PER_BLOCK_BIT)) ++#define CFG_PAGE_OOBSIZE (1 << CONFIG_OOBSIZE_PER_PAGE_BIT) ++ ++#define NAND_BLOCK_ALIGN(addr) ((addr) & (CFG_BLOCKSIZE-1)) ++#define NAND_PAGE_ALIGN(addr) ((addr) & (CFG_PAGESIZE-1)) ++ ++ ++#define NFC_BASE RALINK_NAND_CTRL_BASE ++#define NFC_CTRL (NFC_BASE + 0x0) ++#define NFC_CONF (NFC_BASE + 0x4) ++#define NFC_CMD1 (NFC_BASE + 0x8) ++#define NFC_CMD2 (NFC_BASE + 0xc) ++#define NFC_CMD3 (NFC_BASE + 0x10) ++#define NFC_ADDR (NFC_BASE + 0x14) ++#define NFC_DATA (NFC_BASE + 0x18) ++#if defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6855A) || \ ++ defined (CONFIG_RALINK_MT7620) || defined (CONFIG_RALINK_MT7621) ++#define NFC_ECC (NFC_BASE + 0x30) ++#else ++#define NFC_ECC (NFC_BASE + 0x1c) ++#endif ++#define NFC_STATUS (NFC_BASE + 0x20) ++#define NFC_INT_EN (NFC_BASE + 0x24) ++#define NFC_INT_ST (NFC_BASE + 0x28) ++#if defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6855A) || \ ++ defined (CONFIG_RALINK_MT7620) || defined (CONFIG_RALINK_MT7621) ++#define NFC_CONF1 (NFC_BASE + 0x2c) ++#define NFC_ECC_P1 (NFC_BASE + 0x30) ++#define NFC_ECC_P2 (NFC_BASE + 0x34) ++#define NFC_ECC_P3 (NFC_BASE + 0x38) ++#define NFC_ECC_P4 (NFC_BASE + 0x3c) ++#define NFC_ECC_ERR1 (NFC_BASE + 0x40) ++#define NFC_ECC_ERR2 (NFC_BASE + 0x44) ++#define NFC_ECC_ERR3 (NFC_BASE + 0x48) ++#define NFC_ECC_ERR4 (NFC_BASE + 0x4c) ++#define NFC_ADDR2 (NFC_BASE + 0x50) ++#endif ++ ++enum _int_stat { ++ INT_ST_ND_DONE = 1<<0, ++ INT_ST_TX_BUF_RDY = 1<<1, ++ INT_ST_RX_BUF_RDY = 1<<2, ++ INT_ST_ECC_ERR = 1<<3, ++ INT_ST_TX_TRAS_ERR = 1<<4, ++ INT_ST_RX_TRAS_ERR = 1<<5, ++ INT_ST_TX_KICK_ERR = 1<<6, ++ INT_ST_RX_KICK_ERR = 1<<7 ++}; ++ ++ ++//#define WORKAROUND_RX_BUF_OV 1 ++ ++ ++/************************************************************* ++ * stolen from nand.h ++ *************************************************************/ ++ ++/* ++ * Standard NAND flash commands ++ */ ++#define NAND_CMD_READ0 0 ++#define NAND_CMD_READ1 1 ++#define NAND_CMD_RNDOUT 5 ++#define NAND_CMD_PAGEPROG 0x10 ++#define NAND_CMD_READOOB 0x50 ++#define NAND_CMD_ERASE1 0x60 ++#define NAND_CMD_STATUS 0x70 ++#define NAND_CMD_STATUS_MULTI 0x71 ++#define NAND_CMD_SEQIN 0x80 ++#define NAND_CMD_RNDIN 0x85 ++#define NAND_CMD_READID 0x90 ++#define NAND_CMD_ERASE2 0xd0 ++#define NAND_CMD_RESET 0xff ++ ++/* Extended commands for large page devices */ ++#define NAND_CMD_READSTART 0x30 ++#define NAND_CMD_RNDOUTSTART 0xE0 ++#define NAND_CMD_CACHEDPROG 0x15 ++ ++/* Extended commands for AG-AND device */ ++/* ++ * Note: the command for NAND_CMD_DEPLETE1 is really 0x00 but ++ * there is no way to distinguish that from NAND_CMD_READ0 ++ * until the remaining sequence of commands has been completed ++ * so add a high order bit and mask it off in the command. ++ */ ++#define NAND_CMD_DEPLETE1 0x100 ++#define NAND_CMD_DEPLETE2 0x38 ++#define NAND_CMD_STATUS_MULTI 0x71 ++#define NAND_CMD_STATUS_ERROR 0x72 ++/* multi-bank error status (banks 0-3) */ ++#define NAND_CMD_STATUS_ERROR0 0x73 ++#define NAND_CMD_STATUS_ERROR1 0x74 ++#define NAND_CMD_STATUS_ERROR2 0x75 ++#define NAND_CMD_STATUS_ERROR3 0x76 ++#define NAND_CMD_STATUS_RESET 0x7f ++#define NAND_CMD_STATUS_CLEAR 0xff ++ ++#define NAND_CMD_NONE -1 ++ ++/* Status bits */ ++#define NAND_STATUS_FAIL 0x01 ++#define NAND_STATUS_FAIL_N1 0x02 ++#define NAND_STATUS_TRUE_READY 0x20 ++#define NAND_STATUS_READY 0x40 ++#define NAND_STATUS_WP 0x80 ++ ++typedef enum { ++ FL_READY, ++ FL_READING, ++ FL_WRITING, ++ FL_ERASING, ++ FL_SYNCING, ++ FL_CACHEDPRG, ++ FL_PM_SUSPENDED, ++} nand_state_t; ++ ++/*************************************************************/ ++ ++ ++ ++typedef enum _ra_flags { ++ FLAG_NONE = 0, ++ FLAG_ECC_EN = (1<<0), ++ FLAG_USE_GDMA = (1<<1), ++ FLAG_VERIFY = (1<<2), ++} RA_FLAGS; ++ ++ ++#define BBTTAG_BITS 2 ++#define BBTTAG_BITS_MASK ((1< obj-$(CONFIG_MTD_NAND_TEGRA) += tegra_nand.o --- /dev/null +++ b/drivers/mtd/nand/raw/mt7621_nand.c -@@ -0,0 +1,1348 @@ +@@ -0,0 +1,1350 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MT7621 NAND Flash Controller driver @@ -1155,9 +1155,11 @@ Signed-off-by: Weijie Gao + uint32_t i, j; + u8 *oobptr; + -+ for (i = 0; i < mtd->writesize; i++) -+ if (buf[i] != 0xff) -+ return 0; ++ if (buf) { ++ for (i = 0; i < mtd->writesize; i++) ++ if (buf[i] != 0xff) ++ return 0; ++ } + + for (i = 0; i < nand->ecc.steps; i++) { + oobptr = oob_fdm_ptr(nand, i); diff --git a/target/linux/ramips/patches-5.4/991-at803x.patch b/target/linux/ramips/patches-5.4/991-at803x.patch index dd1d2755e..af0132f8f 100644 --- a/target/linux/ramips/patches-5.4/991-at803x.patch +++ b/target/linux/ramips/patches-5.4/991-at803x.patch @@ -1,6 +1,6 @@ -From 60ae82b0ea56c279be384b99cd2a42ae5ba7c5c7 Mon Sep 17 00:00:00 2001 +From 924453aa9d2324e5611f8e2b71df746d8f0c79f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= -Date: Mon, 4 Nov 2019 22:22:17 +0100 +Date: Fri, 13 Nov 2020 16:11:32 +0100 Subject: [PATCH] net: phy: at803x: add support for SFP module in RGMII-to-x-base mode MIME-Version: 1.0 @@ -9,20 +9,21 @@ Content-Transfer-Encoding: 8bit Signed-off-by: René van Dorst --- - drivers/net/phy/at803x.c | 74 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 74 insertions(+) + drivers/net/phy/at803x.c | 91 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 91 insertions(+) --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c -@@ -14,6 +14,7 @@ +@@ -14,6 +14,8 @@ #include #include #include +#include ++#include #define AT803X_SPECIFIC_STATUS 0x11 #define AT803X_SS_SPEED_MASK (3 << 14) -@@ -53,9 +54,18 @@ +@@ -53,9 +55,18 @@ #define AT803X_MODE_CFG_MASK 0x0F #define AT803X_MODE_CFG_SGMII 0x01 @@ -41,7 +42,7 @@ Signed-off-by: René van Dorst #define AT803X_DEBUG_REG_0 0x00 #define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15) -@@ -243,10 +253,56 @@ static int at803x_resume(struct phy_devi +@@ -243,10 +254,72 @@ static int at803x_resume(struct phy_devi return phy_modify(phydev, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, 0); } @@ -59,23 +60,39 @@ Signed-off-by: René van Dorst + +static int at803x_sfp_insert(void *upstream, const struct sfp_eeprom_id *id) +{ -+ struct phy_device *phydev = upstream; ++ __ETHTOOL_DECLARE_LINK_MODE_MASK(at803x_support) = { 0, }; + __ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, }; ++ struct phy_device *phydev = upstream; + phy_interface_t iface; + ++ phylink_set(at803x_support, 1000baseX_Full); ++ /* AT803x only support 1000baseX but SGMII works fine when module runs ++ * at 1Gbit. ++ */ ++ phylink_set(at803x_support, 1000baseT_Full); ++ + sfp_parse_support(phydev->sfp_bus, id, support); ++ ++ // Limit to interfaces that both sides support ++ linkmode_and(support, support, at803x_support); ++ ++ if (linkmode_empty(support)) ++ goto unsupported_mode; ++ + iface = sfp_select_interface(phydev->sfp_bus, support); + + if (iface != PHY_INTERFACE_MODE_SGMII && -+ iface != PHY_INTERFACE_MODE_1000BASEX) { -+ dev_info(&phydev->mdio.dev, "incompatible SFP module inserted;" -+ "Only SGMII/1000BASEX are supported!\n"); -+ return -EINVAL; -+ } ++ iface != PHY_INTERFACE_MODE_1000BASEX) ++ goto unsupported_mode; + + dev_info(&phydev->mdio.dev, "SFP interface %s", phy_modes(iface)); + + return 0; ++ ++unsupported_mode: ++ dev_info(&phydev->mdio.dev, "incompatible SFP module inserted;" ++ "Only SGMII at 1Gbit/1000BASEX are supported!\n"); ++ return -EINVAL; +} + +static const struct sfp_upstream_ops at803x_sfp_ops = { @@ -98,7 +115,7 @@ Signed-off-by: René van Dorst priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) -@@ -394,6 +450,10 @@ static int at803x_read_status(struct phy +@@ -394,6 +467,10 @@ static int at803x_read_status(struct phy { int ss, err, old_link = phydev->link; @@ -109,7 +126,7 @@ Signed-off-by: René van Dorst /* Update the link, but return if there was an error */ err = genphy_update_link(phydev); if (err) -@@ -448,6 +508,19 @@ static int at803x_read_status(struct phy +@@ -448,6 +525,19 @@ static int at803x_read_status(struct phy return 0; } @@ -129,7 +146,7 @@ Signed-off-by: René van Dorst static struct phy_driver at803x_driver[] = { { /* ATHEROS 8035 */ -@@ -491,6 +564,7 @@ static struct phy_driver at803x_driver[] +@@ -491,6 +581,7 @@ static struct phy_driver at803x_driver[] .suspend = at803x_suspend, .resume = at803x_resume, /* PHY_GBIT_FEATURES */ -- GitLab