diff --git a/include/package.mk b/include/package.mk index c541f6edf7..0575692742 100644 --- a/include/package.mk +++ b/include/package.mk @@ -223,7 +223,7 @@ define Build/CoreTargets $(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG) $(STAMP_INSTALLED): $(STAMP_BUILT) rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) - mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages + mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(foreach hook,$(Hooks/InstallDev/Pre),\ $(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ ) @@ -342,9 +342,9 @@ clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build) clean: force-clean-build $(CleanStaging) - $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST)) + $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR)/host) $(Build/Clean) - rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) $(STAGING_DIR_HOST)/packages/$(STAGING_FILES_LIST) + rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) dist: $(Build/Dist) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 4f4e93361f..107d53e74f 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -72,6 +72,7 @@ define Package/base-files/conffiles /etc/services /etc/shadow /etc/shells +/etc/shinit /etc/sysctl.conf /etc/sysupgrade.conf $(call $(TARGET)/conffiles) diff --git a/package/base-files/files/etc/profile b/package/base-files/files/etc/profile index 9a3ac069a2..0beff1608f 100644 --- a/package/base-files/files/etc/profile +++ b/package/base-files/files/etc/profile @@ -1,4 +1,3 @@ -#!/bin/sh [ -e /tmp/.failsafe ] && export FAILSAFE=1 [ -f /etc/banner ] && cat /etc/banner @@ -13,6 +12,7 @@ export PATH="%PATH%" export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6) export HOME=${HOME:-/root} export PS1='\u@\h:\w\$ ' +export ENV=/etc/shinit case "$TERM" in xterm*|rxvt*) @@ -20,16 +20,6 @@ case "$TERM" in ;; esac -[ -x /bin/more ] || alias more=less -[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi - -alias ll='ls -alF --color=auto' - -[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc - -[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; } -[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; } - [ -n "$FAILSAFE" ] || { for FILE in /etc/profile.d/*.sh; do [ -e "$FILE" ] && . "$FILE" @@ -48,12 +38,3 @@ in order to prevent unauthorized SSH logins. -------------------------------------------------- EOF fi - -service() { - [ -f "/etc/init.d/$1" ] || { - echo "service "'"'"$1"'"'" not found, the following services are available:" - ls "/etc/init.d" - return 1 - } - /etc/init.d/$@ -} diff --git a/package/base-files/files/etc/shinit b/package/base-files/files/etc/shinit new file mode 100644 index 0000000000..6b715c1ef9 --- /dev/null +++ b/package/base-files/files/etc/shinit @@ -0,0 +1,21 @@ +[ -x /bin/more ] || alias more=less +[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi + +alias ll='ls -alF --color=auto' + +[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc + +[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; } +[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; } + +service() { + [ -f "/etc/init.d/$1" ] || { + echo "service "'"'"$1"'"'" not found, the following services are available:" + ls "/etc/init.d" + return 1 + } + /etc/init.d/$@ +} + +[ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit" +[ -z "$KSH_VERSION" -o \! -s "$HOME/.mkshrc" ] || . "$HOME/.mkshrc" diff --git a/package/base-files/files/lib/upgrade/keep.d/base-files-essential b/package/base-files/files/lib/upgrade/keep.d/base-files-essential index 978d4b58bc..7a7a253466 100644 --- a/package/base-files/files/lib/upgrade/keep.d/base-files-essential +++ b/package/base-files/files/lib/upgrade/keep.d/base-files-essential @@ -6,5 +6,6 @@ /etc/profile /etc/shadow /etc/shells +/etc/shinit /etc/sysctl.conf /etc/rc.local diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile index 1f92ba9250..b26ef64ca4 100644 --- a/package/boot/grub2/Makefile +++ b/package/boot/grub2/Makefile @@ -82,6 +82,11 @@ define Host/Configure $(Host/Configure/Default) endef +define Package/grub2/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/ +endef + define Package/grub2-editenv/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/ diff --git a/package/boot/uboot-mvebu/Makefile b/package/boot/uboot-mvebu/Makefile index d171daa717..029018b414 100644 --- a/package/boot/uboot-mvebu/Makefile +++ b/package/boot/uboot-mvebu/Makefile @@ -42,11 +42,11 @@ UBOOT_TARGETS:= \ Build/Exports:=$(Host/Exports) define Build/Configure - # enable additional options beyond clearfog_defconfig - echo CONFIG_NET_RANDOM_ETHADDR=y >> $(PKG_BUILD_DIR)/configs/$(BUILD_VARIANT)_defconfig - echo CONFIG_CMD_SETEXPR=y >> $(PKG_BUILD_DIR)/configs/$(BUILD_VARIANT)_defconfig + # enable additional options beyond _defconfig + echo CONFIG_NET_RANDOM_ETHADDR=y >> $(PKG_BUILD_DIR)/configs/$(UBOOT_CONFIG)_defconfig + echo CONFIG_CMD_SETEXPR=y >> $(PKG_BUILD_DIR)/configs/$(UBOOT_CONFIG)_defconfig - +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) $(UBOOT_CONFIGURE_VARS) $(UBOOT_CONFIG)_config + $(call Build/Configure/U-Boot) endef define Build/InstallDev diff --git a/package/kernel/linux/modules/can.mk b/package/kernel/linux/modules/can.mk index c2c7411c6e..3bf0359c11 100644 --- a/package/kernel/linux/modules/can.mk +++ b/package/kernel/linux/modules/can.mk @@ -146,6 +146,23 @@ endef $(eval $(call KernelPackage,can-gw)) +define KernelPackage/can-mcp251x + TITLE:=MCP251x SPI CAN controller + KCONFIG:=\ + CONFIG_SPI=y \ + CONFIG_CAN_MCP251X + FILES:=$(LINUX_DIR)/drivers/net/can/spi/mcp251x.ko + AUTOLOAD:=$(call AutoProbe,can-mcp251x) + $(call AddDepends/can) +endef + +define KernelPackage/can-mcp251x/description + Microchip MCP251x SPI CAN controller +endef + +$(eval $(call KernelPackage,can-mcp251x)) + + define KernelPackage/can-raw TITLE:=Raw CAN Protcol KCONFIG:=CONFIG_CAN_RAW diff --git a/package/kernel/linux/modules/iio.mk b/package/kernel/linux/modules/iio.mk index cd46697168..0d30321d70 100644 --- a/package/kernel/linux/modules/iio.mk +++ b/package/kernel/linux/modules/iio.mk @@ -278,6 +278,60 @@ endef $(eval $(call KernelPackage,iio-si7020)) +define KernelPackage/iio-st_accel + SUBMENU:=$(IIO_MENU) + TITLE:=STMicroelectronics accelerometer 3-Axis Driver + DEPENDS:=+kmod-iio-core +kmod-regmap-core + KCONFIG:= \ + CONFIG_IIO_ST_ACCEL_3AXIS \ + CONFIG_IIO_ST_SENSORS_CORE + FILES:= \ + $(LINUX_DIR)/drivers/iio/accel/st_accel.ko \ + $(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors.ko +endef + +define KernelPackage/iio-st_accel/description + This package adds support for STMicroelectronics accelerometers: + LSM303DLH, LSM303DLHC, LIS3DH, LSM330D, LSM330DL, LSM330DLC, + LIS331DLH, LSM303DL, LSM303DLM, LSM330, LIS2DH12, H3LIS331DL, + LNG2DM, LIS3DE, LIS2DE12 +endef + +$(eval $(call KernelPackage,iio-st_accel)) + + +define KernelPackage/iio-st_sensors-i2c + SUBMENU:=$(IIO_MENU) + TITLE:=STMicroelectronics accelerometer 3-Axis Driver (I2C) + DEPENDS:=+kmod-iio-st_accel +kmod-i2c-core + KCONFIG:= CONFIG_IIO_ST_ACCEL_I2C_3AXIS + FILES:=$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_i2c.ko + AUTOLOAD:=$(call AutoLoad,56,st_sensors_i2c) +endef + +define KernelPackage/iio-st_sensors-i2c/description + This package adds support for STMicroelectronics I2C based accelerometers +endef + +$(eval $(call KernelPackage,iio-st_sensors-i2c)) + + +define KernelPackage/iio-st_sensors-spi + SUBMENU:=$(IIO_MENU) + TITLE:=STMicroelectronics accelerometer 3-Axis Driver (SPI) + DEPENDS:=+kmod-iio-st_accel + KCONFIG:= CONFIG_IIO_ST_ACCEL_SPI_3AXIS + FILES:=$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_spi.ko + AUTOLOAD:=$(call AutoLoad,56,st_sensors_spi) +endef + +define KernelPackage/iio-st_sensors-spi/description + This package adds support for STMicroelectronics SPI based accelerometers +endef + +$(eval $(call KernelPackage,iio-st_sensors-spi)) + + define KernelPackage/iio-tsl4531 SUBMENU:=$(IIO_MENU) DEPENDS:=+kmod-i2c-core +kmod-iio-core @@ -294,3 +348,53 @@ define KernelPackage/iio-tsl4531/description endef $(eval $(call KernelPackage,iio-tsl4531)) + + +define KernelPackage/iio-fxos8700 + SUBMENU:=$(IIO_MENU) + TITLE:=Freescale FXOS8700 3-axis accelerometer driver + DEPENDS:=+kmod-iio-core +kmod-regmap-core + KCONFIG:= CONFIG_FXOS8700 + FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_core.ko + AUTOLOAD:=$(call AutoLoad,56,fxos8700) +endef + +define KernelPackage/iio-fxos8700/description + Support for Freescale FXOS8700 3-axis accelerometer. +endef + +$(eval $(call KernelPackage,iio-fxos8700)) + + +define KernelPackage/iio-fxos8700-i2c + SUBMENU:=$(IIO_MENU) + TITLE:=Freescale FXOS8700 3-axis acceleromter driver (I2C) + DEPENDS:=+kmod-iio-fxos8700 +kmod-i2c-core +kmod-regmap-i2c + KCONFIG:= CONFIG_FXOS8700_I2C + FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_i2c.ko + AUTOLOAD:=$(call AutoLoad,56,fxos8700_i2c) +endef + +define KernelPackage/iio-fxos8700-i2c/description + Support for Freescale FXOS8700 3-axis accelerometer + connected via I2C. +endef + + +$(eval $(call KernelPackage,iio-fxos8700-i2c)) + +define KernelPackage/iio-fxos8700-spi + SUBMENU:=$(IIO_MENU) + DEPENDS:=+kmod-iio-fxos8700 +kmod-regmap-spi + TITLE:=Freescale FXOS8700 3-axis accelerometer driver (SPI) + KCONFIG:= CONFIG_FXOS8700_SPI + FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_spi.ko + AUTOLOAD:=$(call AutoLoad,56,fxos8700_spi) +endef + +define KernelPackage/iio-fxos8700-spi/description + Support for Freescale FXOS8700 3-axis accelerometer + connected via SPI. +endef + +$(eval $(call KernelPackage,iio-fxos8700-spi)) diff --git a/package/libs/libpcap/Makefile b/package/libs/libpcap/Makefile index 69af9d0700..1a2cdcdd98 100644 --- a/package/libs/libpcap/Makefile +++ b/package/libs/libpcap/Makefile @@ -19,6 +19,7 @@ PKG_HASH:=635237637c5b619bcceba91900666b64d56ecb7be63f298f601ec786ce087094 PKG_MAINTAINER:=Felix Fietkau CMAKE_INSTALL:=1 +PKG_ASLR_PIE_REGULAR:=1 PKG_BUILD_PARALLEL:=1 PKG_LICENSE:=BSD-3-Clause diff --git a/package/network/services/ppp/Makefile b/package/network/services/ppp/Makefile index b43a40bdce..9e42cb7437 100644 --- a/package/network/services/ppp/Makefile +++ b/package/network/services/ppp/Makefile @@ -24,6 +24,7 @@ PKG_VERSION:=$(PKG_RELEASE_VERSION) PKG_BUILD_DEPENDS:=libpcap +PKG_ASLR_PIE_REGULAR:=1 PKG_BUILD_PARALLEL:=1 PKG_INSTALL:=1 diff --git a/scripts/clean-package.sh b/scripts/clean-package.sh index 6dd9bf7306..035725625d 100755 --- a/scripts/clean-package.sh +++ b/scripts/clean-package.sh @@ -12,7 +12,7 @@ cat "$1" | ( cd "$2" while read entry; do [ -n "$entry" ] || break - [ -f "$entry" ] && rm -f $entry + [ ! -d "$entry" ] || [ -L "$entry" ] && rm -f "$entry" done ) sort -r "$1" | ( diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/04_led_migration b/target/linux/ar71xx/base-files/etc/uci-defaults/04_led_migration index 4dd224b549..c244b3b460 100644 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/04_led_migration +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/04_led_migration @@ -44,6 +44,9 @@ migrate_leds() board=$(board_name) case "$board" in +archer-c7) + migrate_leds ":blue:=:green:" + ;; dhp-1565-a1|\ dir-825-c1|\ dir-835-a1) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz450e.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz450e.c index 83127e4c64..5bded81a4d 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz450e.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-fritz450e.c @@ -115,7 +115,7 @@ static struct gpio_keys_button fritz450E_gpio_keys[] __initdata = { .code = KEY_WPS_BUTTON, .debounce_interval = FRITZ450E_KEYS_DEBOUNCE_INTERVAL, .gpio = FRITZ450E_GPIO_BTN_WPS, - .active_low = 1, + .active_low = 0, } }; diff --git a/target/linux/bcm27xx/bcm2708/config-5.4 b/target/linux/bcm27xx/bcm2708/config-5.4 index b09afa21e8..e953325050 100644 --- a/target/linux/bcm27xx/bcm2708/config-5.4 +++ b/target/linux/bcm27xx/bcm2708/config-5.4 @@ -1,21 +1,27 @@ +CONFIG_64BIT_TIME=y # CONFIG_AIO is not set CONFIG_ALIGNMENT_TRAP=y +CONFIG_ARCH_32BIT_OFF_T=y CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_ARCH_HAS_BINFMT_FLAT=y CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_ARCH_HAS_KCOV=y +CONFIG_ARCH_HAS_KEEPINITRD=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_ARCH_HAS_PHYS_TO_DMA=y +CONFIG_ARCH_HAS_SETUP_DMA_OPS=y CONFIG_ARCH_HAS_SET_MEMORY=y -CONFIG_ARCH_HAS_SG_CHAIN=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_KEEP_MEMBLOCK=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_ARCH_MULTIPLATFORM=y CONFIG_ARCH_MULTI_V6=y @@ -27,6 +33,7 @@ CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_ARM=y @@ -34,7 +41,6 @@ CONFIG_ARM_AMBA=y CONFIG_ARM_BCM2835_CPUFREQ=y CONFIG_ARM_CPU_SUSPEND=y CONFIG_ARM_ERRATA_411920=y -CONFIG_ARM_GIC=y CONFIG_ARM_HAS_SG_CHAIN=y CONFIG_ARM_L1_CACHE_SHIFT=5 CONFIG_ARM_PATCH_PHYS_VIRT=y @@ -44,8 +50,6 @@ CONFIG_ARM_THUMB=y CONFIG_ARM_TIMER_SP804=y CONFIG_ARM_UNWIND=y CONFIG_AUTO_ZRELADDR=y -# CONFIG_BACKLIGHT_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BCM2708_VCMEM=y CONFIG_BCM2835_DEVGPIOMEM=y CONFIG_BCM2835_FAST_MEMCPY=y @@ -61,19 +65,22 @@ CONFIG_BCM_VCIO=y CONFIG_BCM_VC_SM=y # CONFIG_BCM_VC_SM_CMA is not set CONFIG_BCM_VIDEOCORE=y +CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y # CONFIG_BLK_DEV_INITRD is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_SD=y +CONFIG_BLK_PM=y CONFIG_BLK_SCSI_REQUEST=y # CONFIG_BRCMSTB_THERMAL is not set CONFIG_BRCM_CHAR_DRIVERS=y -CONFIG_BUILD_BIN2C=y # CONFIG_CACHE_L2X0 is not set +CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CLKDEV_LOOKUP=y CONFIG_CLKSRC_MMIO=y +CONFIG_CLK_BCM2835=y # CONFIG_CLK_RASPBERRYPI is not set CONFIG_CLONE_BACKWARDS=y CONFIG_CMA=y @@ -87,8 +94,10 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y # CONFIG_CMA_SIZE_SEL_MIN is not set # CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set CONFIG_COMMON_CLK=y +CONFIG_COMPAT_32BIT_TIME=y CONFIG_CONFIGFS_FS=y CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_CONTIG_ALLOC=y # CONFIG_CPUFREQ_DT is not set CONFIG_CPU_32v6=y CONFIG_CPU_32v6K=y @@ -115,6 +124,7 @@ CONFIG_CPU_HAS_ASID=y CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y +# CONFIG_CPU_IDLE_GOV_TEO is not set CONFIG_CPU_PABRT_V6=y CONFIG_CPU_PM=y # CONFIG_CPU_THERMAL is not set @@ -127,21 +137,19 @@ CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG2=y -CONFIG_CRYPTO_WORKQUEUE=y CONFIG_DCACHE_WORD_ACCESS=y CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" # CONFIG_DEBUG_USER is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_IOSCHED="cfq" CONFIG_DMADEVICES=y CONFIG_DMA_BCM2708=y CONFIG_DMA_BCM2835=y CONFIG_DMA_CMA=y +CONFIG_DMA_DECLARE_COHERENT=y CONFIG_DMA_ENGINE=y CONFIG_DMA_OF=y +CONFIG_DMA_REMAP=y CONFIG_DMA_SHARED_BUFFER=y CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DNOTIFY=y @@ -178,16 +186,17 @@ CONFIG_FRAMEBUFFER_CONSOLE=y # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_FREEZER=y +# CONFIG_FSL_QDMA is not set CONFIG_FS_IOMAP=y CONFIG_FS_MBCACHE=y CONFIG_FS_POSIX_ACL=y +CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW_LEVEL=y @@ -217,6 +226,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=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 @@ -227,14 +237,13 @@ CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y -CONFIG_HAVE_MEMBLOCK=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_HAVE_NET_DSA=y CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_PCI=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y @@ -256,16 +265,14 @@ CONFIG_INPUT_MOUSEDEV=y # CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -CONFIG_IOSCHED_CFQ=y CONFIG_IRQCHIP=y CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_IRQ_WORK=y CONFIG_JBD2=y +CONFIG_KASAN_STACK=1 CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_XZ is not set -# CONFIG_LCD_CLASS_DEVICE is not set CONFIG_LEDS_GPIO=y CONFIG_LEDS_TRIGGER_INPUT=y CONFIG_LIBFDT=y @@ -282,10 +289,12 @@ CONFIG_MAX_RAW_DEVS=256 CONFIG_MEMFD_CREATE=y CONFIG_MEMORY_ISOLATION=y CONFIG_MFD_CORE=y +# CONFIG_MFD_LOCHNAGAR is not set +# CONFIG_MFD_ROHM_BD70528 is not set # CONFIG_MFD_RPISENSE_CORE is not set +# CONFIG_MFD_STPMIC1 is not set CONFIG_MFD_SYSCON=y CONFIG_MIGHT_HAVE_CACHE_L2X0=y -CONFIG_MIGHT_HAVE_PCI=y CONFIG_MIGRATION=y CONFIG_MMC=y CONFIG_MMC_BCM2835=y @@ -303,7 +312,6 @@ CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_PER_CPU_KM=y CONFIG_NLS=y CONFIG_NLS_ASCII=y -CONFIG_NO_BOOTMEM=y CONFIG_NO_HZ=y CONFIG_NO_HZ_COMMON=y CONFIG_NO_HZ_IDLE=y @@ -350,7 +358,6 @@ CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_RESET_CONTROLLER=y # CONFIG_RPIVID_MEM is not set -CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_SCSI=y # CONFIG_SCSI_LOWLEVEL is not set # CONFIG_SCSI_PROC_FS is not set @@ -365,6 +372,7 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_DEV_BUS=y # CONFIG_SERIAL_DEV_CTRL_TTYPORT is not set +CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SG_POOL=y CONFIG_SPARSE_IRQ=y @@ -384,9 +392,13 @@ CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_TINY_SRCU=y CONFIG_TMPFS_POSIX_ACL=y +CONFIG_UBSAN_ALIGNMENT=y CONFIG_UEVENT_HELPER_PATH="" # CONFIG_UID16 is not set CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_UNIX_SCM=y +CONFIG_UNWINDER_ARM=y +# CONFIG_UNWINDER_FRAME_POINTER is not set CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_COMMON=y diff --git a/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch b/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch new file mode 100644 index 0000000000..cf88c0c69f --- /dev/null +++ b/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch @@ -0,0 +1,53 @@ +From afa0459daa7b08c7b2c879705b69d39b734a11d0 Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada +Date: Fri, 15 Nov 2019 02:42:21 +0900 +Subject: [PATCH] modpost: add a helper to get data pointed by a symbol + +When CONFIG_MODULE_REL_CRCS is enabled, the value of __crc_* is not +an absolute value, but the address to the CRC data embedded in the +.rodata section. + +Getting the data pointed by the symbol value is somewhat complex. +Split it out into a new helper, sym_get_data(). + +I will reuse it to refactor namespace_from_kstrtabns() in the next +commit. + +Signed-off-by: Masahiro Yamada +--- + scripts/mod/modpost.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -312,6 +312,18 @@ static const char *sec_name(struct elf_i + return sech_name(elf, &elf->sechdrs[secindex]); + } + ++static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym) ++{ ++ Elf_Shdr *sechdr = &info->sechdrs[sym->st_shndx]; ++ unsigned long offset; ++ ++ offset = sym->st_value; ++ if (info->hdr->e_type != ET_REL) ++ offset -= sechdr->sh_addr; ++ ++ return (void *)info->hdr + sechdr->sh_offset + offset; ++} ++ + #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0) + + static enum export export_from_secname(struct elf_info *elf, unsigned int sec) +@@ -701,10 +713,7 @@ static void handle_modversions(struct mo + unsigned int *crcp; + + /* symbol points to the CRC in the ELF object */ +- crcp = (void *)info->hdr + sym->st_value + +- info->sechdrs[sym->st_shndx].sh_offset - +- (info->hdr->e_type != ET_REL ? +- info->sechdrs[sym->st_shndx].sh_addr : 0); ++ crcp = sym_get_data(info, sym); + crc = TO_NATIVE(*crcp); + } + sym_update_crc(symname + strlen("__crc_"), mod, crc, diff --git a/target/linux/generic/backport-5.4/031-modpost-refactor-namespace_from_kstrtabns-to-not-har.patch b/target/linux/generic/backport-5.4/031-modpost-refactor-namespace_from_kstrtabns-to-not-har.patch new file mode 100644 index 0000000000..230dc6b89a --- /dev/null +++ b/target/linux/generic/backport-5.4/031-modpost-refactor-namespace_from_kstrtabns-to-not-har.patch @@ -0,0 +1,62 @@ +From e84f9fbbece1585f45a03ccc11eeabe121cadc1b Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada +Date: Fri, 15 Nov 2019 02:42:22 +0900 +Subject: [PATCH] modpost: refactor namespace_from_kstrtabns() to not hard-code + section name + +Currently, namespace_from_kstrtabns() relies on the fact that +namespace strings are recorded in the __ksymtab_strings section. +Actually, it is coded in include/linux/export.h, but modpost does +not need to hard-code the section name. + +Elf_Sym::st_shndx holds the index of the relevant section. Using it is +a more portable way to get the namespace string. + +Make namespace_from_kstrtabns() simply call sym_get_data(), and delete +the info->ksymtab_strings . + +While I was here, I added more 'const' qualifiers to pointers. + +Signed-off-by: Masahiro Yamada +--- + scripts/mod/modpost.c | 10 +++------- + scripts/mod/modpost.h | 1 - + 2 files changed, 3 insertions(+), 8 deletions(-) + +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -360,10 +360,10 @@ static enum export export_from_sec(struc + return export_unknown; + } + +-static const char *namespace_from_kstrtabns(struct elf_info *info, +- Elf_Sym *kstrtabns) ++static const char *namespace_from_kstrtabns(const struct elf_info *info, ++ const Elf_Sym *sym) + { +- char *value = info->ksymtab_strings + kstrtabns->st_value; ++ const char *value = sym_get_data(info, sym); + return value[0] ? value : NULL; + } + +@@ -605,10 +605,6 @@ static int parse_elf(struct elf_info *in + info->export_unused_gpl_sec = i; + else if (strcmp(secname, "__ksymtab_gpl_future") == 0) + info->export_gpl_future_sec = i; +- else if (strcmp(secname, "__ksymtab_strings") == 0) +- info->ksymtab_strings = (void *)hdr + +- sechdrs[i].sh_offset - +- sechdrs[i].sh_addr; + + if (sechdrs[i].sh_type == SHT_SYMTAB) { + unsigned int sh_link_idx; +--- a/scripts/mod/modpost.h ++++ b/scripts/mod/modpost.h +@@ -143,7 +143,6 @@ struct elf_info { + Elf_Section export_gpl_sec; + Elf_Section export_unused_gpl_sec; + Elf_Section export_gpl_future_sec; +- char *ksymtab_strings; + char *strtab; + char *modinfo; + unsigned int modinfo_len; diff --git a/target/linux/generic/backport-5.4/040-ARM-8918-2-only-build-return_address-if-needed.patch b/target/linux/generic/backport-5.4/040-ARM-8918-2-only-build-return_address-if-needed.patch new file mode 100644 index 0000000000..c9301f9c2a --- /dev/null +++ b/target/linux/generic/backport-5.4/040-ARM-8918-2-only-build-return_address-if-needed.patch @@ -0,0 +1,60 @@ +From fb033c95c94ca1ee3d16e04ebdb85d65fb55fff8 Mon Sep 17 00:00:00 2001 +From: Ben Dooks +Date: Mon, 4 Nov 2019 18:15:15 +0100 +Subject: [PATCH] ARM: 8918/2: only build return_address() if needed + +The system currently warns if the config conditions for +building return_address in arch/arm/kernel/return_address.c +are not met, leaving just an EXPORT_SYMBOL_GPL(return_address) +of a function defined to be 'static linline'. +This is a result of aeea3592a13b ("ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h"). + +Since we're not going to build anything other than an exported +symbol for something that is already being defined to be an +inline-able return of NULL, just avoid building the code to +remove the following warning: + +Fixes: aeea3592a13b ("ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h") +Signed-off-by: Ben Dooks +Signed-off-by: Russell King +--- + arch/arm/kernel/Makefile | 6 +++++- + arch/arm/kernel/return_address.c | 4 ---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +--- a/arch/arm/kernel/Makefile ++++ b/arch/arm/kernel/Makefile +@@ -17,10 +17,14 @@ CFLAGS_REMOVE_return_address.o = -pg + # Object file lists. + + obj-y := elf.o entry-common.o irq.o opcodes.o \ +- process.o ptrace.o reboot.o return_address.o \ ++ process.o ptrace.o reboot.o \ + setup.o signal.o sigreturn_codes.o \ + stacktrace.o sys_arm.o time.o traps.o + ++ifneq ($(CONFIG_ARM_UNWIND),y) ++obj-$(CONFIG_FRAME_POINTER) += return_address.o ++endif ++ + obj-$(CONFIG_ATAGS) += atags_parse.o + obj-$(CONFIG_ATAGS_PROC) += atags_proc.o + obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o +--- a/arch/arm/kernel/return_address.c ++++ b/arch/arm/kernel/return_address.c +@@ -7,8 +7,6 @@ + */ + #include + #include +- +-#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) + #include + + #include +@@ -53,6 +51,4 @@ void *return_address(unsigned int level) + return NULL; + } + +-#endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) */ +- + EXPORT_SYMBOL_GPL(return_address); diff --git a/target/linux/generic/backport-5.4/800-v5.5-iio-imu-Add-support-for-the-FXOS8700-IMU.patch b/target/linux/generic/backport-5.4/800-v5.5-iio-imu-Add-support-for-the-FXOS8700-IMU.patch new file mode 100644 index 0000000000..59435e99de --- /dev/null +++ b/target/linux/generic/backport-5.4/800-v5.5-iio-imu-Add-support-for-the-FXOS8700-IMU.patch @@ -0,0 +1,912 @@ +From 84e5ddd5c46ea3bf0cad670da32028994cad5936 Mon Sep 17 00:00:00 2001 +From: Robert Jones +Date: Mon, 14 Oct 2019 11:49:21 -0700 +Subject: [PATCH] iio: imu: Add support for the FXOS8700 IMU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +FXOS8700CQ is a small, low-power, 3-axis linear accelerometer and 3-axis +magnetometer combined into a single package. The device features a +selectable I2C or point-to-point SPI serial interface with 14-bit +accelerometer and 16-bit magnetometer ADC resolution along with +smart-embedded functions. + +FXOS8700CQ has dynamically selectable accelerationfull-scale ranges of +±2 g/±4 g/±8 g and a fixed magnetic measurement range of ±1200 μT. +Output data rates (ODR) from 1.563 Hz to 800 Hz are selectable by the user +for each sensor. Interleaved magnetic and acceleration data is available +at ODR rates of up to 400 Hz. FXOS8700CQ is available in a plastic QFN +package and it is guaranteed to operate over the extended temperature +range of –40 °C to +85 °C. + +TODO: Trigger and IRQ configuration support + +Datasheet: + http://cache.freescale.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf + +Signed-off-by: Robert Jones +Signed-off-by: Jonathan Cameron +--- + drivers/iio/imu/Kconfig | 27 ++ + drivers/iio/imu/Makefile | 5 + + drivers/iio/imu/fxos8700.h | 10 + + drivers/iio/imu/fxos8700_core.c | 649 ++++++++++++++++++++++++++++++++++++++++ + drivers/iio/imu/fxos8700_i2c.c | 71 +++++ + drivers/iio/imu/fxos8700_spi.c | 59 ++++ + 6 files changed, 821 insertions(+) + create mode 100644 drivers/iio/imu/fxos8700.h + create mode 100644 drivers/iio/imu/fxos8700_core.c + create mode 100644 drivers/iio/imu/fxos8700_i2c.c + create mode 100644 drivers/iio/imu/fxos8700_spi.c + +diff --git a/drivers/iio/imu/Kconfig b/drivers/iio/imu/Kconfig +index f3c7282..60bb102 100644 +--- a/drivers/iio/imu/Kconfig ++++ b/drivers/iio/imu/Kconfig +@@ -40,6 +40,33 @@ config ADIS16480 + + source "drivers/iio/imu/bmi160/Kconfig" + ++config FXOS8700 ++ tristate ++ ++config FXOS8700_I2C ++ tristate "NXP FXOS8700 I2C driver" ++ depends on I2C ++ select FXOS8700 ++ select REGMAP_I2C ++ help ++ Say yes here to build support for the NXP FXOS8700 m+g combo ++ sensor on I2C. ++ ++ This driver can also be built as a module. If so, the module will be ++ called fxos8700_i2c. ++ ++config FXOS8700_SPI ++ tristate "NXP FXOS8700 SPI driver" ++ depends on SPI ++ select FXOS8700 ++ select REGMAP_SPI ++ help ++ Say yes here to build support for the NXP FXOS8700 m+g combo ++ sensor on SPI. ++ ++ This driver can also be built as a module. If so, the module will be ++ called fxos8700_spi. ++ + config KMX61 + tristate "Kionix KMX61 6-axis accelerometer and magnetometer" + depends on I2C +diff --git a/drivers/iio/imu/Makefile b/drivers/iio/imu/Makefile +index 4a69588..5237fd4 100644 +--- a/drivers/iio/imu/Makefile ++++ b/drivers/iio/imu/Makefile +@@ -14,6 +14,11 @@ adis_lib-$(CONFIG_IIO_ADIS_LIB_BUFFER) += adis_buffer.o + obj-$(CONFIG_IIO_ADIS_LIB) += adis_lib.o + + obj-y += bmi160/ ++ ++obj-$(CONFIG_FXOS8700) += fxos8700_core.o ++obj-$(CONFIG_FXOS8700_I2C) += fxos8700_i2c.o ++obj-$(CONFIG_FXOS8700_SPI) += fxos8700_spi.o ++ + obj-y += inv_mpu6050/ + + obj-$(CONFIG_KMX61) += kmx61.o +diff --git a/drivers/iio/imu/fxos8700.h b/drivers/iio/imu/fxos8700.h +new file mode 100644 +index 00000000..6dfb8d7 +--- /dev/null ++++ b/drivers/iio/imu/fxos8700.h +@@ -0,0 +1,10 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef FXOS8700_H_ ++#define FXOS8700_H_ ++ ++extern const struct regmap_config fxos8700_regmap_config; ++ ++int fxos8700_core_probe(struct device *dev, struct regmap *regmap, ++ const char *name, bool use_spi); ++ ++#endif /* FXOS8700_H_ */ +diff --git a/drivers/iio/imu/fxos8700_core.c b/drivers/iio/imu/fxos8700_core.c +new file mode 100644 +index 00000000..7b47be4 +--- /dev/null ++++ b/drivers/iio/imu/fxos8700_core.c +@@ -0,0 +1,649 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * FXOS8700 - NXP IMU (accelerometer plus magnetometer) ++ * ++ * IIO core driver for FXOS8700, with support for I2C/SPI busses ++ * ++ * TODO: Buffer, trigger, and IRQ support ++ */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "fxos8700.h" ++ ++/* Register Definitions */ ++#define FXOS8700_STATUS 0x00 ++#define FXOS8700_OUT_X_MSB 0x01 ++#define FXOS8700_OUT_X_LSB 0x02 ++#define FXOS8700_OUT_Y_MSB 0x03 ++#define FXOS8700_OUT_Y_LSB 0x04 ++#define FXOS8700_OUT_Z_MSB 0x05 ++#define FXOS8700_OUT_Z_LSB 0x06 ++#define FXOS8700_F_SETUP 0x09 ++#define FXOS8700_TRIG_CFG 0x0a ++#define FXOS8700_SYSMOD 0x0b ++#define FXOS8700_INT_SOURCE 0x0c ++#define FXOS8700_WHO_AM_I 0x0d ++#define FXOS8700_XYZ_DATA_CFG 0x0e ++#define FXOS8700_HP_FILTER_CUTOFF 0x0f ++#define FXOS8700_PL_STATUS 0x10 ++#define FXOS8700_PL_CFG 0x11 ++#define FXOS8700_PL_COUNT 0x12 ++#define FXOS8700_PL_BF_ZCOMP 0x13 ++#define FXOS8700_PL_THS_REG 0x14 ++#define FXOS8700_A_FFMT_CFG 0x15 ++#define FXOS8700_A_FFMT_SRC 0x16 ++#define FXOS8700_A_FFMT_THS 0x17 ++#define FXOS8700_A_FFMT_COUNT 0x18 ++#define FXOS8700_TRANSIENT_CFG 0x1d ++#define FXOS8700_TRANSIENT_SRC 0x1e ++#define FXOS8700_TRANSIENT_THS 0x1f ++#define FXOS8700_TRANSIENT_COUNT 0x20 ++#define FXOS8700_PULSE_CFG 0x21 ++#define FXOS8700_PULSE_SRC 0x22 ++#define FXOS8700_PULSE_THSX 0x23 ++#define FXOS8700_PULSE_THSY 0x24 ++#define FXOS8700_PULSE_THSZ 0x25 ++#define FXOS8700_PULSE_TMLT 0x26 ++#define FXOS8700_PULSE_LTCY 0x27 ++#define FXOS8700_PULSE_WIND 0x28 ++#define FXOS8700_ASLP_COUNT 0x29 ++#define FXOS8700_CTRL_REG1 0x2a ++#define FXOS8700_CTRL_REG2 0x2b ++#define FXOS8700_CTRL_REG3 0x2c ++#define FXOS8700_CTRL_REG4 0x2d ++#define FXOS8700_CTRL_REG5 0x2e ++#define FXOS8700_OFF_X 0x2f ++#define FXOS8700_OFF_Y 0x30 ++#define FXOS8700_OFF_Z 0x31 ++#define FXOS8700_M_DR_STATUS 0x32 ++#define FXOS8700_M_OUT_X_MSB 0x33 ++#define FXOS8700_M_OUT_X_LSB 0x34 ++#define FXOS8700_M_OUT_Y_MSB 0x35 ++#define FXOS8700_M_OUT_Y_LSB 0x36 ++#define FXOS8700_M_OUT_Z_MSB 0x37 ++#define FXOS8700_M_OUT_Z_LSB 0x38 ++#define FXOS8700_CMP_X_MSB 0x39 ++#define FXOS8700_CMP_X_LSB 0x3a ++#define FXOS8700_CMP_Y_MSB 0x3b ++#define FXOS8700_CMP_Y_LSB 0x3c ++#define FXOS8700_CMP_Z_MSB 0x3d ++#define FXOS8700_CMP_Z_LSB 0x3e ++#define FXOS8700_M_OFF_X_MSB 0x3f ++#define FXOS8700_M_OFF_X_LSB 0x40 ++#define FXOS8700_M_OFF_Y_MSB 0x41 ++#define FXOS8700_M_OFF_Y_LSB 0x42 ++#define FXOS8700_M_OFF_Z_MSB 0x43 ++#define FXOS8700_M_OFF_Z_LSB 0x44 ++#define FXOS8700_MAX_X_MSB 0x45 ++#define FXOS8700_MAX_X_LSB 0x46 ++#define FXOS8700_MAX_Y_MSB 0x47 ++#define FXOS8700_MAX_Y_LSB 0x48 ++#define FXOS8700_MAX_Z_MSB 0x49 ++#define FXOS8700_MAX_Z_LSB 0x4a ++#define FXOS8700_MIN_X_MSB 0x4b ++#define FXOS8700_MIN_X_LSB 0x4c ++#define FXOS8700_MIN_Y_MSB 0x4d ++#define FXOS8700_MIN_Y_LSB 0x4e ++#define FXOS8700_MIN_Z_MSB 0x4f ++#define FXOS8700_MIN_Z_LSB 0x50 ++#define FXOS8700_TEMP 0x51 ++#define FXOS8700_M_THS_CFG 0x52 ++#define FXOS8700_M_THS_SRC 0x53 ++#define FXOS8700_M_THS_X_MSB 0x54 ++#define FXOS8700_M_THS_X_LSB 0x55 ++#define FXOS8700_M_THS_Y_MSB 0x56 ++#define FXOS8700_M_THS_Y_LSB 0x57 ++#define FXOS8700_M_THS_Z_MSB 0x58 ++#define FXOS8700_M_THS_Z_LSB 0x59 ++#define FXOS8700_M_THS_COUNT 0x5a ++#define FXOS8700_M_CTRL_REG1 0x5b ++#define FXOS8700_M_CTRL_REG2 0x5c ++#define FXOS8700_M_CTRL_REG3 0x5d ++#define FXOS8700_M_INT_SRC 0x5e ++#define FXOS8700_A_VECM_CFG 0x5f ++#define FXOS8700_A_VECM_THS_MSB 0x60 ++#define FXOS8700_A_VECM_THS_LSB 0x61 ++#define FXOS8700_A_VECM_CNT 0x62 ++#define FXOS8700_A_VECM_INITX_MSB 0x63 ++#define FXOS8700_A_VECM_INITX_LSB 0x64 ++#define FXOS8700_A_VECM_INITY_MSB 0x65 ++#define FXOS8700_A_VECM_INITY_LSB 0x66 ++#define FXOS8700_A_VECM_INITZ_MSB 0x67 ++#define FXOS8700_A_VECM_INITZ_LSB 0x68 ++#define FXOS8700_M_VECM_CFG 0x69 ++#define FXOS8700_M_VECM_THS_MSB 0x6a ++#define FXOS8700_M_VECM_THS_LSB 0x6b ++#define FXOS8700_M_VECM_CNT 0x6c ++#define FXOS8700_M_VECM_INITX_MSB 0x6d ++#define FXOS8700_M_VECM_INITX_LSB 0x6e ++#define FXOS8700_M_VECM_INITY_MSB 0x6f ++#define FXOS8700_M_VECM_INITY_LSB 0x70 ++#define FXOS8700_M_VECM_INITZ_MSB 0x71 ++#define FXOS8700_M_VECM_INITZ_LSB 0x72 ++#define FXOS8700_A_FFMT_THS_X_MSB 0x73 ++#define FXOS8700_A_FFMT_THS_X_LSB 0x74 ++#define FXOS8700_A_FFMT_THS_Y_MSB 0x75 ++#define FXOS8700_A_FFMT_THS_Y_LSB 0x76 ++#define FXOS8700_A_FFMT_THS_Z_MSB 0x77 ++#define FXOS8700_A_FFMT_THS_Z_LSB 0x78 ++#define FXOS8700_A_TRAN_INIT_MSB 0x79 ++#define FXOS8700_A_TRAN_INIT_LSB_X 0x7a ++#define FXOS8700_A_TRAN_INIT_LSB_Y 0x7b ++#define FXOS8700_A_TRAN_INIT_LSB_Z 0x7d ++#define FXOS8700_TM_NVM_LOCK 0x7e ++#define FXOS8700_NVM_DATA0_35 0x80 ++#define FXOS8700_NVM_DATA_BNK3 0xa4 ++#define FXOS8700_NVM_DATA_BNK2 0xa5 ++#define FXOS8700_NVM_DATA_BNK1 0xa6 ++#define FXOS8700_NVM_DATA_BNK0 0xa7 ++ ++/* Bit definitions for FXOS8700_CTRL_REG1 */ ++#define FXOS8700_CTRL_ODR_MSK 0x38 ++#define FXOS8700_CTRL_ODR_MAX 0x00 ++#define FXOS8700_CTRL_ODR_MIN GENMASK(4, 3) ++ ++/* Bit definitions for FXOS8700_M_CTRL_REG1 */ ++#define FXOS8700_HMS_MASK GENMASK(1, 0) ++#define FXOS8700_OS_MASK GENMASK(4, 2) ++ ++/* Bit definitions for FXOS8700_M_CTRL_REG2 */ ++#define FXOS8700_MAXMIN_RST BIT(2) ++#define FXOS8700_MAXMIN_DIS_THS BIT(3) ++#define FXOS8700_MAXMIN_DIS BIT(4) ++ ++#define FXOS8700_ACTIVE 0x01 ++#define FXOS8700_ACTIVE_MIN_USLEEP 4000 /* from table 6 in datasheet */ ++ ++#define FXOS8700_DEVICE_ID 0xC7 ++#define FXOS8700_PRE_DEVICE_ID 0xC4 ++#define FXOS8700_DATA_BUF_SIZE 3 ++ ++struct fxos8700_data { ++ struct regmap *regmap; ++ struct iio_trigger *trig; ++ __be16 buf[FXOS8700_DATA_BUF_SIZE] ____cacheline_aligned; ++}; ++ ++/* Regmap info */ ++static const struct regmap_range read_range[] = { ++ { ++ .range_min = FXOS8700_STATUS, ++ .range_max = FXOS8700_A_FFMT_COUNT, ++ }, { ++ .range_min = FXOS8700_TRANSIENT_CFG, ++ .range_max = FXOS8700_A_FFMT_THS_Z_LSB, ++ }, ++}; ++ ++static const struct regmap_range write_range[] = { ++ { ++ .range_min = FXOS8700_F_SETUP, ++ .range_max = FXOS8700_TRIG_CFG, ++ }, { ++ .range_min = FXOS8700_XYZ_DATA_CFG, ++ .range_max = FXOS8700_HP_FILTER_CUTOFF, ++ }, { ++ .range_min = FXOS8700_PL_CFG, ++ .range_max = FXOS8700_A_FFMT_CFG, ++ }, { ++ .range_min = FXOS8700_A_FFMT_THS, ++ .range_max = FXOS8700_TRANSIENT_CFG, ++ }, { ++ .range_min = FXOS8700_TRANSIENT_THS, ++ .range_max = FXOS8700_PULSE_CFG, ++ }, { ++ .range_min = FXOS8700_PULSE_THSX, ++ .range_max = FXOS8700_OFF_Z, ++ }, { ++ .range_min = FXOS8700_M_OFF_X_MSB, ++ .range_max = FXOS8700_M_OFF_Z_LSB, ++ }, { ++ .range_min = FXOS8700_M_THS_CFG, ++ .range_max = FXOS8700_M_THS_CFG, ++ }, { ++ .range_min = FXOS8700_M_THS_X_MSB, ++ .range_max = FXOS8700_M_CTRL_REG3, ++ }, { ++ .range_min = FXOS8700_A_VECM_CFG, ++ .range_max = FXOS8700_A_FFMT_THS_Z_LSB, ++ }, ++}; ++ ++static const struct regmap_access_table driver_read_table = { ++ .yes_ranges = read_range, ++ .n_yes_ranges = ARRAY_SIZE(read_range), ++}; ++ ++static const struct regmap_access_table driver_write_table = { ++ .yes_ranges = write_range, ++ .n_yes_ranges = ARRAY_SIZE(write_range), ++}; ++ ++const struct regmap_config fxos8700_regmap_config = { ++ .reg_bits = 8, ++ .val_bits = 8, ++ .max_register = FXOS8700_NVM_DATA_BNK0, ++ .rd_table = &driver_read_table, ++ .wr_table = &driver_write_table, ++}; ++EXPORT_SYMBOL(fxos8700_regmap_config); ++ ++#define FXOS8700_CHANNEL(_type, _axis) { \ ++ .type = _type, \ ++ .modified = 1, \ ++ .channel2 = IIO_MOD_##_axis, \ ++ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ ++ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ ++ BIT(IIO_CHAN_INFO_SAMP_FREQ), \ ++} ++ ++enum fxos8700_accel_scale_bits { ++ MODE_2G = 0, ++ MODE_4G, ++ MODE_8G, ++}; ++ ++/* scan indexes follow DATA register order */ ++enum fxos8700_scan_axis { ++ FXOS8700_SCAN_ACCEL_X = 0, ++ FXOS8700_SCAN_ACCEL_Y, ++ FXOS8700_SCAN_ACCEL_Z, ++ FXOS8700_SCAN_MAGN_X, ++ FXOS8700_SCAN_MAGN_Y, ++ FXOS8700_SCAN_MAGN_Z, ++ FXOS8700_SCAN_RHALL, ++ FXOS8700_SCAN_TIMESTAMP, ++}; ++ ++enum fxos8700_sensor { ++ FXOS8700_ACCEL = 0, ++ FXOS8700_MAGN, ++ FXOS8700_NUM_SENSORS /* must be last */ ++}; ++ ++enum fxos8700_int_pin { ++ FXOS8700_PIN_INT1, ++ FXOS8700_PIN_INT2 ++}; ++ ++struct fxos8700_scale { ++ u8 bits; ++ int uscale; ++}; ++ ++struct fxos8700_odr { ++ u8 bits; ++ int odr; ++ int uodr; ++}; ++ ++static const struct fxos8700_scale fxos8700_accel_scale[] = { ++ { MODE_2G, 244}, ++ { MODE_4G, 488}, ++ { MODE_8G, 976}, ++}; ++ ++/* ++ * Accellerometer and magnetometer have the same ODR options, set in the ++ * CTRL_REG1 register. ODR is halved when using both sensors at once in ++ * hybrid mode. ++ */ ++static const struct fxos8700_odr fxos8700_odr[] = { ++ {0x00, 800, 0}, ++ {0x01, 400, 0}, ++ {0x02, 200, 0}, ++ {0x03, 100, 0}, ++ {0x04, 50, 0}, ++ {0x05, 12, 500000}, ++ {0x06, 6, 250000}, ++ {0x07, 1, 562500}, ++}; ++ ++static const struct iio_chan_spec fxos8700_channels[] = { ++ FXOS8700_CHANNEL(IIO_ACCEL, X), ++ FXOS8700_CHANNEL(IIO_ACCEL, Y), ++ FXOS8700_CHANNEL(IIO_ACCEL, Z), ++ FXOS8700_CHANNEL(IIO_MAGN, X), ++ FXOS8700_CHANNEL(IIO_MAGN, Y), ++ FXOS8700_CHANNEL(IIO_MAGN, Z), ++ IIO_CHAN_SOFT_TIMESTAMP(FXOS8700_SCAN_TIMESTAMP), ++}; ++ ++static enum fxos8700_sensor fxos8700_to_sensor(enum iio_chan_type iio_type) ++{ ++ switch (iio_type) { ++ case IIO_ACCEL: ++ return FXOS8700_ACCEL; ++ case IIO_ANGL_VEL: ++ return FXOS8700_MAGN; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int fxos8700_set_active_mode(struct fxos8700_data *data, ++ enum fxos8700_sensor t, bool mode) ++{ ++ int ret; ++ ++ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, mode); ++ if (ret) ++ return ret; ++ ++ usleep_range(FXOS8700_ACTIVE_MIN_USLEEP, ++ FXOS8700_ACTIVE_MIN_USLEEP + 1000); ++ ++ return 0; ++} ++ ++static int fxos8700_set_scale(struct fxos8700_data *data, ++ enum fxos8700_sensor t, int uscale) ++{ ++ int i; ++ static const int scale_num = ARRAY_SIZE(fxos8700_accel_scale); ++ struct device *dev = regmap_get_device(data->regmap); ++ ++ if (t == FXOS8700_MAGN) { ++ dev_err(dev, "Magnetometer scale is locked at 1200uT\n"); ++ return -EINVAL; ++ } ++ ++ for (i = 0; i < scale_num; i++) ++ if (fxos8700_accel_scale[i].uscale == uscale) ++ break; ++ ++ if (i == scale_num) ++ return -EINVAL; ++ ++ return regmap_write(data->regmap, FXOS8700_XYZ_DATA_CFG, ++ fxos8700_accel_scale[i].bits); ++} ++ ++static int fxos8700_get_scale(struct fxos8700_data *data, ++ enum fxos8700_sensor t, int *uscale) ++{ ++ int i, ret, val; ++ static const int scale_num = ARRAY_SIZE(fxos8700_accel_scale); ++ ++ if (t == FXOS8700_MAGN) { ++ *uscale = 1200; /* Magnetometer is locked at 1200uT */ ++ return 0; ++ } ++ ++ ret = regmap_read(data->regmap, FXOS8700_XYZ_DATA_CFG, &val); ++ if (ret) ++ return ret; ++ ++ for (i = 0; i < scale_num; i++) { ++ if (fxos8700_accel_scale[i].bits == (val & 0x3)) { ++ *uscale = fxos8700_accel_scale[i].uscale; ++ return 0; ++ } ++ } ++ ++ return -EINVAL; ++} ++ ++static int fxos8700_get_data(struct fxos8700_data *data, int chan_type, ++ int axis, int *val) ++{ ++ u8 base, reg; ++ int ret; ++ enum fxos8700_sensor type = fxos8700_to_sensor(chan_type); ++ ++ base = type ? FXOS8700_OUT_X_MSB : FXOS8700_M_OUT_X_MSB; ++ ++ /* Block read 6 bytes of device output registers to avoid data loss */ ++ ret = regmap_bulk_read(data->regmap, base, data->buf, ++ FXOS8700_DATA_BUF_SIZE); ++ if (ret) ++ return ret; ++ ++ /* Convert axis to buffer index */ ++ reg = axis - IIO_MOD_X; ++ ++ /* Convert to native endianness */ ++ *val = sign_extend32(be16_to_cpu(data->buf[reg]), 15); ++ ++ return 0; ++} ++ ++static int fxos8700_set_odr(struct fxos8700_data *data, enum fxos8700_sensor t, ++ int odr, int uodr) ++{ ++ int i, ret, val; ++ bool active_mode; ++ static const int odr_num = ARRAY_SIZE(fxos8700_odr); ++ ++ ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, &val); ++ if (ret) ++ return ret; ++ ++ active_mode = val & FXOS8700_ACTIVE; ++ ++ if (active_mode) { ++ /* ++ * The device must be in standby mode to change any of the ++ * other fields within CTRL_REG1 ++ */ ++ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, ++ val & ~FXOS8700_ACTIVE); ++ if (ret) ++ return ret; ++ } ++ ++ for (i = 0; i < odr_num; i++) ++ if (fxos8700_odr[i].odr == odr && fxos8700_odr[i].uodr == uodr) ++ break; ++ ++ if (i >= odr_num) ++ return -EINVAL; ++ ++ return regmap_update_bits(data->regmap, ++ FXOS8700_CTRL_REG1, ++ FXOS8700_CTRL_ODR_MSK + FXOS8700_ACTIVE, ++ fxos8700_odr[i].bits << 3 | active_mode); ++} ++ ++static int fxos8700_get_odr(struct fxos8700_data *data, enum fxos8700_sensor t, ++ int *odr, int *uodr) ++{ ++ int i, val, ret; ++ static const int odr_num = ARRAY_SIZE(fxos8700_odr); ++ ++ ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, &val); ++ if (ret) ++ return ret; ++ ++ val &= FXOS8700_CTRL_ODR_MSK; ++ ++ for (i = 0; i < odr_num; i++) ++ if (val == fxos8700_odr[i].bits) ++ break; ++ ++ if (i >= odr_num) ++ return -EINVAL; ++ ++ *odr = fxos8700_odr[i].odr; ++ *uodr = fxos8700_odr[i].uodr; ++ ++ return 0; ++} ++ ++static int fxos8700_read_raw(struct iio_dev *indio_dev, ++ struct iio_chan_spec const *chan, ++ int *val, int *val2, long mask) ++{ ++ int ret; ++ struct fxos8700_data *data = iio_priv(indio_dev); ++ ++ switch (mask) { ++ case IIO_CHAN_INFO_RAW: ++ ret = fxos8700_get_data(data, chan->type, chan->channel2, val); ++ if (ret) ++ return ret; ++ return IIO_VAL_INT; ++ case IIO_CHAN_INFO_SCALE: ++ *val = 0; ++ ret = fxos8700_get_scale(data, fxos8700_to_sensor(chan->type), ++ val2); ++ return ret ? ret : IIO_VAL_INT_PLUS_MICRO; ++ case IIO_CHAN_INFO_SAMP_FREQ: ++ ret = fxos8700_get_odr(data, fxos8700_to_sensor(chan->type), ++ val, val2); ++ return ret ? ret : IIO_VAL_INT_PLUS_MICRO; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int fxos8700_write_raw(struct iio_dev *indio_dev, ++ struct iio_chan_spec const *chan, ++ int val, int val2, long mask) ++{ ++ struct fxos8700_data *data = iio_priv(indio_dev); ++ ++ switch (mask) { ++ case IIO_CHAN_INFO_SCALE: ++ return fxos8700_set_scale(data, fxos8700_to_sensor(chan->type), ++ val2); ++ case IIO_CHAN_INFO_SAMP_FREQ: ++ return fxos8700_set_odr(data, fxos8700_to_sensor(chan->type), ++ val, val2); ++ default: ++ return -EINVAL; ++ } ++} ++ ++static IIO_CONST_ATTR(in_accel_sampling_frequency_available, ++ "1.5625 6.25 12.5 50 100 200 400 800"); ++static IIO_CONST_ATTR(in_magn_sampling_frequency_available, ++ "1.5625 6.25 12.5 50 100 200 400 800"); ++static IIO_CONST_ATTR(in_accel_scale_available, "0.000244 0.000488 0.000976"); ++static IIO_CONST_ATTR(in_magn_scale_available, "0.000001200"); ++ ++static struct attribute *fxos8700_attrs[] = { ++ &iio_const_attr_in_accel_sampling_frequency_available.dev_attr.attr, ++ &iio_const_attr_in_magn_sampling_frequency_available.dev_attr.attr, ++ &iio_const_attr_in_accel_scale_available.dev_attr.attr, ++ &iio_const_attr_in_magn_scale_available.dev_attr.attr, ++ NULL, ++}; ++ ++static const struct attribute_group fxos8700_attrs_group = { ++ .attrs = fxos8700_attrs, ++}; ++ ++static const struct iio_info fxos8700_info = { ++ .read_raw = fxos8700_read_raw, ++ .write_raw = fxos8700_write_raw, ++ .attrs = &fxos8700_attrs_group, ++}; ++ ++static int fxos8700_chip_init(struct fxos8700_data *data, bool use_spi) ++{ ++ int ret; ++ unsigned int val; ++ struct device *dev = regmap_get_device(data->regmap); ++ ++ ret = regmap_read(data->regmap, FXOS8700_WHO_AM_I, &val); ++ if (ret) { ++ dev_err(dev, "Error reading chip id\n"); ++ return ret; ++ } ++ if (val != FXOS8700_DEVICE_ID && val != FXOS8700_PRE_DEVICE_ID) { ++ dev_err(dev, "Wrong chip id, got %x expected %x or %x\n", ++ val, FXOS8700_DEVICE_ID, FXOS8700_PRE_DEVICE_ID); ++ return -ENODEV; ++ } ++ ++ ret = fxos8700_set_active_mode(data, FXOS8700_ACCEL, true); ++ if (ret) ++ return ret; ++ ++ ret = fxos8700_set_active_mode(data, FXOS8700_MAGN, true); ++ if (ret) ++ return ret; ++ ++ /* ++ * The device must be in standby mode to change any of the other fields ++ * within CTRL_REG1 ++ */ ++ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, 0x00); ++ if (ret) ++ return ret; ++ ++ /* Set max oversample ratio (OSR) and both devices active */ ++ ret = regmap_write(data->regmap, FXOS8700_M_CTRL_REG1, ++ FXOS8700_HMS_MASK | FXOS8700_OS_MASK); ++ if (ret) ++ return ret; ++ ++ /* Disable and rst min/max measurements & threshold */ ++ ret = regmap_write(data->regmap, FXOS8700_M_CTRL_REG2, ++ FXOS8700_MAXMIN_RST | FXOS8700_MAXMIN_DIS_THS | ++ FXOS8700_MAXMIN_DIS); ++ if (ret) ++ return ret; ++ ++ /* Max ODR (800Hz individual or 400Hz hybrid), active mode */ ++ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, ++ FXOS8700_CTRL_ODR_MAX | FXOS8700_ACTIVE); ++ if (ret) ++ return ret; ++ ++ /* Set for max full-scale range (+/-8G) */ ++ return regmap_write(data->regmap, FXOS8700_XYZ_DATA_CFG, MODE_8G); ++} ++ ++static void fxos8700_chip_uninit(void *data) ++{ ++ struct fxos8700_data *fxos8700_data = data; ++ ++ fxos8700_set_active_mode(fxos8700_data, FXOS8700_ACCEL, false); ++ fxos8700_set_active_mode(fxos8700_data, FXOS8700_MAGN, false); ++} ++ ++int fxos8700_core_probe(struct device *dev, struct regmap *regmap, ++ const char *name, bool use_spi) ++{ ++ struct iio_dev *indio_dev; ++ struct fxos8700_data *data; ++ int ret; ++ ++ indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); ++ if (!indio_dev) ++ return -ENOMEM; ++ ++ data = iio_priv(indio_dev); ++ dev_set_drvdata(dev, indio_dev); ++ data->regmap = regmap; ++ ++ ret = fxos8700_chip_init(data, use_spi); ++ if (ret) ++ return ret; ++ ++ ret = devm_add_action_or_reset(dev, fxos8700_chip_uninit, data); ++ if (ret) ++ return ret; ++ ++ indio_dev->dev.parent = dev; ++ indio_dev->channels = fxos8700_channels; ++ indio_dev->num_channels = ARRAY_SIZE(fxos8700_channels); ++ indio_dev->name = name ? name : "fxos8700"; ++ indio_dev->modes = INDIO_DIRECT_MODE; ++ indio_dev->info = &fxos8700_info; ++ ++ return devm_iio_device_register(dev, indio_dev); ++} ++EXPORT_SYMBOL_GPL(fxos8700_core_probe); ++ ++MODULE_AUTHOR("Robert Jones "); ++MODULE_DESCRIPTION("FXOS8700 6-Axis Acc and Mag Combo Sensor driver"); ++MODULE_LICENSE("GPL v2"); +diff --git a/drivers/iio/imu/fxos8700_i2c.c b/drivers/iio/imu/fxos8700_i2c.c +new file mode 100644 +index 00000000..3ceb763 +--- /dev/null ++++ b/drivers/iio/imu/fxos8700_i2c.c +@@ -0,0 +1,71 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * FXOS8700 - NXP IMU, I2C bits ++ * ++ * 7-bit I2C slave address determined by SA1 and SA0 logic level ++ * inputs represented in the following table: ++ * SA1 | SA0 | Slave Address ++ * 0 | 0 | 0x1E ++ * 0 | 1 | 0x1D ++ * 1 | 0 | 0x1C ++ * 1 | 1 | 0x1F ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#include "fxos8700.h" ++ ++static int fxos8700_i2c_probe(struct i2c_client *client, ++ const struct i2c_device_id *id) ++{ ++ struct regmap *regmap; ++ const char *name = NULL; ++ ++ regmap = devm_regmap_init_i2c(client, &fxos8700_regmap_config); ++ if (IS_ERR(regmap)) { ++ dev_err(&client->dev, "Failed to register i2c regmap %d\n", ++ (int)PTR_ERR(regmap)); ++ return PTR_ERR(regmap); ++ } ++ ++ if (id) ++ name = id->name; ++ ++ return fxos8700_core_probe(&client->dev, regmap, name, false); ++} ++ ++static const struct i2c_device_id fxos8700_i2c_id[] = { ++ {"fxos8700", 0}, ++ { } ++}; ++MODULE_DEVICE_TABLE(i2c, fxos8700_i2c_id); ++ ++static const struct acpi_device_id fxos8700_acpi_match[] = { ++ {"FXOS8700", 0}, ++ { } ++}; ++MODULE_DEVICE_TABLE(acpi, fxos8700_acpi_match); ++ ++static const struct of_device_id fxos8700_of_match[] = { ++ { .compatible = "nxp,fxos8700" }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, fxos8700_of_match); ++ ++static struct i2c_driver fxos8700_i2c_driver = { ++ .driver = { ++ .name = "fxos8700_i2c", ++ .acpi_match_table = ACPI_PTR(fxos8700_acpi_match), ++ .of_match_table = fxos8700_of_match, ++ }, ++ .probe = fxos8700_i2c_probe, ++ .id_table = fxos8700_i2c_id, ++}; ++module_i2c_driver(fxos8700_i2c_driver); ++ ++MODULE_AUTHOR("Robert Jones "); ++MODULE_DESCRIPTION("FXOS8700 I2C driver"); ++MODULE_LICENSE("GPL v2"); +diff --git a/drivers/iio/imu/fxos8700_spi.c b/drivers/iio/imu/fxos8700_spi.c +new file mode 100644 +index 00000000..57e7bb6 +--- /dev/null ++++ b/drivers/iio/imu/fxos8700_spi.c +@@ -0,0 +1,59 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * FXOS8700 - NXP IMU, SPI bits ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++#include "fxos8700.h" ++ ++static int fxos8700_spi_probe(struct spi_device *spi) ++{ ++ struct regmap *regmap; ++ const struct spi_device_id *id = spi_get_device_id(spi); ++ ++ regmap = devm_regmap_init_spi(spi, &fxos8700_regmap_config); ++ if (IS_ERR(regmap)) { ++ dev_err(&spi->dev, "Failed to register spi regmap %d\n", ++ (int)PTR_ERR(regmap)); ++ return PTR_ERR(regmap); ++ } ++ ++ return fxos8700_core_probe(&spi->dev, regmap, id->name, true); ++} ++ ++static const struct spi_device_id fxos8700_spi_id[] = { ++ {"fxos8700", 0}, ++ { } ++}; ++MODULE_DEVICE_TABLE(spi, fxos8700_spi_id); ++ ++static const struct acpi_device_id fxos8700_acpi_match[] = { ++ {"FXOS8700", 0}, ++ { } ++}; ++MODULE_DEVICE_TABLE(acpi, fxos8700_acpi_match); ++ ++static const struct of_device_id fxos8700_of_match[] = { ++ { .compatible = "nxp,fxos8700" }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, fxos8700_of_match); ++ ++static struct spi_driver fxos8700_spi_driver = { ++ .probe = fxos8700_spi_probe, ++ .id_table = fxos8700_spi_id, ++ .driver = { ++ .acpi_match_table = ACPI_PTR(fxos8700_acpi_match), ++ .of_match_table = fxos8700_of_match, ++ .name = "fxos8700_spi", ++ }, ++}; ++module_spi_driver(fxos8700_spi_driver); ++ ++MODULE_AUTHOR("Robert Jones "); ++MODULE_DESCRIPTION("FXOS8700 SPI driver"); ++MODULE_LICENSE("GPL v2"); +-- +2.7.4 + diff --git a/target/linux/generic/hack-5.4/204-module_strip.patch b/target/linux/generic/hack-5.4/204-module_strip.patch index d37dfd4f98..8b84ddd7f0 100644 --- a/target/linux/generic/hack-5.4/204-module_strip.patch +++ b/target/linux/generic/hack-5.4/204-module_strip.patch @@ -135,7 +135,7 @@ Signed-off-by: Felix Fietkau --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c -@@ -2051,7 +2051,9 @@ static void read_symbols(const char *mod +@@ -2056,7 +2056,9 @@ static void read_symbols(const char *mod symname = remove_dot(info.strtab + sym->st_name); handle_modversions(mod, &info, sym, symname); @@ -145,7 +145,7 @@ Signed-off-by: Felix Fietkau } /* Apply symbol namespaces from __kstrtabns_ entries. */ -@@ -2265,8 +2267,10 @@ static void add_header(struct buffer *b, +@@ -2270,8 +2272,10 @@ static void add_header(struct buffer *b, buf_printf(b, "\n"); buf_printf(b, "BUILD_SALT;\n"); buf_printf(b, "\n"); @@ -156,7 +156,7 @@ Signed-off-by: Felix Fietkau buf_printf(b, "\n"); buf_printf(b, "__visible struct module __this_module\n"); buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n"); -@@ -2283,8 +2287,10 @@ static void add_header(struct buffer *b, +@@ -2288,8 +2292,10 @@ static void add_header(struct buffer *b, static void add_intree_flag(struct buffer *b, int is_intree) { @@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau } /* Cannot check for assembler */ -@@ -2297,8 +2303,10 @@ static void add_retpoline(struct buffer +@@ -2302,8 +2308,10 @@ static void add_retpoline(struct buffer static void add_staging_flag(struct buffer *b, const char *name) { @@ -178,7 +178,7 @@ Signed-off-by: Felix Fietkau } /** -@@ -2382,11 +2390,13 @@ static void add_depends(struct buffer *b +@@ -2387,11 +2395,13 @@ static void add_depends(struct buffer *b static void add_srcversion(struct buffer *b, struct module *mod) { @@ -192,7 +192,7 @@ Signed-off-by: Felix Fietkau } static void write_if_changed(struct buffer *b, const char *fname) -@@ -2656,7 +2666,9 @@ int main(int argc, char **argv) +@@ -2661,7 +2671,9 @@ int main(int argc, char **argv) add_staging_flag(&buf, mod->name); err |= add_versions(&buf, mod); add_depends(&buf, mod); diff --git a/target/linux/generic/hack-5.4/211-darwin-uuid-typedef-clash.patch b/target/linux/generic/hack-5.4/211-darwin-uuid-typedef-clash.patch index 4a424c99c1..50a6227148 100644 --- a/target/linux/generic/hack-5.4/211-darwin-uuid-typedef-clash.patch +++ b/target/linux/generic/hack-5.4/211-darwin-uuid-typedef-clash.patch @@ -8,8 +8,6 @@ Signed-off-by: Kevin Darbyshire-Bryant scripts/mod/file2alias.c | 3 +++ 1 file changed, 3 insertions(+) -diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c -index c91eba751804..e756fd80b721 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -38,6 +38,9 @@ typedef struct { @@ -22,6 +20,3 @@ index c91eba751804..e756fd80b721 100644 /* backwards compatibility, don't use in new code */ typedef struct { __u8 b[16]; --- -2.21.1 (Apple Git-122.3) - diff --git a/target/linux/imx6/patches-5.4/005-v5.7-ARM-dts-imx6qdl-gw553x-add-lsm9ds1-iio-imu-magn-supp.patch b/target/linux/imx6/patches-5.4/005-v5.7-ARM-dts-imx6qdl-gw553x-add-lsm9ds1-iio-imu-magn-supp.patch new file mode 100644 index 0000000000..6a6c828937 --- /dev/null +++ b/target/linux/imx6/patches-5.4/005-v5.7-ARM-dts-imx6qdl-gw553x-add-lsm9ds1-iio-imu-magn-supp.patch @@ -0,0 +1,73 @@ +From 62e7f0b553038e3a1a1b2b067dd1fbdacd634e37 Mon Sep 17 00:00:00 2001 +From: Robert Jones +Date: Fri, 14 Feb 2020 13:02:41 -0800 +Subject: [PATCH] ARM: dts: imx6qdl-gw553x: add lsm9ds1 iio imu/magn support + +Add one node for the accel/gyro i2c device and another for the separate +magnetometer device in the lsm9ds1. + +Signed-off-by: Robert Jones +Signed-off-by: Shawn Guo +--- + arch/arm/boot/dts/imx6qdl-gw553x.dtsi | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +diff --git a/arch/arm/boot/dts/imx6qdl-gw553x.dtsi b/arch/arm/boot/dts/imx6qdl-gw553x.dtsi +index a106689..ee85031 100644 +--- a/arch/arm/boot/dts/imx6qdl-gw553x.dtsi ++++ b/arch/arm/boot/dts/imx6qdl-gw553x.dtsi +@@ -173,6 +173,25 @@ + pinctrl-0 = <&pinctrl_i2c2>; + status = "okay"; + ++ magn@1c { ++ compatible = "st,lsm9ds1-magn"; ++ reg = <0x1c>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_mag>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <2 IRQ_TYPE_EDGE_RISING>; ++ }; ++ ++ imu@6a { ++ compatible = "st,lsm9ds1-imu"; ++ reg = <0x6a>; ++ st,drdy-int-pin = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_imu>; ++ interrupt-parent = <&gpio7>; ++ interrupts = <13 IRQ_TYPE_LEVEL_HIGH>; ++ }; ++ + ltc3676: pmic@3c { + compatible = "lltc,ltc3676"; + reg = <0x3c>; +@@ -426,6 +445,12 @@ + >; + }; + ++ pinctrl_imu: imugrp { ++ fsl,pins = < ++ MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x1b0b0 ++ >; ++ }; ++ + pinctrl_ipu1_csi0: ipu1csi0grp { + fsl,pins = < + MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x1b0b0 +@@ -449,6 +474,12 @@ + >; + }; + ++ pinctrl_mag: maggrp { ++ fsl,pins = < ++ MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x1b0b0 ++ >; ++ }; ++ + pinctrl_pcie: pciegrp { + fsl,pins = < + MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0 +-- +2.7.4 + diff --git a/target/linux/mvebu/image/Makefile b/target/linux/mvebu/image/Makefile index aeabffdca2..024e77969a 100644 --- a/target/linux/mvebu/image/Makefile +++ b/target/linux/mvebu/image/Makefile @@ -70,14 +70,21 @@ define Build/uDPU-firmware (rm -fR $@-fw; mkdir -p $@-fw) $(CP) $(BIN_DIR)/$(IMAGE_PREFIX)-initramfs.itb $@-fw/recovery.itb $(CP) $@-boot.scr $@-fw/boot.scr - (cd $(TARGET_DIR); $(TAR) -cvzf $@-fw/rootfs.tgz .) - (cd $@.boot; $(TAR) -cvzf $@-fw/boot.tgz .) - (cd $@-fw; $(TAR) -cvzf $(KDIR_TMP)/$(IMAGE_PREFIX)-firmware.tgz .) + $(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \ + $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ + -f $@-fw/rootfs.tgz -C $(TARGET_DIR) . + $(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \ + $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ + -f $@-fw/boot.tgz -C $@.boot . + $(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \ + $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ + -f $(KDIR_TMP)/$(IMAGE_PREFIX)-firmware.tgz -C $@-fw . endef define Device/Default PROFILES := Default DEVICE_DTS = $$(SOC)-$(lastword $(subst _, ,$(1))) + DEVICE_DTS_DIR := $(DTS_DIR) BOARD_NAME = $$(DEVICE_DTS) KERNEL_NAME := zImage KERNEL := kernel-bin | append-dtb | uImage none @@ -93,7 +100,7 @@ DEVICE_VARS += BOOT_SCRIPT UBOOT define Device/Default-arm64 BOOT_SCRIPT := generic-arm64 - DTS_DIR := $(DTS_DIR)/marvell + DEVICE_DTS_DIR := $(DTS_DIR)/marvell IMAGES := sdcard.img.gz IMAGE/sdcard.img.gz := boot-scr | boot-img-ext4 | sdcard-img-ext4 | gzip | append-metadata KERNEL_NAME := Image diff --git a/target/linux/mvebu/image/cortexa53.mk b/target/linux/mvebu/image/cortexa53.mk index 73bd61f22e..77f5c79972 100644 --- a/target/linux/mvebu/image/cortexa53.mk +++ b/target/linux/mvebu/image/cortexa53.mk @@ -60,11 +60,9 @@ define Device/methode_udpu DEVICE_MODEL := micro-DPU (uDPU) DEVICE_DTS := armada-3720-uDPU KERNEL_LOADADDR := 0x00080000 - KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb + KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(DEVICE_DTS).dtb KERNEL_INITRAMFS_SUFFIX := .itb - DEVICE_PACKAGES := f2fs-tools e2fsprogs fdisk ethtool kmod-usb2 kmod-usb3 \ - kmod-e100 kmod-e1000 kmod-e1000e kmod-igb kmod-ixgbevf \ - kmod-mdio-gpio kmod-switch-mvsw61xx kmod-i2c-pxa + DEVICE_PACKAGES += f2fs-tools fdisk kmod-i2c-pxa IMAGE_NAME = $$(IMAGE_PREFIX)-$$(2) IMAGES := firmware.tgz IMAGE/firmware.tgz := boot-scr | boot-img-ext4 | uDPU-firmware | append-metadata diff --git a/target/linux/mvebu/patches-4.19/530-add_armada-3820-uDPU-dts.patch b/target/linux/mvebu/patches-4.19/530-add_armada-3820-uDPU-dts.patch deleted file mode 100644 index bd4f0aef9a..0000000000 --- a/target/linux/mvebu/patches-4.19/530-add_armada-3820-uDPU-dts.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/arm64/boot/dts/marvell/Makefile -+++ b/arch/arm64/boot/dts/marvell/Makefile -@@ -2,6 +2,7 @@ - # Mvebu SoC Family - dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-db.dtb - dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin.dtb -+dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-uDPU.dtb - dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-db.dtb - dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-db.dtb - dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin.dtb diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk index 3512a1c55a..d0485c6883 100644 --- a/target/linux/ramips/image/mt7620.mk +++ b/target/linux/ramips/image/mt7620.mk @@ -611,6 +611,7 @@ define Device/netgear_ex2700 DEVICE_VENDOR := NETGEAR DEVICE_MODEL := EX2700 SUPPORTED_DEVICES += ex2700 + DEFAULT := n endef TARGET_DEVICES += netgear_ex2700 diff --git a/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader b/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader new file mode 100644 index 0000000000..3a4e756b1e --- /dev/null +++ b/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader @@ -0,0 +1,19 @@ +#!/bin/sh + +upgrade_bootloader() { + local diskdev + + . /lib/upgrade/common.sh + + if [ ! -f /boot/grub/upgraded ] && export_bootdevice && export_partdevice diskdev 0; then + echo "(hd0) /dev/$diskdev" > /tmp/device.map + /usr/sbin/grub-bios-setup \ + -m "/tmp/device.map" \ + -d "/boot/grub" \ + -r "hd0,msdos1" \ + "/dev/$diskdev" \ + && touch /boot/grub/upgraded + fi +} + +[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main upgrade_bootloader diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh index 3b6c25877f..53c751861c 100644 --- a/target/linux/x86/base-files/lib/upgrade/platform.sh +++ b/target/linux/x86/base-files/lib/upgrade/platform.sh @@ -1,3 +1,5 @@ +RAMFS_COPY_BIN='grub-bios-setup' + platform_check_image() { local diskdev partdev diff [ "$#" -gt 1 ] && return 1 @@ -44,6 +46,27 @@ platform_copy_config() { fi } +platform_do_bootloader_upgrade() { + local bootpart + local diskdev="$1" + + if export_partdevice bootpart 1; then + mkdir -p /tmp/boot + mount -o rw,noatime "/dev/$bootpart" /tmp/boot + echo "(hd0) /dev/$diskdev" > /tmp/device.map + + echo "Upgrading bootloader on /dev/$diskdev..." + grub-bios-setup \ + -m "/tmp/device.map" \ + -d "/tmp/boot/boot/grub" \ + -r "hd0,msdos1" \ + "/dev/$diskdev" \ + && touch /boot/grub/upgraded + + umount /tmp/boot + fi +} + platform_do_upgrade() { local diskdev partdev diff @@ -92,4 +115,6 @@ platform_do_upgrade() { #copy partition uuid echo "Writing new UUID to /dev/$diskdev..." get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync + + platform_do_bootloader_upgrade "$diskdev" } diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index eb0db417a3..373f2396b7 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -60,16 +60,17 @@ ifneq ($(CONFIG_GRUB_IMAGES),) 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)/grub2/core.img \ + -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)/grub2/ + $(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' \ @@ -79,6 +80,7 @@ ifneq ($(CONFIG_GRUB_IMAGES),) -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 \ @@ -86,13 +88,14 @@ ifneq ($(CONFIG_GRUB_IMAGES),) 256 grub-bios-setup \ --device-map="$(KDIR)/grub2/device.map" \ - -d "$(KDIR)/grub2" \ + -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 \ diff --git a/tools/Makefile b/tools/Makefile index 071dc18d2a..f7b5bbe765 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -22,7 +22,7 @@ ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_PACKAGE_b43legacy-firmwar endif tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat -tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib +tools-y += m4 libtool autoconf automake flex bison pkgconf mklibs zlib tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage tools-y += firmware-utils patch-image quilt padjffs2 tools-y += mm-macros missing-macros cmake bc findutils gengetopt patchelf @@ -50,7 +50,7 @@ $(curdir)/squashfs/compile := $(curdir)/lzma-old/compile $(curdir)/squashfskit4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile $(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile $(curdir)/autoconf/compile := $(curdir)/m4/compile -$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkg-config/compile $(curdir)/xz/compile +$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkgconf/compile $(curdir)/xz/compile $(curdir)/gmp/compile := $(curdir)/libtool/compile $(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile $(curdir)/mpfr/compile := $(curdir)/gmp/compile @@ -71,7 +71,7 @@ $(curdir)/findutils/compile := $(curdir)/bison/compile $(curdir)/gengetopt/compile := $(curdir)/libtool/compile $(curdir)/patchelf/compile := $(curdir)/libtool/compile $(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile -$(curdir)/libressl/compile := $(curdir)/pkg-config/compile +$(curdir)/libressl/compile := $(curdir)/pkgconf/compile $(curdir)/mkimage/compile += $(curdir)/libressl/compile $(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile $(curdir)/cmake/compile += $(curdir)/libressl/compile @@ -140,7 +140,7 @@ $(STAGING_DIR_HOST)/.prepared: $(TMP_DIR)/.build mkdir -p $(BUILD_DIR_HOST)/stamp $(STAGING_DIR_HOST)/include/sys $(INSTALL_DATA) $(TOPDIR)/tools/include/*.h $(STAGING_DIR_HOST)/include/ $(INSTALL_DATA) $(TOPDIR)/tools/include/sys/*.h $(STAGING_DIR_HOST)/include/sys/ - ln -sf lib $(STAGING_DIR_HOST)/lib64 + ln -snf lib $(STAGING_DIR_HOST)/lib64 touch $@ endif diff --git a/tools/firmware-utils/src/mkrasimage.c b/tools/firmware-utils/src/mkrasimage.c index cff3a533d1..d8cec527fb 100644 --- a/tools/firmware-utils/src/mkrasimage.c +++ b/tools/firmware-utils/src/mkrasimage.c @@ -317,6 +317,16 @@ int build_image() map_file(&kernel); map_file(&rootfs); + /* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped + * for the device, we need to pad rootfs partition to this size. To perform further calculations, we + * decide the size of this part here. In case the rootfs we want to integrate in our image is larger, + * take it's size, otherwise the supplied size. + * + * Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images + * with a to large rootfs are accepted or not. + */ + rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size; + /* * Allocate memory and copy input rootfs for temporary output rootfs. * This is important as we have to generate the rootfs checksum over the @@ -451,14 +461,5 @@ int main(int argc, char *argv[]) if (ret) usage(EXIT_FAILURE); - /* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped - * for the device, we need to pad rootfs partition to this size. To perform further calculations, we - * decide the size of this part here. In case the rootfs we want to integrate in our image is larger, - * take it's size, otherwise the supplied size. - * - * Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images - * with a to large rootfs are accepted or not. - */ - rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size; return build_image(); } diff --git a/tools/pkg-config/files/pkg-config b/tools/pkg-config/files/pkg-config deleted file mode 100755 index 82cc74ffcb..0000000000 --- a/tools/pkg-config/files/pkg-config +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -pkg-config.real --define-variable=prefix=${STAGING_PREFIX} --define-variable=exec_prefix=${STAGING_PREFIX} --define-variable=bindir=${STAGING_PREFIX}/bin $@ diff --git a/tools/pkg-config/Makefile b/tools/pkgconf/Makefile similarity index 54% rename from tools/pkg-config/Makefile rename to tools/pkgconf/Makefile index 17a8737be1..cefee1edf0 100644 --- a/tools/pkg-config/Makefile +++ b/tools/pkgconf/Makefile @@ -1,4 +1,4 @@ -# +# # Copyright (C) 2006-2016 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. @@ -6,12 +6,12 @@ # include $(TOPDIR)/rules.mk -PKG_NAME:=pkg-config -PKG_VERSION:=0.29.2 +PKG_NAME:=pkgconf +PKG_VERSION:=1.6.3 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://pkgconfig.freedesktop.org/releases/ -PKG_HASH:=6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=https://distfiles.dereferenced.org/pkgconf +PKG_HASH:=61f0b31b0d5ea0e862b454a80c170f57bad47879c0c42bd8de89200ff62ea210 HOST_BUILD_PARALLEL:=1 @@ -19,15 +19,9 @@ include $(INCLUDE_DIR)/host-build.mk unexport PKG_CONFIG -HOST_CONFIGURE_ARGS += --with-internal-glib - -ifeq ($(HOST_OS),Darwin) -HOST_LDFLAGS += -framework CoreFoundation -framework Carbon -endif - define Host/Install $(MAKE) -C $(HOST_BUILD_DIR) install - mv $(STAGING_DIR_HOST)/bin/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config.real + mv $(STAGING_DIR_HOST)/bin/pkgconf $(STAGING_DIR_HOST)/bin/pkg-config.real $(INSTALL_BIN) ./files/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config endef diff --git a/tools/pkgconf/files/pkg-config b/tools/pkgconf/files/pkg-config new file mode 100755 index 0000000000..fa1faccc6c --- /dev/null +++ b/tools/pkgconf/files/pkg-config @@ -0,0 +1,6 @@ +#!/bin/sh + +pkg-config.real \ +--define-variable=prefix="${STAGING_PREFIX}" \ +--define-variable=exec_prefix="${STAGING_PREFIX}" \ +--define-variable=bindir="${STAGING_PREFIX}/bin" "$@" diff --git a/tools/pkgconf/patches/0001-cli-remove-version-to-modversion-remapping.patch b/tools/pkgconf/patches/0001-cli-remove-version-to-modversion-remapping.patch new file mode 100644 index 0000000000..b2c538d24e --- /dev/null +++ b/tools/pkgconf/patches/0001-cli-remove-version-to-modversion-remapping.patch @@ -0,0 +1,36 @@ +From 62bbd3b664d4b03011a4b382ed20353a91c30406 Mon Sep 17 00:00:00 2001 +From: Ariadne Conill +Date: Tue, 21 Jan 2020 10:32:36 -0600 +Subject: [PATCH] cli: remove --version to --modversion remapping + +This has been a source of frequent complaints, so we drop it. +Resolves: https://todo.sr.ht/~kaniini/pkgconf/6 +--- + cli/main.c | 14 ++------------ + 1 file changed, 2 insertions(+), 12 deletions(-) + +diff --git a/cli/main.c b/cli/main.c +index 563ec8f0cfcd..fc698a4f9191 100644 +--- a/cli/main.c ++++ b/cli/main.c +@@ -1005,18 +1005,8 @@ main(int argc, char *argv[]) + + if ((want_flags & PKG_VERSION) == PKG_VERSION) + { +- if (argc > 2) +- { +- fprintf(stderr, "%s: --version specified with other options or module names, assuming --modversion.\n", argv[0]); +- +- want_flags &= ~PKG_VERSION; +- want_flags |= PKG_MODVERSION; +- } +- else +- { +- version(); +- return EXIT_SUCCESS; +- } ++ version(); ++ return EXIT_SUCCESS; + } + + if ((want_flags & PKG_HELP) == PKG_HELP)