From bd4c2c67f07ec0bcd823332da00cc8d3a7d733d7 Mon Sep 17 00:00:00 2001 From: Jannis <52237708+heisath@users.noreply.github.com> Date: Fri, 22 Jan 2021 13:20:44 +0100 Subject: [PATCH] [AR-609] Switch mvebu-current to 5.10.y (reusing config and patches from -dev) (#2547) * mvebu-current move to lk5.10.y * mvebu-current update patches based on -dev * mvebu-current update kernel config --- config/kernel/linux-mvebu-current.config | 155 ++++-- config/sources/families/mvebu.conf | 2 +- ...h => 10-mvebu-clearfog-pcie-updates.patch} | 93 ++-- .../11-implement-slot-capabilities-SSPL.patch | 55 +++ ...2-sfp-display-SFP-module-information.patch | 441 ++++++++++++------ ...-mvebu-gpio-add_wake_on_gpio_support.patch | 10 +- ..._DMA_block_memory_allocation_to_2048.patch | 2 +- ...VFP_emulation_exceptions_kernel_mode.patch | 158 ------- 8 files changed, 495 insertions(+), 421 deletions(-) rename patch/kernel/mvebu-current/{40-pci-add-irq-change-handler-sspl.patch => 10-mvebu-clearfog-pcie-updates.patch} (81%) create mode 100644 patch/kernel/mvebu-current/11-implement-slot-capabilities-SSPL.patch delete mode 100644 patch/kernel/mvebu-current/omit_VFP_emulation_exceptions_kernel_mode.patch diff --git a/config/kernel/linux-mvebu-current.config b/config/kernel/linux-mvebu-current.config index 8f2460bba9..39478781d3 100644 --- a/config/kernel/linux-mvebu-current.config +++ b/config/kernel/linux-mvebu-current.config @@ -1,12 +1,13 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 5.9.14 Kernel Configuration +# Linux/arm 5.10.6 Kernel Configuration # CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=80300 CONFIG_LD_VERSION=232000000 CONFIG_CLANG_VERSION=0 +CONFIG_LLD_VERSION=0 CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y @@ -58,6 +59,7 @@ CONFIG_HARDIRQS_SW_RESEND=y CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_IRQ_IPI=y CONFIG_GENERIC_MSI_IRQ=y CONFIG_GENERIC_MSI_IRQ_DOMAIN=y CONFIG_HANDLE_DOMAIN_IRQ=y @@ -110,6 +112,8 @@ CONFIG_TREE_RCU=y CONFIG_RCU_EXPERT=y CONFIG_SRCU=y CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_TASKS_TRACE_RCU=y CONFIG_RCU_STALL_COMMON=y CONFIG_RCU_NEED_SEGCBLIST=y CONFIG_RCU_FANOUT=32 @@ -177,6 +181,7 @@ CONFIG_RD_ZSTD=y # CONFIG_BOOT_CONFIG is not set CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y CONFIG_SYSCTL=y CONFIG_HAVE_UID16=y CONFIG_BPF=y @@ -207,6 +212,7 @@ CONFIG_KALLSYMS=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_BPF_SYSCALL=y # CONFIG_BPF_JIT_ALWAYS_ON is not set +# CONFIG_BPF_PRELOAD is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_RSEQ=y @@ -472,7 +478,6 @@ CONFIG_ARM_MODULE_PLTS=y CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_ALIGNMENT_TRAP=y # CONFIG_UACCESS_WITH_MEMCPY is not set -CONFIG_SECCOMP=y # CONFIG_PARAVIRT is not set # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set # CONFIG_XEN is not set @@ -620,6 +625,7 @@ CONFIG_AS_VFP_VMRS_FPINST=y # # General architecture-dependent options # +CONFIG_SET_FS=y CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_JUMP_LABEL=y @@ -645,7 +651,9 @@ CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y CONFIG_SECCOMP_FILTER=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y @@ -672,6 +680,7 @@ CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y CONFIG_STRICT_MODULE_RWX=y CONFIG_ARCH_HAS_PHYS_TO_DMA=y # CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y # # GCOV-based kernel profiling @@ -820,7 +829,7 @@ CONFIG_ZSWAP_ZPOOL_DEFAULT="z3fold" CONFIG_ZSWAP_DEFAULT_ON=y CONFIG_ZPOOL=y CONFIG_ZBUD=y -CONFIG_Z3FOLD=m +CONFIG_Z3FOLD=y CONFIG_ZSMALLOC=m # CONFIG_ZSMALLOC_STAT is not set CONFIG_GENERIC_EARLY_IOREMAP=y @@ -1560,7 +1569,6 @@ CONFIG_NET_FLOW_LIMIT=y # Network testing # CONFIG_NET_PKTGEN=m -# CONFIG_NET_DROP_MONITOR is not set # end of Network testing # end of Networking options @@ -1592,6 +1600,7 @@ CONFIG_CAN_RAW=m CONFIG_CAN_BCM=m CONFIG_CAN_GW=m CONFIG_CAN_J1939=m +# CONFIG_CAN_ISOTP is not set # # CAN Device Drivers @@ -1634,6 +1643,7 @@ CONFIG_CAN_SOFTING=m # CONFIG_CAN_HI311X=m CONFIG_CAN_MCP251X=m +# CONFIG_CAN_MCP251XFD is not set # end of CAN SPI interfaces # @@ -2072,6 +2082,12 @@ CONFIG_MTD_NAND_DISKONCHIP=m CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 # CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set # CONFIG_MTD_SPI_NAND is not set + +# +# ECC engine support +# +CONFIG_MTD_NAND_ECC=y +# end of ECC engine support # end of NAND # @@ -2095,7 +2111,6 @@ CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_NET=y -CONFIG_OF_MDIO=y CONFIG_OF_RESERVED_MEM=y CONFIG_OF_RESOLVE=y CONFIG_OF_OVERLAY=y @@ -2165,6 +2180,7 @@ CONFIG_SRAM_EXEC=y # CONFIG_XILINX_SDFEC is not set CONFIG_MISC_RTSX=m CONFIG_PVPANIC=m +# CONFIG_HISI_HIKEY_USB is not set # CONFIG_C2PORT is not set # @@ -2191,13 +2207,6 @@ CONFIG_EEPROM_EE1004=m # CONFIG_SENSORS_LIS3_SPI is not set # CONFIG_SENSORS_LIS3_I2C is not set # CONFIG_ALTERA_STAPL is not set - -# -# Intel MIC & related support -# -# CONFIG_VOP_BUS is not set -# end of Intel MIC & related support - # CONFIG_ECHO is not set CONFIG_MISC_ALCOR_PCI=m CONFIG_MISC_RTSX_PCI=m @@ -2522,6 +2531,7 @@ CONFIG_NET_DSA_MV88E6060=m CONFIG_NET_DSA_MV88E6XXX=m CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y # CONFIG_NET_DSA_MV88E6XXX_PTP is not set +# CONFIG_NET_DSA_MSCC_SEVILLE is not set # CONFIG_NET_DSA_AR9331 is not set CONFIG_NET_DSA_SJA1105=m # CONFIG_NET_DSA_SJA1105_PTP is not set @@ -2579,6 +2589,7 @@ CONFIG_MVNETA_BM=y CONFIG_MVPP2=y # CONFIG_SKGE is not set # CONFIG_SKY2 is not set +# CONFIG_PRESTERA is not set # CONFIG_NET_VENDOR_MELLANOX is not set # CONFIG_NET_VENDOR_MICREL is not set # CONFIG_NET_VENDOR_MICROCHIP is not set @@ -2633,52 +2644,32 @@ CONFIG_NET_VENDOR_XILINX=y # CONFIG_XILINX_LL_TEMAC is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -CONFIG_MDIO_DEVICE=y -CONFIG_MDIO_BUS=y -CONFIG_MDIO_DEVRES=y -# CONFIG_MDIO_BCM_UNIMAC is not set -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MDIO_BUS_MUX_GPIO is not set -# CONFIG_MDIO_BUS_MUX_MMIOREG is not set -# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set -# CONFIG_MDIO_HISI_FEMAC is not set -CONFIG_MDIO_I2C=m -# CONFIG_MDIO_IPQ4019 is not set -# CONFIG_MDIO_IPQ8064 is not set -# CONFIG_MDIO_MSCC_MIIM is not set -# CONFIG_MDIO_MVUSB is not set -# CONFIG_MDIO_XPCS is not set CONFIG_PHYLINK=y CONFIG_PHYLIB=y CONFIG_SWPHY=y CONFIG_LED_TRIGGER_PHY=y +CONFIG_FIXED_PHY=y +CONFIG_SFP=m # # MII PHY device drivers # -CONFIG_SFP=m -# CONFIG_ADIN_PHY is not set # CONFIG_AMD_PHY is not set +# CONFIG_ADIN_PHY is not set # CONFIG_AQUANTIA_PHY is not set CONFIG_AX88796B_PHY=m -# CONFIG_BCM7XXX_PHY is not set -# CONFIG_BCM87XX_PHY is not set # CONFIG_BROADCOM_PHY is not set # CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set # CONFIG_BCM84881_PHY is not set +# CONFIG_BCM87XX_PHY is not set # CONFIG_CICADA_PHY is not set # CONFIG_CORTINA_PHY is not set # CONFIG_DAVICOM_PHY is not set -# CONFIG_DP83822_PHY is not set -# CONFIG_DP83TC811_PHY is not set -CONFIG_DP83848_PHY=m -# CONFIG_DP83867_PHY is not set -# CONFIG_DP83869_PHY is not set -CONFIG_FIXED_PHY=y # CONFIG_ICPLUS_PHY is not set +# CONFIG_LXT_PHY is not set # CONFIG_INTEL_XWAY_PHY is not set # CONFIG_LSI_ET1011C_PHY is not set -# CONFIG_LXT_PHY is not set CONFIG_MARVELL_PHY=y # CONFIG_MARVELL_10G_PHY is not set # CONFIG_MICREL_PHY is not set @@ -2695,9 +2686,40 @@ CONFIG_ROCKCHIP_PHY=m CONFIG_SMSC_PHY=m CONFIG_STE10XP=m CONFIG_TERANETICS_PHY=m +# CONFIG_DP83822_PHY is not set +# CONFIG_DP83TC811_PHY is not set +CONFIG_DP83848_PHY=m +# CONFIG_DP83867_PHY is not set +# CONFIG_DP83869_PHY is not set CONFIG_VITESSE_PHY=m # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_BUS=y +CONFIG_OF_MDIO=y +CONFIG_MDIO_DEVRES=y +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +# CONFIG_MDIO_HISI_FEMAC is not set +CONFIG_MDIO_I2C=m +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_MSCC_MIIM is not set +# CONFIG_MDIO_IPQ4019 is not set +# CONFIG_MDIO_IPQ8064 is not set + +# +# MDIO Multiplexers +# +# CONFIG_MDIO_BUS_MUX_GPIO is not set +# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set +# CONFIG_MDIO_BUS_MUX_MMIOREG is not set + +# +# PCS device drivers +# +# CONFIG_PCS_XPCS is not set +# end of PCS device drivers + CONFIG_PLIP=m CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m @@ -2802,6 +2824,7 @@ CONFIG_ATH10K_USB=m # CONFIG_ATH10K_DEBUG is not set # CONFIG_ATH10K_DEBUGFS is not set # CONFIG_WCN36XX is not set +# CONFIG_ATH11K is not set # CONFIG_WLAN_VENDOR_ATMEL is not set CONFIG_WLAN_VENDOR_BROADCOM=y CONFIG_B43=m @@ -2988,7 +3011,6 @@ CONFIG_WLAN_VENDOR_TI=y CONFIG_RTL8723DU=m CONFIG_RTL8723DS=m CONFIG_RTL8822BU=m -CONFIG_RTL8188EU=m CONFIG_RTL8821CU=m CONFIG_88XXAU=m # CONFIG_RTL8192EU is not set @@ -3113,6 +3135,7 @@ CONFIG_MOUSE_PS2_SMBUS=y CONFIG_INPUT_JOYSTICK=y # CONFIG_JOYSTICK_ANALOG is not set # CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADC is not set # CONFIG_JOYSTICK_ADI is not set # CONFIG_JOYSTICK_COBRA is not set # CONFIG_JOYSTICK_GF2K is not set @@ -3132,11 +3155,15 @@ CONFIG_JOYSTICK_IFORCE_USB=m # CONFIG_JOYSTICK_STINGER is not set # CONFIG_JOYSTICK_TWIDJOY is not set # CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_DB9 is not set +# CONFIG_JOYSTICK_GAMECON is not set +# CONFIG_JOYSTICK_TURBOGRAFX is not set # CONFIG_JOYSTICK_AS5011 is not set # CONFIG_JOYSTICK_JOYDUMP is not set CONFIG_JOYSTICK_XPAD=m CONFIG_JOYSTICK_XPAD_FF=y CONFIG_JOYSTICK_XPAD_LEDS=y +# CONFIG_JOYSTICK_WALKERA0701 is not set # CONFIG_JOYSTICK_PSXPAD_SPI is not set # CONFIG_JOYSTICK_PXRC is not set # CONFIG_JOYSTICK_FSIA6B is not set @@ -3264,6 +3291,7 @@ CONFIG_HW_RANDOM=m CONFIG_HW_RANDOM_VIRTIO=m CONFIG_HW_RANDOM_OPTEE=m # CONFIG_HW_RANDOM_CCTRNG is not set +# CONFIG_HW_RANDOM_XIPHERA is not set # CONFIG_APPLICOM is not set CONFIG_DEVMEM=y CONFIG_DEVKMEM=y @@ -3460,6 +3488,12 @@ CONFIG_PINCTRL_ARMADA_375=y CONFIG_PINCTRL_ARMADA_38X=y CONFIG_PINCTRL_ARMADA_39X=y CONFIG_PINCTRL_ARMADA_XP=y + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_GPIOLIB=y CONFIG_GPIOLIB_FASTPATH_LIMIT=512 @@ -3467,6 +3501,8 @@ CONFIG_OF_GPIO=y CONFIG_GPIOLIB_IRQCHIP=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y CONFIG_GPIO_GENERIC=y CONFIG_GPIO_MAX730X=m @@ -3580,8 +3616,6 @@ CONFIG_W1_SLAVE_DS28E04=m CONFIG_W1_SLAVE_DS28E17=m # end of 1-wire Slaves -CONFIG_POWER_AVS=y -# CONFIG_QCOM_CPR is not set CONFIG_POWER_RESET=y # CONFIG_POWER_RESET_BRCMKONA is not set # CONFIG_POWER_RESET_BRCMSTB is not set @@ -3609,7 +3643,6 @@ CONFIG_BATTERY_DS2760=m CONFIG_BATTERY_DS2780=m CONFIG_BATTERY_DS2781=m CONFIG_BATTERY_DS2782=m -CONFIG_BATTERY_LEGO_EV3=m CONFIG_BATTERY_SBS=m CONFIG_CHARGER_SBS=m CONFIG_MANAGER_SBS=m @@ -3634,6 +3667,7 @@ CONFIG_CHARGER_BQ24257=m CONFIG_CHARGER_BQ24735=m # CONFIG_CHARGER_BQ2515X is not set CONFIG_CHARGER_BQ25890=m +# CONFIG_CHARGER_BQ25980 is not set CONFIG_CHARGER_SMB347=m CONFIG_BATTERY_GAUGE_LTC2941=m CONFIG_CHARGER_RT9455=m @@ -3713,6 +3747,7 @@ CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_MAX31790=m CONFIG_SENSORS_MCP3021=m CONFIG_SENSORS_TC654=m +# CONFIG_SENSORS_MR75203 is not set CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_LM63=m CONFIG_SENSORS_LM70=m @@ -3743,6 +3778,7 @@ CONFIG_SENSORS_OCC=m CONFIG_SENSORS_PCF8591=m CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m +# CONFIG_SENSORS_ADM1266 is not set CONFIG_SENSORS_ADM1275=m # CONFIG_SENSORS_BEL_PFE is not set CONFIG_SENSORS_IBM_CFFPS=m @@ -3761,6 +3797,7 @@ CONFIG_SENSORS_MAX20751=m CONFIG_SENSORS_MAX31785=m CONFIG_SENSORS_MAX34440=m CONFIG_SENSORS_MAX8688=m +# CONFIG_SENSORS_MP2975 is not set CONFIG_SENSORS_PXE1610=m CONFIG_SENSORS_TPS40422=m CONFIG_SENSORS_TPS53679=m @@ -4018,6 +4055,7 @@ CONFIG_MFD_ROHM_BD718XX=m CONFIG_MFD_STPMIC1=m CONFIG_MFD_STMFX=m # CONFIG_RAVE_SP_CORE is not set +# CONFIG_MFD_INTEL_M10_BMC is not set # end of Multifunction device drivers CONFIG_REGULATOR=y @@ -4061,7 +4099,10 @@ CONFIG_REGULATOR_MCP16502=m # CONFIG_REGULATOR_PV88080 is not set # CONFIG_REGULATOR_PV88090 is not set # CONFIG_REGULATOR_PWM is not set +# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set CONFIG_REGULATOR_ROHM=m +# CONFIG_REGULATOR_RT4801 is not set +# CONFIG_REGULATOR_RTMV20 is not set # CONFIG_REGULATOR_SLG51000 is not set CONFIG_REGULATOR_STPMIC1=m # CONFIG_REGULATOR_SY8106A is not set @@ -4561,6 +4602,7 @@ CONFIG_LCD_LMS501KF03=m CONFIG_LCD_HX8357=m CONFIG_LCD_OTM3225A=m CONFIG_BACKLIGHT_CLASS_DEVICE=m +# CONFIG_BACKLIGHT_KTD253 is not set CONFIG_BACKLIGHT_PWM=m # CONFIG_BACKLIGHT_QCOM_WLED is not set CONFIG_BACKLIGHT_ADP8860=m @@ -4678,6 +4720,7 @@ CONFIG_HID_MACALLY=m # CONFIG_HID_GFRM is not set # CONFIG_HID_GLORIOUS is not set # CONFIG_HID_HOLTEK is not set +# CONFIG_HID_VIVALDI is not set # CONFIG_HID_GT683R is not set # CONFIG_HID_KEYTOUCH is not set # CONFIG_HID_KYE is not set @@ -4769,6 +4812,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # Miscellaneous USB options # CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set CONFIG_USB_DYNAMIC_MINORS=y # CONFIG_USB_OTG is not set # CONFIG_USB_OTG_PRODUCTLIST is not set @@ -4935,7 +4979,6 @@ CONFIG_USB_FTDI_ELAN=m CONFIG_USB_APPLEDISPLAY=m # CONFIG_APPLE_MFI_FASTCHARGE is not set CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_SISUSBVGA_CON is not set CONFIG_USB_LD=m CONFIG_USB_TRANCEVIBRATOR=m CONFIG_USB_IOWARRIOR=m @@ -5037,6 +5080,7 @@ CONFIG_LEDS_LM3692X=m CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_LP3952 is not set +# CONFIG_LEDS_LP50XX is not set # CONFIG_LEDS_LP55XX_COMMON is not set # CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA955X is not set @@ -5145,6 +5189,7 @@ CONFIG_RTC_DRV_S35390A=y # CONFIG_RTC_DRV_RX8025 is not set # CONFIG_RTC_DRV_EM3027 is not set CONFIG_RTC_DRV_RV3028=m +# CONFIG_RTC_DRV_RV3032 is not set # CONFIG_RTC_DRV_RV8803 is not set CONFIG_RTC_DRV_SD3078=m @@ -5388,14 +5433,12 @@ CONFIG_HMS_PROFINET=m # CONFIG_QLGE is not set # CONFIG_WFX is not set # CONFIG_GOLDFISH is not set -# CONFIG_MFD_CROS_EC is not set # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set CONFIG_HAVE_CLK=y CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y -# CONFIG_CLK_HSDK is not set CONFIG_COMMON_CLK_MAX9485=m # CONFIG_COMMON_CLK_SI5341 is not set # CONFIG_COMMON_CLK_SI5351 is not set @@ -5518,6 +5561,8 @@ CONFIG_MVEBU_DEVBUS=y CONFIG_IIO=m CONFIG_IIO_BUFFER=y CONFIG_IIO_BUFFER_CB=m +# CONFIG_IIO_BUFFER_DMA is not set +# CONFIG_IIO_BUFFER_DMAENGINE is not set # CONFIG_IIO_BUFFER_HW_CONSUMER is not set CONFIG_IIO_KFIFO_BUF=m CONFIG_IIO_TRIGGERED_BUFFER=m @@ -5753,6 +5798,7 @@ CONFIG_ADF4371=m # CONFIG_ADIS16130 is not set # CONFIG_ADIS16136 is not set # CONFIG_ADIS16260 is not set +# CONFIG_ADXRS290 is not set # CONFIG_ADXRS450 is not set # CONFIG_BMG160 is not set # CONFIG_FXAS21002C is not set @@ -5781,6 +5827,7 @@ CONFIG_MAX30102=m CONFIG_AM2315=m CONFIG_DHT11=m CONFIG_HDC100X=m +# CONFIG_HDC2010 is not set CONFIG_HTS221=m CONFIG_HTS221_I2C=m CONFIG_HTS221_SPI=m @@ -5820,6 +5867,7 @@ CONFIG_ADJD_S311=m CONFIG_AL3320A=m CONFIG_APDS9300=m CONFIG_APDS9960=m +# CONFIG_AS73211 is not set CONFIG_BH1750=m CONFIG_BH1780=m CONFIG_CM32181=m @@ -6020,6 +6068,7 @@ CONFIG_ORION_IRQCHIP=y # CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PHY_MIPI_DPHY=y +# CONFIG_USB_LGM_PHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set # CONFIG_PHY_CADENCE_TORRENT is not set # CONFIG_PHY_CADENCE_DPHY is not set @@ -6114,6 +6163,7 @@ CONFIG_FTM_QUADDEC=m # CONFIG_MICROCHIP_TCB_CAPTURE is not set CONFIG_MOST=m # CONFIG_MOST_USB_HDM is not set +# CONFIG_MOST_CDEV is not set # end of Device Drivers # @@ -6148,6 +6198,7 @@ CONFIG_JFS_SECURITY=y # CONFIG_JFS_DEBUG is not set CONFIG_JFS_STATISTICS=y CONFIG_XFS_FS=m +CONFIG_XFS_SUPPORT_V4=y CONFIG_XFS_QUOTA=y CONFIG_XFS_POSIX_ACL=y CONFIG_XFS_RT=y @@ -6375,6 +6426,7 @@ CONFIG_NFS_FSCACHE=y CONFIG_NFS_USE_KERNEL_DNS=y CONFIG_NFS_DEBUG=y CONFIG_NFS_DISABLE_UDP_SUPPORT=y +# CONFIG_NFS_V4_2_READ_PLUS is not set CONFIG_NFSD=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y @@ -6611,6 +6663,7 @@ CONFIG_CRYPTO_DH=y CONFIG_CRYPTO_ECC=m CONFIG_CRYPTO_ECDH=m CONFIG_CRYPTO_ECRDSA=m +# CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set # @@ -6709,7 +6762,7 @@ CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_842=y CONFIG_CRYPTO_LZ4=m CONFIG_CRYPTO_LZ4HC=m -CONFIG_CRYPTO_ZSTD=m +CONFIG_CRYPTO_ZSTD=y # # Random Number Generation @@ -6725,7 +6778,9 @@ CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m +# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set CONFIG_CRYPTO_USER_API_AEAD=m +CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y CONFIG_CRYPTO_STATS=y CONFIG_CRYPTO_HASH_INFO=y @@ -6866,6 +6921,7 @@ CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y CONFIG_DMA_NONCOHERENT_MMAP=y CONFIG_DMA_REMAP=y CONFIG_DMA_CMA=y +# CONFIG_DMA_PERNUMA_CMA is not set # # Default contiguous memory area size: @@ -7015,6 +7071,7 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_LOCK_TORTURE_TEST is not set # CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set # end of Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_STACKTRACE is not set @@ -7036,12 +7093,13 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y # # RCU Debugging # -# CONFIG_RCU_PERF_TEST is not set +# CONFIG_RCU_SCALE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_REF_SCALE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 CONFIG_RCU_TRACE=y # CONFIG_RCU_EQS_DEBUG is not set +# CONFIG_RCU_STRICT_GRACE_PERIOD is not set # end of RCU Debugging # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set @@ -7076,6 +7134,7 @@ CONFIG_DEBUG_MVEBU_UART0_ALTERNATE=y # CONFIG_DEBUG_SEMIHOSTING is not set # CONFIG_DEBUG_LL_UART_8250 is not set # CONFIG_DEBUG_LL_UART_PL01X is not set +# CONFIG_DEBUG_UART_FLOW_CONTROL is not set CONFIG_DEBUG_LL_INCLUDE="debug/8250.S" CONFIG_DEBUG_UART_8250=y CONFIG_DEBUG_UART_PHYS=0xf1012000 @@ -7083,7 +7142,6 @@ CONFIG_DEBUG_UART_VIRT=0xfec12000 CONFIG_DEBUG_UART_8250_SHIFT=2 # CONFIG_DEBUG_UART_8250_WORD is not set # CONFIG_DEBUG_UART_8250_PALMCHIP is not set -# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set CONFIG_DEBUG_UNCOMPRESS=y CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" CONFIG_EARLY_PRINTK=y @@ -7118,7 +7176,6 @@ CONFIG_TEST_STRSCPY=m # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_BITMAP is not set -# CONFIG_TEST_BITFIELD is not set # CONFIG_TEST_UUID is not set CONFIG_TEST_XARRAY=m # CONFIG_TEST_OVERFLOW is not set diff --git a/config/sources/families/mvebu.conf b/config/sources/families/mvebu.conf index 732bf4bab7..61fc62b399 100644 --- a/config/sources/families/mvebu.conf +++ b/config/sources/families/mvebu.conf @@ -16,7 +16,7 @@ case $BRANCH in current) - KERNELBRANCH='branch:linux-5.9.y' + KERNELBRANCH='branch:linux-5.10.y' ;; diff --git a/patch/kernel/mvebu-current/40-pci-add-irq-change-handler-sspl.patch b/patch/kernel/mvebu-current/10-mvebu-clearfog-pcie-updates.patch similarity index 81% rename from patch/kernel/mvebu-current/40-pci-add-irq-change-handler-sspl.patch rename to patch/kernel/mvebu-current/10-mvebu-clearfog-pcie-updates.patch index 0726339c32..6ee38c55de 100644 --- a/patch/kernel/mvebu-current/40-pci-add-irq-change-handler-sspl.patch +++ b/patch/kernel/mvebu-current/10-mvebu-clearfog-pcie-updates.patch @@ -1,20 +1,20 @@ -From 9a0c072c8eadc20f8eedc78cf33daa70f8bd5b11 Mon Sep 17 00:00:00 2001 +From 527312a74d9d85ba9520c8cb2979004f6d23c4da Mon Sep 17 00:00:00 2001 From: Russell King Date: Tue, 29 Nov 2016 10:13:46 +0000 -Subject: mvebu/clearfog pcie updates +Subject: [PATCH] mvebu/clearfog pcie updates Signed-off-by: Russell King --- - drivers/pci/controller/pci-mvebu.c | 112 ++++++++++++++++++++++++++++++++++++- - drivers/pci/pci-bridge-emul.c | 83 ++++++++++++++++----------- - drivers/pci/pci-bridge-emul.h | 15 +++++ - drivers/pci/pcie/aspm.c | 2 + + drivers/pci/controller/pci-mvebu.c | 112 ++++++++++++++++++++++++++++- + drivers/pci/pci-bridge-emul.c | 83 ++++++++++++--------- + drivers/pci/pci-bridge-emul.h | 15 ++++ + drivers/pci/pcie/aspm.c | 6 ++ drivers/pci/pcie/portdrv_core.c | 2 + - 5 files changed, 180 insertions(+), 34 deletions(-) + 5 files changed, 184 insertions(+), 34 deletions(-) --- a/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c -@@ -53,13 +53,26 @@ +@@ -52,7 +52,14 @@ PCIE_CONF_ADDR_EN) #define PCIE_CONF_DATA_OFF 0x18fc #define PCIE_MASK_OFF 0x1910 @@ -29,19 +29,7 @@ Signed-off-by: Russell King #define PCIE_CTRL_OFF 0x1a00 #define PCIE_CTRL_X1_MODE 0x0001 #define PCIE_STAT_OFF 0x1a04 - #define PCIE_STAT_BUS 0xff00 - #define PCIE_STAT_DEV 0x1f0000 - #define PCIE_STAT_LINK_DOWN BIT(0) -+#define PCIE_SSPL 0x1a0c -+#define PCIE_SSPL_MSGEN BIT(14) -+#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8) -+#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3) -+#define PCIE_SSPL_SPLV(x) ((x) & 0xff) -+#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff) - #define PCIE_RC_RTSTA 0x1a14 - #define PCIE_DEBUG_CTRL 0x1a60 - #define PCIE_DEBUG_SOFT_RESET BIT(20) -@@ -432,6 +445,54 @@ static void mvebu_pcie_handle_membase_ch +@@ -430,6 +437,54 @@ static void mvebu_pcie_handle_membase_ch &port->memwin); } @@ -96,22 +84,7 @@ Signed-off-by: Russell King static pci_bridge_emul_read_status_t mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge, int reg, u32 *value) -@@ -462,6 +523,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(str - *value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); - break; - -+ case PCI_EXP_SLTCAP: -+ { -+ u32 tmp = mvebu_readl(port, PCIE_SSPL); -+ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 | -+ PCIE_SSPL_SPLV_VAL(tmp) << 7; -+ break; -+ } -+ - case PCI_EXP_SLTCTL: - *value = PCI_EXP_SLTSTA_PDS << 16; - break; -@@ -477,6 +546,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(str +@@ -475,6 +530,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(str return PCI_BRIDGE_EMUL_HANDLED; } @@ -142,7 +115,7 @@ Signed-off-by: Russell King static void mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, int reg, u32 old, u32 new, u32 mask) -@@ -494,7 +587,8 @@ mvebu_pci_bridge_emul_base_conf_write(st +@@ -492,7 +571,8 @@ mvebu_pci_bridge_emul_base_conf_write(st mvebu_pcie_handle_iobase_change(port); if ((old ^ new) & PCI_COMMAND_MEMORY) mvebu_pcie_handle_membase_change(port); @@ -152,7 +125,7 @@ Signed-off-by: Russell King break; } -@@ -517,6 +611,11 @@ mvebu_pci_bridge_emul_base_conf_write(st +@@ -515,6 +595,11 @@ mvebu_pci_bridge_emul_base_conf_write(st mvebu_pcie_handle_iobase_change(port); break; @@ -164,7 +137,7 @@ Signed-off-by: Russell King case PCI_PRIMARY_BUS: mvebu_pcie_set_local_bus_nr(port, conf->secondary_bus); break; -@@ -534,6 +633,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(st +@@ -532,6 +617,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(st switch (reg) { case PCI_EXP_DEVCTL: @@ -175,19 +148,7 @@ Signed-off-by: Russell King /* * Armada370 data says these bits must always * be zero when in root complex mode. -@@ -556,9 +659,37 @@ mvebu_pci_bridge_emul_pcie_conf_write(st - mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); - break; - -+ case PCI_EXP_SLTCAP: -+ { -+ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) | -+ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) | -+ PCIE_SSPL_MSGEN; -+ mvebu_writel(port, sspl, PCIE_SSPL); -+ break; -+ } -+ +@@ -557,6 +646,25 @@ mvebu_pci_bridge_emul_pcie_conf_write(st case PCI_EXP_RTSTA: mvebu_writel(port, new, PCIE_RC_RTSTA); break; @@ -213,7 +174,7 @@ Signed-off-by: Russell King } } -@@ -566,6 +697,8 @@ static struct pci_bridge_emul_ops mvebu_ +@@ -564,6 +672,8 @@ static struct pci_bridge_emul_ops mvebu_ .write_base = mvebu_pci_bridge_emul_base_conf_write, .read_pcie = mvebu_pci_bridge_emul_pcie_conf_read, .write_pcie = mvebu_pci_bridge_emul_pcie_conf_write, @@ -240,7 +201,7 @@ Signed-off-by: Russell King bridge->pci_regs_behavior = kmemdup(pci_regs_behavior, sizeof(pci_regs_behavior), GFP_KERNEL); -@@ -321,25 +323,26 @@ int pci_bridge_emul_conf_read(struct pci +@@ -323,25 +325,26 @@ int pci_bridge_emul_conf_read(struct pci __le32 *cfgspace; const struct pci_bridge_reg_behavior *behavior; @@ -279,7 +240,7 @@ Signed-off-by: Russell King } if (read_op) -@@ -347,15 +350,20 @@ int pci_bridge_emul_conf_read(struct pci +@@ -349,15 +352,20 @@ int pci_bridge_emul_conf_read(struct pci else ret = PCI_BRIDGE_EMUL_NOT_HANDLED; @@ -304,7 +265,7 @@ Signed-off-by: Russell King if (size == 1) *value = (*value >> (8 * (where & 3))) & 0xff; -@@ -382,12 +390,6 @@ int pci_bridge_emul_conf_write(struct pc +@@ -385,12 +393,6 @@ int pci_bridge_emul_conf_write(struct pc __le32 *cfgspace; const struct pci_bridge_reg_behavior *behavior; @@ -317,7 +278,7 @@ Signed-off-by: Russell King shift = (where & 0x3) * 8; if (size == 4) -@@ -403,27 +405,42 @@ int pci_bridge_emul_conf_write(struct pc +@@ -406,27 +408,42 @@ int pci_bridge_emul_conf_write(struct pc if (ret != PCIBIOS_SUCCESSFUL) return ret; @@ -404,12 +365,16 @@ Signed-off-by: Russell King struct pci_bridge_reg_behavior; --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c -@@ -576,6 +576,8 @@ static void pcie_aspm_cap_init(struct pc - */ - pcie_get_aspm_reg(parent, &upreg); - pcie_get_aspm_reg(child, &dwreg); -+dev_info(&parent->dev, "up support %x enabled %x\n", upreg.support, upreg.enabled); -+dev_info(&parent->dev, "dn support %x enabled %x\n", dwreg.support, dwreg.enabled); +@@ -578,6 +578,12 @@ static void pcie_aspm_cap_init(struct pc + pcie_capability_read_dword(child, PCI_EXP_LNKCAP, &child_lnkcap); + pcie_capability_read_word(parent, PCI_EXP_LNKCTL, &parent_lnkctl); + pcie_capability_read_word(child, PCI_EXP_LNKCTL, &child_lnkctl); ++dev_info(&parent->dev, "up support %x enabled %x\n", ++ (parent_lnkcap & PCI_EXP_LNKCAP_ASPMS) >> 10, ++ !!(parent_lnkctl & PCI_EXP_LNKCTL_ASPMC)); ++dev_info(&parent->dev, "dn support %x enabled %x\n", ++ (child_lnkcap & PCI_EXP_LNKCAP_ASPMS) >> 10, ++ !!(child_lnkctl & PCI_EXP_LNKCTL_ASPMC)); /* * Setup L0s state diff --git a/patch/kernel/mvebu-current/11-implement-slot-capabilities-SSPL.patch b/patch/kernel/mvebu-current/11-implement-slot-capabilities-SSPL.patch new file mode 100644 index 0000000000..95282f307a --- /dev/null +++ b/patch/kernel/mvebu-current/11-implement-slot-capabilities-SSPL.patch @@ -0,0 +1,55 @@ +From 2298f59cecc69b0fc6471c5fd3f7629af2d274b2 Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Tue, 29 Nov 2016 10:13:48 +0000 +Subject: [PATCH] implement slot capabilities (SSPL) + +--- + drivers/pci/controller/pci-mvebu.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +--- a/drivers/pci/controller/pci-mvebu.c ++++ b/drivers/pci/controller/pci-mvebu.c +@@ -66,6 +66,12 @@ + #define PCIE_STAT_BUS 0xff00 + #define PCIE_STAT_DEV 0x1f0000 + #define PCIE_STAT_LINK_DOWN BIT(0) ++#define PCIE_SSPL 0x1a0c ++#define PCIE_SSPL_MSGEN BIT(14) ++#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8) ++#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3) ++#define PCIE_SSPL_SPLV(x) ((x) & 0xff) ++#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff) + #define PCIE_RC_RTSTA 0x1a14 + #define PCIE_DEBUG_CTRL 0x1a60 + #define PCIE_DEBUG_SOFT_RESET BIT(20) +@@ -515,6 +521,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(str + *value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); + break; + ++ case PCI_EXP_SLTCAP: ++ { ++ u32 tmp = mvebu_readl(port, PCIE_SSPL); ++ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 | ++ PCIE_SSPL_SPLV_VAL(tmp) << 7; ++ break; ++ } ++ + case PCI_EXP_SLTCTL: + *value = PCI_EXP_SLTSTA_PDS << 16; + break; +@@ -643,6 +657,15 @@ mvebu_pci_bridge_emul_pcie_conf_write(st + mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); + break; + ++ case PCI_EXP_SLTCAP: ++ { ++ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) | ++ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) | ++ PCIE_SSPL_MSGEN; ++ mvebu_writel(port, sspl, PCIE_SSPL); ++ break; ++ } ++ + case PCI_EXP_RTSTA: + mvebu_writel(port, new, PCIE_RC_RTSTA); + break; diff --git a/patch/kernel/mvebu-current/402-sfp-display-SFP-module-information.patch b/patch/kernel/mvebu-current/402-sfp-display-SFP-module-information.patch index ca117290eb..cc5d2fa393 100644 --- a/patch/kernel/mvebu-current/402-sfp-display-SFP-module-information.patch +++ b/patch/kernel/mvebu-current/402-sfp-display-SFP-module-information.patch @@ -1,18 +1,42 @@ -From e76632d118659347d9261a4470d9f60bfbe0044c Mon Sep 17 00:00:00 2001 +From 88e942a0b703fe54dad925f27f033869e4f10fba Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 13 Sep 2015 01:06:31 +0100 -Subject: sfp: display SFP module information +Subject: [PATCH] net: sfp: display SFP module information [*not for + mainline*] + +Display SFP module information verbosely, splitting the generic parts +into a separate file. Signed-off-by: Russell King --- ---- a/drivers/net/phy/sfp.c -+++ b/drivers/net/phy/sfp.c -@@ -531,6 +531,185 @@ static unsigned int sfp_check(void *buf, - return check; - } + drivers/net/phy/Makefile | 2 +- + drivers/net/phy/sff.c | 114 ++++++++++++++++++++ + drivers/net/phy/sff.h | 16 +++ + drivers/net/phy/sfp.c | 228 +++++++++++++++++++++++++++++++++++++-- + 4 files changed, 349 insertions(+), 11 deletions(-) + create mode 100644 drivers/net/phy/sff.c + create mode 100644 drivers/net/phy/sff.h + +--- a/drivers/net/phy/Makefile ++++ b/drivers/net/phy/Makefile +@@ -26,7 +26,7 @@ obj-$(CONFIG_PHYLIB) += libphy.o -+static const char *sfp_link_len(char *buf, size_t size, unsigned int length, -+ unsigned int multiplier) + obj-$(CONFIG_NETWORK_PHY_TIMESTAMPING) += mii_timestamper.o + +-obj-$(CONFIG_SFP) += sfp.o ++obj-$(CONFIG_SFP) += sff.o sfp.o + sfp-obj-$(CONFIG_SFP) += sfp-bus.o + obj-y += $(sfp-obj-y) $(sfp-obj-m) + +--- /dev/null ++++ b/drivers/net/phy/sff.c +@@ -0,0 +1,114 @@ ++#include ++#include ++#include "sff.h" ++ ++const char *sff_link_len(char *buf, size_t size, unsigned int length, ++ unsigned int multiplier) +{ + if (length == 0) + return "unsupported/unspecified"; @@ -21,11 +45,11 @@ Signed-off-by: Russell King + *buf++ = '>'; + size -= 1; + length -= 1; -+ } ++ } + -+ length *= multiplier; ++ length *= multiplier; + -+ if (length >= 1000) ++ if (length >= 1000) + snprintf(buf, size, "%u.%0*ukm", + length / 1000, + multiplier > 100 ? 1 : @@ -36,14 +60,125 @@ Signed-off-by: Russell King + + return buf; +} ++EXPORT_SYMBOL_GPL(sff_link_len); + -+struct bitfield { ++const char *sff_bitfield(char *buf, size_t size, ++ const struct sff_bitfield *bits, unsigned int val) ++{ ++ char *p = buf; ++ int n; ++ ++ *p = '\0'; ++ while (bits->mask) { ++ if ((val & bits->mask) == bits->val) { ++ n = snprintf(p, size, "%s%s", ++ buf != p ? ", " : "", ++ bits->str); ++ if (n == size) ++ break; ++ p += n; ++ size -= n; ++ } ++ bits++; ++ } ++ ++ return buf; ++} ++EXPORT_SYMBOL_GPL(sff_bitfield); ++ ++const char *sff_connector(unsigned int connector) ++{ ++ switch (connector) { ++ case SFF8024_CONNECTOR_UNSPEC: ++ return "unknown/unspecified"; ++ case SFF8024_CONNECTOR_SC: ++ return "SC"; ++ case SFF8024_CONNECTOR_FIBERJACK: ++ return "Fiberjack"; ++ case SFF8024_CONNECTOR_LC: ++ return "LC"; ++ case SFF8024_CONNECTOR_MT_RJ: ++ return "MT-RJ"; ++ case SFF8024_CONNECTOR_MU: ++ return "MU"; ++ case SFF8024_CONNECTOR_SG: ++ return "SG"; ++ case SFF8024_CONNECTOR_OPTICAL_PIGTAIL: ++ return "Optical pigtail"; ++ case SFF8024_CONNECTOR_MPO_1X12: ++ return "MPO 1X12"; ++ case SFF8024_CONNECTOR_MPO_2X16: ++ return "MPO 2X16"; ++ case SFF8024_CONNECTOR_HSSDC_II: ++ return "HSSDC II"; ++ case SFF8024_CONNECTOR_COPPER_PIGTAIL: ++ return "Copper pigtail"; ++ case SFF8024_CONNECTOR_RJ45: ++ return "RJ45"; ++ case SFF8024_CONNECTOR_MXC_2X16: ++ return "MXC 2X16"; ++ default: ++ return "unknown"; ++ } ++} ++EXPORT_SYMBOL_GPL(sff_connector); ++ ++const char *sff_encoding(unsigned int encoding) ++{ ++ switch (encoding) { ++ case SFF8024_ENCODING_UNSPEC: ++ return "unspecified"; ++ case SFF8024_ENCODING_8472_64B66B: ++ return "64b66b"; ++ case SFF8024_ENCODING_8B10B: ++ return "8b10b"; ++ case SFF8024_ENCODING_4B5B: ++ return "4b5b"; ++ case SFF8024_ENCODING_NRZ: ++ return "NRZ"; ++ case SFF8024_ENCODING_8472_MANCHESTER: ++ return "MANCHESTER"; ++ default: ++ return "unknown"; ++ } ++} ++EXPORT_SYMBOL_GPL(sff_encoding); ++ ++MODULE_LICENSE("GPL"); +--- /dev/null ++++ b/drivers/net/phy/sff.h +@@ -0,0 +1,16 @@ ++#ifndef SFF_H ++#define SFF_H ++ ++struct sff_bitfield { + unsigned int mask; + unsigned int val; + const char *str; +}; + -+static const struct bitfield sfp_options[] = { ++const char *sff_link_len(char *buf, size_t size, unsigned int length, ++ unsigned int multiplier); ++const char *sff_bitfield(char *buf, size_t size, ++ const struct sff_bitfield *bits, unsigned int val); ++const char *sff_connector(unsigned int connector); ++const char *sff_encoding(unsigned int encoding); ++#endif +--- a/drivers/net/phy/sfp.c ++++ b/drivers/net/phy/sfp.c +@@ -17,6 +17,7 @@ + #include + #include + ++#include "sff.h" + #include "sfp.h" + #include "swphy.h" + +@@ -1363,6 +1364,114 @@ static void sfp_hwmon_exit(struct sfp *s + } + #endif + ++static const struct sff_bitfield sfp_options[] = { + { + .mask = SFP_OPTIONS_HIGH_POWER_LEVEL, + .val = SFP_OPTIONS_HIGH_POWER_LEVEL, @@ -99,7 +234,7 @@ Signed-off-by: Russell King + }, { } +}; + -+static const struct bitfield diagmon[] = { ++static const struct sff_bitfield diagmon[] = { + { + .mask = SFP_DIAGMON_DDM, + .val = SFP_DIAGMON_DDM, @@ -119,159 +254,179 @@ Signed-off-by: Russell King + }, { } +}; + -+static const char *sfp_bitfield(char *out, size_t outsz, const struct bitfield *bits, unsigned int val) ++static const struct sff_bitfield sfp_enhopts[] = { ++ { ++ .mask = SFP_ENHOPTS_ALARMWARN, ++ .val = SFP_ENHOPTS_ALARMWARN, ++ .str = "alarmwarn", ++ }, { ++ .mask = SFP_ENHOPTS_SOFT_TX_DISABLE, ++ .val = SFP_ENHOPTS_SOFT_TX_DISABLE, ++ .str = "soft_tx_dis", ++ }, { ++ .mask = SFP_ENHOPTS_SOFT_TX_FAULT, ++ .val = SFP_ENHOPTS_SOFT_TX_FAULT, ++ .str = "soft_tx_fault", ++ }, { ++ .mask = SFP_ENHOPTS_SOFT_RX_LOS, ++ .val = SFP_ENHOPTS_SOFT_RX_LOS, ++ .str = "soft_rx_los", ++ }, { ++ .mask = SFP_ENHOPTS_SOFT_RATE_SELECT, ++ .val = SFP_ENHOPTS_SOFT_RATE_SELECT, ++ .str = "soft_rs", ++ }, { ++ .mask = SFP_ENHOPTS_APP_SELECT_SFF8079, ++ .val = SFP_ENHOPTS_APP_SELECT_SFF8079, ++ .str = "app_sel", ++ }, { ++ .mask = SFP_ENHOPTS_SOFT_RATE_SFF8431, ++ .val = SFP_ENHOPTS_SOFT_RATE_SFF8431, ++ .str = "soft_r8431", ++ }, { } ++}; ++ + /* Helpers */ + static void sfp_module_tx_disable(struct sfp *sfp) + { +@@ -1664,6 +1773,110 @@ static int sfp_cotsworks_fixup_check(str + return 0; + } + ++static void sfp_print_module_info(struct sfp *sfp, const struct sfp_eeprom_id *id, bool cotsworks) +{ -+ char *p = out; -+ int n; -+ -+ *p = '\0'; -+ while (bits->mask) { -+ if ((val & bits->mask) == bits->val) { -+ n = snprintf(p, outsz, "%s%s", -+ out != p ? ", " : "", -+ bits->str); -+ if (n == outsz) -+ break; -+ p += n; -+ outsz -= n; -+ } -+ bits++; -+ } -+ -+ return out; -+} -+ -+static const char *sfp_connector(unsigned int connector) -+{ -+ switch (connector) { -+ case SFF8024_CONNECTOR_UNSPEC: -+ return "unknown/unspecified"; -+ case SFF8024_CONNECTOR_SC: -+ return "SC"; -+ case SFF8024_CONNECTOR_FIBERJACK: -+ return "Fiberjack"; -+ case SFF8024_CONNECTOR_LC: -+ return "LC"; -+ case SFF8024_CONNECTOR_MT_RJ: -+ return "MT-RJ"; -+ case SFF8024_CONNECTOR_MU: -+ return "MU"; -+ case SFF8024_CONNECTOR_SG: -+ return "SG"; -+ case SFF8024_CONNECTOR_OPTICAL_PIGTAIL: -+ return "Optical pigtail"; -+ case SFF8024_CONNECTOR_HSSDC_II: -+ return "HSSDC II"; -+ case SFF8024_CONNECTOR_COPPER_PIGTAIL: -+ return "Copper pigtail"; -+ default: -+ return "unknown"; -+ } -+} -+ -+static const char *sfp_encoding(unsigned int encoding) -+{ -+ switch (encoding) { -+ case SFF8024_ENCODING_UNSPEC: -+ return "unspecified"; -+ case SFF8024_ENCODING_8472_64B66B: -+ return "64b66b"; -+ case SFF8024_ENCODING_8B10B: -+ return "8b10b"; -+ case SFF8024_ENCODING_4B5B: -+ return "4b5b"; -+ case SFF8024_ENCODING_NRZ: -+ return "NRZ"; -+ case SFF8024_ENCODING_8472_MANCHESTER: -+ return "MANCHESTER"; -+ default: -+ return "unknown"; -+ } -+} -+ -+ - /* hwmon */ - #if IS_ENABLED(CONFIG_HWMON) - static umode_t sfp_hwmon_is_visible(const void *data, -@@ -1670,6 +1849,7 @@ static int sfp_sm_mod_probe(struct sfp * - struct sfp_eeprom_id id; - bool cotsworks_sfbg; - bool cotsworks; ++ unsigned int br_nom, br_min, br_max; ++ char date[9]; + char options[80]; - u8 check; - int ret; - -@@ -1744,6 +1924,73 @@ static int sfp_sm_mod_probe(struct sfp * - (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn, - (int)sizeof(id.ext.datecode), id.ext.datecode); - -+ dev_info(sfp->dev, " %s connector, encoding %s, nominal bitrate %u.%uGbps +%u%% -%u%%\n", -+ sfp_connector(sfp->id.base.connector), -+ sfp_encoding(sfp->id.base.encoding), -+ sfp->id.base.br_nominal / 10, -+ sfp->id.base.br_nominal % 10, -+ sfp->id.ext.br_max, sfp->id.ext.br_min); -+ dev_info(sfp->dev, " 1000BaseSX%c 1000BaseLX%c 1000BaseCX%c 1000BaseT%c 100BaseTLX%c 1000BaseFX%c BaseBX10%c BasePX%c\n", -+ sfp->id.base.e1000_base_sx ? '+' : '-', -+ sfp->id.base.e1000_base_lx ? '+' : '-', -+ sfp->id.base.e1000_base_cx ? '+' : '-', -+ sfp->id.base.e1000_base_t ? '+' : '-', -+ sfp->id.base.e100_base_lx ? '+' : '-', -+ sfp->id.base.e100_base_fx ? '+' : '-', -+ sfp->id.base.e_base_bx10 ? '+' : '-', -+ sfp->id.base.e_base_px ? '+' : '-'); -+ dev_info(sfp->dev, " 10GBaseSR%c 10GBaseLR%c 10GBaseLRM%c 10GBaseER%c\n", -+ sfp->id.base.e10g_base_sr ? '+' : '-', -+ sfp->id.base.e10g_base_lr ? '+' : '-', -+ sfp->id.base.e10g_base_lrm ? '+' : '-', -+ sfp->id.base.e10g_base_er ? '+' : '-'); + -+ if (!sfp->id.base.sfp_ct_passive && !sfp->id.base.sfp_ct_active && -+ !sfp->id.base.e1000_base_t) { ++ /* Cotsworks also gets the date code wrong. */ ++ date[0] = id->ext.datecode[4 - 2 * cotsworks]; ++ date[1] = id->ext.datecode[5 - 2 * cotsworks]; ++ date[2] = '-'; ++ date[3] = id->ext.datecode[2 + 2 * cotsworks]; ++ date[4] = id->ext.datecode[3 + 2 * cotsworks]; ++ date[5] = '-'; ++ date[6] = id->ext.datecode[0]; ++ date[7] = id->ext.datecode[1]; ++ date[8] = '\0'; ++ ++ if (id->base.br_nominal == 0) { ++ br_min = br_nom = br_max = 0; ++ } else if (id->base.br_nominal == 255) { ++ br_nom = 250 * id->ext.br_max; ++ br_max = br_nom + br_nom * id->ext.br_min / 100; ++ br_min = br_nom - br_nom * id->ext.br_min / 100; ++ } else { ++ br_nom = id->base.br_nominal * 100; ++ br_min = br_nom - id->base.br_nominal * id->ext.br_min; ++ br_max = br_nom + id->base.br_nominal * id->ext.br_max; ++ } ++ ++ dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %s\n", ++ (int)sizeof(id->base.vendor_name), id->base.vendor_name, ++ (int)sizeof(id->base.vendor_pn), id->base.vendor_pn, ++ (int)sizeof(id->base.vendor_rev), id->base.vendor_rev, ++ (int)sizeof(id->ext.vendor_sn), id->ext.vendor_sn, date); ++ dev_info(sfp->dev, " %s connector, encoding %s, bitrate %u.%03u (%u.%03u-%u.%03u) Gbps\n", ++ sff_connector(id->base.connector), ++ sff_encoding(id->base.encoding), ++ br_nom / 1000, br_nom % 1000, ++ br_min / 1000, br_min % 1000, br_max / 1000, br_max % 1000); ++ dev_info(sfp->dev, " 1000BaseSX%c 1000BaseLX%c 1000BaseCX%c 1000BaseT%c 100BaseLX%c 100BaseFX%c BaseBX10%c BasePX%c\n", ++ id->base.e1000_base_sx ? '+' : '-', ++ id->base.e1000_base_lx ? '+' : '-', ++ id->base.e1000_base_cx ? '+' : '-', ++ id->base.e1000_base_t ? '+' : '-', ++ id->base.e100_base_lx ? '+' : '-', ++ id->base.e100_base_fx ? '+' : '-', ++ id->base.e_base_bx10 ? '+' : '-', ++ id->base.e_base_px ? '+' : '-'); ++ dev_info(sfp->dev, " 10GBaseSR%c 10GBaseLR%c 10GBaseLRM%c 10GBaseER%c\n", ++ id->base.e10g_base_sr ? '+' : '-', ++ id->base.e10g_base_lr ? '+' : '-', ++ id->base.e10g_base_lrm ? '+' : '-', ++ id->base.e10g_base_er ? '+' : '-'); ++ ++ if (!id->base.sfp_ct_passive && !id->base.sfp_ct_active && ++ !id->base.e1000_base_t) { + char len_9um[16], len_om[16]; + + dev_info(sfp->dev, " Wavelength %unm, fiber lengths:\n", -+ be16_to_cpup(&sfp->id.base.optical_wavelength)); ++ be16_to_cpup(&id->base.optical_wavelength)); + -+ if (sfp->id.base.link_len[0] == 255) ++ if (id->base.link_len[0] == 255) + strcpy(len_9um, ">254km"); -+ else if (sfp->id.base.link_len[1] && sfp->id.base.link_len[1] != 255) ++ else if (id->base.link_len[1] && id->base.link_len[1] != 255) + sprintf(len_9um, "%um", -+ sfp->id.base.link_len[1] * 100); -+ else if (sfp->id.base.link_len[0]) -+ sprintf(len_9um, "%ukm", sfp->id.base.link_len[0]); -+ else if (sfp->id.base.link_len[1] == 255) ++ id->base.link_len[1] * 100); ++ else if (id->base.link_len[0]) ++ sprintf(len_9um, "%ukm", id->base.link_len[0]); ++ else if (id->base.link_len[1] == 255) + strcpy(len_9um, ">25.4km"); + else + strcpy(len_9um, "unsupported"); + + dev_info(sfp->dev, " 9µm SM : %s\n", len_9um); + dev_info(sfp->dev, " 62.5µm MM OM1: %s\n", -+ sfp_link_len(len_om, sizeof(len_om), -+ sfp->id.base.link_len[3], 10)); ++ sff_link_len(len_om, sizeof(len_om), ++ id->base.link_len[3], 10)); + dev_info(sfp->dev, " 50µm MM OM2: %s\n", -+ sfp_link_len(len_om, sizeof(len_om), -+ sfp->id.base.link_len[2], 10)); ++ sff_link_len(len_om, sizeof(len_om), ++ id->base.link_len[2], 10)); + dev_info(sfp->dev, " 50µm MM OM3: %s\n", -+ sfp_link_len(len_om, sizeof(len_om), -+ sfp->id.base.link_len[5], 10)); ++ sff_link_len(len_om, sizeof(len_om), ++ id->base.link_len[5], 10)); + dev_info(sfp->dev, " 50µm MM OM4: %s\n", -+ sfp_link_len(len_om, sizeof(len_om), -+ sfp->id.base.link_len[4], 10)); ++ sff_link_len(len_om, sizeof(len_om), ++ id->base.link_len[4], 10)); + } else { + char len[16]; + dev_info(sfp->dev, " Copper length: %s\n", -+ sfp_link_len(len, sizeof(len), -+ sfp->id.base.link_len[4], 1)); ++ sff_link_len(len, sizeof(len), ++ id->base.link_len[4], 1)); + } + + dev_info(sfp->dev, " Options: %s\n", -+ sfp_bitfield(options, sizeof(options), sfp_options, -+ be16_to_cpu(sfp->id.ext.options))); ++ sff_bitfield(options, sizeof(options), sfp_options, ++ be16_to_cpu(id->ext.options))); + dev_info(sfp->dev, " Diagnostics: %s\n", -+ sfp_bitfield(options, sizeof(options), diagmon, -+ sfp->id.ext.diagmon)); ++ sff_bitfield(options, sizeof(options), diagmon, ++ id->ext.diagmon)); ++ dev_info(sfp->dev, " EnhOpts: %s\n", ++ sff_bitfield(options, sizeof(options), sfp_enhopts, ++ id->ext.enhopts)); ++} + + static int sfp_sm_mod_probe(struct sfp *sfp, bool report) + { + /* SFP module inserted - read I2C data */ +@@ -1685,9 +1898,9 @@ static int sfp_sm_mod_probe(struct sfp * + return -EAGAIN; + } + +- /* Cotsworks do not seem to update the checksums when they +- * do the final programming with the final module part number, +- * serial number and date code. ++ /* Cotsworks do not seem to update the checksums when they update the ++ * module part number, serial number and date code. They also format ++ * the date code incorrectly. + */ + cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS ", 16); + cotsworks_sfbg = !memcmp(id.base.vendor_pn, "SFBG", 4); +@@ -1735,14 +1948,9 @@ static int sfp_sm_mod_probe(struct sfp * + } + } + +- sfp->id = id; ++ sfp_print_module_info(sfp, &id, cotsworks); + +- dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n", +- (int)sizeof(id.base.vendor_name), id.base.vendor_name, +- (int)sizeof(id.base.vendor_pn), id.base.vendor_pn, +- (int)sizeof(id.base.vendor_rev), id.base.vendor_rev, +- (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn, +- (int)sizeof(id.ext.datecode), id.ext.datecode); ++ sfp->id = id; + /* Check whether we support this module */ if (!sfp->type->module_supported(&id)) { - dev_err(sfp->dev, diff --git a/patch/kernel/mvebu-current/92-mvebu-gpio-add_wake_on_gpio_support.patch b/patch/kernel/mvebu-current/92-mvebu-gpio-add_wake_on_gpio_support.patch index a06b7973b5..9274f2b1a1 100644 --- a/patch/kernel/mvebu-current/92-mvebu-gpio-add_wake_on_gpio_support.patch +++ b/patch/kernel/mvebu-current/92-mvebu-gpio-add_wake_on_gpio_support.patch @@ -51,7 +51,7 @@ * Functions implementing the pwm_chip methods */ static struct mvebu_pwm *to_mvebu_pwm(struct pwm_chip *chip) -@@ -1211,7 +1239,7 @@ static int mvebu_gpio_probe(struct platf +@@ -1219,7 +1247,7 @@ static int mvebu_gpio_probe(struct platf err = irq_alloc_domain_generic_chips( mvchip->domain, ngpios, 2, np->name, handle_level_irq, @@ -60,7 +60,7 @@ if (err) { dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n", mvchip->chip.label); -@@ -1229,6 +1257,8 @@ static int mvebu_gpio_probe(struct platf +@@ -1237,6 +1265,8 @@ static int mvebu_gpio_probe(struct platf ct->chip.irq_mask = mvebu_gpio_level_irq_mask; ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask; ct->chip.irq_set_type = mvebu_gpio_irq_set_type; @@ -69,7 +69,7 @@ ct->chip.name = mvchip->chip.label; ct = &gc->chip_types[1]; -@@ -1237,6 +1267,8 @@ static int mvebu_gpio_probe(struct platf +@@ -1245,6 +1275,8 @@ static int mvebu_gpio_probe(struct platf ct->chip.irq_mask = mvebu_gpio_edge_irq_mask; ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask; ct->chip.irq_set_type = mvebu_gpio_irq_set_type; @@ -78,11 +78,11 @@ ct->handler = handle_edge_irq; ct->chip.name = mvchip->chip.label; -@@ -1252,6 +1284,7 @@ static int mvebu_gpio_probe(struct platf +@@ -1260,6 +1292,7 @@ static int mvebu_gpio_probe(struct platf continue; irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler, mvchip); + mvchip->bank_irq[i] = irq; } - /* Some MVEBU SoCs have simple PWM support for GPIO lines */ + return 0; diff --git a/patch/kernel/mvebu-current/general-increasing_DMA_block_memory_allocation_to_2048.patch b/patch/kernel/mvebu-current/general-increasing_DMA_block_memory_allocation_to_2048.patch index ff11b4d98c..eef7296e75 100644 --- a/patch/kernel/mvebu-current/general-increasing_DMA_block_memory_allocation_to_2048.patch +++ b/patch/kernel/mvebu-current/general-increasing_DMA_block_memory_allocation_to_2048.patch @@ -1,6 +1,6 @@ --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -314,7 +314,7 @@ static void *__alloc_remap_buffer(struct +@@ -315,7 +315,7 @@ static void *__alloc_remap_buffer(struct pgprot_t prot, struct page **ret_page, const void *caller, bool want_vaddr); diff --git a/patch/kernel/mvebu-current/omit_VFP_emulation_exceptions_kernel_mode.patch b/patch/kernel/mvebu-current/omit_VFP_emulation_exceptions_kernel_mode.patch deleted file mode 100644 index e776c35268..0000000000 --- a/patch/kernel/mvebu-current/omit_VFP_emulation_exceptions_kernel_mode.patch +++ /dev/null @@ -1,158 +0,0 @@ -From: "Ard Biesheuvel" <(address hidden)> -Subject: entry: omit FP emulation for UND exceptions taken in kernel mode - -There are a couple of problems with the exception entry code that deals -with FP exceptions (which are reported as UND exceptions) when building -the kernel in Thumb2 mode: -- the conditional branch to vfp_kmode_exception in vfp_support_entry() - may be out of range for its target, depending on how the linker decides - to arrange the sections; -- when the UND exception is taken in kernel mode, the emulation handling - logic is entered via the 'call_fpe' label, which means we end up using - the wrong value/mask pairs to match and detect the NEON opcodes. - -Since UND exceptions in kernel mode are unlikely to occur on a hot path -(as opposed to the user mode version which is invoked for VFP support -code and lazy restore), we can use the existing undef hook machinery for -any kernel mode instruction emulation that is needed, including calling -the existing vfp_kmode_exception() routine for unexpected cases. So drop -the call to call_fpe, and instead, install an undef hook that will get -called for NEON and VFP instructions that trigger an UND exception in -kernel mode. - -While at it, make sure that the PC correction is accurate for the -execution mode where the exception was taken, by checking the PSR -Thumb bit. - -Cc: Dmitry Osipenko <(address hidden)> -Cc: Kees Cook <(address hidden)> -Fixes: eff8728fe698 ("vmlinux.lds.h: Add PGO and AutoFDO input sections") -Signed-off-by: Ard Biesheuvel <(address hidden)> -Reviewed-by: Linus Walleij <(address hidden)> -Reviewed-by: Nick Desaulniers <(address hidden)> ---- - ---- a/arch/arm/kernel/entry-armv.S -+++ b/arch/arm/kernel/entry-armv.S -@@ -252,31 +252,10 @@ __und_svc: - #else - svc_entry - #endif -- @ -- @ call emulation code, which returns using r9 if it has emulated -- @ the instruction, or the more conventional lr if we are to treat -- @ this as a real undefined instruction -- @ -- @ r0 - instruction -- @ --#ifndef CONFIG_THUMB2_KERNEL -- ldr r0, [r4, #-4] --#else -- mov r1, #2 -- ldrh r0, [r4, #-2] @ Thumb instruction at LR - 2 -- cmp r0, #0xe800 @ 32-bit instruction if xx >= 0 -- blo __und_svc_fault -- ldrh r9, [r4] @ bottom 16 bits -- add r4, r4, #2 -- str r4, [sp, #S_PC] -- orr r0, r9, r0, lsl #16 --#endif -- badr r9, __und_svc_finish -- mov r2, r4 -- bl call_fpe - - mov r1, #4 @ PC correction to apply --__und_svc_fault: -+ THUMB( tst r5, #PSR_T_BIT ) @ exception taken in Thumb mode? -+ THUMB( movne r1, #2 ) @ if so, fix up PC correction - mov r0, sp @ struct pt_regs *regs - bl __und_fault - ---- a/arch/arm/vfp/vfphw.S -+++ b/arch/arm/vfp/vfphw.S -@@ -79,11 +79,6 @@ ENTRY(vfp_support_entry) - DBGSTR3 "instr %08x pc %08x state %p", r0, r2, r10 - - .fpu vfpv2 -- ldr r3, [sp, #S_PSR] @ Neither lazy restore nor FP exceptions -- and r3, r3, #MODE_MASK @ are supported in kernel mode -- teq r3, #USR_MODE -- bne vfp_kmode_exception @ Returns through lr -- - VFPFMRX r1, FPEXC @ Is the VFP enabled? - DBGSTR1 "fpexc %08x", r1 - tst r1, #FPEXC_EN ---- a/arch/arm/vfp/vfpmodule.c -+++ b/arch/arm/vfp/vfpmodule.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - - #include "vfpinstr.h" -@@ -642,7 +643,9 @@ static int vfp_starting_cpu(unsigned int - return 0; - } - --void vfp_kmode_exception(void) -+#ifdef CONFIG_KERNEL_MODE_NEON -+ -+static int vfp_kmode_exception(struct pt_regs *regs, unsigned int instr) - { - /* - * If we reach this point, a floating point exception has been raised -@@ -660,9 +663,51 @@ void vfp_kmode_exception(void) - pr_crit("BUG: unsupported FP instruction in kernel mode\n"); - else - pr_crit("BUG: FP instruction issued in kernel mode with FP unit disabled\n"); -+ pr_crit("FPEXC == 0x%08x\n", fmrx(FPEXC)); -+ return 1; - } - --#ifdef CONFIG_KERNEL_MODE_NEON -+static struct undef_hook vfp_kmode_exception_hook[] = {{ -+ .instr_mask = 0xfe000000, -+ .instr_val = 0xf2000000, -+ .cpsr_mask = MODE_MASK | PSR_T_BIT, -+ .cpsr_val = SVC_MODE, -+ .fn = vfp_kmode_exception, -+}, { -+ .instr_mask = 0xff100000, -+ .instr_val = 0xf4000000, -+ .cpsr_mask = MODE_MASK | PSR_T_BIT, -+ .cpsr_val = SVC_MODE, -+ .fn = vfp_kmode_exception, -+}, { -+ .instr_mask = 0xef000000, -+ .instr_val = 0xef000000, -+ .cpsr_mask = MODE_MASK | PSR_T_BIT, -+ .cpsr_val = SVC_MODE | PSR_T_BIT, -+ .fn = vfp_kmode_exception, -+}, { -+ .instr_mask = 0xff100000, -+ .instr_val = 0xf9000000, -+ .cpsr_mask = MODE_MASK | PSR_T_BIT, -+ .cpsr_val = SVC_MODE | PSR_T_BIT, -+ .fn = vfp_kmode_exception, -+}, { -+ .instr_mask = 0x0c000e00, -+ .instr_val = 0x0c000a00, -+ .cpsr_mask = MODE_MASK, -+ .cpsr_val = SVC_MODE, -+ .fn = vfp_kmode_exception, -+}}; -+ -+static int __init vfp_kmode_exception_hook_init(void) -+{ -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(vfp_kmode_exception_hook); i++) -+ register_undef_hook(&vfp_kmode_exception_hook[i]); -+ return 0; -+} -+core_initcall(vfp_kmode_exception_hook_init); - - /* - * Kernel-side NEON support functions