Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
d6b6dbf9e1
@ -17,6 +17,20 @@ menuconfig DEVEL
|
||||
Store built firmware images and filesystem images in this directory.
|
||||
If not set, uses './bin/$(BOARD)'
|
||||
|
||||
config DOWNLOAD_TOOL_CUSTOM
|
||||
string "Use custom download tool" if DEVEL
|
||||
default ""
|
||||
help
|
||||
Use and force custom download tool instead of relying on autoselection
|
||||
between curl if available and wget as a fallback.
|
||||
|
||||
download.pl supports 3 tools officially aria2c, curl and wget.
|
||||
If one of the tool is used in this config, download.pl will use the
|
||||
default args to make use of them.
|
||||
|
||||
If the provided string is different than aria2c, curl or wget, the command
|
||||
is used as is and the download url will be appended at the end of such command.
|
||||
|
||||
config DOWNLOAD_FOLDER
|
||||
string "Download folder" if DEVEL
|
||||
default ""
|
||||
|
@ -20,6 +20,7 @@ DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
|
||||
|
||||
# Export options for download.pl
|
||||
export DOWNLOAD_CHECK_CERTIFICATE:=$(CONFIG_DOWNLOAD_CHECK_CERTIFICATE)
|
||||
export DOWNLOAD_TOOL_CUSTOM:=$(CONFIG_DOWNLOAD_TOOL_CUSTOM)
|
||||
|
||||
define dl_method_git
|
||||
$(if $(filter https://github.com/% git://github.com/%,$(1)),github_archive,git)
|
||||
|
@ -218,6 +218,11 @@ define Build/copy-file
|
||||
cat "$(1)" > "$@"
|
||||
endef
|
||||
|
||||
define Build/edimax-header
|
||||
$(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1)
|
||||
@mv $@.new $@
|
||||
endef
|
||||
|
||||
define Build/elecom-product-header
|
||||
$(eval product=$(word 1,$(1)))
|
||||
$(eval fw=$(if $(word 2,$(1)),$(word 2,$(1)),$@))
|
||||
|
@ -125,17 +125,17 @@ ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL
|
||||
KERNELRELEASE=$(LINUX_VERSION)
|
||||
endif
|
||||
|
||||
ifneq ($(HOST_OS),Linux)
|
||||
KERNEL_MAKE_FLAGS += CONFIG_STACK_VALIDATION=
|
||||
export SKIP_STACK_VALIDATION:=1
|
||||
endif
|
||||
|
||||
KERNEL_MAKEOPTS := -C $(LINUX_DIR) $(KERNEL_MAKE_FLAGS)
|
||||
|
||||
ifdef CONFIG_USE_SPARSE
|
||||
KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse
|
||||
endif
|
||||
|
||||
ifneq ($(HOST_OS),Linux)
|
||||
KERNEL_MAKEOPTS += CONFIG_STACK_VALIDATION=
|
||||
export SKIP_STACK_VALIDATION:=1
|
||||
endif
|
||||
|
||||
PKG_EXTMOD_SUBDIRS ?= .
|
||||
|
||||
PKG_SYMVERS_DIR = $(KERNEL_BUILD_DIR)/symvers
|
||||
|
@ -8,6 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=arm-trusted-firmware-sunxi
|
||||
PKG_CPE_ID:=cpe:/o:arm:arm_trusted_firmware
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
@ -17,16 +17,13 @@ linksys,e8450-ubi)
|
||||
ubootenv_add_uci_config "/dev/ubi0_1" "0x0" "0x1f000" "0x1f000" "1"
|
||||
;;
|
||||
bananapi,bpi-r64)
|
||||
. /lib/upgrade/common.sh
|
||||
export_bootdevice
|
||||
export_partdevice rootdev 0
|
||||
case "$rootdev" in
|
||||
mmc*)
|
||||
case "$(cmdline_get_var root)" in
|
||||
/dev/mmc*)
|
||||
local envdev=$(find_mmc_part "ubootenv" $rootdev)
|
||||
ubootenv_add_uci_config "$envdev" "0x0" "0x80000" "0x80000" "1"
|
||||
ubootenv_add_uci_config "$envdev" "0x80000" "0x80000" "0x80000" "1"
|
||||
;;
|
||||
*)
|
||||
/dev/ubi*)
|
||||
ubootenv_add_uci_config "/dev/ubi0_0" "0x0" "0x1f000" "0x1f000" "1"
|
||||
ubootenv_add_uci_config "/dev/ubi0_1" "0x0" "0x1f000" "0x1f000" "1"
|
||||
;;
|
||||
|
@ -41,6 +41,11 @@ define U-Boot/fritz4040
|
||||
BUILD_DEVICES:=avm_fritzbox-4040
|
||||
endef
|
||||
|
||||
define U-Boot/fritz7520
|
||||
NAME:=FritzBox 7520
|
||||
BUILD_DEVICES:=avm_fritzbox-7530
|
||||
endef
|
||||
|
||||
define U-Boot/fritz7530
|
||||
NAME:=FritzBox 7530
|
||||
BUILD_DEVICES:=avm_fritzbox-7530
|
||||
@ -72,6 +77,6 @@ define Package/u-boot/install
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/upload-to-f4040.sh $(1)/
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := fritz1200 fritz3000 fritz4040 fritz7530
|
||||
UBOOT_TARGETS := fritz1200 fritz3000 fritz4040 fritz7520 fritz7530
|
||||
|
||||
$(eval $(call BuildPackage/U-Boot))
|
||||
|
@ -649,6 +649,7 @@ define KernelPackage/fs-ntfs3
|
||||
KCONFIG:= CONFIG_NTFS3_FS CONFIG_NTFS3_FS_POSIX_ACL=y
|
||||
FILES:=$(LINUX_DIR)/fs/ntfs3/ntfs3.ko
|
||||
$(call AddDepends/nls)
|
||||
DEPENDS+=@!LINUX_5_10
|
||||
AUTOLOAD:=$(call AutoLoad,80,ntfs3)
|
||||
endef
|
||||
|
||||
|
@ -25,14 +25,17 @@ endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-core))
|
||||
|
||||
define AddDepends/iio
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS+=+kmod-iio-core $(1)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-kfifo-buf
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Industrial I/O buffering based on kfifo
|
||||
DEPENDS:=+kmod-iio-core
|
||||
KCONFIG:=CONFIG_IIO_KFIFO_BUF
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/buffer/kfifo_buf.ko
|
||||
AUTOLOAD:=$(call AutoLoad,55,kfifo_buf)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-kfifo-buf/description
|
||||
@ -44,12 +47,12 @@ $(eval $(call KernelPackage,iio-kfifo-buf))
|
||||
|
||||
|
||||
define KernelPackage/industrialio-triggered-buffer
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Provides helper functions for setting up triggered buffers.
|
||||
DEPENDS:=+kmod-iio-core +kmod-iio-kfifo-buf
|
||||
DEPENDS:=+kmod-iio-kfifo-buf
|
||||
KCONFIG:=CONFIG_IIO_TRIGGERED_BUFFER
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/buffer/industrialio-triggered-buffer.ko
|
||||
AUTOLOAD:=$(call AutoLoad,55,industrialio-triggered-buffer)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/industrialio-triggered-buffer/description
|
||||
@ -60,14 +63,14 @@ $(eval $(call KernelPackage,industrialio-triggered-buffer))
|
||||
|
||||
|
||||
define KernelPackage/iio-ad799x
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-i2c-core +kmod-industrialio-triggered-buffer
|
||||
TITLE:=Analog Devices AD799x ADC driver
|
||||
KCONFIG:= \
|
||||
CONFIG_AD799X_RING_BUFFER=y \
|
||||
CONFIG_AD799X
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/adc/ad799x.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,ad799x)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-ad799x/description
|
||||
@ -79,12 +82,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-ad799x))
|
||||
|
||||
define KernelPackage/iio-ads1015
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-regmap-i2c +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c +kmod-industrialio-triggered-buffer
|
||||
TITLE:=Texas Instruments ADS1015 ADC driver
|
||||
KCONFIG:= CONFIG_TI_ADS1015
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/adc/ti-ads1015.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,ti-ads1015)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-ads1015/description
|
||||
@ -94,14 +97,14 @@ endef
|
||||
$(eval $(call KernelPackage,iio-ads1015))
|
||||
|
||||
define KernelPackage/iio-hmc5843
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-regmap-i2c +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-i2c-core +kmod-regmap-i2c +kmod-industrialio-triggered-buffer
|
||||
TITLE:=Honeywell HMC58x3 Magnetometer
|
||||
KCONFIG:= CONFIG_SENSORS_HMC5843_I2C
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/iio/magnetometer/hmc5843_i2c.ko \
|
||||
$(LINUX_DIR)/drivers/iio/magnetometer/hmc5843_core.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,hmc5843)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-hmc5843/description
|
||||
@ -111,12 +114,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-hmc5843))
|
||||
|
||||
define KernelPackage/iio-bh1750
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core
|
||||
DEPENDS:=+kmod-i2c-core
|
||||
TITLE:=ROHM BH1750 ambient light sensor
|
||||
KCONFIG:= CONFIG_BH1750
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/light/bh1750.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,bh1750)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-bh1750/description
|
||||
ROHM BH1750 ambient light sensor (i2c bus)
|
||||
@ -124,12 +127,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-bh1750))
|
||||
|
||||
define KernelPackage/iio-am2315
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-i2c-core +kmod-industrialio-triggered-buffer
|
||||
TITLE:=Asong AM2315 humidity/temperature sensor
|
||||
KCONFIG:= CONFIG_AM2315
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/humidity/am2315.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,am2315)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-am2315/description
|
||||
Aosong AM2315 humidity/temperature sensor (I2C bus)
|
||||
@ -137,13 +140,13 @@ endef
|
||||
$(eval $(call KernelPackage,iio-am2315))
|
||||
|
||||
define KernelPackage/iio-mxs-lradc
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=@TARGET_mxs +kmod-iio-core +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=@TARGET_mxs +kmod-industrialio-triggered-buffer
|
||||
TITLE:=Freescale i.MX23/i.MX28 LRADC ADC driver
|
||||
KCONFIG:= \
|
||||
CONFIG_MXS_LRADC_ADC
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/adc/mxs-lradc-adc.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,mxs-lradc-adc)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-mxs-lradc/description
|
||||
@ -153,13 +156,13 @@ endef
|
||||
$(eval $(call KernelPackage,iio-mxs-lradc))
|
||||
|
||||
define KernelPackage/iio-dht11
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-core @GPIO_SUPPORT @USES_DEVICETREE
|
||||
DEPENDS:=@GPIO_SUPPORT @USES_DEVICETREE
|
||||
TITLE:=DHT11 (and compatible) humidity and temperature sensors
|
||||
KCONFIG:= \
|
||||
CONFIG_DHT11
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/humidity/dht11.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,dht11)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-dht11/description
|
||||
@ -172,11 +175,11 @@ $(eval $(call KernelPackage,iio-dht11))
|
||||
|
||||
|
||||
define KernelPackage/iio-bme680
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BME680 gas/humidity/pressure/temperature sensor
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core
|
||||
DEPENDS:=+kmod-regmap-core
|
||||
KCONFIG:=CONFIG_BME680
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/chemical/bme680_core.ko
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-bme680/description
|
||||
@ -187,12 +190,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-bme680))
|
||||
|
||||
define KernelPackage/iio-bme680-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BME680 gas/humidity/pressure/temperature sensor (I2C)
|
||||
DEPENDS:=+kmod-iio-bme680 +kmod-regmap-i2c
|
||||
KCONFIG:=CONFIG_BME680_I2C
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/chemical/bme680_i2c.ko
|
||||
AUTOLOAD:=$(call AutoProbe,bme680-i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-bme680-i2c/description
|
||||
This driver adds support for Bosch Sensortec's BME680 connected via I2C.
|
||||
@ -201,12 +204,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-bme680-i2c))
|
||||
|
||||
define KernelPackage/iio-bme680-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BME680 gas/humidity/pressure/temperature sensor (SPI)
|
||||
DEPENDS:=+kmod-iio-bme680 +kmod-regmap-spi
|
||||
KCONFIG:=CONFIG_BME680_SPI
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/chemical/bme680_spi.ko
|
||||
AUTOLOAD:=$(call AutoProbe,bme680-spi)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-bme680-spi/description
|
||||
This driver adds support for Bosch Sensortec's BME680 connected via SPI.
|
||||
@ -216,11 +219,11 @@ $(eval $(call KernelPackage,iio-bme680-spi))
|
||||
|
||||
|
||||
define KernelPackage/iio-bmp280
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BMP180/BMP280/BME280 pressure/temperatur sensor
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core
|
||||
DEPENDS:=+kmod-regmap-core
|
||||
KCONFIG:=CONFIG_BMP280
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/pressure/bmp280.ko
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-bmp280/description
|
||||
@ -233,12 +236,12 @@ $(eval $(call KernelPackage,iio-bmp280))
|
||||
|
||||
|
||||
define KernelPackage/iio-bmp280-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BMP180/BMP280/BME280 pressure/temperatur sensor (I2C)
|
||||
DEPENDS:=+kmod-iio-bmp280 +kmod-i2c-core +kmod-regmap-i2c
|
||||
KCONFIG:=CONFIG_BMP280_I2C
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/pressure/bmp280-i2c.ko
|
||||
AUTOLOAD:=$(call AutoProbe,bmp280-i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-bmp280-i2c/description
|
||||
This driver adds support for Bosch Sensortec's digital pressure and
|
||||
@ -249,12 +252,12 @@ $(eval $(call KernelPackage,iio-bmp280-i2c))
|
||||
|
||||
|
||||
define KernelPackage/iio-bmp280-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=BMP180/BMP280/BME280 pressure/temperatur sensor (SPI)
|
||||
DEPENDS:=+kmod-iio-bmp280 +kmod-spi-bitbang
|
||||
KCONFIG:=CONFIG_BMP280_SPI
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/pressure/bmp280-spi.ko
|
||||
AUTOLOAD:=$(call AutoProbe,bmp280-spi)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
define KernelPackage/iio-bmp280-spi/description
|
||||
This driver adds support for Bosch Sensortec's digital pressure and
|
||||
@ -264,8 +267,7 @@ endef
|
||||
$(eval $(call KernelPackage,iio-bmp280-spi))
|
||||
|
||||
define KernelPackage/iio-htu21
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core
|
||||
DEPENDS:=+kmod-i2c-core
|
||||
TITLE:=HTU21 humidity & temperature sensor
|
||||
KCONFIG:= \
|
||||
CONFIG_HTU21 \
|
||||
@ -274,6 +276,7 @@ define KernelPackage/iio-htu21
|
||||
$(LINUX_DIR)/drivers/iio/humidity/htu21.ko \
|
||||
$(LINUX_DIR)/drivers/iio/common/ms_sensors/ms_sensors_i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,htu21)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-htu21/description
|
||||
@ -287,13 +290,13 @@ $(eval $(call KernelPackage,iio-htu21))
|
||||
|
||||
|
||||
define KernelPackage/iio-ccs811
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-i2c-core +kmod-industrialio-triggered-buffer
|
||||
TITLE:=AMS CCS811 VOC sensor
|
||||
KCONFIG:= \
|
||||
CONFIG_CCS811
|
||||
FILES:= $(LINUX_DIR)/drivers/iio/chemical/ccs811.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,ccs811)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-ccs811/description
|
||||
@ -304,12 +307,12 @@ $(eval $(call KernelPackage,iio-ccs811))
|
||||
|
||||
|
||||
define KernelPackage/iio-si7020
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core
|
||||
DEPENDS:=+kmod-i2c-core
|
||||
TITLE:=Silicon Labs Si7020 sensor
|
||||
KCONFIG:= CONFIG_SI7020
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/humidity/si7020.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,si7020)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-si7020/description
|
||||
@ -322,15 +325,15 @@ $(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 +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-regmap-core +kmod-industrialio-triggered-buffer
|
||||
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
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_accel/description
|
||||
@ -344,7 +347,6 @@ $(eval $(call KernelPackage,iio-st_accel))
|
||||
|
||||
|
||||
define KernelPackage/iio-st_accel-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=STMicroelectronics accelerometer 3-Axis Driver (I2C)
|
||||
DEPENDS:=+kmod-iio-st_accel +kmod-i2c-core +kmod-regmap-i2c
|
||||
KCONFIG:= CONFIG_IIO_ST_ACCEL_I2C_3AXIS
|
||||
@ -352,6 +354,7 @@ define KernelPackage/iio-st_accel-i2c
|
||||
$(LINUX_DIR)/drivers/iio/accel/st_accel_i2c.ko \
|
||||
$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,st_accel_i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_accel-i2c/description
|
||||
@ -362,7 +365,6 @@ $(eval $(call KernelPackage,iio-st_accel-i2c))
|
||||
|
||||
|
||||
define KernelPackage/iio-st_accel-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=STMicroelectronics accelerometer 3-Axis Driver (SPI)
|
||||
DEPENDS:=+kmod-iio-st_accel +kmod-regmap-spi
|
||||
KCONFIG:= CONFIG_IIO_ST_ACCEL_SPI_3AXIS
|
||||
@ -370,6 +372,7 @@ define KernelPackage/iio-st_accel-spi
|
||||
$(LINUX_DIR)/drivers/iio/accel/st_accel_spi.ko \
|
||||
$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_spi.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,st_accel_spi)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_accel-spi/description
|
||||
@ -380,12 +383,12 @@ $(eval $(call KernelPackage,iio-st_accel-spi))
|
||||
|
||||
|
||||
define KernelPackage/iio-lsm6dsx
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-core +kmod-iio-kfifo-buf +kmod-regmap-core
|
||||
DEPENDS:=+kmod-iio-kfifo-buf +kmod-regmap-core
|
||||
TITLE:=ST LSM6DSx driver for IMU MEMS sensors
|
||||
KCONFIG:=CONFIG_IIO_ST_LSM6DSX
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.ko
|
||||
AUTOLOAD:=$(call AutoProbe,st_lsm6dsx)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-lsm6dsx/description
|
||||
@ -396,12 +399,12 @@ $(eval $(call KernelPackage,iio-lsm6dsx))
|
||||
|
||||
|
||||
define KernelPackage/iio-lsm6dsx-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-lsm6dsx +kmod-i2c-core +kmod-regmap-i2c
|
||||
TITLE:=ST LSM6DSx driver for IMU MEMS sensors (I2C)
|
||||
KCONFIG:=CONFIG_IIO_ST_LSM6DSX
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.ko
|
||||
AUTOLOAD:=$(call AutoProbe,st_lsm6dsx-i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-lsm6dsx-i2c/description
|
||||
@ -412,12 +415,12 @@ $(eval $(call KernelPackage,iio-lsm6dsx-i2c))
|
||||
|
||||
|
||||
define KernelPackage/iio-lsm6dsx-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-lsm6dsx +kmod-regmap-spi
|
||||
TITLE:=ST LSM6DSx driver for IMU MEMS sensors (SPI)
|
||||
KCONFIG:=CONFIG_IIO_ST_LSM6DSX
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.ko
|
||||
AUTOLOAD:=$(call AutoProbe,st_lsm6dsx-spi)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-lsm6dsx-spi/description
|
||||
@ -428,8 +431,7 @@ $(eval $(call KernelPackage,iio-lsm6dsx-spi))
|
||||
|
||||
|
||||
define KernelPackage/iio-sps30
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer +kmod-lib-crc8
|
||||
DEPENDS:=+kmod-i2c-core +kmod-industrialio-triggered-buffer +kmod-lib-crc8
|
||||
TITLE:=Sensirion SPS30 particulate matter sensor
|
||||
KCONFIG:= \
|
||||
CONFIG_SPS30 \
|
||||
@ -438,6 +440,7 @@ define KernelPackage/iio-sps30
|
||||
$(LINUX_DIR)/drivers/iio/chemical/sps30.ko \
|
||||
$(LINUX_DIR)/drivers/iio/chemical/sps30_i2c.ko@ge5.14
|
||||
AUTOLOAD:=$(call AutoProbe,sps30 sps30_i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-sps30/description
|
||||
@ -448,12 +451,12 @@ $(eval $(call KernelPackage,iio-sps30))
|
||||
|
||||
|
||||
define KernelPackage/iio-tsl4531
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core
|
||||
DEPENDS:=+kmod-i2c-core
|
||||
TITLE:=TAOS TSL4531 ambient light sensor
|
||||
KCONFIG:= CONFIG_TSL4531
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/light/tsl4531.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,tsl4531)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-tsl4531/description
|
||||
@ -466,12 +469,12 @@ $(eval $(call KernelPackage,iio-tsl4531))
|
||||
|
||||
|
||||
define KernelPackage/iio-fxas21002c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Freescale FXAS21002C 3-axis gyro driver
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core +kmod-industrialio-triggered-buffer
|
||||
DEPENDS:=+kmod-regmap-core +kmod-industrialio-triggered-buffer
|
||||
KCONFIG:= CONFIG_FXAS21002C
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/gyro/fxas21002c_core.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxas21002c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxas21002c/description
|
||||
@ -482,12 +485,12 @@ $(eval $(call KernelPackage,iio-fxas21002c))
|
||||
|
||||
|
||||
define KernelPackage/iio-fxas21002c-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Freescale FXAS21002C 3-axis gyro driver (I2C)
|
||||
DEPENDS:=+kmod-iio-fxas21002c +kmod-i2c-core +kmod-regmap-i2c
|
||||
KCONFIG:= CONFIG_FXAS21002C_I2C
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/gyro/fxas21002c_i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxas21002c_i2c)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxas21002c-i2c/description
|
||||
@ -499,12 +502,12 @@ endef
|
||||
$(eval $(call KernelPackage,iio-fxas21002c-i2c))
|
||||
|
||||
define KernelPackage/iio-fxas21002c-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-fxas21002c +kmod-regmap-spi
|
||||
TITLE:=Freescale FXAS21002C 3-axis gyro driver (SPI)
|
||||
KCONFIG:= CONFIG_FXAS21002C_SPI
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/gyro/fxas21002c_spi.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxas21002c_spi)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxas21002c-spi/description
|
||||
@ -516,12 +519,12 @@ $(eval $(call KernelPackage,iio-fxas21002c-spi))
|
||||
|
||||
|
||||
define KernelPackage/iio-fxos8700
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Freescale FXOS8700 3-axis accelerometer driver
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core
|
||||
DEPENDS:=+kmod-regmap-core
|
||||
KCONFIG:= CONFIG_FXOS8700
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_core.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxos8700)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700/description
|
||||
@ -532,12 +535,12 @@ $(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)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700-i2c/description
|
||||
@ -549,12 +552,12 @@ 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)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700-spi/description
|
||||
|
@ -15,9 +15,10 @@ define KernelPackage/mmc-spi
|
||||
CONFIG_SPI=y \
|
||||
CONFIG_SPI_MASTER=y
|
||||
FILES:=\
|
||||
$(if $(CONFIG_OF),$(LINUX_DIR)/drivers/mmc/host/of_mmc_spi.ko) \
|
||||
$(if $(CONFIG_OF),$(LINUX_DIR)/drivers/mmc/host/of_mmc_spi.ko@lt5.13) \
|
||||
$(LINUX_DIR)/drivers/mmc/host/of_mmc_spi.ko@ge5.13 \
|
||||
$(LINUX_DIR)/drivers/mmc/host/mmc_spi.ko
|
||||
AUTOLOAD:=$(call AutoProbe,$(if $(CONFIG_OF),of_mmc_spi) mmc_spi)
|
||||
AUTOLOAD:=$(call AutoProbe,$(if $(CONFIG_OF),of_mmc_spi@lt5.13) of_mmc_spi@ge5.13 mmc_spi)
|
||||
endef
|
||||
|
||||
define KernelPackage/mmc-spi/description
|
||||
|
@ -8,6 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=libnftnl
|
||||
PKG_CPE_ID:=cpe:/a:netfilter:libnftnl
|
||||
PKG_VERSION:=1.2.3
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ncurses
|
||||
PKG_CPE_ID:=cpe:/a:gnu:ncurses
|
||||
PKG_VERSION:=6.3
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=wireless-tools
|
||||
PKG_CPE_ID:=cpe:/a:wireless_tools_project:wireless_tools
|
||||
PKG_VERSION:=29
|
||||
PKG_MINOR:=
|
||||
PKG_RELEASE:=6
|
||||
|
@ -25,6 +25,8 @@ my @mirrors;
|
||||
my $ok;
|
||||
|
||||
my $check_certificate = $ENV{DOWNLOAD_CHECK_CERTIFICATE} eq "y";
|
||||
my $custom_tool = $ENV{DOWNLOAD_TOOL_CUSTOM};
|
||||
my $download_tool;
|
||||
|
||||
$url_filename or $url_filename = $filename;
|
||||
|
||||
@ -85,35 +87,54 @@ sub tool_present {
|
||||
return $present
|
||||
}
|
||||
|
||||
sub select_tool {
|
||||
$custom_tool =~ tr/"//d;
|
||||
if ($custom_tool) {
|
||||
return $custom_tool;
|
||||
}
|
||||
|
||||
# Try to use curl if available
|
||||
if (tool_present("curl", "curl")) {
|
||||
return "curl";
|
||||
}
|
||||
|
||||
# No tool found, fallback to wget
|
||||
return "wget";
|
||||
}
|
||||
|
||||
sub download_cmd {
|
||||
my $url = shift;
|
||||
my $filename = shift;
|
||||
my $additional_mirrors = join(" ", map "$_/$filename", @_);
|
||||
|
||||
my @chArray = ('a'..'z', 'A'..'Z', 0..9);
|
||||
my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9;
|
||||
if ($download_tool eq "curl") {
|
||||
return (qw(curl -f --connect-timeout 20 --retry 5 --location),
|
||||
$check_certificate ? () : '--insecure',
|
||||
shellwords($ENV{CURL_OPTIONS} || ''),
|
||||
$url);
|
||||
} elsif ($download_tool eq "wget") {
|
||||
return (qw(wget --tries=5 --timeout=20 --output-document=-),
|
||||
$check_certificate ? () : '--no-check-certificate',
|
||||
shellwords($ENV{WGET_OPTIONS} || ''),
|
||||
$url);
|
||||
} elsif ($download_tool eq "aria2c") {
|
||||
my $additional_mirrors = join(" ", map "$_/$filename", @_);
|
||||
my @chArray = ('a'..'z', 'A'..'Z', 0..9);
|
||||
my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9;
|
||||
|
||||
if (tool_present('aria2c', 'aria2')) {
|
||||
@mirrors=();
|
||||
|
||||
return join(" ", "[ -d $ENV{'TMPDIR'}/aria2c ] || mkdir $ENV{'TMPDIR'}/aria2c;",
|
||||
"touch $ENV{'TMPDIR'}/aria2c/${rfn}_spp;",
|
||||
qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $url, $additional_mirrors,
|
||||
$check_certificate ? () : '--check-certificate=false',
|
||||
"--server-stat-of=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
||||
"--server-stat-if=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
||||
"--daemon=false --no-conf", shellwords($ENV{ARIA2C_OPTIONS} || ''),
|
||||
"-d $ENV{'TMPDIR'}/aria2c -o $rfn;",
|
||||
"cat $ENV{'TMPDIR'}/aria2c/$rfn;",
|
||||
"rm $ENV{'TMPDIR'}/aria2c/$rfn $ENV{'TMPDIR'}/aria2c/${rfn}_spp");
|
||||
} elsif (tool_present('curl', 'curl')) {
|
||||
return (qw(curl -f --connect-timeout 20 --retry 5 --location),
|
||||
$check_certificate ? () : '--insecure',
|
||||
shellwords($ENV{CURL_OPTIONS} || ''),
|
||||
$url);
|
||||
} else {
|
||||
return (qw(wget --tries=5 --timeout=20 --output-document=-),
|
||||
$check_certificate ? () : '--no-check-certificate',
|
||||
shellwords($ENV{WGET_OPTIONS} || ''),
|
||||
$url);
|
||||
return join(" ", $download_tool, $url);
|
||||
}
|
||||
}
|
||||
|
||||
@ -354,6 +375,8 @@ if (-f "$target/$filename") {
|
||||
};
|
||||
}
|
||||
|
||||
$download_tool = select_tool();
|
||||
|
||||
while (!-f "$target/$filename") {
|
||||
my $mirror = shift @mirrors;
|
||||
$mirror or die "No more mirrors to try - giving up.\n";
|
||||
|
@ -126,6 +126,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
|
||||
CONFIG_MTD_PARSER_CYBERTAN=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPLIT_ELF_FW=y
|
||||
|
@ -123,6 +123,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
|
||||
CONFIG_MTD_PARSER_CYBERTAN=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPLIT_ELF_FW=y
|
||||
|
@ -44,11 +44,34 @@
|
||||
label = "art";
|
||||
reg = <0xff0000 0x010000>;
|
||||
read-only;
|
||||
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
cal_art_1000: cal@1000 {
|
||||
reg = <0x1000 0x440>;
|
||||
};
|
||||
|
||||
macaddr_art_1002: macaddr@1002 {
|
||||
reg = <0x1002 0x6>;
|
||||
};
|
||||
|
||||
cal_art_5000: cal@5000 {
|
||||
reg = <0x5000 0x844>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pcie {
|
||||
status = "okay";
|
||||
|
||||
wifi@0,0 {
|
||||
compatible = "qcom,ath10k";
|
||||
reg = <0x0 0 0 0 0>;
|
||||
nvmem-cells = <&cal_art_5000>;
|
||||
nvmem-cell-names = "calibration";
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
@ -58,15 +81,6 @@
|
||||
};
|
||||
|
||||
&wmac {
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
};
|
||||
|
||||
&art {
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
macaddr_art_1002: macaddr@1002 {
|
||||
reg = <0x1002 0x6>;
|
||||
};
|
||||
nvmem-cells = <&cal_art_1000>;
|
||||
nvmem-cell-names = "calibration";
|
||||
};
|
||||
|
@ -38,6 +38,18 @@
|
||||
label = "art";
|
||||
reg = <0x7f0000 0x010000>;
|
||||
read-only;
|
||||
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
cal_art_1000: cal@1000 {
|
||||
reg = <0x1000 0x440>;
|
||||
};
|
||||
|
||||
macaddr_art_1002: macaddr@1002 {
|
||||
reg = <0x1002 0x6>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -48,15 +60,6 @@
|
||||
};
|
||||
|
||||
&wmac {
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
};
|
||||
|
||||
&art {
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
macaddr_art_1002: macaddr@1002 {
|
||||
reg = <0x1002 0x6>;
|
||||
};
|
||||
nvmem-cells = <&cal_art_1000>;
|
||||
nvmem-cell-names = "calibration";
|
||||
};
|
||||
|
@ -634,7 +634,8 @@ ath79_setup_macs()
|
||||
;;
|
||||
elecom,wrc-1750ghbk2-i|\
|
||||
elecom,wrc-300ghbk2-i)
|
||||
wan_mac=$(macaddr_add "$(mtd_get_mac_binary art 0x1002)" -2)
|
||||
wan_mac=$(mtd_get_mac_ascii hwconfig "HW.WAN.MAC.Address")
|
||||
label_mac=$wan_mac
|
||||
;;
|
||||
engenius,ecb1200|\
|
||||
engenius,ecb1750)
|
||||
|
@ -74,9 +74,6 @@ case "$FIRMWARE" in
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
ath10k_patch_mac $(mtd_get_mac_ascii devdata "wlan5mac")
|
||||
;;
|
||||
elecom,wrc-1750ghbk2-i)
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
;;
|
||||
engenius,ecb1200|\
|
||||
engenius,ecb1750)
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
|
@ -11,24 +11,6 @@ DEVICE_VARS += KERNEL_INITRAMFS_PREFIX DAP_SIGNATURE
|
||||
DEVICE_VARS += EDIMAX_HEADER_MAGIC EDIMAX_HEADER_MODEL
|
||||
DEVICE_VARS += OPENMESH_CE_TYPE ZYXEL_MODEL_STRING
|
||||
|
||||
define Build/add-elecom-factory-initramfs
|
||||
$(eval edimax_model=$(word 1,$(1)))
|
||||
$(eval product=$(word 2,$(1)))
|
||||
|
||||
$(STAGING_DIR_HOST)/bin/mkedimaximg \
|
||||
-b -s CSYS -m $(edimax_model) \
|
||||
-f 0x70000 -S 0x01100000 \
|
||||
-i $@ -o $@.factory
|
||||
|
||||
$(call Build/elecom-product-header,$(product) $@.factory)
|
||||
|
||||
if [ "$$(stat -c%s $@.factory)" -le $$(($(subst k,* 1024,$(subst m, * 1024k,$(IMAGE_SIZE))))) ]; then \
|
||||
mv $@.factory $(BIN_DIR)/$(KERNEL_INITRAMFS_PREFIX)-factory.bin; \
|
||||
else \
|
||||
echo "WARNING: initramfs kernel image too big, cannot generate factory image" >&2; \
|
||||
fi
|
||||
endef
|
||||
|
||||
define Build/addpattern
|
||||
-$(STAGING_DIR_HOST)/bin/addpattern -B $(ADDPATTERN_ID) \
|
||||
-v v$(ADDPATTERN_VERSION) -i $@ -o $@.new
|
||||
@ -1106,8 +1088,12 @@ define Device/elecom_wrc-1750ghbk2-i
|
||||
DEVICE_VENDOR := ELECOM
|
||||
DEVICE_MODEL := WRC-1750GHBK2-I/C
|
||||
IMAGE_SIZE := 15808k
|
||||
KERNEL_INITRAMFS := $$(KERNEL) | pad-to 2 | \
|
||||
add-elecom-factory-initramfs RN68 WRC-1750GHBK2
|
||||
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
|
||||
ARTIFACTS := initramfs-factory.bin
|
||||
ARTIFACT/initramfs-factory.bin := append-image initramfs-kernel.bin | \
|
||||
pad-to 2 | edimax-header -b -s CSYS -m RN68 -f 0x70000 -S 0x01100000 | \
|
||||
elecom-product-header WRC-1750GHBK2 | check-size
|
||||
endif
|
||||
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
|
||||
endef
|
||||
TARGET_DEVICES += elecom_wrc-1750ghbk2-i
|
||||
@ -1117,8 +1103,12 @@ define Device/elecom_wrc-300ghbk2-i
|
||||
DEVICE_VENDOR := ELECOM
|
||||
DEVICE_MODEL := WRC-300GHBK2-I
|
||||
IMAGE_SIZE := 7616k
|
||||
KERNEL_INITRAMFS := $$(KERNEL) | pad-to 2 | \
|
||||
add-elecom-factory-initramfs RN51 WRC-300GHBK2-I
|
||||
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
|
||||
ARTIFACTS := initramfs-factory.bin
|
||||
ARTIFACT/initramfs-factory.bin := append-image initramfs-kernel.bin | \
|
||||
pad-to 2 | edimax-header -b -s CSYS -m RN51 -f 0x70000 -S 0x01100000 | \
|
||||
elecom-product-header WRC-300GHBK2-I | check-size
|
||||
endif
|
||||
endef
|
||||
TARGET_DEVICES += elecom_wrc-300ghbk2-i
|
||||
|
||||
|
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||
mtd->type = MTD_NORFLASH;
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -851,6 +851,17 @@ out_error:
|
||||
@@ -843,6 +843,17 @@ out_error:
|
||||
*/
|
||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ Submitted-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
+obj-$(CONFIG_MTD_PARSER_CYBERTAN) += parser_cybertan.o
|
||||
obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o
|
||||
obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
|
||||
obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
|
||||
obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER) += tplink_safeloader.o
|
||||
--- a/drivers/mtd/parsers/Kconfig
|
||||
+++ b/drivers/mtd/parsers/Kconfig
|
||||
@@ -102,6 +102,14 @@ config MTD_OF_PARTS_LINKSYS_NS
|
||||
|
@ -1,5 +1,22 @@
|
||||
. /lib/functions.sh
|
||||
|
||||
board=$(board_name)
|
||||
|
||||
kernel_size=$(sed -n 's/mtd[0-9]*: \([0-9a-f]*\).*"\(kernel\|linux\)".*/\1/p' /proc/mtd)
|
||||
|
||||
mtd ${kernel_size:+-c 0x$kernel_size} fixtrx firmware && exit 0
|
||||
mtd ${kernel_size:+-c 0x$kernel_size} fixseama firmware && exit 0
|
||||
exit 1
|
||||
fixtrx() {
|
||||
mtd ${kernel_size:+-c 0x$kernel_size} fixtrx firmware && exit 0
|
||||
}
|
||||
|
||||
fixseama() {
|
||||
mtd ${kernel_size:+-c 0x$kernel_size} fixseama firmware && exit 0
|
||||
}
|
||||
|
||||
case "$board" in
|
||||
dlink,dir-885l)
|
||||
fixseama
|
||||
;;
|
||||
*)
|
||||
fixtrx
|
||||
;;
|
||||
esac
|
||||
|
@ -196,6 +196,7 @@ CONFIG_MTD_NAND_CORE=y
|
||||
CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
|
||||
CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y
|
||||
CONFIG_MTD_PARSER_TRX=y
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
|
@ -205,6 +205,7 @@ CONFIG_MTD_NAND_CORE=y
|
||||
CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
|
||||
CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y
|
||||
CONFIG_MTD_PARSER_TRX=y
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
|
@ -170,7 +170,7 @@ TARGET_DEVICES += asus_rt-ac87u
|
||||
define Device/asus_rt-ac88u
|
||||
$(call Device/asus)
|
||||
DEVICE_MODEL := RT-AC88U
|
||||
DEVICE_PACKAGES := $(BRCMFMAC_4366C0) $(USB3_PACKAGES)
|
||||
DEVICE_PACKAGES := $(BRCMFMAC_4366B1) $(BRCMFMAC_4366C0) $(USB3_PACKAGES)
|
||||
ASUS_PRODUCTID := RT-AC88U
|
||||
endef
|
||||
TARGET_DEVICES += asus_rt-ac88u
|
||||
|
@ -0,0 +1,101 @@
|
||||
From 12b58961de0bd88b3c7dfa5d21f6d67f4678b780 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 18 Oct 2022 07:18:22 +0200
|
||||
Subject: [PATCH] mtd: core: add missing of_node_get() in dynamic partitions
|
||||
code
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes unbalanced of_node_put():
|
||||
[ 1.078910] 6 cmdlinepart partitions found on MTD device gpmi-nand
|
||||
[ 1.085116] Creating 6 MTD partitions on "gpmi-nand":
|
||||
[ 1.090181] 0x000000000000-0x000008000000 : "nandboot"
|
||||
[ 1.096952] 0x000008000000-0x000009000000 : "nandfit"
|
||||
[ 1.103547] 0x000009000000-0x00000b000000 : "nandkernel"
|
||||
[ 1.110317] 0x00000b000000-0x00000c000000 : "nanddtb"
|
||||
[ 1.115525] ------------[ cut here ]------------
|
||||
[ 1.120141] refcount_t: addition on 0; use-after-free.
|
||||
[ 1.125328] WARNING: CPU: 0 PID: 1 at lib/refcount.c:25 refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.133528] Modules linked in:
|
||||
[ 1.136589] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.0.0-rc7-next-20220930-04543-g8cf3f7
|
||||
[ 1.146342] Hardware name: Freescale i.MX8DXL DDR3L EVK (DT)
|
||||
[ 1.151999] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
||||
[ 1.158965] pc : refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.163760] lr : refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.168556] sp : ffff800009ddb080
|
||||
[ 1.171866] x29: ffff800009ddb080 x28: ffff800009ddb35a x27: 0000000000000002
|
||||
[ 1.179015] x26: ffff8000098b06ad x25: ffffffffffffffff x24: ffff0a00ffffff05
|
||||
[ 1.186165] x23: ffff00001fdf6470 x22: ffff800009ddb367 x21: 0000000000000000
|
||||
[ 1.193314] x20: ffff00001fdfebe8 x19: ffff00001fdfec50 x18: ffffffffffffffff
|
||||
[ 1.200464] x17: 0000000000000000 x16: 0000000000000118 x15: 0000000000000004
|
||||
[ 1.207614] x14: 0000000000000fff x13: ffff800009bca248 x12: 0000000000000003
|
||||
[ 1.214764] x11: 00000000ffffefff x10: c0000000ffffefff x9 : 4762cb2ccb52de00
|
||||
[ 1.221914] x8 : 4762cb2ccb52de00 x7 : 205d313431303231 x6 : 312e31202020205b
|
||||
[ 1.229063] x5 : ffff800009d55c1f x4 : 0000000000000001 x3 : 0000000000000000
|
||||
[ 1.236213] x2 : 0000000000000000 x1 : ffff800009954be6 x0 : 000000000000002a
|
||||
[ 1.243365] Call trace:
|
||||
[ 1.245806] refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.250253] kobject_get+0x98/0x9c
|
||||
[ 1.253658] of_node_get+0x20/0x34
|
||||
[ 1.257072] of_fwnode_get+0x3c/0x54
|
||||
[ 1.260652] fwnode_get_nth_parent+0xd8/0xf4
|
||||
[ 1.264926] fwnode_full_name_string+0x3c/0xb4
|
||||
[ 1.269373] device_node_string+0x498/0x5b4
|
||||
[ 1.273561] pointer+0x41c/0x5d0
|
||||
[ 1.276793] vsnprintf+0x4d8/0x694
|
||||
[ 1.280198] vprintk_store+0x164/0x528
|
||||
[ 1.283951] vprintk_emit+0x98/0x164
|
||||
[ 1.287530] vprintk_default+0x44/0x6c
|
||||
[ 1.291284] vprintk+0xf0/0x134
|
||||
[ 1.294428] _printk+0x54/0x7c
|
||||
[ 1.297486] of_node_release+0xe8/0x128
|
||||
[ 1.301326] kobject_put+0x98/0xfc
|
||||
[ 1.304732] of_node_put+0x1c/0x28
|
||||
[ 1.308137] add_mtd_device+0x484/0x6d4
|
||||
[ 1.311977] add_mtd_partitions+0xf0/0x1d0
|
||||
[ 1.316078] parse_mtd_partitions+0x45c/0x518
|
||||
[ 1.320439] mtd_device_parse_register+0xb0/0x274
|
||||
[ 1.325147] gpmi_nand_probe+0x51c/0x650
|
||||
[ 1.329074] platform_probe+0xa8/0xd0
|
||||
[ 1.332740] really_probe+0x130/0x334
|
||||
[ 1.336406] __driver_probe_device+0xb4/0xe0
|
||||
[ 1.340681] driver_probe_device+0x3c/0x1f8
|
||||
[ 1.344869] __driver_attach+0xdc/0x1a4
|
||||
[ 1.348708] bus_for_each_dev+0x80/0xcc
|
||||
[ 1.352548] driver_attach+0x24/0x30
|
||||
[ 1.356127] bus_add_driver+0x108/0x1f4
|
||||
[ 1.359967] driver_register+0x78/0x114
|
||||
[ 1.363807] __platform_driver_register+0x24/0x30
|
||||
[ 1.368515] gpmi_nand_driver_init+0x1c/0x28
|
||||
[ 1.372798] do_one_initcall+0xbc/0x238
|
||||
[ 1.376638] do_initcall_level+0x94/0xb4
|
||||
[ 1.380565] do_initcalls+0x54/0x94
|
||||
[ 1.384058] do_basic_setup+0x1c/0x28
|
||||
[ 1.387724] kernel_init_freeable+0x110/0x188
|
||||
[ 1.392084] kernel_init+0x20/0x1a0
|
||||
[ 1.395578] ret_from_fork+0x10/0x20
|
||||
[ 1.399157] ---[ end trace 0000000000000000 ]---
|
||||
[ 1.403782] ------------[ cut here ]------------
|
||||
|
||||
Reported-by: Han Xu <han.xu@nxp.com>
|
||||
Fixes: ad9b10d1eaada169 ("mtd: core: introduce of support for dynamic partitions")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Tested-by: Han Xu <han.xu@nxp.com>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221018051822.28685-1-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -577,7 +577,7 @@ static void mtd_check_of_node(struct mtd
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
parent = mtd->parent;
|
||||
- parent_dn = dev_of_node(&parent->dev);
|
||||
+ parent_dn = of_node_get(dev_of_node(&parent->dev));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
@ -0,0 +1,65 @@
|
||||
From 63db0cb35e1cb3b3c134906d1062f65513fdda2d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 4 Oct 2022 10:37:09 +0200
|
||||
Subject: [PATCH] mtd: core: simplify (a bit) code find partition-matching
|
||||
dynamic OF node
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
1. Don't hardcode "partition-" string twice
|
||||
2. Use simpler logic & use ->name to avoid of_property_read_string()
|
||||
3. Use mtd_get_of_node() helper
|
||||
|
||||
Cc: Christian Marangi <ansuelsmth@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221004083710.27704-1-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -566,18 +566,16 @@ static void mtd_check_of_node(struct mtd
|
||||
struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||
const char *pname, *prefix = "partition-";
|
||||
int plen, mtd_name_len, offset, prefix_len;
|
||||
- struct mtd_info *parent;
|
||||
bool found = false;
|
||||
|
||||
/* Check if MTD already has a device node */
|
||||
- if (dev_of_node(&mtd->dev))
|
||||
+ if (mtd_get_of_node(mtd))
|
||||
return;
|
||||
|
||||
/* Check if a partitions node exist */
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
- parent = mtd->parent;
|
||||
- parent_dn = of_node_get(dev_of_node(&parent->dev));
|
||||
+ parent_dn = of_node_get(mtd_get_of_node(mtd->parent));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
||||
@@ -590,15 +588,15 @@ static void mtd_check_of_node(struct mtd
|
||||
|
||||
/* Search if a partition is defined with the same name */
|
||||
for_each_child_of_node(partitions, mtd_dn) {
|
||||
- offset = 0;
|
||||
-
|
||||
/* Skip partition with no/wrong prefix */
|
||||
- if (!of_node_name_prefix(mtd_dn, "partition-"))
|
||||
+ if (!of_node_name_prefix(mtd_dn, prefix))
|
||||
continue;
|
||||
|
||||
/* Label have priority. Check that first */
|
||||
- if (of_property_read_string(mtd_dn, "label", &pname)) {
|
||||
- of_property_read_string(mtd_dn, "name", &pname);
|
||||
+ if (!of_property_read_string(mtd_dn, "label", &pname)) {
|
||||
+ offset = 0;
|
||||
+ } else {
|
||||
+ pname = mtd_dn->name;
|
||||
offset = prefix_len;
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
From ddb8cefb7af288950447ca6eeeafb09977dab56f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 4 Oct 2022 10:37:10 +0200
|
||||
Subject: [PATCH] mtd: core: try to find OF node for every MTD partition
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far this feature was limited to the top-level "nvmem-cells" node.
|
||||
There are multiple parsers creating partitions and subpartitions
|
||||
dynamically. Extend that code to handle them too.
|
||||
|
||||
This allows finding partition-* node for every MTD (sub)partition.
|
||||
|
||||
Random example:
|
||||
|
||||
partitions {
|
||||
compatible = "brcm,bcm947xx-cfe-partitions";
|
||||
|
||||
partition-firmware {
|
||||
compatible = "brcm,trx";
|
||||
|
||||
partition-loader {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Cc: Christian Marangi <ansuelsmth@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221004083710.27704-2-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 18 ++++++------------
|
||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -566,20 +566,22 @@ static void mtd_check_of_node(struct mtd
|
||||
struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||
const char *pname, *prefix = "partition-";
|
||||
int plen, mtd_name_len, offset, prefix_len;
|
||||
- bool found = false;
|
||||
|
||||
/* Check if MTD already has a device node */
|
||||
if (mtd_get_of_node(mtd))
|
||||
return;
|
||||
|
||||
- /* Check if a partitions node exist */
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
+
|
||||
parent_dn = of_node_get(mtd_get_of_node(mtd->parent));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
||||
- partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||
+ if (mtd_is_partition(mtd->parent))
|
||||
+ partitions = of_node_get(parent_dn);
|
||||
+ else
|
||||
+ partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||
if (!partitions)
|
||||
goto exit_parent;
|
||||
|
||||
@@ -603,19 +605,11 @@ static void mtd_check_of_node(struct mtd
|
||||
plen = strlen(pname) - offset;
|
||||
if (plen == mtd_name_len &&
|
||||
!strncmp(mtd->name, pname + offset, plen)) {
|
||||
- found = true;
|
||||
+ mtd_set_of_node(mtd, mtd_dn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!found)
|
||||
- goto exit_partitions;
|
||||
-
|
||||
- /* Set of_node only for nvmem */
|
||||
- if (of_device_is_compatible(mtd_dn, "nvmem-cells"))
|
||||
- mtd_set_of_node(mtd, mtd_dn);
|
||||
-
|
||||
-exit_partitions:
|
||||
of_node_put(partitions);
|
||||
exit_parent:
|
||||
of_node_put(parent_dn);
|
@ -0,0 +1,229 @@
|
||||
From aec4d5f5ffd0f0092bd9dc21ea90e0bc237d4b74 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sat, 15 Oct 2022 11:29:50 +0200
|
||||
Subject: [PATCH] mtd: parsers: add TP-Link SafeLoader partitions table parser
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This parser deals with most TP-Link home routers. It reads info about
|
||||
partitions and registers them in the MTD subsystem.
|
||||
|
||||
Example from TP-Link Archer C5 V2:
|
||||
|
||||
spi-nor spi0.0: s25fl128s1 (16384 Kbytes)
|
||||
15 tplink-safeloader partitions found on MTD device spi0.0
|
||||
Creating 15 MTD partitions on "spi0.0":
|
||||
0x000000000000-0x000000040000 : "fs-uboot"
|
||||
0x000000040000-0x000000440000 : "os-image"
|
||||
0x000000440000-0x000000e40000 : "rootfs"
|
||||
0x000000e40000-0x000000e40200 : "default-mac"
|
||||
0x000000e40200-0x000000e40400 : "pin"
|
||||
0x000000e40400-0x000000e40600 : "product-info"
|
||||
0x000000e50000-0x000000e60000 : "partition-table"
|
||||
0x000000e60000-0x000000e60200 : "soft-version"
|
||||
0x000000e61000-0x000000e70000 : "support-list"
|
||||
0x000000e70000-0x000000e80000 : "profile"
|
||||
0x000000e80000-0x000000e90000 : "default-config"
|
||||
0x000000e90000-0x000000ee0000 : "user-config"
|
||||
0x000000ee0000-0x000000fe0000 : "log"
|
||||
0x000000fe0000-0x000000ff0000 : "radio_bk"
|
||||
0x000000ff0000-0x000001000000 : "radio"
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221015092950.27467-2-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/parsers/Kconfig | 15 +++
|
||||
drivers/mtd/parsers/Makefile | 1 +
|
||||
drivers/mtd/parsers/tplink_safeloader.c | 150 ++++++++++++++++++++++++
|
||||
3 files changed, 166 insertions(+)
|
||||
create mode 100644 drivers/mtd/parsers/tplink_safeloader.c
|
||||
|
||||
--- a/drivers/mtd/parsers/Kconfig
|
||||
+++ b/drivers/mtd/parsers/Kconfig
|
||||
@@ -113,6 +113,21 @@ config MTD_AFS_PARTS
|
||||
for your particular device. It won't happen automatically. The
|
||||
'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.
|
||||
|
||||
+config MTD_PARSER_TPLINK_SAFELOADER
|
||||
+ tristate "TP-Link Safeloader partitions parser"
|
||||
+ depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST)
|
||||
+ help
|
||||
+ TP-Link home routers use flash partitions to store various data. Info
|
||||
+ about flash space layout is stored in a partitions table using a
|
||||
+ custom ASCII-based format.
|
||||
+
|
||||
+ That format was first found in devices with SafeLoader bootloader and
|
||||
+ was named after it. Later it was adapted to CFE and U-Boot
|
||||
+ bootloaders.
|
||||
+
|
||||
+ This driver reads partitions table, parses it and creates MTD
|
||||
+ partitions.
|
||||
+
|
||||
config MTD_PARSER_TRX
|
||||
tristate "Parser for TRX format partitions"
|
||||
depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || COMPILE_TEST)
|
||||
--- a/drivers/mtd/parsers/Makefile
|
||||
+++ b/drivers/mtd/parsers/Makefile
|
||||
@@ -9,6 +9,7 @@ ofpart-$(CONFIG_MTD_OF_PARTS_BCM4908) +=
|
||||
ofpart-$(CONFIG_MTD_OF_PARTS_LINKSYS_NS)+= ofpart_linksys_ns.o
|
||||
obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o
|
||||
obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
|
||||
+obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER) += tplink_safeloader.o
|
||||
obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
|
||||
obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpart.o
|
||||
obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/mtd/parsers/tplink_safeloader.c
|
||||
@@ -0,0 +1,150 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * Copyright © 2022 Rafał Miłecki <rafal@milecki.pl>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mtd/mtd.h>
|
||||
+#include <linux/mtd/partitions.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/slab.h>
|
||||
+
|
||||
+#define TPLINK_SAFELOADER_DATA_OFFSET 4
|
||||
+#define TPLINK_SAFELOADER_MAX_PARTS 32
|
||||
+
|
||||
+struct safeloader_cmn_header {
|
||||
+ __be32 size;
|
||||
+ uint32_t unused;
|
||||
+} __packed;
|
||||
+
|
||||
+static void *mtd_parser_tplink_safeloader_read_table(struct mtd_info *mtd)
|
||||
+{
|
||||
+ struct safeloader_cmn_header hdr;
|
||||
+ struct device_node *np;
|
||||
+ size_t bytes_read;
|
||||
+ size_t offset;
|
||||
+ size_t size;
|
||||
+ char *buf;
|
||||
+ int err;
|
||||
+
|
||||
+ np = mtd_get_of_node(mtd);
|
||||
+ if (mtd_is_partition(mtd))
|
||||
+ of_node_get(np);
|
||||
+ else
|
||||
+ np = of_get_child_by_name(np, "partitions");
|
||||
+
|
||||
+ if (of_property_read_u32(np, "partitions-table-offset", (u32 *)&offset)) {
|
||||
+ pr_err("Failed to get partitions table offset\n");
|
||||
+ goto err_put;
|
||||
+ }
|
||||
+
|
||||
+ err = mtd_read(mtd, offset, sizeof(hdr), &bytes_read, (uint8_t *)&hdr);
|
||||
+ if (err && !mtd_is_bitflip(err)) {
|
||||
+ pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset);
|
||||
+ goto err_put;
|
||||
+ }
|
||||
+
|
||||
+ size = be32_to_cpu(hdr.size);
|
||||
+
|
||||
+ buf = kmalloc(size + 1, GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ goto err_put;
|
||||
+
|
||||
+ err = mtd_read(mtd, offset + sizeof(hdr), size, &bytes_read, buf);
|
||||
+ if (err && !mtd_is_bitflip(err)) {
|
||||
+ pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset + sizeof(hdr));
|
||||
+ goto err_kfree;
|
||||
+ }
|
||||
+
|
||||
+ buf[size] = '\0';
|
||||
+
|
||||
+ of_node_put(np);
|
||||
+
|
||||
+ return buf;
|
||||
+
|
||||
+err_kfree:
|
||||
+ kfree(buf);
|
||||
+err_put:
|
||||
+ of_node_put(np);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd,
|
||||
+ const struct mtd_partition **pparts,
|
||||
+ struct mtd_part_parser_data *data)
|
||||
+{
|
||||
+ struct mtd_partition *parts;
|
||||
+ char name[65];
|
||||
+ size_t offset;
|
||||
+ size_t bytes;
|
||||
+ char *buf;
|
||||
+ int idx;
|
||||
+ int err;
|
||||
+
|
||||
+ parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
|
||||
+ if (!parts) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ buf = mtd_parser_tplink_safeloader_read_table(mtd);
|
||||
+ if (!buf) {
|
||||
+ err = -ENOENT;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ for (idx = 0, offset = TPLINK_SAFELOADER_DATA_OFFSET;
|
||||
+ idx < TPLINK_SAFELOADER_MAX_PARTS &&
|
||||
+ sscanf(buf + offset, "partition %64s base 0x%llx size 0x%llx%zn\n",
|
||||
+ name, &parts[idx].offset, &parts[idx].size, &bytes) == 3;
|
||||
+ idx++, offset += bytes + 1) {
|
||||
+ parts[idx].name = kstrdup(name, GFP_KERNEL);
|
||||
+ if (!parts[idx].name) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (idx == TPLINK_SAFELOADER_MAX_PARTS)
|
||||
+ pr_warn("Reached maximum number of partitions!\n");
|
||||
+
|
||||
+ kfree(buf);
|
||||
+
|
||||
+ *pparts = parts;
|
||||
+
|
||||
+ return idx;
|
||||
+
|
||||
+err_free:
|
||||
+ for (idx -= 1; idx >= 0; idx--)
|
||||
+ kfree(parts[idx].name);
|
||||
+err_out:
|
||||
+ return err;
|
||||
+};
|
||||
+
|
||||
+static void mtd_parser_tplink_safeloader_cleanup(const struct mtd_partition *pparts,
|
||||
+ int nr_parts)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < nr_parts; i++)
|
||||
+ kfree(pparts[i].name);
|
||||
+
|
||||
+ kfree(pparts);
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id mtd_parser_tplink_safeloader_of_match_table[] = {
|
||||
+ { .compatible = "tplink,safeloader-partitions" },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, mtd_parser_tplink_safeloader_of_match_table);
|
||||
+
|
||||
+static struct mtd_part_parser mtd_parser_tplink_safeloader = {
|
||||
+ .parse_fn = mtd_parser_tplink_safeloader_parse,
|
||||
+ .cleanup = mtd_parser_tplink_safeloader_cleanup,
|
||||
+ .name = "tplink-safeloader",
|
||||
+ .of_match_table = mtd_parser_tplink_safeloader_of_match_table,
|
||||
+};
|
||||
+module_mtd_part_parser(mtd_parser_tplink_safeloader);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,101 @@
|
||||
From 12b58961de0bd88b3c7dfa5d21f6d67f4678b780 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 18 Oct 2022 07:18:22 +0200
|
||||
Subject: [PATCH] mtd: core: add missing of_node_get() in dynamic partitions
|
||||
code
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes unbalanced of_node_put():
|
||||
[ 1.078910] 6 cmdlinepart partitions found on MTD device gpmi-nand
|
||||
[ 1.085116] Creating 6 MTD partitions on "gpmi-nand":
|
||||
[ 1.090181] 0x000000000000-0x000008000000 : "nandboot"
|
||||
[ 1.096952] 0x000008000000-0x000009000000 : "nandfit"
|
||||
[ 1.103547] 0x000009000000-0x00000b000000 : "nandkernel"
|
||||
[ 1.110317] 0x00000b000000-0x00000c000000 : "nanddtb"
|
||||
[ 1.115525] ------------[ cut here ]------------
|
||||
[ 1.120141] refcount_t: addition on 0; use-after-free.
|
||||
[ 1.125328] WARNING: CPU: 0 PID: 1 at lib/refcount.c:25 refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.133528] Modules linked in:
|
||||
[ 1.136589] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.0.0-rc7-next-20220930-04543-g8cf3f7
|
||||
[ 1.146342] Hardware name: Freescale i.MX8DXL DDR3L EVK (DT)
|
||||
[ 1.151999] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
||||
[ 1.158965] pc : refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.163760] lr : refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.168556] sp : ffff800009ddb080
|
||||
[ 1.171866] x29: ffff800009ddb080 x28: ffff800009ddb35a x27: 0000000000000002
|
||||
[ 1.179015] x26: ffff8000098b06ad x25: ffffffffffffffff x24: ffff0a00ffffff05
|
||||
[ 1.186165] x23: ffff00001fdf6470 x22: ffff800009ddb367 x21: 0000000000000000
|
||||
[ 1.193314] x20: ffff00001fdfebe8 x19: ffff00001fdfec50 x18: ffffffffffffffff
|
||||
[ 1.200464] x17: 0000000000000000 x16: 0000000000000118 x15: 0000000000000004
|
||||
[ 1.207614] x14: 0000000000000fff x13: ffff800009bca248 x12: 0000000000000003
|
||||
[ 1.214764] x11: 00000000ffffefff x10: c0000000ffffefff x9 : 4762cb2ccb52de00
|
||||
[ 1.221914] x8 : 4762cb2ccb52de00 x7 : 205d313431303231 x6 : 312e31202020205b
|
||||
[ 1.229063] x5 : ffff800009d55c1f x4 : 0000000000000001 x3 : 0000000000000000
|
||||
[ 1.236213] x2 : 0000000000000000 x1 : ffff800009954be6 x0 : 000000000000002a
|
||||
[ 1.243365] Call trace:
|
||||
[ 1.245806] refcount_warn_saturate+0xdc/0x148
|
||||
[ 1.250253] kobject_get+0x98/0x9c
|
||||
[ 1.253658] of_node_get+0x20/0x34
|
||||
[ 1.257072] of_fwnode_get+0x3c/0x54
|
||||
[ 1.260652] fwnode_get_nth_parent+0xd8/0xf4
|
||||
[ 1.264926] fwnode_full_name_string+0x3c/0xb4
|
||||
[ 1.269373] device_node_string+0x498/0x5b4
|
||||
[ 1.273561] pointer+0x41c/0x5d0
|
||||
[ 1.276793] vsnprintf+0x4d8/0x694
|
||||
[ 1.280198] vprintk_store+0x164/0x528
|
||||
[ 1.283951] vprintk_emit+0x98/0x164
|
||||
[ 1.287530] vprintk_default+0x44/0x6c
|
||||
[ 1.291284] vprintk+0xf0/0x134
|
||||
[ 1.294428] _printk+0x54/0x7c
|
||||
[ 1.297486] of_node_release+0xe8/0x128
|
||||
[ 1.301326] kobject_put+0x98/0xfc
|
||||
[ 1.304732] of_node_put+0x1c/0x28
|
||||
[ 1.308137] add_mtd_device+0x484/0x6d4
|
||||
[ 1.311977] add_mtd_partitions+0xf0/0x1d0
|
||||
[ 1.316078] parse_mtd_partitions+0x45c/0x518
|
||||
[ 1.320439] mtd_device_parse_register+0xb0/0x274
|
||||
[ 1.325147] gpmi_nand_probe+0x51c/0x650
|
||||
[ 1.329074] platform_probe+0xa8/0xd0
|
||||
[ 1.332740] really_probe+0x130/0x334
|
||||
[ 1.336406] __driver_probe_device+0xb4/0xe0
|
||||
[ 1.340681] driver_probe_device+0x3c/0x1f8
|
||||
[ 1.344869] __driver_attach+0xdc/0x1a4
|
||||
[ 1.348708] bus_for_each_dev+0x80/0xcc
|
||||
[ 1.352548] driver_attach+0x24/0x30
|
||||
[ 1.356127] bus_add_driver+0x108/0x1f4
|
||||
[ 1.359967] driver_register+0x78/0x114
|
||||
[ 1.363807] __platform_driver_register+0x24/0x30
|
||||
[ 1.368515] gpmi_nand_driver_init+0x1c/0x28
|
||||
[ 1.372798] do_one_initcall+0xbc/0x238
|
||||
[ 1.376638] do_initcall_level+0x94/0xb4
|
||||
[ 1.380565] do_initcalls+0x54/0x94
|
||||
[ 1.384058] do_basic_setup+0x1c/0x28
|
||||
[ 1.387724] kernel_init_freeable+0x110/0x188
|
||||
[ 1.392084] kernel_init+0x20/0x1a0
|
||||
[ 1.395578] ret_from_fork+0x10/0x20
|
||||
[ 1.399157] ---[ end trace 0000000000000000 ]---
|
||||
[ 1.403782] ------------[ cut here ]------------
|
||||
|
||||
Reported-by: Han Xu <han.xu@nxp.com>
|
||||
Fixes: ad9b10d1eaada169 ("mtd: core: introduce of support for dynamic partitions")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Tested-by: Han Xu <han.xu@nxp.com>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221018051822.28685-1-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -580,7 +580,7 @@ static void mtd_check_of_node(struct mtd
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
parent = mtd->parent;
|
||||
- parent_dn = dev_of_node(&parent->dev);
|
||||
+ parent_dn = of_node_get(dev_of_node(&parent->dev));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
@ -0,0 +1,65 @@
|
||||
From 63db0cb35e1cb3b3c134906d1062f65513fdda2d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 4 Oct 2022 10:37:09 +0200
|
||||
Subject: [PATCH] mtd: core: simplify (a bit) code find partition-matching
|
||||
dynamic OF node
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
1. Don't hardcode "partition-" string twice
|
||||
2. Use simpler logic & use ->name to avoid of_property_read_string()
|
||||
3. Use mtd_get_of_node() helper
|
||||
|
||||
Cc: Christian Marangi <ansuelsmth@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221004083710.27704-1-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -569,18 +569,16 @@ static void mtd_check_of_node(struct mtd
|
||||
struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||
const char *pname, *prefix = "partition-";
|
||||
int plen, mtd_name_len, offset, prefix_len;
|
||||
- struct mtd_info *parent;
|
||||
bool found = false;
|
||||
|
||||
/* Check if MTD already has a device node */
|
||||
- if (dev_of_node(&mtd->dev))
|
||||
+ if (mtd_get_of_node(mtd))
|
||||
return;
|
||||
|
||||
/* Check if a partitions node exist */
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
- parent = mtd->parent;
|
||||
- parent_dn = of_node_get(dev_of_node(&parent->dev));
|
||||
+ parent_dn = of_node_get(mtd_get_of_node(mtd->parent));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
||||
@@ -593,15 +591,15 @@ static void mtd_check_of_node(struct mtd
|
||||
|
||||
/* Search if a partition is defined with the same name */
|
||||
for_each_child_of_node(partitions, mtd_dn) {
|
||||
- offset = 0;
|
||||
-
|
||||
/* Skip partition with no/wrong prefix */
|
||||
- if (!of_node_name_prefix(mtd_dn, "partition-"))
|
||||
+ if (!of_node_name_prefix(mtd_dn, prefix))
|
||||
continue;
|
||||
|
||||
/* Label have priority. Check that first */
|
||||
- if (of_property_read_string(mtd_dn, "label", &pname)) {
|
||||
- of_property_read_string(mtd_dn, "name", &pname);
|
||||
+ if (!of_property_read_string(mtd_dn, "label", &pname)) {
|
||||
+ offset = 0;
|
||||
+ } else {
|
||||
+ pname = mtd_dn->name;
|
||||
offset = prefix_len;
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
From ddb8cefb7af288950447ca6eeeafb09977dab56f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 4 Oct 2022 10:37:10 +0200
|
||||
Subject: [PATCH] mtd: core: try to find OF node for every MTD partition
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far this feature was limited to the top-level "nvmem-cells" node.
|
||||
There are multiple parsers creating partitions and subpartitions
|
||||
dynamically. Extend that code to handle them too.
|
||||
|
||||
This allows finding partition-* node for every MTD (sub)partition.
|
||||
|
||||
Random example:
|
||||
|
||||
partitions {
|
||||
compatible = "brcm,bcm947xx-cfe-partitions";
|
||||
|
||||
partition-firmware {
|
||||
compatible = "brcm,trx";
|
||||
|
||||
partition-loader {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Cc: Christian Marangi <ansuelsmth@gmail.com>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221004083710.27704-2-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/mtdcore.c | 18 ++++++------------
|
||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -569,20 +569,22 @@ static void mtd_check_of_node(struct mtd
|
||||
struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||
const char *pname, *prefix = "partition-";
|
||||
int plen, mtd_name_len, offset, prefix_len;
|
||||
- bool found = false;
|
||||
|
||||
/* Check if MTD already has a device node */
|
||||
if (mtd_get_of_node(mtd))
|
||||
return;
|
||||
|
||||
- /* Check if a partitions node exist */
|
||||
if (!mtd_is_partition(mtd))
|
||||
return;
|
||||
+
|
||||
parent_dn = of_node_get(mtd_get_of_node(mtd->parent));
|
||||
if (!parent_dn)
|
||||
return;
|
||||
|
||||
- partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||
+ if (mtd_is_partition(mtd->parent))
|
||||
+ partitions = of_node_get(parent_dn);
|
||||
+ else
|
||||
+ partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||
if (!partitions)
|
||||
goto exit_parent;
|
||||
|
||||
@@ -606,19 +608,11 @@ static void mtd_check_of_node(struct mtd
|
||||
plen = strlen(pname) - offset;
|
||||
if (plen == mtd_name_len &&
|
||||
!strncmp(mtd->name, pname + offset, plen)) {
|
||||
- found = true;
|
||||
+ mtd_set_of_node(mtd, mtd_dn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!found)
|
||||
- goto exit_partitions;
|
||||
-
|
||||
- /* Set of_node only for nvmem */
|
||||
- if (of_device_is_compatible(mtd_dn, "nvmem-cells"))
|
||||
- mtd_set_of_node(mtd, mtd_dn);
|
||||
-
|
||||
-exit_partitions:
|
||||
of_node_put(partitions);
|
||||
exit_parent:
|
||||
of_node_put(parent_dn);
|
@ -0,0 +1,229 @@
|
||||
From aec4d5f5ffd0f0092bd9dc21ea90e0bc237d4b74 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sat, 15 Oct 2022 11:29:50 +0200
|
||||
Subject: [PATCH] mtd: parsers: add TP-Link SafeLoader partitions table parser
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This parser deals with most TP-Link home routers. It reads info about
|
||||
partitions and registers them in the MTD subsystem.
|
||||
|
||||
Example from TP-Link Archer C5 V2:
|
||||
|
||||
spi-nor spi0.0: s25fl128s1 (16384 Kbytes)
|
||||
15 tplink-safeloader partitions found on MTD device spi0.0
|
||||
Creating 15 MTD partitions on "spi0.0":
|
||||
0x000000000000-0x000000040000 : "fs-uboot"
|
||||
0x000000040000-0x000000440000 : "os-image"
|
||||
0x000000440000-0x000000e40000 : "rootfs"
|
||||
0x000000e40000-0x000000e40200 : "default-mac"
|
||||
0x000000e40200-0x000000e40400 : "pin"
|
||||
0x000000e40400-0x000000e40600 : "product-info"
|
||||
0x000000e50000-0x000000e60000 : "partition-table"
|
||||
0x000000e60000-0x000000e60200 : "soft-version"
|
||||
0x000000e61000-0x000000e70000 : "support-list"
|
||||
0x000000e70000-0x000000e80000 : "profile"
|
||||
0x000000e80000-0x000000e90000 : "default-config"
|
||||
0x000000e90000-0x000000ee0000 : "user-config"
|
||||
0x000000ee0000-0x000000fe0000 : "log"
|
||||
0x000000fe0000-0x000000ff0000 : "radio_bk"
|
||||
0x000000ff0000-0x000001000000 : "radio"
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Link: https://lore.kernel.org/linux-mtd/20221015092950.27467-2-zajec5@gmail.com
|
||||
---
|
||||
drivers/mtd/parsers/Kconfig | 15 +++
|
||||
drivers/mtd/parsers/Makefile | 1 +
|
||||
drivers/mtd/parsers/tplink_safeloader.c | 150 ++++++++++++++++++++++++
|
||||
3 files changed, 166 insertions(+)
|
||||
create mode 100644 drivers/mtd/parsers/tplink_safeloader.c
|
||||
|
||||
--- a/drivers/mtd/parsers/Kconfig
|
||||
+++ b/drivers/mtd/parsers/Kconfig
|
||||
@@ -113,6 +113,21 @@ config MTD_AFS_PARTS
|
||||
for your particular device. It won't happen automatically. The
|
||||
'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.
|
||||
|
||||
+config MTD_PARSER_TPLINK_SAFELOADER
|
||||
+ tristate "TP-Link Safeloader partitions parser"
|
||||
+ depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST)
|
||||
+ help
|
||||
+ TP-Link home routers use flash partitions to store various data. Info
|
||||
+ about flash space layout is stored in a partitions table using a
|
||||
+ custom ASCII-based format.
|
||||
+
|
||||
+ That format was first found in devices with SafeLoader bootloader and
|
||||
+ was named after it. Later it was adapted to CFE and U-Boot
|
||||
+ bootloaders.
|
||||
+
|
||||
+ This driver reads partitions table, parses it and creates MTD
|
||||
+ partitions.
|
||||
+
|
||||
config MTD_PARSER_TRX
|
||||
tristate "Parser for TRX format partitions"
|
||||
depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || COMPILE_TEST)
|
||||
--- a/drivers/mtd/parsers/Makefile
|
||||
+++ b/drivers/mtd/parsers/Makefile
|
||||
@@ -9,6 +9,7 @@ ofpart-$(CONFIG_MTD_OF_PARTS_BCM4908) +=
|
||||
ofpart-$(CONFIG_MTD_OF_PARTS_LINKSYS_NS)+= ofpart_linksys_ns.o
|
||||
obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o
|
||||
obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
|
||||
+obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER) += tplink_safeloader.o
|
||||
obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
|
||||
obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpart.o
|
||||
obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/mtd/parsers/tplink_safeloader.c
|
||||
@@ -0,0 +1,150 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * Copyright © 2022 Rafał Miłecki <rafal@milecki.pl>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mtd/mtd.h>
|
||||
+#include <linux/mtd/partitions.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/slab.h>
|
||||
+
|
||||
+#define TPLINK_SAFELOADER_DATA_OFFSET 4
|
||||
+#define TPLINK_SAFELOADER_MAX_PARTS 32
|
||||
+
|
||||
+struct safeloader_cmn_header {
|
||||
+ __be32 size;
|
||||
+ uint32_t unused;
|
||||
+} __packed;
|
||||
+
|
||||
+static void *mtd_parser_tplink_safeloader_read_table(struct mtd_info *mtd)
|
||||
+{
|
||||
+ struct safeloader_cmn_header hdr;
|
||||
+ struct device_node *np;
|
||||
+ size_t bytes_read;
|
||||
+ size_t offset;
|
||||
+ size_t size;
|
||||
+ char *buf;
|
||||
+ int err;
|
||||
+
|
||||
+ np = mtd_get_of_node(mtd);
|
||||
+ if (mtd_is_partition(mtd))
|
||||
+ of_node_get(np);
|
||||
+ else
|
||||
+ np = of_get_child_by_name(np, "partitions");
|
||||
+
|
||||
+ if (of_property_read_u32(np, "partitions-table-offset", (u32 *)&offset)) {
|
||||
+ pr_err("Failed to get partitions table offset\n");
|
||||
+ goto err_put;
|
||||
+ }
|
||||
+
|
||||
+ err = mtd_read(mtd, offset, sizeof(hdr), &bytes_read, (uint8_t *)&hdr);
|
||||
+ if (err && !mtd_is_bitflip(err)) {
|
||||
+ pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset);
|
||||
+ goto err_put;
|
||||
+ }
|
||||
+
|
||||
+ size = be32_to_cpu(hdr.size);
|
||||
+
|
||||
+ buf = kmalloc(size + 1, GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ goto err_put;
|
||||
+
|
||||
+ err = mtd_read(mtd, offset + sizeof(hdr), size, &bytes_read, buf);
|
||||
+ if (err && !mtd_is_bitflip(err)) {
|
||||
+ pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset + sizeof(hdr));
|
||||
+ goto err_kfree;
|
||||
+ }
|
||||
+
|
||||
+ buf[size] = '\0';
|
||||
+
|
||||
+ of_node_put(np);
|
||||
+
|
||||
+ return buf;
|
||||
+
|
||||
+err_kfree:
|
||||
+ kfree(buf);
|
||||
+err_put:
|
||||
+ of_node_put(np);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd,
|
||||
+ const struct mtd_partition **pparts,
|
||||
+ struct mtd_part_parser_data *data)
|
||||
+{
|
||||
+ struct mtd_partition *parts;
|
||||
+ char name[65];
|
||||
+ size_t offset;
|
||||
+ size_t bytes;
|
||||
+ char *buf;
|
||||
+ int idx;
|
||||
+ int err;
|
||||
+
|
||||
+ parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
|
||||
+ if (!parts) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ buf = mtd_parser_tplink_safeloader_read_table(mtd);
|
||||
+ if (!buf) {
|
||||
+ err = -ENOENT;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+
|
||||
+ for (idx = 0, offset = TPLINK_SAFELOADER_DATA_OFFSET;
|
||||
+ idx < TPLINK_SAFELOADER_MAX_PARTS &&
|
||||
+ sscanf(buf + offset, "partition %64s base 0x%llx size 0x%llx%zn\n",
|
||||
+ name, &parts[idx].offset, &parts[idx].size, &bytes) == 3;
|
||||
+ idx++, offset += bytes + 1) {
|
||||
+ parts[idx].name = kstrdup(name, GFP_KERNEL);
|
||||
+ if (!parts[idx].name) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (idx == TPLINK_SAFELOADER_MAX_PARTS)
|
||||
+ pr_warn("Reached maximum number of partitions!\n");
|
||||
+
|
||||
+ kfree(buf);
|
||||
+
|
||||
+ *pparts = parts;
|
||||
+
|
||||
+ return idx;
|
||||
+
|
||||
+err_free:
|
||||
+ for (idx -= 1; idx >= 0; idx--)
|
||||
+ kfree(parts[idx].name);
|
||||
+err_out:
|
||||
+ return err;
|
||||
+};
|
||||
+
|
||||
+static void mtd_parser_tplink_safeloader_cleanup(const struct mtd_partition *pparts,
|
||||
+ int nr_parts)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < nr_parts; i++)
|
||||
+ kfree(pparts[i].name);
|
||||
+
|
||||
+ kfree(pparts);
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id mtd_parser_tplink_safeloader_of_match_table[] = {
|
||||
+ { .compatible = "tplink,safeloader-partitions" },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, mtd_parser_tplink_safeloader_of_match_table);
|
||||
+
|
||||
+static struct mtd_part_parser mtd_parser_tplink_safeloader = {
|
||||
+ .parse_fn = mtd_parser_tplink_safeloader_parse,
|
||||
+ .cleanup = mtd_parser_tplink_safeloader_cleanup,
|
||||
+ .name = "tplink-safeloader",
|
||||
+ .of_match_table = mtd_parser_tplink_safeloader_of_match_table,
|
||||
+};
|
||||
+module_mtd_part_parser(mtd_parser_tplink_safeloader);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
#include "mtdcore.h"
|
||||
|
||||
@@ -924,6 +925,8 @@ int mtd_device_parse_register(struct mtd
|
||||
@@ -916,6 +917,8 @@ int mtd_device_parse_register(struct mtd
|
||||
register_reboot_notifier(&mtd->reboot_notifier);
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
#include <linux/nvmem-provider.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
@@ -767,6 +768,19 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||
@@ -759,6 +760,19 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||
of this try_ nonsense, and no bitching about it
|
||||
either. :) */
|
||||
__module_get(THIS_MODULE);
|
||||
|
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
#include "mtdcore.h"
|
||||
|
||||
@@ -1075,6 +1076,8 @@ int mtd_device_parse_register(struct mtd
|
||||
@@ -1067,6 +1068,8 @@ int mtd_device_parse_register(struct mtd
|
||||
|
||||
ret = mtd_otp_nvmem_add(mtd);
|
||||
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
#include <linux/nvmem-provider.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
@@ -770,6 +771,16 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||
@@ -762,6 +763,16 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||
of this try_ nonsense, and no bitching about it
|
||||
either. :) */
|
||||
__module_get(THIS_MODULE);
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
|
||||
|
||||
--- a/drivers/mtd/parsers/Kconfig
|
||||
+++ b/drivers/mtd/parsers/Kconfig
|
||||
@@ -204,3 +204,12 @@ config MTD_SERCOMM_PARTS
|
||||
@@ -219,3 +219,12 @@ config MTD_SERCOMM_PARTS
|
||||
partition map. This partition table contains real partition
|
||||
offsets, which may differ from device to device depending on the
|
||||
number and location of bad blocks on NAND.
|
||||
@ -31,7 +31,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
|
||||
+ formatted DTS.
|
||||
--- a/drivers/mtd/parsers/Makefile
|
||||
+++ b/drivers/mtd/parsers/Makefile
|
||||
@@ -14,3 +14,4 @@ obj-$(CONFIG_MTD_PARSER_TRX) += parser_
|
||||
@@ -15,3 +15,4 @@ obj-$(CONFIG_MTD_PARSER_TRX) += parser_
|
||||
obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpart.o
|
||||
obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
|
||||
obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
|
||||
|
||||
--- a/drivers/mtd/parsers/Kconfig
|
||||
+++ b/drivers/mtd/parsers/Kconfig
|
||||
@@ -211,3 +211,12 @@ config MTD_SERCOMM_PARTS
|
||||
@@ -226,3 +226,12 @@ config MTD_SERCOMM_PARTS
|
||||
partition map. This partition table contains real partition
|
||||
offsets, which may differ from device to device depending on the
|
||||
number and location of bad blocks on NAND.
|
||||
@ -31,7 +31,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
|
||||
+ formatted DTS.
|
||||
--- a/drivers/mtd/parsers/Makefile
|
||||
+++ b/drivers/mtd/parsers/Makefile
|
||||
@@ -15,3 +15,4 @@ obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpa
|
||||
@@ -16,3 +16,4 @@ obj-$(CONFIG_MTD_SERCOMM_PARTS) += scpa
|
||||
obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
|
||||
obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
|
||||
obj-$(CONFIG_MTD_QCOMSMEM_PARTS) += qcomsmempart.o
|
||||
|
@ -52,11 +52,14 @@ ipq40xx_setup_interfaces()
|
||||
cellc,rtl30vw)
|
||||
ucidef_set_interface_lan "lan1 lan2"
|
||||
;;
|
||||
compex,wpj428)
|
||||
ucidef_set_interface_lan "lan1 lan2"
|
||||
;;
|
||||
glinet,gl-b1300)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2" "wan"
|
||||
;;
|
||||
compex,wpj428)
|
||||
ucidef_set_interface_lan "lan1 lan2"
|
||||
mikrotik,wap-ac)
|
||||
ucidef_set_interface_lan "sw-eth1 sw-eth2"
|
||||
;;
|
||||
zte,mf286d)
|
||||
ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
|
||||
|
@ -26,8 +26,8 @@ preinit_set_mac_address() {
|
||||
;;
|
||||
mikrotik,wap-ac)
|
||||
base_mac=$(cat /sys/firmware/mikrotik/hard_config/mac_base)
|
||||
ip link set dev eth0 address "$base_mac"
|
||||
ip link set dev eth1 address $(macaddr_add "$base_mac" 1)
|
||||
ip link set dev sw-eth1 address "$base_mac"
|
||||
ip link set dev sw-eth2 address $(macaddr_add "$base_mac" 1)
|
||||
;;
|
||||
zyxel,nbg6617)
|
||||
base_mac=$(cat /sys/class/net/eth0/address)
|
||||
|
@ -187,6 +187,24 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gmac {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&switch {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&swport4 {
|
||||
status = "okay";
|
||||
label = "sw-eth2";
|
||||
};
|
||||
|
||||
&swport5 {
|
||||
status = "okay";
|
||||
label = "sw-eth1";
|
||||
};
|
||||
|
||||
&wifi0 {
|
||||
status = "okay";
|
||||
|
||||
|
@ -69,5 +69,4 @@ define Device/mikrotik_wap-ac
|
||||
SOC := qcom-ipq4018
|
||||
DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers
|
||||
endef
|
||||
# Missing DSA Setup
|
||||
#TARGET_DEVICES += mikrotik_wap-ac
|
||||
TARGET_DEVICES += mikrotik_wap-ac
|
||||
|
@ -297,9 +297,8 @@
|
||||
compatible = "mediatek,mt7986-auxadc",
|
||||
"mediatek,mt7622-auxadc";
|
||||
reg = <0 0x1100d000 0 0x1000>;
|
||||
clocks = <&infracfg CLK_INFRA_ADC_26M_CK>,
|
||||
<&infracfg CLK_INFRA_ADC_FRC_CK>;
|
||||
clock-names = "main", "32k";
|
||||
clocks = <&infracfg CLK_INFRA_ADC_26M_CK>;
|
||||
clock-names = "main";
|
||||
#io-channel-cells = <1>;
|
||||
};
|
||||
|
||||
@ -349,9 +348,8 @@
|
||||
reg = <0 0x1100c800 0 0x800>;
|
||||
interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&infracfg CLK_INFRA_THERM_CK>,
|
||||
<&infracfg CLK_INFRA_ADC_26M_CK>,
|
||||
<&infracfg CLK_INFRA_ADC_FRC_CK>;
|
||||
clock-names = "therm", "auxadc", "adc_32k";
|
||||
<&infracfg CLK_INFRA_ADC_26M_CK>;
|
||||
clock-names = "therm", "auxadc";
|
||||
mediatek,auxadc = <&auxadc>;
|
||||
mediatek,apmixedsys = <&apmixedsys>;
|
||||
nvmem-cells = <&thermal_calibration>;
|
||||
|
@ -153,7 +153,7 @@ static const struct mtk_gate infra_clks[] = {
|
||||
18),
|
||||
GATE_INFRA1(CLK_INFRA_MSDC_66M_CK, "infra_msdc_66m", "infra_sysaxi_d2",
|
||||
19),
|
||||
GATE_INFRA1(CLK_INFRA_ADC_26M_CK, "infra_adc_26m", "csw_f26m_sel", 20),
|
||||
GATE_INFRA1(CLK_INFRA_ADC_26M_CK, "infra_adc_26m", "infra_adc_frc", 20),
|
||||
GATE_INFRA1(CLK_INFRA_ADC_FRC_CK, "infra_adc_frc", "csw_f26m_sel", 21),
|
||||
GATE_INFRA1(CLK_INFRA_FBIST2FPC_CK, "infra_fbist2fpc", "nfi1x_sel", 23),
|
||||
/* INFRA2 */
|
||||
|
@ -183,7 +183,6 @@ CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_MT65XX=y
|
||||
CONFIG_ICPLUS_PHY=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_IO_URING=y
|
||||
@ -206,7 +205,6 @@ CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MEDIATEK_GE_PHY=y
|
||||
CONFIG_MEDIATEK_MT6577_AUXADC=y
|
||||
CONFIG_MEDIATEK_WATCHDOG=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
|
||||
|
@ -27,16 +27,13 @@ endef
|
||||
|
||||
$(eval $(call KernelPackage,btmtkuart))
|
||||
|
||||
define KernelPackage/sdhci-mtk
|
||||
SUBMENU:=Other modules
|
||||
TITLE:=Mediatek SDHCI driver
|
||||
DEPENDS:=@TARGET_mediatek_mt7622 +kmod-sdhci
|
||||
KCONFIG:=CONFIG_MMC_MTK
|
||||
define KernelPackage/iio-mt6577-auxadc
|
||||
TITLE:=Mediatek AUXADC driver
|
||||
DEPENDS:=@(TARGET_mediatek_mt7622||TARGET_mediatek_mt7623||TARGET_mediatek_filogic)
|
||||
KCONFIG:=CONFIG_MEDIATEK_MT6577_AUXADC
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/mmc/host/mtk-sd.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mtk-sd,1)
|
||||
$(LINUX_DIR)/drivers/iio/adc/mt6577_auxadc.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mt6577_auxadc)
|
||||
$(call AddDepends/iio)
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,sdhci-mtk))
|
||||
|
||||
|
||||
$(eval $(call KernelPackage,iio-mt6577-auxadc))
|
||||
|
@ -6,8 +6,8 @@ platform_do_upgrade() {
|
||||
|
||||
case "$board" in
|
||||
bananapi,bpi-r64)
|
||||
export_bootdevice
|
||||
export_partdevice rootdev 0
|
||||
local rootdev="$(cmdline_get_var root)"
|
||||
rootdev="${rootdev##*/}"
|
||||
case "$rootdev" in
|
||||
mmc*)
|
||||
CI_ROOTDEV="$rootdev"
|
||||
|
@ -96,8 +96,8 @@ CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=15
|
||||
# CONFIG_CPUFREQ_DT is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
@ -231,7 +231,6 @@ CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MEDIATEK_GE_PHY=y
|
||||
CONFIG_MEDIATEK_MT6577_AUXADC=y
|
||||
CONFIG_MEDIATEK_WATCHDOG=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
|
||||
@ -258,6 +257,7 @@ CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||
CONFIG_MTD_SPLIT_FIT_FW=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD_UBI_BEB_LIMIT=20
|
||||
CONFIG_MTD_UBI_FASTMAP=y
|
||||
CONFIG_MTD_UBI_BLOCK=y
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
# CONFIG_MTK_CMDQ is not set
|
||||
|
@ -267,7 +267,6 @@ CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_MT65XX=y
|
||||
CONFIG_ICPLUS_PHY=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
@ -322,7 +321,6 @@ CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MDIO_GPIO=y
|
||||
CONFIG_MEDIATEK_GE_PHY=y
|
||||
CONFIG_MEDIATEK_MT6577_AUXADC=y
|
||||
CONFIG_MEDIATEK_WATCHDOG=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_MEMORY=y
|
||||
|
@ -1,68 +0,0 @@
|
||||
--- a/drivers/iio/adc/mt6577_auxadc.c
|
||||
+++ b/drivers/iio/adc/mt6577_auxadc.c
|
||||
@@ -42,6 +42,7 @@ struct mtk_auxadc_compatible {
|
||||
struct mt6577_auxadc_device {
|
||||
void __iomem *reg_base;
|
||||
struct clk *adc_clk;
|
||||
+ struct clk *adc_32k_clk;
|
||||
struct mutex lock;
|
||||
const struct mtk_auxadc_compatible *dev_comp;
|
||||
};
|
||||
@@ -222,6 +223,14 @@ static int __maybe_unused mt6577_auxadc_
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ if (!IS_ERR(adc_dev->adc_32k_clk)) {
|
||||
+ ret = clk_prepare_enable(adc_dev->adc_32k_clk);
|
||||
+ if (ret) {
|
||||
+ pr_err("failed to enable auxadc clock\n");
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
|
||||
MT6577_AUXADC_PDN_EN, 0);
|
||||
mdelay(MT6577_AUXADC_POWER_READY_MS);
|
||||
@@ -236,6 +243,8 @@ static int __maybe_unused mt6577_auxadc_
|
||||
|
||||
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
|
||||
0, MT6577_AUXADC_PDN_EN);
|
||||
+
|
||||
+ clk_disable_unprepare(adc_dev->adc_32k_clk);
|
||||
clk_disable_unprepare(adc_dev->adc_clk);
|
||||
|
||||
return 0;
|
||||
@@ -277,6 +286,17 @@ static int mt6577_auxadc_probe(struct pl
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ adc_dev->adc_32k_clk = devm_clk_get(&pdev->dev, "32k");
|
||||
+ if (IS_ERR(adc_dev->adc_32k_clk)) {
|
||||
+ dev_err(&pdev->dev, "failed to get auxadc 32k clock\n");
|
||||
+ } else {
|
||||
+ ret = clk_prepare_enable(adc_dev->adc_32k_clk);
|
||||
+ if (ret) {
|
||||
+ dev_err(&pdev->dev, "failed to enable auxadc 32k clock\n");
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
adc_clk_rate = clk_get_rate(adc_dev->adc_clk);
|
||||
if (!adc_clk_rate) {
|
||||
ret = -EINVAL;
|
||||
@@ -306,6 +326,7 @@ err_power_off:
|
||||
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
|
||||
0, MT6577_AUXADC_PDN_EN);
|
||||
err_disable_clk:
|
||||
+ clk_disable_unprepare(adc_dev->adc_32k_clk);
|
||||
clk_disable_unprepare(adc_dev->adc_clk);
|
||||
return ret;
|
||||
}
|
||||
@@ -320,6 +341,7 @@ static int mt6577_auxadc_remove(struct p
|
||||
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
|
||||
0, MT6577_AUXADC_PDN_EN);
|
||||
|
||||
+ clk_disable_unprepare(adc_dev->adc_32k_clk);
|
||||
clk_disable_unprepare(adc_dev->adc_clk);
|
||||
|
||||
return 0;
|
@ -1,15 +1,16 @@
|
||||
From 44ae4ed142265a6d50a9d3e6f4c395f97b6849ab Mon Sep 17 00:00:00 2001
|
||||
From: Zhanyong Wang <zhanyong.wang@mediatek.com>
|
||||
Date: Sat, 6 Nov 2021 20:06:30 +0800
|
||||
Subject: [PATCH 2/5] nvmem: mtk-efuse: support minimum one byte access stride
|
||||
and granularity
|
||||
From 98e2c4efae214fb7086cac9117616eb6ea11475d Mon Sep 17 00:00:00 2001
|
||||
From: Chunfeng Yun <chunfeng.yun@mediatek.com>
|
||||
Date: Thu, 9 Dec 2021 17:42:34 +0000
|
||||
Subject: [PATCH] nvmem: mtk-efuse: support minimum one byte access stride and
|
||||
granularity
|
||||
|
||||
In order to support nvmem bits property, should support minimum 1 byte
|
||||
read stride and minimum 1 byte read granularity at the same time.
|
||||
|
||||
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
|
||||
Signed-off-by: Zhanyong Wang <zhanyong.wang@mediatek.com>
|
||||
Change-Id: Iafe1ebf195d58a3e9e3518913f795d14a01dfd3b
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20211209174235.14049-4-srinivas.kandagatla@linaro.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/mtk-efuse.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
@ -70,15 +70,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
struct mtk_thermal;
|
||||
|
||||
struct thermal_bank_cfg {
|
||||
@@ -279,6 +316,7 @@ struct mtk_thermal {
|
||||
|
||||
struct clk *clk_peri_therm;
|
||||
struct clk *clk_auxadc;
|
||||
+ struct clk *clk_adc_32k;
|
||||
/* lock: for getting and putting banks */
|
||||
struct mutex lock;
|
||||
|
||||
@@ -386,6 +424,14 @@ static const int mt7622_mux_values[MT762
|
||||
@@ -386,6 +423,14 @@ static const int mt7622_mux_values[MT762
|
||||
static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 };
|
||||
static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, };
|
||||
|
||||
@ -93,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/*
|
||||
* The MT8173 thermal controller has four banks. Each bank can read up to
|
||||
* four temperature sensors simultaneously. The MT8173 has a total of 5
|
||||
@@ -549,6 +595,30 @@ static const struct mtk_thermal_data mt8
|
||||
@@ -549,6 +594,30 @@ static const struct mtk_thermal_data mt8
|
||||
.version = MTK_THERMAL_V1,
|
||||
};
|
||||
|
||||
@ -124,7 +116,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/**
|
||||
* raw_to_mcelsius - convert a raw ADC value to mcelsius
|
||||
* @mt: The thermal controller
|
||||
@@ -603,6 +673,22 @@ static int raw_to_mcelsius_v2(struct mtk
|
||||
@@ -603,6 +672,22 @@ static int raw_to_mcelsius_v2(struct mtk
|
||||
return (format_2 - tmp) * 100;
|
||||
}
|
||||
|
||||
@ -147,7 +139,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
/**
|
||||
* mtk_thermal_get_bank - get bank
|
||||
* @bank: The bank
|
||||
@@ -659,9 +745,12 @@ static int mtk_thermal_bank_temperature(
|
||||
@@ -659,9 +744,12 @@ static int mtk_thermal_bank_temperature(
|
||||
if (mt->conf->version == MTK_THERMAL_V1) {
|
||||
temp = raw_to_mcelsius_v1(
|
||||
mt, conf->bank_data[bank->id].sensors[i], raw);
|
||||
@ -161,7 +153,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -887,6 +976,26 @@ static int mtk_thermal_extract_efuse_v2(
|
||||
@@ -887,6 +975,26 @@ static int mtk_thermal_extract_efuse_v2(
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -188,7 +180,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
static int mtk_thermal_get_calibration_data(struct device *dev,
|
||||
struct mtk_thermal *mt)
|
||||
{
|
||||
@@ -897,6 +1006,7 @@ static int mtk_thermal_get_calibration_d
|
||||
@@ -897,6 +1005,7 @@ static int mtk_thermal_get_calibration_d
|
||||
|
||||
/* Start with default values */
|
||||
mt->adc_ge = 512;
|
||||
@ -196,7 +188,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
for (i = 0; i < mt->conf->num_sensors; i++)
|
||||
mt->vts[i] = 260;
|
||||
mt->degc_cali = 40;
|
||||
@@ -924,8 +1034,10 @@ static int mtk_thermal_get_calibration_d
|
||||
@@ -924,8 +1033,10 @@ static int mtk_thermal_get_calibration_d
|
||||
|
||||
if (mt->conf->version == MTK_THERMAL_V1)
|
||||
ret = mtk_thermal_extract_efuse_v1(mt, buf);
|
||||
@ -208,7 +200,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
if (ret) {
|
||||
dev_info(dev, "Device not calibrated, using default calibration values\n");
|
||||
@@ -956,6 +1068,10 @@ static const struct of_device_id mtk_the
|
||||
@@ -956,6 +1067,10 @@ static const struct of_device_id mtk_the
|
||||
.data = (void *)&mt7622_thermal_data,
|
||||
},
|
||||
{
|
||||
@ -219,40 +211,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
.compatible = "mediatek,mt8183-thermal",
|
||||
.data = (void *)&mt8183_thermal_data,
|
||||
}, {
|
||||
@@ -1009,6 +1125,12 @@ static int mtk_thermal_probe(struct plat
|
||||
if (IS_ERR(mt->clk_auxadc))
|
||||
return PTR_ERR(mt->clk_auxadc);
|
||||
|
||||
+ if (mt->conf->version == MTK_THERMAL_V3) {
|
||||
+ mt->clk_adc_32k = devm_clk_get(&pdev->dev, "adc_32k");
|
||||
+ if (IS_ERR(mt->clk_adc_32k))
|
||||
+ return PTR_ERR(mt->clk_adc_32k);
|
||||
+ }
|
||||
+
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
mt->thermal_base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(mt->thermal_base))
|
||||
@@ -1058,10 +1180,18 @@ static int mtk_thermal_probe(struct plat
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ if (mt->conf->version == MTK_THERMAL_V3) {
|
||||
+ ret = clk_prepare_enable(mt->clk_adc_32k);
|
||||
+ if (ret) {
|
||||
+ dev_err(&pdev->dev, "Can't enable auxadc 32k clk: %d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
ret = clk_prepare_enable(mt->clk_auxadc);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret);
|
||||
- return ret;
|
||||
+ goto err_disable_clk_adc_32k;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(mt->clk_peri_therm);
|
||||
@@ -1070,7 +1200,8 @@ static int mtk_thermal_probe(struct plat
|
||||
@@ -1070,7 +1185,8 @@ static int mtk_thermal_probe(struct plat
|
||||
goto err_disable_clk_auxadc;
|
||||
}
|
||||
|
||||
@ -262,23 +221,3 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
mtk_thermal_turn_on_buffer(apmixed_base);
|
||||
mtk_thermal_release_periodic_ts(mt, auxadc_base);
|
||||
}
|
||||
@@ -1099,6 +1230,9 @@ err_disable_clk_peri_therm:
|
||||
clk_disable_unprepare(mt->clk_peri_therm);
|
||||
err_disable_clk_auxadc:
|
||||
clk_disable_unprepare(mt->clk_auxadc);
|
||||
+err_disable_clk_adc_32k:
|
||||
+ if (mt->conf->version == MTK_THERMAL_V3)
|
||||
+ clk_disable_unprepare(mt->clk_adc_32k);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1110,6 +1244,9 @@ static int mtk_thermal_remove(struct pla
|
||||
clk_disable_unprepare(mt->clk_peri_therm);
|
||||
clk_disable_unprepare(mt->clk_auxadc);
|
||||
|
||||
+ if (mt->conf->version == MTK_THERMAL_V3)
|
||||
+ clk_disable_unprepare(mt->clk_adc_32k);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
||||
mtd->type = MTD_NORFLASH;
|
||||
--- a/drivers/mtd/mtdcore.c
|
||||
+++ b/drivers/mtd/mtdcore.c
|
||||
@@ -851,6 +851,17 @@ out_error:
|
||||
@@ -843,6 +843,17 @@ out_error:
|
||||
*/
|
||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||
{
|
||||
|
@ -28,11 +28,6 @@ LOADER_FLASH_START := $(ldrflashstart-y)
|
||||
|
||||
KERNEL_DTB = kernel-bin | append-dtb | lzma
|
||||
|
||||
define Build/edimax-header
|
||||
$(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1)
|
||||
@mv $@.new $@
|
||||
endef
|
||||
|
||||
define Build/jcg-header
|
||||
$(STAGING_DIR_HOST)/bin/jcgimage -v $(1) \
|
||||
$(if $(JCG_MAXSIZE), -m $$(($(subst k, * 1024,$(JCG_MAXSIZE)))),) \
|
||||
|
@ -112,6 +112,7 @@ CONFIG_MODULES_USE_ELF_REL=y
|
||||
# CONFIG_MT7621_WDT is not set
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
|
||||
|
@ -113,6 +113,7 @@ CONFIG_MODULES_USE_ELF_REL=y
|
||||
# CONFIG_MT7621_WDT is not set
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y
|
||||
|
@ -159,6 +159,7 @@ CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_NAND_MT7621=y
|
||||
CONFIG_MTD_NAND_MTK_BMT=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_ROUTERBOOT_PARTS=y
|
||||
|
@ -160,6 +160,7 @@ CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_NAND_MT7621=y
|
||||
CONFIG_MTD_NAND_MTK_BMT=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_ROUTERBOOT_PARTS=y
|
||||
|
@ -117,6 +117,13 @@ ramips_setup_interfaces()
|
||||
ucidef_add_switch "switch0" \
|
||||
"0:lan" "1:lan" "2:lan" "6@eth0"
|
||||
;;
|
||||
kroks,kndrt31r19)
|
||||
ucidef_add_switch "switch0" \
|
||||
"0:lan" "6@eth0"
|
||||
ucidef_add_switch_attr "switch0" "enable" "false"
|
||||
ucidef_set_interface_lan "eth0"
|
||||
ucidef_set_interface "wan" device "/dev/cdc-wdm0" protocol "qmi"
|
||||
;;
|
||||
motorola,mwr03)
|
||||
ucidef_add_switch "switch0" \
|
||||
"1:lan" "2:lan" "3:lan" "0:wan" "6@eth0"
|
||||
@ -132,7 +139,6 @@ ramips_setup_interfaces()
|
||||
ucidef_add_switch "switch0" \
|
||||
"0:wan" "1:lan" "2:lan" "3:lan" "4:lan" "6t@eth0"
|
||||
;;
|
||||
kroks,kndrt31r19|\
|
||||
tplink,tl-mr3020-v3)
|
||||
ucidef_add_switch "switch0" \
|
||||
"0:lan" "6@eth0"
|
||||
|
@ -110,6 +110,7 @@ CONFIG_MODULES_USE_ELF_REL=y
|
||||
CONFIG_MT7621_WDT=y
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PARSER_TRX=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
|
@ -111,6 +111,7 @@ CONFIG_MODULES_USE_ELF_REL=y
|
||||
CONFIG_MT7621_WDT=y
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
|
||||
CONFIG_MTD_PARSER_TRX=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
|
@ -10,8 +10,7 @@ BOARDNAME:=x86
|
||||
FEATURES:=squashfs ext4 vdi vmdk vhdx pcmcia targz fpu boot-part rootfs-part
|
||||
SUBTARGETS:=64 generic legacy geode
|
||||
|
||||
KERNEL_PATCHVER:=5.10
|
||||
KERNEL_TESTING_PATCHVER:=5.15
|
||||
KERNEL_PATCHVER:=5.15
|
||||
|
||||
KERNELNAME:=bzImage
|
||||
|
||||
|
@ -41,24 +41,24 @@ tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_LLVM_BUILD),y) += llvm-bpf
|
||||
|
||||
# builddir dependencies
|
||||
$(curdir)/autoconf/compile := $(curdir)/m4/compile
|
||||
$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkgconf/compile $(curdir)/xz/compile
|
||||
$(curdir)/automake/compile := $(curdir)/autoconf/compile $(curdir)/pkgconf/compile $(curdir)/xz/compile
|
||||
$(curdir)/b43-tools/compile := $(curdir)/bison/compile
|
||||
$(curdir)/bc/compile := $(curdir)/bison/compile $(curdir)/libtool/compile
|
||||
$(curdir)/bison/compile := $(curdir)/flex/compile
|
||||
$(curdir)/cbootimage/compile += $(curdir)/automake/compile
|
||||
$(curdir)/cmake/compile += $(curdir)/libressl/compile $(curdir)/ninja/compile $(curdir)/expat/compile $(curdir)/xz/compile $(curdir)/zlib/compile $(curdir)/zstd/compile
|
||||
$(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile
|
||||
$(curdir)/dosfstools/compile := $(curdir)/automake/compile
|
||||
$(curdir)/e2fsprogs/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/fakeroot/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/findutils/compile := $(curdir)/bison/compile
|
||||
$(curdir)/firmware-utils/compile += $(curdir)/cmake/compile $(curdir)/zlib/compile
|
||||
$(curdir)/firmware-utils/compile += $(curdir)/cmake/compile
|
||||
$(curdir)/flex/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/gengetopt/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/gmp/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/gptfdisk/compile += $(curdir)/e2fsprogs/compile $(curdir)/popt/compile
|
||||
$(curdir)/isl/compile := $(curdir)/gmp/compile
|
||||
$(curdir)/libressl/compile := $(curdir)/pkgconf/compile
|
||||
$(curdir)/libtool/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/automake/compile $(curdir)/missing-macros/compile
|
||||
$(curdir)/libtool/compile := $(curdir)/automake/compile $(curdir)/missing-macros/compile
|
||||
$(curdir)/lzma-old/compile := $(curdir)/zlib/compile
|
||||
$(curdir)/llvm-bpf/compile := $(curdir)/cmake/compile
|
||||
$(curdir)/make-ext4fs/compile := $(curdir)/zlib/compile
|
||||
|
@ -43,9 +43,8 @@ define Host/Install
|
||||
ln -sf aclocal $(STAGING_DIR_HOST)/bin/aclocal-1.15
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
-$(MAKE) -C $(HOST_BUILD_DIR) uninstall
|
||||
$(call Host/Clean/Default)
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -18,4 +18,8 @@ HOST_BUILD_PARALLEL := 1
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -18,4 +18,8 @@ PKG_CPE_ID:=cpe:/a:gnu:bc
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -19,14 +19,14 @@ include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
HOST_CONFIGURE_ARGS += --enable-threads=posix --disable-nls
|
||||
|
||||
define Host/Clean
|
||||
-$(MAKE) -C $(HOST_BUILD_DIR) uninstall
|
||||
$(call Host/Clean/Default)
|
||||
endef
|
||||
|
||||
define Host/Install
|
||||
$(call Host/Install/Default)
|
||||
$(INSTALL_BIN) ./scripts/yacc $(STAGING_DIR_HOST)/bin/yacc
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
rm -f $(STAGING_DIR_HOST)/bin/yacc
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -35,4 +35,9 @@ define Host/Install
|
||||
ln -sf ginstall $(1)/bin/install
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
rm -f $(STAGING_DIR_HOST)/bin/install
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -11,4 +11,8 @@ PKG_HASH:=eab5bdc5ae1df285c59f2a4f140a98fc33678a0bf61bdba67d9436ae26b46f6d
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -24,4 +24,8 @@ ifeq ($(HOST_OS),Darwin)
|
||||
HOST_CFLAGS += -UHAVE_ENDIAN_H
|
||||
endif
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -30,4 +30,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
HOST_MAKE_FLAGS += \
|
||||
SUBDIRS="lib libelf libcpu backends libebl libdwelf libdwfl libdw"
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -25,4 +25,8 @@ HOST_CONFIGURE_VARS += \
|
||||
HOST_CONFIGURE_ARGS += \
|
||||
--with-ipc=tcp
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -28,4 +28,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--disable-nls \
|
||||
--without-selinux
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -26,8 +26,12 @@ define Host/Install
|
||||
$(LN) flex $(STAGING_DIR_HOST)/bin/lex
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
-$(MAKE) -C $(HOST_BUILD_DIR) uninstall
|
||||
rm -f $(STAGING_DIR_HOST)/bin/lex
|
||||
$(call Host/Clean/Default)
|
||||
endef
|
||||
|
||||
|
@ -24,4 +24,8 @@ define Host/Install
|
||||
$(INSTALL_BIN) $(HOST_BUILD_DIR)/flock $(STAGING_DIR_HOST)/bin/
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -f $(STAGING_DIR_HOST)/bin/flock
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -31,4 +31,8 @@ ifeq ($(GNU_HOST_NAME),x86_64-linux-gnux32)
|
||||
HOST_CONFIGURE_ARGS += ABI=x32
|
||||
endif
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -24,4 +24,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--disable-shared \
|
||||
--with-gmp-prefix=$(STAGING_DIR_HOST)
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -34,4 +34,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--with-pic \
|
||||
--disable-tests
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -34,8 +34,11 @@ define Host/Install
|
||||
$(SED) 's,-lstdc++,-luClibc++,g' $(STAGING_DIR_HOST)/bin/libtool-ucxx
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
-$(MAKE) -C $(HOST_BUILD_DIR) uninstall
|
||||
$(call Host/Clean/Default)
|
||||
endef
|
||||
|
||||
|
@ -31,6 +31,7 @@ define Host/Install
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -f $(STAGING_DIR_HOST)/bin/lzma
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -21,9 +21,8 @@ include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
HOST_CONFIGURE_VARS += gl_cv_func_strstr_linear=no
|
||||
|
||||
define Host/Clean
|
||||
-$(MAKE) -C $(HOST_BUILD_DIR) uninstall
|
||||
$(call Host/Clean/Default)
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -25,4 +25,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--with-mpfr=$(TOPDIR)/staging_dir/host \
|
||||
--with-gmp=$(TOPDIR)/staging_dir/host
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -25,4 +25,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--enable-thread-safe \
|
||||
--with-gmp=$(STAGING_DIR_HOST)
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -22,4 +22,8 @@ include $(INCLUDE_DIR)/host-build.mk
|
||||
HOSTCC := $(HOSTCC_NOCACHE)
|
||||
HOSTCXX := $(HOSTCXX_NOCACHE)
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -24,4 +24,8 @@ define Host/Install
|
||||
$(INSTALL_BIN) $(HOST_BUILD_DIR)/src/patchelf $(STAGING_DIR_HOST)/bin/patchelf
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -rf $(STAGING_DIR_HOST)/bin/patchelf
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -21,4 +21,8 @@ define Host/Install
|
||||
$(INSTALL_BIN) $(HOST_BUILD_DIR)/sparse $(STAGING_DIR_HOST)/bin
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -f $(STAGING_DIR_HOST)/bin/sparse
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -28,4 +28,8 @@ HOST_CONFIGURE_ARGS += \
|
||||
--disable-acl \
|
||||
--disable-nls
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -33,4 +33,8 @@ define Host/Install
|
||||
+$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) install xzlinks="unxz xzcat"
|
||||
endef
|
||||
|
||||
define Host/Uninstall
|
||||
-$(call Host/Compile/Default,uninstall)
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
|
@ -32,5 +32,8 @@ define Host/Install
|
||||
$(INSTALL_BIN) $(HOST_BUILD_DIR)/zip $(STAGING_DIR_HOST)/bin/
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -rf $(STAGING_DIR_HOST)/bin/zip
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
#$(eval $(call BuildPackage,zip))
|
||||
|
Loading…
x
Reference in New Issue
Block a user