Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen 2023-07-10 15:27:11 +08:00
commit b039d618a3
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
46 changed files with 1940 additions and 1574 deletions

View File

@ -346,6 +346,7 @@ define Device/InitProfile
DEVICE_ALT2_TITLE = $$(DEVICE_ALT2_VENDOR) $$(DEVICE_ALT2_MODEL)$$(if $$(DEVICE_ALT2_VARIANT), $$(DEVICE_ALT2_VARIANT)) DEVICE_ALT2_TITLE = $$(DEVICE_ALT2_VENDOR) $$(DEVICE_ALT2_MODEL)$$(if $$(DEVICE_ALT2_VARIANT), $$(DEVICE_ALT2_VARIANT))
DEVICE_ALT3_TITLE = $$(DEVICE_ALT3_VENDOR) $$(DEVICE_ALT3_MODEL)$$(if $$(DEVICE_ALT3_VARIANT), $$(DEVICE_ALT3_VARIANT)) DEVICE_ALT3_TITLE = $$(DEVICE_ALT3_VENDOR) $$(DEVICE_ALT3_MODEL)$$(if $$(DEVICE_ALT3_VARIANT), $$(DEVICE_ALT3_VARIANT))
DEVICE_ALT4_TITLE = $$(DEVICE_ALT4_VENDOR) $$(DEVICE_ALT4_MODEL)$$(if $$(DEVICE_ALT4_VARIANT), $$(DEVICE_ALT4_VARIANT)) DEVICE_ALT4_TITLE = $$(DEVICE_ALT4_VENDOR) $$(DEVICE_ALT4_MODEL)$$(if $$(DEVICE_ALT4_VARIANT), $$(DEVICE_ALT4_VARIANT))
DEVICE_ALT5_TITLE = $$(DEVICE_ALT5_VENDOR) $$(DEVICE_ALT5_MODEL)$$(if $$(DEVICE_ALT5_VARIANT), $$(DEVICE_ALT5_VARIANT))
DEVICE_VENDOR := DEVICE_VENDOR :=
DEVICE_MODEL := DEVICE_MODEL :=
DEVICE_VARIANT := DEVICE_VARIANT :=
@ -364,6 +365,9 @@ define Device/InitProfile
DEVICE_ALT4_VENDOR := DEVICE_ALT4_VENDOR :=
DEVICE_ALT4_MODEL := DEVICE_ALT4_MODEL :=
DEVICE_ALT4_VARIANT := DEVICE_ALT4_VARIANT :=
DEVICE_ALT5_VENDOR :=
DEVICE_ALT5_MODEL :=
DEVICE_ALT5_VARIANT :=
DEVICE_PACKAGES := DEVICE_PACKAGES :=
DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE) DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE)
endef endef
@ -448,7 +452,8 @@ DEFAULT_DEVICE_VARS := \
DEVICE_ALT1_VENDOR DEVICE_ALT1_MODEL DEVICE_ALT1_VARIANT \ DEVICE_ALT1_VENDOR DEVICE_ALT1_MODEL DEVICE_ALT1_VARIANT \
DEVICE_ALT2_VENDOR DEVICE_ALT2_MODEL DEVICE_ALT2_VARIANT \ DEVICE_ALT2_VENDOR DEVICE_ALT2_MODEL DEVICE_ALT2_VARIANT \
DEVICE_ALT3_VENDOR DEVICE_ALT3_MODEL DEVICE_ALT3_VARIANT \ DEVICE_ALT3_VENDOR DEVICE_ALT3_MODEL DEVICE_ALT3_VARIANT \
DEVICE_ALT4_VENDOR DEVICE_ALT4_MODEL DEVICE_ALT4_VARIANT DEVICE_ALT4_VENDOR DEVICE_ALT4_MODEL DEVICE_ALT4_VARIANT \
DEVICE_ALT5_VENDOR DEVICE_ALT5_MODEL DEVICE_ALT5_VARIANT
define Device/ExportVar define Device/ExportVar
$(1) : $(2):=$$($(2)) $(1) : $(2):=$$($(2))
@ -537,6 +542,9 @@ define Device/Build/initramfs
DEVICE_ALT4_VENDOR="$$(DEVICE_ALT4_VENDOR)" \ DEVICE_ALT4_VENDOR="$$(DEVICE_ALT4_VENDOR)" \
DEVICE_ALT4_MODEL="$$(DEVICE_ALT4_MODEL)" \ DEVICE_ALT4_MODEL="$$(DEVICE_ALT4_MODEL)" \
DEVICE_ALT4_VARIANT="$$(DEVICE_ALT4_VARIANT)" \ DEVICE_ALT4_VARIANT="$$(DEVICE_ALT4_VARIANT)" \
DEVICE_ALT5_VENDOR="$$(DEVICE_ALT5_VENDOR)" \
DEVICE_ALT5_MODEL="$$(DEVICE_ALT5_MODEL)" \
DEVICE_ALT5_VARIANT="$$(DEVICE_ALT5_VARIANT)" \
DEVICE_TITLE="$$(DEVICE_TITLE)" \ DEVICE_TITLE="$$(DEVICE_TITLE)" \
DEVICE_PACKAGES="$$(DEVICE_PACKAGES)" \ DEVICE_PACKAGES="$$(DEVICE_PACKAGES)" \
TARGET="$(BOARD)" \ TARGET="$(BOARD)" \
@ -668,6 +676,9 @@ define Device/Build/image
DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \ DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \
DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \ DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \
DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \ DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \
DEVICE_ALT5_VENDOR="$(DEVICE_ALT5_VENDOR)" \
DEVICE_ALT5_MODEL="$(DEVICE_ALT5_MODEL)" \
DEVICE_ALT5_VARIANT="$(DEVICE_ALT5_VARIANT)" \
DEVICE_TITLE="$(DEVICE_TITLE)" \ DEVICE_TITLE="$(DEVICE_TITLE)" \
DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \ DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \
TARGET="$(BOARD)" \ TARGET="$(BOARD)" \
@ -719,6 +730,9 @@ define Device/Build/artifact
DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \ DEVICE_ALT4_VENDOR="$(DEVICE_ALT4_VENDOR)" \
DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \ DEVICE_ALT4_MODEL="$(DEVICE_ALT4_MODEL)" \
DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \ DEVICE_ALT4_VARIANT="$(DEVICE_ALT4_VARIANT)" \
DEVICE_ALT5_VENDOR="$(DEVICE_ALT5_VENDOR)" \
DEVICE_ALT5_MODEL="$(DEVICE_ALT5_MODEL)" \
DEVICE_ALT5_VARIANT="$(DEVICE_ALT5_VARIANT)" \
DEVICE_TITLE="$(DEVICE_TITLE)" \ DEVICE_TITLE="$(DEVICE_TITLE)" \
DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \ DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \
TARGET="$(BOARD)" \ TARGET="$(BOARD)" \
@ -762,6 +776,7 @@ $(if $(strip $(DEVICE_ALT1_TITLE)),- $(DEVICE_ALT1_TITLE))
$(if $(strip $(DEVICE_ALT2_TITLE)),- $(DEVICE_ALT2_TITLE)) $(if $(strip $(DEVICE_ALT2_TITLE)),- $(DEVICE_ALT2_TITLE))
$(if $(strip $(DEVICE_ALT3_TITLE)),- $(DEVICE_ALT3_TITLE)) $(if $(strip $(DEVICE_ALT3_TITLE)),- $(DEVICE_ALT3_TITLE))
$(if $(strip $(DEVICE_ALT4_TITLE)),- $(DEVICE_ALT4_TITLE)) $(if $(strip $(DEVICE_ALT4_TITLE)),- $(DEVICE_ALT4_TITLE))
$(if $(strip $(DEVICE_ALT5_TITLE)),- $(DEVICE_ALT5_TITLE))
@@ @@
endef endef
@ -787,6 +802,10 @@ ifneq ($$(strip $$(DEVICE_ALT4_TITLE)),)
DEVICE_DISPLAY = $$(DEVICE_ALT4_TITLE) ($$(DEVICE_TITLE)) DEVICE_DISPLAY = $$(DEVICE_ALT4_TITLE) ($$(DEVICE_TITLE))
$$(info $$(call Device/DumpInfo,$(1))) $$(info $$(call Device/DumpInfo,$(1)))
endif endif
ifneq ($$(strip $$(DEVICE_ALT5_TITLE)),)
DEVICE_DISPLAY = $$(DEVICE_ALT5_TITLE) ($$(DEVICE_TITLE))
$$(info $$(call Device/DumpInfo,$(1)))
endif
DEVICE_DISPLAY = $$(DEVICE_TITLE) DEVICE_DISPLAY = $$(DEVICE_TITLE)
$$(eval $$(if $$(DEVICE_TITLE),$$(info $$(call Device/DumpInfo,$(1))))) $$(eval $$(if $$(DEVICE_TITLE),$$(info $$(call Device/DumpInfo,$(1)))))
endef endef

View File

@ -25,6 +25,10 @@ araknis,an-300-ap-i-n|\
araknis,an-500-ap-i-ac|\ araknis,an-500-ap-i-ac|\
araknis,an-700-ap-i-ac|\ araknis,an-700-ap-i-ac|\
arduino,yun|\ arduino,yun|\
asus,rt-ac59u|\
asus,rt-ac59u-v2|\
asus,zenwifi-cd6n|\
asus,zenwifi-cd6r|\
buffalo,bhr-4grv2|\ buffalo,bhr-4grv2|\
devolo,magic-2-wifi|\ devolo,magic-2-wifi|\
dlink,dir-859-a1|\ dlink,dir-859-a1|\

View File

@ -70,7 +70,7 @@
{ {
--- a/boot/image-fit.c --- a/boot/image-fit.c
+++ b/boot/image-fit.c +++ b/boot/image-fit.c
@@ -2051,6 +2051,50 @@ static const char *fit_get_image_type_pr @@ -2051,6 +2051,49 @@ static const char *fit_get_image_type_pr
return "unknown"; return "unknown";
} }
@ -89,9 +89,8 @@
+ +
+ hdrsize = fdt_totalsize(fit); + hdrsize = fdt_totalsize(fit);
+ +
+ /* simple FIT with internal images */ + /* take care of simple FIT with internal images */
+ if (hdrsize > 0x1000) + max_size = hdrsize;
+ return hdrsize;
+ +
+ images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH); + images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH);
+ if (images_noffset < 0) { + if (images_noffset < 0) {

View File

@ -17,6 +17,7 @@
#include <linux/property.h> #include <linux/property.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/version.h>
#define WS2812B_BYTES_PER_COLOR 3 #define WS2812B_BYTES_PER_COLOR 3
#define WS2812B_NUM_COLORS 3 #define WS2812B_NUM_COLORS 3
@ -191,7 +192,11 @@ ERR_UNREG_LEDS:
return ret; return ret;
} }
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0)
static void ws2812b_remove(struct spi_device *spi)
#else
static int ws2812b_remove(struct spi_device *spi) static int ws2812b_remove(struct spi_device *spi)
#endif
{ {
struct ws2812b_priv *priv = spi_get_drvdata(spi); struct ws2812b_priv *priv = spi_get_drvdata(spi);
int cur_led; int cur_led;
@ -201,7 +206,9 @@ static int ws2812b_remove(struct spi_device *spi)
kfree(priv->data_buf); kfree(priv->data_buf);
mutex_destroy(&priv->mutex); mutex_destroy(&priv->mutex);
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
return 0; return 0;
#endif
} }
static const struct spi_device_id ws2812b_spi_ids[] = { static const struct spi_device_id ws2812b_spi_ids[] = {

View File

@ -267,7 +267,6 @@ endef
define Package/tune2fs/install define Package/tune2fs/install
$(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/tune2fs $(1)/usr/sbin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/tune2fs $(1)/usr/sbin/
$(LN) tune2fs $(1)/usr/sbin/findfs
endef endef
define Package/resize2fs/install define Package/resize2fs/install

View File

@ -1600,18 +1600,18 @@
+ * (and doing them). + * (and doing them).
+ */ + */
+int try_addint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) { +int try_addint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) {
+ lua_Integer v= ib+ic; /* may overflow */ + /* Signed int overflow is undefined behavior, so catch it without causing it. */
+ if (ib>0 && ic>0) { if (v < 0) return 0; /*overflow, use floats*/ } + if (ic>0) { if (ib > LUA_INTEGER_MAX - ic) return 0; /*overflow, use floats*/ }
+ else if (ib<0 && ic<0) { if (v >= 0) return 0; } + else { if (ib < LUA_INTEGER_MIN - ic) return 0; }
+ *r= v; + *r = ib + ic;
+ return 1; + return 1;
+} +}
+ +
+int try_subint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) { +int try_subint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) {
+ lua_Integer v= ib-ic; /* may overflow */ + /* Signed int overflow is undefined behavior, so catch it without causing it. */
+ if (ib>=0 && ic<0) { if (v < 0) return 0; /*overflow, use floats*/ } + if (ic>0) { if (ib < LUA_INTEGER_MIN + ic) return 0; /*overflow, use floats*/ }
+ else if (ib<0 && ic>0) { if (v >= 0) return 0; } + else { if (ib > LUA_INTEGER_MAX + ic) return 0; }
+ *r= v; + *r = ib - ic;
+ return 1; + return 1;
+} +}
+ +

View File

@ -1589,18 +1589,18 @@
+ * (and doing them). + * (and doing them).
+ */ + */
+int try_addint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) { +int try_addint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) {
+ lua_Integer v= ib+ic; /* may overflow */ + /* Signed int overflow is undefined behavior, so catch it without causing it. */
+ if (ib>0 && ic>0) { if (v < 0) return 0; /*overflow, use floats*/ } + if (ic>0) { if (ib > LUA_INTEGER_MAX - ic) return 0; /*overflow, use floats*/ }
+ else if (ib<0 && ic<0) { if (v >= 0) return 0; } + else { if (ib < LUA_INTEGER_MIN - ic) return 0; }
+ *r= v; + *r = ib + ic;
+ return 1; + return 1;
+} +}
+ +
+int try_subint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) { +int try_subint( lua_Integer *r, lua_Integer ib, lua_Integer ic ) {
+ lua_Integer v= ib-ic; /* may overflow */ + /* Signed int overflow is undefined behavior, so catch it without causing it. */
+ if (ib>=0 && ic<0) { if (v < 0) return 0; /*overflow, use floats*/ } + if (ic>0) { if (ib < LUA_INTEGER_MIN + ic) return 0; /*overflow, use floats*/ }
+ else if (ib<0 && ic>0) { if (v >= 0) return 0; } + else { if (ib > LUA_INTEGER_MAX + ic) return 0; }
+ *r= v; + *r = ib - ic;
+ return 1; + return 1;
+} +}
+ +

View File

@ -21,7 +21,7 @@ if not file_path.is_file():
def get_titles(): def get_titles():
titles = [] titles = []
for prefix in ["", "ALT0_", "ALT1_", "ALT2_", "ALT3_", "ALT4_"]: for prefix in ["", "ALT0_", "ALT1_", "ALT2_", "ALT3_", "ALT4_", "ALT5_"]:
title = {} title = {}
for var in ["vendor", "model", "variant"]: for var in ["vendor", "model", "variant"]:
if getenv("DEVICE_{}{}".format(prefix, var.upper())): if getenv("DEVICE_{}{}".format(prefix, var.upper())):

View File

@ -108,10 +108,10 @@ if [ -n "${DTB}" ]; then
${DTADDR:+load = <${DTADDR}>;} ${DTADDR:+load = <${DTADDR}>;}
arch = \"${ARCH}\"; arch = \"${ARCH}\";
compression = \"none\"; compression = \"none\";
hash@1 { hash${REFERENCE_CHAR}1 {
algo = \"crc32\"; algo = \"crc32\";
}; };
hash@2 { hash${REFERENCE_CHAR}2 {
algo = \"${HASH}\"; algo = \"${HASH}\";
}; };
}; };
@ -128,10 +128,10 @@ if [ -n "${INITRD}" ]; then
type = \"ramdisk\"; type = \"ramdisk\";
arch = \"${ARCH}\"; arch = \"${ARCH}\";
os = \"linux\"; os = \"linux\";
hash@1 { hash${REFERENCE_CHAR}1 {
algo = \"crc32\"; algo = \"crc32\";
}; };
hash@2 { hash${REFERENCE_CHAR}2 {
algo = \"${HASH}\"; algo = \"${HASH}\";
}; };
}; };
@ -150,10 +150,10 @@ if [ -n "${ROOTFS}" ]; then
type = \"filesystem\"; type = \"filesystem\";
arch = \"${ARCH}\"; arch = \"${ARCH}\";
compression = \"none\"; compression = \"none\";
hash@1 { hash${REFERENCE_CHAR}1 {
algo = \"crc32\"; algo = \"crc32\";
}; };
hash@2 { hash${REFERENCE_CHAR}2 {
algo = \"${HASH}\"; algo = \"${HASH}\";
}; };
}; };
@ -181,10 +181,10 @@ OVCONFIGS=""
arch = \"${ARCH}\"; arch = \"${ARCH}\";
load = <${DTADDR}>; load = <${DTADDR}>;
compression = \"none\"; compression = \"none\";
hash@1 { hash${REFERENCE_CHAR}1 {
algo = \"crc32\"; algo = \"crc32\";
}; };
hash@2 { hash${REFERENCE_CHAR}2 {
algo = \"${HASH}\"; algo = \"${HASH}\";
}; };
}; };
@ -216,10 +216,10 @@ DATA="/dts-v1/;
compression = \"${COMPRESS}\"; compression = \"${COMPRESS}\";
load = <${LOAD_ADDR}>; load = <${LOAD_ADDR}>;
entry = <${ENTRY_ADDR}>; entry = <${ENTRY_ADDR}>;
hash@1 { hash${REFERENCE_CHAR}1 {
algo = \"crc32\"; algo = \"crc32\";
}; };
hash@2 { hash${REFERENCE_CHAR}2 {
algo = \"$HASH\"; algo = \"$HASH\";
}; };
}; };

View File

@ -23,7 +23,7 @@ define KernelPackage/hw-crypto-4xx
+kmod-crypto-ccm +kmod-crypto-gcm \ +kmod-crypto-ccm +kmod-crypto-gcm \
+kmod-crypto-sha1 +kmod-crypto-sha256 +kmod-crypto-sha512 +kmod-crypto-sha1 +kmod-crypto-sha256 +kmod-crypto-sha512
FILES:=$(LINUX_DIR)/drivers/crypto/amcc/crypto4xx.ko FILES:=$(LINUX_DIR)/drivers/crypto/amcc/crypto4xx.ko
AUTOLOAD:=$(call AutoLoad,09,sata_dwc_460ex,1) AUTOLOAD:=$(call AutoLoad,09,crypto4xx,1)
$(call AddDepends/crypto) $(call AddDepends/crypto)
endef endef

View File

@ -114,7 +114,6 @@ CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CHACHA20=y CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_CRYPTD=y

View File

@ -34,7 +34,6 @@ CONFIG_CPU_R4K_CACHE_TLB=y
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CPU_SUPPORTS_MSA=y CONFIG_CPU_SUPPORTS_MSA=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2 CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG2=y

View File

@ -0,0 +1,114 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qca956x.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
aliases {
label-mac-device = &eth0;
};
};
&eth0 {
status = "okay";
pll-data = <0x03000101 0x00000101 0x00001919>;
phy-mode = "sgmii";
phy-handle = <&phy0>;
nvmem-cells = <&macaddr_factory_1002>;
nvmem-cell-names = "mac-address";
};
&mdio0 {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
phy-mode = "sgmii";
qca,mib-poll-interval = <500>;
qca,ar8327-initvals = <
0x04 0x80080080 /* PORT0 PAD MODE CTRL */
0x08 0x00000000 /* PORT5 PAD MODE CTRL */
0x0c 0x00000000 /* PORT6 PAD MODE CTRL */
0x10 0x00000080 /* POWER_ON_STRAP */
0x7c 0x0000007e /* PORT0_STATUS */
0x94 0x00000200 /* PORT6_STATUS */
>;
};
};
&pcie {
status = "okay";
wifi@0,0 {
compatible = "qcom,ath10k";
reg = <0 0 0 0 0>;
nvmem-cells = <&precal_factory_5000>;
nvmem-cell-names = "pre-calibration";
};
};
&spi {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
m25p,fast-read;
mtdparts: partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "Bootloader";
reg = <0x000000 0x040000>;
read-only;
};
partition@40000 {
label = "nvram";
reg = <0x040000 0x010000>;
read-only;
};
partition@50000 {
label = "Factory";
reg = <0x050000 0x010000>;
read-only;
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;
cal_factory_1000: cal@1000 {
reg = <0x1000 0x440>;
};
macaddr_factory_1002: macaddr@1002 {
reg = <0x1002 0x6>;
};
precal_factory_5000: precal@5000 {
reg = <0x5000 0x2f20>;
};
};
};
};
};
&wmac {
/* Does not work due to lack of QCN5502 support in ath9k. */
status = "disabled";
nvmem-cells = <&cal_factory_1000>;
nvmem-cell-names = "calibration";
};

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus_rt-ac59u.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "asus,rt-ac59u-v2", "qca,qcn5500", "qca,qca9560";
model = "ASUS RT-AC59U v2";
};
&mtdparts {
partition@60000 {
label = "firmware";
reg = <0x060000 0x1fa0000>;
compatible = "denx,uimage";
};
};

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus_rt-ac59u.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "asus,rt-ac59u", "qca,qcn5500", "qca,qca9560";
model = "ASUS RT-AC59U";
};
&mtdparts {
partition@60000 {
label = "firmware";
reg = <0x060000 0xfa0000>;
compatible = "denx,uimage";
};
};

View File

@ -0,0 +1,69 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
aliases {
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
wps {
label = "wps";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
led_power: power {
label = "blue:power";
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
usb {
label = "blue:usb";
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
trigger-sources = <&hub_port0>;
linux,default-trigger = "usbport";
};
wlan2g {
label = "blue:wlan2g";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};
wlan5g {
label = "blue:wlan5g";
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};
};
};
&usb_phy0 {
status = "okay";
};
&usb0 {
status = "okay";
};

View File

@ -0,0 +1,57 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
aliases {
led-boot = &led_blue;
led-failsafe = &led_red;
led-running = &led_blue;
led-upgrade = &led_red;
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
wps {
label = "wps";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
led_blue: blue {
label = "blue";
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
};
green {
label = "green";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
led_red: red {
label = "red";
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
};
white {
label = "white";
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
};
};

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus_zenwifi-cd6.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "asus,zenwifi-cd6n", "qca,qcn5500", "qca,qca9560";
model = "ASUS ZenWiFi CD6N";
};
&mtdparts {
partition@60000 {
label = "firmware";
reg = <0x060000 0xfa0000>;
compatible = "denx,uimage";
};
};

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qcn5502_asus_zenwifi-cd6.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "asus,zenwifi-cd6r", "qca,qcn5500", "qca,qca9560";
model = "ASUS ZenWiFi CD6R";
};
&mtdparts {
partition@60000 {
label = "firmware";
reg = <0x060000 0x1fa0000>;
compatible = "denx,uimage";
};
};

View File

@ -152,6 +152,14 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0@eth0" "1:lan:1" "2:lan:2" "3:lan:3" "6:lan:4" "0@eth0" "1:lan:1" "2:lan:2" "3:lan:3" "6:lan:4"
;; ;;
asus,zenwifi-cd6n)
ucidef_add_switch "switch0" \
"0@eth0" "1:lan:1" "4:lan:2"
;;
asus,zenwifi-cd6r)
ucidef_add_switch "switch0" \
"0@eth0" "1:lan:2" "3:lan:1" "4:lan:3" "2:wan"
;;
atheros,db120) atheros,db120)
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0@eth0" "2:lan" "3:lan" "4:lan" "5:lan" "1:wan" "0@eth0" "2:lan" "3:lan" "4:lan" "5:lan" "1:wan"
@ -381,6 +389,8 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0@eth1" "1:lan" "0@eth1" "1:lan"
;; ;;
asus,rt-ac59u|\
asus,rt-ac59u-v2|\
mercury,mw4530r-v1|\ mercury,mw4530r-v1|\
tplink,archer-a7-v5|\ tplink,archer-a7-v5|\
tplink,archer-a9-v6|\ tplink,archer-a9-v6|\

View File

@ -483,6 +483,70 @@ define Device/asus_rp-ac66
endef endef
TARGET_DEVICES += asus_rp-ac66 TARGET_DEVICES += asus_rp-ac66
define Device/asus_qcn5502
SOC := qcn5502
DEVICE_VENDOR := ASUS
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9888-ct
KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none
IMAGES += factory.bin
IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | \
append-rootfs | pad-rootfs
endef
define Device/asus_rt-ac59u
$(Device/asus_qcn5502)
DEVICE_MODEL := RT-AC59U
DEVICE_ALT0_VENDOR := ASUS
DEVICE_ALT0_MODEL := RT-AC1200GE
DEVICE_ALT1_VENDOR := ASUS
DEVICE_ALT1_MODEL := RT-AC1500G PLUS
DEVICE_ALT2_VENDOR := ASUS
DEVICE_ALT2_MODEL := RT-AC1500UHP
DEVICE_ALT3_VENDOR := ASUS
DEVICE_ALT3_MODEL := RT-AC57U
DEVICE_ALT3_VARIANT := v2
DEVICE_ALT4_VENDOR := ASUS
DEVICE_ALT4_MODEL := RT-AC58U
DEVICE_ALT4_VARIANT := v2
DEVICE_ALT5_VENDOR := ASUS
DEVICE_ALT5_MODEL := RT-ACRH12
IMAGE_SIZE := 16000k
DEVICE_PACKAGES += kmod-usb2 kmod-usb-ledtrig-usbport
endef
TARGET_DEVICES += asus_rt-ac59u
define Device/asus_rt-ac59u-v2
$(Device/asus_qcn5502)
DEVICE_MODEL := RT-AC59U
DEVICE_VARIANT := v2
DEVICE_ALT0_VENDOR := ASUS
DEVICE_ALT0_MODEL := RT-AC1300G PLUS
DEVICE_ALT0_VARIANT := v3
DEVICE_ALT1_VENDOR := ASUS
DEVICE_ALT1_MODEL := RT-AC57U
DEVICE_ALT1_VARIANT := v3
DEVICE_ALT2_VENDOR := ASUS
DEVICE_ALT2_MODEL := RT-AC58U
DEVICE_ALT2_VARIANT := v3
IMAGE_SIZE := 32384k
DEVICE_PACKAGES += kmod-usb2 kmod-usb-ledtrig-usbport
endef
TARGET_DEVICES += asus_rt-ac59u-v2
define Device/asus_zenwifi-cd6n
$(Device/asus_qcn5502)
DEVICE_MODEL := ZenWiFi CD6N
IMAGE_SIZE := 16000k
endef
TARGET_DEVICES += asus_zenwifi-cd6n
define Device/asus_zenwifi-cd6r
$(Device/asus_qcn5502)
DEVICE_MODEL := ZenWiFi CD6R
IMAGE_SIZE := 32384k
endef
TARGET_DEVICES += asus_zenwifi-cd6r
define Device/atheros_db120 define Device/atheros_db120
$(Device/loader-okli-uimage) $(Device/loader-okli-uimage)
SOC := ar9344 SOC := ar9344

View File

@ -57,7 +57,6 @@ CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_CPUFREQ=y CONFIG_CPU_SUPPORTS_CPUFREQ=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CRASH_CORE=y CONFIG_CRASH_CORE=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2 CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG2=y

View File

@ -1086,7 +1086,6 @@ CONFIG_CRYPTO_ALGAPI2=y
# CONFIG_CRYPTO_AUTHENC is not set # CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_BLAKE2B is not set # CONFIG_CRYPTO_BLAKE2B is not set
# CONFIG_CRYPTO_BLAKE2B_NEON is not set # CONFIG_CRYPTO_BLAKE2B_NEON is not set
# CONFIG_CRYPTO_BLAKE2S is not set
# CONFIG_CRYPTO_BLAKE2S_ARM is not set # CONFIG_CRYPTO_BLAKE2S_ARM is not set
# CONFIG_CRYPTO_BLAKE2S_X86 is not set # CONFIG_CRYPTO_BLAKE2S_X86 is not set
# CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_BLOWFISH is not set

View File

@ -1144,7 +1144,6 @@ CONFIG_CRYPTO_ALGAPI2=y
# CONFIG_CRYPTO_AUTHENC is not set # CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_BLAKE2B is not set # CONFIG_CRYPTO_BLAKE2B is not set
# CONFIG_CRYPTO_BLAKE2B_NEON is not set # CONFIG_CRYPTO_BLAKE2B_NEON is not set
# CONFIG_CRYPTO_BLAKE2S is not set
# CONFIG_CRYPTO_BLAKE2S_ARM is not set # CONFIG_CRYPTO_BLAKE2S_ARM is not set
# CONFIG_CRYPTO_BLAKE2S_X86 is not set # CONFIG_CRYPTO_BLAKE2S_X86 is not set
# CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_BLOWFISH is not set
@ -3150,6 +3149,7 @@ CONFIG_KERNFS=y
# CONFIG_KEYBOARD_MAX7359 is not set # CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set # CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set # CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_MT6779 is not set
# CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OMAP4 is not set # CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_OPENCORES is not set # CONFIG_KEYBOARD_OPENCORES is not set
@ -6317,6 +6317,7 @@ CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
# CONFIG_SND_SOC_MT6797 is not set # CONFIG_SND_SOC_MT6797 is not set
# CONFIG_SND_SOC_MT8173 is not set # CONFIG_SND_SOC_MT8173 is not set
# CONFIG_SND_SOC_MT8183 is not set # CONFIG_SND_SOC_MT8183 is not set
# CONFIG_SND_SOC_MT8186 is not set
# CONFIG_SND_SOC_MT8192 is not set # CONFIG_SND_SOC_MT8192 is not set
# CONFIG_SND_SOC_MT8195 is not set # CONFIG_SND_SOC_MT8195 is not set
# CONFIG_SND_SOC_MTK_BTCVSD is not set # CONFIG_SND_SOC_MTK_BTCVSD is not set

View File

@ -37,7 +37,6 @@ CONFIG_CPU_R4K_CACHE_TLB=y
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CPU_SUPPORTS_MSA=y CONFIG_CPU_SUPPORTS_MSA=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2 CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG2=y

View File

@ -3,8 +3,8 @@
# Copyright 2020 NXP # Copyright 2020 NXP
# #
RAMFS_COPY_BIN="/usr/sbin/fw_printenv /usr/sbin/fw_setenv /usr/sbin/ubinfo /bin/echo" RAMFS_COPY_BIN=""
RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock" RAMFS_COPY_DATA=""
REQUIRE_IMAGE_METADATA=1 REQUIRE_IMAGE_METADATA=1

View File

@ -57,7 +57,6 @@ CONFIG_CPU_RMAP=y
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y

View File

@ -58,7 +58,6 @@ CONFIG_CPU_RMAP=y
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y

View File

@ -156,6 +156,7 @@
mdio { mdio {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
mediatek,pio = <&pio>;
gsw_phy0: ethernet-phy@0 { gsw_phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id03a2.9481"; compatible = "ethernet-phy-id03a2.9481";

View File

@ -215,7 +215,7 @@
}; };
pio: pinctrl@1001f000 { pio: pinctrl@1001f000 {
compatible = "mediatek,mt7988-pinctrl"; compatible = "mediatek,mt7988-pinctrl", "syscon";
reg = <0 0x1001f000 0 0x1000>, reg = <0 0x1001f000 0 0x1000>,
<0 0x11c10000 0 0x1000>, <0 0x11c10000 0 0x1000>,
<0 0x11d00000 0 0x1000>, <0 0x11d00000 0 0x1000>,
@ -303,11 +303,6 @@
}; };
}; };
boottrap: boottrap@1001f6f0 {
compatible = "mediatek,boottrap";
reg = <0 0x1001f6f0 0 0x4>;
};
sgmiisys0: syscon@10060000 { sgmiisys0: syscon@10060000 {
compatible = "mediatek,mt7988-sgmiisys", compatible = "mediatek,mt7988-sgmiisys",
"mediatek,mt7988-sgmiisys_0", "mediatek,mt7988-sgmiisys_0",

View File

@ -156,6 +156,7 @@
mdio { mdio {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
mediatek,pio = <&pio>;
gsw_phy0: ethernet-phy@0 { gsw_phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id03a2.9481"; compatible = "ethernet-phy-id03a2.9481";

View File

@ -215,7 +215,7 @@
}; };
pio: pinctrl@1001f000 { pio: pinctrl@1001f000 {
compatible = "mediatek,mt7988-pinctrl"; compatible = "mediatek,mt7988-pinctrl", "syscon";
reg = <0 0x1001f000 0 0x1000>, reg = <0 0x1001f000 0 0x1000>,
<0 0x11c10000 0 0x1000>, <0 0x11c10000 0 0x1000>,
<0 0x11d00000 0 0x1000>, <0 0x11d00000 0 0x1000>,
@ -303,11 +303,6 @@
}; };
}; };
boottrap: boottrap@1001f6f0 {
compatible = "mediatek,boottrap";
reg = <0 0x1001f6f0 0 0x4>;
};
sgmiisys0: syscon@10060000 { sgmiisys0: syscon@10060000 {
compatible = "mediatek,mt7988-sgmiisys", compatible = "mediatek,mt7988-sgmiisys",
"mediatek,mt7988-sgmiisys_0", "mediatek,mt7988-sgmiisys_0",

View File

@ -111,7 +111,6 @@ CONFIG_CRYPTO_AES_ARM64=y
CONFIG_CRYPTO_AES_ARM64_CE=y CONFIG_CRYPTO_AES_ARM64_CE=y
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CMAC=y CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y

View File

@ -1,82 +0,0 @@
From 60ed9eb9605656c19ca402b7bd3f47552e901601 Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Mon, 13 Feb 2023 02:33:14 +0000
Subject: [PATCH] net: phy: add driver for MediaTek SoC built-in GE PHYs
Some of MediaTek's Filogic SoCs come with built-in gigabit Ethernet
PHYs which require calibration data from the SoC's efuse.
Despite the similar design the driver doesn't share any code with the
existing mediatek-ge.c, so add support for these PHYs by introducing a
new driver for only MediaTek's ARM64 SoCs.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
MAINTAINERS | 9 +
drivers/net/phy/Kconfig | 12 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/mediatek-ge-soc.c | 1263 +++++++++++++++++++++++++++++
drivers/net/phy/mediatek-ge.c | 3 +-
5 files changed, 1287 insertions(+), 1 deletion(-)
create mode 100644 drivers/net/phy/mediatek-ge-soc.c
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11790,6 +11790,15 @@ S: Maintained
F: drivers/net/pcs/pcs-mtk-lynxi.c
F: include/linux/pcs/pcs-mtk-lynxi.h
+MEDIATEK ETHERNET PHY DRIVERS
+M: Daniel Golle <daniel@makrotopia.org>
+M: Qingfang Deng <dqfext@gmail.com>
+M: SkyLake Huang <SkyLake.Huang@mediatek.com>
+L: netdev@vger.kernel.org
+S: Maintained
+F: drivers/net/phy/mediatek-ge-soc.c
+F: drivers/net/phy/mediatek-ge.c
+
MEDIATEK I2C CONTROLLER DRIVER
M: Qii Wang <qii.wang@mediatek.com>
L: linux-i2c@vger.kernel.org
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -293,6 +293,18 @@ config MEDIATEK_GE_PHY
help
Supports the MediaTek Gigabit Ethernet PHYs.
+config MEDIATEK_GE_SOC_PHY
+ tristate "MediaTek SoC Ethernet PHYs"
+ depends on (ARM64 && ARCH_MEDIATEK) || COMPILE_TEST
+ select NVMEM_MTK_EFUSE
+ help
+ Supports MediaTek SoC built-in Gigabit Ethernet PHYs.
+
+ Include support for built-in Ethernet PHYs which are present in
+ the MT7981 and MT7988 SoCs. These PHYs need calibration data
+ present in the SoCs efuse and will dynamically calibrate VCM
+ (common-mode voltage) during startup.
+
config MICREL_PHY
tristate "Micrel PHYs"
help
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -81,6 +81,7 @@ obj-$(CONFIG_MARVELL_PHY) += marvell.o
obj-$(CONFIG_MARVELL_88X2222_PHY) += marvell-88x2222.o
obj-$(CONFIG_MAXLINEAR_GPHY) += mxl-gpy.o
obj-$(CONFIG_MEDIATEK_GE_PHY) += mediatek-ge.o
+obj-$(CONFIG_MEDIATEK_GE_SOC_PHY) += mediatek-ge-soc.o
obj-$(CONFIG_MESON_GXL_PHY) += meson-gxl.o
obj-$(CONFIG_MICREL_KS8995MA) += spi_ks8995.o
obj-$(CONFIG_MICREL_PHY) += micrel.o
--- a/drivers/net/phy/mediatek-ge.c
+++ b/drivers/net/phy/mediatek-ge.c
@@ -136,7 +136,8 @@ static struct phy_driver mtk_gephy_drive
module_phy_driver(mtk_gephy_driver);
static struct mdio_device_id __maybe_unused mtk_gephy_tbl[] = {
- { PHY_ID_MATCH_VENDOR(0x03a29400) },
+ { PHY_ID_MATCH_EXACT(0x03a29441) },
+ { PHY_ID_MATCH_EXACT(0x03a29412) },
{ }
};

View File

@ -1,166 +0,0 @@
--- a/drivers/net/phy/mxl-gpy.c
+++ b/drivers/net/phy/mxl-gpy.c
@@ -126,6 +126,12 @@ static int gpy_config_init(struct phy_de
if (ret < 0)
return ret;
+ /* Disable SGMII auto-negotiation */
+ ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
+ VSPEC1_SGMII_CTRL_ANEN, 0);
+ if (ret < 0)
+ return ret;
+
return gpy_led_write(phydev);
}
@@ -151,65 +157,6 @@ static int gpy_probe(struct phy_device *
return 0;
}
-static bool gpy_sgmii_need_reaneg(struct phy_device *phydev)
-{
- int fw_ver, fw_type, fw_minor;
- size_t i;
-
- fw_ver = phy_read(phydev, PHY_FWV);
- if (fw_ver < 0)
- return true;
-
- fw_type = FIELD_GET(PHY_FWV_TYPE_MASK, fw_ver);
- fw_minor = FIELD_GET(PHY_FWV_MINOR_MASK, fw_ver);
-
- for (i = 0; i < ARRAY_SIZE(ver_need_sgmii_reaneg); i++) {
- if (fw_type != ver_need_sgmii_reaneg[i].type)
- continue;
- if (fw_minor < ver_need_sgmii_reaneg[i].minor)
- return true;
- break;
- }
-
- return false;
-}
-
-static bool gpy_2500basex_chk(struct phy_device *phydev)
-{
- int ret;
-
- ret = phy_read(phydev, PHY_MIISTAT);
- if (ret < 0) {
- phydev_err(phydev, "Error: MDIO register access failed: %d\n",
- ret);
- return false;
- }
-
- if (!(ret & PHY_MIISTAT_LS) ||
- FIELD_GET(PHY_MIISTAT_SPD_MASK, ret) != PHY_MIISTAT_SPD_2500)
- return false;
-
- phydev->speed = SPEED_2500;
- phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
- phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
- VSPEC1_SGMII_CTRL_ANEN, 0);
- return true;
-}
-
-static bool gpy_sgmii_aneg_en(struct phy_device *phydev)
-{
- int ret;
-
- ret = phy_read_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL);
- if (ret < 0) {
- phydev_err(phydev, "Error: MMD register access failed: %d\n",
- ret);
- return true;
- }
-
- return (ret & VSPEC1_SGMII_CTRL_ANEN) ? true : false;
-}
-
static int gpy_config_aneg(struct phy_device *phydev)
{
bool changed = false;
@@ -248,53 +195,11 @@ static int gpy_config_aneg(struct phy_de
phydev->interface == PHY_INTERFACE_MODE_INTERNAL)
return 0;
- /* No need to trigger re-ANEG if link speed is 2.5G or SGMII ANEG is
- * disabled.
- */
- if (!gpy_sgmii_need_reaneg(phydev) || gpy_2500basex_chk(phydev) ||
- !gpy_sgmii_aneg_en(phydev))
- return 0;
-
- /* There is a design constraint in GPY2xx device where SGMII AN is
- * only triggered when there is change of speed. If, PHY link
- * partner`s speed is still same even after PHY TPI is down and up
- * again, SGMII AN is not triggered and hence no new in-band message
- * from GPY to MAC side SGMII.
- * This could cause an issue during power up, when PHY is up prior to
- * MAC. At this condition, once MAC side SGMII is up, MAC side SGMII
- * wouldn`t receive new in-band message from GPY with correct link
- * status, speed and duplex info.
- *
- * 1) If PHY is already up and TPI link status is still down (such as
- * hard reboot), TPI link status is polled for 4 seconds before
- * retriggerring SGMII AN.
- * 2) If PHY is already up and TPI link status is also up (such as soft
- * reboot), polling of TPI link status is not needed and SGMII AN is
- * immediately retriggered.
- * 3) Other conditions such as PHY is down, speed change etc, skip
- * retriggering SGMII AN. Note: in case of speed change, GPY FW will
- * initiate SGMII AN.
- */
-
- if (phydev->state != PHY_UP)
- return 0;
-
- ret = phy_read_poll_timeout(phydev, MII_BMSR, ret, ret & BMSR_LSTATUS,
- 20000, 4000000, false);
- if (ret == -ETIMEDOUT)
- return 0;
- else if (ret < 0)
- return ret;
-
- /* Trigger SGMII AN. */
- return phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
- VSPEC1_SGMII_CTRL_ANRS, VSPEC1_SGMII_CTRL_ANRS);
+ return 0;
}
static void gpy_update_interface(struct phy_device *phydev)
{
- int ret;
-
/* Interface mode is fixed for USXGMII and integrated PHY */
if (phydev->interface == PHY_INTERFACE_MODE_USXGMII ||
phydev->interface == PHY_INTERFACE_MODE_INTERNAL)
@@ -306,29 +211,11 @@ static void gpy_update_interface(struct
switch (phydev->speed) {
case SPEED_2500:
phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
- ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
- VSPEC1_SGMII_CTRL_ANEN, 0);
- if (ret < 0)
- phydev_err(phydev,
- "Error: Disable of SGMII ANEG failed: %d\n",
- ret);
break;
case SPEED_1000:
case SPEED_100:
case SPEED_10:
phydev->interface = PHY_INTERFACE_MODE_SGMII;
- if (gpy_sgmii_aneg_en(phydev))
- break;
- /* Enable and restart SGMII ANEG for 10/100/1000Mbps link speed
- * if ANEG is disabled (in 2500-BaseX mode).
- */
- ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
- VSPEC1_SGMII_ANEN_ANRS,
- VSPEC1_SGMII_ANEN_ANRS);
- if (ret < 0)
- phydev_err(phydev,
- "Error: Enable of SGMII ANEG failed: %d\n",
- ret);
break;
}
}

View File

@ -0,0 +1,213 @@
From 5d2d78860f98eb5c03bc404eb024606878901ac8 Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Tue, 13 Jun 2023 03:27:14 +0100
Subject: [PATCH] net: phy: mediatek-ge-soc: initialize MT7988 PHY LEDs default
state
Initialize LEDs and set sane default values.
Read boottrap register and apply LED polarities accordingly to get
uniform behavior from all LEDs on MT7988.
Requires syscon phandle 'mediatek,pio' present in parenting MDIO bus
which should point to the syscon holding the boottrap register.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
drivers/net/phy/mediatek-ge-soc.c | 144 ++++++++++++++++++++++++++++--
1 file changed, 136 insertions(+), 8 deletions(-)
--- a/drivers/net/phy/mediatek-ge-soc.c
+++ b/drivers/net/phy/mediatek-ge-soc.c
@@ -1,11 +1,13 @@
// SPDX-License-Identifier: GPL-2.0+
#include <linux/bitfield.h>
+#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/nvmem-consumer.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/pinctrl/consumer.h>
#include <linux/phy.h>
+#include <linux/regmap.h>
#define MTK_GPHY_ID_MT7981 0x03a29461
#define MTK_GPHY_ID_MT7988 0x03a29481
@@ -208,9 +210,40 @@
#define MTK_PHY_DA_TX_R50_PAIR_C 0x53f
#define MTK_PHY_DA_TX_R50_PAIR_D 0x540
+/* Registers on MDIO_MMD_VEND2 */
+#define MTK_PHY_LED0_ON_CTRL 0x24
+#define MTK_PHY_LED1_ON_CTRL 0x26
+#define MTK_PHY_LED_ON_MASK GENMASK(6, 0)
+#define MTK_PHY_LED_ON_LINK1000 BIT(0)
+#define MTK_PHY_LED_ON_LINK100 BIT(1)
+#define MTK_PHY_LED_ON_LINK10 BIT(2)
+#define MTK_PHY_LED_ON_LINKDOWN BIT(3)
+#define MTK_PHY_LED_ON_FDX BIT(4) /* Full duplex */
+#define MTK_PHY_LED_ON_HDX BIT(5) /* Half duplex */
+#define MTK_PHY_LED_FORCE_ON BIT(6)
+#define MTK_PHY_LED_POLARITY BIT(14)
+#define MTK_PHY_LED_ENABLE BIT(15)
+
+#define MTK_PHY_LED0_BLINK_CTRL 0x25
+#define MTK_PHY_LED1_BLINK_CTRL 0x27
+#define MTK_PHY_LED_1000TX BIT(0)
+#define MTK_PHY_LED_1000RX BIT(1)
+#define MTK_PHY_LED_100TX BIT(2)
+#define MTK_PHY_LED_100RX BIT(3)
+#define MTK_PHY_LED_10TX BIT(4)
+#define MTK_PHY_LED_10RX BIT(5)
+#define MTK_PHY_LED_COLLISION BIT(6)
+#define MTK_PHY_LED_RX_CRC_ERR BIT(7)
+#define MTK_PHY_LED_RX_IDLE_ERR BIT(8)
+#define MTK_PHY_LED_FORCE_BLINK BIT(9)
+
#define MTK_PHY_RG_BG_RASEL 0x115
#define MTK_PHY_RG_BG_RASEL_MASK GENMASK(2, 0)
+/* Register in boottrap syscon defining the initial state of the 4 PHY LEDs */
+#define RG_GPIO_MISC_TPBANK0 0x6f0
+#define RG_GPIO_MISC_TPBANK0_BOOTMODE GENMASK(11, 8)
+
/* These macro privides efuse parsing for internal phy. */
#define EFS_DA_TX_I2MPB_A(x) (((x) >> 0) & GENMASK(5, 0))
#define EFS_DA_TX_I2MPB_B(x) (((x) >> 6) & GENMASK(5, 0))
@@ -238,13 +271,6 @@ enum {
PAIR_D,
};
-enum {
- GPHY_PORT0,
- GPHY_PORT1,
- GPHY_PORT2,
- GPHY_PORT3,
-};
-
enum calibration_mode {
EFUSE_K,
SW_K
@@ -263,6 +289,10 @@ enum CAL_MODE {
SW_M
};
+struct mtk_socphy_shared {
+ u32 boottrap;
+};
+
static int mtk_socphy_read_page(struct phy_device *phydev)
{
return __phy_read(phydev, MTK_EXT_PAGE_ACCESS);
@@ -1073,6 +1103,104 @@ static int mt798x_phy_config_init(struct
return mt798x_phy_calibration(phydev);
}
+static int mt798x_phy_setup_led(struct phy_device *phydev, bool inverted)
+{
+ struct pinctrl *pinctrl;
+ const u16 led_on_ctrl_defaults = MTK_PHY_LED_ENABLE |
+ MTK_PHY_LED_ON_LINK1000 |
+ MTK_PHY_LED_ON_LINK100 |
+ MTK_PHY_LED_ON_LINK10;
+ const u16 led_blink_defaults = MTK_PHY_LED_1000TX |
+ MTK_PHY_LED_1000RX |
+ MTK_PHY_LED_100TX |
+ MTK_PHY_LED_100RX |
+ MTK_PHY_LED_10TX |
+ MTK_PHY_LED_10RX;
+
+ phy_write_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED0_ON_CTRL,
+ led_on_ctrl_defaults ^
+ (inverted ? MTK_PHY_LED_POLARITY : 0));
+
+ phy_write_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED1_ON_CTRL,
+ led_on_ctrl_defaults);
+
+ phy_write_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED0_BLINK_CTRL,
+ led_blink_defaults);
+
+ phy_write_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED1_BLINK_CTRL,
+ led_blink_defaults);
+
+ pinctrl = devm_pinctrl_get_select(&phydev->mdio.dev, "gbe-led");
+ if (IS_ERR(pinctrl))
+ dev_err(&phydev->mdio.bus->dev, "Failed to setup PHY LED\n");
+
+ return 0;
+}
+
+static int mt7988_phy_probe_shared(struct phy_device *phydev)
+{
+ struct device_node *np = dev_of_node(&phydev->mdio.bus->dev);
+ struct mtk_socphy_shared *priv = phydev->shared->priv;
+ struct regmap *regmap;
+ u32 reg;
+ int ret;
+
+ /* The LED0 of the 4 PHYs in MT7988 are wired to SoC pins LED_A, LED_B,
+ * LED_C and LED_D respectively. At the same time those pins are used to
+ * bootstrap configuration of the reference clock source (LED_A),
+ * DRAM DDRx16b x2/x1 (LED_B) and boot device (LED_C, LED_D).
+ * In practise this is done using a LED and a resistor pulling the pin
+ * either to GND or to VIO.
+ * The detected value at boot time is accessible at run-time using the
+ * TPBANK0 register located in the gpio base of the pinctrl, in order
+ * to read it here it needs to be referenced by a phandle called
+ * 'mediatek,pio' in the MDIO bus hosting the PHY.
+ * The 4 bits in TPBANK0 are kept as package shared data and are used to
+ * set LED polarity for each of the LED0.
+ */
+ regmap = syscon_regmap_lookup_by_phandle(np, "mediatek,pio");
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ ret = regmap_read(regmap, RG_GPIO_MISC_TPBANK0, &reg);
+ if (ret)
+ return ret;
+
+ priv->boottrap = FIELD_GET(RG_GPIO_MISC_TPBANK0_BOOTMODE, reg);
+
+ return 0;
+}
+
+static bool mt7988_phy_get_boottrap_polarity(struct phy_device *phydev)
+{
+ struct mtk_socphy_shared *priv = phydev->shared->priv;
+
+ if (priv->boottrap & BIT(phydev->mdio.addr))
+ return false;
+
+ return true;
+}
+
+static int mt7988_phy_probe(struct phy_device *phydev)
+{
+ int err;
+
+ err = devm_phy_package_join(&phydev->mdio.dev, phydev, 0,
+ sizeof(struct mtk_socphy_shared));
+ if (err)
+ return err;
+
+ if (phy_package_probe_once(phydev)) {
+ err = mt7988_phy_probe_shared(phydev);
+ if (err)
+ return err;
+ }
+
+ mt798x_phy_setup_led(phydev, mt7988_phy_get_boottrap_polarity(phydev));
+
+ return mt798x_phy_calibration(phydev);
+}
+
static struct phy_driver mtk_socphy_driver[] = {
{
PHY_ID_MATCH_EXACT(MTK_GPHY_ID_MT7981),
@@ -1092,7 +1220,7 @@ static struct phy_driver mtk_socphy_driv
.config_init = mt798x_phy_config_init,
.config_intr = genphy_no_config_intr,
.handle_interrupt = genphy_handle_interrupt_no_ack,
- .probe = mt798x_phy_calibration,
+ .probe = mt7988_phy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.read_page = mtk_socphy_read_page,

View File

@ -0,0 +1,63 @@
From a969b663c866129ed9eb217785a6574fbe826f1d Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Thu, 6 Apr 2023 23:36:50 +0100
Subject: [PATCH] net: phy: mxl-gpy: don't use SGMII AN if using phylink
MAC drivers using phylink expect SGMII in-band-status to be switched off
when attached to a PHY. Make sure this is the case also for mxl-gpy which
keeps SGMII in-band-status in case of SGMII interface mode is used.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
drivers/net/phy/mxl-gpy.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
--- a/drivers/net/phy/mxl-gpy.c
+++ b/drivers/net/phy/mxl-gpy.c
@@ -191,8 +191,11 @@ static bool gpy_2500basex_chk(struct phy
phydev->speed = SPEED_2500;
phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
- phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
- VSPEC1_SGMII_CTRL_ANEN, 0);
+
+ if (!phydev->phylink)
+ phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
+ VSPEC1_SGMII_CTRL_ANEN, 0);
+
return true;
}
@@ -216,6 +219,14 @@ static int gpy_config_aneg(struct phy_de
u32 adv;
int ret;
+ /* Disable SGMII auto-negotiation if using phylink */
+ if (phydev->phylink) {
+ ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
+ VSPEC1_SGMII_CTRL_ANEN, 0);
+ if (ret < 0)
+ return ret;
+ }
+
if (phydev->autoneg == AUTONEG_DISABLE) {
/* Configure half duplex with genphy_setup_forced,
* because genphy_c45_pma_setup_forced does not support.
@@ -306,6 +317,8 @@ static void gpy_update_interface(struct
switch (phydev->speed) {
case SPEED_2500:
phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
+ if (phydev->phylink)
+ break;
ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
VSPEC1_SGMII_CTRL_ANEN, 0);
if (ret < 0)
@@ -317,7 +330,7 @@ static void gpy_update_interface(struct
case SPEED_100:
case SPEED_10:
phydev->interface = PHY_INTERFACE_MODE_SGMII;
- if (gpy_sgmii_aneg_en(phydev))
+ if (phydev->phylink || gpy_sgmii_aneg_en(phydev))
break;
/* Enable and restart SGMII ANEG for 10/100/1000Mbps link speed
* if ANEG is disabled (in 2500-BaseX mode).

View File

@ -44,7 +44,6 @@ CONFIG_CPU_SUPPORTS_HIGHMEM=y
CONFIG_CPU_SUPPORTS_HUGEPAGES=y CONFIG_CPU_SUPPORTS_HUGEPAGES=y
CONFIG_CRAMFS=y CONFIG_CRAMFS=y
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y

View File

@ -33,7 +33,6 @@ CONFIG_CRYPTO_AES_ARM64=y
CONFIG_CRYPTO_AES_ARM64_CE=y CONFIG_CRYPTO_AES_ARM64_CE=y
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=y CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=y
CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_GHASH_ARM64_CE=y CONFIG_CRYPTO_GHASH_ARM64_CE=y

View File

@ -20,7 +20,6 @@ CONFIG_CPU_SUP_HYGON=y
CONFIG_CPU_SUP_INTEL=y CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_ZHAOXIN=y CONFIG_CPU_SUP_ZHAOXIN=y
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y

View File

@ -61,7 +61,6 @@ CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
# CONFIG_CPU_IDLE_GOV_HALTPOLL is not set # CONFIG_CPU_IDLE_GOV_HALTPOLL is not set
CONFIG_CPU_IDLE_GOV_MENU=y CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_RMAP=y CONFIG_CPU_RMAP=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CS89x0_ISA is not set # CONFIG_CS89x0_ISA is not set
# CONFIG_DEBUG_HOTPLUG_CPU0 is not set # CONFIG_DEBUG_HOTPLUG_CPU0 is not set

View File

@ -37,7 +37,6 @@ CONFIG_ALIX=y
# CONFIG_AMD_PMC is not set # CONFIG_AMD_PMC is not set
CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
# CONFIG_ATA_PIIX is not set # CONFIG_ATA_PIIX is not set
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
CONFIG_CS5535_CLOCK_EVENT_SRC=y CONFIG_CS5535_CLOCK_EVENT_SRC=y
CONFIG_CS5535_MFGPT=y CONFIG_CS5535_MFGPT=y

View File

@ -45,7 +45,6 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
CONFIG_CDROM=y CONFIG_CDROM=y
CONFIG_CPU_IDLE_GOV_MENU=y CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CRYPTO_BLAKE2S=y
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CS89x0_ISA is not set # CONFIG_CS89x0_ISA is not set
CONFIG_DMA_ACPI=y CONFIG_DMA_ACPI=y