Initial commit
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled

This commit is contained in:
domenico
2025-06-24 12:51:15 +02:00
commit 27c9d80f51
10493 changed files with 1885777 additions and 0 deletions

242
target/Config.in Normal file
View File

@@ -0,0 +1,242 @@
source "tmp/.config-target.in"
# Kernel/Hardware features
config HAS_TESTING_KERNEL
bool
config HAS_SPE_FPU
depends on powerpc
select HAS_FPU
bool
config HAS_FPU
bool
config HAS_DT_OVERLAY_SUPPORT
bool
config AUDIO_SUPPORT
bool
config GPIO_SUPPORT
bool
config PCI_SUPPORT
select AUDIO_SUPPORT
bool
config PCIE_SUPPORT
bool
config PCMCIA_SUPPORT
bool
config PWM_SUPPORT
bool
config USB_SUPPORT
select AUDIO_SUPPORT
bool
config USB_GADGET_SUPPORT
bool
config RTC_SUPPORT
bool
config BIG_ENDIAN
bool
config USES_DEVICETREE
bool
config USES_INITRAMFS
bool
config USES_SEPARATE_INITRAMFS
bool
config USES_SQUASHFS
bool
config USES_JFFS2
bool
config USES_JFFS2_NAND
bool
config USES_EXT4
bool
config USES_TARGZ
bool
config USES_CPIOGZ
bool
config USES_MINOR
bool
config USES_UBIFS
bool
select NAND_SUPPORT
config LOW_MEMORY_FOOTPRINT
bool
config SMALL_FLASH
bool
config NOMMU
bool
config HAS_MIPS16
depends on (mips || mipsel || mips64 || mips64el)
bool
config RFKILL_SUPPORT
bool
config EMMC_SUPPORT
bool
config NAND_SUPPORT
bool
config LEGACY_SDCARD_SUPPORT
bool
config ARCH_64BIT
bool
config VIRTIO_SUPPORT
bool
config USES_ROOTFS_PART
bool
config USES_BOOT_PART
bool
# Architecture selection
config aarch64
select ARCH_64BIT
bool
config aarch64_be
select ARCH_64BIT
select BIG_ENDIAN
bool
config arc
bool
config arceb
select BIG_ENDIAN
bool
config arm
bool
config armeb
select BIG_ENDIAN
bool
config arm_v6
bool
config arm_v7
bool
config i386
bool
config i686
bool
config loongarch64
select ARCH_64BIT
bool
config m68k
bool
config mips
select BIG_ENDIAN
bool
config mipsel
bool
config mips64
select BIG_ENDIAN
select ARCH_64BIT
bool
config mips64el
select ARCH_64BIT
bool
config powerpc
select BIG_ENDIAN
bool
config powerpc64
select BIG_ENDIAN
select ARCH_64BIT
bool
config riscv64
select ARCH_64BIT
bool
config sh3
bool
config sh3eb
select BIG_ENDIAN
bool
config sh4
bool
config sh4eb
select BIG_ENDIAN
bool
config sparc
select BIG_ENDIAN
bool
config x86_64
select ARCH_64BIT
bool
config ARCH
string
default "aarch64" if aarch64
default "aarch64_be" if aarch64_be
default "arc" if arc
default "arceb" if arceb
default "arm" if arm
default "armeb" if armeb
default "i386" if i386
default "i686" if i686
default "loongarch64" if loongarch64
default "m68k" if m68k
default "mips" if mips
default "mipsel" if mipsel
default "mips64" if mips64
default "mips64el" if mips64el
default "powerpc" if powerpc
default "powerpc64" if powerpc64
default "riscv64" if riscv64
default "sh3" if sh3
default "sh3eb" if sh3eb
default "sh4" if sh4
default "sh4eb" if sh4eb
default "sparc" if sparc
default "x86_64" if x86_64

30
target/Makefile Normal file
View File

@@ -0,0 +1,30 @@
#
# Copyright (C) 2007 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
curdir:=target
$(curdir)/subtargets:=install
$(curdir)/builddirs:=linux sdk imagebuilder toolchain llvm-bpf
$(curdir)/builddirs-default:=linux
$(curdir)/builddirs-install:=\
linux \
$(if $(CONFIG_SDK),sdk) \
$(if $(CONFIG_IB),imagebuilder) \
$(if $(CONFIG_MAKE_TOOLCHAIN),toolchain) \
$(if $(CONFIG_SDK_LLVM_BPF),llvm-bpf)
$(curdir)/sdk/install:=$(curdir)/linux/install
$(curdir)/imagebuilder/install:=$(curdir)/linux/install
$(curdir)//compile = $(STAGING_DIR)/.prepared $(BIN_DIR)
$(eval $(call stampfile,$(curdir),target,prereq,.config))
$(eval $(call stampfile,$(curdir),target,compile,$(TMP_DIR)/.build))
$(eval $(call stampfile,$(curdir),target,install,$(TMP_DIR)/.build))
$($(curdir)/stamp-install): $($(curdir)/stamp-compile)
$(eval $(call subdir,$(curdir)))

View File

@@ -0,0 +1,17 @@
config IB
bool "Build the OpenWrt Image Builder"
depends on !EXTERNAL_TOOLCHAIN
default BUILDBOT
help
This is essentially a stripped-down version of the buildroot
with precompiled packages, kernel image and image building tools.
You can use it to generate custom images without compiling anything
config IB_STANDALONE
bool "Include package repositories"
default y if !BUILDBOT
depends on IB
help
Disabling this option will cause the ImageBuilder to embed only
toolchain and kmod packages while all other ipk archives will be
fetched from online repositories.

View File

@@ -0,0 +1,150 @@
#
# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk
override MAKEFLAGS=
IB_NAME:=$(VERSION_DIST_SANITIZED)-imagebuilder-$(if $(CONFIG_VERSION_FILENAMES),$(VERSION_NUMBER)-)$(BOARD)-$(SUBTARGET).$(HOST_OS)-$(HOST_ARCH)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(IB_NAME)
IB_KDIR:=$(patsubst $(TOPDIR)/%,$(PKG_BUILD_DIR)/%,$(KERNEL_BUILD_DIR))
IB_LDIR:=$(patsubst $(TOPDIR)/%,$(PKG_BUILD_DIR)/%,$(LINUX_DIR))
IB_DTSDIR:=$(patsubst $(TOPDIR)/%,$(PKG_BUILD_DIR)/%,$(LINUX_DIR))/arch/$(LINUX_KARCH)/boot/dts/
IB_IDIR:=$(patsubst $(TOPDIR)/%,$(PKG_BUILD_DIR)/%,$(STAGING_DIR_IMAGE))
BUNDLER_PATH := $(subst $(space),:,$(filter-out $(TOPDIR)/%,$(subst :,$(space),$(PATH))))
BUNDLER_COMMAND := PATH=$(BUNDLER_PATH) $(XARGS) $(SCRIPT_DIR)/bundle-libraries.sh $(PKG_BUILD_DIR)/staging_dir/host
PACKAGE_SUFFIX:=$(if $(CONFIG_USE_APK),apk,ipk)
all: compile
$(BIN_DIR)/$(IB_NAME).tar.zst: clean
rm -rf $(PKG_BUILD_DIR)
mkdir -p $(IB_KDIR) $(IB_LDIR) $(PKG_BUILD_DIR)/staging_dir/host/lib \
$(PKG_BUILD_DIR)/target/linux $(PKG_BUILD_DIR)/scripts $(IB_DTSDIR)
-cp $(TOPDIR)/.config $(PKG_BUILD_DIR)/.config
$(SED) 's/^CONFIG_BINARY_FOLDER=.*/# CONFIG_BINARY_FOLDER is not set/' $(PKG_BUILD_DIR)/.config
$(SED) 's/^CONFIG_DOWNLOAD_FOLDER=.*/# CONFIG_DOWNLOAD_FOLDER is not set/' $(PKG_BUILD_DIR)/.config
$(CP) -L \
$(INCLUDE_DIR) $(SCRIPT_DIR) \
$(TOPDIR)/rules.mk \
./files/Makefile \
$(TMP_DIR)/.targetinfo \
$(TMP_DIR)/.packageinfo \
$(PKG_BUILD_DIR)/
$(INSTALL_DIR) $(PKG_BUILD_DIR)/packages
ifneq ($(CONFIG_USE_APK),)
ifeq ($(CONFIG_IB_STANDALONE),)
$(call FeedSourcesAppendAPK,$(PKG_BUILD_DIR)/repositories)
$(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories
endif
$(INSTALL_DATA) ./files/README.apk.md $(PKG_BUILD_DIR)/packages/README.md
else
ifeq ($(CONFIG_IB_STANDALONE),)
echo '## Remote package repositories' >> $(PKG_BUILD_DIR)/repositories.conf
$(call FeedSourcesAppendOPKG,$(PKG_BUILD_DIR)/repositories.conf)
$(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories.conf
endif
# create an empty package index so `opkg` doesn't report an error
touch $(PKG_BUILD_DIR)/packages/Packages
$(INSTALL_DATA) ./files/README.opkg.md $(PKG_BUILD_DIR)/packages/README.md
echo '' >> $(PKG_BUILD_DIR)/repositories.conf
echo '## This is the local package repository, do not remove!' >> $(PKG_BUILD_DIR)/repositories.conf
echo 'src imagebuilder file:packages' >> $(PKG_BUILD_DIR)/repositories.conf
endif
ifeq ($(CONFIG_BUILDBOT),)
ifeq ($(CONFIG_IB_STANDALONE),)
$(FIND) $(call FeedPackageDir,libc) -type f \
\( -name 'libc_*.$(PACKAGE_SUFFIX)' -or -name 'kernel_*.$(PACKAGE_SUFFIX)' -or -name 'kmod-*.$(PACKAGE_SUFFIX)' \) \
-exec $(CP) -t $(PKG_BUILD_DIR)/packages {} +
else
$(FIND) $(wildcard $(PACKAGE_SUBDIRS)) -type f -name '*.$(PACKAGE_SUFFIX)' \
-exec $(CP) -t $(PKG_BUILD_DIR)/packages/ {} +
endif
else
$(FIND) $(call FeedPackageDir,libc) -type f \
\( -name 'libc_*.$(PACKAGE_SUFFIX)' -or -name 'kernel_*.$(PACKAGE_SUFFIX)' \) \
-exec $(CP) -t $(IB_LDIR)/ {} +
endif
ifneq ($(CONFIG_USE_APK),y)
ifneq ($(CONFIG_SIGNATURE_CHECK),)
echo '' >> $(PKG_BUILD_DIR)/repositories.conf
echo 'option check_signature' >> $(PKG_BUILD_DIR)/repositories.conf
$(INSTALL_DIR) $(PKG_BUILD_DIR)/keys
$(CP) -L $(STAGING_DIR_ROOT)/etc/opkg/keys/ $(PKG_BUILD_DIR)/
$(CP) -L $(STAGING_DIR_ROOT)/usr/sbin/opkg-key $(PKG_BUILD_DIR)/scripts/
endif
endif
$(CP) -L $(TOPDIR)/target/linux/Makefile $(PKG_BUILD_DIR)/target/linux
$(CP) -L $(TOPDIR)/target/linux/generic $(PKG_BUILD_DIR)/target/linux
# check if board is installed from a feeds subdirectory
if [ -d $(TOPDIR)/target/linux/feeds/$(BOARD) ]; then \
mkdir -p $(PKG_BUILD_DIR)/target/linux/feeds; \
$(CP) -L $(TOPDIR)/target/linux/feeds/$(BOARD) $(PKG_BUILD_DIR)/target/linux/feeds; \
else \
$(CP) -L $(TOPDIR)/target/linux/$(BOARD) $(PKG_BUILD_DIR)/target/linux; \
fi
if [ -d $(TOPDIR)/staging_dir/host/lib/grub ]; then \
$(CP) $(TOPDIR)/staging_dir/host/lib/grub/ $(PKG_BUILD_DIR)/staging_dir/host/lib; \
fi
rm -rf \
$(PKG_BUILD_DIR)/target/linux/*/files{,-*} \
$(PKG_BUILD_DIR)/target/linux/*/patches{,-*} \
$(PKG_BUILD_DIR)/target/linux/generic/{pending,backport,hack}{,-*}
-cp $(KERNEL_BUILD_DIR)/* $(IB_KDIR)/ # don't copy subdirectories here
-cp $(LINUX_DIR)/.config $(IB_LDIR)/
rm -f $(IB_KDIR)/root.*
rm -f $(IB_KDIR)/vmlinux.debug
# remove any file for initramfs and Per Device Rootfs initramfs files
rm -f $(IB_KDIR)/vmlinux-initramfs*
rm -f $(IB_KDIR)/Image-initramfs*
if [ -x $(LINUX_DIR)/scripts/dtc/dtc ]; then \
$(INSTALL_DIR) $(IB_LDIR)/scripts/dtc; \
$(INSTALL_BIN) $(LINUX_DIR)/scripts/dtc/dtc $(IB_LDIR)/scripts/dtc/dtc; \
fi
if [ -d $(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/dts ]; then \
$(CP) -L $(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/dts/* $(IB_DTSDIR); \
fi
$(SED) 's,^# REVISION:=.*,REVISION:=$(REVISION),g' $(PKG_BUILD_DIR)/include/version.mk
$(SED) 's,^# SOURCE_DATE_EPOCH:=.*,SOURCE_DATE_EPOCH:=$(SOURCE_DATE_EPOCH),g' $(PKG_BUILD_DIR)/include/version.mk
$(SED) '/LINUX_VERMAGIC:=/ { s,unknown,$(LINUX_VERMAGIC),g }' $(PKG_BUILD_DIR)/include/kernel.mk
find $(PKG_BUILD_DIR) -name CVS -o -name .git -o -name .svn \
| $(XARGS) rm -rf
$(INSTALL_DIR) $(IB_IDIR)
-$(CP) $(STAGING_DIR_IMAGE)/* $(IB_IDIR)/
$(INSTALL_DIR) $(PKG_BUILD_DIR)/staging_dir/host/bin
$(CP) $(STAGING_DIR_HOST)/bin/* $(PKG_BUILD_DIR)/staging_dir/host/bin/
(cd $(PKG_BUILD_DIR); find staging_dir/host/bin/ $(IB_LDIR)/scripts/dtc/ -type f | \
$(BUNDLER_COMMAND))
$(CP) $(TOPDIR)/staging_dir/host/lib/libfakeroot* $(PKG_BUILD_DIR)/staging_dir/host/lib
STRIP=$(STAGING_DIR_HOST)/bin/sstrip $(SCRIPT_DIR)/rstrip.sh $(PKG_BUILD_DIR)/staging_dir/host/bin/
(cd $(BUILD_DIR); \
tar -I '$(STAGING_DIR_HOST)/bin/zstd -T0 --ultra -20' -cf $@ $(IB_NAME) \
--mtime="$(shell date --date=@$(SOURCE_DATE_EPOCH))"; \
)
download:
prepare:
compile: $(BIN_DIR)/$(IB_NAME).tar.zst
install: compile
clean: FORCE
rm -rf $(PKG_BUILD_DIR) $(BIN_DIR)/$(IB_NAME).tar.zst

View File

@@ -0,0 +1,351 @@
# Makefile for OpenWrt
#
# Copyright (C) 2007-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
TOPDIR:=${CURDIR}
LC_ALL:=C
LANG:=C
export TOPDIR LC_ALL LANG
export OPENWRT_VERBOSE=s
all: help
export ORIG_PATH:=$(if $(ORIG_PATH),$(ORIG_PATH),$(PATH))
export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
ifneq ($(OPENWRT_BUILD),1)
override OPENWRT_BUILD=1
export OPENWRT_BUILD
endif
include rules.mk
include $(INCLUDE_DIR)/debug.mk
include $(INCLUDE_DIR)/depends.mk
include $(INCLUDE_DIR)/rootfs.mk
include $(INCLUDE_DIR)/version.mk
export REVISION
export SOURCE_DATE_EPOCH
define Helptext
Available Commands:
help: This help text
info: Show a list of available target profiles
clean: Remove images and temporary build files
image: Build an image (see below for more information).
manifest: Show all package that will be installed into the image
package_whatdepends: Show which packages have a dependency on this
package_depends: Show installation dependency of the package
image:
By default 'make image' will create an image with the default
target profile and package set. You can use the following parameters
to change that:
make image PROFILE="<profilename>" # override the default target profile
make image PACKAGES="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
make image FILES="<path>" # include extra files from <path>
make image BIN_DIR="<path>" # alternative output directory for the images
make image EXTRA_IMAGE_NAME="<string>" # Add this to the output image filename (sanitized)
make image DISABLED_SERVICES="<svc1> [<svc2> [<svc3> ..]]" # Which services in /etc/init.d/ should be disabled
make image ADD_LOCAL_KEY=1 # store locally generated signing key in built images
make image ROOTFS_PARTSIZE="<size>" # override the default rootfs partition size in MegaBytes
manifest:
List "all" packages which get installed into the image.
You can use the following parameters:
make manifest PROFILE="<profilename>" # override the default target profile
make manifest PACKAGES="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
make manifest STRIP_ABI=1 # remove ABI version from printed package names
package_whatdepends:
List "all" packages that have a dependency on this package
You can use the following parameters:
make package_whatdepends PACKAGE="<pkg>"
package_depends:
List "all" packages dependency of the package
You can use the following parameters:
make package_depends PACKAGE="<pkg>"
endef
$(eval $(call shexport,Helptext))
help: FORCE
echo "$$$(call shvar,Helptext)"
# override variables from rules.mk
PACKAGE_DIR:=$(TOPDIR)/packages
LISTS_DIR:=$(subst $(space),/,$(patsubst %,..,$(subst /,$(space),$(TARGET_DIR))))$(DL_DIR)
PACKAGE_DIR_ALL:=$(TOPDIR)/packages
export OPKG_KEYS:=$(TOPDIR)/keys
OPKG:=$(call opkg,$(TARGET_DIR)) \
-f $(TOPDIR)/repositories.conf \
--verify-program $(SCRIPT_DIR)/opkg-key \
--cache $(DL_DIR) \
--lists-dir $(LISTS_DIR)
APK:=$(call apk,$(TARGET_DIR)) \
--cache-dir $(DL_DIR) \
--allow-untrusted
include $(INCLUDE_DIR)/target.mk
-include .profiles.mk
USER_PROFILE ?= $(firstword $(PROFILE_NAMES))
PROFILE_LIST = $(foreach p,$(PROFILE_NAMES), \
echo '$(patsubst DEVICE_%,%,$(p)):'; $(if $($(p)_NAME),echo ' $(subst ','"'"',$($(p)_NAME))'; ) \
echo ' Packages: $($(p)_PACKAGES)'; echo ' hasImageMetadata: $($(p)_HAS_IMAGE_METADATA)'; \
$(if $($(p)_SUPPORTED_DEVICES),echo ' SupportedDevices: $($(p)_SUPPORTED_DEVICES)';) )
.profiles.mk: .targetinfo
@$(SCRIPT_DIR)/target-metadata.pl profile_mk $< '$(BOARD)/$(SUBTARGET)' > $@
staging_dir/host/.prereq-build: include/prereq-build.mk
mkdir -p tmp
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq IB=1 2>/dev/null || { \
echo "Prerequisite check failed. Use FORCE=1 to override."; \
false; \
}
ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
echo "Preparation failed."; \
false; \
}
endif
touch $@
_call_info: FORCE
echo 'Current Target: "$(TARGETID)"'
echo 'Current Architecture: "$(ARCH)"'
echo 'Current Revision: "$(REVISION)"'
echo 'Default Packages: $(DEFAULT_PACKAGES)'
echo 'Available Profiles:'
echo; $(PROFILE_LIST)
BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
# "-pkgname" in the package list means remove "pkgname" from the package list
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
BUILD_PACKAGES:=$(USER_PACKAGES) $(BUILD_PACKAGES)
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
PACKAGES:=
_call_image: staging_dir/host/.prereq-build
echo 'Building images for $(BOARD)$(if $($(USER_PROFILE)_NAME), - $($(USER_PROFILE)_NAME))'
echo 'Packages: $(BUILD_PACKAGES)'
echo
rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
$(MAKE) package_reload
$(MAKE) package_install
$(MAKE) -s prepare_rootfs
$(MAKE) -s build_image
$(MAKE) -s json_overview_image_info
$(MAKE) -s checksum
_call_manifest: FORCE
rm -rf $(TARGET_DIR)
mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
$(MAKE) package_reload >/dev/null
$(MAKE) package_install >/dev/null
ifeq ($(CONFIG_USE_APK),)
$(OPKG) list-installed $(if $(STRIP_ABI),--strip-abi)
else
$(APK) list --quiet --manifest --no-network
endif
package_index: FORCE
@echo >&2
@echo Building package index... >&2
@mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
ifeq ($(CONFIG_USE_APK),)
(cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
gzip -9nc Packages > Packages.gz; \
$(if $(CONFIG_SIGNATURE_CHECK), \
$(STAGING_DIR_HOST)/bin/usign -S -m Packages -s $(BUILD_KEY)) \
) >/dev/null 2>/dev/null
$(OPKG) update >&2 || true
else
(cd $(PACKAGE_DIR); $(APK) mkndx --output packages.adb *.apk) >&2
endif
package_reload:
ifeq ($(CONFIG_USE_APK),)
if [ -d "$(PACKAGE_DIR)" ] && ( \
[ ! -f "$(PACKAGE_DIR)/Packages" ] || \
[ ! -f "$(PACKAGE_DIR)/Packages.gz" ] || \
[ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ] ); then \
echo "Package list missing or not up-to-date, generating it." >&2 ;\
$(MAKE) package_index; \
else \
mkdir -p $(TARGET_DIR)/tmp; \
$(OPKG) update >&2 || true; \
fi
else
if [ -d "$(PACKAGE_DIR)" ] && ( \
[ ! -f "$(PACKAGE_DIR)/packages.adb" ] || \
[ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/packages.adb`" ] ); then \
echo "Package list missing or not up-to-date, generating it." >&2 ;\
$(MAKE) package_index; \
else \
mkdir -p $(TARGET_DIR)/tmp; \
$(APK) update >&2 || true; \
fi
endif
package_list: FORCE
@$(MAKE) -s package_reload
ifeq ($(CONFIG_USE_APK),)
@$(OPKG) list --size 2>/dev/null
else
@$(APK) list --size 2>/dev/null
endif
package_install: FORCE
@echo
@echo Installing packages...
ifeq ($(CONFIG_USE_APK),)
$(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/libc_*.ipk $(PACKAGE_DIR)/libc_*.ipk))
$(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/kernel_*.ipk $(PACKAGE_DIR)/kernel_*.ipk))
$(OPKG) install $(BUILD_PACKAGES)
else
$(APK) add --initdb --no-scripts $(firstword $(wildcard $(LINUX_DIR)/libc-*.apk $(PACKAGE_DIR)/libc_*.apk))
$(APK) add --no-scripts $(firstword $(wildcard $(LINUX_DIR)/kernel-*.apk $(PACKAGE_DIR)/kernel_*.apk))
$(APK) add --no-scripts $(BUILD_PACKAGES)
endif
prepare_rootfs: FORCE
@echo
@echo Finalizing root filesystem...
$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
ifeq ($(CONFIG_USE_APK),)
$(if $(CONFIG_SIGNATURE_CHECK), \
$(if $(ADD_LOCAL_KEY), \
OPKG_KEYS=$(TARGET_DIR)/etc/opkg/keys/ \
$(SCRIPT_DIR)/opkg-key add $(BUILD_KEY).pub \
) \
)
endif
$(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES))
build_image: FORCE
@echo
@echo Building images...
rm -rf $(BUILD_DIR)/json_info_files/
if [ -d "target/linux/feeds/$(BOARD)" ]; then \
$(NO_TRACE_MAKE) -C target/linux/feeds/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \
$(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)"); \
else \
$(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \
$(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)"); \
fi
$(BIN_DIR)/profiles.json: FORCE
$(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
WORK_DIR=$(BUILD_DIR)/json_info_files \
$(SCRIPT_DIR)/json_overview_image_info.py $@ \
)
json_overview_image_info: $(BIN_DIR)/profiles.json
checksum: FORCE
@echo
@echo Calculating checksums...
@$(call sha256sums,$(BIN_DIR))
clean:
rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
info:
(unset PROFILE FILES PACKAGES MAKEFLAGS; $(MAKE) -s _call_info)
PROFILE_FILTER = $(filter DEVICE_$(PROFILE) $(PROFILE),$(PROFILE_NAMES))
_check_profile: FORCE
ifneq ($(PROFILE),)
ifeq ($(PROFILE_FILTER),)
@echo 'Profile "$(PROFILE)" does not exist!'
@echo 'Use "make info" to get a list of available profile names.'
@exit 1
endif
endif
_check_keys: FORCE
ifeq ($(CONFIG_USE_APK),)
ifneq ($(CONFIG_SIGNATURE_CHECK),)
@if [ ! -s $(BUILD_KEY) -o ! -s $(BUILD_KEY).pub ]; then \
echo Generate local signing keys... >&2; \
$(STAGING_DIR_HOST)/bin/usign -G \
-s $(BUILD_KEY) -p $(BUILD_KEY).pub -c "Local build key"; \
$(SCRIPT_DIR)/opkg-key add $(BUILD_KEY).pub; \
fi
if [ ! -s $(BUILD_KEY).ucert ]; then \
echo Generate local certificate... >&2; \
$(STAGING_DIR_HOST)/bin/ucert -I \
-c $(BUILD_KEY).ucert \
-p $(BUILD_KEY).pub \
-s $(BUILD_KEY); \
fi
endif
else
# TODO
endif
image:
$(MAKE) -s _check_profile
$(MAKE) -s _check_keys
(unset PROFILE FILES PACKAGES MAKEFLAGS; \
$(MAKE) -s _call_image \
$(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER)") \
$(if $(FILES),USER_FILES="$(FILES)") \
$(if $(PACKAGES),USER_PACKAGES="$(PACKAGES)") \
$(if $(BIN_DIR),BIN_DIR="$(BIN_DIR)") \
$(if $(DISABLED_SERVICES),DISABLED_SERVICES="$(DISABLED_SERVICES)") \
$(if $(ROOTFS_PARTSIZE),CONFIG_TARGET_ROOTFS_PARTSIZE="$(ROOTFS_PARTSIZE)"))
manifest: FORCE
$(MAKE) -s _check_profile
$(MAKE) -s _check_keys
(unset PROFILE FILES PACKAGES MAKEFLAGS; \
$(MAKE) -s _call_manifest \
$(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER)") \
$(if $(PACKAGES),USER_PACKAGES="$(PACKAGES)"))
package_whatdepends: FORCE
ifeq ($(PACKAGE),)
@echo 'Variable `PACKAGE` is not set but required by `whatdepends`'
@exit 1
endif
@$(MAKE) -s package_reload
ifeq ($(CONFIG_USE_APK),)
@$(OPKG) list --depends $(PACKAGE)
else
@$(APK) list --depends $(PACKAGE)
endif
package_depends: FORCE
ifeq ($(PACKAGE),)
@echo 'Variable `PACKAGE` is not set but required by `package_depends`'
@exit 1
endif
@$(MAKE) -s package_reload
ifeq ($(CONFIG_USE_APK),)
@$(OPKG) depends -A $(PACKAGE)
else
@$(OPKG) whatdepends -A $(PACKAGE)
endif
.SILENT: help info image manifest package_whatdepends package_depends

View File

@@ -0,0 +1,10 @@
# ./packages folder
Add `.apk` packages to this folder will allow the ImageBuilder to install them.
For more complex setups consider adding a custom feed containing packages.
file:///path/to/Packages.adb
Whenever the ImageBuilder builds a firmware image this folder will be reloaded
and a new package index created.

View File

@@ -0,0 +1,11 @@
# ./packages folder
Add `.ipk` packages to this folder will allow the ImageBuilder to install them.
For more complex setups consider adding a custom feed containing packages.
src custom file:///path/to/packages
Whenever the ImageBuilder builds a firmware image this folder will be reloaded
and a new package index created. In case signature checks are enabled the
`./packages/Packages` index will be signed with a locally generated key pair.

View File

@@ -0,0 +1,4 @@
## Place your custom repositories here, they must match the architecture and version.
# src/gz %n %U
# src custom file:///usr/src/openwrt/bin/%T/packages

11
target/linux/Makefile Normal file
View File

@@ -0,0 +1,11 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2006-2007 OpenWrt.org
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/target.mk
export TARGET_BUILD=1
prereq clean download prepare compile install oldconfig menuconfig nconfig xconfig update refresh dtb: FORCE
@+$(NO_TRACE_MAKE) -C $(firstword $(wildcard feeds/$(BOARD) $(BOARD))) $@

View File

@@ -0,0 +1,15 @@
include $(TOPDIR)/rules.mk
ARCH:=arm
BOARD:=airoha
BOARDNAME:=Airoha ARM
CPU_TYPE:=cortex-a7
FEATURES:=dt squashfs nand ramdisk gpio source-only
KERNEL_PATCHVER:=6.6
include $(INCLUDE_DIR)/target.mk
KERNELNAME:=Image dtbs
$(eval $(call BuildTarget))

View File

@@ -0,0 +1,303 @@
CONFIG_ALIGNMENT_TRAP=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_ARCH_AIROHA=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_KEEP_MEMBLOCK=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_ARCH_MULTIPLATFORM=y
CONFIG_ARCH_MULTI_V6_V7=y
CONFIG_ARCH_MULTI_V7=y
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_STACKWALK=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARM=y
CONFIG_ARM_AMBA=y
CONFIG_ARM_ARCH_TIMER=y
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
CONFIG_ARM_CPU_SUSPEND=y
CONFIG_ARM_GIC=y
CONFIG_ARM_GIC_V3=y
CONFIG_ARM_GIC_V3_ITS=y
CONFIG_ARM_GIC_V3_ITS_PCI=y
CONFIG_ARM_HAS_GROUP_RELOCS=y
CONFIG_ARM_HEAVY_MB=y
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
CONFIG_ARM_L1_CACHE_SHIFT=6
CONFIG_ARM_L1_CACHE_SHIFT_6=y
CONFIG_ARM_PATCH_IDIV=y
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_ARM_PSCI=y
CONFIG_ARM_PSCI_FW=y
# CONFIG_ARM_SMMU is not set
CONFIG_ARM_THUMB=y
CONFIG_ARM_UNWIND=y
CONFIG_ARM_VIRT_EXT=y
CONFIG_ATAGS=y
CONFIG_AUTO_ZRELADDR=y
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_MQ_PCI=y
CONFIG_BLK_PM=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_CACHE_L2X0=y
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLONE_BACKWARDS=y
CONFIG_CMDLINE="rootfstype=squashfs,jffs2"
CONFIG_CMDLINE_FROM_BOOTLOADER=y
CONFIG_COMMON_CLK=y
CONFIG_COMMON_CLK_EN7523=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CONTEXT_TRACKING=y
CONFIG_CONTEXT_TRACKING_IDLE=y
CONFIG_CPU_32v6K=y
CONFIG_CPU_32v7=y
CONFIG_CPU_ABRT_EV7=y
CONFIG_CPU_CACHE_V7=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y
CONFIG_CPU_HAS_ASID=y
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPU_PABRT_V7=y
CONFIG_CPU_PM=y
CONFIG_CPU_RMAP=y
CONFIG_CPU_SPECTRE=y
CONFIG_CPU_THUMB_CAPABLE=y
CONFIG_CPU_TLB_V7=y
CONFIG_CPU_V7=y
CONFIG_CRC16=y
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_GF128MUL=y
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_ZSTD=y
CONFIG_CURRENT_POINTER_IN_TPIDRURO=y
CONFIG_DCACHE_WORD_ACCESS=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
CONFIG_DEBUG_MISC=y
CONFIG_DMA_OPS=y
CONFIG_DTC=y
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_FIXED_PHY=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_FS_IOMAP=y
CONFIG_FUNCTION_ALIGNMENT=0
CONFIG_FWNODE_MDIO=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_TOPOLOGY=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_GENERIC_EARLY_IOREMAP=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_GENERIC_IRQ_MIGRATION=y
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_PHY=y
CONFIG_GENERIC_PINCONF=y
CONFIG_GENERIC_PINCTRL_GROUPS=y
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
CONFIG_GENERIC_SCHED_CLOCK=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_VDSO_32=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_EN7523=y
CONFIG_GPIO_GENERIC=y
# CONFIG_HARDEN_BRANCH_HISTORY is not set
# CONFIG_HARDEN_BRANCH_PREDICTOR is not set
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAVE_SMP=y
CONFIG_HOTPLUG_CORE_SYNC=y
CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
CONFIG_HOTPLUG_CPU=y
CONFIG_HW_RANDOM=y
CONFIG_HZ_FIXED=0
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_IOMMUFD is not set
# CONFIG_IOMMU_DEBUGFS is not set
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set
CONFIG_IOMMU_SUPPORT=y
CONFIG_IRQCHIP=y
CONFIG_IRQSTACKS=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_IRQ_TIME_ACCOUNTING=y
CONFIG_IRQ_WORK=y
# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
CONFIG_LIBFDT=y
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_MDIO_BUS=y
CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_DEVRES=y
CONFIG_MFD_SYSCON=y
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
CONFIG_MIGRATION=y
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
CONFIG_MODULES_USE_ELF_REL=y
CONFIG_MTD_NAND_CORE=y
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
CONFIG_MTD_SPI_NAND=y
CONFIG_MTD_SPI_NOR=y
CONFIG_MTD_SPLIT_FIRMWARE=y
CONFIG_MTD_SPLIT_FIT_FW=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SRCU_NMI_SAFE=y
CONFIG_NET_EGRESS=y
CONFIG_NET_FLOW_LIMIT=y
CONFIG_NET_INGRESS=y
CONFIG_NET_SELFTESTS=y
CONFIG_NET_XGRESS=y
CONFIG_NLS=y
CONFIG_NO_HZ_COMMON=y
CONFIG_NO_HZ_IDLE=y
CONFIG_NR_CPUS=2
CONFIG_NVMEM=y
CONFIG_NVMEM_LAYOUTS=y
CONFIG_NVMEM_SYSFS=y
CONFIG_OF=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
CONFIG_OF_IRQ=y
CONFIG_OF_KOBJ=y
CONFIG_OF_MDIO=y
CONFIG_OLD_SIGACTION=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OUTER_CACHE=y
CONFIG_OUTER_CACHE_SYNC=y
CONFIG_PADATA=y
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_PAGE_POOL=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PARTITION_PERCPU=y
CONFIG_PCI=y
CONFIG_PCIEAER=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIE_MEDIATEK=y
CONFIG_PCIE_PME=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_DOMAINS_GENERIC=y
CONFIG_PCI_MSI=y
CONFIG_PERF_USE_VMALLOC=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PHYLIB=y
CONFIG_PHYLIB_LEDS=y
CONFIG_PINCTRL=y
CONFIG_PM=y
CONFIG_PM_CLK=y
CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
CONFIG_PWM=y
CONFIG_PWM_SYSFS=y
CONFIG_RANDSTRUCT_NONE=y
CONFIG_RAS=y
CONFIG_RATIONAL=y
CONFIG_REGMAP=y
CONFIG_REGMAP_MMIO=y
CONFIG_RESET_CONTROLLER=y
CONFIG_RFS_ACCEL=y
CONFIG_RPS=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_SCSI=y
CONFIG_SCSI_COMMON=y
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_FSL=y
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SGL_ALLOC=y
CONFIG_SG_POOL=y
CONFIG_SMP=y
CONFIG_SMP_ON_UP=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SPARSE_IRQ=y
CONFIG_SPI=y
CONFIG_SPI_AIROHA_EN7523=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y
CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
CONFIG_STACKTRACE=y
# CONFIG_SWAP is not set
CONFIG_SWPHY=y
CONFIG_SWP_EMULATE=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_THREAD_INFO_IN_TASK=y
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_TREE_RCU=y
CONFIG_TREE_SRCU=y
CONFIG_UBIFS_FS=y
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
CONFIG_UNWINDER_ARM=y
CONFIG_USB=y
CONFIG_USB_COMMON=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_XHCI_HCD=y
# CONFIG_USB_XHCI_PLATFORM is not set
CONFIG_USE_OF=y
# CONFIG_VFP is not set
CONFIG_WATCHDOG_CORE=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_XPS=y
CONFIG_XXHASH=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_ZBOOT_ROM_BSS=0
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZLIB_DEFLATE=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=y
CONFIG_ZSTD_DECOMPRESS=y

View File

@@ -0,0 +1,73 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
/dts-v1/;
/* Bootloader installs ATF here */
/memreserve/ 0x80000000 0x200000;
#include "en7523.dtsi"
/ {
model = "Airoha EN7523 Evaluation Board";
compatible = "airoha,en7523-evb", "airoha,en7523";
aliases {
serial0 = &uart1;
};
chosen {
bootargs = "console=ttyS0,115200 earlycon";
stdout-path = "serial0:115200n8";
linux,usable-memory-range = <0x80200000 0x1fe00000>;
};
memory@80000000 {
device_type = "memory";
reg = <0x80000000 0x20000000>;
};
};
&gpio0 {
status = "okay";
};
&gpio1 {
status = "okay";
};
&pcie0 {
status = "okay";
};
&pcie1 {
status = "okay";
};
&nand {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x0 0x7C000>;
read-only;
};
partition@1 {
label = "u-boot-env";
reg = <0x7C000 0x4000>;
};
partition@2 {
label = "art";
reg = <0x80000 0x40000>;
read-only;
};
partition@3 {
label = "firmware";
reg = <0xC0000 0xDF40000>;
};
};
};

View File

@@ -0,0 +1,219 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/clock/en7523-clk.h>
/ {
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <1>;
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
npu_binary@84000000 {
no-map;
reg = <0x84000000 0xA00000>;
};
npu_flag@84B0000 {
no-map;
reg = <0x84B00000 0x100000>;
};
npu_pkt@85000000 {
no-map;
reg = <0x85000000 0x1A00000>;
};
npu_phyaddr@86B00000 {
no-map;
reg = <0x86B00000 0x100000>;
};
npu_rxdesc@86D00000 {
no-map;
reg = <0x86D00000 0x100000>;
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu-map {
cluster0 {
core0 {
cpu = <&cpu0>;
};
core1 {
cpu = <&cpu1>;
};
};
};
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0x0>;
enable-method = "psci";
clock-frequency = <80000000>;
next-level-cache = <&L2_0>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0x1>;
enable-method = "psci";
clock-frequency = <80000000>;
next-level-cache = <&L2_0>;
};
L2_0: l2-cache0 {
compatible = "cache";
};
};
scu: system-controller@1fa20000 {
compatible = "airoha,en7523-scu";
reg = <0x1fa20000 0x400>,
<0x1fb00000 0x1000>;
#clock-cells = <1>;
};
gic: interrupt-controller@9000000 {
compatible = "arm,gic-v3";
interrupt-controller;
#interrupt-cells = <3>;
#address-cells = <1>;
#size-cells = <1>;
reg = <0x09000000 0x20000>,
<0x09080000 0x80000>,
<0x09400000 0x2000>,
<0x09500000 0x2000>,
<0x09600000 0x20000>;
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_LOW>;
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
};
uart1: serial@1fbf0000 {
compatible = "ns16550";
reg = <0x1fbf0000 0x30>;
reg-io-width = <4>;
reg-shift = <2>;
interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
clock-frequency = <1843200>;
status = "okay";
};
gpio0: gpio@1fbf0200 {
compatible = "airoha,en7523-gpio";
reg = <0x1fbf0204 0x4>,
<0x1fbf0200 0x4>,
<0x1fbf0220 0x4>,
<0x1fbf0214 0x4>;
gpio-controller;
#gpio-cells = <2>;
};
gpio1: gpio@1fbf0270 {
compatible = "airoha,en7523-gpio";
reg = <0x1fbf0270 0x4>,
<0x1fbf0260 0x4>,
<0x1fbf0264 0x4>,
<0x1fbf0278 0x4>;
gpio-controller;
#gpio-cells = <2>;
};
pcie0: pcie@1fa91000 {
compatible = "airoha,en7523-pcie", "mediatek,mt7622-pcie";
device_type = "pci";
reg = <0x1fa91000 0x1000>;
reg-names = "port0";
linux,pci-domain = <0>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "pcie_irq";
clocks = <&scu EN7523_CLK_PCIE>;
clock-names = "sys_ck0";
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x20000000 0x20000000 0 0x2000000>;
status = "disabled";
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc0 0>,
<0 0 0 2 &pcie_intc0 1>,
<0 0 0 3 &pcie_intc0 2>,
<0 0 0 4 &pcie_intc0 3>;
pcie_intc0: interrupt-controller {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <1>;
};
};
pcie1: pcie@1fa92000 {
compatible = "airoha,en7523-pcie", "mediatek,mt7622-pcie";
device_type = "pci";
reg = <0x1fa92000 0x1000>;
reg-names = "port1";
linux,pci-domain = <1>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "pcie_irq";
clocks = <&scu EN7523_CLK_PCIE>;
clock-names = "sys_ck1";
bus-range = <0x00 0xff>;
ranges = <0x82000000 0 0x22000000 0x22000000 0 0x2000000>;
status = "disabled";
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc1 0>,
<0 0 0 2 &pcie_intc1 1>,
<0 0 0 3 &pcie_intc1 2>,
<0 0 0 4 &pcie_intc1 3>;
pcie_intc1: interrupt-controller {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <1>;
};
};
spi_ctrl: spi_controller@1fa10000 {
compatible = "airoha,en7523-spi";
reg = <0x1fa10000 0x140>;
#address-cells = <1>;
#size-cells = <0>;
spi-rx-bus-width = <2>;
spi-tx-bus-width = <2>;
nand: nand@0 {
compatible = "spi-nand";
reg = <0>;
nand-ecc-engine = <&nand>;
};
};
};

View File

@@ -0,0 +1 @@
BOARDNAME:=Generic

View File

@@ -0,0 +1,37 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
KERNEL_LOADADDR := 0x80208000
define Target/Description
Build firmware images for Airoha EN7523 ARM based boards.
endef
# default all platform image(fit) build
define Device/Default
PROFILES = Default $$(DEVICE_NAME)
KERNEL_NAME := Image
KERNEL = kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
KERNEL_INITRAMFS = kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
FILESYSTEMS := squashfs
DEVICE_DTS_DIR := $(DTS_DIR)
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := append-kernel | pad-to 128k | append-rootfs | \
pad-rootfs | append-metadata
endef
define Image/Build
$(call Image/Build/$(1),$(1))
endef
define Device/airoha_en7523-evb
DEVICE_VENDOR := Airoha
DEVICE_MODEL := EN7523 Evaluation Board
DEVICE_DTS := en7523-evb
DEVICE_DTS_DIR := ../dts
endef
TARGET_DEVICES += airoha_en7523-evb
$(eval $(call BuildImage))

View File

View File

@@ -0,0 +1,341 @@
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -353,6 +353,12 @@ config SPI_DLN2
This driver can also be built as a module. If so, the module
will be called spi-dln2.
+config SPI_AIROHA_EN7523
+ bool "Airoha EN7523 SPI controller support"
+ depends on ARCH_AIROHA
+ help
+ This enables SPI controller support for the Airoha EN7523 SoC.
+
config SPI_EP93XX
tristate "Cirrus Logic EP93xx SPI controller"
depends on ARCH_EP93XX || COMPILE_TEST
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -50,6 +50,7 @@ obj-$(CONFIG_SPI_DW_BT1) += spi-dw-bt1.
obj-$(CONFIG_SPI_DW_MMIO) += spi-dw-mmio.o
obj-$(CONFIG_SPI_DW_PCI) += spi-dw-pci.o
obj-$(CONFIG_SPI_EP93XX) += spi-ep93xx.o
+obj-$(CONFIG_SPI_AIROHA_EN7523) += spi-en7523.o
obj-$(CONFIG_SPI_FALCON) += spi-falcon.o
obj-$(CONFIG_SPI_FSI) += spi-fsi.o
obj-$(CONFIG_SPI_FSL_CPM) += spi-fsl-cpm.o
--- /dev/null
+++ b/drivers/spi/spi-en7523.c
@@ -0,0 +1,313 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/spi/spi.h>
+
+
+#define ENSPI_READ_IDLE_EN 0x0004
+#define ENSPI_MTX_MODE_TOG 0x0014
+#define ENSPI_RDCTL_FSM 0x0018
+#define ENSPI_MANUAL_EN 0x0020
+#define ENSPI_MANUAL_OPFIFO_EMPTY 0x0024
+#define ENSPI_MANUAL_OPFIFO_WDATA 0x0028
+#define ENSPI_MANUAL_OPFIFO_FULL 0x002C
+#define ENSPI_MANUAL_OPFIFO_WR 0x0030
+#define ENSPI_MANUAL_DFIFO_FULL 0x0034
+#define ENSPI_MANUAL_DFIFO_WDATA 0x0038
+#define ENSPI_MANUAL_DFIFO_EMPTY 0x003C
+#define ENSPI_MANUAL_DFIFO_RD 0x0040
+#define ENSPI_MANUAL_DFIFO_RDATA 0x0044
+#define ENSPI_IER 0x0090
+#define ENSPI_NFI2SPI_EN 0x0130
+
+// TODO not in spi block
+#define ENSPI_CLOCK_DIVIDER ((void __iomem *)0x1fa201c4)
+
+#define OP_CSH 0x00
+#define OP_CSL 0x01
+#define OP_CK 0x02
+#define OP_OUTS 0x08
+#define OP_OUTD 0x09
+#define OP_OUTQ 0x0A
+#define OP_INS 0x0C
+#define OP_INS0 0x0D
+#define OP_IND 0x0E
+#define OP_INQ 0x0F
+#define OP_OS2IS 0x10
+#define OP_OS2ID 0x11
+#define OP_OS2IQ 0x12
+#define OP_OD2IS 0x13
+#define OP_OD2ID 0x14
+#define OP_OD2IQ 0x15
+#define OP_OQ2IS 0x16
+#define OP_OQ2ID 0x17
+#define OP_OQ2IQ 0x18
+#define OP_OSNIS 0x19
+#define OP_ODNID 0x1A
+
+#define MATRIX_MODE_AUTO 1
+#define CONF_MTX_MODE_AUTO 0
+#define MANUALEN_AUTO 0
+#define MATRIX_MODE_MANUAL 0
+#define CONF_MTX_MODE_MANUAL 9
+#define MANUALEN_MANUAL 1
+
+#define _ENSPI_MAX_XFER 0x1ff
+
+#define REG(x) (iobase + x)
+
+
+static void __iomem *iobase;
+
+
+static void opfifo_write(u32 cmd, u32 len)
+{
+ u32 tmp = ((cmd & 0x1f) << 9) | (len & 0x1ff);
+
+ writel(tmp, REG(ENSPI_MANUAL_OPFIFO_WDATA));
+
+ /* Wait for room in OPFIFO */
+ while (readl(REG(ENSPI_MANUAL_OPFIFO_FULL)))
+ ;
+
+ /* Shift command into OPFIFO */
+ writel(1, REG(ENSPI_MANUAL_OPFIFO_WR));
+
+ /* Wait for command to finish */
+ while (!readl(REG(ENSPI_MANUAL_OPFIFO_EMPTY)))
+ ;
+}
+
+static void set_cs(int state)
+{
+ if (state)
+ opfifo_write(OP_CSH, 1);
+ else
+ opfifo_write(OP_CSL, 1);
+}
+
+static void manual_begin_cmd(void)
+{
+ /* Disable read idle state */
+ writel(0, REG(ENSPI_READ_IDLE_EN));
+
+ /* Wait for FSM to reach idle state */
+ while (readl(REG(ENSPI_RDCTL_FSM)))
+ ;
+
+ /* Set SPI core to manual mode */
+ writel(CONF_MTX_MODE_MANUAL, REG(ENSPI_MTX_MODE_TOG));
+ writel(MANUALEN_MANUAL, REG(ENSPI_MANUAL_EN));
+}
+
+static void manual_end_cmd(void)
+{
+ /* Set SPI core to auto mode */
+ writel(CONF_MTX_MODE_AUTO, REG(ENSPI_MTX_MODE_TOG));
+ writel(MANUALEN_AUTO, REG(ENSPI_MANUAL_EN));
+
+ /* Enable read idle state */
+ writel(1, REG(ENSPI_READ_IDLE_EN));
+}
+
+static void dfifo_read(u8 *buf, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++) {
+ /* Wait for requested data to show up in DFIFO */
+ while (readl(REG(ENSPI_MANUAL_DFIFO_EMPTY)))
+ ;
+ buf[i] = readl(REG(ENSPI_MANUAL_DFIFO_RDATA));
+ /* Queue up next byte */
+ writel(1, REG(ENSPI_MANUAL_DFIFO_RD));
+ }
+}
+
+static void dfifo_write(const u8 *buf, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++) {
+ /* Wait for room in DFIFO */
+ while (readl(REG(ENSPI_MANUAL_DFIFO_FULL)))
+ ;
+ writel(buf[i], REG(ENSPI_MANUAL_DFIFO_WDATA));
+ }
+}
+
+#if 0
+static void set_spi_clock_speed(int freq_mhz)
+{
+ u32 tmp, val;
+
+ tmp = readl(ENSPI_CLOCK_DIVIDER);
+ tmp &= 0xffff0000;
+ writel(tmp, ENSPI_CLOCK_DIVIDER);
+
+ val = (400 / (freq_mhz * 2));
+ tmp |= (val << 8) | 1;
+ writel(tmp, ENSPI_CLOCK_DIVIDER);
+}
+#endif
+
+static void init_hw(void)
+{
+ /* Disable manual/auto mode clash interrupt */
+ writel(0, REG(ENSPI_IER));
+
+ // TODO via clk framework
+ // set_spi_clock_speed(50);
+
+ /* Disable DMA */
+ writel(0, REG(ENSPI_NFI2SPI_EN));
+}
+
+static int xfer_read(struct spi_transfer *xfer)
+{
+ int opcode;
+ uint8_t *buf = xfer->rx_buf;
+
+ switch (xfer->rx_nbits) {
+ case SPI_NBITS_SINGLE:
+ opcode = OP_INS;
+ break;
+ case SPI_NBITS_DUAL:
+ opcode = OP_IND;
+ break;
+ case SPI_NBITS_QUAD:
+ opcode = OP_INQ;
+ break;
+ }
+
+ opfifo_write(opcode, xfer->len);
+ dfifo_read(buf, xfer->len);
+
+ return xfer->len;
+}
+
+static int xfer_write(struct spi_transfer *xfer, int next_xfer_is_rx)
+{
+ int opcode;
+ const uint8_t *buf = xfer->tx_buf;
+
+ if (next_xfer_is_rx) {
+ /* need to use Ox2Ix opcode to set the core to input afterwards */
+ switch (xfer->tx_nbits) {
+ case SPI_NBITS_SINGLE:
+ opcode = OP_OS2IS;
+ break;
+ case SPI_NBITS_DUAL:
+ opcode = OP_OS2ID;
+ break;
+ case SPI_NBITS_QUAD:
+ opcode = OP_OS2IQ;
+ break;
+ }
+ } else {
+ switch (xfer->tx_nbits) {
+ case SPI_NBITS_SINGLE:
+ opcode = OP_OUTS;
+ break;
+ case SPI_NBITS_DUAL:
+ opcode = OP_OUTD;
+ break;
+ case SPI_NBITS_QUAD:
+ opcode = OP_OUTQ;
+ break;
+ }
+ }
+
+ opfifo_write(opcode, xfer->len);
+ dfifo_write(buf, xfer->len);
+
+ return xfer->len;
+}
+
+size_t max_transfer_size(struct spi_device *spi)
+{
+ return _ENSPI_MAX_XFER;
+}
+
+int transfer_one_message(struct spi_controller *ctrl, struct spi_message *msg)
+{
+ struct spi_transfer *xfer;
+ int next_xfer_is_rx = 0;
+
+ manual_begin_cmd();
+ set_cs(0);
+ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
+ if (xfer->tx_buf) {
+ if (!list_is_last(&xfer->transfer_list, &msg->transfers)
+ && list_next_entry(xfer, transfer_list)->rx_buf != NULL)
+ next_xfer_is_rx = 1;
+ else
+ next_xfer_is_rx = 0;
+ msg->actual_length += xfer_write(xfer, next_xfer_is_rx);
+ } else if (xfer->rx_buf) {
+ msg->actual_length += xfer_read(xfer);
+ }
+ }
+ set_cs(1);
+ manual_end_cmd();
+
+ msg->status = 0;
+ spi_finalize_current_message(ctrl);
+
+ return 0;
+}
+
+static int spi_probe(struct platform_device *pdev)
+{
+ struct spi_controller *ctrl;
+ int err;
+
+ ctrl = devm_spi_alloc_master(&pdev->dev, 0);
+ if (!ctrl) {
+ dev_err(&pdev->dev, "Error allocating SPI controller\n");
+ return -ENOMEM;
+ }
+
+ iobase = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
+ if (IS_ERR(iobase)) {
+ dev_err(&pdev->dev, "Could not map SPI register address");
+ return -ENOMEM;
+ }
+
+ init_hw();
+
+ ctrl->dev.of_node = pdev->dev.of_node;
+ ctrl->flags = SPI_CONTROLLER_HALF_DUPLEX;
+ ctrl->mode_bits = SPI_RX_DUAL | SPI_TX_DUAL;
+ ctrl->max_transfer_size = max_transfer_size;
+ ctrl->transfer_one_message = transfer_one_message;
+ err = devm_spi_register_controller(&pdev->dev, ctrl);
+ if (err) {
+ dev_err(&pdev->dev, "Could not register SPI controller\n");
+ return -ENODEV;
+ }
+
+ return 0;
+}
+
+static const struct of_device_id spi_of_ids[] = {
+ { .compatible = "airoha,en7523-spi" },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, spi_of_ids);
+
+static struct platform_driver spi_driver = {
+ .probe = spi_probe,
+ .driver = {
+ .name = "airoha-en7523-spi",
+ .of_match_table = spi_of_ids,
+ },
+};
+
+module_platform_driver(spi_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Bert Vermeulen <bert@biot.com>");
+MODULE_DESCRIPTION("Airoha EN7523 SPI driver");

View File

@@ -0,0 +1,26 @@
# SPDX-License-Identifier: GPL-2.0-only
include $(TOPDIR)/rules.mk
ARCH:=powerpc
BOARD:=apm821xx
BOARDNAME:=AppliedMicro APM821xx
CPU_TYPE:=464fp
FEATURES:=fpu dt gpio ramdisk squashfs usb
SUBTARGETS:=nand sata
KERNEL_PATCHVER:=6.6
define Target/Description
Build images for AppliedMicro APM821xx based boards.
endef
include $(INCLUDE_DIR)/target.mk
KERNELNAME:=uImage
DEFAULT_PACKAGES += \
kmod-leds-gpio kmod-i2c-core kmod-gpio-button-hotplug uboot-envtools \
kmod-hw-crypto-4xx
$(eval $(call BuildTarget))

View File

@@ -0,0 +1,50 @@
. /lib/functions/uci-defaults.sh
board_config_update
board=$(board_name)
case "$board" in
meraki,mr24)
ucidef_set_led_netdev "wan" "WAN" "green:wan" "eth0"
ucidef_set_led_wlan "wlan5g_1" "WIFI 5GHz-1" "green:wlan-0" "phy1tpt"
ucidef_set_led_wlan "wlan5g_0" "WIFI 5GHz-0" "green:wlan-1" "phy1radio"
ucidef_set_led_wlan "wlan2g_1" "WIFI 2.4GHz-1" "green:wlan-2" "phy0tpt"
ucidef_set_led_wlan "wlan2g_0" "WIFI 2.4GHz-0" "green:wlan-3" "phy0radio"
;;
meraki,mx60)
ucidef_set_led_switch "wan" "WAN" "green:wan" "switch0" "0x20"
ucidef_set_led_switch "lan1" "LAN1" "green:lan-0" "switch0" "0x10"
ucidef_set_led_switch "lan2" "LAN2" "green:lan-1" "switch0" "0x08"
ucidef_set_led_switch "lan3" "LAN3" "green:lan-2" "switch0" "0x04"
ucidef_set_led_switch "lan4" "LAN4" "green:lan-3" "switch0" "0x02"
;;
netgear,wndap620)
ucidef_set_led_switch "lan_act" "LAN (Activity)" "green:activity" "switch0" "0x04" "0x0f" "rx tx"
ucidef_set_led_switch "lan_100" "LAN 100Mbps" "amber:lan" "switch0" "0x04" "0x04" "link"
ucidef_set_led_switch "lan_1000" "LAN 1000Mbps" "green:lan" "switch0" "0x04" "0x08" "link"
;;
netgear,wndap660)
ucidef_set_led_netdev "lan_act" "LAN (Activity)" "green:activity" "eth0"
ucidef_set_led_switch "lan1_100" "LAN 100Mbps" "amber:lan-1" "switch0" "0x02" "0x04" "link"
ucidef_set_led_switch "lan1_1000" "LAN 1000Mbps" "green:lan-1" "switch0" "0x02" "0x08" "link"
ucidef_set_led_switch "lan2_100" "LAN 100Mbps" "amber:lan-2" "switch0" "0x04" "0x04" "link"
ucidef_set_led_switch "lan2_1000" "LAN 1000Mbps" "green:lan-2" "switch0" "0x04" "0x08" "link"
ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wlan-0" "phy0tpt"
ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wlan-1" "phy1tpt"
;;
netgear,wndr4700)
ucidef_set_led_switch "wan_green" "WAN (green)" "green:wan" "switch0" "0x20"
ucidef_set_led_netdev "wan_yellow" "WAN (yellow)" "yellow:wan" "eth0.2" "tx rx"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,34 @@
. /lib/functions/system.sh
. /lib/functions/uci-defaults.sh
board_config_update
board=$(board_name)
case "$board" in
meraki,mr24|\
wd,mybooklive|\
wd,mybooklive-duo)
ucidef_set_interface_lan "eth0" "dhcp"
;;
netgear,wndap620)
ucidef_add_switch "switch0" "2:lan" "5@eth0"
;;
netgear,wndap660)
ucidef_add_switch "switch0" "1:lan" "2:lan" "5@eth0"
;;
meraki,mx60|\
netgear,wndr4700)
ucidef_add_switch "switch0" \
"0@eth0" "4:lan" "3:lan" "2:lan" "1:lan" "5:wan"
;;
*)
ucidef_set_interfaces_lan_wan "eth0" "eth1"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,50 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
. /lib/functions/leds.sh
get_status_led() {
local status_led_file
status_led_file=$(find /sys/class/leds/ -name "*:power" | head -n1)
if [ -d "$status_led_file" ]; then
basename $status_led_file
return
fi;
}
get_failsafe_led() {
local status_led_file
status_led_file=$(find /sys/class/leds/ -name "*:fault" | head -n1)
if [ -d "$status_led_file" ]; then
basename $status_led_file
return
fi;
}
set_state() {
status_led=$(get_status_led)
[ -z "$status_led" ] && return
case "$1" in
preinit)
status_led_blink_preinit
;;
failsafe)
status_led_off
status_led=$(get_failsafe_led)
status_led_blink_failsafe
;;
preinit_regular)
status_led_blink_preinit_regular
;;
upgrade)
status_led_blink_preinit_regular
;;
done)
status_led_on
;;
esac
}

View File

@@ -0,0 +1,19 @@
#!/bin/ash
[ "$ACTION" = "add" ] || exit 0
PHYNBR=${DEVPATH##*/phy}
[ -n "$PHYNBR" ] || exit 0
. /lib/functions.sh
. /lib/functions/system.sh
board=$(board_name)
case "$board" in
netgear,wndap620|\
netgear,wndap660)
macaddr_add $(mtd_get_mac_ascii u-boot-env baseMAC) $(($PHYNBR + 1)) > /sys${DEVPATH}/macaddress
;;
esac

View File

@@ -0,0 +1,15 @@
#!/bin/sh /etc/rc.common
START=98
boot() {
# configuring onboard temp/fan controller to run the fan on its own
# for more information, please read https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
case $(board_name) in
netgear,wndr4700)
path_to_hwmon='/sys/devices/platform/plb/plb:opb/4ef600700.i2c/i2c-0/0-001b/hwmon/hwmon1'
echo 1 > "$path_to_hwmon/pwm1_mode"
;;
esac
}

View File

@@ -0,0 +1,4 @@
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
::askconsole:/usr/libexec/login.sh
ttyS0::askfirst:/usr/libexec/login.sh

View File

@@ -0,0 +1,56 @@
. /lib/functions.sh
. /lib/functions/migrations.sh
board=$(board_name)
case "$board" in
meraki,mr24)
migrate_leds "orange:power=amber:fault" \
":wifi1=:wlan-0" \
":wifi2=:wlan-1" \
":wifi3=:wlan-2" \
":wifi4=:wlan-3"
;;
meraki,mx60)
migrate_leds ":lan1=:lan-0" \
":lan2=:lan-1" \
":lan3=:lan-2" \
":lan4=:lan-3" \
"orange:power=amber:power" \
"orange:wan=amber:wan"
;;
netgear,wndap620)
migrate_leds ":activity=:lan-0" \
":test=:fault" \
":wlan2g=:wlan-0" \
":wlan5g=:wlan-1" \
":link100=:lan" \
":link1000=:lan-1"
;;
netgear,wndap660)
migrate_leds ":activity=:lan-0" \
":test=:fault" \
":wlan2g=:wlan-0" \
":wlan5g=:wlan-1" \
":lan1-link100=:lan-1" \
":lan1-link1000=:lan-1" \
":lan2-link100=:lan-2" \
":lan2-link1000=:lan-2"
;;
netgear,wndr4700)
migrate_leds "orange:power=amber:fault" \
"white:logo=white:indicator" \
"green:hd=green:disk" \
"red:hd=red:disk-err"
;;
wd,mybooklive)
migrate_leds "red:power=red:fault" \
"blue:power=blue:disk"
;;
esac
remove_devicename_leds
migrations_apply system
exit 0

View File

@@ -0,0 +1,13 @@
. /lib/functions.sh
case "$(board_name)" in
meraki,mx60|\
netgear,wndap620|\
netgear,wndap660|\
netgear,wndr4700)
uci set system.@system[0].compat_version="2.0"
uci commit system
;;
esac
exit 0

View File

@@ -0,0 +1,13 @@
preinit_set_mac_address() {
. /lib/functions.sh
case $(board_name) in
meraki,mr24|\
meraki,mx60)
mac_lan=$(mtd_get_mac_binary_ubi board-config 0x66)
[ -n "$mac_lan" ] && ip link set eth0 address "$mac_lan"
;;
esac
}
boot_hook_add preinit_main preinit_set_mac_address

View File

@@ -0,0 +1,5 @@
apm821xx_set_preinit_iface() {
ifname=eth0
}
boot_hook_add preinit_main apm821xx_set_preinit_iface

View File

@@ -0,0 +1,18 @@
BOOTPART=/dev/sda1
move_config() {
. /lib/functions.sh
. /lib/upgrade/common.sh
case "$(board_name)" in
wd,mybooklive)
if [ -b $BOOTPART ]; then
mkdir -p /boot
mount -t ext4 -o rw,noatime $BOOTPART /boot
[ -f "/boot/$BACKUP_FILE" ] && mv -f "/boot/$BACKUP_FILE" /
fi
;;
esac
}
boot_hook_add preinit_mount_root move_config

View File

@@ -0,0 +1,47 @@
PART_NAME=firmware
REQUIRE_IMAGE_METADATA=1
platform_check_image() {
local board=$(board_name)
case "$board" in
wd,mybooklive)
mbl_do_platform_check "$1"
return $?;
;;
*)
return 0
;;
esac
}
platform_do_upgrade() {
local board=$(board_name)
case "$board" in
wd,mybooklive)
mbl_do_upgrade "$1"
;;
meraki,mr24|\
meraki,mx60|\
netgear,wndap620|\
netgear,wndap660|\
netgear,wndr4700)
nand_do_upgrade "$1"
;;
*)
default_do_upgrade "$1"
;;
esac
}
platform_copy_config() {
local board=$(board_name)
case "$board" in
wd,mybooklive|\
wd,mybooklive-duo)
mbl_copy_config
;;
esac
}

View File

@@ -0,0 +1,94 @@
. /lib/functions.sh
# copied from x86's platform.sh
mbl_do_platform_check() {
local diskdev partdev diff
[ "$#" -gt 1 ] && return 1
export_bootdevice && export_partdevice diskdev 0 || {
echo "Unable to determine upgrade device"
return 1
}
get_partitions "/dev/$diskdev" bootdisk
#extract the boot sector from the image
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
get_partitions /tmp/image.bs image
#compare tables
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
if [ -n "$diff" ]; then
echo "Partition layout has changed. Full image will be written."
ask_bool 0 "Abort" && exit 1
return 0
fi
return 0;
}
mbl_do_upgrade() {
local diskdev partdev diff
export_bootdevice && export_partdevice diskdev 0 || {
echo "Unable to determine upgrade device"
return 1
}
sync
if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
get_partitions "/dev/$diskdev" bootdisk
#extract the boot sector from the image
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
get_partitions /tmp/image.bs image
#compare tables
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
else
diff=1
fi
if [ -n "$diff" ]; then
get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
# Separate removal and addtion is necessary; otherwise, partition 1
# will be missing if it overlaps with the old partition 2
partx -d - "/dev/$diskdev"
partx -a - "/dev/$diskdev"
return 0
fi
#iterate over each partition from the image and write it to the boot disk
while read part start size; do
if export_partdevice partdev $part; then
echo "Writing image to /dev/$partdev..."
get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
else
echo "Unable to find partition $part device, skipped."
fi
done < /tmp/partmap.image
#copy partition uuid
echo "Writing new UUID to /dev/$diskdev..."
get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
}
mbl_copy_config() {
local partdev
if export_partdevice partdev 1; then
mount -t ext4 -o rw,noatime "/dev/$partdev" /mnt
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
umount /mnt
fi
}

View File

@@ -0,0 +1,274 @@
# CONFIG_40x is not set
# CONFIG_440_CPU is not set
CONFIG_44x=y
CONFIG_464_CPU=y
CONFIG_4xx=y
CONFIG_4xx_SOC=y
# CONFIG_ADVANCED_OPTIONS is not set
CONFIG_APM821xx=y
# CONFIG_APOLLO3G is not set
# CONFIG_ARCHES is not set
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_KEEP_MEMBLOCK=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
CONFIG_ARCH_MMAP_RND_BITS=11
CONFIG_ARCH_MMAP_RND_BITS_MAX=17
CONFIG_ARCH_MMAP_RND_BITS_MIN=11
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
CONFIG_ARCH_SPLIT_ARG64=y
CONFIG_ARCH_STACKWALK=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y
CONFIG_AUDIT_ARCH=y
# CONFIG_BAMBOO is not set
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_BLK_MQ_PCI=y
CONFIG_BLUESTONE=y
CONFIG_BOOKE=y
CONFIG_BOOKE_OR_40x=y
CONFIG_BOOKE_WDT=y
# CONFIG_CANYONLANDS is not set
CONFIG_CLONE_BACKWARDS=y
CONFIG_CMDLINE="rootfstype=squashfs noinitrd"
CONFIG_CMDLINE_FROM_BOOTLOADER=y
CONFIG_COMMON_CLK=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_CRC16=y
# CONFIG_CRC32_SARWATE is not set
CONFIG_CRC32_SLICEBY8=y
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_GF128MUL=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LZO=y
# CONFIG_CRYPTO_MD5_PPC is not set
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
# CONFIG_CRYPTO_SHA1_PPC is not set
CONFIG_CRYPTO_SHA3=y
CONFIG_DATA_SHIFT=12
CONFIG_DMADEVICES=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_OF=y
CONFIG_DTC=y
CONFIG_DW_DMAC=y
CONFIG_DW_DMAC_CORE=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBONY is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
# CONFIG_EIGER is not set
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_EXTRA_TARGETS="uImage"
CONFIG_FIXED_PHY=y
CONFIG_FORCE_PCI=y
# CONFIG_FSL_LBC is not set
CONFIG_FS_IOMAP=y
CONFIG_FUNCTION_ALIGNMENT=0
CONFIG_FWNODE_MDIO=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_EARLY_IOREMAP=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_GENERIC_IOREMAP=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_TIME_VSYSCALL=y
# CONFIG_GEN_RTC is not set
# CONFIG_GLACIER is not set
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_IBM_IIC=y
CONFIG_IBM_EMAC=y
CONFIG_IBM_EMAC_EMAC4=y
CONFIG_IBM_EMAC_POLL_WEIGHT=32
CONFIG_IBM_EMAC_RGMII=y
CONFIG_IBM_EMAC_RXB=128
CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
CONFIG_IBM_EMAC_TAH=y
CONFIG_IBM_EMAC_TXB=128
# CONFIG_ICON is not set
CONFIG_ILLEGAL_POINTER_VALUE=0
CONFIG_IRQCHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_IRQ_WORK=y
CONFIG_ISA_DMA_API=y
# CONFIG_JFFS2_FS is not set
# CONFIG_KATMAI is not set
CONFIG_KERNEL_START=0xc0000000
CONFIG_LEDS_TRIGGER_MTD=y
CONFIG_LEDS_TRIGGER_PATTERN=y
CONFIG_LIBFDT=y
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_LOWMEM_SIZE=0x30000000
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
# CONFIG_MATH_EMULATION is not set
CONFIG_MDIO_BUS=y
CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_DEVRES=y
CONFIG_MIGRATION=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_MMU_GATHER_PAGE_SIZE=y
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
# CONFIG_MTD_CFI_GEOMETRY is not set
# CONFIG_MTD_SPLIT_SQUASHFS_ROOT is not set
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_PER_CPU_KM=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NET_EGRESS=y
CONFIG_NET_INGRESS=y
CONFIG_NET_SELFTESTS=y
CONFIG_NET_XGRESS=y
CONFIG_NOT_COHERENT_CACHE=y
CONFIG_NO_HZ=y
CONFIG_NO_HZ_COMMON=y
CONFIG_NO_HZ_IDLE=y
CONFIG_NR_CPUS=1
CONFIG_NR_IRQS=512
CONFIG_NVMEM=y
CONFIG_NVMEM_LAYOUTS=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_U_BOOT_ENV=y
CONFIG_OF=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
CONFIG_OF_GPIO_MM_GPIOCHIP=y
CONFIG_OF_IRQ=y
CONFIG_OF_KOBJ=y
CONFIG_OF_MDIO=y
CONFIG_OLD_SIGACTION=y
CONFIG_OLD_SIGSUSPEND=y
CONFIG_PACKING=y
CONFIG_PAGE_OFFSET=0xc0000000
CONFIG_PAGE_POOL=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y
CONFIG_PCI=y
CONFIG_PCIEAER=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_MSI=y
CONFIG_PCI_MSI_ARCH_FALLBACKS=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PHYLIB=y
CONFIG_PHYLIB_LEDS=y
CONFIG_PHYSICAL_START=0x00000000
CONFIG_PHYS_64BIT=y
CONFIG_PHYS_ADDR_T_64BIT=y
# CONFIG_PMU_SYSFS is not set
CONFIG_PPC=y
CONFIG_PPC32=y
CONFIG_PPC44x_SIMPLE=y
CONFIG_PPC4xx_GPIO=y
CONFIG_PPC4xx_PCI_EXPRESS=y
# CONFIG_PPC64 is not set
# CONFIG_PPC_47x is not set
# CONFIG_PPC_85xx is not set
# CONFIG_PPC_8xx is not set
CONFIG_PPC_ADV_DEBUG_DACS=2
CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
CONFIG_PPC_ADV_DEBUG_DVCS=2
CONFIG_PPC_ADV_DEBUG_IACS=4
CONFIG_PPC_ADV_DEBUG_REGS=y
# CONFIG_PPC_BOOK3S_32 is not set
CONFIG_PPC_DCR=y
CONFIG_PPC_DCR_NATIVE=y
# CONFIG_PPC_EARLY_DEBUG is not set
CONFIG_PPC_FPU=y
CONFIG_PPC_FPU_REGS=y
CONFIG_PPC_INDIRECT_PCI=y
CONFIG_PPC_KUAP=y
# CONFIG_PPC_KUAP_DEBUG is not set
CONFIG_PPC_KUEP=y
CONFIG_PPC_MMU_NOHASH=y
CONFIG_PPC_PAGE_SHIFT=12
# CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT is not set
CONFIG_PPC_UDBG_16550=y
CONFIG_PPC_WERROR=y
CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PTE_64BIT=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
# CONFIG_RAINIER is not set
CONFIG_RANDSTRUCT_NONE=y
CONFIG_RAS=y
CONFIG_RATIONAL=y
CONFIG_REGULATOR=y
CONFIG_RSEQ=y
# CONFIG_SAM440EP is not set
# CONFIG_SCOM_DEBUGFS is not set
# CONFIG_SEQUOIA is not set
# CONFIG_SERIAL_8250_FSL is not set
CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SGL_ALLOC=y
# CONFIG_SMT_NUM_THREADS_DYNAMIC is not set
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SPARSE_IRQ=y
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_SWPHY=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
# CONFIG_TAISHAN is not set
CONFIG_TARGET_CPU="464"
CONFIG_TARGET_CPU_BOOL=y
CONFIG_TASK_SIZE=0xc0000000
CONFIG_THREAD_INFO_IN_TASK=y
CONFIG_THREAD_SHIFT=13
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_TINY_SRCU=y
# CONFIG_TOOLCHAIN_DEFAULT_CPU is not set
CONFIG_USB_SUPPORT=y
CONFIG_VDSO32=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set
# CONFIG_WARP is not set
CONFIG_WATCHDOG_CORE=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_XZ_DEC_POWERPC=y
# CONFIG_YOSEMITE is not set
CONFIG_ZLIB_DEFLATE=y
CONFIG_ZLIB_INFLATE=y

View File

@@ -0,0 +1,466 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Device Tree for Bluestone (APM821xx) board.
*
* Copyright (c) 2010, Applied Micro Circuits Corporation
* Author: Tirumala R Marri <tmarri@apm.com>
*/
#include <dt-bindings/dma/dw-dmac.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>
/ {
#address-cells = <2>;
#size-cells = <1>;
dcr-parent = <&{/cpus/cpu@0}>;
compatible = "apm,bluestone";
aliases {
ethernet0 = &EMAC0; /* needed for BSP u-boot */
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
CPU0: cpu@0 {
device_type = "cpu";
model = "PowerPC,apm82181";
reg = <0x00000000>;
clock-frequency = <0>; /* Filled in by U-Boot */
timebase-frequency = <0>; /* Filled in by U-Boot */
i-cache-line-size = <32>;
d-cache-line-size = <32>;
i-cache-size = <32768>;
d-cache-size = <32768>;
dcr-controller;
dcr-access-method = "native";
next-level-cache = <&L2C0>;
};
};
memory {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by U-Boot */
};
UIC0: interrupt-controller0 {
compatible = "apm,uic-apm82181", "ibm,uic";
interrupt-controller;
cell-index = <0>;
dcr-reg = <0x0c0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
};
UIC1: interrupt-controller1 {
compatible = "apm,uic-apm82181", "ibm,uic";
interrupt-controller;
cell-index = <1>;
dcr-reg = <0x0d0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0x1e IRQ_TYPE_LEVEL_HIGH>,
<0x1f IRQ_TYPE_LEVEL_HIGH>; /* cascade */
interrupt-parent = <&UIC0>;
};
UIC2: interrupt-controller2 {
compatible = "apm,uic-apm82181", "ibm,uic";
interrupt-controller;
cell-index = <2>;
dcr-reg = <0x0e0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0x0a IRQ_TYPE_LEVEL_HIGH>,
<0x0b IRQ_TYPE_LEVEL_HIGH>; /* cascade */
interrupt-parent = <&UIC0>;
};
UIC3: interrupt-controller3 {
compatible = "apm,uic-apm82181","ibm,uic";
interrupt-controller;
cell-index = <3>;
dcr-reg = <0x0f0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0x10 IRQ_TYPE_LEVEL_HIGH>,
<0x11 IRQ_TYPE_LEVEL_HIGH>; /* cascade */
interrupt-parent = <&UIC0>;
};
OCM1: ocm@400040000 {
compatible = "apm,ocm-apm82181", "ibm,ocm";
status = "okay";
cell-index = <1>;
/* configured in U-Boot */
reg = <4 0x00040000 0x8000>; /* 32K */
};
SDR0: sdr {
compatible = "apm,sdr-apm82181", "ibm,sdr-460ex";
dcr-reg = <0x00e 0x002>;
};
CPR0: cpr {
compatible = "apm,cpr-apm82181", "ibm,cpr-460ex";
dcr-reg = <0x00c 0x002>;
};
L2C0: l2c {
compatible = "ibm,l2-cache-apm82181", "ibm,l2-cache";
dcr-reg = <0x020 0x008
0x030 0x008>;
cache-line-size = <32>;
cache-size = <262144>;
interrupt-parent = <&UIC1>;
interrupts = <0x0b IRQ_TYPE_EDGE_RISING>;
};
CPM0: cpm {
compatible = "ibm,cpm-apm821xx", "ibm,cpm";
cell-index = <0>;
dcr-reg = <0x160 0x003>;
pm-cpu = <0x02000000>;
pm-doze = <0x302570F0>;
pm-nap = <0x302570F0>;
pm-deepsleep = <0x302570F0>;
pm-iic-device = <&IIC0>;
pm-emac-device = <&EMAC0>;
unused-units = <0x00000100>;
idle-doze = <0x02000000>;
standby = <0xfeff791d>;
};
plb {
compatible = "apm,plb-apm82181", "ibm,plb-460ex", "ibm,plb4";
#address-cells = <2>;
#size-cells = <1>;
ranges; /* Filled in by U-Boot */
clock-frequency = <0>; /* Filled in by U-Boot */
SDRAM0: sdram {
compatible = "apm,sdram-apm82181", "ibm,sdram-460ex", "ibm,sdram-405gp";
dcr-reg = <0x010 0x002>;
};
RTC: rtc {
compatible = "ibm,rtc";
dcr-reg = <0x240 0x009>;
interrupts = <0x1a IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&UIC2>;
status = "disabled";
};
TRNG: trng@110000 {
compatible = "amcc,ppc460ex-rng", "ppc4xx-rng", "amcc, ppc4xx-trng";
reg = <4 0x00110000 0x100>;
interrupt-parent = <&UIC1>;
interrupts = <0x03 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
PKA: pka@114000 {
compatible = "ppc4xx-pka", "amcc,ppc4xx-pka", "amcc, ppc4xx-pka";
reg = <4 0x00114000 0x4000>;
interrupt-parent = <&UIC0>;
interrupts = <0x14 IRQ_TYPE_EDGE_RISING>;
status = "disabled";
};
CRYPTO: crypto@180000 {
compatible = "amcc,ppc460ex-crypto", "amcc,ppc4xx-crypto";
reg = <4 0x00180000 0x80400>;
interrupt-parent = <&UIC0>;
interrupts = <0x1d IRQ_TYPE_LEVEL_HIGH>;
status = "disabled"; /* hardware option */
};
MAL0: mcmal {
compatible = "ibm,mcmal-460ex", "ibm,mcmal2";
descriptor-memory = "ocm";
dcr-reg = <0x180 0x062>;
num-tx-chans = <1>;
num-rx-chans = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-parent = <&UIC2>;
interrupts = <0x06 IRQ_TYPE_LEVEL_HIGH>,
<0x07 IRQ_TYPE_LEVEL_HIGH>,
<0x03 IRQ_TYPE_LEVEL_HIGH>,
<0x04 IRQ_TYPE_LEVEL_HIGH>,
<0x05 IRQ_TYPE_LEVEL_HIGH>,
<0x08 IRQ_TYPE_EDGE_FALLING>,
<0x09 IRQ_TYPE_EDGE_FALLING>,
<0x0c IRQ_TYPE_EDGE_FALLING>,
<0x0d IRQ_TYPE_EDGE_FALLING>;
interrupt-names = "txeob", "rxeob", "serr",
"txde", "rxde",
"tx0coal", "tx1coal",
"rx0coal", "rx1coal";
};
POB0: opb {
compatible = "ibm,opb-460ex", "ibm,opb";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0xb0000000 0x00000004 0xb0000000 0x50000000>;
clock-frequency = <0>; /* Filled in by U-Boot */
EBC0: ebc {
compatible = "ibm,ebc-460ex", "ibm,ebc";
dcr-reg = <0x012 0x002>;
#address-cells = <2>;
#size-cells = <1>;
clock-frequency = <0>; /* Filled in by U-Boot */
/* ranges property is supplied by U-Boot */
ranges = <0x00000003 0x00000000 0xe0000000 0x8000000>;
interrupts = <0x06 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&UIC1>;
nor_flash@0,0 {
compatible = "cfi-flash";
bank-width = <1>;
reg = <0x00000000 0x00000000 0x00100000>;
#address-cells = <1>;
#size-cells = <1>;
status = "disabled";
};
ndfc: ndfc@1,0 {
compatible = "ibm,ndfc";
reg = <00000003 00000000 00002000>;
ccr = <0x00001000>;
bank-settings = <0x80002222>;
status = "disabled";
nand {
/*
* These are the same fixed "MAGIC" values
* settings as in the drivers code.
* They are the same for all devices that
* have NAND.
*/
nand-ecc-engine = <&ndfc>;
nand-ecc-algo = "hamming";
nand-ecc-step-size = <256>;
nand-ecc-strength = <1>;
};
};
};
UART0: serial@ef600300 {
/*
* AMCC's BSP u-boot scans for the "ns16550"
* compatible, without it, u-boot wouldn't
* set the required "clock-frequency".
*
* The hardware documentation states:
* "Register compatibility with 16750 register set"
*/
compatible = "ns16750", "ns16550";
reg = <0xef600300 0x00000008>;
virtual-reg = <0xef600300>;
clock-frequency = <0>; /* Filled in by U-Boot */
interrupt-parent = <&UIC1>;
interrupts = <0x01 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
UART1: serial@ef600400 {
/* same "ns16750" as with UART0 */
compatible = "ns16750", "ns16550";
reg = <0xef600400 0x00000008>;
virtual-reg = <0xef600400>;
clock-frequency = <0>; /* Filled in by U-Boot */
interrupt-parent = <&UIC0>;
interrupts = <0x01 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
IIC0: i2c@ef600700 {
compatible = "ibm,iic-460ex", "ibm,iic";
reg = <0xef600700 0x00000014>;
interrupt-parent = <&UIC0>;
interrupts = <0x02 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
IIC1: i2c@ef600800 {
compatible = "ibm,iic-460ex", "ibm,iic";
reg = <0xef600800 0x00000014>;
interrupt-parent = <&UIC0>;
interrupts = <0x03 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
GPIO0: gpio@ef600b00 {
compatible = "ibm,ppc4xx-gpio";
reg = <0xef600b00 0x00000048>;
#gpio-cells = <2>;
gpio-controller;
status = "disabled";
};
EMAC0: ethernet@ef600c00 {
device_type = "network";
compatible = "ibm,emac-apm821xx", "ibm,emac4sync";
interrupt-parent = <&EMAC0>;
interrupts = <0 1>;
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <0 &UIC2 0x10 IRQ_TYPE_LEVEL_HIGH>,
<1 &UIC2 0x14 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "status", "wake";
reg = <0xef600c00 0x000000c4>;
local-mac-address = [000000000000]; /* Filled in by U-Boot */
mal-device = <&MAL0>;
mal-tx-channel = <0>;
mal-rx-channel = <0>;
cell-index = <0>;
max-frame-size = <9000>;
rx-fifo-size = <16384>;
tx-fifo-size = <2048>;
phy-mode = "rgmii";
phy-map = <0x00000000>;
rgmii-device = <&RGMII0>;
rgmii-channel = <0>;
tah-device = <&TAH0>;
tah-channel = <0>;
has-inverted-stacr-oc;
has-new-stacr-staopc;
status = "disabled";
};
TAH0: emac-tah@ef601350 {
compatible = "ibm,tah-460ex", "ibm,tah";
reg = <0xef601350 0x00000030>;
};
RGMII0: emac-rgmii@ef601500 {
compatible = "ibm,rgmii-405ex", "ibm,rgmii";
reg = <0xef601500 0x00000008>;
has-mdio;
};
};
USBOTG0: usbotg@bff80000 {
compatible = "amcc,dwc-otg";
reg = <4 0xbff80000 0x10000>;
interrupt-parent = <&USBOTG0>;
interrupts = <0 1 2>;
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <0 &UIC2 0x1c IRQ_TYPE_LEVEL_HIGH>,
<1 &UIC1 0x1a IRQ_TYPE_LEVEL_LOW>,
<2 &UIC0 0x0c IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "usb-otg", "high-power", "dma";
dr_mode = "host";
status = "disabled";
};
AHBDMA0: dma@bffd0800 {
compatible = "snps,dma-spear1340";
reg = <4 0xbffd0800 0x400>;
interrupt-parent = <&UIC0>;
interrupts = <0x19 IRQ_TYPE_LEVEL_HIGH>;
#dma-cells = <3>;
dma-channels = <2>;
dma-masters = <3>;
block_size = <4095>;
data-width = <4>, <4>, <4>;
multi-block = <1>, <1>;
chan_allocation_order = <1>;
chan_priority = <1>;
snps,dma-protection-control =
<(DW_DMAC_HPROT1_PRIVILEGED_MODE |
DW_DMAC_HPROT2_BUFFERABLE)>;
is_memcpy;
};
SATA0: sata@bffd1000 {
compatible = "amcc,sata-460ex";
reg = <4 0xbffd1000 0x800>;
interrupt-parent = <&UIC0>;
interrupts = <0x1a IRQ_TYPE_LEVEL_HIGH>;
dmas = <&AHBDMA0 0 0 1>;
dma-names = "sata-dma";
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
SATA1: sata@bffd1800 {
compatible = "amcc,sata-460ex";
reg = <4 0xbffd1800 0x800>;
interrupt-parent = <&UIC0>;
interrupts = <0x1b IRQ_TYPE_LEVEL_HIGH>;
dmas = <&AHBDMA0 1 0 2>;
dma-names = "sata-dma";
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
PCIE0: pciex@d00000000 {
device_type = "pci"; /* see ppc4xx_pci_find_bridge */
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
compatible = "ibm,plb-pciex-apm821xx", "ibm,plb-pciex";
primary;
port = <0x0>; /* port number */
reg = <0x0000000d 0x00000000 0x20000000>, /* Config space access */
<0x0000000c 0x08010000 0x00001000>; /* Registers */
dcr-reg = <0x100 0x020>;
sdr-base = <0x300>;
/*
* Outbound ranges, one memory and one IO,
* later cannot be changed
*/
ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000>,
<0x02000000 0x00000000 0x00000000 0x0000000f 0x00000000 0x00000000 0x00100000>,
<0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>;
/* Inbound 2GB range starting at 0 */
dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>;
/* This drives busses 0x40 to 0x7f */
bus-range = <0x40 0x7f>;
/*
* Legacy interrupts (note the weird polarity, the bridge seems
* to invert PCIe legacy interrupts).
* We are de-swizzling here because the numbers are actually for
* port of the root complex virtual P2P bridge. But I want
* to avoid putting a node for it in the tree, so the numbers
* below are basically de-swizzled numbers.
* The real slot is on idsel 0, so the swizzling is 1:1
*/
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map =
<0x0 0x0 0x0 0x1 &UIC3 0x0c IRQ_TYPE_LEVEL_HIGH>, /* swizzled int A */
<0x0 0x0 0x0 0x2 &UIC3 0x0d IRQ_TYPE_LEVEL_HIGH>, /* swizzled int B */
<0x0 0x0 0x0 0x3 &UIC3 0x0e IRQ_TYPE_LEVEL_HIGH>, /* swizzled int C */
<0x0 0x0 0x0 0x4 &UIC3 0x0f IRQ_TYPE_LEVEL_HIGH>; /* swizzled int D */
status = "disabled";
};
};
};

View File

@@ -0,0 +1,251 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Device Tree Source for Meraki MR24 (Ikarem)
*
* Copyright (C) 2016 Chris Blake <chrisrblake93@gmail.com>
*
* Based on Cisco Meraki GPL Release r23-20150601 MR24 DTS
*/
/dts-v1/;
#include <dt-bindings/leds/common.h>
#include "apm82181.dtsi"
/ {
model = "Meraki MR24 Access Point";
compatible = "meraki,mr24", "meraki,ikarem", "apm,bluestone";
aliases {
serial0 = &UART1;
};
chosen {
stdout-path = "/plb/opb/serial@ef600400";
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&ndfc {
/* Ikarem has 32MB of NAND */
status = "okay";
nand {
nand-is-boot-medium;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x00000000 0x00150000>;
read-only;
};
partition@150000 {
/*
* The u-boot environment size is one NAND
* block (16KiB). u-boot allocates four NAND
* blocks (64KiB) in order to have spares
* around for bad block management
*/
label = "u-boot-env";
compatible = "u-boot,env";
reg = <0x00150000 0x00010000>;
read-only;
};
partition@160000 {
/*
* redundant u-boot environment.
* has to be kept it in sync with the
* data in "u-boot-env".
*/
label = "u-boot-env-redundant";
reg = <0x00160000 0x00010000>;
read-only;
};
partition@170000 {
label = "oops";
reg = <0x00170000 0x00010000>;
};
partition@180000 {
label = "ubi";
reg = <0x00180000 0x01e80000>;
};
};
};
};
&UART1 {
status = "okay";
};
&GPIO0 {
status = "okay";
};
&IIC0 {
status = "okay";
/* Boot ROM is at 0x52-0x53, do not touch */
/* Unknown chip at 0x6e, not sure what it is */
};
&EMAC0 {
status = "okay";
phy-mode = "rgmii-id";
phy-map = <0x2>;
phy-address = <0x1>;
phy-handle = <&phy>;
mdio {
#address-cells = <1>;
#size-cells = <0>;
phy: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
};
};
&POB0 {
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&GPIO0 18 GPIO_ACTIVE_LOW>;
};
led-1 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_FAULT;
gpios = <&GPIO0 19 GPIO_ACTIVE_LOW>;
panic-indicator;
};
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
gpios = <&GPIO0 17 GPIO_ACTIVE_LOW>;
};
led-3 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <0>;
gpios = <&GPIO0 23 GPIO_ACTIVE_LOW>;
};
led-4 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <1>;
gpios = <&GPIO0 22 GPIO_ACTIVE_LOW>;
};
led-5 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <2>;
gpios = <&GPIO0 21 GPIO_ACTIVE_LOW>;
};
led-6 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <3>;
gpios = <&GPIO0 20 GPIO_ACTIVE_LOW>;
};
};
keys {
compatible = "gpio-keys";
button-restart {
/* Label as per Meraki's "MR24 Installation Guide" */
label = "Factory Reset Button";
linux,code = <KEY_RESTART>;
interrupt-parent = <&UIC1>;
interrupts = <0x15 IRQ_TYPE_EDGE_FALLING>;
gpios = <&GPIO0 16 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
};
&PCIE0 {
status = "okay";
/*
* relevant lspci topology:
*
* -+-[0000:40]---00.0-[41-7f]----00.0-[42-45]--+-02.0-[43]----00.0
* +-03.0-[44]----00.0
*
*/
bridge@64,0 {
reg = <0x00400000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@65,0 {
/* IDT PES3T3 PCI Express Switch */
compatible = "pci111d,8039";
reg = <0x00410000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@66,2 {
compatible = "pci111d,8039";
reg = <0x00421000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi0: wifi@67,0 {
/* Atheros AR9380 2.4GHz */
compatible = "pci168c,0030";
reg = <0x00430000 0 0 0 0>;
interrupts = <3>; /* INTC 4.1.1 */
};
};
bridge@66,3 {
compatible = "pci111d,8039";
reg = <0x00421800 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi1: wifi@68,0 {
/* Atheros AR9380 5GHz */
compatible = "pci168c,0030";
reg = <0x00440000 0 0 0 0>;
interrupts = <4>; /* INTD 4.1.1 */
};
};
};
};
};

View File

@@ -0,0 +1,211 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Device Tree Source for Meraki MX60/MX60W (Buckminster)
*
* Copyright (C) 2016 Chris Blake <chrisrblake93@gmail.com>
*
* Based on Cisco Meraki DTS extracted from release wired-12-217818
*/
/dts-v1/;
#include <dt-bindings/leds/common.h>
#include "apm82181.dtsi"
/ {
model = "Meraki MX60/MX60W Security Appliance";
compatible = "meraki,mx60", "meraki,buckminster", "apm,bluestone";
aliases {
serial0 = &UART1;
};
chosen {
stdout-path = "/plb/opb/serial@ef600400";
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&USBOTG0 {
status = "okay";
dr_mode = "host";
};
&ndfc {
/* Buckminster has 1GiB of NAND */
status = "okay";
nand {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x00000000 0x00100000>;
read-only;
};
partition@100000 {
label = "u-boot-env";
reg = <0x00100000 0x00100000>;
compatible = "u-boot,env";
read-only;
};
partition@200000 {
label = "oops";
reg = <0x00200000 0x00040000>;
};
partition@240000 {
label = "ubi";
reg = <0x00240000 0x3fdc0000>;
};
};
};
};
&UART1 {
status = "okay";
};
&GPIO0 {
status = "okay";
};
&IIC0 {
status = "okay";
};
&EMAC0 {
status = "okay";
phy-handle = <&phy0>;
mdio {
#address-cells = <1>;
#size-cells = <0>;
phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id004d.d034";
reg = <0>;
qca,mib-poll-interval = <500>;
qca,ar8327-initvals = <
0x0010 0x40000000
0x0624 0x007f7f7f
0x0004 0x07a00000 /* PAD0_MODE */
0x000c 0x01000000 /* PAD6_MODE */
0x007c 0x0000007e /* PORT0_STATUS */
>;
};
};
};
&POB0 {
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&GPIO0 18 GPIO_ACTIVE_LOW>;
};
led-1 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_FAULT;
gpios = <&GPIO0 19 GPIO_ACTIVE_LOW>;
panic-indicator;
};
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
gpios = <&GPIO0 17 GPIO_ACTIVE_LOW>;
};
led-3 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_WAN;
gpios = <&GPIO0 15 GPIO_ACTIVE_LOW>;
};
led-4 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <0>;
gpios = <&GPIO0 20 GPIO_ACTIVE_LOW>;
};
led-5 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&GPIO0 21 GPIO_ACTIVE_LOW>;
};
led-6 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&GPIO0 22 GPIO_ACTIVE_LOW>;
};
led-7 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <3>;
gpios = <&GPIO0 23 GPIO_ACTIVE_LOW>;
};
};
keys {
compatible = "gpio-keys";
button-restart {
label = "Reset button";
linux,code = <KEY_RESTART>;
gpios = <&GPIO0 16 GPIO_ACTIVE_LOW>;
interrupt-parent = <&UIC1>;
interrupts = <0x15 IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
};
};
&PCIE0 {
/* Leave this enabled as u-boot on the MX60 will disable it for us */
status = "okay";
/*
* relevant lspci topology:
*
* -+-[0000:40]---00.0-[41-7f]----00.0
*/
bridge@64,0 {
reg = <0x00400000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi0: wifi@65,0 {
/* Atheros AR9380 2.4/5GHz */
compatible = "pci168c,0030";
reg = <0x00410000 0 0 0 0>;
interrupts = <1>; /* INTA */
};
};
};

View File

@@ -0,0 +1,47 @@
// SPDX-License-Identifier: GPL-2.0-only
/dts-v1/;
#include "netgear-wndap6x0.dtsi"
/ {
model = "Netgear WNDAP620";
compatible = "netgear,wndap620", "apm,bluestone";
};
&LEDS {
led-5 {
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
color = <LED_COLOR_ID_GREEN>;
gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
};
led-6 {
function = LED_FUNCTION_LAN;
color = <LED_COLOR_ID_AMBER>;
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
};
};
&PCIE0 {
/*
* relevant lspci topology:
*
* -+-[0000:40]---00.0-[41-7f]----00.0
*/
bridge@64,0 {
reg = <0x00400000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi0: wifi@65,0 {
/* Atheros AR9380 5GHz */
compatible = "pci168c,0030";
reg = <0x00410000 0 0 0 0>;
interrupts = <1>; /* INTA */
};
};
};

View File

@@ -0,0 +1,96 @@
// SPDX-License-Identifier: GPL-2.0-only
/dts-v1/;
#include "netgear-wndap6x0.dtsi"
/ {
model = "Netgear WNDAP660";
compatible = "netgear,wndap660", "apm,bluestone";
};
&LEDS {
led-5 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
};
led-6 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
};
led-7 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&GPIO0 22 GPIO_ACTIVE_HIGH>;
};
led-8 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&GPIO0 23 GPIO_ACTIVE_HIGH>;
};
};
&PCIE0 {
/*
* relevant lspci topology:
*
* -+-[0000:40]---00.0-[41-7f]----00.0-[42-45]--+-02.0-[43]----00.0
* +-03.0-[44]----00.0
*
*/
bridge@64,0 {
reg = <0x00400000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@65,0 {
/* IDT PES3T3 PCI Express Switch */
compatible = "pci111d,8039";
reg = <0x00410000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@66,2 {
compatible = "pci111d,8039";
reg = <0x00421000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi0: wifi@67,0 {
/* Atheros AR9380 2.4/5GHz */
compatible = "pci168c,0030";
reg = <0x00430000 0 0 0 0>;
interrupts = <3>; /* INTC */
};
};
bridge@66,3 {
compatible = "pci111d,8039";
reg = <0x00421800 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi1: wifi@68,0 {
/* Atheros AR9380 2.4/5GHz */
compatible = "pci168c,0030";
reg = <0x00440000 0 0 0 0>;
interrupts = <4>; /* INTD */
};
};
};
};
};

View File

@@ -0,0 +1,245 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Device Tree Source for Netgear WNDAP620 and WNDAP660
*/
#include <dt-bindings/leds/common.h>
#include "apm82181.dtsi"
/ {
aliases {
serial0 = &UART0;
};
chosen {
stdout-path = "/plb/opb/serial@ef600300";
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&ndfc {
status = "okay";
/* 32 MiB SLC NAND Flash */
nand {
nand-is-boot-medium;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x00000000 0x00100000>;
read-only;
};
partition@100000 {
compatible = "u-boot,env";
label = "u-boot-env";
reg = <0x00100000 0x0004000>;
read-only;
ethaddr {
};
bootcmd {
};
serno {
};
ProductID {
};
HardwareVer {
};
};
/* 0x104000 - 0x10ffff free */
partition@110000 {
label = "firmware";
reg = <0x00110000 0x01ac0000>;
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
/*
* The u-boot bootloader will look at this
* offset (0x110000) for an uImage binary.
*/
label = "kernel";
reg = <0x00000000 0x005f0000>;
};
partition@5f0000 {
label = "ubi";
reg = <0x005f0000 0x014d0000>;
};
};
partition@1bd0000 {
/*
* original vendor device-tree - do not use or
* overwrite. The original u-boot also supports
* the gzipped legacy monolithic/Multi-File Image
* format, which is a better choice.
*/
label = "device-tree";
reg = <0x01bd0000 0x0010000>;
read-only;
};
partition@1be0000 {
label = "var";
reg = <0x01be0000 0x00400000>;
read-only;
};
partition@1fe0000 {
label = "manudata";
reg = <0x01fe0000 0x00020000>;
read-only;
};
};
};
};
&UART0 {
status = "okay";
};
&GPIO0 {
status = "okay";
};
&EMAC0 {
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
pause;
asym-pause;
};
mdio0: mdio {
#address-cells = <1>;
#size-cells = <0>;
};
};
&POB0 {
keys {
compatible = "gpio-keys";
button-restart {
label = "Reset Button";
gpios = <&GPIO0 16 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
interrupt-parent = <&UIC1>;
interrupts = <0x15 IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
};
LEDS: leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&GPIO0 18 GPIO_ACTIVE_HIGH>;
};
led-1 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_FAULT;
gpios = <&GPIO0 17 GPIO_ACTIVE_HIGH>;
panic-indicator;
};
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function-enumerator = <0>;
gpios = <&GPIO0 21 GPIO_ACTIVE_HIGH>;
};
led-3 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <0>;
gpios = <&GPIO0 19 GPIO_ACTIVE_HIGH>;
};
led-4 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WLAN;
function-enumerator = <1>;
gpios = <&GPIO0 20 GPIO_ACTIVE_HIGH>;
};
};
gpio-export {
compatible = "gpio-export";
internal-antenna {
gpio-export,name = "wndap6x0:internal-antenna";
gpio-export,output = <1>;
gpios = <&GPIO0 11 GPIO_ACTIVE_HIGH>;
};
external-antenna {
gpio-export,name = "wndap6x0:external-antenna";
gpio-export,output = <0>;
gpios = <&GPIO0 14 GPIO_ACTIVE_HIGH>;
};
mains-powered {
/*
* Input pin describing what powers the AP
* 0/Low = PoE
* 1/High = 12v mains powered
*/
gpio-export,name = "wndap620:mains-powered";
gpios = <&GPIO0 3 GPIO_ACTIVE_HIGH>;
};
};
rtl8367b {
compatible = "realtek,rtl8367b";
realtek,extif0 = <1 2 1 1 1 1 1 1 2>;
mii-bus = <&mdio0>;
};
};
&PCIE0 {
status = "okay";
};
&IIC0 {
status = "okay";
at24@52 {
compatible = "atmel,24c04";
reg = <0x52>;
pagesize = <16>;
read-only;
};
};

View File

@@ -0,0 +1,577 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Device Tree Source for Netgear WNDR4700/WNDR4720 Series
*
* Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
*/
/dts-v1/;
#include <dt-bindings/thermal/thermal.h>
#include <dt-bindings/leds/common.h>
#include "apm82181.dtsi"
/ {
model = "Netgear WNDR4700/WNDR4720 Series";
compatible = "netgear,wndr4700", "apm,bluestone";
aliases {
serial0 = &UART0;
};
chosen {
stdout-path = "/plb/opb/serial@ef600300:115200n8";
};
thermal-zones {
cpu_thermal: cpu-thermal {
polling-delay-passive = <10000>; /* milliseconds */
polling-delay = <20000>; /* milliseconds */
thermal-sensors = <&temp0 1>;
/*
* REVISIT:
*
* Add the <&drive_temp>; sensor there and wire up
* the coefficients = <1 1>; property.
*
* Note: The kernel does not yet support more than
* one sensor (see of_thermal.c's function:
* thermal_of_build_thermal_zon()). Once this is
* implemented.
*/
trips {
/*
* Once the thermal governers are a bit smarter
* and do hysteresis properly, we can disable
* the fan when the HDD and CPU has < 39 C.
*/
cpu_alert0: board-alert0 {
temperature = <25000>;
hysteresis = <2000>;
type = "active";
};
cpu_alert1: cpu-alert1 {
temperature = <27000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_alert2: cpu-alert2 {
temperature = <65000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_alert3: cpu-alert3 {
temperature = <70000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_alert4: cpu-alert4 {
temperature = <75000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_alert5: cpu-alert5 {
temperature = <80000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_alert6: cpu-alert6 {
temperature = <85000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "active";
};
cpu_crit: cpu-crit {
temperature = <90000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "critical";
};
};
cooling-maps {
map0 {
trip = <&cpu_alert0>;
cooling-device = <&fan0 THERMAL_NO_LIMIT 0>;
};
map1 {
trip = <&cpu_alert1>;
cooling-device = <&fan0 1 1>;
};
map2 {
trip = <&cpu_alert2>;
cooling-device = <&fan0 2 4>;
};
map3 {
trip = <&cpu_alert3>;
cooling-device = <&fan0 4 8>;
};
map4 {
trip = <&cpu_alert4>;
cooling-device = <&fan0 9 12>;
};
map5 {
trip = <&cpu_alert5>;
cooling-device = <&fan0 13 15>;
};
map6 {
trip = <&cpu_alert6>;
cooling-device =<&fan0 16 THERMAL_NO_LIMIT>;
};
};
};
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&SATA1 {
status = "okay";
/*
* This drive may have a temperature sensor with a
* thermal zone we can use for thermal control of the
* chassis temperature using the fan.
*/
drive_temp: sata-port@0 {
reg = <0>;
#thermal-sensor-cells = <0>;
};
};
&USBOTG0 {
status = "okay";
dr_mode = "host";
};
&ndfc {
status = "okay";
/* 128 MiB Nand Flash */
nand {
nand-is-boot-medium;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "uboot";
reg = <0x00000000 0x00180000>;
compatible = "fixed-partitions";
read-only;
partition@40000 {
label = "u-boot-env-main";
compatible = "u-boot,env-redundant-count";
reg = <0x00040000 0x20000>; /* one block is 128k */
read-only;
};
/*
* Causes u_boot_env: probe of 4e4000000.ndfc:nand:partitions:partition@0:partition@60000
* failed with error -17
*
* partition@60000 {
* label = "u-boot-env-redundant";
* compatible = "u-boot,env-redundant-count";
* reg = <0x00060000 0x20000>;
* read-only;
* };
*/
};
partition@180000 {
label = "firmware";
reg = <0x00180000 0x01860000>;
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "kernel";
reg = <0x00000000 0x00480000>;
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/*
* device-tree is @ 0x00180000 - 0x0019ffff
* kernel starts from 0x20000.
* this is coded into netgear's u-boot.
*/
partition@0 {
label = "dtb";
reg = <0x00000000 0x20000>;
};
/*
* this partition will also contain a
* fake/empty rootfs at the end to fool
* Netgear's uboot rootfs integrety checks.
*/
};
partition@480000 {
label = "ubi";
reg = <0x00480000 0x013e0000>;
};
};
/*
* Netgear's u-boot in the fw_recovery mode (can be
* triggered by holding the reset button, or if
* "bootm" fails) will not flash past this point
* (= 0x19E0000).
*/
partition@19e0000 {
label = "config";
reg = <0x019e0000 0x00080000>;
read-only;
};
partition@1a60000 {
label = "pot";
reg = <0x01a60000 0x00080000>;
read-only;
};
partition@1ae0000 {
label = "traffic_meter";
reg = <0x01ae0000 0x00300000>;
read-only;
};
partition@1de0000 {
label = "language";
reg = <0x01de0000 0x001c0000>;
read-only;
};
partition@1fa0000 {
label = "ecos";
reg = <0x01fa0000 0x06020000>;
read-only;
};
partition@7fc0000 {
label = "wifi_data";
reg = <0x07fc0000 0x00040000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_wifi_0: macaddr@0 {
reg = <0x0 0x6>;
};
macaddr_wifi_c: macaddr@c {
reg = <0xc 0x6>;
};
calibration_wifi_1000: calibration@1000 {
reg = <0x1000 0x440>;
};
calibration_wifi_5000: calibration@5000 {
reg = <0x5000 0x440>;
};
};
};
};
};
};
&UART0 {
status = "okay";
};
&GPIO0 {
status = "okay";
};
&IIC0 {
status = "okay";
fan0: fan@1b {
compatible = "microchip,tc654";
reg = <0x1b>;
#cooling-cells = <2>; /* min followed by max */
gpios = <&GPIO0 16 GPIO_ACTIVE_LOW>; /* fan status */
alarm-gpios = <&GPIO0 5 GPIO_ACTIVE_LOW>; /* fault */
interrupt-parent = <&UIC3>;
interrupts = <0x16 IRQ_TYPE_EDGE_FALLING>; /* fault */
};
temp0: temp@4d {
compatible = "gmt,g781";
reg = <0x4d>;
#thermal-sensor-cells = <1>;
/*
* The LM90 has two sensors:
* temp0 -> internal to LM90
* temp1 -> external NTC near CPU
*/
};
};
&EMAC0 {
status = "okay";
phy-handle = <&phy0>;
fifo-entry-size = <10>;
mdio {
#address-cells = <1>;
#size-cells = <0>;
phy0: ethernet-phy@0 {
device_type = "ethernet-phy";
reg = <0>;
qca,mib-poll-interval = <500>;
qca,ar8327-initvals = <
0x0010 0x40000000
0x0624 0x007f7f7f
0x0004 0x07a00000 /* PAD0_MODE */
0x000c 0x01000000 /* PAD6_MODE */
0x007c 0x0000007e /* PORT0_STATUS */
>;
};
};
};
&POB0 {
keys {
compatible = "gpio-keys";
button-restart {
label = "Reset button";
gpios = <&GPIO0 15 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
interrupt-parent = <&UIC1>;
interrupts = <0x14 IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
button-backup_hd {
label = "Backup HD button";
gpios = <&GPIO0 19 GPIO_ACTIVE_LOW>;
linux,code = <BTN_0>;
interrupt-parent = <&UIC1>;
interrupts = <0x1e IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
button-rfkill {
label = "RFKILL button";
gpios = <&GPIO0 20 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RFKILL>;
interrupt-parent = <&UIC1>;
interrupts = <0x1f IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
button-wps {
label = "WPS button";
gpios = <&GPIO0 23 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
interrupt-parent = <&UIC2>;
interrupts = <0x19 IRQ_TYPE_EDGE_FALLING>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&GPIO0 8 GPIO_ACTIVE_HIGH>;
};
led-1 {
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_FAULT;
gpios = <&GPIO0 9 GPIO_ACTIVE_LOW>;
panic-indicator;
};
led-2 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_USB;
gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
trigger-sources = <&usb2_port 1>, <&usb2_port 2>,
<&usb3_port 1>, <&usb3_port 2>;
linux,default-trigger = "usbport";
};
led-3 {
color = <LED_COLOR_ID_WHITE>;
function = LED_FUNCTION_INDICATOR;
gpios = <&GPIO0 11 GPIO_ACTIVE_HIGH>;
};
led-4 {
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_WAN;
gpios = <&GPIO0 3 GPIO_ACTIVE_HIGH>;
};
led-5 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
gpios = <&GPIO0 12 GPIO_ACTIVE_HIGH>;
};
led-6 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
gpios = <&GPIO0 14 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "disk-activity";
};
led-7 {
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_DISK_ERR;
gpios = <&GPIO0 17 GPIO_ACTIVE_HIGH>;
};
led-8 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
gpios = <&GPIO0 18 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "phy0tpt";
};
};
};
&PCIE0 {
status = "okay";
/*
* relevant lspci topology:
*
* -+-[0000:40]---00.0-[41-7f]----00.0-[42-45]--+-02.0-[43]----00.0
* +-03.0-[44]----00.0
* \-04.0-[45]----00.0
*
*/
bridge@64,0 {
reg = <0x00400000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@65,0 {
/* IDT PES4T4 PCI Express Switch */
compatible = "pci111d,803a";
reg = <0x00410000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
bridge@66,2 {
compatible = "pci111d,803a";
reg = <0x00421000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi0: wifi@67,0 {
/* Atheros AR9380 5GHz */
compatible = "pci168c,0030";
reg = <0x00430000 0 0 0 0>;
interrupts = <3>; /* INTC */
nvmem-cell-names = "mac-address", "calibration";
nvmem-cells = <&macaddr_wifi_0>, <&calibration_wifi_1000>;
/*
* Because this was such a pain.
* Here's the full device path:
* pci0000:40/0000:40:00.0/0000:41:00.0/0000:42:02.0/0000:43:00.0
*/
};
};
bridge@66,3 {
compatible = "pci111d,803a";
reg = <0x00421800 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
wifi1: wifi@68,0 {
/* Atheros AR9381 2.4GHz */
compatible = "pci168c,0033";
reg = <0x00440000 0 0 0 0>;
interrupts = <4>; /* INTD */
nvmem-cell-names = "mac-address", "calibration";
nvmem-cells = <&macaddr_wifi_c>, <&calibration_wifi_5000>;
};
};
bridge@66,4 {
compatible = "pci111d,803a";
reg = <0x00422000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
ranges;
usb1: usb@69,0 {
/* Renesas uPD720202 */
compatible = "pci1912,0015";
reg = <0x00450000 0 0 0 0>;
interrupts = <1>; /* INTA */
#address-cells = <1>;
#size-cells = <0>;
usb2_port: port@1 {
reg = <1>;
#trigger-source-cells = <1>;
};
usb3_port: port@2 {
reg = <2>;
#trigger-source-cells = <1>;
};
};
};
};
};
};

View File

@@ -0,0 +1,246 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
* (c) Copyright 2010 Western Digital Technologies, Inc. All Rights Reserved.
*/
/dts-v1/;
#include <dt-bindings/leds/common.h>
#include "apm82181.dtsi"
/ {
compatible = "wd,mybooklive", "amcc,apollo3g";
model = "MyBook Live";
aliases {
serial0 = &UART0;
};
};
&POB0 {
ebc {
nor_flash@0,0 {
status = "okay";
compatible = "jedec-flash"; /* "microchip,sst39vf040 */
bank-width = <1>;
reg = <0x00000000 0x00000000 0x00080000>;
#address-cells = <1>;
#size-cells = <1>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
/* Part of bootrom - Don't use it without a jump */
label = "free";
reg = <0x00000000 0x0001e000>;
read-only;
};
partition@1e000 {
compatible = "fixed-partitions";
reg = <0x0001e000 0x00002000>;
label = "u-boot-env";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
compatible = "u-boot,env-redundant-bool";
reg = <0x00000000 0x00001000>;
label = "u-boot-env-1";
ethaddr {
};
};
/*
* Causes the following warning: * sysfs: cannot create duplicate filename '/bus/nvmem/devices/u-boot-env0'
*
* partition@1000 {
* compatible = "u-boot,env-redundant-bool";
* reg = <0x00001000 0x00001000>;
* label = "u-boot-env-2";
*
* };
*/
};
partition@20000 {
label = "uboot";
reg = <0x00020000 0x00050000>;
read-only;
};
};
};
};
GPIO1: gpio@e0000000 {
compatible = "wd,mbl-gpio", "ti,74273";
reg-names = "dat";
reg = <0xe0000000 0x1>;
#gpio-cells = <2>;
gpio-controller;
enable-button {
/* Defined in u-boot as: NOT_NOR
* "enables features other than NOR
* specifically, the buffer at CS2"
* (button).
*
* Note: This option is disabled as
* it prevents the system from being
* rebooted successfully.
*/
gpio-hog;
line-name = "Enable Reset Button, disable NOR";
gpios = <1 GPIO_ACTIVE_HIGH>;
output-low;
};
};
GPIO2: gpio@e0100000 {
compatible = "wd,mbl-gpio", "ti,74244";
reg-names = "dat";
reg = <0xe0100000 0x1>;
#gpio-cells = <2>;
gpio-controller;
no-output;
};
leds {
compatible = "gpio-leds";
/* There's just one tri-color LED with three separate pins.
* One pin for each color (red, green and blue). Each has
* a different meaning.
*/
led-0 {
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_FAULT;
gpios = <&GPIO1 4 GPIO_ACTIVE_HIGH>;
panic-indicator;
};
led-1 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_POWER;
gpios = <&GPIO1 5 GPIO_ACTIVE_HIGH>;
};
led-2 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_DISK;
gpios = <&GPIO1 6 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "disk-activity";
};
};
keys {
compatible = "gpio-keys-polled";
poll-interval = <60>; /* 3 * 20 = 60ms */
autorepeat;
button-restart {
label = "Reset button";
linux,code = <KEY_RESTART>;
gpios = <&GPIO2 2 GPIO_ACTIVE_LOW>;
};
};
usbpwr: usb-regulator {
compatible = "regulator-fixed";
regulator-name = "Power USB Core";
gpios = <&GPIO1 2 GPIO_ACTIVE_HIGH>;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-boot-on; /* uboot sets this */
enable-active-high;
};
sata1pwr: sata1-regulator {
compatible = "regulator-fixed";
regulator-name = "Power Drive Port 1";
gpios = <&GPIO1 3 GPIO_ACTIVE_HIGH>;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
regulator-boot-on; /* uboot sets this */
regulator-always-on; /* needed to read OS from HDD */
enable-active-high;
};
sata0pwr: sata0-regulator {
compatible = "regulator-fixed";
regulator-name = "Power Drive Port 0";
gpios = <&GPIO1 7 GPIO_ACTIVE_HIGH>;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
regulator-boot-on; /* uboot sets this */
regulator-always-on; /* needed to read OS from HDD */
enable-active-high;
};
};
&EMAC0 {
status = "okay";
phy-map = <0x2>;
phy-address = <0x1>;
phy-handle = <&phy>;
phy-mode = "rgmii-id";
mdio {
#address-cells = <1>;
#size-cells = <0>;
reset-gpios = <&GPIO1 0 GPIO_ACTIVE_LOW>;
phy: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&SATA0 {
status = "okay";
drive0: sata-port@0 {
reg = <0>;
#thermal-sensor-cells = <0>;
};
};
&SATA1 {
status = "okay";
drive1: sata-port@0 {
reg = <0>;
#thermal-sensor-cells = <0>;
};
};
&UART0 {
status = "okay";
};
&USBOTG0 {
status = "okay";
dr_mode = "host";
vbus-supply = <&usbpwr>;
};

View File

@@ -0,0 +1,83 @@
# SPDX-License-Identifier: GPL-2.0-only
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
define Build/boot-img
$(RM) -rf $@.bootdir
mkdir -p $@.bootdir/boot
$(CP) $@.scr $@.bootdir/boot/boot.scr
$(CP) $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@.bootdir/boot/$(DEVICE_DTB)
$(CP) $(IMAGE_KERNEL) $@.bootdir/boot/uImage
genext2fs --block-size $(BLOCKSIZE:%k=%Ki) \
--size-in-blocks $$((1024 * $(CONFIG_TARGET_KERNEL_PARTSIZE))) \
--root $@.bootdir $@.boot
# convert it to revision 1 - needed for u-boot ext2load
$(STAGING_DIR_HOST)/bin/tune2fs -O filetype $@.boot
$(STAGING_DIR_HOST)/bin/e2fsck -pDf $@.boot > /dev/null
endef
define Build/boot-script
$(STAGING_DIR_HOST)/bin/mkimage -A powerpc -T script -C none -n "$(PROFILE) Boot Script" \
-d mbl_boot.scr \
$@.scr
endef
define Build/export-dtb
cp $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@
endef
define Build/MuImage-initramfs
rm -rf $@.fakerd $@.new
dd if=/dev/zero of=$@.fakerd bs=32 count=1 conv=sync
# Netgear used an old uboot that doesn't have FIT support.
# So we are stuck with either a full ext2/4 fs in a initrd.
# ... or we try to make the "multi" image approach to work
# for us.
#
# Sadly, the "multi" image has to consists of three
# "fixed" parts in the following "fixed" order:
# 1. The kernel which is in $@
# 2. The (fake) initrd which is in $@.fakerd
# 3. The device tree binary which is in $@.dtb
#
# Now, given that we use the function for the kernel which
# already has a initramfs image inside, we still have to
# add a "fake" initrd (which a mkimage header) in the second
# part of the legacy multi image. Since we need to put the
# device tree stuff into part 3.
-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) -O linux -T multi -C $(1) \
-a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY) -n '$(BOARD_NAME) initramfs' \
-d $@:$@.fakerd:$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@.new
mv $@.new $@
rm -rf $@.fakerd
endef
define Build/prepend-dtb
cat "$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb" "$@" > "$@.new"
mv "$@.new" "$@"
endef
define Image/cpiogz
( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9n >$(KDIR_TMP)/$(IMG_PREFIX)-rootfs.cpio.gz )
endef
define Device/Default
PROFILES := Default
KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
DEVICE_DTS :=
KERNEL_ENTRY := 0x00000000
KERNEL_LOADADDR := 0x00000000
DEVICE_DTS_DIR := ../dts
DEVICE_DTS = $(subst _,-,$(1))
endef
include $(SUBTARGET).mk
$(eval $(call BuildImage))

View File

@@ -0,0 +1,6 @@
setenv boot_args 'setenv bootargs root=/dev/sda2 rw rootfstype=squashfs,ext4'
setenv load_part1 'ext2load sata 0:1 ${kernel_addr_r} /boot/uImage; ext2load sata 0:1 ${fdt_addr_r} /boot/apollo3g.dtb'
setenv load_part2 'ext2load sata 1:1 ${kernel_addr_r} /boot/uImage; ext2load sata 1:1 ${fdt_addr_r} /boot/apollo3g.dtb'
setenv load_sata 'sata init; if run load_part1; then echo Loaded part 1; elif run load_part2; then echo Loaded part 2; fi'
setenv boot_sata 'run load_sata; run boot_args addtty; bootm ${kernel_addr_r} - ${fdt_addr_r}'
run boot_sata

View File

@@ -0,0 +1,27 @@
#!/bin/sh
set -x
[ $# -eq 5 ] || {
echo "SYNTAX: $0 <file> <bootfs image> <rootfs image> <bootfs size> <rootfs size>"
exit 1
}
OUTPUT="$1"
BOOTFS="$2"
ROOTFS="$3"
BOOTFSSIZE="$4"
ROOTFSSIZE="$5"
head=4
sect=63
set $(ptgen -o $OUTPUT -h $head -s $sect -l 4096 -t 83 -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M)
BOOTOFFSET="$(($1 / 512))"
BOOTSIZE="$(($2 / 512))"
ROOTFSOFFSET="$(($3 / 512))"
ROOTFSSIZE="$(($4 / 512))"
dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc
dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc

View File

@@ -0,0 +1,126 @@
define Build/create-uImage-dtb
# flat_dt target expect FIT image - which WNDR4700's uboot doesn't support
-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) \
-O linux -T kernel -C none \
-n '$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION)' \
-d "$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb" "$@.dtb.uimage"
endef
define Build/prepend-dtb-uImage
cat "$@.dtb.uimage" "$@" > "$@.new"
mv "$@.new" "$@"
endef
define Build/meraki-header
-$(STAGING_DIR_HOST)/bin/mkmerakifw \
-B $(BOARD_NAME) -s \
-i $@ \
-o $@.new
@cp $@.new $@
endef
define Device/meraki_mr24
DEVICE_VENDOR := Cisco Meraki
DEVICE_MODEL := MR24
DEVICE_PACKAGES := kmod-spi-gpio -swconfig
BOARD_NAME := mr24
IMAGES := sysupgrade.bin
DEVICE_DTC_FLAGS := --space 64512
IMAGE_SIZE := 8191k
KERNEL := kernel-bin | lzma | uImage lzma | prepend-dtb | meraki-header
KERNEL_INITRAMFS := kernel-bin | lzma | MuImage-initramfs lzma
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
UBINIZE_OPTS := -E 5
SUPPORTED_DEVICES += mr24
endef
TARGET_DEVICES += meraki_mr24
define Device/meraki_mx60
DEVICE_VENDOR := Cisco Meraki
DEVICE_MODEL := MX60
DEVICE_ALT0_VENDOR := Cisco Meraki
DEVICE_ALT0_MODEL := MX60W
DEVICE_PACKAGES := kmod-spi-gpio kmod-usb-ledtrig-usbport kmod-usb-dwc2 \
kmod-usb-storage block-mount
BLOCKSIZE := 128k
IMAGES := sysupgrade.bin
DEVICE_DTC_FLAGS := --space 20480
IMAGE_SIZE := 1021m
KERNEL := kernel-bin | libdeflate-gzip | MuImage-initramfs gzip
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
UBINIZE_OPTS := -E 5
DEVICE_COMPAT_VERSION := 2.0
DEVICE_COMPAT_MESSAGE := uboot's bootcmd has to be updated to support standard multi-image uImages. \
Upgrade via sysupgrade mechanism is not possible.
endef
TARGET_DEVICES += meraki_mx60
define Device/netgear_wndap6x0
DEVICE_VENDOR := NETGEAR
DEVICE_PACKAGES := kmod-eeprom-at24
SUBPAGESIZE := 256
PAGESIZE := 512
BLOCKSIZE := 16k
DEVICE_DTC_FLAGS := --space 32768
IMAGE_SIZE := 27392k
IMAGES := sysupgrade.bin factory.img
KERNEL_SIZE := 6080k
KERNEL := kernel-bin | libdeflate-gzip | MuImage-initramfs gzip
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
UBINIZE_OPTS := -E 5
DEVICE_COMPAT_VERSION := 2.0
DEVICE_COMPAT_MESSAGE := kernel and ubi partitions had to be resized. \
Upgrade via sysupgrade mechanism is not possible.
endef
define Device/netgear_wndap620
$(Device/netgear_wndap6x0)
DEVICE_MODEL := WNDAP620 (Premium Wireless-N)
endef
TARGET_DEVICES += netgear_wndap620
define Device/netgear_wndap660
$(Device/netgear_wndap6x0)
DEVICE_MODEL := WNDAP660 (Dual Radio Dual Band Wireless-N)
endef
TARGET_DEVICES += netgear_wndap660
define Device/netgear_wndr4700
DEVICE_VENDOR := NETGEAR
DEVICE_MODEL := Centria N900 WNDR4700
DEVICE_ALT0_VENDOR := NETGEAR
DEVICE_ALT0_MODEL := Centria N900 WNDR4720
DEVICE_PACKAGES := badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
kmod-nls-utf8 kmod-usb3 kmod-usb-dwc2 kmod-usb-storage \
partx-utils kmod-ata-dwc
BOARD_NAME := wndr4700
PAGESIZE := 2048
SUBPAGESIZE := 512
BLOCKSIZE := 128k
DEVICE_DTC_FLAGS := --space 131008
IMAGE_SIZE := 24960k
IMAGES := factory.img sysupgrade.bin
ARTIFACTS := device-tree.dtb
KERNEL_SIZE := 4608k
# append a fake/empty rootfs to fool netgear's uboot
# CHECK_DNI_FIRMWARE_ROOTFS_INTEGRITY in do_chk_dniimg()
KERNEL := kernel-bin | lzma -d16 | uImage lzma | pad-offset $$(BLOCKSIZE) 64 | \
append-uImage-fakehdr filesystem | create-uImage-dtb | prepend-dtb-uImage
KERNEL_INITRAMFS := kernel-bin | libdeflate-gzip | MuImage-initramfs gzip
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
netgear-dni | check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
ARTIFACT/device-tree.dtb := export-dtb | uImage none
NETGEAR_BOARD_ID := WNDR4700
NETGEAR_HW_ID := 29763875+128+256
UBINIZE_OPTS := -E 5
SUPPORTED_DEVICES += wndr4700
DEVICE_COMPAT_VERSION := 2.0
DEVICE_COMPAT_MESSAGE := kernel and ubi partitions had to be resized. \
Upgrade via sysupgrade mechanism is not possible.
endef
TARGET_DEVICES += netgear_wndr4700

View File

@@ -0,0 +1,27 @@
define Build/hdd-img
./mbl_gen_hdd_img.sh $@ $@.boot $(IMAGE_ROOTFS) $(CONFIG_TARGET_KERNEL_PARTSIZE) $(CONFIG_TARGET_ROOTFS_PARTSIZE)
endef
define Device/wd_mybooklive
DEVICE_VENDOR := Western Digital
DEVICE_MODEL := My Book Live
DEVICE_ALT0_VENDOR := Western Digital
DEVICE_ALT0_MODEL := My Book Live Duo
DEVICE_PACKAGES := kmod-usb-dwc2 kmod-ata-dwc kmod-usb-ledtrig-usbport \
kmod-usb-storage kmod-fs-vfat wpad-basic-mbedtls
SUPPORTED_DEVICES += mbl wd,mybooklive-duo
BLOCKSIZE := 1k
DEVICE_DTC_FLAGS := --pad 4096
KERNEL := kernel-bin | libdeflate-gzip | uImage gzip
KERNEL_INITRAMFS := kernel-bin | libdeflate-gzip | MuImage-initramfs gzip
IMAGES := factory.img.gz sysupgrade.img.gz
ARTIFACTS := apollo3g.dtb
DEVICE_DTB := apollo3g.dtb
FILESYSTEMS := ext4 squashfs
IMAGE/factory.img.gz := boot-script | boot-img | hdd-img | libdeflate-gzip
IMAGE/sysupgrade.img.gz := boot-script | boot-img | hdd-img | libdeflate-gzip | append-metadata
ARTIFACT/apollo3g.dtb := export-dtb
endef
TARGET_DEVICES += wd_mybooklive

View File

@@ -0,0 +1,34 @@
define KernelPackage/ata-dwc
TITLE:=DesignWare Cores SATA support
KCONFIG:=CONFIG_SATA_DWC
FILES:=$(LINUX_DIR)/drivers/ata/sata_dwc_460ex.ko
AUTOLOAD:=$(call AutoLoad,40,sata_dwc_460ex,1)
$(call AddDepends/ata)
endef
define KernelPackage/ata-dwc/description
Platform support for the on-chip SATA controller.
endef
$(eval $(call KernelPackage,ata-dwc))
define KernelPackage/hw-crypto-4xx
TITLE:=Driver AMCC PPC4xx crypto accelerator
KCONFIG:= \
CONFIG_CRYPTO_HW=y \
CONFIG_HW_RANDOM=y \
CONFIG_CRYPTO_DEV_PPC4XX \
CONFIG_HW_RANDOM_PPC4XX=y
DEPENDS:=@TARGET_apm821xx +kmod-random-core +kmod-crypto-manager \
+kmod-crypto-ccm +kmod-crypto-gcm \
+kmod-crypto-sha1 +kmod-crypto-sha256 +kmod-crypto-sha512
FILES:=$(LINUX_DIR)/drivers/crypto/amcc/crypto4xx.ko
AUTOLOAD:=$(call AutoLoad,09,crypto4xx,1)
$(call AddDepends/crypto)
endef
define KernelPackage/hw-crypto-4xx/description
Platform support for the on-chip crypto acceleration.
endef
$(eval $(call KernelPackage,hw-crypto-4xx))

View File

@@ -0,0 +1,36 @@
CONFIG_AT803X_PHY=y
CONFIG_AR8216_PHY=y
# CONFIG_SATA_DWC_OLD_DMA is not set
CONFIG_IKAREM=y
# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set
CONFIG_GENERIC_PHY=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_M48T86=y
CONFIG_THERMAL=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_OF=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
CONFIG_THERMAL_HWMON=y
CONFIG_HWMON=y
CONFIG_SENSORS_GPIO_FAN=y
CONFIG_CMDLINE="rootfstype=squashfs noinitrd"
CONFIG_MTD_NAND_ECC_SW_BCH=y
CONFIG_MTD_NAND_NDFC=y
CONFIG_MTD_RAW_NAND=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_BEB_LIMIT=20
CONFIG_MTD_UBI_BLOCK=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_UBIFS_FS=y
CONFIG_RTL8366_SMI=y
CONFIG_RTL8367B_PHY=y
CONFIG_SENSORS_LM90=y
CONFIG_SENSORS_TC654=y
CONFIG_SWCONFIG=y
CONFIG_SWCONFIG_LEDS=y

View File

@@ -0,0 +1,19 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2011 OpenWrt.org
define Profile/Default
NAME:=Default Profile
PRIORITY:=1
PACKAGES := badblocks block-mount e2fsprogs \
kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
kmod-nls-utf8 kmod-usb3 kmod-usb-dwc2 kmod-usb-storage \
kmod-spi-gpio partx-utils
endef
define Profile/Default/Description
Default package set
endef
$(eval $(call Profile,Default))

View File

@@ -0,0 +1,9 @@
BOARDNAME:=Devices with NAND flash (Routers)
FEATURES += nand pcie
DEFAULT_PACKAGES += kmod-ath9k swconfig wpad-basic-mbedtls
define Target/Description
Build firmware images for APM821XX boards with NAND flash.
For routers like the MR24 or the WNDR4700.
endef

View File

@@ -0,0 +1,30 @@
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -118,6 +118,17 @@ config CANYONLANDS
help
This option enables support for the AMCC PPC460EX evaluation board.
+config APOLLO3G
+ bool "Apollo3G"
+ depends on 44x
+ default n
+ select PPC44x_SIMPLE
+ select APM821xx
+ select IBM_EMAC_RGMII
+ select 460EX
+ help
+ This option enables support for the AMCC Apollo 3G board.
+
config GLACIER
bool "Glacier"
depends on 44x
--- a/arch/powerpc/platforms/44x/ppc44x_simple.c
+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
@@ -46,6 +46,7 @@ machine_device_initcall(ppc44x_simple, p
* board.c file for it rather than adding it to this list.
*/
static char *board[] __initdata = {
+ "amcc,apollo3g",
"amcc,arches",
"amcc,bamboo",
"apm,bluestone",

View File

@@ -0,0 +1,51 @@
--- a/arch/powerpc/platforms/4xx/pci.c
+++ b/arch/powerpc/platforms/4xx/pci.c
@@ -1058,15 +1058,24 @@ static int __init apm821xx_pciex_init_po
u32 val;
/*
- * Do a software reset on PCIe ports.
- * This code is to fix the issue that pci drivers doesn't re-assign
- * bus number for PCIE devices after Uboot
- * scanned and configured all the buses (eg. PCIE NIC IntelPro/1000
- * PT quad port, SAS LSI 1064E)
+ * Only reset the PHY when no link is currently established.
+ * This is for the Atheros PCIe board which has problems to establish
+ * the link (again) after this PHY reset. All other currently tested
+ * PCIe boards don't show this problem.
*/
-
- mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x0);
- mdelay(10);
+ val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
+ if (!(val & 0x00001000)) {
+ /*
+ * Do a software reset on PCIe ports.
+ * This code is to fix the issue that pci drivers doesn't re-assign
+ * bus number for PCIE devices after Uboot
+ * scanned and configured all the buses (eg. PCIE NIC IntelPro/1000
+ * PT quad port, SAS LSI 1064E)
+ */
+
+ mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x0);
+ mdelay(10);
+ }
if (port->endpoint)
val = PTYPE_LEGACY_ENDPOINT << 20;
@@ -1083,9 +1092,12 @@ static int __init apm821xx_pciex_init_po
mtdcri(SDR0, PESDR0_460EX_L0DRV, 0x00000130);
mtdcri(SDR0, PESDR0_460EX_L0CLK, 0x00000006);
- mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x10000000);
- mdelay(50);
- mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x30000000);
+ val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
+ if (!(val & 0x00001000)) {
+ mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x10000000);
+ mdelay(50);
+ mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x30000000);
+ }
mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) |

View File

@@ -0,0 +1,14 @@
--- a/arch/powerpc/platforms/4xx/pci.c
+++ b/arch/powerpc/platforms/4xx/pci.c
@@ -1900,9 +1900,9 @@ static void __init ppc4xx_configure_pcie
* if it works
*/
out_le32(mbase + PECFG_PIM0LAL, 0x00000000);
- out_le32(mbase + PECFG_PIM0LAH, 0x00000000);
+ out_le32(mbase + PECFG_PIM0LAH, 0x00000008);
out_le32(mbase + PECFG_PIM1LAL, 0x00000000);
- out_le32(mbase + PECFG_PIM1LAH, 0x00000000);
+ out_le32(mbase + PECFG_PIM1LAH, 0x0000000c);
out_le32(mbase + PECFG_PIM01SAH, 0xffff0000);
out_le32(mbase + PECFG_PIM01SAL, 0x00000000);

View File

@@ -0,0 +1,29 @@
From c9395ad54e2cabb87d408becc37566f3d8248933 Mon Sep 17 00:00:00 2001
From: Christian Lamparter <chunkeey@gmail.com>
Date: Sun, 1 Dec 2019 02:08:23 +0100
Subject: [PATCH] powerpc: bootwrapper: force gzip as mkimage's compression
method
Due to CONFIG_KERNEL_XZ symbol, the bootwrapper code tries to
instruct the mkimage to use the xz compression, which isn't
supported. This patch forces the gzip compression, which is
supported and doesn't matter because the generated uImage for
the apm821xx target gets ignored as the OpenWrt toolchain will
do separate U-Boot kernel images for each device individually.
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
---
arch/powerpc/boot/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -276,7 +276,7 @@ compressor-$(CONFIG_KERNEL_LZO) := lzo
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
quiet_cmd_wrap = WRAP $@
- cmd_wrap =$(CONFIG_SHELL) $(wrapper) -Z $(compressor-y) -c -o $@ -p $2 \
+ cmd_wrap =$(CONFIG_SHELL) $(wrapper) -Z gzip -c -o $@ -p $2 \
$(CROSSWRAP) $(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) \
vmlinux

View File

@@ -0,0 +1,62 @@
CONFIG_APOLLO3G=y
CONFIG_BROADCOM_PHY=y
CONFIG_EXT4_FS=y
# CONFIG_SATA_DWC_OLD_DMA is not set
CONFIG_ATA=y
CONFIG_ATA_SFF=y
CONFIG_ATA_BMDMA=y
CONFIG_SATA_PMP=y
CONFIG_GENERIC_PHY=y
CONFIG_SATA_DWC=y
# CONFIG_SATA_DWC_DEBUG is not set
CONFIG_CRYPTO_MD5_PPC=y
CONFIG_CRYPTO_SHA1_PPC=y
CONFIG_EXT4_FS=y
CONFIG_F2FS_FS=y
CONFIG_FREEZER=y
CONFIG_FW_CACHE=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_PM=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_74XX_MMIO=y
CONFIG_LEDS_TRIGGER_DISK=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_DM=y
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD=y
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_MULTIPATH is not set
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
# CONFIG_MD_RAID10 is not set
# CONFIG_MD_RAID456 is not set
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_PM=y
CONFIG_PM_AUTOSLEEP=y
CONFIG_PM_CLK=y
CONFIG_PM_SLEEP=y
# CONFIG_PM_USERSPACE_AUTOSLEEP is not set
CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_GC=y
CONFIG_PM_WAKELOCKS_LIMIT=100
CONFIG_PPC_EARLY_DEBUG=y
CONFIG_PPC_EARLY_DEBUG_44x=y
# CONFIG_PPC_EARLY_DEBUG_MEMCONS is not set
# CONFIG_PPC_EARLY_DEBUG_16550 is not set
CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x4
CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
CONFIG_PPC4xx_CPM=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_USB=y
CONFIG_USB_COMMON=y
CONFIG_USB_DWC2=y
CONFIG_USB_DWC2_HOST=y
CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_STORAGE=y

View File

@@ -0,0 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2011 OpenWrt.org
define Profile/Default
NAME:=Default Profile
PRIORITY:=1
PACKAGES := kmod-usb-dwc2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-fs-vfat wpad-basic-mbedtls
endef
define Profile/Default/Description
Default package set
endef
$(eval $(call Profile,Default))

View File

@@ -0,0 +1,10 @@
BOARDNAME := Devices which boot from SATA (NAS)
DEVICE_TYPE := nas
FEATURES += boot-part ext4 rootfs-part
DEFAULT_PACKAGES += badblocks block-mount e2fsprogs kmod-hwmon-drivetemp \
kmod-dm kmod-md-mod partx-utils mkf2fs f2fsck
define Target/Description
Build firmware images for APM82181 boards that boot from SATA.
For NAS like the MyBook Live Series.
endef

View File

@@ -0,0 +1,24 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2016 OpenWrt.org
include $(TOPDIR)/rules.mk
ARCH:=arc
CPU_TYPE:=archs
BOARD:=archs38
BOARDNAME:=Synopsys DesignWare ARC HS38
FEATURES:=source-only
SUBTARGETS:=generic
KERNEL_PATCHVER:=6.1
DEVICE_TYPE:=basic
define Target/Description
Synopsys DesignWare boards
endef
include $(INCLUDE_DIR)/target.mk
$(eval $(call BuildTarget))

View File

@@ -0,0 +1,18 @@
#
# Copyright (C) 2016 OpenWrt.org
#
. /lib/functions/uci-defaults.sh
board_config_update
case "$(board_name)" in
snps,axs103|\
snps,hsdk)
ucidef_set_interface_lan "eth0" "dhcp"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,268 @@
# CONFIG_16KSTACKS is not set
CONFIG_ARC=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_ARC_BUILTIN_DTB_NAME=""
CONFIG_ARC_CACHE=y
CONFIG_ARC_CACHE_LINE_SHIFT=6
CONFIG_ARC_CACHE_PAGES=y
CONFIG_ARC_CPU_HS=y
CONFIG_ARC_CURR_IN_REG=y
CONFIG_ARC_DBG=y
# CONFIG_ARC_DSP_AGU_USERSPACE is not set
# CONFIG_ARC_DSP_KERNEL is not set
CONFIG_ARC_DSP_NONE=y
# CONFIG_ARC_DSP_USERSPACE is not set
CONFIG_ARC_DW2_UNWIND=y
CONFIG_ARC_FPU_SAVE_RESTORE=y
CONFIG_ARC_HAS_ACCL_REGS=y
CONFIG_ARC_HAS_DCACHE=y
# CONFIG_ARC_HAS_DCCM is not set
CONFIG_ARC_HAS_DIV_REM=y
CONFIG_ARC_HAS_ICACHE=y
# CONFIG_ARC_HAS_ICCM is not set
CONFIG_ARC_HAS_LL64=y
CONFIG_ARC_HAS_LLSC=y
# CONFIG_ARC_HAS_PAE40 is not set
CONFIG_ARC_HAS_SWAPE=y
CONFIG_ARC_IRQ_NO_AUTOSAVE=y
CONFIG_ARC_KVADDR_SIZE=256
# CONFIG_ARC_LPB_DISABLE is not set
CONFIG_ARC_MCIP=y
# CONFIG_ARC_METAWARE_HLINK is not set
CONFIG_ARC_MMU_V4=y
# CONFIG_ARC_PAGE_SIZE_16K is not set
# CONFIG_ARC_PAGE_SIZE_4K is not set
CONFIG_ARC_PAGE_SIZE_8K=y
CONFIG_ARC_PLAT_AXS10X=y
# CONFIG_ARC_PLAT_TB10X is not set
# CONFIG_ARC_SMP_HALT_ON_RESET is not set
CONFIG_ARC_SOC_HSDK=y
CONFIG_ARC_TIMERS=y
CONFIG_ARC_TIMERS_64BIT=y
CONFIG_ARC_TUNE_MCPU=""
CONFIG_ARC_USE_UNALIGNED_MEM_ACCESS=y
CONFIG_AXS103=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_SD=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLK_HSDK=y
CONFIG_CLONE_BACKWARDS=y
CONFIG_COMMON_CLK=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CONTEXT_TRACKING=y
CONFIG_CONTEXT_TRACKING_IDLE=y
CONFIG_CPU_RMAP=y
CONFIG_CRC16=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_DRBG_HMAC=y
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_ECHAINIV=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA256=y
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_DEBUG_INFO=y
CONFIG_DMADEVICES=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_OF=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DTC=y
CONFIG_DWMAC_ANARION=y
CONFIG_DWMAC_GENERIC=y
CONFIG_DW_APB_ICTL=y
CONFIG_DW_AXI_DMAC=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_EXT4_FS=y
CONFIG_FAT_FS=y
CONFIG_FB=y
CONFIG_FB_CMDLINE=y
CONFIG_FIXED_PHY=y
CONFIG_FS_IOMAP=y
CONFIG_FS_MBCACHE=y
CONFIG_FS_POSIX_ACL=y
CONFIG_FWNODE_MDIO=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_PENDING_IRQ=y
CONFIG_GENERIC_SCHED_CLOCK=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_CDEV=y
CONFIG_GPIO_DWAPB=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_SNPS_CREG=y
CONFIG_GRACE_PERIOD=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HZ_PERIODIC=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_ST_PRESS=y
CONFIG_IIO_ST_PRESS_I2C=y
CONFIG_IIO_ST_PRESS_SPI=y
CONFIG_IIO_ST_SENSORS_CORE=y
CONFIG_IIO_ST_SENSORS_I2C=y
CONFIG_IIO_ST_SENSORS_SPI=y
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_TRIGGERED_BUFFER=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_IRQCHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_WORK=y
# CONFIG_ISA_ARCOMPACT is not set
CONFIG_ISA_ARCV2=y
CONFIG_JBD2=y
CONFIG_KALLSYMS=y
CONFIG_KERNEL_GZIP=y
CONFIG_LIBFDT=y
CONFIG_LINUX_LINK_BASE=0x90000000
CONFIG_LINUX_RAM_BASE=0x80000000
CONFIG_LOCKD=y
CONFIG_LOCKUP_DETECTOR=y
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_MDIO_BUS=y
CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_DEVRES=y
CONFIG_MEMFD_CREATE=y
CONFIG_MFD_SYSCON=y
CONFIG_MICREL_PHY=y
CONFIG_MIGRATION=y
CONFIG_MMC=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_DW=y
# CONFIG_MMC_DW_BLUEFIELD is not set
# CONFIG_MMC_DW_EXYNOS is not set
# CONFIG_MMC_DW_HI3798CV200 is not set
# CONFIG_MMC_DW_K3 is not set
CONFIG_MMC_DW_PLTFM=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MTD_SPI_NOR=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_NAMESPACES=y
CONFIG_NATIONAL_PHY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NET_FLOW_LIMIT=y
CONFIG_NET_NS=y
CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NET_SELFTESTS=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NO_IOPORT_MAP=y
CONFIG_NR_CPUS=4
CONFIG_OF=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
CONFIG_OF_IRQ=y
CONFIG_OF_KOBJ=y
CONFIG_OF_MDIO=y
CONFIG_PADATA=y
CONFIG_PAGE_POOL=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y
CONFIG_PCS_XPCS=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PHYLIB=y
CONFIG_PHYLIB_LEDS=y
CONFIG_PHYLINK=y
CONFIG_PPS=y
CONFIG_PREEMPT=y
CONFIG_PREEMPTION=y
CONFIG_PREEMPT_BUILD=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_RCU=y
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
CONFIG_PTP_1588_CLOCK=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
CONFIG_RANDSTRUCT_NONE=y
CONFIG_RATIONAL=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_SPI=y
CONFIG_RESET_AXS10X=y
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_HSDK=y
CONFIG_RESET_SIMPLE=y
CONFIG_RFS_ACCEL=y
CONFIG_RPS=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_SCSI=y
CONFIG_SCSI_COMMON=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_ARC=y
CONFIG_SERIAL_ARC_CONSOLE=y
CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SG_POOL=y
CONFIG_SMP=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SPI=y
CONFIG_SPI_DESIGNWARE=y
# CONFIG_SPI_DW_DMA is not set
CONFIG_SPI_DW_MMIO=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y
CONFIG_SRCU=y
CONFIG_STACKTRACE=y
# CONFIG_STANDALONE is not set
CONFIG_STMMAC_ETH=y
CONFIG_STMMAC_PLATFORM=y
CONFIG_SUNRPC=y
CONFIG_SWPHY=y
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_TI_ADC108S102=y
CONFIG_TREE_RCU=y
CONFIG_TREE_SRCU=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_USB_SUPPORT=y
# CONFIG_USER_NS is not set
CONFIG_VFAT_FS=y
CONFIG_WATCHDOG_CORE=y
CONFIG_XPS=y

View File

@@ -0,0 +1,13 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2016 OpenWrt.org
define Profile/Default
NAME:=Default Profile (all drivers)
PACKAGES:= kmod-usb2 kmod-ath9k-htc wpad-basic-mbedtls
endef
define Profile/Default/Description
Default package set compatible with most boards.
endef
$(eval $(call Profile,Default))

View File

@@ -0,0 +1,8 @@
BOARDNAME:=Generic
FEATURES += ext4 usb ramdisk
define Target/Description
Build firmware images for ARC HS38 based boards.
endef

View File

@@ -0,0 +1,5 @@
config AXS10X_SD_BOOT_PARTSIZE
int "Boot (SD Card) filesystem partition size (in MB)"
depends on TARGET_archs38
default 20

View File

@@ -0,0 +1,86 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2016 OpenWrt.org
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
# On ARC initramfs is put before entry point and so entry point moves
# in memory from build to built. Thus we need to extract EP from vmlinux
# every time before generation of uImage.
kernel_ep = `$(KERNEL_CROSS)readelf -h $(1) | grep "Entry point address" | grep -o 0x.*`
define Build/patch-dtb
$(STAGING_DIR_HOST)/bin/patch-dtb $@ $(DTS_DIR)/$(DEVICE_DTS).dtb
endef
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
# Root FS built-in
define Device/vmlinux
KERNEL_SUFFIX := .elf
KERNEL := kernel-bin | patch-dtb
KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf
endef
define Device/nsim_hs
$(call Device/vmlinux)
DEVICE_VENDOR := Synopsys
DEVICE_MODEL := nSIM HS
DEVICE_PROFILE := nsim_hs
DEVICE_DTS := haps_hs
endef
TARGET_DEVICES += nsim_hs
endif
# Root FS on SD-card
KERNEL_LOADADDR := 0x90000000
DEVICE_DTS_LIST:= axs103_idu haps_hs hsdk
FAT32_BLOCK_SIZE=1024
FAT32_BLOCKS=$(shell echo $$(($(CONFIG_AXS10X_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
define Image/Prepare
# Build .dtb for all boards we may run on
$(foreach dts,$(DEVICE_DTS_LIST),
$(call Image/BuildDTB,$(DTS_DIR)/$(dts).dts,$(DTS_DIR)/$(dts).dtb)
)
endef
define Image/Build/SDCard
rm -f $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img
mkfs.fat $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img -C $(FAT32_BLOCKS)
mkimage -C none -A arc -T script -d uEnv.txt $(BIN_DIR)/uEnv.scr
mkenvimage -s 0x4000 -o $(BIN_DIR)/uboot.env ./uboot.env.txt
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/uEnv.scr ::boot.scr
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(DTS_DIR)/*.dtb ::
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/$(IMG_PREFIX)-uImage ::uImage
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/uboot.env ::uboot.env
./gen_axs10x_sdcard_img.sh \
$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img \
$(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img \
$(KDIR)/root.$(1) \
$(CONFIG_AXS10X_SD_BOOT_PARTSIZE) \
$(CONFIG_TARGET_ROOTFS_PARTSIZE)
ifneq ($(CONFIG_TARGET_IMAGES_GZIP),)
gzip -f9n $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img
endif
endef
define Image/BuildKernel
# Build unified uImage
$(call Image/BuildKernel/MkuImage, \
none, $(KERNEL_LOADADDR),$(call kernel_ep,$(KDIR)/vmlinux.elf) , \
$(KDIR)/vmlinux, \
$(BIN_DIR)/$(IMG_PREFIX)-uImage \
)
endef
define Image/Build
$(call Image/Build/$(1),$(1))
$(call Image/Build/SDCard,$(1))
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k conv=sync
$(call Image/Gzip,$(BIN_DIR)/$(IMG_PREFIX)-root.$(1))
endef
$(eval $(call BuildImage))

View File

@@ -0,0 +1,29 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2016 OpenWrt.org
set -x
[ $# -eq 5 ] || {
echo "SYNTAX: $0 <file> <bootfs image> <rootfs image> <bootfs size> <rootfs size>"
exit 1
}
OUTPUT="$1"
BOOTFS="$2"
ROOTFS="$3"
BOOTFSSIZE="$4"
ROOTFSSIZE="$5"
head=4
sect=63
set $(ptgen -o $OUTPUT -h $head -s $sect -l 1024 -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M)
BOOTOFFSET="$(($1 / 512))"
BOOTSIZE="$(($2 / 512))"
ROOTFSOFFSET="$(($3 / 512))"
ROOTFSSIZE="$(($4 / 512))"
dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc
dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc

View File

@@ -0,0 +1,7 @@
setenv kernel_addr_r 0x82000000
setenv fdt_addr_r 0x83000000
setenv loadkernel fatload mmc 0 \${kernel_addr_r} uImage
setenv loaddtb fatload mmc 0 \${fdt_addr_r} \${dts}
setenv bootargs earlycon=uart8250,mmio32,0xe0022000,115200n8 console=ttyS3,115200n8 root=/dev/mmcblk0p2 rootwait print-fatal-signals=1
setenv uenvcmd run loadkernel\; run loaddtb\; bootm \${kernel_addr_r} - \${fdt_addr_r}
run uenvcmd

View File

@@ -0,0 +1,29 @@
baudrate=115200
bootargs=console=ttyS0,115200n8 root=/dev/mmcblk0p2 rootwait
bootcmd=fatload mmc 0:1 0x82000000 uImage && fatload mmc 0:1 0x81000000 hsdk.dtb && bootm 0x82000000 - 0x81000000
bootdelay=2
bootfile=uImage
loadaddr=0x82000000
stderr=serial0@f0005000
stdin=serial0@f0005000
stdout=serial0@f0005000
core_dccm_0=0x10
core_dccm_1=0x6
core_dccm_2=0x10
core_dccm_3=0x6
core_iccm_0=0x10
core_iccm_1=0x6
core_iccm_2=0x10
core_iccm_3=0x6
core_mask=0xF
dcache_ena=0x1
icache_ena=0x1
non_volatile_limit=0xE
hsdk_hs34=setenv core_mask 0x2; setenv icache_ena 0x0; setenv dcache_ena 0x0; setenv core_iccm_1 0x7; setenv core_dccm_1 0x8; setenv non_volatile_limit 0x0;
hsdk_hs36=setenv core_mask 0x1; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_0 0x10; setenv core_dccm_0 0x10; setenv non_volatile_limit 0xE;
hsdk_hs36_ccm=setenv core_mask 0x2; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_1 0x7; setenv core_dccm_1 0x8; setenv non_volatile_limit 0xE;
hsdk_hs38=setenv core_mask 0x1; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_0 0x10; setenv core_dccm_0 0x10; setenv non_volatile_limit 0xE;
hsdk_hs38_ccm=setenv core_mask 0x2; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_1 0x7; setenv core_dccm_1 0x8; setenv non_volatile_limit 0xE;
hsdk_hs38x2=setenv core_mask 0x3; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_0 0x10; setenv core_dccm_0 0x10; setenv non_volatile_limit 0xE; setenv core_iccm_1 0x6; setenv core_dccm_1 0x6;
hsdk_hs38x3=setenv core_mask 0x7; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_0 0x10; setenv core_dccm_0 0x10; setenv non_volatile_limit 0xE; setenv core_iccm_1 0x6; setenv core_dccm_1 0x6; setenv core_iccm_2 0x10; setenv core_dccm_2 0x10;
hsdk_hs38x4=setenv core_mask 0xF; setenv icache_ena 0x1; setenv dcache_ena 0x1; setenv core_iccm_0 0x10; setenv core_dccm_0 0x10; setenv non_volatile_limit 0xE; setenv core_iccm_1 0x6; setenv core_dccm_1 0x6; setenv core_iccm_2 0x10; setenv core_dccm_2 0x10; setenv core_iccm_3 0x6; setenv core_dccm_3 0x6;

View File

@@ -0,0 +1,22 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
include $(TOPDIR)/rules.mk
BOARD:=armsr
BOARDNAME:=Arm SystemReady (EFI) compliant
FEATURES:=fpu pci pcie rtc usb boot-part rootfs-part
FEATURES+=cpiogz ext4 ramdisk squashfs targz vmdk
KERNEL_PATCHVER:=6.6
include $(INCLUDE_DIR)/target.mk
DEFAULT_PACKAGES += mkf2fs e2fsprogs
# blkid used for resolving PARTUUID
# in sysupgrade. vfat required for
# mounting ESP partition
DEFAULT_PACKAGES += blkid kmod-fs-vfat
$(eval $(call BuildTarget))

75
target/linux/armsr/README Normal file
View File

@@ -0,0 +1,75 @@
This target generates images that can be used on ARM machines with EFI
support (e.g EDKII/TianoCore or U-Boot with bootefi).
There are two subtargets:
- armv7 for 32-bit machines
- armv8 for 64-bit machines
The kernel and filesystem images can also be used directly by QEMU:
Run with qemu-system-arm
# boot with initramfs embedded in
qemu-system-arm -nographic -M virt -m 64 -kernel openwrt-armsr-armv7-generic-initramfs-kernel.bin
# boot with accel=kvm
qemu-system-arm -nographic -M virt,accel=kvm -cpu host -m 64 -kernel
openwrt-armsr-armv7-generic-initramfs-kernel.bin
# boot with a separate rootfs
qemu-system-arm -nographic -M virt -m 64 -kernel openwrt-armsr-armv7-generic-kernel.bin \
-drive file=openwrt-armsr-armv7-generic-ext4-rootfs.img,format=raw,if=virtio -append 'root=/dev/vda rootwait'
# boot with local dir as rootfs
qemu-system-arm -nographic -M virt -m 64 -kernel openwrt-armsr-armv7-generic-kernel.bin \
-fsdev local,id=rootdev,path=root-armsr/,security_model=none \
-device virtio-9p-pci,fsdev=rootdev,mount_tag=/dev/root \
-append 'rootflags=trans=virtio,version=9p2000.L,cache=loose rootfstype=9p'
Run with kvmtool
# start a named machine
lkvm run -k openwrt-armsr-armv7-zImage -i openwrt-armsr-armv7-rootfs.cpio --name armsr0
# start with virtio-9p rootfs
lkvm run -k openwrt-armsr-armv7-zImage -d root-armsr/
# stop "armsr0"
lkvm stop --name armsr0
# stop all
lkvm stop --all
The multi-platform ARMv8 target can be used with QEMU:
qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic \
-kernel openwrt-armsr-armv8-generic-initramfs-kernel.bin \
With a EDKII or U-Boot binary for the QEMU ARM virtual machines, you can use these
images in EFI mode:
32-bit:
gunzip -c bin/targets/armsr/armv7/openwrt-armsr-armv7-generic-ext4-combined.img.gz > openwrt-arm-32.img
qemu-system-arm -nographic \
-cpu cortex-a15 -machine virt \
-bios bin/targets/armsr/armv7/u-boot-qemu_armv7/u-boot.bin \
-smp 1 -m 1024 \
-device virtio-rng-pci \
-drive file=openwrt-arm-32.img,format=raw,index=0,media=disk \
-netdev user,id=testlan -net nic,netdev=testlan \
-netdev user,id=testwan -net nic,netdev=testwan
64-bit:
gunzip -c bin/targets/armsr/armv8/openwrt-armsr-armv8-generic-ext4-combined.img.gz > openwrt-arm-64.img
qemu-system-aarch64 -nographic \
-cpu cortex-a53 -machine virt \
-bios bin/targets/armsr/armv8/u-boot-qemu_armv8/u-boot.bin \
-smp 1 -m 1024 \
-device virtio-rng-pci \
-drive file=openwrt-arm-64.img,format=raw,index=0,media=disk \
-netdev user,id=testlan -net nic,netdev=testlan \
-netdev user,id=testwan -net nic,netdev=testwan
One can obtain other EFI/BIOS binaries from:
- Distribution packages (such as qemu-efi-arm and qemu-efi-aarch64 in Debian)
- Community builds, like retrage/edk2-nightly: https://retrage.github.io/edk2-nightly/

View File

@@ -0,0 +1,83 @@
CONFIG_ALIGNMENT_TRAP=y
CONFIG_ARCH_32BIT_OFF_T=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_ARCH_MMAP_RND_BITS=8
CONFIG_ARCH_MULTIPLATFORM=y
# CONFIG_ARCH_MULTI_V4 is not set
# CONFIG_ARCH_MULTI_V4T is not set
CONFIG_ARCH_MULTI_V6_V7=y
CONFIG_ARCH_MULTI_V7=y
CONFIG_ARCH_NR_GPIO=0
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_VIRT=y
CONFIG_ARM=y
CONFIG_ARM_CPU_SUSPEND=y
CONFIG_ARM_HAS_SG_CHAIN=y
CONFIG_ARM_HEAVY_MB=y
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
CONFIG_ARM_L1_CACHE_SHIFT=6
CONFIG_ARM_L1_CACHE_SHIFT_6=y
CONFIG_ARM_LPAE=y
CONFIG_ARM_PATCH_IDIV=y
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_ARM_PSCI=y
CONFIG_ARM_THUMB=y
CONFIG_ARM_UNWIND=y
CONFIG_ARM_VIRT_EXT=y
CONFIG_AUTO_ZRELADDR=y
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
CONFIG_CACHE_L2X0=y
CONFIG_COMPAT_32BIT_TIME=y
CONFIG_CPU_32v6K=y
CONFIG_CPU_32v7=y
CONFIG_CPU_ABRT_EV7=y
CONFIG_CPU_CACHE_V7=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
CONFIG_CPU_HAS_ASID=y
CONFIG_CPU_PABRT_V7=y
CONFIG_CPU_SPECTRE=y
CONFIG_CPU_THUMB_CAPABLE=y
CONFIG_CPU_TLB_V7=y
CONFIG_CPU_V7=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
CONFIG_DMA_OPS=y
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
CONFIG_GENERIC_VDSO_32=y
CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HAVE_SMP=y
CONFIG_HZ_FIXED=0
CONFIG_HZ_PERIODIC=y
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
CONFIG_MODULES_USE_ELF_REL=y
CONFIG_NEON=y
CONFIG_NR_CPUS=4
CONFIG_OLD_SIGACTION=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OUTER_CACHE=y
CONFIG_OUTER_CACHE_SYNC=y
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_PERF_USE_VMALLOC=y
CONFIG_PHYS_OFFSET=0
CONFIG_RTC_MC146818_LIB=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SMP_ON_UP=y
CONFIG_SWP_EMULATE=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
CONFIG_UNWINDER_ARM=y
# CONFIG_UNWINDER_FRAME_POINTER is not set
CONFIG_USE_OF=y
CONFIG_VFP=y
CONFIG_VFPv3=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_BCJ=y
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_ZBOOT_ROM_TEXT=0x0

View File

@@ -0,0 +1,10 @@
ARCH:=arm
SUBTARGET:=armv7
BOARDNAME:=32-bit (armv7) machines
CPU_TYPE:=cortex-a15
CPU_SUBTYPE:=neon-vfpv4
KERNELNAME:=zImage
define Target/Description
Build images for $(BOARDNAME)
endef

View File

@@ -0,0 +1,854 @@
CONFIG_64BIT=y
CONFIG_ACPI_APEI=y
# CONFIG_ACPI_FFH is not set
# CONFIG_ACPI_FPDT is not set
CONFIG_ACPI_HMAT=y
CONFIG_ACPI_PCC=y
CONFIG_AHCI_IMX=y
CONFIG_AHCI_MVEBU=y
CONFIG_AHCI_QORIQ=y
CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
CONFIG_ARCH_BCM=y
CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCMBCA is not set
CONFIG_ARCH_BCM_IPROC=y
CONFIG_ARCH_BRCMSTB=y
CONFIG_ARCH_HISI=y
CONFIG_ARCH_INTEL_SOCFPGA=y
CONFIG_ARCH_LAYERSCAPE=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
CONFIG_ARCH_MMAP_RND_BITS=18
CONFIG_ARCH_MMAP_RND_BITS_MAX=24
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
CONFIG_ARCH_MVEBU=y
CONFIG_ARCH_MXC=y
CONFIG_ARCH_NXP=y
CONFIG_ARCH_PROC_KCORE_TEXT=y
CONFIG_ARCH_R8A774A1=y
CONFIG_ARCH_R8A774B1=y
CONFIG_ARCH_R8A774C0=y
CONFIG_ARCH_R8A774E1=y
# CONFIG_ARCH_R8A77950 is not set
# CONFIG_ARCH_R8A77951 is not set
# CONFIG_ARCH_R8A77960 is not set
# CONFIG_ARCH_R8A77961 is not set
# CONFIG_ARCH_R8A77965 is not set
# CONFIG_ARCH_R8A77970 is not set
# CONFIG_ARCH_R8A77980 is not set
# CONFIG_ARCH_R8A77990 is not set
# CONFIG_ARCH_R8A77995 is not set
# CONFIG_ARCH_R8A779A0 is not set
# CONFIG_ARCH_R8A779F0 is not set
# CONFIG_ARCH_R8A779G0 is not set
CONFIG_ARCH_R9A07G043=y
CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
CONFIG_ARCH_R9A09G011=y
CONFIG_ARCH_RENESAS=y
CONFIG_ARCH_ROCKCHIP=y
CONFIG_ARCH_STACKWALK=y
CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_SYNQUACER=y
CONFIG_ARCH_THUNDER=y
CONFIG_ARCH_THUNDER2=y
CONFIG_ARCH_VEXPRESS=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_ARCH_ZYNQMP=y
CONFIG_ARM64=y
CONFIG_ARM64_4K_PAGES=y
CONFIG_ARM64_AMU_EXTN=y
CONFIG_ARM64_BTI=y
CONFIG_ARM64_CNP=y
CONFIG_ARM64_CRYPTO=y
CONFIG_ARM64_E0PD=y
CONFIG_ARM64_EPAN=y
CONFIG_ARM64_ERRATUM_1024718=y
CONFIG_ARM64_ERRATUM_1165522=y
CONFIG_ARM64_ERRATUM_1286807=y
CONFIG_ARM64_ERRATUM_1319367=y
CONFIG_ARM64_ERRATUM_1418040=y
CONFIG_ARM64_ERRATUM_1463225=y
CONFIG_ARM64_ERRATUM_1508412=y
CONFIG_ARM64_ERRATUM_1530923=y
CONFIG_ARM64_ERRATUM_1542419=y
CONFIG_ARM64_ERRATUM_1742098=y
CONFIG_ARM64_ERRATUM_2051678=y
CONFIG_ARM64_ERRATUM_2054223=y
CONFIG_ARM64_ERRATUM_2067961=y
CONFIG_ARM64_ERRATUM_2077057=y
CONFIG_ARM64_ERRATUM_2441007=y
CONFIG_ARM64_ERRATUM_2441009=y
CONFIG_ARM64_ERRATUM_2457168=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
CONFIG_ARM64_ERRATUM_827319=y
CONFIG_ARM64_ERRATUM_832075=y
CONFIG_ARM64_ERRATUM_834220=y
CONFIG_ARM64_ERRATUM_843419=y
CONFIG_ARM64_ERRATUM_845719=y
CONFIG_ARM64_HW_AFDBM=y
CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PAGE_SHIFT=12
CONFIG_ARM64_PAN=y
CONFIG_ARM64_PA_BITS=48
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PTR_AUTH=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
CONFIG_ARM64_RAS_EXTN=y
CONFIG_ARM64_SME=y
CONFIG_ARM64_SVE=y
CONFIG_ARM64_TAGGED_ADDR_ABI=y
CONFIG_ARM64_TLB_RANGE=y
CONFIG_ARM64_VA_BITS=48
CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y
CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE=y
# CONFIG_ARMADA_37XX_RWTM_MBOX is not set
CONFIG_ARMADA_37XX_WATCHDOG=y
CONFIG_ARMADA_THERMAL=y
CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y
# CONFIG_ARM_DMC620_PMU is not set
# CONFIG_ARM_MHU_V2 is not set
CONFIG_ARM_PSCI_CPUIDLE=y
CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y
CONFIG_ARM_SBSA_WATCHDOG=y
CONFIG_ARM_SCPI_POWER_DOMAIN=y
CONFIG_ARM_SCPI_PROTOCOL=y
CONFIG_ARM_SMCCC_SOC_ID=y
CONFIG_ARM_SMC_WATCHDOG=y
CONFIG_ARM_SMMU=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
CONFIG_ARM_SMMU_V3=y
# CONFIG_ARM_SMMU_V3_PMU is not set
# CONFIG_ARM_SMMU_V3_SVA is not set
CONFIG_ATOMIC64_SELFTEST=y
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
# CONFIG_AXI_DMAC is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BCM2711_THERMAL is not set
CONFIG_BCM2835_MBOX=y
CONFIG_BCM2835_POWER=y
# CONFIG_BCM2835_THERMAL is not set
# CONFIG_BCM2835_VCHIQ is not set
CONFIG_BCM2835_WDT=y
# CONFIG_BCMASP is not set
# CONFIG_BCMGENET is not set
# CONFIG_BCM_CYGNUS_PHY is not set
# CONFIG_BCM_FLEXRM_MBOX is not set
# CONFIG_BCM_NS_THERMAL is not set
# CONFIG_BCM_PDC_MBOX is not set
# CONFIG_BCM_SR_THERMAL is not set
CONFIG_BCM_VIDEOCORE=y
# CONFIG_BGMAC_PLATFORM is not set
CONFIG_BLK_PM=y
# CONFIG_BRCMSTB_PM is not set
# CONFIG_BRCMSTB_THERMAL is not set
CONFIG_BRCM_USB_PINMAP=y
CONFIG_CAVIUM_ERRATUM_22375=y
CONFIG_CAVIUM_ERRATUM_23144=y
CONFIG_CAVIUM_ERRATUM_23154=y
CONFIG_CAVIUM_ERRATUM_27456=y
CONFIG_CAVIUM_ERRATUM_30115=y
CONFIG_CAVIUM_TX2_ERRATUM_219=y
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
CONFIG_CLK_BCM_NS2=y
CONFIG_CLK_BCM_SR=y
CONFIG_CLK_IMX8MM=y
CONFIG_CLK_IMX8MN=y
CONFIG_CLK_IMX8MP=y
CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
CONFIG_CLK_INTEL_SOCFPGA=y
CONFIG_CLK_INTEL_SOCFPGA64=y
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_CLK_PX30=y
CONFIG_CLK_QORIQ=y
CONFIG_CLK_RASPBERRYPI=y
CONFIG_CLK_RCAR_USB2_CLOCK_SEL=y
CONFIG_CLK_RENESAS=y
CONFIG_CLK_RK3308=y
CONFIG_CLK_RK3328=y
CONFIG_CLK_RK3368=y
CONFIG_CLK_RK3399=y
CONFIG_CLK_RK3568=y
CONFIG_CLK_RK3588=y
CONFIG_CLK_SP810=y
CONFIG_CLK_SUNXI=y
CONFIG_CLK_SUNXI_CLOCKS=y
# CONFIG_CLK_SUNXI_PRCM_SUN6I is not set
# CONFIG_CLK_SUNXI_PRCM_SUN8I is not set
# CONFIG_CLK_SUNXI_PRCM_SUN9I is not set
CONFIG_CLK_VEXPRESS_OSC=y
CONFIG_CMA=y
CONFIG_CMA_ALIGNMENT=8
CONFIG_CMA_AREAS=19
# CONFIG_CMA_DEBUG is not set
# CONFIG_CMA_DEBUGFS is not set
CONFIG_CMA_SIZE_MBYTES=32
# CONFIG_CMA_SIZE_SEL_MAX is not set
CONFIG_CMA_SIZE_SEL_MBYTES=y
# CONFIG_CMA_SIZE_SEL_MIN is not set
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
# CONFIG_CMA_SYSFS is not set
# CONFIG_COMMON_CLK_FSL_FLEXSPI is not set
# CONFIG_COMMON_CLK_FSL_SAI is not set
CONFIG_COMMON_CLK_HI3516CV300=y
CONFIG_COMMON_CLK_HI3519=y
CONFIG_COMMON_CLK_HI3559A=y
CONFIG_COMMON_CLK_HI3660=y
CONFIG_COMMON_CLK_HI3670=y
CONFIG_COMMON_CLK_HI3798CV200=y
CONFIG_COMMON_CLK_HI6220=y
CONFIG_COMMON_CLK_HI655X=y
CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_SCPI=y
CONFIG_COMMON_CLK_ZYNQMP=y
CONFIG_COMMON_RESET_HI3660=y
CONFIG_COMMON_RESET_HI6220=y
# CONFIG_COMPAT_32BIT_TIME is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_PM=y
CONFIG_CRYPTO_AES_ARM64=y
CONFIG_CRYPTO_AES_ARM64_BS=y
CONFIG_CRYPTO_AES_ARM64_CE=y
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CRYPTD=y
# CONFIG_CRYPTO_DEV_ALLWINNER is not set
# CONFIG_CRYPTO_DEV_BCM_SPU is not set
# CONFIG_CRYPTO_DEV_FSL_DPAA2_CAAM is not set
# CONFIG_CRYPTO_DEV_HISI_HPRE is not set
# CONFIG_CRYPTO_DEV_HISI_SEC2 is not set
# CONFIG_CRYPTO_DEV_HISI_TRNG is not set
# CONFIG_CRYPTO_DEV_OCTEONTX2_CPT is not set
# CONFIG_CRYPTO_DEV_ROCKCHIP is not set
# CONFIG_CRYPTO_DEV_ZYNQMP_AES is not set
# CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set
CONFIG_CRYPTO_GHASH_ARM64_CE=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
CONFIG_CRYPTO_POLYVAL_ARM64_CE=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA1_ARM64_CE=y
CONFIG_CRYPTO_SHA256_ARM64=y
CONFIG_CRYPTO_SHA2_ARM64_CE=y
CONFIG_CRYPTO_SHA512_ARM64=y
CONFIG_CRYPTO_SIMD=y
# CONFIG_CRYPTO_SM4_ARM64_CE_BLK is not set
# CONFIG_CRYPTO_SM4_ARM64_CE_CCM is not set
# CONFIG_CRYPTO_SM4_ARM64_CE_GCM is not set
# CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set
# CONFIG_DEV_DAX_HMEM is not set
CONFIG_DMA_BCM2835=y
CONFIG_DMA_CMA=y
CONFIG_DMA_DIRECT_REMAP=y
# CONFIG_DMA_NUMA_CMA is not set
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_DMA_SUN6I=y
CONFIG_DRM=y
CONFIG_DRM_BOCHS=y
CONFIG_DRM_BRIDGE=y
# CONFIG_DRM_FSL_LDB is not set
CONFIG_DRM_GEM_SHMEM_HELPER=y
# CONFIG_DRM_IMX8QM_LDB is not set
# CONFIG_DRM_IMX8QXP_LDB is not set
# CONFIG_DRM_IMX8QXP_PIXEL_COMBINER is not set
# CONFIG_DRM_IMX8QXP_PIXEL_LINK is not set
# CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI is not set
# CONFIG_DRM_IMX_DCSS is not set
# CONFIG_DRM_IMX_LCDC is not set
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANEL_BRIDGE=y
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set
# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set
# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set
# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set
CONFIG_DRM_QXL=y
# CONFIG_DRM_RCAR_DU is not set
# CONFIG_DRM_ROCKCHIP is not set
# CONFIG_DRM_RZG2L_MIPI_DSI is not set
# CONFIG_DRM_SHMOBILE is not set
CONFIG_DRM_TTM=y
CONFIG_DRM_TTM_HELPER=y
# CONFIG_DRM_V3D is not set
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_DRM_VIRTIO_GPU_KMS=y
CONFIG_DRM_VRAM_HELPER=y
# CONFIG_DWMAC_SUN8I is not set
# CONFIG_DWMAC_SUNXI is not set
CONFIG_DW_WATCHDOG=y
CONFIG_EFI_CAPSULE_LOADER=y
CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
CONFIG_EFI_SOFT_RESERVE=y
CONFIG_EFI_VARS_PSTORE=y
# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
CONFIG_FB=y
CONFIG_FB_ARMCLCD=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_CMDLINE=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_MX3=y
# CONFIG_FB_SH_MOBILE_LCDC is not set
# CONFIG_FB_XILINX is not set
CONFIG_FRAME_POINTER=y
# CONFIG_FSL_DPAA is not set
# CONFIG_FSL_DPAA2_QDMA is not set
CONFIG_FSL_ERRATUM_A008585=y
# CONFIG_FSL_IMX8_DDR_PMU is not set
# CONFIG_FSL_IMX9_DDR_PMU is not set
# CONFIG_FSL_PQ_MDIO is not set
CONFIG_FUJITSU_ERRATUM_010001=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
# CONFIG_GIANFAR is not set
CONFIG_GPIO_BCM_XGS_IPROC=y
CONFIG_GPIO_BRCMSTB=y
CONFIG_GPIO_GENERIC=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_MPC8XXX=y
CONFIG_GPIO_MXC=y
CONFIG_GPIO_RASPBERRYPI_EXP=y
CONFIG_GPIO_ROCKCHIP=y
CONFIG_GPIO_THUNDERX=y
CONFIG_GPIO_XLP=y
CONFIG_GPIO_ZYNQ=y
CONFIG_GPIO_ZYNQMP_MODEPIN=y
CONFIG_HDMI=y
CONFIG_HI3660_MBOX=y
CONFIG_HI6220_MBOX=y
CONFIG_HISILICON_ERRATUM_161600802=y
CONFIG_HISILICON_LPC=y
CONFIG_HISI_PMU=y
CONFIG_HISI_THERMAL=y
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_ACPI=y
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_PCIE is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=y
# CONFIG_HW_RANDOM_HISI is not set
# CONFIG_HW_RANDOM_HISTB is not set
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_I2C=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALTERA=y
# CONFIG_I2C_BCM2835 is not set
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_HIX5HD2 is not set
CONFIG_I2C_IMX=y
CONFIG_I2C_IMX_LPI2C=y
CONFIG_I2C_RIIC=y
# CONFIG_I2C_RZV2M is not set
# CONFIG_I2C_SLAVE_TESTUNIT is not set
CONFIG_I2C_SYNQUACER=y
CONFIG_I2C_THUNDERX=y
# CONFIG_I2C_XLP9XX is not set
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
# CONFIG_IMX2_WDT is not set
# CONFIG_IMX8MM_THERMAL is not set
# CONFIG_IMX8QXP_ADC is not set
# CONFIG_IMX93_ADC is not set
# CONFIG_IMX_DMA is not set
# CONFIG_IMX_DSP is not set
CONFIG_IMX_INTMUX=y
CONFIG_IMX_IRQSTEER=y
CONFIG_IMX_MBOX=y
# CONFIG_IMX_MU_MSI is not set
CONFIG_IMX_SCU=y
CONFIG_IMX_SCU_PD=y
# CONFIG_IMX_SC_THERMAL is not set
# CONFIG_IMX_SC_WDT is not set
# CONFIG_IMX_SDMA is not set
# CONFIG_IMX_WEIM is not set
# CONFIG_INPUT_BBNSM_PWRKEY is not set
# CONFIG_INPUT_HISI_POWERKEY is not set
# CONFIG_INPUT_IBM_PANEL is not set
# CONFIG_INTEL_STRATIX10_RSU is not set
# CONFIG_INTEL_STRATIX10_SERVICE is not set
CONFIG_INTERCONNECT=y
CONFIG_INTERCONNECT_IMX=y
CONFIG_INTERCONNECT_IMX8MM=y
CONFIG_INTERCONNECT_IMX8MN=y
CONFIG_INTERCONNECT_IMX8MP=y
CONFIG_INTERCONNECT_IMX8MQ=y
# CONFIG_IOMMUFD is not set
# CONFIG_IOMMU_DEBUGFS is not set
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
CONFIG_IOMMU_SUPPORT=y
# CONFIG_IPMMU_VMSA is not set
# CONFIG_K3_DMA is not set
CONFIG_KCMP=y
# CONFIG_KEYBOARD_IMX_SC_KEY is not set
# CONFIG_KEYBOARD_SUN4I_LRADC is not set
CONFIG_KSM=y
# CONFIG_KUNPENG_HCCS is not set
CONFIG_KVM=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_PLATFORM is not set
# CONFIG_MAILBOX_TEST is not set
CONFIG_MARVELL_10G_PHY=y
# CONFIG_MARVELL_CN10K_DDR_PMU is not set
# CONFIG_MARVELL_CN10K_TAD_PMU is not set
# CONFIG_MARVELL_GTI_WDT is not set
CONFIG_MDIO_BCM_IPROC=y
CONFIG_MDIO_BUS_MUX_BCM_IPROC=y
CONFIG_MDIO_SUN4I=y
# CONFIG_MFD_ALTERA_A10SR is not set
CONFIG_MFD_ALTERA_SYSMGR=y
# CONFIG_MFD_AXP20X_RSB is not set
CONFIG_MFD_CORE=y
CONFIG_MFD_HI655X_PMIC=y
# CONFIG_MFD_KHADAS_MCU is not set
CONFIG_MFD_SUN4I_GPADC=y
# CONFIG_MFD_SUN6I_PRCM is not set
CONFIG_MFD_SYSCON=y
CONFIG_MFD_VEXPRESS_SYSREG=y
CONFIG_MMC=y
CONFIG_MMC_ARMMMCI=y
CONFIG_MMC_BCM2835=y
CONFIG_MMC_BLOCK=y
CONFIG_MMC_CAVIUM_THUNDERX=y
CONFIG_MMC_DW=y
# CONFIG_MMC_DW_BLUEFIELD is not set
# CONFIG_MMC_DW_EXYNOS is not set
# CONFIG_MMC_DW_HI3798CV200 is not set
# CONFIG_MMC_DW_K3 is not set
# CONFIG_MMC_DW_PCI is not set
CONFIG_MMC_DW_PLTFM=y
CONFIG_MMC_DW_ROCKCHIP=y
# CONFIG_MMC_MXC is not set
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_ACPI=y
CONFIG_MMC_SDHCI_CADENCE=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_MMC_SDHCI_IPROC=y
CONFIG_MMC_SDHCI_OF_ESDHC=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHI=y
CONFIG_MMC_SDHI_INTERNAL_DMAC=y
# CONFIG_MMC_SDHI_SYS_DMAC is not set
# CONFIG_MMC_SH_MMCIF is not set
CONFIG_MMC_SUNXI=y
CONFIG_MODULES_USE_ELF_RELA=y
# CONFIG_MVNETA is not set
# CONFIG_MVPP2 is not set
# CONFIG_MV_XOR is not set
# CONFIG_MX3_IPU is not set
CONFIG_MXC_CLK=y
CONFIG_MXC_CLK_SCU=y
# CONFIG_MXS_DMA is not set
CONFIG_NEED_SG_DMA_LENGTH=y
# CONFIG_NET_VENDOR_ALLWINNER is not set
CONFIG_NODES_SHIFT=4
CONFIG_NOP_USB_XCEIV=y
CONFIG_NO_HZ=y
CONFIG_NO_HZ_COMMON=y
CONFIG_NO_HZ_IDLE=y
CONFIG_NR_CPUS=256
CONFIG_NUMA=y
CONFIG_NUMA_BALANCING=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
# CONFIG_NVHE_EL2_DEBUG is not set
CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y
# CONFIG_NVMEM_IMX_IIM is not set
# CONFIG_NVMEM_IMX_OCOTP_ELE is not set
CONFIG_NVMEM_IMX_OCOTP_SCU=y
# CONFIG_NVMEM_LAYERSCAPE_SFP is not set
CONFIG_NVMEM_ROCKCHIP_EFUSE=y
# CONFIG_NVMEM_ROCKCHIP_OTP is not set
# CONFIG_NVMEM_SNVS_LPGPR is not set
# CONFIG_NVMEM_SUNXI_SID is not set
# CONFIG_NVMEM_ZYNQMP is not set
CONFIG_PCC=y
CONFIG_PCIEAER=y
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_PERFORMANCE is not set
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
CONFIG_PCIEPORTBUS=y
CONFIG_PCIE_ARMADA_8K=y
CONFIG_PCIE_BRCMSTB=y
CONFIG_PCIE_HISI_STB=y
CONFIG_PCIE_IPROC_MSI=y
CONFIG_PCIE_IPROC_PLATFORM=y
CONFIG_PCIE_LAYERSCAPE=y
CONFIG_PCIE_MOBIVEIL_PLAT=y
# CONFIG_PCIE_RCAR_EP is not set
CONFIG_PCIE_RCAR_HOST=y
CONFIG_PCIE_ROCKCHIP=y
# CONFIG_PCIE_ROCKCHIP_DW_HOST is not set
CONFIG_PCIE_ROCKCHIP_HOST=y
CONFIG_PCIE_XILINX_CPM=y
CONFIG_PCIE_XILINX_NWL=y
CONFIG_PCI_AARDVARK=y
CONFIG_PCI_HISI=y
CONFIG_PCI_HOST_THUNDER_ECAM=y
CONFIG_PCI_HOST_THUNDER_PEM=y
CONFIG_PCI_IMX6=y
CONFIG_PCI_IMX6_HOST=y
CONFIG_PCI_IOV=y
CONFIG_PCI_LAYERSCAPE=y
CONFIG_PCI_PASID=y
# CONFIG_PCI_RCAR_GEN2 is not set
CONFIG_PHY_BCM_SR_PCIE=y
CONFIG_PHY_BCM_SR_USB=y
CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_BRCM_USB=y
CONFIG_PHY_FSL_IMX8MQ_USB=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
# CONFIG_PHY_FSL_LYNX_28G is not set
CONFIG_PHY_HI3660_USB=y
CONFIG_PHY_HI3670_PCIE=y
CONFIG_PHY_HI3670_USB=y
CONFIG_PHY_HI6220_USB=y
CONFIG_PHY_HISI_INNO_USB2=y
# CONFIG_PHY_HISTB_COMBPHY is not set
# CONFIG_PHY_MIXEL_LVDS_PHY is not set
CONFIG_PHY_MVEBU_A3700_COMPHY=y
CONFIG_PHY_MVEBU_A3700_UTMI=y
CONFIG_PHY_MVEBU_A38X_COMPHY=y
CONFIG_PHY_MVEBU_CP110_COMPHY=y
CONFIG_PHY_NS2_PCIE=y
CONFIG_PHY_NS2_USB_DRD=y
# CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set
# CONFIG_PHY_RCAR_GEN2 is not set
CONFIG_PHY_RCAR_GEN3_PCIE=y
CONFIG_PHY_RCAR_GEN3_USB2=y
CONFIG_PHY_RCAR_GEN3_USB3=y
# CONFIG_PHY_ROCKCHIP_DP is not set
# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set
CONFIG_PHY_ROCKCHIP_EMMC=y
# CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY is not set
# CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY is not set
# CONFIG_PHY_ROCKCHIP_INNO_HDMI is not set
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
# CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY is not set
CONFIG_PHY_ROCKCHIP_PCIE=y
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y
CONFIG_PHY_ROCKCHIP_TYPEC=y
# CONFIG_PHY_ROCKCHIP_USB is not set
CONFIG_PHY_SUN4I_USB=y
CONFIG_PHY_SUN50I_USB3=y
# CONFIG_PHY_SUN6I_MIPI_DPHY is not set
CONFIG_PHY_SUN9I_USB=y
# CONFIG_PHY_XILINX_ZYNQMP is not set
CONFIG_PINCTRL_IMX=y
CONFIG_PINCTRL_IMX8DXL=y
CONFIG_PINCTRL_IMX8MM=y
CONFIG_PINCTRL_IMX8MN=y
CONFIG_PINCTRL_IMX8MP=y
CONFIG_PINCTRL_IMX8MQ=y
CONFIG_PINCTRL_IMX8QM=y
CONFIG_PINCTRL_IMX8QXP=y
CONFIG_PINCTRL_IMX8ULP=y
CONFIG_PINCTRL_IMX93=y
# CONFIG_PINCTRL_IMXRT1050 is not set
# CONFIG_PINCTRL_IMXRT1170 is not set
CONFIG_PINCTRL_IMX_SCU=y
CONFIG_PINCTRL_IPROC_GPIO=y
CONFIG_PINCTRL_NS2_MUX=y
CONFIG_PINCTRL_ROCKCHIP=y
# CONFIG_PINCTRL_SUN20I_D1 is not set
CONFIG_PINCTRL_SUN4I_A10=y
CONFIG_PINCTRL_SUN50I_A100=y
CONFIG_PINCTRL_SUN50I_A100_R=y
CONFIG_PINCTRL_SUN50I_A64=y
CONFIG_PINCTRL_SUN50I_A64_R=y
CONFIG_PINCTRL_SUN50I_H5=y
CONFIG_PINCTRL_SUN50I_H6=y
CONFIG_PINCTRL_SUN50I_H616=y
CONFIG_PINCTRL_SUN50I_H616_R=y
CONFIG_PINCTRL_SUN50I_H6_R=y
CONFIG_PINCTRL_SUN5I=y
# CONFIG_PINCTRL_SUN6I_A31 is not set
# CONFIG_PINCTRL_SUN6I_A31_R is not set
# CONFIG_PINCTRL_SUN8I_A23 is not set
# CONFIG_PINCTRL_SUN8I_A23_R is not set
# CONFIG_PINCTRL_SUN8I_A33 is not set
# CONFIG_PINCTRL_SUN8I_A83T is not set
# CONFIG_PINCTRL_SUN8I_A83T_R is not set
# CONFIG_PINCTRL_SUN8I_H3 is not set
# CONFIG_PINCTRL_SUN8I_H3_R is not set
# CONFIG_PINCTRL_SUN8I_V3S is not set
# CONFIG_PINCTRL_SUN9I_A80 is not set
# CONFIG_PINCTRL_SUN9I_A80_R is not set
CONFIG_PINCTRL_ZYNQMP=y
CONFIG_PM=y
CONFIG_PM_CLK=y
CONFIG_PM_GENERIC_DOMAINS=y
CONFIG_PM_GENERIC_DOMAINS_OF=y
CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_HISI=y
CONFIG_POWER_RESET_VEXPRESS=y
CONFIG_POWER_SUPPLY=y
# CONFIG_PTP_1588_CLOCK_DTE is not set
# CONFIG_PWM_BCM2835 is not set
CONFIG_QCOM_FALKOR_ERRATUM_1003=y
CONFIG_QCOM_FALKOR_ERRATUM_1009=y
CONFIG_QCOM_FALKOR_ERRATUM_E1041=y
CONFIG_QCOM_QDF2400_ERRATUM_0065=y
CONFIG_QORIQ_THERMAL=y
CONFIG_QUEUED_RWLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
CONFIG_RANDSTRUCT_NONE=y
CONFIG_RASPBERRYPI_FIRMWARE=y
CONFIG_RASPBERRYPI_POWER=y
# CONFIG_RAVB is not set
CONFIG_RCAR_DMAC=y
# CONFIG_RCAR_GEN3_THERMAL is not set
# CONFIG_RCAR_THERMAL is not set
CONFIG_REGMAP=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_ANATOP=y
CONFIG_REGULATOR_AXP20X=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_HI655X=y
CONFIG_REGULATOR_PFUZE100=y
# CONFIG_REGULATOR_VEXPRESS is not set
CONFIG_RELOCATABLE=y
# CONFIG_RENESAS_ETHER_SWITCH is not set
CONFIG_RENESAS_OSTM=y
# CONFIG_RENESAS_RZAWDT is not set
# CONFIG_RENESAS_RZG2LWDT is not set
# CONFIG_RENESAS_RZN1WDT is not set
CONFIG_RENESAS_USB_DMAC=y
# CONFIG_RENESAS_WDT is not set
# CONFIG_RESET_BRCMSTB is not set
CONFIG_RESET_IMX7=y
# CONFIG_RESET_RASPBERRYPI is not set
CONFIG_RESET_RZG2L_USBPHY_CTRL=y
CONFIG_ROCKCHIP_IODOMAIN=y
CONFIG_ROCKCHIP_IOMMU=y
# CONFIG_ROCKCHIP_MBOX is not set
CONFIG_ROCKCHIP_PM_DOMAINS=y
# CONFIG_ROCKCHIP_SARADC is not set
# CONFIG_ROCKCHIP_THERMAL is not set
CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
# CONFIG_RTC_DRV_BBNSM is not set
# CONFIG_RTC_DRV_BRCMSTB is not set
# CONFIG_RTC_DRV_FSL_FTM_ALARM is not set
# CONFIG_RTC_DRV_IMXDI is not set
# CONFIG_RTC_DRV_IMX_SC is not set
CONFIG_RTC_DRV_MV=y
# CONFIG_RTC_DRV_MXC is not set
# CONFIG_RTC_DRV_MXC_V2 is not set
# CONFIG_RTC_DRV_SH is not set
CONFIG_RTC_I2C_AND_SPI=y
# CONFIG_RZG2L_ADC is not set
# CONFIG_RZG2L_THERMAL is not set
CONFIG_RZ_DMAC=y
CONFIG_RZ_MTU3=y
CONFIG_SATA_SIL24=y
# CONFIG_SCHED_CORE is not set
CONFIG_SCHED_MC=y
CONFIG_SCHED_SMT=y
# CONFIG_SENSORS_ARM_SCPI is not set
CONFIG_SERIAL_8250_BCM2835AUX=y
CONFIG_SERIAL_8250_BCM7271=y
# CONFIG_SERIAL_8250_EXAR is not set
CONFIG_SERIAL_8250_FSL=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_IMX_CONSOLE=y
CONFIG_SERIAL_IMX_EARLYCON=y
CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y
CONFIG_SERIAL_SAMSUNG=y
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_SH_SCI=y
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_DMA=y
CONFIG_SERIAL_SH_SCI_EARLYCON=y
CONFIG_SERIAL_SH_SCI_NR_UARTS=18
# CONFIG_SMC91X is not set
# CONFIG_SND_SOC_RCAR is not set
# CONFIG_SND_SOC_RZ is not set
# CONFIG_SND_SOC_SH4_FSI is not set
# CONFIG_SND_SUN4I_I2S is not set
# CONFIG_SND_SUN50I_CODEC_ANALOG is not set
# CONFIG_SND_SUN50I_DMIC is not set
# CONFIG_SND_SUN8I_CODEC is not set
# CONFIG_SND_SUN8I_CODEC_ANALOG is not set
# CONFIG_SNI_NETSEC is not set
CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
CONFIG_SOC_IMX8M=y
CONFIG_SOC_IMX9=y
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPI_ARMADA_3700=y
# CONFIG_SPI_BCM2835 is not set
CONFIG_SPI_FSL_LPSPI=y
# CONFIG_SPI_FSL_QUADSPI is not set
# CONFIG_SPI_HISI_KUNPENG is not set
# CONFIG_SPI_HISI_SFC is not set
# CONFIG_SPI_HISI_SFC_V3XX is not set
CONFIG_SPI_IMX=y
# CONFIG_SPI_ROCKCHIP_SFC is not set
# CONFIG_SPI_RSPI is not set
# CONFIG_SPI_RZV2M_CSI is not set
# CONFIG_SPI_SH_HSPI is not set
# CONFIG_SPI_SH_MSIOF is not set
# CONFIG_SPI_SUN4I is not set
# CONFIG_SPI_SUN6I is not set
# CONFIG_SPI_SYNQUACER is not set
CONFIG_SPI_THUNDERX=y
# CONFIG_SPI_XLP is not set
# CONFIG_SSIF_IPMI_BMC is not set
CONFIG_STUB_CLK_HI3660=y
CONFIG_STUB_CLK_HI6220=y
# CONFIG_SUN20I_GPADC is not set
# CONFIG_SUN20I_PPU is not set
CONFIG_SUN50I_A100_CCU=y
CONFIG_SUN50I_A100_R_CCU=y
CONFIG_SUN50I_A64_CCU=y
CONFIG_SUN50I_H616_CCU=y
CONFIG_SUN50I_H6_CCU=y
CONFIG_SUN50I_H6_R_CCU=y
CONFIG_SUN50I_IOMMU=y
CONFIG_SUN6I_MSGBOX=y
CONFIG_SUN6I_RTC_CCU=y
# CONFIG_SUN8I_A83T_CCU is not set
CONFIG_SUN8I_DE2_CCU=y
# CONFIG_SUN8I_H3_CCU is not set
CONFIG_SUN8I_R_CCU=y
CONFIG_SUN8I_THERMAL=y
CONFIG_SUNXI_CCU=y
CONFIG_SUNXI_RSB=y
CONFIG_SUNXI_WATCHDOG=y
CONFIG_SYNC_FILE=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
# CONFIG_TCG_TIS_SYNQUACER is not set
CONFIG_THREAD_INFO_IN_TASK=y
# CONFIG_THUNDERX2_PMU is not set
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
# CONFIG_TURRIS_MOX_RWTM is not set
CONFIG_TYPEC=y
# CONFIG_TYPEC_ANX7411 is not set
# CONFIG_TYPEC_DP_ALTMODE is not set
# CONFIG_TYPEC_FUSB302 is not set
# CONFIG_TYPEC_HD3SS3220 is not set
# CONFIG_TYPEC_MUX_FSA4480 is not set
# CONFIG_TYPEC_MUX_GPIO_SBU is not set
# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
# CONFIG_TYPEC_MUX_PI3USB30532 is not set
# CONFIG_TYPEC_RT1711H is not set
# CONFIG_TYPEC_RT1719 is not set
# CONFIG_TYPEC_STUSB160X is not set
CONFIG_TYPEC_TCPCI=y
# CONFIG_TYPEC_TCPCI_MAXIM is not set
CONFIG_TYPEC_TCPM=y
# CONFIG_TYPEC_TPS6598X is not set
# CONFIG_TYPEC_WUSB3801 is not set
# CONFIG_UACCE is not set
CONFIG_UNMAP_KERNEL_AT_EL0=y
# CONFIG_USB_BRCMSTB is not set
# CONFIG_USB_CDNS2_UDC is not set
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_GENERIC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_IMX=y
CONFIG_USB_CHIPIDEA_PCI=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_DUAL_ROLE=y
# CONFIG_USB_DWC3_GADGET is not set
CONFIG_USB_DWC3_HAPS=y
# CONFIG_USB_DWC3_HOST is not set
CONFIG_USB_DWC3_IMX8MP=y
# CONFIG_USB_DWC3_OF_SIMPLE is not set
CONFIG_USB_DWC3_PCI=y
# CONFIG_USB_DWC3_ULPI is not set
CONFIG_USB_DWC3_XILINX=y
CONFIG_USB_EHCI_FSL=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_HCD_ORION=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
# CONFIG_USB_EMXX is not set
CONFIG_USB_GADGET=y
CONFIG_USB_MXS_PHY=y
CONFIG_USB_OHCI_EXYNOS=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PCI=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_OTG=y
CONFIG_USB_OTG_FSM=y
CONFIG_USB_RENESAS_USB3=y
CONFIG_USB_RENESAS_USBF=y
CONFIG_USB_RENESAS_USBHS=y
CONFIG_USB_RENESAS_USBHS_HCD=y
CONFIG_USB_RENESAS_USBHS_UDC=y
CONFIG_USB_RZV2M_USB3DRD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_HISTB=y
CONFIG_USB_XHCI_MVEBU=y
CONFIG_USB_XHCI_PLATFORM=y
# CONFIG_USB_XHCI_RCAR is not set
CONFIG_USB_XHCI_RZV2M=y
CONFIG_VEXPRESS_CONFIG=y
# CONFIG_VFIO_AMBA is not set
CONFIG_VIDEOMODE_HELPERS=y
# CONFIG_VIDEO_IMX7_CSI is not set
# CONFIG_VIDEO_IMX8MQ_MIPI_CSI2 is not set
# CONFIG_VIDEO_IMX8_ISI is not set
# CONFIG_VIDEO_RZG2L_CRU is not set
# CONFIG_VIDEO_RZG2L_CSI2 is not set
CONFIG_VIRTIO_DMA_SHARED_BUFFER=y
# CONFIG_VIRTIO_IOMMU is not set
CONFIG_VIRTUALIZATION=y
CONFIG_VMAP_STACK=y
CONFIG_WDAT_WDT=y
# CONFIG_XILINX_AMS is not set
# CONFIG_XILINX_INTC is not set
CONFIG_XLNX_EVENT_MANAGER=y
CONFIG_ZONE_DMA32=y
CONFIG_ZYNQMP_FIRMWARE=y
# CONFIG_ZYNQMP_FIRMWARE_DEBUG is not set
CONFIG_ZYNQMP_PM_DOMAINS=y
CONFIG_ZYNQMP_POWER=y

View File

@@ -0,0 +1,7 @@
ARCH:=aarch64
SUBTARGET:=armv8
BOARDNAME:=64-bit (armv8) machines
define Target/Description
Build multi-platform images for the ARMv8 instruction set architecture
endef

View File

@@ -0,0 +1,8 @@
GRUB_SERIAL:=$(call qstrip,$(CONFIG_TARGET_SERIAL))
ifeq ($(GRUB_SERIAL),)
$(error This platform requires CONFIG_TARGET_SERIAL be set!)
endif
define Package/base-files/install-target
$(SED) "s#@GRUB_SERIAL@#$(GRUB_SERIAL)#" $(1)/etc/inittab
endef

View File

@@ -0,0 +1,19 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
. /lib/functions/uci-defaults.sh
board_config_update
board=$(board_name)
case "$board" in
traverse,ten64)
ucidef_set_led_netdev "sfp1" "SFP 1" "ten64:green:sfp1:down" "eth8" "link tx rx"
ucidef_set_led_netdev "sfp2" "SFP 2" "ten64:green:sfp2:up" "eth9" "link tx rx"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,18 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
. /lib/functions/system.sh
. /lib/functions/uci-defaults.sh
board_config_update
case "$(board_name)" in
traverse,ten64)
ucidef_set_interface_lan "eth0 eth1 eth2 eth3"
ucidef_set_interface_wan "eth6"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,31 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
. /lib/functions/uci-defaults.sh
KERNEL_MAJOR=$(uname -r | awk -F '.' '{print $1}')
KERNEL_MINOR=$(uname -r | awk -F '.' '{print $2}')
board_config_update
board=$(board_name)
case "$board" in
traverse,ten64)
if [ "${KERNEL_MAJOR}" -ge "6" ] && [ "${KERNEL_MINOR}" -ge "6" ]; then
I2C_GPIO_BASE=640
else
I2C_GPIO_BASE=368
fi
ucidef_add_gpio_switch "lte_reset" "Cell Modem Reset" "$(($I2C_GPIO_BASE + 8))"
ucidef_add_gpio_switch "lte_power" "Cell Modem Power" "$(($I2C_GPIO_BASE + 9))"
ucidef_add_gpio_switch "lte_disable" "Cell Modem Airplane mode" "$((I2C_GPIO_BASE + 10))"
ucidef_add_gpio_switch "gnss_disable" "Cell Modem Disable GNSS receiver" "$(($I2C_GPIO_BASE + 11))"
ucidef_add_gpio_switch "lower_sfp_txidsable" "Lower SFP+ TX Disable" "$(($I2C_GPIO_BASE + 1))"
ucidef_add_gpio_switch "upper_sfp_txdisable" "Upper SFP+ TX Disable" "$(($I2C_GPIO_BASE + 5))"
;;
esac
board_config_flush
exit 0

View File

@@ -0,0 +1,10 @@
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
ttyAMA0::askfirst:/usr/libexec/login.sh
@GRUB_SERIAL@::askfirst:/usr/libexec/login.sh
tty0::askfirst:/usr/libexec/login.sh
hvc0::askfirst:/usr/libexec/login.sh
ttymxc0::askfirst:/usr/libexec/login.sh
ttymxc1::askfirst:/usr/libexec/login.sh
ttymxc2::askfirst:/usr/libexec/login.sh
ttySC0::askfirst:/usr/libexec/login.sh

View File

@@ -0,0 +1,37 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# This script migrates GPIO switch pin numbers
# from kernel versions prior to 6.6
# See https://lists.openwrt.org/pipermail/openwrt-devel/2024-March/042448.html
. /lib/functions.sh
ten64_update_gpioswitch_num() {
local section="$1"
config_get gpio_pin "${section}" gpio_pin
config_get gpio_name "${section}" name
if [ -z "${gpio_pin}" ]; then
return
fi
local this_pin_name=$(uci get "system.${section}.name")
if [ "${gpio_pin}" -lt 640 ]; then
new_pin_value=$(( $gpio_pin + 272 ))
uci set "system.${section}.gpio_pin=${new_pin_value}"
fi
}
board=$(board_name)
if [ "${board}" != "traverse,ten64" ]; then
exit 0
fi
KERNEL_MINOR=$(uname -r | awk -F '.' '{print $2}')
if [ "${KERNEL_MINOR}" -lt "6" ]; then
exit 0
fi
config_load system
config_foreach ten64_update_gpioswitch_num gpio_switch
exit 0

View File

@@ -0,0 +1,52 @@
# SPDX-License-Identifier: GPL-2.0-or-later
sanitize_name_arm64() {
sed -e '
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;
s/[^a-z0-9_-]\+/-/g;
s/^-//;
s/-$//;
' "$@"
}
do_sysinfo_arm64() {
local vendor product file
for file in sys_vendor board_vendor; do
vendor="$(cat /sys/devices/virtual/dmi/id/$file 2>/dev/null)"
case "$vendor" in
empty | \
System\ manufacturer | \
To\ [bB]e\ [fF]illed\ [bB]y\ O\.E\.M\.)
continue
;;
esac
[ -n "$vendor" ] && break
done
for file in product_name board_name; do
product="$(cat /sys/devices/virtual/dmi/id/$file 2>/dev/null)"
case "$vendor:$product" in
?*:empty | \
?*:System\ Product\ Name | \
?*:To\ [bB]e\ [fF]illed\ [bB]y\ O\.E\.M\.)
continue
;;
?*:?*)
break
;;
esac
done
[ -d "/sys/firmware/devicetree/base" ] && return
[ -n "$vendor" -a -n "$product" ] || return
mkdir -p /tmp/sysinfo
echo "$vendor $product" > /tmp/sysinfo/model
sanitize_name_arm64 /tmp/sysinfo/model > /tmp/sysinfo/board_name
}
boot_hook_add preinit_main do_sysinfo_arm64

View File

@@ -0,0 +1,19 @@
# SPDX-License-Identifier: GPL-2.0-only
move_config() {
local partdev parttype=ext4
. /lib/upgrade/common.sh
if export_bootdevice && export_partdevice partdev 1; then
part_magic_fat "/dev/$partdev" && parttype=vfat
if mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt; then
if [ -f "/mnt/$BACKUP_FILE" ]; then
mv -f "/mnt/$BACKUP_FILE" /
fi
umount /mnt
fi
fi
}
boot_hook_add preinit_mount_root move_config

View File

@@ -0,0 +1,165 @@
# SPDX-License-Identifier: GPL-2.0-or-later
RAMFS_COPY_BIN="/usr/sbin/blkid"
platform_check_image() {
local board=$(board_name)
local diskdev partdev diff
[ "$#" -gt 1 ] && return 1
v "Board is ${board}"
export_bootdevice && export_partdevice diskdev 0 || {
v "platform_check_image: Unable to determine upgrade device"
return 1
}
get_partitions "/dev/$diskdev" bootdisk
v "Extract boot sector from the image"
get_image_dd "$1" of=/tmp/image.bs count=63 bs=512b
get_partitions /tmp/image.bs image
#compare tables
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
if [ -n "$diff" ]; then
v "Partition layout has changed. Full image will be written."
ask_bool 0 "Abort" && exit 1
return 0
fi
}
platform_copy_config() {
local partdev parttype=ext4
if export_partdevice partdev 1; then
part_magic_fat "/dev/$partdev" && parttype=vfat
mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
umount /mnt
else
v "ERROR: Unable to find partition to copy config data to"
fi
sleep 5
}
# To avoid writing over any firmware
# files (e.g ubootefi.var or firmware/X/ aka EBBR)
# Copy efi/openwrt and efi/boot from the new image
# to the existing ESP
platform_do_upgrade_efi_system_partition() {
local image_file=$1
local target_partdev=$2
local image_efisp_start=$3
local image_efisp_size=$4
v "Updating ESP on ${target_partdev}"
NEW_ESP_DIR="/mnt/new_esp_loop"
CUR_ESP_DIR="/mnt/cur_esp"
mkdir "${NEW_ESP_DIR}"
mkdir "${CUR_ESP_DIR}"
get_image_dd "$image_file" of="/tmp/new_efi_sys_part.img" \
skip="$image_efisp_start" count="$image_efisp_size"
mount -t vfat -o loop -o ro /tmp/new_efi_sys_part.img "${NEW_ESP_DIR}"
if [ ! -d "${NEW_ESP_DIR}/efi/boot" ]; then
v "ERROR: Image does not contain EFI boot files (/efi/boot)"
return 1
fi
mount -t vfat "/dev/$partdev" "${CUR_ESP_DIR}"
for d in $(find "${NEW_ESP_DIR}/efi/" -mindepth 1 -maxdepth 1 -type d); do
v "Copying ${d}"
newdir_bname=$(basename "${d}")
rm -rf "${CUR_ESP_DIR}/efi/${newdir_bname}"
cp -r "${d}" "${CUR_ESP_DIR}/efi"
done
umount "${NEW_ESP_DIR}"
umount "${CUR_ESP_DIR}"
}
platform_do_upgrade() {
local board=$(board_name)
local diskdev partdev diff
export_bootdevice && export_partdevice diskdev 0 || {
v "platform_do_upgrade: Unable to determine upgrade device"
return 1
}
sync
if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
get_partitions "/dev/$diskdev" bootdisk
v "Extract boot sector from the image"
get_image_dd "$1" of=/tmp/image.bs count=63 bs=512b
get_partitions /tmp/image.bs image
#compare tables
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
else
diff=1
fi
# Only change the partition table if sysupgrade -p is set,
# otherwise doing so could interfere with embedded "single storage"
# (e.g SoC boot from SD card) setups, as well as other user
# created storage (like uvol)
if [ -n "$diff" ] && [ "${UPGRADE_OPT_SAVE_PARTITIONS}" = "0" ]; then
# Need to remove partitions before dd, otherwise the partitions
# that are added after will have minor numbers offset
partx -d - "/dev/$diskdev"
get_image_dd "$1" of="/dev/$diskdev" bs=4096 conv=fsync
# Separate removal and addtion is necessary; otherwise, partition 1
# will be missing if it overlaps with the old partition 2
partx -a - "/dev/$diskdev"
return 0
fi
#iterate over each partition from the image and write it to the boot disk
while read part start size; do
if export_partdevice partdev $part; then
v "Writing image to /dev/$partdev..."
if [ "$part" = "1" ]; then
platform_do_upgrade_efi_system_partition \
$1 $partdev $start $size || return 1
else
v "Normal partition, doing DD"
get_image_dd "$1" of="/dev/$partdev" ibs=512 obs=1M skip="$start" \
count="$size" conv=fsync
fi
else
v "Unable to find partition $part device, skipped."
fi
done < /tmp/partmap.image
local parttype=ext4
if (blkid > /dev/null) && export_partdevice partdev 1; then
part_magic_fat "/dev/$partdev" && parttype=vfat
mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt
if export_partdevice partdev 2; then
THIS_PART_BLKID=$(blkid -o value -s PARTUUID "/dev/${partdev}")
v "Setting rootfs PARTUUID=${THIS_PART_BLKID}"
sed -i "s/\(PARTUUID=\)[a-f0-9-]\+/\1${THIS_PART_BLKID}/ig" \
/mnt/efi/openwrt/grub.cfg
fi
umount /mnt
fi
# Provide time for the storage medium to flush before system reset
# (despite the sync/umount it appears NVMe etc. do it in the background)
sleep 5
}

View File

@@ -0,0 +1,341 @@
CONFIG_64BIT=y
CONFIG_9P_FS=y
# CONFIG_9P_FS_POSIX_ACL is not set
# CONFIG_9P_FS_SECURITY is not set
# CONFIG_A64FX_DIAG is not set
CONFIG_ACPI=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_EINJ=y
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_MEMORY_FAILURE=y
CONFIG_ACPI_APEI_PCIEAER=y
CONFIG_ACPI_BATTERY=y
# CONFIG_ACPI_BGRT is not set
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_CCA_REQUIRED=y
CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_CPPC_CPUFREQ=y
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_DEBUGGER is not set
# CONFIG_ACPI_DOCK is not set
# CONFIG_ACPI_EC_DEBUGFS is not set
CONFIG_ACPI_FAN=y
CONFIG_ACPI_GENERIC_GSI=y
CONFIG_ACPI_GTDT=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_I2C_OPREGION=y
CONFIG_ACPI_IORT=y
CONFIG_ACPI_MCFG=y
# CONFIG_ACPI_PCI_SLOT is not set
# CONFIG_ACPI_PFRUT is not set
CONFIG_ACPI_PPTT=y
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_PROCESSOR_IDLE=y
CONFIG_ACPI_REDUCED_HARDWARE_ONLY=y
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_TINY_POWER_BUTTON is not set
# CONFIG_ALIBABA_UNCORE_DRW_PMU is not set
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_KEEP_MEMBLOCK=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
CONFIG_ARCH_MMAP_RND_BITS=18
CONFIG_ARCH_MMAP_RND_BITS_MAX=24
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
CONFIG_ARCH_PROC_KCORE_TEXT=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_STACKWALK=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_ARM64=y
CONFIG_ARM64_4K_PAGES=y
# CONFIG_ARM64_ACPI_PARKING_PROTOCOL is not set
CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
CONFIG_ARM64_PAGE_SHIFT=12
CONFIG_ARM64_PA_BITS=48
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_TAGGED_ADDR_ABI=y
CONFIG_ARM64_VA_BITS=39
CONFIG_ARM64_VA_BITS_39=y
CONFIG_ARM_AMBA=y
CONFIG_ARM_ARCH_TIMER=y
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
CONFIG_ARM_GIC=y
CONFIG_ARM_GIC_V2M=y
CONFIG_ARM_GIC_V3=y
CONFIG_ARM_GIC_V3_ITS=y
CONFIG_ARM_GIC_V3_ITS_PCI=y
CONFIG_ARM_PSCI_FW=y
# CONFIG_ARM_SMMU_V3_PMU is not set
CONFIG_ATA=y
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_NVME=y
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_MQ_PCI=y
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
CONFIG_CLONE_BACKWARDS=y
CONFIG_COMMON_CLK=y
# CONFIG_COMPAT_32BIT_TIME is not set
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_PM=y
CONFIG_CPU_RMAP=y
CONFIG_CRC16=y
CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_RNG2=y
CONFIG_DCACHE_WORD_ACCESS=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DMADEVICES=y
CONFIG_DMA_ACPI=y
CONFIG_DMA_DIRECT_REMAP=y
CONFIG_DMA_ENGINE=y
CONFIG_DMA_OF=y
CONFIG_DMA_REMAP=y
CONFIG_DMI=y
CONFIG_DMIID=y
CONFIG_DMI_SYSFS=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DTC=y
CONFIG_EDAC_SUPPORT=y
CONFIG_EFI=y
CONFIG_EFIVAR_FS=y
CONFIG_EFI_ARMSTUB_DTB_LOADER=y
# CONFIG_EFI_BOOTLOADER_CONTROL is not set
# CONFIG_EFI_CAPSULE_LOADER is not set
# CONFIG_EFI_COCO_SECRET is not set
# CONFIG_EFI_CUSTOM_SSDT_OVERLAYS is not set
# CONFIG_EFI_DISABLE_PCI_DMA is not set
# CONFIG_EFI_DISABLE_RUNTIME is not set
CONFIG_EFI_EARLYCON=y
CONFIG_EFI_ESRT=y
CONFIG_EFI_GENERIC_STUB=y
# CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER is not set
CONFIG_EFI_PARAMS_FROM_FDT=y
CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_EFI_STUB=y
# CONFIG_EFI_TEST is not set
# CONFIG_EFI_ZBOOT is not set
CONFIG_EXT4_FS=y
CONFIG_F2FS_FS=y
CONFIG_FAILOVER=y
CONFIG_FB_EFI=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_FONT_8x16=y
CONFIG_FONT_AUTOSELECT=y
CONFIG_FONT_SUPPORT=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_FRAME_POINTER=y
CONFIG_FS_IOMAP=y
CONFIG_FS_MBCACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_TOPOLOGY=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_EARLY_IOREMAP=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_GENERIC_IRQ_MIGRATION=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_SCHED_CLOCK=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_ACPI=y
CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_HISI is not set
CONFIG_GPIO_PL061=y
# CONFIG_GPIO_VF610 is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HID=y
CONFIG_HID_GENERIC=y
CONFIG_HID_SUPPORT=y
CONFIG_HOTPLUG_CPU=y
CONFIG_HOTPLUG_PCI_ACPI=y
CONFIG_HVC_DRIVER=y
CONFIG_HZ_PERIODIC=y
# CONFIG_I2C_AMD_MP2 is not set
CONFIG_I2C_HID_ACPI=y
# CONFIG_I2C_HISI is not set
# CONFIG_I2C_SLAVE_TESTUNIT is not set
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_INPUT_KEYBOARD=y
CONFIG_IRQCHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_IRQ_WORK=y
# CONFIG_ISCSI_IBFT is not set
CONFIG_JBD2=y
CONFIG_LIBFDT=y
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_MEMFD_CREATE=y
CONFIG_MEMORY_BALLOON=y
CONFIG_MIGRATION=y
# CONFIG_MLXBF_GIGE is not set
CONFIG_MMC_SDHCI_ACPI=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_MVMDIO=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NET_9P=y
# CONFIG_NET_9P_DEBUG is not set
# CONFIG_NET_9P_FD is not set
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_FAILOVER=y
CONFIG_NET_FLOW_LIMIT=y
CONFIG_NLS=y
CONFIG_NR_CPUS=256
CONFIG_NVMEM=y
CONFIG_NVME_CORE=y
# CONFIG_NVME_MULTIPATH is not set
CONFIG_OF=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
CONFIG_OF_IRQ=y
CONFIG_OF_KOBJ=y
CONFIG_PADATA=y
CONFIG_PAGE_REPORTING=y
CONFIG_PARTITION_PERCPU=y
CONFIG_PCI=y
# CONFIG_PCIE_HISI_ERR is not set
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_DOMAINS_GENERIC=y
CONFIG_PCI_ECAM=y
CONFIG_PCI_HOST_COMMON=y
CONFIG_PCI_HOST_GENERIC=y
CONFIG_PCI_LABEL=y
CONFIG_PCI_MSI=y
CONFIG_PCI_MSI_IRQ_DOMAIN=y
CONFIG_PGTABLE_LEVELS=3
CONFIG_PHYS_ADDR_T_64BIT=y
# CONFIG_PMIC_OPREGION is not set
CONFIG_PNP=y
CONFIG_PNPACPI=y
CONFIG_PNP_DEBUG_MESSAGES=y
CONFIG_POWER_RESET=y
CONFIG_POWER_SUPPLY=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
CONFIG_QUEUED_RWLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_RATIONAL=y
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RFS_ACCEL=y
CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
CONFIG_RPS=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_EFI=y
CONFIG_RTC_DRV_PL031=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_SATA_HOST=y
CONFIG_SCSI=y
CONFIG_SCSI_COMMON=y
CONFIG_SCSI_VIRTIO=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_FSL=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SG_POOL=y
CONFIG_SMP=y
CONFIG_SOCK_RX_QUEUE_MAPPING=y
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSE_IRQ=y
CONFIG_SRCU=y
# CONFIG_SURFACE_PLATFORMS is not set
CONFIG_SWIOTLB=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_SYSFB=y
# CONFIG_SYSFB_SIMPLEFB is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_OF=y
CONFIG_THREAD_INFO_IN_TASK=y
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_TIMER_ACPI=y
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_TREE_RCU=y
CONFIG_TREE_SRCU=y
# CONFIG_UACCE is not set
CONFIG_UCS2_STRING=y
CONFIG_UNMAP_KERNEL_AT_EL0=y
CONFIG_USB=y
CONFIG_USB_HID=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_PCI=y
CONFIG_USB_STORAGE=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PCI=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_PCI_LIB=y
CONFIG_VMAP_STACK=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
CONFIG_WATCHDOG_CORE=y
CONFIG_XPS=y
CONFIG_ZONE_DMA32=y

View File

@@ -0,0 +1,116 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2016-2017 Yousong Zhou <yszhou4tech@gmail.com>
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
GRUB2_VARIANT =
GRUB_TERMINALS =
GRUB_SERIAL_CONFIG =
GRUB_TERMINAL_CONFIG =
GRUB_CONSOLE_CMDLINE = earlycon
ifneq ($(CONFIG_GRUB_CONSOLE),)
GRUB_TERMINALS += console
endif
GRUB_SERIAL:=$(call qstrip,$(CONFIG_TARGET_SERIAL))
GRUB_SERIAL_CONFIG := serial --unit=0 --speed=$(CONFIG_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 --rtscts=$(if $(CONFIG_GRUB_FLOWCONTROL),on,off)
GRUB_TERMINALS += serial
GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS)
ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(IMG_PART_SIGNATURE)-02)
GPT_ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
GPT_ROOTPART:=$(if $(GPT_ROOTPART),$(GPT_ROOTPART),PARTUUID=$(shell echo $(IMG_PART_DISKGUID) | sed 's/00$$/02/'))
GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_GRUB_TIMEOUT))
GRUB_TITLE:=$(call qstrip,$(CONFIG_GRUB_TITLE))
BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS))
define Build/combined
$(INSTALL_DIR) $@.boot/
$(CP) $(KDIR)/$(KERNEL_NAME) $@.boot/efi/openwrt/
-$(CP) $(STAGING_DIR_ROOT)/boot/. $@.boot/boot/
$(if $(filter $(1),efi),
$(INSTALL_DIR) $@.boot/efi/boot
$(CP) $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_aarch64),aa64,arm).efi $@.boot/efi/openwrt/
$(CP) $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_aarch64),aa64,arm).efi $@.boot/efi/boot/
)
KERNELPARTTYPE=ef FAT_TYPE="32" PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" \
$(if $(filter $(1),efi),GUID="$(IMG_PART_DISKGUID)") $(SCRIPT_DIR)/gen_image_generic.sh \
$@ \
$(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \
256
endef
define Build/grub-config
rm -fR $@.boot
$(INSTALL_DIR) $@.boot/efi/openwrt/
sed \
-e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
-e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
-e 's#@ROOTPART@#root=$(ROOTPART) rootwait#g' \
-e 's#@GPT_ROOTPART@#root=$(GPT_ROOTPART) rootwait#g' \
-e 's#@CMDLINE@#$(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE)#g' \
-e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
-e 's#@TITLE@#$(GRUB_TITLE)#g' \
-e 's#@KERNEL_NAME@#$(KERNEL_NAME)#g' \
./grub-$(1).cfg > $@.boot/efi/openwrt/grub.cfg
endef
define Build/grub-install
rm -fR $@.grub2
$(INSTALL_DIR) $@.grub2
endef
DEVICE_VARS += GRUB2_VARIANT UBOOT
define Device/efi-default
IMAGE/rootfs.img := append-rootfs | pad-to $(ROOTFS_PARTSIZE)
IMAGE/rootfs.img.gz := append-rootfs | pad-to $(ROOTFS_PARTSIZE) | gzip
IMAGE/combined.img := grub-config efi | combined efi | grub-install efi | append-metadata
IMAGE/combined.img.gz := grub-config efi | combined efi | grub-install efi | gzip | append-metadata
IMAGE/combined.vmdk := grub-config efi | combined efi | grub-install efi | qemu-image vmdk
ifeq ($(CONFIG_TARGET_IMAGES_GZIP),y)
IMAGES-y := rootfs.img.gz
IMAGES-y += combined.img.gz
else
IMAGES-y := rootfs.img
IMAGES-y += combined.img
endif
ifeq ($(CONFIG_VMDK_IMAGES),y)
IMAGES-y += combined.vmdk
endif
KERNEL := kernel-bin
KERNEL_INSTALL := 1
IMAGES := $$(IMAGES-y)
ARTIFACTS := $$(ARTIFACTS-y)
SUPPORTED_DEVICES :=
ifeq ($(CONFIG_arm),y)
KERNEL_NAME = zImage
endif
endef
define Device/generic
$(call Device/efi-default)
DEVICE_TITLE := Generic EFI Boot
GRUB2_VARIANT := generic
FILESYSTEMS := ext4 squashfs
UBOOT := $(if $(CONFIG_aarch64),qemu_armv8,qemu_armv7)
DEVICE_PACKAGES += kmod-amazon-ena kmod-e1000e kmod-vmxnet3 kmod-rtc-rx8025 \
kmod-i2c-mux-pca954x kmod-gpio-pca953x partx-utils kmod-wdt-sp805 \
kmod-mvneta kmod-mvpp2 kmod-fsl-dpaa1-net kmod-fsl-dpaa2-net \
kmod-fsl-enetc-net kmod-dwmac-imx kmod-fsl-fec kmod-thunderx-net \
kmod-dwmac-rockchip kmod-dwmac-sun8i kmod-phy-aquantia kmod-phy-broadcom \
kmod-phy-marvell kmod-phy-marvell-10g kmod-sfp kmod-atlantic \
kmod-bcmgenet kmod-octeontx2-net kmod-renesas-net-avb \
kmod-phy-realtek kmod-phy-smsc
endef
TARGET_DEVICES += generic
$(eval $(call BuildImage))

View File

@@ -0,0 +1,14 @@
@SERIAL_CONFIG@
@TERMINAL_CONFIG@
set default="0"
set timeout="@TIMEOUT@"
menuentry "@TITLE@" {
search --set=root --label kernel
linux /efi/openwrt/@KERNEL_NAME@ @GPT_ROOTPART@ @CMDLINE@ noinitrd
}
menuentry "@TITLE@ (failsafe)" {
search --set=root --label kernel
linux /efi/openwrt/@KERNEL_NAME@ failsafe=true @GPT_ROOTPART@ @CMDLINE@ noinitrd
}

View File

@@ -0,0 +1,321 @@
define KernelPackage/acpi-mdio
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=ACPI MDIO support
DEPENDS:=@(TARGET_armsr_armv8) +kmod-libphy +kmod-mdio-devres
KCONFIG:=CONFIG_ACPI_MDIO
FILES:=$(LINUX_DIR)/drivers/net/mdio/acpi_mdio.ko
AUTOLOAD:=$(call AutoLoad,11,acpi_mdio)
endef
define KernelPackage/acpi-mdio/description
Kernel driver for ACPI MDIO support
endef
$(eval $(call KernelPackage,acpi-mdio))
define KernelPackage/bcmgenet
SUBMENU=$(NETWORK_DEVICES_MENU)
DEPENDS:=@(TARGET_armsr_armv8) +kmod-mdio-bcm-unimac
TITLE:=Broadcom GENET internal MAC (Raspberry Pi 4)
KCONFIG:=CONFIG_BCMGENET
FILES=$(LINUX_DIR)/drivers/net/ethernet/broadcom/genet/genet.ko
AUTOLOAD=$(call AutoLoad,30,genet)
endef
$(eval $(call KernelPackage,bcmgenet))
define KernelPackage/mdio-bcm-unimac
SUBMENU=$(NETWORK_DEVICES_MENU)
DEPENDS:=@(TARGET_armsr_armv8) +kmod-of-mdio
TITLE:=Broadcom UniMAC MDIO bus controller
KCONFIG:=CONFIG_MDIO_BCM_UNIMAC
FILES=$(LINUX_DIR)/drivers/net/mdio/mdio-bcm-unimac.ko
AUTOLOAD=$(call AutoLoad,30,mdio-bcm-unimac)
endef
$(eval $(call KernelPackage,mdio-bcm-unimac))
define KernelPackage/fsl-pcs-lynx
SUBMENU=$(NETWORK_DEVICES_MENU)
DEPENDS:=@(TARGET_armsr_armv8) +kmod-libphy +kmod-of-mdio +kmod-phylink
TITLE:=NXP (Freescale) Lynx PCS
HIDDEN:=1
KCONFIG:=CONFIG_PCS_LYNX
FILES=$(LINUX_DIR)/drivers/net/pcs/pcs-lynx.ko
AUTOLOAD=$(call AutoLoad,30,pcs-lynx)
endef
$(eval $(call KernelPackage,fsl-pcs-lynx))
define KernelPackage/fsl-fec
SUBMENU:=$(NETWORK_DEVICES_MENU)
DEPENDS:=@(TARGET_armsr_armv8) +kmod-libphy +kmod-of-mdio \
+kmod-ptp +kmod-net-selftests
TITLE:=NXP (Freescale) FEC Ethernet controller (i.MX)
KCONFIG:=CONFIG_FEC
FILES:=$(LINUX_DIR)/drivers/net/ethernet/freescale/fec.ko
AUTOLOAD:=$(call AutoLoad,35,fec)
endef
$(eval $(call KernelPackage,fsl-fec))
define KernelPackage/fsl-xgmac-mdio
SUBMENU=$(NETWORK_DEVICES_MENU)
DEPENDS:=@(TARGET_armsr_armv8) +kmod-libphy +kmod-of-mdio +kmod-acpi-mdio
TITLE:=NXP (Freescale) MDIO bus
KCONFIG:=CONFIG_FSL_XGMAC_MDIO
FILES=$(LINUX_DIR)/drivers/net/ethernet/freescale/xgmac_mdio.ko
AUTOLOAD=$(call AutoLoad,30,xgmac_mdio)
endef
$(eval $(call KernelPackage,fsl-xgmac-mdio))
define KernelPackage/fsl-mc-dpio
SUBMENU:=$(OTHER_MENU)
TITLE:=NXP DPAA2 DPIO (Data Path IO) driver
HIDDEN:=1
KCONFIG:=CONFIG_FSL_MC_BUS=y \
CONFIG_FSL_MC_DPIO
FILES:=$(LINUX_DIR)/drivers/soc/fsl/dpio/fsl-mc-dpio.ko
AUTOLOAD=$(call AutoLoad,30,fsl-mc-dpio)
endef
$(eval $(call KernelPackage,fsl-mc-dpio))
define KernelPackage/fsl-enetc-net
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=:NXP ENETC (LS1028A) Ethernet
DEPENDS:=@(TARGET_armsr_armv8) +kmod-phylink +kmod-fsl-pcs-lynx
KCONFIG:= \
CONFIG_FSL_ENETC \
CONFIG_FSL_ENETC_VF \
CONFIG_FSL_ENETC_QOS=y
FILES:= \
$(LINUX_DIR)/drivers/net/ethernet/freescale/enetc/fsl-enetc.ko \
$(LINUX_DIR)/drivers/net/ethernet/freescale/enetc/fsl-enetc-core.ko@ge6.3 \
$(LINUX_DIR)/drivers/net/ethernet/freescale/enetc/fsl-enetc-vf.ko \
$(LINUX_DIR)/drivers/net/ethernet/freescale/enetc/fsl-enetc-mdio.ko \
$(LINUX_DIR)/drivers/net/ethernet/freescale/enetc/fsl-enetc-ierb.ko
AUTOLOAD=$(call AutoLoad,35,fsl-enetc)
endef
$(eval $(call KernelPackage,fsl-enetc-net))
define KernelPackage/fsl-dpaa1-net
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=NXP DPAA1 (LS1043/LS1046) Ethernet
DEPENDS:=@(TARGET_armsr_armv8) +kmod-fsl-xgmac-mdio +kmod-libphy +kmod-crypto-crc32
KCONFIG:= \
CONFIG_FSL_DPAA=y \
CONFIG_FSL_DPAA_ETH \
CONFIG_FSL_FMAN \
CONFIG_FSL_DPAA_CHECKING=n \
CONFIG_FSL_BMAN_TEST=n \
CONFIG_FSL_QMAN_TEST=n
MODULES:= \
$(LINUX_DIR)/drivers/net/ethernet/freescale/dpaa/fsl_dpa.ko \
$(LINUX_DIR)/drivers/net/ethernet/freescale/fman/fsl_dpaa_fman.ko \
$(LINUX_DIR)/drivers/net/ethernet/freescale/fman/fsl_dpaa_mac.ko
AUTOLOAD=$(call AutoLoad,35,fsl-dpa)
endef
$(eval $(call KernelPackage,fsl-dpaa1-net))
define KernelPackage/fsl-dpaa2-net
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=NXP DPAA2 Ethernet
DEPENDS:=@(TARGET_armsr_armv8) +kmod-fsl-xgmac-mdio +kmod-phylink \
+kmod-fsl-pcs-lynx +kmod-fsl-mc-dpio
KCONFIG:= \
CONFIG_FSL_MC_UAPI_SUPPORT=y \
CONFIG_FSL_DPAA2_ETH
FILES:= \
$(LINUX_DIR)/drivers/net/ethernet/freescale/dpaa2/fsl-dpaa2-eth.ko
AUTOLOAD=$(call AutoLoad,35,fsl-dpaa2-eth)
endef
$(eval $(call KernelPackage,fsl-dpaa2-net))
define KernelPackage/fsl-dpaa2-console
SUBMENU:=$(OTHER_MENU)
TITLE:=NXP DPAA2 Debug console
DEPENDS:=@(TARGET_armsr_armv8)
KCONFIG:=CONFIG_DPAA2_CONSOLE
FILES=$(LINUX_DIR)/drivers/soc/fsl/dpaa2-console.ko
AUTOLOAD=$(call AutoLoad,40,dpaa2-console)
endef
define KernelPackage/fsl-dpaa2-console/description
Kernel modules for the NXP DPAA2 debug consoles
(Management Complex and AIOP).
endef
$(eval $(call KernelPackage,fsl-dpaa2-console))
define KernelPackage/marvell-mdio
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell Armada platform MDIO driver
DEPENDS:=@(TARGET_armsr_armv8) +kmod-libphy +kmod-of-mdio +kmod-acpi-mdio
KCONFIG:=CONFIG_MVMDIO
FILES=$(LINUX_DIR)/drivers/net/ethernet/marvell/mvmdio.ko
AUTOLOAD=$(call AutoLoad,30,marvell-mdio)
endef
$(eval $(call KernelPackage,marvell-mdio))
define KernelPackage/mvneta
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell Armada 370/38x/XP/37xx network driver
DEPENDS:=@(TARGET_armsr_armv8) +kmod-marvell-mdio +kmod-phylink
KCONFIG:=CONFIG_MVNETA
FILES:=$(LINUX_DIR)/drivers/net/ethernet/marvell/mvneta.ko
AUTOLOAD=$(call AutoLoad,30,mvneta)
endef
$(eval $(call KernelPackage,mvneta))
define KernelPackage/mvpp2
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell Armada 375/7K/8K network driver
DEPENDS:=@(TARGET_armsr_armv8) +kmod-marvell-mdio +kmod-phylink
KCONFIG:=CONFIG_MVPP2 \
CONFIG_MVPP2_PTP=n
FILES=$(LINUX_DIR)/drivers/net/ethernet/marvell/mvpp2/mvpp2.ko
AUTOLOAD=$(call AutoLoad,40,mvpp2)
endef
$(eval $(call KernelPackage,mvpp2))
define KernelPackage/imx2-wdt
SUBMENU:=$(OTHER_MENU)
TITLE:=NXP (Freescale) i.MX2+ and Layerscape watchdog driver
KCONFIG:=CONFIG_IMX2_WDT
FILES=$(LINUX_DIR)/drivers/watchdog/imx2_wdt.ko
AUTOLOAD=$(call AutoLoad,60,imx2_wdt)
endef
$(eval $(call KernelPackage,imx2-wdt))
define KernelPackage/imx7-ulp-wdt
SUBMENU:=$(OTHER_MENU)
TITLE:=NXP (Freescale) i.MX7ULP and later watchdog
KCONFIG:=CONFIG_IMX7ULP_WDT
FILES=$(LINUX_DIR)/drivers/watchdog/imx7ulp_wdt.ko
AUTOLOAD=$(call AutoLoad,60,imx7ulp_wdt)
endef
$(eval $(call KernelPackage,imx7-ulp-wdt))
define KernelPackage/dwmac-imx
SUBMENU=$(NETWORK_DEVICES_MENU)
TITLE:=NXP i.MX8 Ethernet controller
DEPENDS:=+kmod-stmmac-core +kmod-of-mdio
KCONFIG:=CONFIG_DWMAC_IMX8
FILES=$(LINUX_DIR)/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.ko
AUTOLOAD=$(call AutoLoad,45,dwmac-imx)
endef
$(eval $(call KernelPackage,dwmac-imx))
define KernelPackage/dwmac-sun8i
SUBMENU=$(NETWORK_DEVICES_MENU)
TITLE:=Allwinner H3/A83T/A64 (sun8i) Ethernet
DEPENDS:=+kmod-stmmac-core +kmod-of-mdio +kmod-mdio-bus-mux
KCONFIG:=CONFIG_DWMAC_SUN8I
FILES=$(LINUX_DIR)/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.ko
AUTOLOAD=$(call AutoLoad,45,dwmac-sun8i)
endef
$(eval $(call KernelPackage,dwmac-sun8i))
define KernelPackage/dwmac-rockchip
SUBMENU=$(NETWORK_DEVICES_MENU)
TITLE:=Rockchip RK3328/RK3399/RK3568 Ethernet
DEPENDS:=+kmod-stmmac-core +kmod-of-mdio +kmod-mdio-bus-mux
KCONFIG:=CONFIG_DWMAC_ROCKCHIP
FILES=$(LINUX_DIR)/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.ko
AUTOLOAD=$(call AutoLoad,45,dwmac-rk)
endef
$(eval $(call KernelPackage,dwmac-rockchip))
define KernelPackage/mdio-thunder
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell (Cavium) Thunder MDIO controller
DEPENDS:=@(TARGET_armsr_armv8) +kmod-of-mdio
KCONFIG:=CONFIG_MDIO_THUNDER
FILES=$(LINUX_DIR)/drivers/net/mdio/mdio-cavium.ko \
$(LINUX_DIR)/drivers/net/mdio/mdio-thunder.ko
AUTOLOAD=$(call AutoLoad,30,mdio-cavium mdio-thunder)
endef
$(eval $(call KernelPackage,mdio-thunder))
define KernelPackage/thunderx-net
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell (Cavium) Thunder network drivers
DEPENDS:=@(TARGET_armsr_armv8) +kmod-phylink +kmod-mdio-thunder
KCONFIG:=CONFIG_NET_VENDOR_CAVIUM \
CONFIG_THUNDER_NIC_PF \
CONFIG_THUNDER_NIC_VF \
CONFIG_THUNDER_NIC_BGX \
CONFIG_THUNDER_NIC_RGX
FILES=$(LINUX_DIR)/drivers/net/ethernet/cavium/thunder/nicvf.ko \
$(LINUX_DIR)/drivers/net/ethernet/cavium/thunder/nicpf.ko \
$(LINUX_DIR)/drivers/net/ethernet/cavium/thunder/thunder_xcv.ko \
$(LINUX_DIR)/drivers/net/ethernet/cavium/thunder/thunder_bgx.ko
AUTOLOAD=$(call AutoLoad,40,nicpf nicvf thunder_xcv thunder_bgx)
endef
$(eval $(call KernelPackage,thunderx-net))
define KernelPackage/octeontx2-net
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Marvell (Cavium) ThunderX2 network drivers
DEPENDS:=@(TARGET_armsr_armv8) +kmod-phylink +kmod-of-mdio +kmod-macsec \
+kmod-ptp
KCONFIG:=CONFIG_OCTEONTX2_MBOX \
CONFIG_OCTEONTX2_AF \
CONFIG_OCTEONTX2_PF \
CONFIG_OCTEONTX2_VF \
CONFIG_NDC_DIS_DYNAMIC_CACHING=n
FILES=$(LINUX_DIR)/drivers/net/ethernet/marvell/octeontx2/af/rvu_mbox.ko \
$(LINUX_DIR)/drivers/net/ethernet/marvell/octeontx2/af/rvu_af.ko \
$(LINUX_DIR)/drivers/net/ethernet/marvell/octeontx2/nic/rvu_nicpf.ko \
$(LINUX_DIR)/drivers/net/ethernet/marvell/octeontx2/nic/rvu_nicvf.ko \
$(LINUX_DIR)/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.ko
AUTOLOAD=$(call AutoLoad,40,rvu_af rvu_mbox rvu_nicpf rvu_nicvf otx2_ptp)
endef
$(eval $(call KernelPackage,octeontx2-net))
define KernelPackage/renesas-net-avb
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Renesas network drivers
DEPENDS:=@(TARGET_armsr_armv8) +kmod-phylink +kmod-mii +kmod-ptp +kmod-libphy +kmod-mdio-gpio
KCONFIG:=CONFIG_RAVB
FILES=$(LINUX_DIR)/drivers/net/ethernet/renesas/ravb.ko
AUTOLOAD:=$(call AutoProbe,ravb)
endef
define KernelPackage/renesas-net-avb/description
Support Renesas RZ platform Ethernet module
endef
$(eval $(call KernelPackage,renesas-net-avb))
define KernelPackage/wdt-sp805
SUBMENU:=$(OTHER_MENU)
TITLE:=ARM SP805 Watchdog
KCONFIG:=CONFIG_ARM_SP805_WATCHDOG
FILES=$(LINUX_DIR)/drivers/watchdog/sp805_wdt.ko
AUTOLOAD=$(call AutoLoad,50,sp805_wdt)
endef
define KernelPackage/wdt-sp805/description
Support for the ARM SP805 wathchdog module.
This is present in the NXP Layerscape family,
HiSilicon HI3660 among others.
endef
$(eval $(call KernelPackage,wdt-sp805))

View File

@@ -0,0 +1,23 @@
From b77c0ecdc7915e5c5c515da1aa6cfaf6f4eb8351 Mon Sep 17 00:00:00 2001
From: Mathew McBride <matt@traverse.com.au>
Date: Wed, 28 Sep 2022 16:39:31 +1000
Subject: [PATCH] arm: disable code size reduction measures
(gc-sections,-f*-sections)
This interferes with the EFI boot stub on armv7l.
Signed-off-by: Mathew McBride <matt@traverse.com.au>
---
arch/arm/Kconfig | 1 -
1 file changed, 1 deletion(-)
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -124,7 +124,6 @@ config ARM
select HAVE_VIRT_CPU_ACCOUNTING_GEN
select IRQ_FORCED_THREADING
select LOCK_MM_AND_FIND_VMA
- select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
select MODULES_USE_ELF_REL
select NEED_DMA_MAP_STATE
select OF_EARLY_FLATTREE if OF

View File

@@ -0,0 +1,44 @@
From f3763a0c1b07273218cbf5886bdf8df9df501111 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:10 +0200
Subject: [PATCH 03/14] net: dpaa2-eth: don't use -ENOTSUPP error code
dpaa2_eth_setup_dpni() is called from the probe path and
dpaa2_eth_set_link_ksettings() is propagated to user space.
include/linux/errno.h says that ENOTSUPP is "Defined for the NFSv3
protocol". Conventional wisdom has it to not use it in networking
drivers. Replace it with -EOPNOTSUPP.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 +-
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -3618,7 +3618,7 @@ static int dpaa2_eth_setup_dpni(struct f
dev_err(dev, "DPNI version %u.%u not supported, need >= %u.%u\n",
priv->dpni_ver_major, priv->dpni_ver_minor,
DPNI_VER_MAJOR, DPNI_VER_MINOR);
- err = -ENOTSUPP;
+ err = -EOPNOTSUPP;
goto close;
}
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
@@ -118,7 +118,7 @@ dpaa2_eth_set_link_ksettings(struct net_
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
if (!dpaa2_eth_is_type_phy(priv))
- return -ENOTSUPP;
+ return -EOPNOTSUPP;
return phylink_ethtool_ksettings_set(priv->mac->phylink, link_settings);
}

View File

@@ -0,0 +1,99 @@
From 022a11062261dc4703da846d3bf4d194ef6bebf5 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:11 +0200
Subject: [PATCH 04/14] net: dpaa2: replace dpaa2_mac_is_type_fixed() with
dpaa2_mac_is_type_phy()
dpaa2_mac_is_type_fixed() is a header with no implementation and no
callers, which is referenced from the documentation though. It can be
deleted.
On the other hand, it would be useful to reuse the code between
dpaa2_eth_is_type_phy() and dpaa2_switch_port_is_type_phy(). That common
code should be called dpaa2_mac_is_type_phy(), so let's create that.
The removal and the addition are merged into the same patch because,
in fact, is_type_phy() is the logical opposite of is_type_fixed().
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../ethernet/freescale/dpaa2/mac-phy-support.rst | 9 ++++++---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 7 +------
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.h | 10 ++++++++--
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h | 7 +------
4 files changed, 16 insertions(+), 17 deletions(-)
--- a/Documentation/networking/device_drivers/ethernet/freescale/dpaa2/mac-phy-support.rst
+++ b/Documentation/networking/device_drivers/ethernet/freescale/dpaa2/mac-phy-support.rst
@@ -181,10 +181,13 @@ when necessary using the below listed AP
- int dpaa2_mac_connect(struct dpaa2_mac *mac);
- void dpaa2_mac_disconnect(struct dpaa2_mac *mac);
-A phylink integration is necessary only when the partner DPMAC is not of TYPE_FIXED.
-One can check for this condition using the below API::
+A phylink integration is necessary only when the partner DPMAC is not of
+``TYPE_FIXED``. This means it is either of ``TYPE_PHY``, or of
+``TYPE_BACKPLANE`` (the difference being the two that in the ``TYPE_BACKPLANE``
+mode, the MC firmware does not access the PCS registers). One can check for
+this condition using the following helper::
- - bool dpaa2_mac_is_type_fixed(struct fsl_mc_device *dpmac_dev,struct fsl_mc_io *mc_io);
+ - static inline bool dpaa2_mac_is_type_phy(struct dpaa2_mac *mac);
Before connection to a MAC, the caller must allocate and populate the
dpaa2_mac structure with the associated net_device, a pointer to the MC portal
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
@@ -733,12 +733,7 @@ static inline unsigned int dpaa2_eth_rx_
static inline bool dpaa2_eth_is_type_phy(struct dpaa2_eth_priv *priv)
{
- if (priv->mac &&
- (priv->mac->attr.link_type == DPMAC_LINK_TYPE_PHY ||
- priv->mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE))
- return true;
-
- return false;
+ return dpaa2_mac_is_type_phy(priv->mac);
}
static inline bool dpaa2_eth_has_mac(struct dpaa2_eth_priv *priv)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.h
@@ -30,8 +30,14 @@ struct dpaa2_mac {
struct phy *serdes_phy;
};
-bool dpaa2_mac_is_type_fixed(struct fsl_mc_device *dpmac_dev,
- struct fsl_mc_io *mc_io);
+static inline bool dpaa2_mac_is_type_phy(struct dpaa2_mac *mac)
+{
+ if (!mac)
+ return false;
+
+ return mac->attr.link_type == DPMAC_LINK_TYPE_PHY ||
+ mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE;
+}
int dpaa2_mac_open(struct dpaa2_mac *mac);
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h
@@ -230,12 +230,7 @@ static inline bool dpaa2_switch_supports
static inline bool
dpaa2_switch_port_is_type_phy(struct ethsw_port_priv *port_priv)
{
- if (port_priv->mac &&
- (port_priv->mac->attr.link_type == DPMAC_LINK_TYPE_PHY ||
- port_priv->mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE))
- return true;
-
- return false;
+ return dpaa2_mac_is_type_phy(port_priv->mac);
}
static inline bool dpaa2_switch_port_has_mac(struct ethsw_port_priv *port_priv)

View File

@@ -0,0 +1,88 @@
From 97c07369ab8bf9895e05d4b468f18e6567263154 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:12 +0200
Subject: [PATCH 05/14] net: dpaa2-mac: absorb phylink_start() call into
dpaa2_mac_start()
The phylink handling is intended to be hidden inside the dpaa2_mac
object. Move the phylink_start() call into dpaa2_mac_start(), and
phylink_stop() into dpaa2_mac_stop().
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 5 +----
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 8 ++++++++
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c | 5 +----
3 files changed, 10 insertions(+), 8 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -2083,10 +2083,8 @@ static int dpaa2_eth_open(struct net_dev
goto enable_err;
}
- if (dpaa2_eth_is_type_phy(priv)) {
+ if (dpaa2_eth_is_type_phy(priv))
dpaa2_mac_start(priv->mac);
- phylink_start(priv->mac->phylink);
- }
return 0;
@@ -2160,7 +2158,6 @@ static int dpaa2_eth_stop(struct net_dev
int retries = 10;
if (dpaa2_eth_is_type_phy(priv)) {
- phylink_stop(priv->mac->phylink);
dpaa2_mac_stop(priv->mac);
} else {
netif_tx_stop_all_queues(net_dev);
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -336,12 +336,20 @@ static void dpaa2_mac_set_supported_inte
void dpaa2_mac_start(struct dpaa2_mac *mac)
{
+ ASSERT_RTNL();
+
if (mac->serdes_phy)
phy_power_on(mac->serdes_phy);
+
+ phylink_start(mac->phylink);
}
void dpaa2_mac_stop(struct dpaa2_mac *mac)
{
+ ASSERT_RTNL();
+
+ phylink_stop(mac->phylink);
+
if (mac->serdes_phy)
phy_power_off(mac->serdes_phy);
}
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -703,10 +703,8 @@ static int dpaa2_switch_port_open(struct
dpaa2_switch_enable_ctrl_if_napi(ethsw);
- if (dpaa2_switch_port_is_type_phy(port_priv)) {
+ if (dpaa2_switch_port_is_type_phy(port_priv))
dpaa2_mac_start(port_priv->mac);
- phylink_start(port_priv->mac->phylink);
- }
return 0;
}
@@ -718,7 +716,6 @@ static int dpaa2_switch_port_stop(struct
int err;
if (dpaa2_switch_port_is_type_phy(port_priv)) {
- phylink_stop(port_priv->mac->phylink);
dpaa2_mac_stop(port_priv->mac);
} else {
netif_tx_stop_all_queues(netdev);

View File

@@ -0,0 +1,50 @@
From 095ef388f714d622aa503fcccf20dc4095b72762 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:13 +0200
Subject: [PATCH 06/14] net: dpaa2-mac: remove defensive check in
dpaa2_mac_disconnect()
dpaa2_mac_disconnect() will only be called with a NULL mac->phylink if
dpaa2_mac_connect() failed, or was never called.
The callers are these:
dpaa2_eth_disconnect_mac():
if (dpaa2_eth_is_type_phy(priv))
dpaa2_mac_disconnect(priv->mac);
dpaa2_switch_port_disconnect_mac():
if (dpaa2_switch_port_is_type_phy(port_priv))
dpaa2_mac_disconnect(port_priv->mac);
priv->mac can be NULL, but in that case, dpaa2_eth_is_type_phy() returns
false, and dpaa2_mac_disconnect() is never called. Similar for
dpaa2-switch.
When priv->mac is non-NULL, it means that dpaa2_mac_connect() returned
zero (success), and therefore, priv->mac->phylink is also a valid
pointer.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 3 ---
1 file changed, 3 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -446,9 +446,6 @@ err_pcs_destroy:
void dpaa2_mac_disconnect(struct dpaa2_mac *mac)
{
- if (!mac->phylink)
- return;
-
phylink_disconnect_phy(mac->phylink);
phylink_destroy(mac->phylink);
dpaa2_pcs_destroy(mac);

View File

@@ -0,0 +1,101 @@
From 06efc9b8a1360cad83cae6e71558e5458cc1fbf3 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:14 +0200
Subject: [PATCH 07/14] net: dpaa2-eth: assign priv->mac after
dpaa2_mac_connect() call
There are 2 requirements for correct code:
- Any time the driver accesses the priv->mac pointer at runtime, it
either holds NULL to indicate a DPNI-DPNI connection (or unconnected
DPNI), or a struct dpaa2_mac whose phylink instance was fully
initialized (created and connected to the PHY). No changes are made to
priv->mac while it is being used. Currently, rtnl_lock() watches over
the call to dpaa2_eth_connect_mac(), so it serves the purpose of
serializing this with all readers of priv->mac.
- dpaa2_mac_connect() should run unlocked, because inside it are 2
phylink calls with incompatible locking requirements: phylink_create()
requires that the rtnl_mutex isn't held, and phylink_fwnode_phy_connect()
requires that the rtnl_mutex is held. The only way to solve those
contradictory requirements is to let dpaa2_mac_connect() take
rtnl_lock() when it needs to.
To solve both requirements, we need to identify the writer side of the
priv->mac pointer, which can be wrapped in a mutex private to the driver
in a future patch. The dpaa2_mac_connect() cannot be part of the writer
side critical section, because of an AB/BA deadlock with rtnl_lock().
So the strategy needs to be that where we prepare the DPMAC by calling
dpaa2_mac_connect(), and only make priv->mac point to it once it's fully
prepared. This ensures that the writer side critical section has the
absolute minimum surface it can.
The reverse strategy is adopted in the dpaa2_eth_disconnect_mac() code
path. This makes sure that priv->mac is NULL when we start tearing down
the DPMAC that we disconnected from, and concurrent code will simply not
see it.
No locking changes in this patch (concurrent code is still blocked by
the rtnl_mutex).
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 21 +++++++++++--------
1 file changed, 12 insertions(+), 9 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -4448,9 +4448,8 @@ static int dpaa2_eth_connect_mac(struct
err = dpaa2_mac_open(mac);
if (err)
goto err_free_mac;
- priv->mac = mac;
- if (dpaa2_eth_is_type_phy(priv)) {
+ if (dpaa2_mac_is_type_phy(mac)) {
err = dpaa2_mac_connect(mac);
if (err && err != -EPROBE_DEFER)
netdev_err(priv->net_dev, "Error connecting to the MAC endpoint: %pe",
@@ -4459,11 +4458,12 @@ static int dpaa2_eth_connect_mac(struct
goto err_close_mac;
}
+ priv->mac = mac;
+
return 0;
err_close_mac:
dpaa2_mac_close(mac);
- priv->mac = NULL;
err_free_mac:
kfree(mac);
return err;
@@ -4471,15 +4471,18 @@ err_free_mac:
static void dpaa2_eth_disconnect_mac(struct dpaa2_eth_priv *priv)
{
- if (dpaa2_eth_is_type_phy(priv))
- dpaa2_mac_disconnect(priv->mac);
+ struct dpaa2_mac *mac = priv->mac;
+
+ priv->mac = NULL;
- if (!dpaa2_eth_has_mac(priv))
+ if (!mac)
return;
- dpaa2_mac_close(priv->mac);
- kfree(priv->mac);
- priv->mac = NULL;
+ if (dpaa2_mac_is_type_phy(mac))
+ dpaa2_mac_disconnect(mac);
+
+ dpaa2_mac_close(mac);
+ kfree(mac);
}
static irqreturn_t dpni_irq0_handler_thread(int irq_num, void *arg)

View File

@@ -0,0 +1,73 @@
From a5e7f7e277bd4403c45c1c7922d56d0eb08dbc7c Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:15 +0200
Subject: [PATCH 08/14] net: dpaa2-switch: assign port_priv->mac after
dpaa2_mac_connect() call
The dpaa2-switch has the exact same locking requirements when connected
to a DPMAC, so it needs port_priv->mac to always point either to NULL,
or to a DPMAC with a fully initialized phylink instance.
Make the same preparatory change in the dpaa2-switch driver as in the
dpaa2-eth one.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 21 +++++++++++--------
1 file changed, 12 insertions(+), 9 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -1450,9 +1450,8 @@ static int dpaa2_switch_port_connect_mac
err = dpaa2_mac_open(mac);
if (err)
goto err_free_mac;
- port_priv->mac = mac;
- if (dpaa2_switch_port_is_type_phy(port_priv)) {
+ if (dpaa2_mac_is_type_phy(mac)) {
err = dpaa2_mac_connect(mac);
if (err) {
netdev_err(port_priv->netdev,
@@ -1462,11 +1461,12 @@ static int dpaa2_switch_port_connect_mac
}
}
+ port_priv->mac = mac;
+
return 0;
err_close_mac:
dpaa2_mac_close(mac);
- port_priv->mac = NULL;
err_free_mac:
kfree(mac);
return err;
@@ -1474,15 +1474,18 @@ err_free_mac:
static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv)
{
- if (dpaa2_switch_port_is_type_phy(port_priv))
- dpaa2_mac_disconnect(port_priv->mac);
+ struct dpaa2_mac *mac = port_priv->mac;
+
+ port_priv->mac = NULL;
- if (!dpaa2_switch_port_has_mac(port_priv))
+ if (!mac)
return;
- dpaa2_mac_close(port_priv->mac);
- kfree(port_priv->mac);
- port_priv->mac = NULL;
+ if (dpaa2_mac_is_type_phy(mac))
+ dpaa2_mac_disconnect(mac);
+
+ dpaa2_mac_close(mac);
+ kfree(mac);
}
static irqreturn_t dpaa2_switch_irq0_handler_thread(int irq_num, void *arg)

View File

@@ -0,0 +1,111 @@
From ce44b6ed9ee65efa9b3025552c513842eabcab88 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:16 +0200
Subject: [PATCH 09/14] net: dpaa2: publish MAC stringset to ethtool -S even if
MAC is missing
DPNIs and DPSW objects can connect and disconnect at runtime from DPMAC
objects on the same fsl-mc bus. The DPMAC object also holds "ethtool -S"
unstructured counters. Those counters are only shown for the entity
owning the netdev (DPNI, DPSW) if it's connected to a DPMAC.
The ethtool stringset code path is split into multiple callbacks, but
currently, connecting and disconnecting the DPMAC takes the rtnl_lock().
This blocks the entire ethtool code path from running, see
ethnl_default_doit() -> rtnl_lock() -> ops->prepare_data() ->
strset_prepare_data().
This is going to be a problem if we are going to no longer require
rtnl_lock() when connecting/disconnecting the DPMAC, because the DPMAC
could appear between ops->get_sset_count() and ops->get_strings().
If it appears out of the blue, we will provide a stringset into an array
that was dimensioned thinking the DPMAC wouldn't be there => array
accessed out of bounds.
There isn't really a good way to work around that, and I don't want to
put too much pressure on the ethtool framework by playing locking games.
Just make the DPMAC counters be always available. They'll be zeroes if
the DPNI or DPSW isn't connected to a DPMAC.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c | 12 +++---------
.../ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c | 11 ++---------
2 files changed, 5 insertions(+), 18 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
@@ -186,7 +186,6 @@ static int dpaa2_eth_set_pauseparam(stru
static void dpaa2_eth_get_strings(struct net_device *netdev, u32 stringset,
u8 *data)
{
- struct dpaa2_eth_priv *priv = netdev_priv(netdev);
u8 *p = data;
int i;
@@ -200,22 +199,17 @@ static void dpaa2_eth_get_strings(struct
strscpy(p, dpaa2_ethtool_extras[i], ETH_GSTRING_LEN);
p += ETH_GSTRING_LEN;
}
- if (dpaa2_eth_has_mac(priv))
- dpaa2_mac_get_strings(p);
+ dpaa2_mac_get_strings(p);
break;
}
}
static int dpaa2_eth_get_sset_count(struct net_device *net_dev, int sset)
{
- int num_ss_stats = DPAA2_ETH_NUM_STATS + DPAA2_ETH_NUM_EXTRA_STATS;
- struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
-
switch (sset) {
case ETH_SS_STATS: /* ethtool_get_stats(), ethtool_get_drvinfo() */
- if (dpaa2_eth_has_mac(priv))
- num_ss_stats += dpaa2_mac_get_sset_count();
- return num_ss_stats;
+ return DPAA2_ETH_NUM_STATS + DPAA2_ETH_NUM_EXTRA_STATS +
+ dpaa2_mac_get_sset_count();
default:
return -EOPNOTSUPP;
}
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
@@ -145,14 +145,9 @@ dpaa2_switch_set_link_ksettings(struct n
static int
dpaa2_switch_ethtool_get_sset_count(struct net_device *netdev, int sset)
{
- struct ethsw_port_priv *port_priv = netdev_priv(netdev);
- int num_ss_stats = DPAA2_SWITCH_NUM_COUNTERS;
-
switch (sset) {
case ETH_SS_STATS:
- if (port_priv->mac)
- num_ss_stats += dpaa2_mac_get_sset_count();
- return num_ss_stats;
+ return DPAA2_SWITCH_NUM_COUNTERS + dpaa2_mac_get_sset_count();
default:
return -EOPNOTSUPP;
}
@@ -161,7 +156,6 @@ dpaa2_switch_ethtool_get_sset_count(stru
static void dpaa2_switch_ethtool_get_strings(struct net_device *netdev,
u32 stringset, u8 *data)
{
- struct ethsw_port_priv *port_priv = netdev_priv(netdev);
u8 *p = data;
int i;
@@ -172,8 +166,7 @@ static void dpaa2_switch_ethtool_get_str
ETH_GSTRING_LEN);
p += ETH_GSTRING_LEN;
}
- if (port_priv->mac)
- dpaa2_mac_get_strings(p);
+ dpaa2_mac_get_strings(p);
break;
}
}

View File

@@ -0,0 +1,28 @@
From c838d9fd7e6ba9ddd6006bf0a296396266e9f121 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:17 +0200
Subject: [PATCH 10/14] net: dpaa2-switch replace direct MAC access with
dpaa2_switch_port_has_mac()
The helper function will gain a lockdep annotation in a future patch.
Make sure to benefit from it.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
@@ -189,7 +189,7 @@ static void dpaa2_switch_ethtool_get_sta
dpaa2_switch_ethtool_counters[i].name, err);
}
- if (port_priv->mac)
+ if (dpaa2_switch_port_has_mac(port_priv))
dpaa2_mac_get_ethtool_stats(port_priv->mac, data + i);
}

View File

@@ -0,0 +1,93 @@
From e0ea63162cb5f1ca7f844d6ef5fc4079448ee2d5 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:18 +0200
Subject: [PATCH 11/14] net: dpaa2-eth: connect to MAC before requesting the
"endpoint changed" IRQ
dpaa2_eth_connect_mac() is called both from dpaa2_eth_probe() and from
dpni_irq0_handler_thread().
It could happen that the DPNI gets connected to a DPMAC on the fsl-mc
bus exactly during probe, as soon as the "endpoint change" interrupt is
requested in dpaa2_eth_setup_irqs(). This will cause the
dpni_irq0_handler_thread() to register a phylink instance for that DPMAC.
Then, the probing function will also try to register a phylink instance
for the same DPMAC, operation which should fail (and this will fail the
probing of the driver).
Reorder dpaa2_eth_setup_irqs() and dpaa2_eth_connect_mac(), such that
dpni_irq0_handler_thread() never races with the DPMAC-related portion of
the probing path.
Also reorder dpaa2_eth_disconnect_mac() to be in the mirror position of
dpaa2_eth_connect_mac() in the teardown path.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -4715,6 +4715,10 @@ static int dpaa2_eth_probe(struct fsl_mc
}
#endif
+ err = dpaa2_eth_connect_mac(priv);
+ if (err)
+ goto err_connect_mac;
+
err = dpaa2_eth_setup_irqs(dpni_dev);
if (err) {
netdev_warn(net_dev, "Failed to set link interrupt, fall back to polling\n");
@@ -4727,10 +4731,6 @@ static int dpaa2_eth_probe(struct fsl_mc
priv->do_link_poll = true;
}
- err = dpaa2_eth_connect_mac(priv);
- if (err)
- goto err_connect_mac;
-
err = dpaa2_eth_dl_alloc(priv);
if (err)
goto err_dl_register;
@@ -4766,13 +4766,13 @@ err_dl_port_add:
err_dl_trap_register:
dpaa2_eth_dl_free(priv);
err_dl_register:
- dpaa2_eth_disconnect_mac(priv);
-err_connect_mac:
if (priv->do_link_poll)
kthread_stop(priv->poll_thread);
else
fsl_mc_free_irqs(dpni_dev);
err_poll_thread:
+ dpaa2_eth_disconnect_mac(priv);
+err_connect_mac:
dpaa2_eth_free_rings(priv);
err_alloc_rings:
err_csum:
@@ -4820,9 +4820,6 @@ static int dpaa2_eth_remove(struct fsl_m
#endif
unregister_netdev(net_dev);
- rtnl_lock();
- dpaa2_eth_disconnect_mac(priv);
- rtnl_unlock();
dpaa2_eth_dl_port_del(priv);
dpaa2_eth_dl_traps_unregister(priv);
@@ -4833,6 +4830,9 @@ static int dpaa2_eth_remove(struct fsl_m
else
fsl_mc_free_irqs(ls_dev);
+ rtnl_lock();
+ dpaa2_eth_disconnect_mac(priv);
+ rtnl_unlock();
dpaa2_eth_free_rings(priv);
free_percpu(priv->fd);
free_percpu(priv->sgt_cache);

View File

@@ -0,0 +1,320 @@
From 5e448a17dfa2e95166534df7f677a3694ef6187d Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:19 +0200
Subject: [PATCH 12/14] net: dpaa2-eth: serialize changes to priv->mac with a
mutex
The dpaa2 architecture permits dynamic connections between objects on
the fsl-mc bus, specifically between a DPNI object (represented by a
struct net_device) and a DPMAC object (represented by a struct phylink).
The DPNI driver is notified when those connections are created/broken
through the dpni_irq0_handler_thread() method. To ensure that ethtool
operations, as well as netdev up/down operations serialize with the
connection/disconnection of the DPNI with a DPMAC,
dpni_irq0_handler_thread() takes the rtnl_lock() to block those other
operations from taking place.
There is code called by dpaa2_mac_connect() which wants to acquire the
rtnl_mutex once again, see phylink_create() -> phylink_register_sfp() ->
sfp_bus_add_upstream() -> rtnl_lock(). So the strategy doesn't quite
work out, even though it's fairly simple.
Create a different strategy, where all code paths in the dpaa2-eth
driver access priv->mac only while they are holding priv->mac_lock.
The phylink instance is not created or connected to the PHY under the
priv->mac_lock, but only assigned to priv->mac then. This will eliminate
the reliance on the rtnl_mutex.
Add lockdep annotations and put comments where holding the lock is not
necessary, and priv->mac can be dereferenced freely.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 43 ++++++++++++--
.../net/ethernet/freescale/dpaa2/dpaa2-eth.h | 6 ++
.../ethernet/freescale/dpaa2/dpaa2-ethtool.c | 58 +++++++++++++++----
3 files changed, 91 insertions(+), 16 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -2021,8 +2021,11 @@ static int dpaa2_eth_link_state_update(s
/* When we manage the MAC/PHY using phylink there is no need
* to manually update the netif_carrier.
+ * We can avoid locking because we are called from the "link changed"
+ * IRQ handler, which is the same as the "endpoint changed" IRQ handler
+ * (the writer to priv->mac), so we cannot race with it.
*/
- if (dpaa2_eth_is_type_phy(priv))
+ if (dpaa2_mac_is_type_phy(priv->mac))
goto out;
/* Chech link state; speed / duplex changes are not treated yet */
@@ -2061,6 +2064,8 @@ static int dpaa2_eth_open(struct net_dev
priv->dpbp_dev->obj_desc.id, priv->bpid);
}
+ mutex_lock(&priv->mac_lock);
+
if (!dpaa2_eth_is_type_phy(priv)) {
/* We'll only start the txqs when the link is actually ready;
* make sure we don't race against the link up notification,
@@ -2079,6 +2084,7 @@ static int dpaa2_eth_open(struct net_dev
err = dpni_enable(priv->mc_io, 0, priv->mc_token);
if (err < 0) {
+ mutex_unlock(&priv->mac_lock);
netdev_err(net_dev, "dpni_enable() failed\n");
goto enable_err;
}
@@ -2086,6 +2092,8 @@ static int dpaa2_eth_open(struct net_dev
if (dpaa2_eth_is_type_phy(priv))
dpaa2_mac_start(priv->mac);
+ mutex_unlock(&priv->mac_lock);
+
return 0;
enable_err:
@@ -2157,6 +2165,8 @@ static int dpaa2_eth_stop(struct net_dev
int dpni_enabled = 0;
int retries = 10;
+ mutex_lock(&priv->mac_lock);
+
if (dpaa2_eth_is_type_phy(priv)) {
dpaa2_mac_stop(priv->mac);
} else {
@@ -2164,6 +2174,8 @@ static int dpaa2_eth_stop(struct net_dev
netif_carrier_off(net_dev);
}
+ mutex_unlock(&priv->mac_lock);
+
/* On dpni_disable(), the MC firmware will:
* - stop MAC Rx and wait for all Rx frames to be enqueued to software
* - cut off WRIOP dequeues from egress FQs and wait until transmission
@@ -2489,12 +2501,20 @@ static int dpaa2_eth_ts_ioctl(struct net
static int dpaa2_eth_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{
struct dpaa2_eth_priv *priv = netdev_priv(dev);
+ int err;
if (cmd == SIOCSHWTSTAMP)
return dpaa2_eth_ts_ioctl(dev, rq, cmd);
- if (dpaa2_eth_is_type_phy(priv))
- return phylink_mii_ioctl(priv->mac->phylink, rq, cmd);
+ mutex_lock(&priv->mac_lock);
+
+ if (dpaa2_eth_is_type_phy(priv)) {
+ err = phylink_mii_ioctl(priv->mac->phylink, rq, cmd);
+ mutex_unlock(&priv->mac_lock);
+ return err;
+ }
+
+ mutex_unlock(&priv->mac_lock);
return -EOPNOTSUPP;
}
@@ -4458,7 +4478,9 @@ static int dpaa2_eth_connect_mac(struct
goto err_close_mac;
}
+ mutex_lock(&priv->mac_lock);
priv->mac = mac;
+ mutex_unlock(&priv->mac_lock);
return 0;
@@ -4471,9 +4493,12 @@ err_free_mac:
static void dpaa2_eth_disconnect_mac(struct dpaa2_eth_priv *priv)
{
- struct dpaa2_mac *mac = priv->mac;
+ struct dpaa2_mac *mac;
+ mutex_lock(&priv->mac_lock);
+ mac = priv->mac;
priv->mac = NULL;
+ mutex_unlock(&priv->mac_lock);
if (!mac)
return;
@@ -4492,6 +4517,7 @@ static irqreturn_t dpni_irq0_handler_thr
struct fsl_mc_device *dpni_dev = to_fsl_mc_device(dev);
struct net_device *net_dev = dev_get_drvdata(dev);
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
+ bool had_mac;
int err;
err = dpni_get_irq_status(dpni_dev->mc_io, 0, dpni_dev->mc_handle,
@@ -4509,7 +4535,12 @@ static irqreturn_t dpni_irq0_handler_thr
dpaa2_eth_update_tx_fqids(priv);
rtnl_lock();
- if (dpaa2_eth_has_mac(priv))
+ /* We can avoid locking because the "endpoint changed" IRQ
+ * handler is the only one who changes priv->mac at runtime,
+ * so we are not racing with anyone.
+ */
+ had_mac = !!priv->mac;
+ if (had_mac)
dpaa2_eth_disconnect_mac(priv);
else
dpaa2_eth_connect_mac(priv);
@@ -4610,6 +4641,8 @@ static int dpaa2_eth_probe(struct fsl_mc
priv = netdev_priv(net_dev);
priv->net_dev = net_dev;
+ mutex_init(&priv->mac_lock);
+
priv->iommu_domain = iommu_get_domain_for_dev(dev);
priv->tx_tstamp_type = HWTSTAMP_TX_OFF;
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
@@ -580,6 +580,8 @@ struct dpaa2_eth_priv {
#endif
struct dpaa2_mac *mac;
+ /* Serializes changes to priv->mac */
+ struct mutex mac_lock;
struct workqueue_struct *dpaa2_ptp_wq;
struct work_struct tx_onestep_tstamp;
struct sk_buff_head tx_skbs;
@@ -733,11 +735,15 @@ static inline unsigned int dpaa2_eth_rx_
static inline bool dpaa2_eth_is_type_phy(struct dpaa2_eth_priv *priv)
{
+ lockdep_assert_held(&priv->mac_lock);
+
return dpaa2_mac_is_type_phy(priv->mac);
}
static inline bool dpaa2_eth_has_mac(struct dpaa2_eth_priv *priv)
{
+ lockdep_assert_held(&priv->mac_lock);
+
return priv->mac ? true : false;
}
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
@@ -86,11 +86,16 @@ static void dpaa2_eth_get_drvinfo(struct
static int dpaa2_eth_nway_reset(struct net_device *net_dev)
{
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
+ int err = -EOPNOTSUPP;
+
+ mutex_lock(&priv->mac_lock);
if (dpaa2_eth_is_type_phy(priv))
- return phylink_ethtool_nway_reset(priv->mac->phylink);
+ err = phylink_ethtool_nway_reset(priv->mac->phylink);
+
+ mutex_unlock(&priv->mac_lock);
- return -EOPNOTSUPP;
+ return err;
}
static int
@@ -98,10 +103,18 @@ dpaa2_eth_get_link_ksettings(struct net_
struct ethtool_link_ksettings *link_settings)
{
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
+ int err;
- if (dpaa2_eth_is_type_phy(priv))
- return phylink_ethtool_ksettings_get(priv->mac->phylink,
- link_settings);
+ mutex_lock(&priv->mac_lock);
+
+ if (dpaa2_eth_is_type_phy(priv)) {
+ err = phylink_ethtool_ksettings_get(priv->mac->phylink,
+ link_settings);
+ mutex_unlock(&priv->mac_lock);
+ return err;
+ }
+
+ mutex_unlock(&priv->mac_lock);
link_settings->base.autoneg = AUTONEG_DISABLE;
if (!(priv->link_state.options & DPNI_LINK_OPT_HALF_DUPLEX))
@@ -116,11 +129,17 @@ dpaa2_eth_set_link_ksettings(struct net_
const struct ethtool_link_ksettings *link_settings)
{
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
+ int err = -EOPNOTSUPP;
- if (!dpaa2_eth_is_type_phy(priv))
- return -EOPNOTSUPP;
+ mutex_lock(&priv->mac_lock);
+
+ if (dpaa2_eth_is_type_phy(priv))
+ err = phylink_ethtool_ksettings_set(priv->mac->phylink,
+ link_settings);
- return phylink_ethtool_ksettings_set(priv->mac->phylink, link_settings);
+ mutex_unlock(&priv->mac_lock);
+
+ return err;
}
static void dpaa2_eth_get_pauseparam(struct net_device *net_dev,
@@ -129,11 +148,16 @@ static void dpaa2_eth_get_pauseparam(str
struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
u64 link_options = priv->link_state.options;
+ mutex_lock(&priv->mac_lock);
+
if (dpaa2_eth_is_type_phy(priv)) {
phylink_ethtool_get_pauseparam(priv->mac->phylink, pause);
+ mutex_unlock(&priv->mac_lock);
return;
}
+ mutex_unlock(&priv->mac_lock);
+
pause->rx_pause = dpaa2_eth_rx_pause_enabled(link_options);
pause->tx_pause = dpaa2_eth_tx_pause_enabled(link_options);
pause->autoneg = AUTONEG_DISABLE;
@@ -152,9 +176,17 @@ static int dpaa2_eth_set_pauseparam(stru
return -EOPNOTSUPP;
}
- if (dpaa2_eth_is_type_phy(priv))
- return phylink_ethtool_set_pauseparam(priv->mac->phylink,
- pause);
+ mutex_lock(&priv->mac_lock);
+
+ if (dpaa2_eth_is_type_phy(priv)) {
+ err = phylink_ethtool_set_pauseparam(priv->mac->phylink,
+ pause);
+ mutex_unlock(&priv->mac_lock);
+ return err;
+ }
+
+ mutex_unlock(&priv->mac_lock);
+
if (pause->autoneg)
return -EOPNOTSUPP;
@@ -307,8 +339,12 @@ static void dpaa2_eth_get_ethtool_stats(
}
*(data + i++) = buf_cnt;
+ mutex_lock(&priv->mac_lock);
+
if (dpaa2_eth_has_mac(priv))
dpaa2_mac_get_ethtool_stats(priv->mac, data + i);
+
+ mutex_unlock(&priv->mac_lock);
}
static int dpaa2_eth_prep_eth_rule(struct ethhdr *eth_value, struct ethhdr *eth_mask,

View File

@@ -0,0 +1,203 @@
From 80d12452a5f160c39d63efc1be07df36f9d07133 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:20 +0200
Subject: [PATCH 13/14] net: dpaa2-switch: serialize changes to priv->mac with
a mutex
The dpaa2-switch driver uses a DPMAC in the same way as the dpaa2-eth
driver, so we need to duplicate the locking solution established by the
previous change to the switch driver as well.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
.../freescale/dpaa2/dpaa2-switch-ethtool.c | 32 +++++++++++++++----
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 31 ++++++++++++++++--
.../ethernet/freescale/dpaa2/dpaa2-switch.h | 2 ++
3 files changed, 55 insertions(+), 10 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
@@ -60,11 +60,18 @@ dpaa2_switch_get_link_ksettings(struct n
{
struct ethsw_port_priv *port_priv = netdev_priv(netdev);
struct dpsw_link_state state = {0};
- int err = 0;
+ int err;
- if (dpaa2_switch_port_is_type_phy(port_priv))
- return phylink_ethtool_ksettings_get(port_priv->mac->phylink,
- link_ksettings);
+ mutex_lock(&port_priv->mac_lock);
+
+ if (dpaa2_switch_port_is_type_phy(port_priv)) {
+ err = phylink_ethtool_ksettings_get(port_priv->mac->phylink,
+ link_ksettings);
+ mutex_unlock(&port_priv->mac_lock);
+ return err;
+ }
+
+ mutex_unlock(&port_priv->mac_lock);
err = dpsw_if_get_link_state(port_priv->ethsw_data->mc_io, 0,
port_priv->ethsw_data->dpsw_handle,
@@ -99,9 +106,16 @@ dpaa2_switch_set_link_ksettings(struct n
bool if_running;
int err = 0, ret;
- if (dpaa2_switch_port_is_type_phy(port_priv))
- return phylink_ethtool_ksettings_set(port_priv->mac->phylink,
- link_ksettings);
+ mutex_lock(&port_priv->mac_lock);
+
+ if (dpaa2_switch_port_is_type_phy(port_priv)) {
+ err = phylink_ethtool_ksettings_set(port_priv->mac->phylink,
+ link_ksettings);
+ mutex_unlock(&port_priv->mac_lock);
+ return err;
+ }
+
+ mutex_unlock(&port_priv->mac_lock);
/* Interface needs to be down to change link settings */
if_running = netif_running(netdev);
@@ -189,8 +203,12 @@ static void dpaa2_switch_ethtool_get_sta
dpaa2_switch_ethtool_counters[i].name, err);
}
+ mutex_lock(&port_priv->mac_lock);
+
if (dpaa2_switch_port_has_mac(port_priv))
dpaa2_mac_get_ethtool_stats(port_priv->mac, data + i);
+
+ mutex_unlock(&port_priv->mac_lock);
}
const struct ethtool_ops dpaa2_switch_port_ethtool_ops = {
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -603,8 +603,11 @@ static int dpaa2_switch_port_link_state_
/* When we manage the MAC/PHY using phylink there is no need
* to manually update the netif_carrier.
+ * We can avoid locking because we are called from the "link changed"
+ * IRQ handler, which is the same as the "endpoint changed" IRQ handler
+ * (the writer to port_priv->mac), so we cannot race with it.
*/
- if (dpaa2_switch_port_is_type_phy(port_priv))
+ if (dpaa2_mac_is_type_phy(port_priv->mac))
return 0;
/* Interrupts are received even though no one issued an 'ifconfig up'
@@ -684,6 +687,8 @@ static int dpaa2_switch_port_open(struct
struct ethsw_core *ethsw = port_priv->ethsw_data;
int err;
+ mutex_lock(&port_priv->mac_lock);
+
if (!dpaa2_switch_port_is_type_phy(port_priv)) {
/* Explicitly set carrier off, otherwise
* netif_carrier_ok() will return true and cause 'ip link show'
@@ -697,6 +702,7 @@ static int dpaa2_switch_port_open(struct
port_priv->ethsw_data->dpsw_handle,
port_priv->idx);
if (err) {
+ mutex_unlock(&port_priv->mac_lock);
netdev_err(netdev, "dpsw_if_enable err %d\n", err);
return err;
}
@@ -706,6 +712,8 @@ static int dpaa2_switch_port_open(struct
if (dpaa2_switch_port_is_type_phy(port_priv))
dpaa2_mac_start(port_priv->mac);
+ mutex_unlock(&port_priv->mac_lock);
+
return 0;
}
@@ -715,6 +723,8 @@ static int dpaa2_switch_port_stop(struct
struct ethsw_core *ethsw = port_priv->ethsw_data;
int err;
+ mutex_lock(&port_priv->mac_lock);
+
if (dpaa2_switch_port_is_type_phy(port_priv)) {
dpaa2_mac_stop(port_priv->mac);
} else {
@@ -722,6 +732,8 @@ static int dpaa2_switch_port_stop(struct
netif_carrier_off(netdev);
}
+ mutex_unlock(&port_priv->mac_lock);
+
err = dpsw_if_disable(port_priv->ethsw_data->mc_io, 0,
port_priv->ethsw_data->dpsw_handle,
port_priv->idx);
@@ -1461,7 +1473,9 @@ static int dpaa2_switch_port_connect_mac
}
}
+ mutex_lock(&port_priv->mac_lock);
port_priv->mac = mac;
+ mutex_unlock(&port_priv->mac_lock);
return 0;
@@ -1474,9 +1488,12 @@ err_free_mac:
static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv)
{
- struct dpaa2_mac *mac = port_priv->mac;
+ struct dpaa2_mac *mac;
+ mutex_lock(&port_priv->mac_lock);
+ mac = port_priv->mac;
port_priv->mac = NULL;
+ mutex_unlock(&port_priv->mac_lock);
if (!mac)
return;
@@ -1495,6 +1512,7 @@ static irqreturn_t dpaa2_switch_irq0_han
struct ethsw_port_priv *port_priv;
u32 status = ~0;
int err, if_id;
+ bool had_mac;
err = dpsw_get_irq_status(ethsw->mc_io, 0, ethsw->dpsw_handle,
DPSW_IRQ_INDEX_IF, &status);
@@ -1513,7 +1531,12 @@ static irqreturn_t dpaa2_switch_irq0_han
if (status & DPSW_IRQ_EVENT_ENDPOINT_CHANGED) {
rtnl_lock();
- if (dpaa2_switch_port_has_mac(port_priv))
+ /* We can avoid locking because the "endpoint changed" IRQ
+ * handler is the only one who changes priv->mac at runtime,
+ * so we are not racing with anyone.
+ */
+ had_mac = !!port_priv->mac;
+ if (had_mac)
dpaa2_switch_port_disconnect_mac(port_priv);
else
dpaa2_switch_port_connect_mac(port_priv);
@@ -3249,6 +3272,8 @@ static int dpaa2_switch_probe_port(struc
port_priv->netdev = port_netdev;
port_priv->ethsw_data = ethsw;
+ mutex_init(&port_priv->mac_lock);
+
port_priv->idx = port_idx;
port_priv->stp_state = BR_STATE_FORWARDING;
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h
@@ -161,6 +161,8 @@ struct ethsw_port_priv {
struct dpaa2_switch_filter_block *filter_block;
struct dpaa2_mac *mac;
+ /* Protects against changes to port_priv->mac */
+ struct mutex mac_lock;
};
/* Switch data */

View File

@@ -0,0 +1,113 @@
From 4ea2faf5bb13d9ba9f07e996d495c4cbe34a4236 Mon Sep 17 00:00:00 2001
From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Tue, 29 Nov 2022 16:12:21 +0200
Subject: [PATCH 14/14] net: dpaa2-mac: move rtnl_lock() only around
phylink_{,dis}connect_phy()
After the introduction of a private mac_lock that serializes access to
priv->mac (and port_priv->mac in the switch), the only remaining purpose
of rtnl_lock() is to satisfy the locking requirements of
phylink_fwnode_phy_connect() and phylink_disconnect_phy().
But the functions these live in, dpaa2_mac_connect() and
dpaa2_mac_disconnect(), have contradictory locking requirements.
While phylink_fwnode_phy_connect() wants rtnl_lock() to be held,
phylink_create() wants it to not be held.
Move the rtnl_lock() from top-level (in the dpaa2-eth and dpaa2-switch
drivers) to only surround the phylink calls that require it, in the
dpaa2-mac library code.
This is possible because dpaa2_mac_connect() and dpaa2_mac_disconnect()
run unlocked, and there isn't any danger of an AB/BA deadlock between
the rtnl_mutex and other private locks.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 4 ----
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 5 +++++
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c | 4 ----
3 files changed, 5 insertions(+), 8 deletions(-)
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -4534,7 +4534,6 @@ static irqreturn_t dpni_irq0_handler_thr
dpaa2_eth_set_mac_addr(netdev_priv(net_dev));
dpaa2_eth_update_tx_fqids(priv);
- rtnl_lock();
/* We can avoid locking because the "endpoint changed" IRQ
* handler is the only one who changes priv->mac at runtime,
* so we are not racing with anyone.
@@ -4544,7 +4543,6 @@ static irqreturn_t dpni_irq0_handler_thr
dpaa2_eth_disconnect_mac(priv);
else
dpaa2_eth_connect_mac(priv);
- rtnl_unlock();
}
return IRQ_HANDLED;
@@ -4863,9 +4861,7 @@ static int dpaa2_eth_remove(struct fsl_m
else
fsl_mc_free_irqs(ls_dev);
- rtnl_lock();
dpaa2_eth_disconnect_mac(priv);
- rtnl_unlock();
dpaa2_eth_free_rings(priv);
free_percpu(priv->fd);
free_percpu(priv->sgt_cache);
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -428,7 +428,9 @@ int dpaa2_mac_connect(struct dpaa2_mac *
}
mac->phylink = phylink;
+ rtnl_lock();
err = phylink_fwnode_phy_connect(mac->phylink, dpmac_node, 0);
+ rtnl_unlock();
if (err) {
netdev_err(net_dev, "phylink_fwnode_phy_connect() = %d\n", err);
goto err_phylink_destroy;
@@ -446,7 +448,10 @@ err_pcs_destroy:
void dpaa2_mac_disconnect(struct dpaa2_mac *mac)
{
+ rtnl_lock();
phylink_disconnect_phy(mac->phylink);
+ rtnl_unlock();
+
phylink_destroy(mac->phylink);
dpaa2_pcs_destroy(mac);
of_phy_put(mac->serdes_phy);
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -1530,7 +1530,6 @@ static irqreturn_t dpaa2_switch_irq0_han
}
if (status & DPSW_IRQ_EVENT_ENDPOINT_CHANGED) {
- rtnl_lock();
/* We can avoid locking because the "endpoint changed" IRQ
* handler is the only one who changes priv->mac at runtime,
* so we are not racing with anyone.
@@ -1540,7 +1539,6 @@ static irqreturn_t dpaa2_switch_irq0_han
dpaa2_switch_port_disconnect_mac(port_priv);
else
dpaa2_switch_port_connect_mac(port_priv);
- rtnl_unlock();
}
out:
@@ -2951,9 +2949,7 @@ static void dpaa2_switch_remove_port(str
{
struct ethsw_port_priv *port_priv = ethsw->ports[port_idx];
- rtnl_lock();
dpaa2_switch_port_disconnect_mac(port_priv);
- rtnl_unlock();
free_netdev(port_priv->netdev);
ethsw->ports[port_idx] = NULL;
}

View File

@@ -0,0 +1,23 @@
From b77c0ecdc7915e5c5c515da1aa6cfaf6f4eb8351 Mon Sep 17 00:00:00 2001
From: Mathew McBride <matt@traverse.com.au>
Date: Wed, 28 Sep 2022 16:39:31 +1000
Subject: [PATCH] arm: disable code size reduction measures
(gc-sections,-f*-sections)
This interferes with the EFI boot stub on armv7l.
Signed-off-by: Mathew McBride <matt@traverse.com.au>
---
arch/arm/Kconfig | 1 -
1 file changed, 1 deletion(-)
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -128,7 +128,6 @@ config ARM
select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
select IRQ_FORCED_THREADING
select LOCK_MM_AND_FIND_VMA
- select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
select MODULES_USE_ELF_REL
select NEED_DMA_MAP_STATE
select OF_EARLY_FLATTREE if OF

View File

@@ -0,0 +1,21 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2006-2013 OpenWrt.org
include $(TOPDIR)/rules.mk
ARCH:=arm
BOARD:=at91
BOARDNAME:=Microchip (Atmel AT91)
FEATURES:=ext4 squashfs targz usbgadget ubifs
SUBTARGETS:=sama7 sama5 sam9x
KERNEL_PATCHVER:=6.1
include $(INCLUDE_DIR)/target.mk
KERNELNAME:=zImage dtbs
DEFAULT_PACKAGES += kmod-usb-ohci kmod-at91-udc kmod-usb-gadget-eth
$(eval $(call BuildTarget))

Some files were not shown because too many files have changed in this diff Show More