diff --git a/config/Config-images.in b/config/Config-images.in index 9afba668f2..4da1821054 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -120,13 +120,6 @@ menu "Target Images" help Create an ext4 filesystem with a journal. - config TARGET_ROOTFS_ISO - bool "iso" - default n - depends on TARGET_x86_generic - help - Create a bootable ISO image. - config TARGET_ROOTFS_JFFS2 bool "jffs2" depends on USES_JFFS2 @@ -191,7 +184,7 @@ menu "Target Images" config GRUB_IMAGES bool "Build GRUB images (Linux x86 or x86_64 host only)" depends on TARGET_x86 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS + depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 default y @@ -237,6 +230,11 @@ menu "Target Images" This is the title of the GRUB menu entry. If unspecified, it defaults to OpenWrt. + config ISO_IMAGES + bool "Build LiveCD image (ISO)" + depends on TARGET_x86 + select GRUB_IMAGES + config VDI_IMAGES bool "Build VirtualBox image files (VDI)" depends on TARGET_x86 @@ -260,14 +258,14 @@ menu "Target Images" config TARGET_KERNEL_PARTSIZE int "Kernel partition size (in MB)" - depends on GRUB_IMAGES || USES_BOOT_PART + depends on USES_BOOT_PART default 8 if TARGET_apm821xx_sata default 64 if TARGET_bcm27xx default 16 config TARGET_ROOTFS_PARTSIZE int "Root filesystem partition size (in MB)" - depends on GRUB_IMAGES || USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_omap || TARGET_rb532 || TARGET_sunxi || TARGET_uml + depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_omap || TARGET_rb532 || TARGET_sunxi || TARGET_uml default 160 help Select the root filesystem partition size. diff --git a/config/Config-kernel.in b/config/Config-kernel.in index a2b7d41032..04946db68d 100644 --- a/config/Config-kernel.in +++ b/config/Config-kernel.in @@ -477,10 +477,14 @@ config KERNEL_KEXEC config KERNEL_PROC_VMCORE bool +config KERNEL_PROC_KCORE + bool + config KERNEL_CRASH_DUMP depends on i386 || x86_64 || arm || armeb select KERNEL_KEXEC select KERNEL_PROC_VMCORE + select KERNEL_PROC_KCORE bool "Enable support for kexec crashdump" default y diff --git a/include/image-commands.mk b/include/image-commands.mk index 37cb083bbf..2ec1922044 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -414,3 +414,10 @@ define Build/kernel2minor kernel2minor -k $@ -r $@.new $(1) mv $@.new $@ endef + +# Convert a raw image into a $1 type image. +# E.g. | qemu-image vdi +define Build/qemu-image + qemu-img convert -f raw -O $1 $@ $@.new + @mv $@.new $@ +endef diff --git a/include/image.mk b/include/image.mk index 2436b94f81..8af5905c60 100644 --- a/include/image.mk +++ b/include/image.mk @@ -93,7 +93,6 @@ fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4 -fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE))) diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index b26ef64ca4..980a6e372a 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -82,6 +82,37 @@ define Host/Configure $(Host/Configure/Default) endef +define Host/Install + $(call Host/Install/Default) + + $(INSTALL_DIR) $(STAGING_DIR_HOST)/lib/grub/grub2-generic + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(STAGING_DIR_HOST)/lib/grub/i386-pc \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_HOST)/lib/grub/grub2-generic/core.img \ + at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga + + $(INSTALL_DIR) $(STAGING_DIR_HOST)/lib/grub/grub2-iso + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(STAGING_DIR_HOST)/lib/grub/i386-pc \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_HOST)/lib/grub/grub2-iso/eltorito.img \ + at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial vga + + $(INSTALL_DIR) $(STAGING_DIR_HOST)/lib/grub/grub2-legacy + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(STAGING_DIR_HOST)/lib/grub/i386-pc \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_HOST)/lib/grub/grub2-legacy/core.img \ + biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga +endef + define Package/grub2/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/ diff --git a/target/linux/x86/image/grub-early.cfg b/package/boot/grub2/files/grub-early.cfg similarity index 100% rename from target/linux/x86/image/grub-early.cfg rename to package/boot/grub2/files/grub-early.cfg diff --git a/package/boot/kexec-tools/files/kdump.defaults b/package/boot/kexec-tools/files/kdump.defaults index 2f15e757bf..62366a2950 100644 --- a/package/boot/kexec-tools/files/kdump.defaults +++ b/package/boot/kexec-tools/files/kdump.defaults @@ -1,10 +1,22 @@ #!/bin/sh +# kB disable if mem low than 256MB +memtotal=`grep MemTotal /proc/meminfo | awk '{print $2}'` +if test $memtotal -le 262144; then + exit 0 +fi +KZ=128 +if test $memtotal -ge 8388608; then + KZ=512 +elif test $memtotal -ge 4194304; then + KZ=256 +fi + case $(uname -m) in i?86|x86_64) if ! grep -q crashkernel /boot/grub/grub.cfg; then mount /boot -o remount,rw - sed -i 's/linux.*/& crashkernel=32M@32M/' /boot/grub/grub.cfg + sed -i "s/linux.*/& crashkernel=${KZ}M/" /boot/grub/grub.cfg mount /boot -o remount,ro fi ;; diff --git a/package/boot/kexec-tools/files/kdump.init b/package/boot/kexec-tools/files/kdump.init index 0955047156..9d0d2fc2fb 100755 --- a/package/boot/kexec-tools/files/kdump.init +++ b/package/boot/kexec-tools/files/kdump.init @@ -3,6 +3,8 @@ START=41 STOP=90 +BOOT_IMAGE=/boot/vmlinuz + EXTRA_COMMANDS="status" EXTRA_HELP=" status Print crashkernel status" diff --git a/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch b/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch new file mode 100644 index 0000000000..dfad21992b --- /dev/null +++ b/package/boot/kexec-tools/patches/100-kexec-tools-fix-for-Unhandled-rela-relocation-R_X86_64_PLT32-error.patch @@ -0,0 +1,14 @@ +diff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c +index 7fdde73..af33689 100644 +--- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c ++++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c +@@ -78,7 +78,8 @@ void machine_apply_elf_rel(struct mem_ehdr *UNUSED(ehdr), + if ((int64_t)value != *(int32_t *)location) + goto overflow; + break; +- case R_X86_64_PC32: ++ case R_X86_64_PC32: ++ case R_X86_64_PLT32: + *(uint32_t *)location = value - address; + break; + default: diff --git a/package/kernel/linux/modules/netdevices.mk b/package/kernel/linux/modules/netdevices.mk index fbb02f07c3..822e887662 100644 --- a/package/kernel/linux/modules/netdevices.mk +++ b/package/kernel/linux/modules/netdevices.mk @@ -323,7 +323,7 @@ define KernelPackage/switch-rtl8366-smi DEPENDS:=@GPIO_SUPPORT +kmod-swconfig +(TARGET_armvirt||TARGET_bcm27xx_bcm2708||TARGET_samsung||TARGET_tegra):kmod-of-mdio KCONFIG:=CONFIG_RTL8366_SMI FILES:=$(LINUX_DIR)/drivers/net/phy/rtl8366_smi.ko - AUTOLOAD:=$(call AutoLoad,42,rtl8366_smi) + AUTOLOAD:=$(call AutoLoad,42,rtl8366_smi,1) endef define KernelPackage/switch-rtl8366-smi/description @@ -371,7 +371,7 @@ define KernelPackage/switch-rtl8367b DEPENDS:=+kmod-switch-rtl8366-smi KCONFIG:=CONFIG_RTL8367B_PHY FILES:=$(LINUX_DIR)/drivers/net/phy/rtl8367b.ko - AUTOLOAD:=$(call AutoLoad,43,rtl8367b) + AUTOLOAD:=$(call AutoLoad,43,rtl8367b,1) endef define KernelPackage/switch-rtl8367b/description diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index d04ea7959b..4a4189bbfe 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -533,6 +533,7 @@ mac80211_prepare_vif() { NEWAPLIST="${NEWAPLIST}$ifname " [ -n "$hostapd_ctrl" ] || { + ap_ifname="${ifname}" hostapd_ctrl="${hostapd_ctrl:-/var/run/hostapd/$ifname}" } ;; @@ -753,13 +754,15 @@ mac80211_setup_vif() { json_get_var vif_enable enable 1 [ "$vif_enable" = 1 ] || action=down - logger ip link set dev "$ifname" $action - ip link set dev "$ifname" "$action" || { - wireless_setup_vif_failed IFUP_ERROR - json_select .. - return - } - [ -z "$vif_txpower" ] || iw dev "$ifname" set txpower fixed "${vif_txpower%%.*}00" + if [ "$mode" != "ap" ] || [ "$ifname" = "$ap_ifname" ]; then + logger ip link set dev "$ifname" $action + ip link set dev "$ifname" "$action" || { + wireless_setup_vif_failed IFUP_ERROR + json_select .. + return + } + [ -z "$vif_txpower" ] || iw dev "$ifname" set txpower fixed "${vif_txpower%%.*}00" + fi case "$mode" in mesh) @@ -924,6 +927,7 @@ drv_mac80211_setup() { has_ap= hostapd_ctrl= + ap_ifname= hostapd_noscan= for_each_interface "ap" mac80211_check_ap diff --git a/package/network/services/wireguard/Makefile b/package/network/services/wireguard/Makefile index 231f1f41bc..4007fa5d4d 100644 --- a/package/network/services/wireguard/Makefile +++ b/package/network/services/wireguard/Makefile @@ -11,12 +11,12 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=wireguard -PKG_VERSION:=0.0.20200215 +PKG_VERSION:=0.0.20200318 PKG_RELEASE:=1 PKG_SOURCE:=wireguard-linux-compat-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://git.zx2c4.com/wireguard-linux-compat/snapshot/ -PKG_HASH:=0def6f3608ec06f6dfc454aa5281a7c38b06ff27096cb341448d20602da4e923 +PKG_HASH:=fa74a8627f731754fbf4ea7d6ae8f571a2cfe8cd4b744a5f165065619cb836a1 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING diff --git a/package/network/utils/wireguard-tools/Makefile b/package/network/utils/wireguard-tools/Makefile index b2b71ce880..549329509a 100644 --- a/package/network/utils/wireguard-tools/Makefile +++ b/package/network/utils/wireguard-tools/Makefile @@ -11,12 +11,12 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=wireguard-tools -PKG_VERSION:=1.0.20200206 +PKG_VERSION:=1.0.20200319 PKG_RELEASE:=1 PKG_SOURCE:=wireguard-tools-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://git.zx2c4.com/wireguard-tools/snapshot/ -PKG_HASH:=f5207248c6a3c3e3bfc9ab30b91c1897b00802ed861e1f9faaed873366078c64 +PKG_HASH:=757ed31d4d48d5fd7853bfd9bfa6a3a1b53c24a94fe617439948784a2c0ed987 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING diff --git a/scripts/qemustart b/scripts/qemustart index dbb8deddaf..9ce03901aa 100755 --- a/scripts/qemustart +++ b/scripts/qemustart @@ -255,7 +255,7 @@ start_qemu_x86() { local mach="${o_mach:-pc}" [ -n "$rootfs" ] || { - rootfs="$o_bindir/openwrt-$o_target-${o_subtarget%-*}-combined-ext4.img" + rootfs="$o_bindir/openwrt-$o_target-${o_subtarget%-*}-generic-ext4-combined.img" if [ ! -f "$rootfs" -a -s "$rootfs.gz" ]; then gunzip "$rootfs.gz" fi diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c index be9f74f888..e7fe79302a 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -133,23 +133,51 @@ #define RTL8367B_CHIP_MODE_MASK 0x7 #define RTL8367B_CHIP_DEBUG0_REG 0x1303 -#define RTL8367B_CHIP_DEBUG0_DUMMY0(_x) BIT(8 + (_x)) +#define RTL8367B_DEBUG0_SEL33(_x) BIT(8 + (_x)) +#define RTL8367B_DEBUG0_DRI_OTHER BIT(7) +#define RTL8367B_DEBUG0_DRI_RG(_x) BIT(5 + (_x)) +#define RTL8367B_DEBUG0_DRI(_x) BIT(3 + (_x)) +#define RTL8367B_DEBUG0_SLR_OTHER BIT(2) +#define RTL8367B_DEBUG0_SLR(_x) BIT(_x) #define RTL8367B_CHIP_DEBUG1_REG 0x1304 +#define RTL8367B_DEBUG1_DN_MASK(_x) \ + GENMASK(6 + (_x)*8, 4 + (_x)*8) +#define RTL8367B_DEBUG1_DN_SHIFT(_x) (4 + (_x) * 8) +#define RTL8367B_DEBUG1_DP_MASK(_x) \ + GENMASK(2 + (_x) * 8, (_x) * 8) +#define RTL8367B_DEBUG1_DP_SHIFT(_x) ((_x) * 8) + +#define RTL8367B_CHIP_DEBUG2_REG 0x13e2 +#define RTL8367B_DEBUG2_RG2_DN_MASK GENMASK(8, 6) +#define RTL8367B_DEBUG2_RG2_DN_SHIFT 6 +#define RTL8367B_DEBUG2_RG2_DP_MASK GENMASK(5, 3) +#define RTL8367B_DEBUG2_RG2_DP_SHIFT 3 +#define RTL8367B_DEBUG2_DRI_EXT2_RG BIT(2) +#define RTL8367B_DEBUG2_DRI_EXT2 BIT(1) +#define RTL8367B_DEBUG2_SLR_EXT2 BIT(0) #define RTL8367B_DIS_REG 0x1305 #define RTL8367B_DIS_SKIP_MII_RXER(_x) BIT(12 + (_x)) #define RTL8367B_DIS_RGMII_SHIFT(_x) (4 * (_x)) #define RTL8367B_DIS_RGMII_MASK 0x7 -#define RTL8367B_EXT_RGMXF_REG(_x) (0x1306 + (_x)) +#define RTL8367B_DIS2_REG 0x13c3 +#define RTL8367B_DIS2_SKIP_MII_RXER_SHIFT 4 +#define RTL8367B_DIS2_SKIP_MII_RXER 0x10 +#define RTL8367B_DIS2_RGMII_SHIFT 0 +#define RTL8367B_DIS2_RGMII_MASK 0xf + +#define RTL8367B_EXT_RGMXF_REG(_x) \ + ((_x) == 2 ? 0x13c5 : 0x1306 + (_x)) #define RTL8367B_EXT_RGMXF_DUMMY0_SHIFT 5 #define RTL8367B_EXT_RGMXF_DUMMY0_MASK 0x7ff #define RTL8367B_EXT_RGMXF_TXDELAY_SHIFT 3 #define RTL8367B_EXT_RGMXF_TXDELAY_MASK 1 #define RTL8367B_EXT_RGMXF_RXDELAY_MASK 0x7 -#define RTL8367B_DI_FORCE_REG(_x) (0x1310 + (_x)) +#define RTL8367B_DI_FORCE_REG(_x) \ + ((_x) == 2 ? 0x13c4 : 0x1310 + (_x)) #define RTL8367B_DI_FORCE_MODE BIT(12) #define RTL8367B_DI_FORCE_NWAY BIT(7) #define RTL8367B_DI_FORCE_TXPAUSE BIT(6) @@ -754,8 +782,33 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, switch (mode) { case RTL8367_EXTIF_MODE_RGMII: case RTL8367_EXTIF_MODE_RGMII_33V: - REG_WR(smi, RTL8367B_CHIP_DEBUG0_REG, 0x0367); - REG_WR(smi, RTL8367B_CHIP_DEBUG1_REG, 0x7777); + REG_RMW(smi, RTL8367B_CHIP_DEBUG0_REG, + RTL8367B_DEBUG0_SEL33(id), + RTL8367B_DEBUG0_SEL33(id)); + if (id <= 1) { + REG_RMW(smi, RTL8367B_CHIP_DEBUG0_REG, + RTL8367B_DEBUG0_DRI(id) | + RTL8367B_DEBUG0_DRI_RG(id) | + RTL8367B_DEBUG0_SLR(id), + RTL8367B_DEBUG0_DRI_RG(id) | + RTL8367B_DEBUG0_SLR(id)); + REG_RMW(smi, RTL8367B_CHIP_DEBUG1_REG, + RTL8367B_DEBUG1_DN_MASK(id) | + RTL8367B_DEBUG1_DP_MASK(id), + (7 << RTL8367B_DEBUG1_DN_SHIFT(id)) | + (7 << RTL8367B_DEBUG1_DP_SHIFT(id))); + } else { + REG_RMW(smi, RTL8367B_CHIP_DEBUG1_REG, + RTL8367B_DEBUG2_DRI_EXT2 | + RTL8367B_DEBUG2_DRI_EXT2_RG | + RTL8367B_DEBUG2_SLR_EXT2 | + RTL8367B_DEBUG2_RG2_DN_MASK | + RTL8367B_DEBUG2_RG2_DP_MASK, + RTL8367B_DEBUG2_DRI_EXT2_RG | + RTL8367B_DEBUG2_SLR_EXT2 | + (7 << RTL8367B_DEBUG2_RG2_DN_SHIFT) | + (7 << RTL8367B_DEBUG2_RG2_DP_SHIFT)); + } break; case RTL8367_EXTIF_MODE_TMII_MAC: @@ -766,8 +819,8 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, case RTL8367_EXTIF_MODE_GMII: REG_RMW(smi, RTL8367B_CHIP_DEBUG0_REG, - RTL8367B_CHIP_DEBUG0_DUMMY0(id), - RTL8367B_CHIP_DEBUG0_DUMMY0(id)); + RTL8367B_DEBUG0_SEL33(id), + RTL8367B_DEBUG0_SEL33(id)); REG_RMW(smi, RTL8367B_EXT_RGMXF_REG(id), BIT(6), BIT(6)); break; @@ -785,9 +838,14 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, return -EINVAL; } - REG_RMW(smi, RTL8367B_DIS_REG, - RTL8367B_DIS_RGMII_MASK << RTL8367B_DIS_RGMII_SHIFT(id), - mode << RTL8367B_DIS_RGMII_SHIFT(id)); + if (id <= 1) + REG_RMW(smi, RTL8367B_DIS_REG, + RTL8367B_DIS_RGMII_MASK << RTL8367B_DIS_RGMII_SHIFT(id), + mode << RTL8367B_DIS_RGMII_SHIFT(id)); + else + REG_RMW(smi, RTL8367B_DIS2_REG, + RTL8367B_DIS2_RGMII_MASK << RTL8367B_DIS2_RGMII_SHIFT, + mode << RTL8367B_DIS2_RGMII_SHIFT); return 0; } @@ -931,6 +989,10 @@ static int rtl8367b_setup(struct rtl8366_smi *smi) err = rtl8367b_extif_init_of(smi, 1, "realtek,extif1"); if (err) return err; + + err = rtl8367b_extif_init_of(smi, 2, "realtek,extif2"); + if (err) + return err; } else { err = rtl8367b_extif_init(smi, 0, pdata->extif0_cfg); if (err) diff --git a/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch b/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch index f5ca1bef6e..2d3fe01a75 100644 --- a/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch +++ b/target/linux/generic/hack-5.4/645-netfilter-connmark-introduce-set-dscpmark.patch @@ -87,8 +87,8 @@ Signed-off-by: Kevin Darbyshire-Bryant }; enum { -+ XT_CONNMARK_VALUE = BIT(0), -+ XT_CONNMARK_DSCP = BIT(1) ++ XT_CONNMARK_VALUE = (1 << 0), ++ XT_CONNMARK_DSCP = (1 << 1) +}; + +enum { diff --git a/target/linux/mediatek/Makefile b/target/linux/mediatek/Makefile index 54572c1cd1..b0e020bce0 100644 --- a/target/linux/mediatek/Makefile +++ b/target/linux/mediatek/Makefile @@ -13,7 +13,6 @@ KERNEL_TESTING_PATCHVER:=5.4 include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += \ - kmod-mt76 kmod-leds-gpio kmod-gpio-button-hotplug \ - wpad-basic + kmod-leds-gpio kmod-gpio-button-hotplug $(eval $(call BuildTarget)) diff --git a/target/linux/mediatek/mt7622/target.mk b/target/linux/mediatek/mt7622/target.mk index b271869114..d4ec3cb661 100644 --- a/target/linux/mediatek/mt7622/target.mk +++ b/target/linux/mediatek/mt7622/target.mk @@ -2,7 +2,7 @@ ARCH:=aarch64 SUBTARGET:=mt7622 BOARDNAME:=MT7622 CPU_TYPE:=cortex-a53 - +DEFAULT_PACKAGES += kmod-mt7615e wpad-basic KERNELNAME:=Image dtbs define Target/Description diff --git a/target/linux/mediatek/mt7629/base-files/etc/board.d/02_network b/target/linux/mediatek/mt7629/base-files/etc/board.d/02_network index 757a390c24..24c66de788 100755 --- a/target/linux/mediatek/mt7629/base-files/etc/board.d/02_network +++ b/target/linux/mediatek/mt7629/base-files/etc/board.d/02_network @@ -9,8 +9,8 @@ mediatek_setup_interfaces() local board="$1" case $board in - mediatek,mt7629-lynx-rfb) - ucidef_set_interfaces_wan "eth1" + mediatek,mt7629-rfb) + ucidef_set_interface_wan "eth1" ucidef_add_switch "switch0" \ "0:lan" "1:lan" "2:lan" "3:lan" "6@eth0" ;; diff --git a/target/linux/mediatek/mt7629/config-5.4 b/target/linux/mediatek/mt7629/config-5.4 index 5ca8444c36..44cb3a1752 100644 --- a/target/linux/mediatek/mt7629/config-5.4 +++ b/target/linux/mediatek/mt7629/config-5.4 @@ -1,6 +1,4 @@ -# CONFIG_ADIN_PHY is not set CONFIG_ALIGNMENT_TRAP=y -# CONFIG_AL_FIC is not set CONFIG_ARCH_32BIT_OFF_T=y CONFIG_ARCH_CLOCKSOURCE_DATA=y CONFIG_ARCH_HAS_BINFMT_FLAT=y @@ -23,14 +21,12 @@ CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_KEEP_MEMBLOCK=y CONFIG_ARCH_MEDIATEK=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y -# CONFIG_ARCH_MILBEAUT is not set CONFIG_ARCH_MULTIPLATFORM=y CONFIG_ARCH_MULTI_V6_V7=y CONFIG_ARCH_MULTI_V7=y CONFIG_ARCH_NR_GPIO=0 CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y -# CONFIG_ARCH_RDA is not set CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_ARCH_SUSPEND_POSSIBLE=y @@ -42,25 +38,19 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_ARM=y CONFIG_ARM_ARCH_TIMER=y CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y -# CONFIG_ARM_ERRATA_814220 is not set -# CONFIG_ARM_ERRATA_857271 is not set -# CONFIG_ARM_ERRATA_857272 is not set CONFIG_ARM_GIC=y CONFIG_ARM_HAS_SG_CHAIN=y CONFIG_ARM_HEAVY_MB=y CONFIG_ARM_L1_CACHE_SHIFT=6 CONFIG_ARM_L1_CACHE_SHIFT_6=y -# CONFIG_ARM_LPAE is not set CONFIG_ARM_PATCH_IDIV=y CONFIG_ARM_PATCH_PHYS_VIRT=y CONFIG_ARM_PMU=y CONFIG_ARM_THUMB=y -# CONFIG_ARM_THUMBEE is not set CONFIG_ARM_UNWIND=y CONFIG_ARM_VIRT_EXT=y CONFIG_ATAGS=y CONFIG_AUTO_ZRELADDR=y -# CONFIG_BACKLIGHT_CLASS_DEVICE is not set CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y CONFIG_BLK_DEV_SD=y CONFIG_BLK_MQ_PCI=y @@ -69,11 +59,8 @@ CONFIG_BLK_SCSI_REQUEST=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_CACHE_L2X0=y -CONFIG_CC_CAN_LINK=y CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED=y -CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_WARN_MAYBE_UNINITIALIZED=y # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CHR_DEV_SCH=y @@ -83,7 +70,6 @@ CONFIG_CLONE_BACKWARDS=y CONFIG_CMDLINE="rootfstype=squashfs,jffs2" CONFIG_CMDLINE_FROM_BOOTLOADER=y CONFIG_COMMON_CLK=y -# CONFIG_COMMON_CLK_FIXED_MMIO is not set CONFIG_COMMON_CLK_MEDIATEK=y # CONFIG_COMMON_CLK_MT2701 is not set # CONFIG_COMMON_CLK_MT7622 is not set @@ -95,20 +81,15 @@ CONFIG_COMMON_CLK_MT7629_HIFSYS=y CONFIG_COMMON_CLK_MT8516=y # CONFIG_COMMON_CLK_MT8516_AUDSYS is not set CONFIG_COMPAT_32BIT_TIME=y -# CONFIG_COUNTER is not set CONFIG_CPU_32v6K=y CONFIG_CPU_32v7=y CONFIG_CPU_ABRT_EV7=y -# CONFIG_CPU_BPREDICT_DISABLE is not set CONFIG_CPU_CACHE_V7=y CONFIG_CPU_CACHE_VIPT=y CONFIG_CPU_COPY_V6=y CONFIG_CPU_CP15=y CONFIG_CPU_CP15_MMU=y CONFIG_CPU_HAS_ASID=y -# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND is not set CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_GOV_LADDER is not set CONFIG_CPU_IDLE_GOV_MENU=y @@ -121,43 +102,28 @@ CONFIG_CPU_TLB_V7=y CONFIG_CPU_V7=y CONFIG_CRC16=y CONFIG_CRYPTO_ACOMP2=y -# CONFIG_CRYPTO_ADIANTUM is not set CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y -CONFIG_CRYPTO_AKCIPHER2=y CONFIG_CRYPTO_DEFLATE=y -# CONFIG_CRYPTO_ECRDSA is not set -# CONFIG_CRYPTO_ESSIV is not set CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_HASH_INFO=y -CONFIG_CRYPTO_KPP2=y -CONFIG_CRYPTO_LIB_AES=y CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_NULL2=y -# CONFIG_CRYPTO_OFB is not set CONFIG_CRYPTO_RNG2=y -# CONFIG_CRYPTO_STREEBOG is not set -# CONFIG_CRYPTO_XXHASH is not set CONFIG_CRYPTO_ZSTD=y CONFIG_DCACHE_WORD_ACCESS=y CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" CONFIG_DEBUG_MISC=y -# CONFIG_DEBUG_PLIST is not set -# CONFIG_DEBUG_USER is not set CONFIG_DEFAULT_HOSTNAME="(mt7629)" CONFIG_DMA_REMAP=y CONFIG_DTC=y CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y CONFIG_EINT_MTK=y -# CONFIG_EXFAT_FS is not set -# CONFIG_FIELDBUS_DEV is not set CONFIG_FIXED_PHY=y CONFIG_FIX_EARLYCON_MEM=y -# CONFIG_FS_VERITY is not set -# CONFIG_FW_LOADER_COMPRESS is not set CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_ARCH_TOPOLOGY=y @@ -184,11 +150,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GPIOLIB=y -# CONFIG_GPIO_AMD_FCH is not set -# CONFIG_GPIO_CADENCE is not set -# CONFIG_GPIO_SAMA5D2_PIOBU is not set CONFIG_GPIO_SYSFS=y -# CONFIG_HABANA_AI is not set CONFIG_HANDLE_DOMAIN_IRQ=y # CONFIG_HARDENED_USERCOPY is not set CONFIG_HARDEN_BRANCH_PREDICTOR=y @@ -209,6 +171,7 @@ CONFIG_HAVE_ARM_SMCCC=y CONFIG_HAVE_CLK=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_COPY_THREAD_TLS=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_HAVE_DEBUG_KMEMLEAK=y CONFIG_HAVE_DMA_CONTIGUOUS=y @@ -239,20 +202,11 @@ CONFIG_HAVE_SMP=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_UID16=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -# CONFIG_HEADERS_INSTALL is not set -# CONFIG_HEADER_TEST is not set CONFIG_HOTPLUG_CPU=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_MTK=y CONFIG_HZ_FIXED=0 -# CONFIG_I3C is not set -# CONFIG_IGC is not set -# CONFIG_IKHEADERS is not set CONFIG_INITRAMFS_SOURCE="" -# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set -# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set -CONFIG_INIT_STACK_NONE=y -# CONFIG_INTERCONNECT is not set CONFIG_IO_URING=y CONFIG_IRQCHIP=y CONFIG_IRQ_DOMAIN=y @@ -260,15 +214,10 @@ CONFIG_IRQ_DOMAIN_HIERARCHY=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_IRQ_TIME_ACCOUNTING=y CONFIG_IRQ_WORK=y -# CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set -# CONFIG_LEDS_TRIGGER_AUDIO is not set -# CONFIG_LEDS_TRIGGER_PATTERN is not set CONFIG_LIBFDT=y CONFIG_LOCK_DEBUGGING_SUPPORT=y -# CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_LOCK_SPIN_ON_OWNER=y -CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity" CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y # CONFIG_MACH_MT2701 is not set @@ -279,22 +228,16 @@ CONFIG_MACH_MT7629=y # CONFIG_MACH_MT8127 is not set # CONFIG_MACH_MT8135 is not set CONFIG_MDIO_BUS=y -# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set CONFIG_MDIO_DEVICE=y CONFIG_MEDIATEK_WATCHDOG=y CONFIG_MEMFD_CREATE=y CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TQMX86 is not set CONFIG_MIGHT_HAVE_CACHE_L2X0=y CONFIG_MIGRATION=y -# CONFIG_MISC_ALCOR_PCI is not set CONFIG_MODULES_TREE_LOOKUP=y CONFIG_MODULES_USE_ELF_REL=y -# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set CONFIG_MT753X_GSW=y -# CONFIG_MTD_HYPERBUS is not set CONFIG_MTD_NAND_CORE=y -# CONFIG_MTD_RAW_NAND is not set CONFIG_MTD_SPI_NAND=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPLIT_FIRMWARE=y @@ -316,16 +259,11 @@ CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NETFILTER=y CONFIG_NET_FLOW_LIMIT=y CONFIG_NET_MEDIATEK_SOC=y -# CONFIG_NET_SCH_TAPRIO is not set -CONFIG_NET_VENDOR_GOOGLE=y CONFIG_NET_VENDOR_MEDIATEK=y -CONFIG_NET_VENDOR_PENSANDO=y -# CONFIG_NI_XGE_MANAGEMENT_ENET is not set CONFIG_NLS=y CONFIG_NO_HZ_COMMON=y CONFIG_NO_HZ_IDLE=y CONFIG_NR_CPUS=2 -# CONFIG_NULL_TTY is not set CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y CONFIG_OF=y @@ -341,7 +279,6 @@ CONFIG_OLD_SIGACTION=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_OUTER_CACHE=y CONFIG_OUTER_CACHE_SYNC=y -# CONFIG_PACKING is not set CONFIG_PADATA=y CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PCI=y @@ -351,50 +288,31 @@ CONFIG_PCIE_MEDIATEK=y CONFIG_PCIE_PME=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_DOMAINS_GENERIC=y -# CONFIG_PCI_MESON is not set CONFIG_PCI_MSI=y CONFIG_PCI_MSI_IRQ_DOMAIN=y -# CONFIG_PCI_V3_SEMI is not set CONFIG_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y CONFIG_PGTABLE_LEVELS=2 CONFIG_PHYLIB=y CONFIG_PHYLINK=y -# CONFIG_PHY_CADENCE_DP is not set -# CONFIG_PHY_CADENCE_DPHY is not set -# CONFIG_PHY_CADENCE_SIERRA is not set -# CONFIG_PHY_FSL_IMX8MQ_USB is not set -# CONFIG_PHY_MIXEL_MIPI_DPHY is not set CONFIG_PHY_MTK_TPHY=y # CONFIG_PHY_MTK_UFS is not set # CONFIG_PHY_MTK_XSPHY is not set -# CONFIG_PHY_OCELOT_SERDES is not set CONFIG_PINCTRL=y CONFIG_PINCTRL_MT7629=y CONFIG_PINCTRL_MTK_MOORE=y -# CONFIG_PINCTRL_OCELOT is not set -# CONFIG_PL310_ERRATA_588369 is not set -# CONFIG_PL310_ERRATA_727915 is not set -# CONFIG_PL310_ERRATA_753970 is not set -# CONFIG_PL310_ERRATA_769419 is not set CONFIG_PM=y CONFIG_PM_CLK=y -# CONFIG_PM_DEBUG is not set CONFIG_PM_GENERIC_DOMAINS=y CONFIG_PM_GENERIC_DOMAINS_OF=y -# CONFIG_PRINTK_CALLER is not set -# CONFIG_PSI is not set -# CONFIG_PVPANIC is not set CONFIG_PWM=y CONFIG_PWM_MEDIATEK=y # CONFIG_PWM_MTK_DISP is not set CONFIG_PWM_SYSFS=y -# CONFIG_RANDOM_TRUST_BOOTLOADER is not set CONFIG_RAS=y CONFIG_RATIONAL=y CONFIG_RCU_NEED_SEGCBLIST=y CONFIG_RCU_STALL_COMMON=y -# CONFIG_REED_SOLOMON_TEST is not set CONFIG_REFCOUNT_FULL=y CONFIG_REGMAP=y CONFIG_REGMAP_MMIO=y @@ -403,18 +321,14 @@ CONFIG_RFS_ACCEL=y CONFIG_RPS=y CONFIG_RWSEM_SPIN_ON_OWNER=y CONFIG_SCSI=y -# CONFIG_SCSI_MYRS is not set CONFIG_SERIAL_8250_FSL=y CONFIG_SERIAL_8250_MT6577=y CONFIG_SERIAL_8250_NR_UARTS=3 CONFIG_SERIAL_8250_RUNTIME_UARTS=3 -# CONFIG_SERIAL_FSL_LINFLEXUART is not set CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y -# CONFIG_SERIAL_SIFIVE is not set CONFIG_SGL_ALLOC=y CONFIG_SG_POOL=y -# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set CONFIG_SMP=y CONFIG_SMP_ON_UP=y CONFIG_SPARSE_IRQ=y @@ -422,7 +336,7 @@ CONFIG_SPI=y CONFIG_SPI_MASTER=y CONFIG_SPI_MEM=y # CONFIG_SPI_MT65XX is not set -# CONFIG_SPI_MTK_QUADSPI is not set +CONFIG_SPI_MTK_NOR=y CONFIG_SRCU=y CONFIG_STACKTRACE=y # CONFIG_SWAP is not set @@ -430,45 +344,29 @@ CONFIG_SWCONFIG=y CONFIG_SWPHY=y CONFIG_SWP_EMULATE=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y -# CONFIG_TEST_BLACKHOLE_DEV is not set -# CONFIG_TEST_MEMCAT_P is not set -# CONFIG_TEST_MEMINIT is not set -# CONFIG_TEST_STACKINIT is not set -# CONFIG_TEST_STRSCPY is not set -# CONFIG_TEST_VMALLOC is not set -# CONFIG_TEST_XARRAY is not set -# CONFIG_THUMB2_KERNEL is not set CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y -# CONFIG_TI_CPSW_PHY_SEL is not set CONFIG_TREE_RCU=y CONFIG_TREE_SRCU=y -# CONFIG_TRUSTED_FOUNDATIONS is not set CONFIG_UBIFS_FS=y # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set CONFIG_UBIFS_FS_LZO=y CONFIG_UBIFS_FS_ZLIB=y CONFIG_UBIFS_FS_ZSTD=y CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" -# CONFIG_UNICODE is not set CONFIG_UNWINDER_ARM=y -# CONFIG_UNWINDER_FRAME_POINTER is not set CONFIG_USB=y CONFIG_USB_COMMON=y -# CONFIG_USB_CONN_GPIO is not set # CONFIG_USB_EHCI_HCD is not set CONFIG_USB_SUPPORT=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_MTK=y # CONFIG_USB_XHCI_PLATFORM is not set CONFIG_USE_OF=y -# CONFIG_VALIDATE_FS_PARSER is not set # CONFIG_VFP is not set CONFIG_WATCHDOG_CORE=y -CONFIG_WATCHDOG_OPEN_TIMEOUT=0 # CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -# CONFIG_XILINX_SDFEC is not set CONFIG_XPS=y CONFIG_XXHASH=y CONFIG_XZ_DEC_ARM=y diff --git a/target/linux/mediatek/patches-5.4/0001-v5.7-spi-make-spi-max-frequency-optional.patch b/target/linux/mediatek/patches-5.4/0001-v5.7-spi-make-spi-max-frequency-optional.patch new file mode 100644 index 0000000000..d29afc0636 --- /dev/null +++ b/target/linux/mediatek/patches-5.4/0001-v5.7-spi-make-spi-max-frequency-optional.patch @@ -0,0 +1,38 @@ +From 671c3bf50ae498dc12aef6c70abe5cfa066b1348 Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Fri, 6 Mar 2020 16:50:49 +0800 +Subject: [PATCH 1/2] spi: make spi-max-frequency optional + +We only need a spi-max-frequency when we specifically request a +spi frequency lower than the max speed of spi host. +This property is already documented as optional property and current +host drivers are implemented to operate at highest speed possible +when spi->max_speed_hz is 0. +This patch makes spi-max-frequency an optional property so that +we could just omit it to use max controller speed. + +Signed-off-by: Chuanhong Guo +Link: https://lore.kernel.org/r/20200306085052.28258-2-gch981213@gmail.com +Signed-off-by: Mark Brown +--- + drivers/spi/spi.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +--- a/drivers/spi/spi.c ++++ b/drivers/spi/spi.c +@@ -1785,13 +1785,8 @@ static int of_spi_parse_dt(struct spi_co + spi->mode |= SPI_CS_HIGH; + + /* Device speed */ +- rc = of_property_read_u32(nc, "spi-max-frequency", &value); +- if (rc) { +- dev_err(&ctlr->dev, +- "%pOF has no valid 'spi-max-frequency' property (%d)\n", nc, rc); +- return rc; +- } +- spi->max_speed_hz = value; ++ if (!of_property_read_u32(nc, "spi-max-frequency", &value)) ++ spi->max_speed_hz = value; + + return 0; + } diff --git a/target/linux/mediatek/patches-5.4/0002-v5.7-spi-add-support-for-mediatek-spi-nor-controller.patch b/target/linux/mediatek/patches-5.4/0002-v5.7-spi-add-support-for-mediatek-spi-nor-controller.patch new file mode 100644 index 0000000000..0a63bdddaf --- /dev/null +++ b/target/linux/mediatek/patches-5.4/0002-v5.7-spi-add-support-for-mediatek-spi-nor-controller.patch @@ -0,0 +1,761 @@ +From 881d1ee9fe81ff2be1b90809a07621be97404a57 Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Fri, 6 Mar 2020 16:50:50 +0800 +Subject: [PATCH 2/2] spi: add support for mediatek spi-nor controller + +This is a driver for mtk spi-nor controller using spi-mem interface. +The same controller already has limited support provided by mtk-quadspi +driver under spi-nor framework and this new driver is a replacement +for the old one. + +Comparing to the old driver, this driver has following advantages: +1. It can handle any full-duplex spi transfer up to 6 bytes, and + this is implemented using generic spi interface. +2. It take account into command opcode properly. The reading routine + in this controller can only use 0x03 or 0x0b as opcode on 1-1-1 + transfers, but old driver doesn't implement this properly. This + driver checks supported opcode explicitly and use (1) to perform + unmatched operations. +3. It properly handles SFDP reading. Old driver can't read SFDP + due to the bug mentioned in (2). +4. It can do 1-2-2 and 1-4-4 fast reading on spi-nor. These two ops + requires parsing SFDP, which isn't possible in old driver. And + the old driver is only flagged to support 1-1-2 mode. +5. It takes advantage of the DMA feature in this controller for + long reads and supports IRQ on DMA requests to free cpu cycles + from polling status registers on long DMA reading. It achieves + up to 17.5MB/s reading speed (1-4-4 mode) which is way faster + than the old one. IRQ is implemented as optional to maintain + backward compatibility. + +Signed-off-by: Chuanhong Guo +Link: https://lore.kernel.org/r/20200306085052.28258-3-gch981213@gmail.com +Signed-off-by: Mark Brown +--- + drivers/spi/Kconfig | 10 + + drivers/spi/Makefile | 1 + + drivers/spi/spi-mtk-nor.c | 689 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 700 insertions(+) + create mode 100644 drivers/spi/spi-mtk-nor.c + +--- a/drivers/spi/Kconfig ++++ b/drivers/spi/Kconfig +@@ -433,6 +433,16 @@ config SPI_MT7621 + help + This selects a driver for the MediaTek MT7621 SPI Controller. + ++config SPI_MTK_NOR ++ tristate "MediaTek SPI NOR controller" ++ depends on ARCH_MEDIATEK || COMPILE_TEST ++ help ++ This enables support for SPI NOR controller found on MediaTek ++ ARM SoCs. This is a controller specifically for SPI-NOR flash. ++ It can perform generic SPI transfers up to 6 bytes via generic ++ SPI interface as well as several SPI-NOR specific instructions ++ via SPI MEM interface. ++ + config SPI_NPCM_FIU + tristate "Nuvoton NPCM FLASH Interface Unit" + depends on ARCH_NPCM || COMPILE_TEST +--- a/drivers/spi/Makefile ++++ b/drivers/spi/Makefile +@@ -61,6 +61,7 @@ obj-$(CONFIG_SPI_MPC52xx_PSC) += spi-mp + obj-$(CONFIG_SPI_MPC52xx) += spi-mpc52xx.o + obj-$(CONFIG_SPI_MT65XX) += spi-mt65xx.o + obj-$(CONFIG_SPI_MT7621) += spi-mt7621.o ++obj-$(CONFIG_SPI_MTK_NOR) += spi-mtk-nor.o + obj-$(CONFIG_SPI_MXIC) += spi-mxic.o + obj-$(CONFIG_SPI_MXS) += spi-mxs.o + obj-$(CONFIG_SPI_NPCM_FIU) += spi-npcm-fiu.o +--- /dev/null ++++ b/drivers/spi/spi-mtk-nor.c +@@ -0,0 +1,689 @@ ++// SPDX-License-Identifier: GPL-2.0 ++// ++// Mediatek SPI NOR controller driver ++// ++// Copyright (C) 2020 Chuanhong Guo ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DRIVER_NAME "mtk-spi-nor" ++ ++#define MTK_NOR_REG_CMD 0x00 ++#define MTK_NOR_CMD_WRITE BIT(4) ++#define MTK_NOR_CMD_PROGRAM BIT(2) ++#define MTK_NOR_CMD_READ BIT(0) ++#define MTK_NOR_CMD_MASK GENMASK(5, 0) ++ ++#define MTK_NOR_REG_PRG_CNT 0x04 ++#define MTK_NOR_REG_RDATA 0x0c ++ ++#define MTK_NOR_REG_RADR0 0x10 ++#define MTK_NOR_REG_RADR(n) (MTK_NOR_REG_RADR0 + 4 * (n)) ++#define MTK_NOR_REG_RADR3 0xc8 ++ ++#define MTK_NOR_REG_WDATA 0x1c ++ ++#define MTK_NOR_REG_PRGDATA0 0x20 ++#define MTK_NOR_REG_PRGDATA(n) (MTK_NOR_REG_PRGDATA0 + 4 * (n)) ++#define MTK_NOR_REG_PRGDATA_MAX 5 ++ ++#define MTK_NOR_REG_SHIFT0 0x38 ++#define MTK_NOR_REG_SHIFT(n) (MTK_NOR_REG_SHIFT0 + 4 * (n)) ++#define MTK_NOR_REG_SHIFT_MAX 9 ++ ++#define MTK_NOR_REG_CFG1 0x60 ++#define MTK_NOR_FAST_READ BIT(0) ++ ++#define MTK_NOR_REG_CFG2 0x64 ++#define MTK_NOR_WR_CUSTOM_OP_EN BIT(4) ++#define MTK_NOR_WR_BUF_EN BIT(0) ++ ++#define MTK_NOR_REG_PP_DATA 0x98 ++ ++#define MTK_NOR_REG_IRQ_STAT 0xa8 ++#define MTK_NOR_REG_IRQ_EN 0xac ++#define MTK_NOR_IRQ_DMA BIT(7) ++#define MTK_NOR_IRQ_MASK GENMASK(7, 0) ++ ++#define MTK_NOR_REG_CFG3 0xb4 ++#define MTK_NOR_DISABLE_WREN BIT(7) ++#define MTK_NOR_DISABLE_SR_POLL BIT(5) ++ ++#define MTK_NOR_REG_WP 0xc4 ++#define MTK_NOR_ENABLE_SF_CMD 0x30 ++ ++#define MTK_NOR_REG_BUSCFG 0xcc ++#define MTK_NOR_4B_ADDR BIT(4) ++#define MTK_NOR_QUAD_ADDR BIT(3) ++#define MTK_NOR_QUAD_READ BIT(2) ++#define MTK_NOR_DUAL_ADDR BIT(1) ++#define MTK_NOR_DUAL_READ BIT(0) ++#define MTK_NOR_BUS_MODE_MASK GENMASK(4, 0) ++ ++#define MTK_NOR_REG_DMA_CTL 0x718 ++#define MTK_NOR_DMA_START BIT(0) ++ ++#define MTK_NOR_REG_DMA_FADR 0x71c ++#define MTK_NOR_REG_DMA_DADR 0x720 ++#define MTK_NOR_REG_DMA_END_DADR 0x724 ++ ++#define MTK_NOR_PRG_MAX_SIZE 6 ++// Reading DMA src/dst addresses have to be 16-byte aligned ++#define MTK_NOR_DMA_ALIGN 16 ++#define MTK_NOR_DMA_ALIGN_MASK (MTK_NOR_DMA_ALIGN - 1) ++// and we allocate a bounce buffer if destination address isn't aligned. ++#define MTK_NOR_BOUNCE_BUF_SIZE PAGE_SIZE ++ ++// Buffered page program can do one 128-byte transfer ++#define MTK_NOR_PP_SIZE 128 ++ ++#define CLK_TO_US(sp, clkcnt) ((clkcnt) * 1000000 / sp->spi_freq) ++ ++struct mtk_nor { ++ struct spi_controller *ctlr; ++ struct device *dev; ++ void __iomem *base; ++ u8 *buffer; ++ struct clk *spi_clk; ++ struct clk *ctlr_clk; ++ unsigned int spi_freq; ++ bool wbuf_en; ++ bool has_irq; ++ struct completion op_done; ++}; ++ ++static inline void mtk_nor_rmw(struct mtk_nor *sp, u32 reg, u32 set, u32 clr) ++{ ++ u32 val = readl(sp->base + reg); ++ ++ val &= ~clr; ++ val |= set; ++ writel(val, sp->base + reg); ++} ++ ++static inline int mtk_nor_cmd_exec(struct mtk_nor *sp, u32 cmd, ulong clk) ++{ ++ ulong delay = CLK_TO_US(sp, clk); ++ u32 reg; ++ int ret; ++ ++ writel(cmd, sp->base + MTK_NOR_REG_CMD); ++ ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CMD, reg, !(reg & cmd), ++ delay / 3, (delay + 1) * 200); ++ if (ret < 0) ++ dev_err(sp->dev, "command %u timeout.\n", cmd); ++ return ret; ++} ++ ++static void mtk_nor_set_addr(struct mtk_nor *sp, const struct spi_mem_op *op) ++{ ++ u32 addr = op->addr.val; ++ int i; ++ ++ for (i = 0; i < 3; i++) { ++ writeb(addr & 0xff, sp->base + MTK_NOR_REG_RADR(i)); ++ addr >>= 8; ++ } ++ if (op->addr.nbytes == 4) { ++ writeb(addr & 0xff, sp->base + MTK_NOR_REG_RADR3); ++ mtk_nor_rmw(sp, MTK_NOR_REG_BUSCFG, MTK_NOR_4B_ADDR, 0); ++ } else { ++ mtk_nor_rmw(sp, MTK_NOR_REG_BUSCFG, 0, MTK_NOR_4B_ADDR); ++ } ++} ++ ++static bool mtk_nor_match_read(const struct spi_mem_op *op) ++{ ++ int dummy = 0; ++ ++ if (op->dummy.buswidth) ++ dummy = op->dummy.nbytes * BITS_PER_BYTE / op->dummy.buswidth; ++ ++ if ((op->data.buswidth == 2) || (op->data.buswidth == 4)) { ++ if (op->addr.buswidth == 1) ++ return dummy == 8; ++ else if (op->addr.buswidth == 2) ++ return dummy == 4; ++ else if (op->addr.buswidth == 4) ++ return dummy == 6; ++ } else if ((op->addr.buswidth == 1) && (op->data.buswidth == 1)) { ++ if (op->cmd.opcode == 0x03) ++ return dummy == 0; ++ else if (op->cmd.opcode == 0x0b) ++ return dummy == 8; ++ } ++ return false; ++} ++ ++static int mtk_nor_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) ++{ ++ size_t len; ++ ++ if (!op->data.nbytes) ++ return 0; ++ ++ if ((op->addr.nbytes == 3) || (op->addr.nbytes == 4)) { ++ if ((op->data.dir == SPI_MEM_DATA_IN) && ++ mtk_nor_match_read(op)) { ++ if ((op->addr.val & MTK_NOR_DMA_ALIGN_MASK) || ++ (op->data.nbytes < MTK_NOR_DMA_ALIGN)) ++ op->data.nbytes = 1; ++ else if (!((ulong)(op->data.buf.in) & ++ MTK_NOR_DMA_ALIGN_MASK)) ++ op->data.nbytes &= ~MTK_NOR_DMA_ALIGN_MASK; ++ else if (op->data.nbytes > MTK_NOR_BOUNCE_BUF_SIZE) ++ op->data.nbytes = MTK_NOR_BOUNCE_BUF_SIZE; ++ return 0; ++ } else if (op->data.dir == SPI_MEM_DATA_OUT) { ++ if (op->data.nbytes >= MTK_NOR_PP_SIZE) ++ op->data.nbytes = MTK_NOR_PP_SIZE; ++ else ++ op->data.nbytes = 1; ++ return 0; ++ } ++ } ++ ++ len = MTK_NOR_PRG_MAX_SIZE - sizeof(op->cmd.opcode) - op->addr.nbytes - ++ op->dummy.nbytes; ++ if (op->data.nbytes > len) ++ op->data.nbytes = len; ++ ++ return 0; ++} ++ ++static bool mtk_nor_supports_op(struct spi_mem *mem, ++ const struct spi_mem_op *op) ++{ ++ size_t len; ++ ++ if (op->cmd.buswidth != 1) ++ return false; ++ ++ if ((op->addr.nbytes == 3) || (op->addr.nbytes == 4)) { ++ if ((op->data.dir == SPI_MEM_DATA_IN) && mtk_nor_match_read(op)) ++ return true; ++ else if (op->data.dir == SPI_MEM_DATA_OUT) ++ return (op->addr.buswidth == 1) && ++ (op->dummy.buswidth == 0) && ++ (op->data.buswidth == 1); ++ } ++ len = sizeof(op->cmd.opcode) + op->addr.nbytes + op->dummy.nbytes; ++ if ((len > MTK_NOR_PRG_MAX_SIZE) || ++ ((op->data.nbytes) && (len == MTK_NOR_PRG_MAX_SIZE))) ++ return false; ++ return true; ++} ++ ++static void mtk_nor_setup_bus(struct mtk_nor *sp, const struct spi_mem_op *op) ++{ ++ u32 reg = 0; ++ ++ if (op->addr.nbytes == 4) ++ reg |= MTK_NOR_4B_ADDR; ++ ++ if (op->data.buswidth == 4) { ++ reg |= MTK_NOR_QUAD_READ; ++ writeb(op->cmd.opcode, sp->base + MTK_NOR_REG_PRGDATA(4)); ++ if (op->addr.buswidth == 4) ++ reg |= MTK_NOR_QUAD_ADDR; ++ } else if (op->data.buswidth == 2) { ++ reg |= MTK_NOR_DUAL_READ; ++ writeb(op->cmd.opcode, sp->base + MTK_NOR_REG_PRGDATA(3)); ++ if (op->addr.buswidth == 2) ++ reg |= MTK_NOR_DUAL_ADDR; ++ } else { ++ if (op->cmd.opcode == 0x0b) ++ mtk_nor_rmw(sp, MTK_NOR_REG_CFG1, MTK_NOR_FAST_READ, 0); ++ else ++ mtk_nor_rmw(sp, MTK_NOR_REG_CFG1, 0, MTK_NOR_FAST_READ); ++ } ++ mtk_nor_rmw(sp, MTK_NOR_REG_BUSCFG, reg, MTK_NOR_BUS_MODE_MASK); ++} ++ ++static int mtk_nor_read_dma(struct mtk_nor *sp, u32 from, unsigned int length, ++ u8 *buffer) ++{ ++ int ret = 0; ++ ulong delay; ++ u32 reg; ++ dma_addr_t dma_addr; ++ ++ dma_addr = dma_map_single(sp->dev, buffer, length, DMA_FROM_DEVICE); ++ if (dma_mapping_error(sp->dev, dma_addr)) { ++ dev_err(sp->dev, "failed to map dma buffer.\n"); ++ return -EINVAL; ++ } ++ ++ writel(from, sp->base + MTK_NOR_REG_DMA_FADR); ++ writel(dma_addr, sp->base + MTK_NOR_REG_DMA_DADR); ++ writel(dma_addr + length, sp->base + MTK_NOR_REG_DMA_END_DADR); ++ ++ if (sp->has_irq) { ++ reinit_completion(&sp->op_done); ++ mtk_nor_rmw(sp, MTK_NOR_REG_IRQ_EN, MTK_NOR_IRQ_DMA, 0); ++ } ++ ++ mtk_nor_rmw(sp, MTK_NOR_REG_DMA_CTL, MTK_NOR_DMA_START, 0); ++ ++ delay = CLK_TO_US(sp, (length + 5) * BITS_PER_BYTE); ++ ++ if (sp->has_irq) { ++ if (!wait_for_completion_timeout(&sp->op_done, ++ (delay + 1) * 100)) ++ ret = -ETIMEDOUT; ++ } else { ++ ret = readl_poll_timeout(sp->base + MTK_NOR_REG_DMA_CTL, reg, ++ !(reg & MTK_NOR_DMA_START), delay / 3, ++ (delay + 1) * 100); ++ } ++ ++ dma_unmap_single(sp->dev, dma_addr, length, DMA_FROM_DEVICE); ++ if (ret < 0) ++ dev_err(sp->dev, "dma read timeout.\n"); ++ ++ return ret; ++} ++ ++static int mtk_nor_read_bounce(struct mtk_nor *sp, u32 from, ++ unsigned int length, u8 *buffer) ++{ ++ unsigned int rdlen; ++ int ret; ++ ++ if (length & MTK_NOR_DMA_ALIGN_MASK) ++ rdlen = (length + MTK_NOR_DMA_ALIGN) & ~MTK_NOR_DMA_ALIGN_MASK; ++ else ++ rdlen = length; ++ ++ ret = mtk_nor_read_dma(sp, from, rdlen, sp->buffer); ++ if (ret) ++ return ret; ++ ++ memcpy(buffer, sp->buffer, length); ++ return 0; ++} ++ ++static int mtk_nor_read_pio(struct mtk_nor *sp, const struct spi_mem_op *op) ++{ ++ u8 *buf = op->data.buf.in; ++ int ret; ++ ++ ret = mtk_nor_cmd_exec(sp, MTK_NOR_CMD_READ, 6 * BITS_PER_BYTE); ++ if (!ret) ++ buf[0] = readb(sp->base + MTK_NOR_REG_RDATA); ++ return ret; ++} ++ ++static int mtk_nor_write_buffer_enable(struct mtk_nor *sp) ++{ ++ int ret; ++ u32 val; ++ ++ if (sp->wbuf_en) ++ return 0; ++ ++ val = readl(sp->base + MTK_NOR_REG_CFG2); ++ writel(val | MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2); ++ ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val, ++ val & MTK_NOR_WR_BUF_EN, 0, 10000); ++ if (!ret) ++ sp->wbuf_en = true; ++ return ret; ++} ++ ++static int mtk_nor_write_buffer_disable(struct mtk_nor *sp) ++{ ++ int ret; ++ u32 val; ++ ++ if (!sp->wbuf_en) ++ return 0; ++ val = readl(sp->base + MTK_NOR_REG_CFG2); ++ writel(val & ~MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2); ++ ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val, ++ !(val & MTK_NOR_WR_BUF_EN), 0, 10000); ++ if (!ret) ++ sp->wbuf_en = false; ++ return ret; ++} ++ ++static int mtk_nor_pp_buffered(struct mtk_nor *sp, const struct spi_mem_op *op) ++{ ++ const u8 *buf = op->data.buf.out; ++ u32 val; ++ int ret, i; ++ ++ ret = mtk_nor_write_buffer_enable(sp); ++ if (ret < 0) ++ return ret; ++ ++ for (i = 0; i < op->data.nbytes; i += 4) { ++ val = buf[i + 3] << 24 | buf[i + 2] << 16 | buf[i + 1] << 8 | ++ buf[i]; ++ writel(val, sp->base + MTK_NOR_REG_PP_DATA); ++ } ++ return mtk_nor_cmd_exec(sp, MTK_NOR_CMD_WRITE, ++ (op->data.nbytes + 5) * BITS_PER_BYTE); ++} ++ ++static int mtk_nor_pp_unbuffered(struct mtk_nor *sp, ++ const struct spi_mem_op *op) ++{ ++ const u8 *buf = op->data.buf.out; ++ int ret; ++ ++ ret = mtk_nor_write_buffer_disable(sp); ++ if (ret < 0) ++ return ret; ++ writeb(buf[0], sp->base + MTK_NOR_REG_WDATA); ++ return mtk_nor_cmd_exec(sp, MTK_NOR_CMD_WRITE, 6 * BITS_PER_BYTE); ++} ++ ++int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) ++{ ++ struct mtk_nor *sp = spi_controller_get_devdata(mem->spi->master); ++ int ret; ++ ++ if ((op->data.nbytes == 0) || ++ ((op->addr.nbytes != 3) && (op->addr.nbytes != 4))) ++ return -ENOTSUPP; ++ ++ if (op->data.dir == SPI_MEM_DATA_OUT) { ++ mtk_nor_set_addr(sp, op); ++ writeb(op->cmd.opcode, sp->base + MTK_NOR_REG_PRGDATA0); ++ if (op->data.nbytes == MTK_NOR_PP_SIZE) ++ return mtk_nor_pp_buffered(sp, op); ++ return mtk_nor_pp_unbuffered(sp, op); ++ } ++ ++ if ((op->data.dir == SPI_MEM_DATA_IN) && mtk_nor_match_read(op)) { ++ ret = mtk_nor_write_buffer_disable(sp); ++ if (ret < 0) ++ return ret; ++ mtk_nor_setup_bus(sp, op); ++ if (op->data.nbytes == 1) { ++ mtk_nor_set_addr(sp, op); ++ return mtk_nor_read_pio(sp, op); ++ } else if (((ulong)(op->data.buf.in) & ++ MTK_NOR_DMA_ALIGN_MASK)) { ++ return mtk_nor_read_bounce(sp, op->addr.val, ++ op->data.nbytes, ++ op->data.buf.in); ++ } else { ++ return mtk_nor_read_dma(sp, op->addr.val, ++ op->data.nbytes, ++ op->data.buf.in); ++ } ++ } ++ ++ return -ENOTSUPP; ++} ++ ++static int mtk_nor_setup(struct spi_device *spi) ++{ ++ struct mtk_nor *sp = spi_controller_get_devdata(spi->master); ++ ++ if (spi->max_speed_hz && (spi->max_speed_hz < sp->spi_freq)) { ++ dev_err(&spi->dev, "spi clock should be %u Hz.\n", ++ sp->spi_freq); ++ return -EINVAL; ++ } ++ spi->max_speed_hz = sp->spi_freq; ++ ++ return 0; ++} ++ ++static int mtk_nor_transfer_one_message(struct spi_controller *master, ++ struct spi_message *m) ++{ ++ struct mtk_nor *sp = spi_controller_get_devdata(master); ++ struct spi_transfer *t = NULL; ++ unsigned long trx_len = 0; ++ int stat = 0; ++ int reg_offset = MTK_NOR_REG_PRGDATA_MAX; ++ void __iomem *reg; ++ const u8 *txbuf; ++ u8 *rxbuf; ++ int i; ++ ++ list_for_each_entry(t, &m->transfers, transfer_list) { ++ txbuf = t->tx_buf; ++ for (i = 0; i < t->len; i++, reg_offset--) { ++ reg = sp->base + MTK_NOR_REG_PRGDATA(reg_offset); ++ if (txbuf) ++ writeb(txbuf[i], reg); ++ else ++ writeb(0, reg); ++ } ++ trx_len += t->len; ++ } ++ ++ writel(trx_len * BITS_PER_BYTE, sp->base + MTK_NOR_REG_PRG_CNT); ++ ++ stat = mtk_nor_cmd_exec(sp, MTK_NOR_CMD_PROGRAM, ++ trx_len * BITS_PER_BYTE); ++ if (stat < 0) ++ goto msg_done; ++ ++ reg_offset = trx_len - 1; ++ list_for_each_entry(t, &m->transfers, transfer_list) { ++ rxbuf = t->rx_buf; ++ for (i = 0; i < t->len; i++, reg_offset--) { ++ reg = sp->base + MTK_NOR_REG_SHIFT(reg_offset); ++ if (rxbuf) ++ rxbuf[i] = readb(reg); ++ } ++ } ++ ++ m->actual_length = trx_len; ++msg_done: ++ m->status = stat; ++ spi_finalize_current_message(master); ++ ++ return 0; ++} ++ ++static void mtk_nor_disable_clk(struct mtk_nor *sp) ++{ ++ clk_disable_unprepare(sp->spi_clk); ++ clk_disable_unprepare(sp->ctlr_clk); ++} ++ ++static int mtk_nor_enable_clk(struct mtk_nor *sp) ++{ ++ int ret; ++ ++ ret = clk_prepare_enable(sp->spi_clk); ++ if (ret) ++ return ret; ++ ++ ret = clk_prepare_enable(sp->ctlr_clk); ++ if (ret) { ++ clk_disable_unprepare(sp->spi_clk); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int mtk_nor_init(struct mtk_nor *sp) ++{ ++ int ret; ++ ++ ret = mtk_nor_enable_clk(sp); ++ if (ret) ++ return ret; ++ ++ sp->spi_freq = clk_get_rate(sp->spi_clk); ++ ++ writel(MTK_NOR_ENABLE_SF_CMD, sp->base + MTK_NOR_REG_WP); ++ mtk_nor_rmw(sp, MTK_NOR_REG_CFG2, MTK_NOR_WR_CUSTOM_OP_EN, 0); ++ mtk_nor_rmw(sp, MTK_NOR_REG_CFG3, ++ MTK_NOR_DISABLE_WREN | MTK_NOR_DISABLE_SR_POLL, 0); ++ ++ return ret; ++} ++ ++static irqreturn_t mtk_nor_irq_handler(int irq, void *data) ++{ ++ struct mtk_nor *sp = data; ++ u32 irq_status, irq_enabled; ++ ++ irq_status = readl(sp->base + MTK_NOR_REG_IRQ_STAT); ++ irq_enabled = readl(sp->base + MTK_NOR_REG_IRQ_EN); ++ // write status back to clear interrupt ++ writel(irq_status, sp->base + MTK_NOR_REG_IRQ_STAT); ++ ++ if (!(irq_status & irq_enabled)) ++ return IRQ_NONE; ++ ++ if (irq_status & MTK_NOR_IRQ_DMA) { ++ complete(&sp->op_done); ++ writel(0, sp->base + MTK_NOR_REG_IRQ_EN); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static size_t mtk_max_msg_size(struct spi_device *spi) ++{ ++ return MTK_NOR_PRG_MAX_SIZE; ++} ++ ++static const struct spi_controller_mem_ops mtk_nor_mem_ops = { ++ .adjust_op_size = mtk_nor_adjust_op_size, ++ .supports_op = mtk_nor_supports_op, ++ .exec_op = mtk_nor_exec_op ++}; ++ ++static const struct of_device_id mtk_nor_match[] = { ++ { .compatible = "mediatek,mt8173-nor" }, ++ { /* sentinel */ } ++}; ++MODULE_DEVICE_TABLE(of, mtk_nor_match); ++ ++static int mtk_nor_probe(struct platform_device *pdev) ++{ ++ struct spi_controller *ctlr; ++ struct mtk_nor *sp; ++ void __iomem *base; ++ u8 *buffer; ++ struct clk *spi_clk, *ctlr_clk; ++ int ret, irq; ++ ++ base = devm_platform_ioremap_resource(pdev, 0); ++ if (IS_ERR(base)) ++ return PTR_ERR(base); ++ ++ spi_clk = devm_clk_get(&pdev->dev, "spi"); ++ if (IS_ERR(spi_clk)) ++ return PTR_ERR(spi_clk); ++ ++ ctlr_clk = devm_clk_get(&pdev->dev, "sf"); ++ if (IS_ERR(ctlr_clk)) ++ return PTR_ERR(ctlr_clk); ++ ++ buffer = devm_kmalloc(&pdev->dev, ++ MTK_NOR_BOUNCE_BUF_SIZE + MTK_NOR_DMA_ALIGN, ++ GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ if ((ulong)buffer & MTK_NOR_DMA_ALIGN_MASK) ++ buffer = (u8 *)(((ulong)buffer + MTK_NOR_DMA_ALIGN) & ++ ~MTK_NOR_DMA_ALIGN_MASK); ++ ++ ctlr = spi_alloc_master(&pdev->dev, sizeof(*sp)); ++ if (!ctlr) { ++ dev_err(&pdev->dev, "failed to allocate spi controller\n"); ++ return -ENOMEM; ++ } ++ ++ ctlr->bits_per_word_mask = SPI_BPW_MASK(8); ++ ctlr->dev.of_node = pdev->dev.of_node; ++ ctlr->max_message_size = mtk_max_msg_size; ++ ctlr->mem_ops = &mtk_nor_mem_ops; ++ ctlr->mode_bits = SPI_RX_DUAL | SPI_RX_QUAD | SPI_TX_DUAL | SPI_TX_QUAD; ++ ctlr->num_chipselect = 1; ++ ctlr->setup = mtk_nor_setup; ++ ctlr->transfer_one_message = mtk_nor_transfer_one_message; ++ ++ dev_set_drvdata(&pdev->dev, ctlr); ++ ++ sp = spi_controller_get_devdata(ctlr); ++ sp->base = base; ++ sp->buffer = buffer; ++ sp->has_irq = false; ++ sp->wbuf_en = false; ++ sp->ctlr = ctlr; ++ sp->dev = &pdev->dev; ++ sp->spi_clk = spi_clk; ++ sp->ctlr_clk = ctlr_clk; ++ ++ irq = platform_get_irq_optional(pdev, 0); ++ if (irq < 0) { ++ dev_warn(sp->dev, "IRQ not available."); ++ } else { ++ writel(MTK_NOR_IRQ_MASK, base + MTK_NOR_REG_IRQ_STAT); ++ writel(0, base + MTK_NOR_REG_IRQ_EN); ++ ret = devm_request_irq(sp->dev, irq, mtk_nor_irq_handler, 0, ++ pdev->name, sp); ++ if (ret < 0) { ++ dev_warn(sp->dev, "failed to request IRQ."); ++ } else { ++ init_completion(&sp->op_done); ++ sp->has_irq = true; ++ } ++ } ++ ++ ret = mtk_nor_init(sp); ++ if (ret < 0) { ++ kfree(ctlr); ++ return ret; ++ } ++ ++ dev_info(&pdev->dev, "spi frequency: %d Hz\n", sp->spi_freq); ++ ++ return devm_spi_register_controller(&pdev->dev, ctlr); ++} ++ ++static int mtk_nor_remove(struct platform_device *pdev) ++{ ++ struct spi_controller *ctlr; ++ struct mtk_nor *sp; ++ ++ ctlr = dev_get_drvdata(&pdev->dev); ++ sp = spi_controller_get_devdata(ctlr); ++ ++ mtk_nor_disable_clk(sp); ++ ++ return 0; ++} ++ ++static struct platform_driver mtk_nor_driver = { ++ .driver = { ++ .name = DRIVER_NAME, ++ .of_match_table = mtk_nor_match, ++ }, ++ .probe = mtk_nor_probe, ++ .remove = mtk_nor_remove, ++}; ++ ++module_platform_driver(mtk_nor_driver); ++ ++MODULE_DESCRIPTION("Mediatek SPI NOR controller driver"); ++MODULE_AUTHOR("Chuanhong Guo "); ++MODULE_LICENSE("GPL v2"); ++MODULE_ALIAS("platform:" DRIVER_NAME); diff --git a/target/linux/mediatek/patches-5.4/0010-dts-mt7629-rfb-fix-firmware-partition.patch b/target/linux/mediatek/patches-5.4/0010-dts-mt7629-rfb-fix-firmware-partition.patch new file mode 100644 index 0000000000..5d0a19ed4c --- /dev/null +++ b/target/linux/mediatek/patches-5.4/0010-dts-mt7629-rfb-fix-firmware-partition.patch @@ -0,0 +1,13 @@ +--- a/arch/arm/boot/dts/mt7629-rfb.dts ++++ b/arch/arm/boot/dts/mt7629-rfb.dts +@@ -163,8 +163,9 @@ + }; + + partition@b0000 { +- label = "kernel"; ++ label = "firmware"; + reg = <0xb0000 0xb50000>; ++ compatible = "denx,fit"; + }; + }; + }; diff --git a/target/linux/x86/64/profiles/000-Generic.mk b/target/linux/x86/64/profiles/000-Generic.mk deleted file mode 100644 index b5b10c4ade..0000000000 --- a/target/linux/x86/64/profiles/000-Generic.mk +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (C) 2006-2019 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Generic - NAME:=Generic x86/64 -endef - -define Profile/Generic/Description - Generic Profile for x86/64 architecture -endef -$(eval $(call Profile,Generic)) diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index c460002a04..85be5d61bb 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=i386 BOARD:=x86 BOARDNAME:=x86 -FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu +FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu boot-part rootfs-part SUBTARGETS:=64 generic legacy geode KERNEL_PATCHVER:=5.4 @@ -28,6 +28,6 @@ DEFAULT_PACKAGES += partx-utils mkf2fs fdisk e2fsprogs wpad kmod-usb-hid \ $(eval $(call BuildTarget)) -$(eval $(call $(if $(CONFIG_TARGET_ROOTFS_ISO),RequireCommand,Ignore),mkisofs, \ +$(eval $(call $(if $(CONFIG_ISO_IMAGES),RequireCommand,Ignore),mkisofs, \ Please install mkisofs. \ )) diff --git a/target/linux/x86/generic/profiles/000-Generic.mk b/target/linux/x86/generic/profiles/000-Generic.mk deleted file mode 100644 index 7717131be0..0000000000 --- a/target/linux/x86/generic/profiles/000-Generic.mk +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (C) 2006-2019 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Generic - NAME:=Generic x86 - PACKAGES:=kmod-e1000e kmod-igb kmod-bnx2 \ - kmod-3c59x kmod-e100 kmod-e1000 kmod-natsemi kmod-ne2k-pci \ - kmod-pcnet32 kmod-8139too kmod-r8169 kmod-sis900 kmod-tg3 \ - kmod-via-rhine kmod-via-velocity -endef - -define Profile/Generic/Description - Generic Profile for x86 architecture -endef -$(eval $(call Profile,Generic)) diff --git a/target/linux/x86/geode/profiles/000-Generic.mk b/target/linux/x86/geode/profiles/000-Generic.mk deleted file mode 100644 index be11b33e97..0000000000 --- a/target/linux/x86/geode/profiles/000-Generic.mk +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright (C) 2006-2019 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Generic - NAME:=Generic x86/Geode - PACKAGES:= \ - soloscli linux-atm br2684ctl ppp-mod-pppoa pppdump pppstats \ - hwclock flashrom tc kmod-pppoa kmod-8139cp kmod-mppe \ - kmod-usb-ohci-pci kmod-hwmon-lm90 \ - kmod-via-rhine -endef - -define Profile/Generic/Description - Generic Profile for all Geode boards. -endef -$(eval $(call Profile,Generic)) diff --git a/target/linux/x86/geode/profiles/100-Geos.mk b/target/linux/x86/geode/profiles/100-Geos.mk deleted file mode 100644 index f51e892cbf..0000000000 --- a/target/linux/x86/geode/profiles/100-Geos.mk +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (C) 2006-2019 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Geos - NAME:=Geos - PACKAGES:= \ - soloscli linux-atm br2684ctl ppp-mod-pppoa pppdump pppstats \ - hwclock flashrom tc kmod-pppoa kmod-8139cp kmod-mppe \ - kmod-usb-ohci-pci kmod-hwmon-lm90 -endef - -define Profile/Geos/Description - Traverse Technologies Geos ADSL router -endef -$(eval $(call Profile,Geos)) diff --git a/target/linux/x86/geode/target.mk b/target/linux/x86/geode/target.mk index f1d7b9fe14..f4c7b9564e 100644 --- a/target/linux/x86/geode/target.mk +++ b/target/linux/x86/geode/target.mk @@ -1,5 +1,5 @@ BOARDNAME:=AMD Geode based systems -FEATURES:=squashfs ext4 pci usb gpio +FEATURES:=pci usb gpio DEFAULT_PACKAGES += \ kmod-crypto-hw-geode kmod-crypto-cbc \ kmod-ath5k kmod-ath9k \ diff --git a/target/linux/x86/image/64.mk b/target/linux/x86/image/64.mk new file mode 100644 index 0000000000..bde76ceba5 --- /dev/null +++ b/target/linux/x86/image/64.mk @@ -0,0 +1,5 @@ +define Device/generic + DEVICE_TITLE := Generic x86/64 + GRUB2_VARIANT := generic +endef +TARGET_DEVICES += generic diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 373f2396b7..c01065f8e6 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -1,5 +1,5 @@ -# -# Copyright (C) 2006-2012 OpenWrt.org +# +# Copyright (C) 2006-2020 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -7,20 +7,16 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.mk -export PATH=$(TARGET_PATH):/sbin - -GRUB2_MODULES = biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial test vga -GRUB2_MODULES_ISO = biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga +GRUB2_VARIANT = GRUB_TERMINALS = GRUB_SERIAL_CONFIG = GRUB_TERMINAL_CONFIG = GRUB_CONSOLE_CMDLINE = -USE_ATKBD = generic 64 - ifneq ($(strip $(foreach subtarget,$(USE_ATKBD),$(CONFIG_TARGET_x86_$(subtarget)))),) - GRUB2_MODULES += at_keyboard - GRUB2_MODULES_ISO += at_keyboard + GRUB2_VARIANT := generic +else + GRUB2_VARIANT := legacy endif ifneq ($(CONFIG_GRUB_CONSOLE),) @@ -46,139 +42,95 @@ ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(IMG_PART_SIGNATURE)-02) GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_GRUB_TIMEOUT)) GRUB_TITLE:=$(call qstrip,$(CONFIG_GRUB_TITLE)) -ifneq ($(CONFIG_GRUB_IMAGES),) +BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS)) - BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS)) - - define Image/cmdline/ext4 - root=$(ROOTPART) rootfstype=ext4 rootwait - endef - - define Image/cmdline/squashfs - root=$(ROOTPART) rootfstype=squashfs rootwait - endef - - define Image/Build/grub2 - # left here because the image builder doesnt need these - rm -fR $(KDIR)/root.grub $(KDIR)/grub2 - $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2 - $(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz - grub-mkimage \ - -p /boot/grub \ - -d $(STAGING_DIR_HOST)/lib/grub/i386-pc \ - -o $(KDIR)/root.grub/boot/grub/core.img \ - -O i386-pc \ - -c ./grub-early.cfg \ - $(GRUB2_MODULES) - $(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/root.grub/boot/grub/ - echo '(hd0) $(BIN_DIR)/$(IMG_COMBINED)-$(1).img' > $(KDIR)/grub2/device.map - sed \ - -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ - -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ - -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ - -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ - -e 's#@TITLE@#$(GRUB_TITLE)#g' \ - ./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg - -$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/ - grub-bios-setup -V | cut -d' ' -f3 > $(KDIR)/root.grub/boot/grub/version - PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \ - $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \ +define Build/combined + $(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/boot/vmlinuz + -$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/ + PADDING="$(CONFIG_TARGET_IMAGES_PAD)" SIGNATURE="$(IMG_PART_SIGNATURE)" $(SCRIPT_DIR)/gen_image_generic.sh \ + $@ \ + $(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \ + $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \ 256 - grub-bios-setup \ - --device-map="$(KDIR)/grub2/device.map" \ - -d "$(KDIR)/root.grub/boot/grub" \ - -r "hd0,msdos1" \ - "$(BIN_DIR)/$(IMG_COMBINED)-$(1).img" - endef -endif - -define Image/Build/iso - rm -fR $(KDIR)/root.grub $(KDIR)/grub2 - $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2 - $(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz - grub-mkimage \ - -p /boot/grub \ - -d $(STAGING_DIR_HOST)/lib/grub/i386-pc \ - -o $(KDIR)/grub2/eltorito.img \ - -O i386-pc \ - -c ./grub-early.cfg \ - $(GRUB2_MODULES_ISO) - cat \ - $(STAGING_DIR_HOST)/lib/grub/i386-pc/cdboot.img \ - $(KDIR)/grub2/eltorito.img \ - > $(KDIR)/root.grub/boot/grub/eltorito.img - sed \ - -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ - -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ - -e 's#@CMDLINE@#root=/dev/sr0 rootfstype=iso9660 rootwait $(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ - -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ - -e 's#@TITLE@#$(GRUB_TITLE)#g' \ - ./grub-iso.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg - -$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/ - mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \ - -o $(KDIR)/root.iso $(KDIR)/root.grub $(TARGET_DIR) endef -ifneq ($(CONFIG_VDI_IMAGES),) - define Image/Build/vdi - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vdi \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi - endef -endif +define Build/grub-config + rm -fR $@.boot + $(INSTALL_DIR) $@.boot/boot/grub + sed \ + -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ + -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ + -e 's#@ROOTPART@#root=$(ROOTPART) rootwait#g' \ + -e 's#@CMDLINE@#$(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE)#g' \ + -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ + -e 's#@TITLE@#$(GRUB_TITLE)#g' \ + ./grub-$(1).cfg > $@.boot/boot/grub/grub.cfg +endef -ifneq ($(CONFIG_VMDK_IMAGES),) - define Image/Build/vmdk - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk - #build the ESXI VMDK with - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk || true - rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi-flat.vmdk || true - $(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1).img \ - $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk - endef -endif +define Build/grub-install + rm -fR $@.grub2 + $(INSTALL_DIR) $@.grub2 + $(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img \ + $(STAGING_DIR_HOST)/lib/grub/grub2-$(GRUB2_VARIANT)/core.img \ + $@.grub2/ + echo '(hd0) $@' > $@.grub2/device.map + $(STAGING_DIR_HOST)/bin/grub-bios-setup \ + -m "$@.grub2/device.map" \ + -d "$@.grub2" \ + -r "hd0,msdos1" \ + $@ +endef -define Image/Build/gzip - gzip -f9n $(BIN_DIR)/$(IMG_COMBINED)-$(1).img - gzip -f9n $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img +define Build/iso + $(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/boot/vmlinuz + cat \ + $(STAGING_DIR_HOST)/lib/grub/i386-pc/cdboot.img \ + $(STAGING_DIR_HOST)/lib/grub/grub2-iso/eltorito.img \ + > $@.boot/boot/grub/eltorito.img + -$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/ + mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \ + -o $@ $@.boot $(TARGET_DIR) +endef + +DEVICE_VARS += GRUB2_VARIANT +define Device/Default + ARTIFACT/image.iso := grub-config iso | iso + IMAGE/combined.img := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install + IMAGE/combined.img.gz := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | gzip + IMAGE/combined.vdi := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | qemu-image vdi + IMAGE/combined.vmdk := append-rootfs | pad-extra 128k | grub-config pc | combined | grub-install | qemu-image vmdk + ifeq ($(CONFIG_TARGET_IMAGES_GZIP),y) + IMAGES := combined.img.gz + else + IMAGES := combined.img + endif + KERNEL := kernel-bin + KERNEL_INSTALL := 1 + KERNEL_NAME := bzImage + ifeq ($(CONFIG_ISO_IMAGES),y) + ARTIFACTS := image.iso + endif + ifeq ($(CONFIG_VDI_IMAGES),y) + IMAGES += combined.vdi + endif + ifeq ($(CONFIG_VMDK_IMAGES),y) + IMAGES += combined.vmdk + endif endef $(eval $(call Image/gzip-ext4-padded-squashfs)) -define Image/BuildKernel - $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz -endef - -define Image/Prepare - $(call Image/Prepare/grub2) -endef - -define Image/Build/Initramfs - $(CP) $(KDIR)/bzImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage -endef - -define Image/Build - $(call Image/Build/$(1)) - ifneq ($(1),iso) - $(call Image/Build/grub2,$(1)) - $(call Image/Build/vdi,$(1)) - $(call Image/Build/vmdk,$(1)) - $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img - else - $(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso - endif - $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz - $(call Image/Build/gzip/$(1)) -ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) - $(call Image/Build/Initramfs) +ifeq ($(SUBTARGET),64) + include 64.mk +endif + +ifeq ($(SUBTARGET),generic) + include generic.mk +endif + +ifeq ($(SUBTARGET),legacy) + include legacy.mk endif -endef $(eval $(call BuildImage)) + diff --git a/target/linux/x86/image/generic.mk b/target/linux/x86/image/generic.mk new file mode 100644 index 0000000000..65f7361184 --- /dev/null +++ b/target/linux/x86/image/generic.mk @@ -0,0 +1,8 @@ +define Device/generic + DEVICE_TITLE := Generic x86 + DEVICE_PACKAGES += kmod-3c59x kmod-8139too kmod-e100 kmod-e1000 kmod-natsemi \ + kmod-ne2k-pci kmod-pcnet32 kmod-r8169 kmod-sis900 kmod-tg3 \ + kmod-via-rhine kmod-via-velocity + GRUB2_VARIANT := generic +endef +TARGET_DEVICES += generic diff --git a/target/linux/x86/image/geode.mk b/target/linux/x86/image/geode.mk new file mode 100644 index 0000000000..0b463e36ed --- /dev/null +++ b/target/linux/x86/image/geode.mk @@ -0,0 +1,16 @@ +define Device/generic + DEVICE_TITLE := Generic x86/Geode + DEVICE_PACKAGES += kmod-crypto-cbc kmod-crypto-hw-geode kmod-ledtrig-gpio \ + kmod-ledtrig-heartbeat kmod-ledtrig-netdev kmod-via-rhine + GRUB2_VARIANT := legacy +endef +TARGET_DEVICES += generic + +define Device/geos + $(call Device/generic) + DEVICE_TITLE := Traverse Technologies Geos + DEVICE_PACKAGES += br2684ctl flashrom kmod-8139cp kmod-hwmon-lm90 kmod-mppe \ + kmod-pppoa kmod-usb-ohci-pci linux-atm ppp-mod-pppoa pppdump pppstats \ + soloscli tc +endef +TARGET_DEVICES += geos diff --git a/target/linux/x86/image/grub-iso.cfg b/target/linux/x86/image/grub-iso.cfg index 9c59bdf6d4..f5848b3853 100644 --- a/target/linux/x86/image/grub-iso.cfg +++ b/target/linux/x86/image/grub-iso.cfg @@ -6,5 +6,5 @@ set timeout="@TIMEOUT@" set root='(cd)' menuentry "@TITLE@" { - linux /boot/vmlinuz @CMDLINE@ noinitrd + linux /boot/vmlinuz root=/dev/sr0 rootfstype=iso9660 rootwait @CMDLINE@ noinitrd } diff --git a/target/linux/x86/image/grub.cfg b/target/linux/x86/image/grub-pc.cfg similarity index 57% rename from target/linux/x86/image/grub.cfg rename to target/linux/x86/image/grub-pc.cfg index 76a9885544..75605bcabf 100644 --- a/target/linux/x86/image/grub.cfg +++ b/target/linux/x86/image/grub-pc.cfg @@ -6,8 +6,8 @@ set timeout="@TIMEOUT@" set root='(hd0,msdos1)' menuentry "@TITLE@" { - linux /boot/vmlinuz @CMDLINE@ noinitrd + linux /boot/vmlinuz @ROOTPART@ @CMDLINE@ noinitrd } menuentry "@TITLE@ (failsafe)" { - linux /boot/vmlinuz failsafe=true @CMDLINE@ noinitrd + linux /boot/vmlinuz failsafe=true @ROOTPART@ @CMDLINE@ noinitrd } diff --git a/target/linux/x86/image/legacy.mk b/target/linux/x86/image/legacy.mk new file mode 100644 index 0000000000..9909341729 --- /dev/null +++ b/target/linux/x86/image/legacy.mk @@ -0,0 +1,8 @@ +define Device/generic + DEVICE_TITLE := Generic x86/legacy + DEVICE_PACKAGES += kmod-3c59x kmod-8139too kmod-e100 kmod-e1000 \ + kmod-natsemi kmod-ne2k-pci kmod-pcnet32 kmod-r8169 kmod-sis900 \ + kmod-tg3 kmod-via-rhine kmod-via-velocity + GRUB2_VARIANT := legacy +endef +TARGET_DEVICES += generic diff --git a/target/linux/x86/legacy/profiles/000-Generic.mk b/target/linux/x86/legacy/profiles/000-Generic.mk deleted file mode 100644 index 566a66c1be..0000000000 --- a/target/linux/x86/legacy/profiles/000-Generic.mk +++ /dev/null @@ -1,18 +0,0 @@ -# -# Copyright (C) 2006-2019 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Generic - NAME:=Generic x86/legacy - PACKAGES:=kmod-3c59x kmod-e100 kmod-e1000 kmod-natsemi kmod-ne2k-pci \ - kmod-pcnet32 kmod-8139too kmod-r8169 kmod-sis900 kmod-tg3 \ - kmod-via-rhine kmod-via-velocity -endef - -define Profile/Generic/Description - Generic Profile for x86 legacy architecutre -endef -$(eval $(call Profile,Generic))