Merge branch 'openwrt:master' into master
This commit is contained in:
commit
b79f8ddb6c
141 changed files with 13362 additions and 231 deletions
|
@ -36,9 +36,15 @@ define Trusted-Firmware-A/sunxi-h6
|
||||||
PLAT:=sun50i_h6
|
PLAT:=sun50i_h6
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Trusted-Firmware-A/sunxi-h616
|
||||||
|
NAME:=Allwinner H616
|
||||||
|
PLAT:=sun50i_h616
|
||||||
|
endef
|
||||||
|
|
||||||
TFA_TARGETS:= \
|
TFA_TARGETS:= \
|
||||||
sunxi-a64 \
|
sunxi-a64 \
|
||||||
sunxi-h6
|
sunxi-h6 \
|
||||||
|
sunxi-h616
|
||||||
|
|
||||||
define Package/trusted-firmware-a/install
|
define Package/trusted-firmware-a/install
|
||||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
From 8621f6d22a9589651c6f25742294dd19a26db430 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Thu, 3 Aug 2023 13:34:13 +0200
|
||||||
|
Subject: [PATCH 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate
|
||||||
|
function
|
||||||
|
|
||||||
|
Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
|
||||||
|
which makes it hard to add support for any other board to be fixed up.
|
||||||
|
|
||||||
|
So, lets just move the FDT fixup code to a separate function and call it
|
||||||
|
if compatible matches, there should be no functional change.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
|
||||||
|
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
+++ b/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
@@ -359,18 +359,14 @@ int last_stage_init(void)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF_BOARD_SETUP
|
||||||
|
-int ft_board_setup(void *blob, struct bd_info *bd)
|
||||||
|
+static int espressobin_fdt_setup(void *blob)
|
||||||
|
{
|
||||||
|
-#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||||
|
int ret;
|
||||||
|
int spi_off;
|
||||||
|
int parts_off;
|
||||||
|
int part_off;
|
||||||
|
|
||||||
|
/* Fill SPI MTD partitions for Linux kernel on Espressobin */
|
||||||
|
- if (!of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
|
||||||
|
if (spi_off < 0)
|
||||||
|
return 0;
|
||||||
|
@@ -455,6 +451,14 @@ int ft_board_setup(void *blob, struct bd
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int ft_board_setup(void *blob, struct bd_info *bd)
|
||||||
|
+{
|
||||||
|
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||||
|
+ if (of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
+ return espressobin_fdt_setup(blob);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
From 3f8c18894a50fd45b81a807f217893f289500bc6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Thu, 3 Aug 2023 14:24:31 +0200
|
||||||
|
Subject: [PATCH 2/3] arm: mvebu: Espressobin: move network setup into a
|
||||||
|
separate function
|
||||||
|
|
||||||
|
Currently, Esspresobin switch is being setup directly in last_stage_init()
|
||||||
|
which makes it hard to add support for any other board to be setup.
|
||||||
|
|
||||||
|
So, lets just move the switch setup code to a separate function and call it
|
||||||
|
if compatible matches, there should be no functional change.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
board/Marvell/mvebu_armada-37xx/board.c | 16 +++++++++++-----
|
||||||
|
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
+++ b/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
@@ -300,15 +300,11 @@ static int mii_multi_chip_mode_write(str
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* Bring-up board-specific network stuff */
|
||||||
|
-int last_stage_init(void)
|
||||||
|
+static int espressobin_last_stage_init(void)
|
||||||
|
{
|
||||||
|
struct udevice *bus;
|
||||||
|
ofnode node;
|
||||||
|
|
||||||
|
- if (!of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
|
||||||
|
if (!ofnode_valid(node) ||
|
||||||
|
uclass_get_device_by_ofnode(UCLASS_MDIO, node, &bus) ||
|
||||||
|
@@ -356,6 +352,16 @@ int last_stage_init(void)
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/* Bring-up board-specific network stuff */
|
||||||
|
+int last_stage_init(void)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ if (of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
+ return espressobin_last_stage_init();
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF_BOARD_SETUP
|
|
@ -0,0 +1,297 @@
|
||||||
|
From 83c00ee665b8dde813458b2b07cf97ce8409248d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Fri, 4 Aug 2023 22:39:06 +0200
|
||||||
|
Subject: [PATCH 3/3] arm: mvebu: eDPU: support new board revision
|
||||||
|
|
||||||
|
There is a new eDPU revision that uses Marvell 88E6361 switch onboard.
|
||||||
|
We can rely on detecting the switch to enable and fixup the Linux DTS
|
||||||
|
so a single DTS can be used.
|
||||||
|
|
||||||
|
There is currently no support for the 88E6361 switch and thus no working
|
||||||
|
networking in U-Boot, so we disable both ports.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
arch/arm/dts/armada-3720-eDPU-u-boot.dtsi | 13 ++-
|
||||||
|
arch/arm/dts/armada-3720-eDPU.dts | 47 ++++++++
|
||||||
|
board/Marvell/mvebu_armada-37xx/board.c | 125 ++++++++++++++++++++++
|
||||||
|
configs/eDPU_defconfig | 2 +
|
||||||
|
4 files changed, 182 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
|
||||||
|
+++ b/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
|
||||||
|
@@ -32,14 +32,17 @@
|
||||||
|
bootph-all;
|
||||||
|
};
|
||||||
|
|
||||||
|
-ð0 {
|
||||||
|
- /* G.hn does not work without additional configuration */
|
||||||
|
- status = "disabled";
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
ð1 {
|
||||||
|
fixed-link {
|
||||||
|
speed = <1000>;
|
||||||
|
full-duplex;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * eDPU v2 has a MV88E6361 switch on the MDIO bus and U-boot is used
|
||||||
|
+ * to patch the Linux DTS if its found so enable MDIO by default.
|
||||||
|
+ */
|
||||||
|
+&mdio {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
--- a/arch/arm/dts/armada-3720-eDPU.dts
|
||||||
|
+++ b/arch/arm/dts/armada-3720-eDPU.dts
|
||||||
|
@@ -12,3 +12,50 @@
|
||||||
|
ð0 {
|
||||||
|
phy-mode = "2500base-x";
|
||||||
|
};
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * External MV88E6361 switch is only available on v2 of the board.
|
||||||
|
+ * U-Boot will enable the MDIO bus and switch nodes.
|
||||||
|
+ */
|
||||||
|
+&mdio {
|
||||||
|
+ status = "disabled";
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&smi_pins>;
|
||||||
|
+
|
||||||
|
+ /* Actual device is MV88E6361 */
|
||||||
|
+ switch: switch@0 {
|
||||||
|
+ compatible = "marvell,mv88e6190";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <0>;
|
||||||
|
+ reg = <0>;
|
||||||
|
+ status = "disabled";
|
||||||
|
+
|
||||||
|
+ ports {
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <0>;
|
||||||
|
+
|
||||||
|
+ port@0 {
|
||||||
|
+ reg = <0>;
|
||||||
|
+ label = "cpu";
|
||||||
|
+ phy-mode = "2500base-x";
|
||||||
|
+ managed = "in-band-status";
|
||||||
|
+ ethernet = <ð0>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ port@9 {
|
||||||
|
+ reg = <9>;
|
||||||
|
+ label = "downlink";
|
||||||
|
+ phy-mode = "2500base-x";
|
||||||
|
+ managed = "in-band-status";
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ port@a {
|
||||||
|
+ reg = <10>;
|
||||||
|
+ label = "uplink";
|
||||||
|
+ phy-mode = "2500base-x";
|
||||||
|
+ managed = "in-band-status";
|
||||||
|
+ sfp = <&sfp_eth1>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
--- a/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
+++ b/board/Marvell/mvebu_armada-37xx/board.c
|
||||||
|
@@ -13,6 +13,7 @@
|
||||||
|
#include <mmc.h>
|
||||||
|
#include <miiphy.h>
|
||||||
|
#include <phy.h>
|
||||||
|
+#include <fdt_support.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/cpu.h>
|
||||||
|
@@ -49,6 +50,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
/* Single-chip mode */
|
||||||
|
/* Switch Port Registers */
|
||||||
|
#define MVEBU_SW_LINK_CTRL_REG (1)
|
||||||
|
+#define MVEBU_SW_PORT_SWITCH_ID (3)
|
||||||
|
#define MVEBU_SW_PORT_CTRL_REG (4)
|
||||||
|
#define MVEBU_SW_PORT_BASE_VLAN (6)
|
||||||
|
|
||||||
|
@@ -56,6 +58,8 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
#define MVEBU_G2_SMI_PHY_CMD_REG (24)
|
||||||
|
#define MVEBU_G2_SMI_PHY_DATA_REG (25)
|
||||||
|
|
||||||
|
+#define SWITCH_88E6361_PRODUCT_NUMBER 0x2610
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Memory Controller Registers
|
||||||
|
*
|
||||||
|
@@ -72,6 +76,27 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
#define A3700_MC_CTRL2_SDRAM_TYPE_DDR3 2
|
||||||
|
#define A3700_MC_CTRL2_SDRAM_TYPE_DDR4 3
|
||||||
|
|
||||||
|
+static bool is_edpu_plus(void)
|
||||||
|
+{
|
||||||
|
+ struct udevice *bus;
|
||||||
|
+ ofnode node;
|
||||||
|
+ int val;
|
||||||
|
+
|
||||||
|
+ node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
|
||||||
|
+ if (!ofnode_valid(node) ||
|
||||||
|
+ uclass_get_device_by_ofnode(UCLASS_MDIO, node, &bus) ||
|
||||||
|
+ device_probe(bus)) {
|
||||||
|
+ printf("Cannot find MDIO bus\n");
|
||||||
|
+ return -ENODEV;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ val = dm_mdio_read(bus, 0x0, MDIO_DEVAD_NONE, MVEBU_SW_PORT_SWITCH_ID);
|
||||||
|
+ if (val == SWITCH_88E6361_PRODUCT_NUMBER)
|
||||||
|
+ return true;
|
||||||
|
+ else
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
@@ -353,6 +378,41 @@ static int espressobin_last_stage_init(v
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int edpu_plus_last_stage_init(void)
|
||||||
|
+{
|
||||||
|
+ struct udevice *dev;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ if (is_edpu_plus()) {
|
||||||
|
+ ret = uclass_get_device_by_name(UCLASS_ETH,
|
||||||
|
+ "ethernet@40000",
|
||||||
|
+ &dev);
|
||||||
|
+ if (!ret) {
|
||||||
|
+ device_remove(dev, DM_REMOVE_NORMAL);
|
||||||
|
+ device_unbind(dev);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Currently no networking support on the eDPU+ board */
|
||||||
|
+ ret = uclass_get_device_by_name(UCLASS_ETH,
|
||||||
|
+ "ethernet@30000",
|
||||||
|
+ &dev);
|
||||||
|
+ if (!ret) {
|
||||||
|
+ device_remove(dev, DM_REMOVE_NORMAL);
|
||||||
|
+ device_unbind(dev);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ ret = uclass_get_device_by_name(UCLASS_ETH,
|
||||||
|
+ "ethernet@30000",
|
||||||
|
+ &dev);
|
||||||
|
+ if (!ret) {
|
||||||
|
+ device_remove(dev, DM_REMOVE_NORMAL);
|
||||||
|
+ device_unbind(dev);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Bring-up board-specific network stuff */
|
||||||
|
int last_stage_init(void)
|
||||||
|
{
|
||||||
|
@@ -360,6 +420,9 @@ int last_stage_init(void)
|
||||||
|
if (of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
return espressobin_last_stage_init();
|
||||||
|
|
||||||
|
+ if (of_machine_is_compatible("methode,edpu"))
|
||||||
|
+ return edpu_plus_last_stage_init();
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -460,12 +523,74 @@ static int espressobin_fdt_setup(void *b
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int edpu_plus_fdt_setup(void *blob)
|
||||||
|
+{
|
||||||
|
+ const char *ports[] = { "downlink", "uplink" };
|
||||||
|
+ uint8_t mac[ETH_ALEN];
|
||||||
|
+ const char *path;
|
||||||
|
+ int i, ret;
|
||||||
|
+
|
||||||
|
+ if (is_edpu_plus()) {
|
||||||
|
+ ret = fdt_set_status_by_compatible(blob,
|
||||||
|
+ "marvell,orion-mdio",
|
||||||
|
+ FDT_STATUS_OKAY);
|
||||||
|
+ if (ret)
|
||||||
|
+ printf("Failed to enable MDIO!\n");
|
||||||
|
+
|
||||||
|
+ ret = fdt_set_status_by_alias(blob,
|
||||||
|
+ "ethernet1",
|
||||||
|
+ FDT_STATUS_DISABLED);
|
||||||
|
+ if (ret)
|
||||||
|
+ printf("Failed to disable ethernet1!\n");
|
||||||
|
+
|
||||||
|
+ path = fdt_get_alias(blob, "ethernet0");
|
||||||
|
+ if (path)
|
||||||
|
+ do_fixup_by_path_string(blob, path, "phy-mode", "2500base-x");
|
||||||
|
+ else
|
||||||
|
+ printf("Failed to update ethernet0 phy-mode to 2500base-x!\n");
|
||||||
|
+
|
||||||
|
+ ret = fdt_set_status_by_compatible(blob,
|
||||||
|
+ "marvell,mv88e6190",
|
||||||
|
+ FDT_STATUS_OKAY);
|
||||||
|
+ if (ret)
|
||||||
|
+ printf("Failed to enable MV88E6361!\n");
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * MAC-s for Uplink and Downlink ports are stored under
|
||||||
|
+ * non standard variable names, so lets manually fixup the
|
||||||
|
+ * switch port nodes to have the desired MAC-s.
|
||||||
|
+ */
|
||||||
|
+ for (i = 0; i < 2; i++) {
|
||||||
|
+ if (eth_env_get_enetaddr(ports[i], mac)) {
|
||||||
|
+ do_fixup_by_prop(blob,
|
||||||
|
+ "label",
|
||||||
|
+ ports[i],
|
||||||
|
+ strlen(ports[i]) + 1,
|
||||||
|
+ "mac-address",
|
||||||
|
+ mac, ARP_HLEN, 1);
|
||||||
|
+
|
||||||
|
+ do_fixup_by_prop(blob,
|
||||||
|
+ "label",
|
||||||
|
+ ports[i],
|
||||||
|
+ strlen(ports[i]) + 1,
|
||||||
|
+ "local-mac-address",
|
||||||
|
+ mac, ARP_HLEN, 1);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||||
|
if (of_machine_is_compatible("globalscale,espressobin"))
|
||||||
|
return espressobin_fdt_setup(blob);
|
||||||
|
#endif
|
||||||
|
+ if (of_machine_is_compatible("methode,edpu"))
|
||||||
|
+ return edpu_plus_fdt_setup(blob);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
--- a/configs/eDPU_defconfig
|
||||||
|
+++ b/configs/eDPU_defconfig
|
||||||
|
@@ -17,12 +17,14 @@ CONFIG_DEBUG_UART=y
|
||||||
|
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_FIT_VERBOSE=y
|
||||||
|
+CONFIG_OF_BOARD_SETUP=y
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_USE_PREBOOT=y
|
||||||
|
# CONFIG_DISPLAY_CPUINFO is not set
|
||||||
|
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
+CONFIG_LAST_STAGE_INIT=y
|
||||||
|
CONFIG_SYS_MAXARGS=32
|
||||||
|
CONFIG_SYS_PBSIZE=1048
|
||||||
|
# CONFIG_CMD_ELF is not set
|
|
@ -328,6 +328,15 @@ define U-Boot/orangepi_pc2
|
||||||
ATF:=a64
|
ATF:=a64
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define U-Boot/orangepi_zero2
|
||||||
|
BUILD_SUBTARGET:=cortexa53
|
||||||
|
NAME:=Xunlong Orange Pi Zero2
|
||||||
|
BUILD_DEVICES:=xunlong_orangepi-zero2
|
||||||
|
DEPENDS:=+PACKAGE_u-boot-orangepi_zero2:trusted-firmware-a-sunxi-h616
|
||||||
|
UENV:=h616
|
||||||
|
ATF:=h616
|
||||||
|
endef
|
||||||
|
|
||||||
define U-Boot/Bananapi_M2_Ultra
|
define U-Boot/Bananapi_M2_Ultra
|
||||||
BUILD_SUBTARGET:=cortexa7
|
BUILD_SUBTARGET:=cortexa7
|
||||||
NAME:=Bananapi M2 Ultra
|
NAME:=Bananapi M2 Ultra
|
||||||
|
@ -340,6 +349,13 @@ define U-Boot/bananapi_m2_berry
|
||||||
BUILD_DEVICES:=sinovoip_bananapi-m2-berry
|
BUILD_DEVICES:=sinovoip_bananapi-m2-berry
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define U-Boot/bananapi_p2_zero
|
||||||
|
BUILD_SUBTARGET:=cortexa7
|
||||||
|
NAME:=Bananapi P2 Zero
|
||||||
|
BUILD_DEVICES:=sinovoip_bananapi-p2-zero
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
UBOOT_TARGETS := \
|
UBOOT_TARGETS := \
|
||||||
a64-olinuxino \
|
a64-olinuxino \
|
||||||
a64-olinuxino-emmc \
|
a64-olinuxino-emmc \
|
||||||
|
@ -352,6 +368,7 @@ UBOOT_TARGETS := \
|
||||||
bananapi_m2_plus_h3 \
|
bananapi_m2_plus_h3 \
|
||||||
Bananapi \
|
Bananapi \
|
||||||
bananapi_m2_berry \
|
bananapi_m2_berry \
|
||||||
|
bananapi_p2_zero \
|
||||||
Bananapi_M2_Ultra \
|
Bananapi_M2_Ultra \
|
||||||
Bananapro \
|
Bananapro \
|
||||||
Cubieboard \
|
Cubieboard \
|
||||||
|
@ -382,6 +399,7 @@ UBOOT_TARGETS := \
|
||||||
orangepi_plus \
|
orangepi_plus \
|
||||||
orangepi_2 \
|
orangepi_2 \
|
||||||
orangepi_pc2 \
|
orangepi_pc2 \
|
||||||
|
orangepi_zero2 \
|
||||||
pangolin \
|
pangolin \
|
||||||
pine64_plus \
|
pine64_plus \
|
||||||
Sinovoip_BPI_M3 \
|
Sinovoip_BPI_M3 \
|
||||||
|
|
|
@ -0,0 +1,307 @@
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/arch/arm/dts/sun8i-h2-plus-bananapi-p2-zero.dts
|
||||||
|
@@ -0,0 +1,291 @@
|
||||||
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2023 Zoltan HERPAI <wigyori@uid0.hu>
|
||||||
|
+ *
|
||||||
|
+ * Based on sun8i-h2-plus-bananapi-m2-zero.dts, which is:
|
||||||
|
+ * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+/dts-v1/;
|
||||||
|
+#include "sun8i-h3.dtsi"
|
||||||
|
+#include "sunxi-common-regulators.dtsi"
|
||||||
|
+
|
||||||
|
+#include <dt-bindings/gpio/gpio.h>
|
||||||
|
+#include <dt-bindings/input/input.h>
|
||||||
|
+
|
||||||
|
+/ {
|
||||||
|
+ model = "Banana Pi BPI-P2-Zero";
|
||||||
|
+ compatible = "sinovoip,bpi-p2-zero", "allwinner,sun8i-h2-plus";
|
||||||
|
+
|
||||||
|
+ aliases {
|
||||||
|
+ serial0 = &uart0;
|
||||||
|
+ serial1 = &uart1;
|
||||||
|
+ ethernet0 = &emac;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ chosen {
|
||||||
|
+ stdout-path = "serial0:115200n8";
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ connector {
|
||||||
|
+ compatible = "hdmi-connector";
|
||||||
|
+ type = "c";
|
||||||
|
+
|
||||||
|
+ port {
|
||||||
|
+ hdmi_con_in: endpoint {
|
||||||
|
+ remote-endpoint = <&hdmi_out_con>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ leds {
|
||||||
|
+ compatible = "gpio-leds";
|
||||||
|
+
|
||||||
|
+ pwr_led {
|
||||||
|
+ label = "bananapi-p2-zero:red:pwr";
|
||||||
|
+ gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */
|
||||||
|
+ default-state = "on";
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ gpio-keys {
|
||||||
|
+ compatible = "gpio-keys";
|
||||||
|
+
|
||||||
|
+ switch-4 {
|
||||||
|
+ label = "power";
|
||||||
|
+ linux,code = <KEY_POWER>;
|
||||||
|
+ gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>;
|
||||||
|
+ wakeup-source;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ reg_vdd_cpux: vdd-cpux-regulator {
|
||||||
|
+ compatible = "regulator-gpio";
|
||||||
|
+ regulator-name = "vdd-cpux";
|
||||||
|
+ regulator-type = "voltage";
|
||||||
|
+ regulator-boot-on;
|
||||||
|
+ regulator-always-on;
|
||||||
|
+ regulator-min-microvolt = <1100000>;
|
||||||
|
+ regulator-max-microvolt = <1300000>;
|
||||||
|
+ regulator-ramp-delay = <50>; /* 4ms */
|
||||||
|
+
|
||||||
|
+ gpios = <&r_pio 0 1 GPIO_ACTIVE_HIGH>; /* PL1 */
|
||||||
|
+ enable-active-high;
|
||||||
|
+ gpios-states = <0x1>;
|
||||||
|
+ states = <1100000 0>, <1300000 1>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ reg_vcc_dram: vcc-dram {
|
||||||
|
+ compatible = "regulator-fixed";
|
||||||
|
+ regulator-name = "vcc-dram";
|
||||||
|
+ regulator-min-microvolt = <1500000>;
|
||||||
|
+ regulator-max-microvolt = <1500000>;
|
||||||
|
+ regulator-always-on;
|
||||||
|
+ regulator-boot-on;
|
||||||
|
+ enable-active-high;
|
||||||
|
+ gpio = <&r_pio 0 9 GPIO_ACTIVE_HIGH>; /* PL9 */
|
||||||
|
+ vin-supply = <®_vcc5v0>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ reg_vcc1v2: vcc1v2 {
|
||||||
|
+ compatible = "regulator-fixed";
|
||||||
|
+ regulator-name = "vcc1v2";
|
||||||
|
+ regulator-min-microvolt = <1200000>;
|
||||||
|
+ regulator-max-microvolt = <1200000>;
|
||||||
|
+ regulator-always-on;
|
||||||
|
+ regulator-boot-on;
|
||||||
|
+ enable-active-high;
|
||||||
|
+ gpio = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
|
||||||
|
+ vin-supply = <®_vcc5v0>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ poweroff {
|
||||||
|
+ compatible = "regulator-poweroff";
|
||||||
|
+ cpu-supply = <®_vcc1v2>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ wifi_pwrseq: wifi_pwrseq {
|
||||||
|
+ compatible = "mmc-pwrseq-simple";
|
||||||
|
+ reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */
|
||||||
|
+ clocks = <&rtc CLK_OSC32K_FANOUT>;
|
||||||
|
+ clock-names = "ext_clock";
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&cpu0 {
|
||||||
|
+ cpu-supply = <®_vdd_cpux>;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&de {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&ehci0 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&emac {
|
||||||
|
+ phy-handle = <&int_mii_phy>;
|
||||||
|
+ phy-mode = "mii";
|
||||||
|
+ allwinner,leds-active-low;
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&hdmi {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&hdmi_out {
|
||||||
|
+ hdmi_out_con: endpoint {
|
||||||
|
+ remote-endpoint = <&hdmi_con_in>;
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&mmc0 {
|
||||||
|
+ vmmc-supply = <®_vcc3v3>;
|
||||||
|
+ bus-width = <4>;
|
||||||
|
+ /*
|
||||||
|
+ * On the production batch of this board the card detect GPIO is
|
||||||
|
+ * high active (card inserted), although on the early samples it's
|
||||||
|
+ * low active.
|
||||||
|
+ */
|
||||||
|
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&mmc1 {
|
||||||
|
+ vmmc-supply = <®_vcc3v3>;
|
||||||
|
+ vqmmc-supply = <®_vcc3v3>;
|
||||||
|
+ mmc-pwrseq = <&wifi_pwrseq>;
|
||||||
|
+ bus-width = <4>;
|
||||||
|
+ non-removable;
|
||||||
|
+ status = "okay";
|
||||||
|
+
|
||||||
|
+ brcmf: wifi@1 {
|
||||||
|
+ reg = <1>;
|
||||||
|
+ compatible = "brcm,bcm4329-fmac";
|
||||||
|
+ interrupt-parent = <&pio>;
|
||||||
|
+ interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 / EINT10 */
|
||||||
|
+ interrupt-names = "host-wake";
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&mmc2 {
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&mmc2_8bit_pins>;
|
||||||
|
+ vmmc-supply = <®_vcc3v3>;
|
||||||
|
+ vqmmc-supply = <®_vcc3v3>;
|
||||||
|
+ bus-width = <8>;
|
||||||
|
+ non-removable;
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&ohci0 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&uart0 {
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&uart0_pa_pins>;
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&uart1 {
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
||||||
|
+ uart-has-rtscts;
|
||||||
|
+ status = "okay";
|
||||||
|
+
|
||||||
|
+ bluetooth {
|
||||||
|
+ compatible = "brcm,bcm43438-bt";
|
||||||
|
+ max-speed = <1500000>;
|
||||||
|
+ clocks = <&rtc CLK_OSC32K_FANOUT>;
|
||||||
|
+ clock-names = "lpo";
|
||||||
|
+ vbat-supply = <®_vcc3v3>;
|
||||||
|
+ vddio-supply = <®_vcc3v3>;
|
||||||
|
+ device-wakeup-gpios = <&pio 6 13 GPIO_ACTIVE_HIGH>; /* PG13 */
|
||||||
|
+ host-wakeup-gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; /* PG11 */
|
||||||
|
+ shutdown-gpios = <&pio 6 12 GPIO_ACTIVE_HIGH>; /* PG12 */
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&pio {
|
||||||
|
+ gpio-line-names =
|
||||||
|
+ /* PA */
|
||||||
|
+ "CON2-P13", "CON2-P11", "CON2-P22", "CON2-P15",
|
||||||
|
+ "CON3-P03", "CON3-P02", "CON2-P07", "CON2-P29",
|
||||||
|
+ "CON2-P31", "CON2-P33", "CON2-P35", "CON2-P05",
|
||||||
|
+ "CON2-P03", "CON2-P08", "CON2-P10", "CON2-P16",
|
||||||
|
+ "CON2-P12", "CON2-P37", "CON2-P28", "CON2-P27",
|
||||||
|
+ "CON2-P40", "CON2-P38", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PB */
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PC */
|
||||||
|
+ "CON2-P19", "CON2-P21", "CON2-P23", "CON2-P24",
|
||||||
|
+ "CON2-P18", "", "", "CON2-P26",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PD */
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "CSI-PWR-EN", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PE */
|
||||||
|
+ "CN3-P17", "CN3-P13", "CN3-P09", "CN3-P07",
|
||||||
|
+ "CN3-P19", "CN3-P21", "CN3-P22", "CN3-P20",
|
||||||
|
+ "CN3-P18", "CN3-P16", "CN3-P14", "CN3-P12",
|
||||||
|
+ "CN3-P05", "CN3-P03", "CN3-P06", "CN3-P08",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PF */
|
||||||
|
+ "SDC0-D1", "SDC0-D0", "SDC0-CLK", "SDC0-CMD", "SDC0-D3",
|
||||||
|
+ "SDC0-D2", "SDC0-DET", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+
|
||||||
|
+ /* PG */
|
||||||
|
+ "WL-SDIO-CLK", "WL-SDIO-CMD", "WL-SDIO-D0", "WL-SDIO-D1",
|
||||||
|
+ "WL-SDIO-D2", "WL-SDIO-D3", "BT-UART-TX", "BT-UART-RX",
|
||||||
|
+ "BT-UART-RTS", "BT-UART-CTS", "WL-WAKE-AP", "BT-WAKE-AP",
|
||||||
|
+ "BT-RST-N", "AP-WAKE-BT", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&r_pio {
|
||||||
|
+ gpio-line-names =
|
||||||
|
+ /* PL */
|
||||||
|
+ "", "CPUX-SET", "CON2-P32", "POWER-KEY", "CON2-P36",
|
||||||
|
+ "VCC-IO-EN", "USB0-ID", "WL-PWR-EN",
|
||||||
|
+ "PWR-STB", "PWR-DRAM", "PWR-LED", "IR-RX", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "",
|
||||||
|
+ "", "", "", "", "", "", "", "";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&usb_otg {
|
||||||
|
+ dr_mode = "otg";
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&usbphy {
|
||||||
|
+ usb0_id_det-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
|
||||||
|
+ /*
|
||||||
|
+ * There're two micro-USB connectors, one is power-only and another is
|
||||||
|
+ * OTG. The Vbus of these two connectors are connected together, so
|
||||||
|
+ * the external USB device will be powered just by the power input
|
||||||
|
+ * from the power-only USB port.
|
||||||
|
+ */
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/configs/bananapi_p2_zero_defconfig
|
||||||
|
@@ -0,0 +1,10 @@
|
||||||
|
+CONFIG_ARM=y
|
||||||
|
+CONFIG_ARCH_SUNXI=y
|
||||||
|
+CONFIG_DEFAULT_DEVICE_TREE="sun8i-h2-plus-bananapi-p2-zero"
|
||||||
|
+CONFIG_SPL=y
|
||||||
|
+CONFIG_MACH_SUN8I_H3=y
|
||||||
|
+CONFIG_DRAM_CLK=408
|
||||||
|
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||||
|
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||||
|
+CONFIG_SUN8I_EMAC=y
|
||||||
|
+CONFIG_USB_EHCI_HCD=y
|
7
package/boot/uboot-sunxi/uEnv-h616.txt
Normal file
7
package/boot/uboot-sunxi/uEnv-h616.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
setenv mmc_rootpart 2
|
||||||
|
part uuid mmc ${mmc_bootdev}:${mmc_rootpart} uuid
|
||||||
|
setenv loadkernel fatload mmc \$mmc_bootdev \$kernel_addr_r uImage
|
||||||
|
setenv loaddtb fatload mmc \$mmc_bootdev \$fdt_addr_r dtb
|
||||||
|
setenv bootargs console=ttyS0,115200 earlyprintk root=PARTUUID=${uuid} rootwait
|
||||||
|
setenv uenvcmd run loadkernel \&\& run loaddtb \&\& booti \$kernel_addr_r - \$fdt_addr_r
|
||||||
|
run uenvcmd
|
|
@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/version.mk
|
include $(INCLUDE_DIR)/version.mk
|
||||||
|
|
||||||
PKG_NAME:=ipq-wifi
|
PKG_NAME:=ipq-wifi
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
|
||||||
PKG_SOURCE_DATE:=2023-06-03
|
PKG_SOURCE_DATE:=2023-09-16
|
||||||
PKG_SOURCE_VERSION:=cd9c30ca47b8e5388b770c523a7f6b8b969e2f92
|
PKG_SOURCE_VERSION:=57aa1b1562ac60f11a6bec8be02cd3b68b12b3fa
|
||||||
PKG_MIRROR_HASH:=45e623fcc512b514ade0f22e217275536aa8de4afba7dfdb11696482b8fa71a2
|
PKG_MIRROR_HASH:=f8f9ab78ae85180a6e601d7c911d6c350b0cc132172d4baefc8f9fe07566ce0f
|
||||||
|
|
||||||
PKG_FLAGS:=nonshared
|
PKG_FLAGS:=nonshared
|
||||||
|
|
||||||
|
@ -41,7 +41,9 @@ ALLWIFIBOARDS:= \
|
||||||
wallys_dr40x9 \
|
wallys_dr40x9 \
|
||||||
xiaomi_ax3600 \
|
xiaomi_ax3600 \
|
||||||
xiaomi_ax9000 \
|
xiaomi_ax9000 \
|
||||||
|
yyets_le1 \
|
||||||
zte_mf289f \
|
zte_mf289f \
|
||||||
|
zte_mf287 \
|
||||||
zte_mf287plus \
|
zte_mf287plus \
|
||||||
zyxel_nbg7815
|
zyxel_nbg7815
|
||||||
|
|
||||||
|
@ -130,7 +132,9 @@ $(eval $(call generate-ipq-wifi-package,redmi_ax6,Redmi AX6))
|
||||||
$(eval $(call generate-ipq-wifi-package,wallys_dr40x9,Wallys DR40X9))
|
$(eval $(call generate-ipq-wifi-package,wallys_dr40x9,Wallys DR40X9))
|
||||||
$(eval $(call generate-ipq-wifi-package,xiaomi_ax3600,Xiaomi AX3600))
|
$(eval $(call generate-ipq-wifi-package,xiaomi_ax3600,Xiaomi AX3600))
|
||||||
$(eval $(call generate-ipq-wifi-package,xiaomi_ax9000,Xiaomi AX9000))
|
$(eval $(call generate-ipq-wifi-package,xiaomi_ax9000,Xiaomi AX9000))
|
||||||
|
$(eval $(call generate-ipq-wifi-package,yyets_le1,YYeTs LE1))
|
||||||
$(eval $(call generate-ipq-wifi-package,zte_mf289f,ZTE MF289F))
|
$(eval $(call generate-ipq-wifi-package,zte_mf289f,ZTE MF289F))
|
||||||
|
$(eval $(call generate-ipq-wifi-package,zte_mf287,ZTE MF287))
|
||||||
$(eval $(call generate-ipq-wifi-package,zte_mf287plus,ZTE MF287Plus))
|
$(eval $(call generate-ipq-wifi-package,zte_mf287plus,ZTE MF287Plus))
|
||||||
$(eval $(call generate-ipq-wifi-package,zyxel_nbg7815,Zyxel NBG7815))
|
$(eval $(call generate-ipq-wifi-package,zyxel_nbg7815,Zyxel NBG7815))
|
||||||
|
|
||||||
|
|
|
@ -417,9 +417,11 @@ $(eval $(call KernelPackage,hwmon-mcp3021))
|
||||||
define KernelPackage/hwmon-nct6775
|
define KernelPackage/hwmon-nct6775
|
||||||
TITLE:=NCT6106D/6775F/6776F/6779D/6791D/6792D/6793D and compatibles monitoring support
|
TITLE:=NCT6106D/6775F/6776F/6779D/6791D/6792D/6793D and compatibles monitoring support
|
||||||
KCONFIG:=CONFIG_SENSORS_NCT6775
|
KCONFIG:=CONFIG_SENSORS_NCT6775
|
||||||
FILES:=$(LINUX_DIR)/drivers/hwmon/nct6775.ko
|
FILES:= \
|
||||||
|
$(LINUX_DIR)/drivers/hwmon/nct6775.ko \
|
||||||
|
$(LINUX_DIR)/drivers/hwmon/nct6775-core.ko@ge5.19
|
||||||
AUTOLOAD:=$(call AutoProbe,nct6775)
|
AUTOLOAD:=$(call AutoProbe,nct6775)
|
||||||
$(call AddDepends/hwmon,@PCI_SUPPORT @TARGET_x86 +kmod-hwmon-vid)
|
$(call AddDepends/hwmon,@PCI_SUPPORT @TARGET_x86 +kmod-hwmon-vid +LINUX_6_1:kmod-regmap-core)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define KernelPackage/hwmon-nct6775/description
|
define KernelPackage/hwmon-nct6775/description
|
||||||
|
|
|
@ -1344,7 +1344,8 @@ define KernelPackage/mlx5-core
|
||||||
CONFIG_MLX5_MPFS=y \
|
CONFIG_MLX5_MPFS=y \
|
||||||
CONFIG_MLX5_SW_STEERING=n \
|
CONFIG_MLX5_SW_STEERING=n \
|
||||||
CONFIG_MLX5_TC_CT=n \
|
CONFIG_MLX5_TC_CT=n \
|
||||||
CONFIG_MLX5_TLS=n
|
CONFIG_MLX5_TLS=n \
|
||||||
|
CONFIG_MLX5_VFIO_PCI=n
|
||||||
AUTOLOAD:=$(call AutoProbe,mlx5_core)
|
AUTOLOAD:=$(call AutoProbe,mlx5_core)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,24 @@ V4L2_MEM2MEM_DIR=platform
|
||||||
# Video Display
|
# Video Display
|
||||||
#
|
#
|
||||||
|
|
||||||
|
define KernelPackage/acpi-video
|
||||||
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
|
TITLE:=ACPI Extensions For Display Adapters
|
||||||
|
DEPENDS:=@TARGET_x86 +kmod-backlight
|
||||||
|
HIDDEN:=1
|
||||||
|
KCONFIG:=CONFIG_ACPI_VIDEO \
|
||||||
|
CONFIG_ACPI_WMI
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/acpi/video.ko \
|
||||||
|
$(LINUX_DIR)/drivers/platform/x86/wmi.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,wmi video)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/acpi-video/description
|
||||||
|
Kernel support for integrated graphics devices.
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,acpi-video))
|
||||||
|
|
||||||
define KernelPackage/backlight
|
define KernelPackage/backlight
|
||||||
SUBMENU:=$(VIDEO_MENU)
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
TITLE:=Backlight support
|
TITLE:=Backlight support
|
||||||
|
@ -241,6 +259,36 @@ endef
|
||||||
|
|
||||||
$(eval $(call KernelPackage,drm))
|
$(eval $(call KernelPackage,drm))
|
||||||
|
|
||||||
|
define KernelPackage/drm-buddy
|
||||||
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
|
TITLE:=A page based buddy allocator
|
||||||
|
DEPENDS:=@DISPLAY_SUPPORT +kmod-drm @LINUX_6_1
|
||||||
|
KCONFIG:=CONFIG_DRM_BUDDY
|
||||||
|
FILES:= $(LINUX_DIR)/drivers/gpu/drm/drm_buddy.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,drm_buddy)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/drm-buddy/description
|
||||||
|
A page based buddy allocator
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,drm-buddy))
|
||||||
|
|
||||||
|
define KernelPackage/drm-display-helper
|
||||||
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
|
TITLE:=DRM helpers for display adapters drivers
|
||||||
|
DEPENDS:=@DISPLAY_SUPPORT +kmod-drm-kms-helper @LINUX_6_1
|
||||||
|
KCONFIG:=CONFIG_DRM_DISPLAY_HELPER
|
||||||
|
FILES:=$(LINUX_DIR)/drivers/gpu/drm/display/drm_display_helper.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,drm_display_helper)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/drm-display-helper/description
|
||||||
|
DRM helpers for display adapters drivers.
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call KernelPackage,drm-display-helper))
|
||||||
|
|
||||||
define KernelPackage/drm-ttm
|
define KernelPackage/drm-ttm
|
||||||
SUBMENU:=$(VIDEO_MENU)
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
TITLE:=GPU memory management subsystem
|
TITLE:=GPU memory management subsystem
|
||||||
|
@ -293,7 +341,9 @@ define KernelPackage/drm-amdgpu
|
||||||
SUBMENU:=$(VIDEO_MENU)
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
TITLE:=AMDGPU DRM support
|
TITLE:=AMDGPU DRM support
|
||||||
DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \
|
DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \
|
||||||
+kmod-drm-ttm-helper +kmod-drm-kms-helper +kmod-i2c-algo-bit +amdgpu-firmware
|
+kmod-drm-ttm-helper +kmod-drm-kms-helper +kmod-i2c-algo-bit +amdgpu-firmware \
|
||||||
|
+LINUX_6_1:kmod-drm-display-helper +LINUX_6_1:kmod-drm-buddy \
|
||||||
|
+LINUX_6_1:kmod-acpi-video
|
||||||
KCONFIG:=CONFIG_DRM_AMDGPU \
|
KCONFIG:=CONFIG_DRM_AMDGPU \
|
||||||
CONFIG_DRM_AMDGPU_SI=y \
|
CONFIG_DRM_AMDGPU_SI=y \
|
||||||
CONFIG_DRM_AMDGPU_CIK=y \
|
CONFIG_DRM_AMDGPU_CIK=y \
|
||||||
|
@ -391,7 +441,8 @@ define KernelPackage/drm-radeon
|
||||||
SUBMENU:=$(VIDEO_MENU)
|
SUBMENU:=$(VIDEO_MENU)
|
||||||
TITLE:=Radeon DRM support
|
TITLE:=Radeon DRM support
|
||||||
DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-kms-helper \
|
DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-kms-helper \
|
||||||
+kmod-drm-ttm +kmod-drm-ttm-helper +kmod-i2c-algo-bit +radeon-firmware
|
+kmod-drm-ttm +kmod-drm-ttm-helper +kmod-i2c-algo-bit +radeon-firmware \
|
||||||
|
+LINUX_6_1:kmod-drm-display-helper +LINUX_6_1:kmod-acpi-video
|
||||||
KCONFIG:=CONFIG_DRM_RADEON
|
KCONFIG:=CONFIG_DRM_RADEON
|
||||||
FILES:=$(LINUX_DIR)/drivers/gpu/drm/radeon/radeon.ko
|
FILES:=$(LINUX_DIR)/drivers/gpu/drm/radeon/radeon.ko
|
||||||
AUTOLOAD:=$(call AutoProbe,radeon)
|
AUTOLOAD:=$(call AutoProbe,radeon)
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
From ed3725e15a154ebebf44e0c34806c57525483f92 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rahul Bhattacharjee <quic_rbhattac@quicinc.com>
|
|
||||||
Date: Fri, 21 Oct 2022 14:31:26 +0530
|
|
||||||
Subject: [PATCH] wifi: ath11k: Fix qmi_msg_handler data structure
|
|
||||||
initialization
|
|
||||||
|
|
||||||
qmi_msg_handler is required to be null terminated by QMI module.
|
|
||||||
There might be a case where a handler for a msg id is not present in the
|
|
||||||
handlers array which can lead to infinite loop while searching the handler
|
|
||||||
and therefore out of bound access in qmi_invoke_handler().
|
|
||||||
Hence update the initialization in qmi_msg_handler data structure.
|
|
||||||
|
|
||||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Signed-off-by: Rahul Bhattacharjee <quic_rbhattac@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20221021090126.28626-1-quic_rbhattac@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/qmi.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
||||||
@@ -1702,6 +1702,9 @@ static const struct qmi_elem_info qmi_wl
|
|
||||||
.data_type = QMI_EOTI,
|
|
||||||
.array_type = NO_ARRAY,
|
|
||||||
},
|
|
||||||
+
|
|
||||||
+ /* end of list */
|
|
||||||
+ {},
|
|
||||||
};
|
|
||||||
|
|
||||||
static int ath11k_qmi_host_cap_send(struct ath11k_base *ab)
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
From 72c8caf904aed2caed5d6e75233294b6159ddb5d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||||
|
Date: Wed, 26 Jul 2023 10:16:24 +0530
|
||||||
|
Subject: [PATCH 1/5] wifi: ath11k: fix band selection for ppdu received in
|
||||||
|
channel 177 of 5 GHz
|
||||||
|
|
||||||
|
5 GHz band channel 177 support was added with the commit e5e94d10c856 ("wifi:
|
||||||
|
ath11k: add channel 177 into 5 GHz channel list"). However, during processing
|
||||||
|
for the received ppdu in ath11k_dp_rx_h_ppdu(), channel number is checked only
|
||||||
|
till 173. This leads to driver code checking for channel and then fetching the
|
||||||
|
band from it which is extra effort since firmware has already given the channel
|
||||||
|
number in the metadata.
|
||||||
|
|
||||||
|
Fix this issue by checking the channel number till 177 since we support
|
||||||
|
it now.
|
||||||
|
|
||||||
|
Found via code review. Compile tested only.
|
||||||
|
|
||||||
|
Fixes: e5e94d10c856 ("wifi: ath11k: add channel 177 into 5 GHz channel list")
|
||||||
|
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230726044624.20507-1-quic_adisi@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/dp_rx.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
|
@@ -2408,7 +2408,7 @@ static void ath11k_dp_rx_h_ppdu(struct a
|
||||||
|
rx_status->freq = center_freq;
|
||||||
|
} else if (channel_num >= 1 && channel_num <= 14) {
|
||||||
|
rx_status->band = NL80211_BAND_2GHZ;
|
||||||
|
- } else if (channel_num >= 36 && channel_num <= 173) {
|
||||||
|
+ } else if (channel_num >= 36 && channel_num <= 177) {
|
||||||
|
rx_status->band = NL80211_BAND_5GHZ;
|
||||||
|
} else {
|
||||||
|
spin_lock_bh(&ar->data_lock);
|
|
@ -1,43 +0,0 @@
|
||||||
From 7c15430822e71e90203d87e6d0cfe83fa058b0dc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Len Brown <len.brown@intel.com>
|
|
||||||
Date: Wed, 1 Feb 2023 12:32:01 -0600
|
|
||||||
Subject: [PATCH] wifi: ath11k: allow system suspend to survive ath11k
|
|
||||||
|
|
||||||
When ath11k runs into internal errors upon suspend,
|
|
||||||
it returns an error code to pci_pm_suspend, which
|
|
||||||
aborts the entire system suspend.
|
|
||||||
|
|
||||||
The driver should not abort system suspend, but should
|
|
||||||
keep its internal errors to itself, and allow the system
|
|
||||||
to suspend. Otherwise, a user can suspend a laptop
|
|
||||||
by closing the lid and sealing it into a case, assuming
|
|
||||||
that is will suspend, rather than heating up and draining
|
|
||||||
the battery when in transit.
|
|
||||||
|
|
||||||
In practice, the ath11k device seems to have plenty of transient
|
|
||||||
errors, and subsequent suspend cycles after this failure
|
|
||||||
often succeed.
|
|
||||||
|
|
||||||
https://bugzilla.kernel.org/show_bug.cgi?id=216968
|
|
||||||
|
|
||||||
Fixes: d1b0c33850d29 ("ath11k: implement suspend for QCA6390 PCI devices")
|
|
||||||
|
|
||||||
Signed-off-by: Len Brown <len.brown@intel.com>
|
|
||||||
Cc: stable@vger.kernel.org
|
|
||||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
|
||||||
Link: https://lore.kernel.org/r/20230201183201.14431-1-len.brown@intel.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/pci.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
@@ -998,7 +998,7 @@ static __maybe_unused int ath11k_pci_pm_
|
|
||||||
if (ret)
|
|
||||||
ath11k_warn(ab, "failed to resume core: %d\n", ret);
|
|
||||||
|
|
||||||
- return ret;
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static SIMPLE_DEV_PM_OPS(ath11k_pci_pm_ops,
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
From 6f092c98dcfa1e4cf37d45f9b8e4d4a3cbeb79d4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||||
|
Date: Wed, 26 Jul 2023 12:21:02 +0300
|
||||||
|
Subject: [PATCH 2/5] wifi: ath11k: simplify
|
||||||
|
ath11k_mac_validate_vht_he_fixed_rate_settings()
|
||||||
|
|
||||||
|
In ath11k_mac_validate_vht_he_fixed_rate_settings() ar->ab->peers
|
||||||
|
list is not altered so list_for_each_entry() should be safe.
|
||||||
|
|
||||||
|
Compile tested only.
|
||||||
|
|
||||||
|
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230726092113.78794-1-dmantipov@yandex.ru
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/mac.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
@@ -8258,7 +8258,7 @@ ath11k_mac_validate_vht_he_fixed_rate_se
|
||||||
|
const struct cfg80211_bitrate_mask *mask)
|
||||||
|
{
|
||||||
|
bool he_fixed_rate = false, vht_fixed_rate = false;
|
||||||
|
- struct ath11k_peer *peer, *tmp;
|
||||||
|
+ struct ath11k_peer *peer;
|
||||||
|
const u16 *vht_mcs_mask, *he_mcs_mask;
|
||||||
|
struct ieee80211_link_sta *deflink;
|
||||||
|
u8 vht_nss, he_nss;
|
||||||
|
@@ -8281,7 +8281,7 @@ ath11k_mac_validate_vht_he_fixed_rate_se
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
spin_lock_bh(&ar->ab->base_lock);
|
||||||
|
- list_for_each_entry_safe(peer, tmp, &ar->ab->peers, list) {
|
||||||
|
+ list_for_each_entry(peer, &ar->ab->peers, list) {
|
||||||
|
if (peer->sta) {
|
||||||
|
deflink = &peer->sta->deflink;
|
||||||
|
|
|
@ -0,0 +1,180 @@
|
||||||
|
From 011e5a3052a22d3758d17442bf0c04c68bf79bea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
|
||||||
|
Date: Wed, 26 Jul 2023 19:40:30 +0530
|
||||||
|
Subject: [PATCH 3/5] wifi: ath11k: Split coldboot calibration hw_param
|
||||||
|
|
||||||
|
QCN9074 enables coldboot calibration only in Factory Test Mode (FTM).
|
||||||
|
Hence, split cold_boot_calib to two hw_params for mission and FTM
|
||||||
|
mode.
|
||||||
|
|
||||||
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
|
||||||
|
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/ahb.c | 3 +--
|
||||||
|
drivers/net/wireless/ath/ath11k/core.c | 36 ++++++++++++++++++++------
|
||||||
|
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||||||
|
drivers/net/wireless/ath/ath11k/hw.h | 3 ++-
|
||||||
|
drivers/net/wireless/ath/ath11k/qmi.c | 6 ++---
|
||||||
|
5 files changed, 35 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
@@ -422,8 +422,7 @@ static int ath11k_ahb_fwreset_from_cold_
|
||||||
|
{
|
||||||
|
int timeout;
|
||||||
|
|
||||||
|
- if (ath11k_cold_boot_cal == 0 || ab->qmi.cal_done ||
|
||||||
|
- ab->hw_params.cold_boot_calib == 0 ||
|
||||||
|
+ if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
|
||||||
|
ab->hw_params.cbcal_restart_fw == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||||
|
@@ -86,7 +86,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = false,
|
||||||
|
.idle_ps = false,
|
||||||
|
.supports_sta_ps = false,
|
||||||
|
- .cold_boot_calib = true,
|
||||||
|
+ .coldboot_cal_mm = true,
|
||||||
|
+ .coldboot_cal_ftm = true,
|
||||||
|
.cbcal_restart_fw = true,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -167,7 +168,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = false,
|
||||||
|
.idle_ps = false,
|
||||||
|
.supports_sta_ps = false,
|
||||||
|
- .cold_boot_calib = true,
|
||||||
|
+ .coldboot_cal_mm = true,
|
||||||
|
+ .coldboot_cal_ftm = true,
|
||||||
|
.cbcal_restart_fw = true,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -248,7 +250,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = true,
|
||||||
|
.idle_ps = true,
|
||||||
|
.supports_sta_ps = true,
|
||||||
|
- .cold_boot_calib = false,
|
||||||
|
+ .coldboot_cal_mm = false,
|
||||||
|
+ .coldboot_cal_ftm = false,
|
||||||
|
.cbcal_restart_fw = false,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -332,7 +335,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = false,
|
||||||
|
.idle_ps = false,
|
||||||
|
.supports_sta_ps = false,
|
||||||
|
- .cold_boot_calib = false,
|
||||||
|
+ .coldboot_cal_mm = false,
|
||||||
|
+ .coldboot_cal_ftm = false,
|
||||||
|
.cbcal_restart_fw = false,
|
||||||
|
.fw_mem_mode = 2,
|
||||||
|
.num_vdevs = 8,
|
||||||
|
@@ -413,7 +417,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = true,
|
||||||
|
.idle_ps = true,
|
||||||
|
.supports_sta_ps = true,
|
||||||
|
- .cold_boot_calib = false,
|
||||||
|
+ .coldboot_cal_mm = false,
|
||||||
|
+ .coldboot_cal_ftm = false,
|
||||||
|
.cbcal_restart_fw = false,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -495,7 +500,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = true,
|
||||||
|
.idle_ps = true,
|
||||||
|
.supports_sta_ps = true,
|
||||||
|
- .cold_boot_calib = false,
|
||||||
|
+ .coldboot_cal_mm = false,
|
||||||
|
+ .coldboot_cal_ftm = false,
|
||||||
|
.cbcal_restart_fw = false,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -578,7 +584,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_shadow_regs = true,
|
||||||
|
.idle_ps = true,
|
||||||
|
.supports_sta_ps = true,
|
||||||
|
- .cold_boot_calib = true,
|
||||||
|
+ .coldboot_cal_mm = true,
|
||||||
|
+ .coldboot_cal_ftm = true,
|
||||||
|
.cbcal_restart_fw = false,
|
||||||
|
.fw_mem_mode = 0,
|
||||||
|
.num_vdevs = 16 + 1,
|
||||||
|
@@ -667,7 +674,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.supports_suspend = false,
|
||||||
|
.hal_params = &ath11k_hw_hal_params_ipq8074,
|
||||||
|
.single_pdev_only = false,
|
||||||
|
- .cold_boot_calib = true,
|
||||||
|
+ .coldboot_cal_mm = true,
|
||||||
|
+ .coldboot_cal_ftm = true,
|
||||||
|
.cbcal_restart_fw = true,
|
||||||
|
.fix_l1ss = true,
|
||||||
|
.supports_dynamic_smps_6ghz = false,
|
||||||
|
@@ -749,6 +757,18 @@ void ath11k_fw_stats_free(struct ath11k_
|
||||||
|
ath11k_fw_stats_bcn_free(&stats->bcn);
|
||||||
|
}
|
||||||
|
|
||||||
|
+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab)
|
||||||
|
+{
|
||||||
|
+ if (!ath11k_cold_boot_cal)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ if (ath11k_ftm_mode)
|
||||||
|
+ return ab->hw_params.coldboot_cal_ftm;
|
||||||
|
+
|
||||||
|
+ else
|
||||||
|
+ return ab->hw_params.coldboot_cal_mm;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int ath11k_core_suspend(struct ath11k_base *ab)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||||
|
@@ -1186,6 +1186,7 @@ void ath11k_core_halt(struct ath11k *ar)
|
||||||
|
int ath11k_core_resume(struct ath11k_base *ab);
|
||||||
|
int ath11k_core_suspend(struct ath11k_base *ab);
|
||||||
|
void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab);
|
||||||
|
+bool ath11k_core_coldboot_cal_support(struct ath11k_base *ab);
|
||||||
|
|
||||||
|
const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
|
||||||
|
const char *filename);
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||||||
|
@@ -187,7 +187,8 @@ struct ath11k_hw_params {
|
||||||
|
bool supports_shadow_regs;
|
||||||
|
bool idle_ps;
|
||||||
|
bool supports_sta_ps;
|
||||||
|
- bool cold_boot_calib;
|
||||||
|
+ bool coldboot_cal_mm;
|
||||||
|
+ bool coldboot_cal_ftm;
|
||||||
|
bool cbcal_restart_fw;
|
||||||
|
int fw_mem_mode;
|
||||||
|
u32 num_vdevs;
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
@@ -2079,7 +2079,7 @@ static int ath11k_qmi_assign_target_mem_
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (ath11k_cold_boot_cal && ab->hw_params.cold_boot_calib) {
|
||||||
|
+ if (ath11k_core_coldboot_cal_support(ab)) {
|
||||||
|
if (hremote_node) {
|
||||||
|
ab->qmi.target_mem[idx].paddr =
|
||||||
|
res.start + host_ddr_sz;
|
||||||
|
@@ -3209,8 +3209,8 @@ static void ath11k_qmi_driver_event_work
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (ath11k_cold_boot_cal && ab->qmi.cal_done == 0 &&
|
||||||
|
- ab->hw_params.cold_boot_calib) {
|
||||||
|
+ if (ab->qmi.cal_done == 0 &&
|
||||||
|
+ ath11k_core_coldboot_cal_support(ab)) {
|
||||||
|
ath11k_qmi_process_coldboot_calibration(ab);
|
||||||
|
} else {
|
||||||
|
clear_bit(ATH11K_FLAG_CRASH_FLUSH,
|
|
@ -0,0 +1,176 @@
|
||||||
|
From bdfc967bf5fcd762473a01d39edb81f1165ba290 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Anilkumar Kolli <quic_akolli@quicinc.com>
|
||||||
|
Date: Wed, 26 Jul 2023 19:40:31 +0530
|
||||||
|
Subject: [PATCH 4/5] wifi: ath11k: Add coldboot calibration support for
|
||||||
|
QCN9074
|
||||||
|
|
||||||
|
QCN9074 supports 6 GHz, which has increased number of channels
|
||||||
|
compared to 5 GHz/2 GHz. So, to support coldboot calibration in
|
||||||
|
QCN9074 ATH11K_COLD_BOOT_FW_RESET_DELAY extended to 60 seconds. To
|
||||||
|
avoid code redundancy, fwreset_from_cold_boot moved to QMI and made
|
||||||
|
common for both ahb and pci. Coldboot calibration is enabled only in
|
||||||
|
FTM mode for QCN9074. QCN9074 requires firmware restart after coldboot,
|
||||||
|
hence enable cbcal_restart_fw in hw_params.
|
||||||
|
|
||||||
|
This support can be enabled/disabled using hw params for different
|
||||||
|
hardware. Currently it is not enabled for QCA6390.
|
||||||
|
|
||||||
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Anilkumar Kolli <quic_akolli@quicinc.com>
|
||||||
|
Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
|
||||||
|
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230726141032.3061-3-quic_rajkbhag@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/ahb.c | 28 ++------------------------
|
||||||
|
drivers/net/wireless/ath/ath11k/core.c | 4 ++--
|
||||||
|
drivers/net/wireless/ath/ath11k/pci.c | 2 ++
|
||||||
|
drivers/net/wireless/ath/ath11k/qmi.c | 28 ++++++++++++++++++++++++++
|
||||||
|
drivers/net/wireless/ath/ath11k/qmi.h | 3 ++-
|
||||||
|
5 files changed, 36 insertions(+), 29 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
@@ -14,6 +14,7 @@
|
||||||
|
#include "ahb.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "hif.h"
|
||||||
|
+#include "qmi.h"
|
||||||
|
#include <linux/remoteproc.h>
|
||||||
|
#include "pcic.h"
|
||||||
|
#include <linux/soc/qcom/smem.h>
|
||||||
|
@@ -418,31 +419,6 @@ static void ath11k_ahb_power_down(struct
|
||||||
|
rproc_shutdown(ab_ahb->tgt_rproc);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int ath11k_ahb_fwreset_from_cold_boot(struct ath11k_base *ab)
|
||||||
|
-{
|
||||||
|
- int timeout;
|
||||||
|
-
|
||||||
|
- if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
|
||||||
|
- ab->hw_params.cbcal_restart_fw == 0)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
- ath11k_dbg(ab, ATH11K_DBG_AHB, "wait for cold boot done\n");
|
||||||
|
- timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
|
||||||
|
- (ab->qmi.cal_done == 1),
|
||||||
|
- ATH11K_COLD_BOOT_FW_RESET_DELAY);
|
||||||
|
- if (timeout <= 0) {
|
||||||
|
- ath11k_cold_boot_cal = 0;
|
||||||
|
- ath11k_warn(ab, "Coldboot Calibration failed timed out\n");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* reset the firmware */
|
||||||
|
- ath11k_ahb_power_down(ab);
|
||||||
|
- ath11k_ahb_power_up(ab);
|
||||||
|
-
|
||||||
|
- ath11k_dbg(ab, ATH11K_DBG_AHB, "exited from cold boot mode\n");
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void ath11k_ahb_init_qmi_ce_config(struct ath11k_base *ab)
|
||||||
|
{
|
||||||
|
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
||||||
|
@@ -1225,7 +1201,7 @@ static int ath11k_ahb_probe(struct platf
|
||||||
|
goto err_ce_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
- ath11k_ahb_fwreset_from_cold_boot(ab);
|
||||||
|
+ ath11k_qmi_fwreset_from_cold_boot(ab);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||||
|
@@ -336,8 +336,8 @@ static const struct ath11k_hw_params ath
|
||||||
|
.idle_ps = false,
|
||||||
|
.supports_sta_ps = false,
|
||||||
|
.coldboot_cal_mm = false,
|
||||||
|
- .coldboot_cal_ftm = false,
|
||||||
|
- .cbcal_restart_fw = false,
|
||||||
|
+ .coldboot_cal_ftm = true,
|
||||||
|
+ .cbcal_restart_fw = true,
|
||||||
|
.fw_mem_mode = 2,
|
||||||
|
.num_vdevs = 8,
|
||||||
|
.num_peers = 128,
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
|
@@ -15,6 +15,7 @@
|
||||||
|
#include "mhi.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "pcic.h"
|
||||||
|
+#include "qmi.h"
|
||||||
|
|
||||||
|
#define ATH11K_PCI_BAR_NUM 0
|
||||||
|
#define ATH11K_PCI_DMA_MASK 32
|
||||||
|
@@ -897,6 +898,7 @@ unsupported_wcn6855_soc:
|
||||||
|
ath11k_err(ab, "failed to init core: %d\n", ret);
|
||||||
|
goto err_irq_affinity_cleanup;
|
||||||
|
}
|
||||||
|
+ ath11k_qmi_fwreset_from_cold_boot(ab);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_irq_affinity_cleanup:
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
@@ -9,6 +9,7 @@
|
||||||
|
#include "qmi.h"
|
||||||
|
#include "core.h"
|
||||||
|
#include "debug.h"
|
||||||
|
+#include "hif.h"
|
||||||
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
@@ -2839,6 +2840,33 @@ int ath11k_qmi_firmware_start(struct ath
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int ath11k_qmi_fwreset_from_cold_boot(struct ath11k_base *ab)
|
||||||
|
+{
|
||||||
|
+ int timeout;
|
||||||
|
+
|
||||||
|
+ if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
|
||||||
|
+ ab->hw_params.cbcal_restart_fw == 0)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ ath11k_dbg(ab, ATH11K_DBG_QMI, "wait for cold boot done\n");
|
||||||
|
+
|
||||||
|
+ timeout = wait_event_timeout(ab->qmi.cold_boot_waitq,
|
||||||
|
+ (ab->qmi.cal_done == 1),
|
||||||
|
+ ATH11K_COLD_BOOT_FW_RESET_DELAY);
|
||||||
|
+
|
||||||
|
+ if (timeout <= 0) {
|
||||||
|
+ ath11k_warn(ab, "Coldboot Calibration timed out\n");
|
||||||
|
+ return -ETIMEDOUT;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* reset the firmware */
|
||||||
|
+ ath11k_hif_power_down(ab);
|
||||||
|
+ ath11k_hif_power_up(ab);
|
||||||
|
+ ath11k_dbg(ab, ATH11K_DBG_QMI, "exit wait for cold boot done\n");
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+EXPORT_SYMBOL(ath11k_qmi_fwreset_from_cold_boot);
|
||||||
|
+
|
||||||
|
static int ath11k_qmi_process_coldboot_calibration(struct ath11k_base *ab)
|
||||||
|
{
|
||||||
|
int timeout;
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/qmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.h
|
||||||
|
@@ -37,7 +37,7 @@
|
||||||
|
|
||||||
|
#define QMI_WLANFW_MAX_DATA_SIZE_V01 6144
|
||||||
|
#define ATH11K_FIRMWARE_MODE_OFF 4
|
||||||
|
-#define ATH11K_COLD_BOOT_FW_RESET_DELAY (40 * HZ)
|
||||||
|
+#define ATH11K_COLD_BOOT_FW_RESET_DELAY (60 * HZ)
|
||||||
|
|
||||||
|
#define ATH11K_QMI_DEVICE_BAR_SIZE 0x200000
|
||||||
|
|
||||||
|
@@ -519,5 +519,6 @@ void ath11k_qmi_msg_recv_work(struct wor
|
||||||
|
void ath11k_qmi_deinit_service(struct ath11k_base *ab);
|
||||||
|
int ath11k_qmi_init_service(struct ath11k_base *ab);
|
||||||
|
void ath11k_qmi_free_resource(struct ath11k_base *ab);
|
||||||
|
+int ath11k_qmi_fwreset_from_cold_boot(struct ath11k_base *ab);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,33 @@
|
||||||
|
From 13329d0cb7212b058bd8451a99d215a8f97645ea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
|
||||||
|
Date: Wed, 26 Jul 2023 19:40:32 +0530
|
||||||
|
Subject: [PATCH 5/5] wifi: ath11k: Remove cal_done check during probe
|
||||||
|
|
||||||
|
In some race conditions, calibration done QMI message is received even
|
||||||
|
before host wait starts for calibration to be done.
|
||||||
|
Due to this, resetting firmware was not performed after calibration.
|
||||||
|
|
||||||
|
Hence, remove cal_done check in ath11k_qmi_fwreset_from_cold_boot()
|
||||||
|
as this is called only from probe.
|
||||||
|
|
||||||
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
|
||||||
|
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230726141032.3061-4-quic_rajkbhag@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/qmi.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
|
@@ -2844,7 +2844,7 @@ int ath11k_qmi_fwreset_from_cold_boot(st
|
||||||
|
{
|
||||||
|
int timeout;
|
||||||
|
|
||||||
|
- if (!ath11k_core_coldboot_cal_support(ab) || ab->qmi.cal_done ||
|
||||||
|
+ if (!ath11k_core_coldboot_cal_support(ab) ||
|
||||||
|
ab->hw_params.cbcal_restart_fw == 0)
|
||||||
|
return 0;
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
From 400ece6c7f346b0a30867bd00b03b5b2563d4357 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sven Eckelmann <sven@narfation.org>
|
||||||
|
Date: Tue, 22 Aug 2023 16:42:24 +0300
|
||||||
|
Subject: [PATCH] wifi: ath11k: Don't drop tx_status when peer cannot be found
|
||||||
|
|
||||||
|
When a station idles for a long time, hostapd will try to send a QoS Null
|
||||||
|
frame to the station as "poll". NL80211_CMD_PROBE_CLIENT is used for this
|
||||||
|
purpose. And the skb will be added to ack_status_frame - waiting for a
|
||||||
|
completion via ieee80211_report_ack_skb().
|
||||||
|
|
||||||
|
But when the peer was already removed before the tx_complete arrives, the
|
||||||
|
peer will be missing. And when using dev_kfree_skb_any (instead of going
|
||||||
|
through mac80211), the entry will stay inside ack_status_frames. This IDR
|
||||||
|
will therefore run full after 8K request were generated for such clients.
|
||||||
|
At this point, the access point will then just stall and not allow any new
|
||||||
|
clients because idr_alloc() for ack_status_frame will fail.
|
||||||
|
|
||||||
|
ieee80211_free_txskb() on the other hand will (when required) call
|
||||||
|
ieee80211_report_ack_skb() and make sure that (when required) remove the
|
||||||
|
entry from the ack_status_frame.
|
||||||
|
|
||||||
|
Tested-on: IPQ6018 hw1.0 WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode")
|
||||||
|
Fixes: 94739d45c388 ("ath11k: switch to using ieee80211_tx_status_ext()")
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-1-c0af729d6229@narfation.org
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/dp_tx.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
@@ -369,7 +369,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
||||||
|
"dp_tx: failed to find the peer with peer_id %d\n",
|
||||||
|
ts->peer_id);
|
||||||
|
spin_unlock_bh(&ab->base_lock);
|
||||||
|
- dev_kfree_skb_any(msdu);
|
||||||
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
spin_unlock_bh(&ab->base_lock);
|
||||||
|
@@ -624,7 +624,7 @@ static void ath11k_dp_tx_complete_msdu(s
|
||||||
|
"dp_tx: failed to find the peer with peer_id %d\n",
|
||||||
|
ts->peer_id);
|
||||||
|
spin_unlock_bh(&ab->base_lock);
|
||||||
|
- dev_kfree_skb_any(msdu);
|
||||||
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
arsta = (struct ath11k_sta *)peer->sta->drv_priv;
|
|
@ -0,0 +1,51 @@
|
||||||
|
From 29d15589f084d71a4ea8c544039c5839db0236e2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sven Eckelmann <sven@narfation.org>
|
||||||
|
Date: Tue, 22 Aug 2023 16:42:24 +0300
|
||||||
|
Subject: [PATCH] wifi: ath11k: Cleanup mac80211 references on failure during
|
||||||
|
tx_complete
|
||||||
|
|
||||||
|
When a function is using functions from mac80211 to free an skb then it
|
||||||
|
should do it consistently and not switch to the generic dev_kfree_skb_any
|
||||||
|
(or similar functions). Otherwise (like in the error handlers), mac80211
|
||||||
|
will will not be aware of the freed skb and thus not clean up related
|
||||||
|
information in its internal data structures.
|
||||||
|
|
||||||
|
Not doing so lead in the past to filled up structure which then prevented
|
||||||
|
new clients to connect.
|
||||||
|
|
||||||
|
Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
|
||||||
|
Fixes: 6257c702264c ("wifi: ath11k: fix tx status reporting in encap offload mode")
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230802-ath11k-ack_status_leak-v2-2-c0af729d6229@narfation.org
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/dp_tx.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
@@ -344,7 +344,7 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
||||||
|
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
||||||
|
|
||||||
|
if (!skb_cb->vif) {
|
||||||
|
- dev_kfree_skb_any(msdu);
|
||||||
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -566,12 +566,12 @@ static void ath11k_dp_tx_complete_msdu(s
|
||||||
|
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
||||||
|
|
||||||
|
if (unlikely(!rcu_access_pointer(ab->pdevs_active[ar->pdev_idx]))) {
|
||||||
|
- dev_kfree_skb_any(msdu);
|
||||||
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(!skb_cb->vif)) {
|
||||||
|
- dev_kfree_skb_any(msdu);
|
||||||
|
+ ieee80211_free_txskb(ar->hw, msdu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,316 @@
|
||||||
|
From 9476cda44c136089f14f8951ae5197d63e91735c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Date: Mon, 21 Aug 2023 07:13:36 -0700
|
||||||
|
Subject: [PATCH] wifi: ath11k: Consistently use ath11k_vif_to_arvif()
|
||||||
|
|
||||||
|
Helper function ath11k_vif_to_arvif() exists to retrieve a struct
|
||||||
|
ath11k_vif from a struct ieee80211_vif. However, in multiple places
|
||||||
|
this logic is open-coded with inline typecasting. Since the
|
||||||
|
typecasting prevents the compiler from type-checking the source and
|
||||||
|
destination, update the driver to consistently use the helper
|
||||||
|
function.
|
||||||
|
|
||||||
|
No functional changes, compile tested only.
|
||||||
|
|
||||||
|
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230821-ath11k_vif_to_arvif-v1-1-fa2c3b60b5cf@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/mac.c | 64 +++++++++++-----------
|
||||||
|
drivers/net/wireless/ath/ath11k/testmode.c | 2 +-
|
||||||
|
2 files changed, 33 insertions(+), 33 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
@@ -566,7 +566,7 @@ static void ath11k_get_arvif_iter(void *
|
||||||
|
struct ieee80211_vif *vif)
|
||||||
|
{
|
||||||
|
struct ath11k_vif_iter *arvif_iter = data;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
|
||||||
|
if (arvif->vdev_id == arvif_iter->vdev_id)
|
||||||
|
arvif_iter->arvif = arvif;
|
||||||
|
@@ -1464,7 +1464,7 @@ static int ath11k_mac_setup_bcn_tmpl_ema
|
||||||
|
u32 params = 0;
|
||||||
|
u8 i = 0;
|
||||||
|
|
||||||
|
- tx_arvif = (void *)arvif->vif->mbssid_tx_vif->drv_priv;
|
||||||
|
+ tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
|
||||||
|
|
||||||
|
beacons = ieee80211_beacon_get_template_ema_list(tx_arvif->ar->hw,
|
||||||
|
tx_arvif->vif, 0);
|
||||||
|
@@ -1520,8 +1520,8 @@ static int ath11k_mac_setup_bcn_tmpl_mbs
|
||||||
|
struct sk_buff *bcn;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
- if (arvif->vif->mbssid_tx_vif) {
|
||||||
|
- tx_arvif = (void *)arvif->vif->mbssid_tx_vif->drv_priv;
|
||||||
|
+ if (vif->mbssid_tx_vif) {
|
||||||
|
+ tx_arvif = ath11k_vif_to_arvif(vif->mbssid_tx_vif);
|
||||||
|
if (tx_arvif != arvif) {
|
||||||
|
ar = tx_arvif->ar;
|
||||||
|
ab = ar->ab;
|
||||||
|
@@ -1562,7 +1562,7 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
||||||
|
* non-transmitting interfaces, and results in a crash if sent.
|
||||||
|
*/
|
||||||
|
if (vif->mbssid_tx_vif &&
|
||||||
|
- arvif != (void *)vif->mbssid_tx_vif->drv_priv && arvif->is_up)
|
||||||
|
+ arvif != ath11k_vif_to_arvif(vif->mbssid_tx_vif) && arvif->is_up)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (vif->bss_conf.ema_ap && vif->mbssid_tx_vif)
|
||||||
|
@@ -1626,7 +1626,7 @@ static void ath11k_control_beaconing(str
|
||||||
|
ether_addr_copy(arvif->bssid, info->bssid);
|
||||||
|
|
||||||
|
if (arvif->vif->mbssid_tx_vif)
|
||||||
|
- tx_arvif = (struct ath11k_vif *)arvif->vif->mbssid_tx_vif->drv_priv;
|
||||||
|
+ tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
|
||||||
|
|
||||||
|
ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
|
||||||
|
arvif->bssid,
|
||||||
|
@@ -1649,7 +1649,7 @@ static void ath11k_mac_handle_beacon_ite
|
||||||
|
{
|
||||||
|
struct sk_buff *skb = data;
|
||||||
|
struct ieee80211_mgmt *mgmt = (void *)skb->data;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
|
||||||
|
if (vif->type != NL80211_IFTYPE_STATION)
|
||||||
|
return;
|
||||||
|
@@ -1672,7 +1672,7 @@ static void ath11k_mac_handle_beacon_mis
|
||||||
|
struct ieee80211_vif *vif)
|
||||||
|
{
|
||||||
|
u32 *vdev_id = data;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct ath11k *ar = arvif->ar;
|
||||||
|
struct ieee80211_hw *hw = ar->hw;
|
||||||
|
|
||||||
|
@@ -1718,7 +1718,7 @@ static void ath11k_peer_assoc_h_basic(st
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
u32 aid;
|
||||||
|
|
||||||
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
@@ -1746,7 +1746,7 @@ static void ath11k_peer_assoc_h_crypto(s
|
||||||
|
struct ieee80211_bss_conf *info = &vif->bss_conf;
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
struct cfg80211_bss *bss;
|
||||||
|
- struct ath11k_vif *arvif = (struct ath11k_vif *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
const u8 *rsnie = NULL;
|
||||||
|
const u8 *wpaie = NULL;
|
||||||
|
|
||||||
|
@@ -1804,7 +1804,7 @@ static void ath11k_peer_assoc_h_rates(st
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
const struct ieee80211_supported_band *sband;
|
||||||
|
@@ -1867,7 +1867,7 @@ static void ath11k_peer_assoc_h_ht(struc
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
const struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
enum nl80211_band band;
|
||||||
|
const u8 *ht_mcs_mask;
|
||||||
|
@@ -2064,7 +2064,7 @@ static void ath11k_peer_assoc_h_vht(stru
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
const struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
enum nl80211_band band;
|
||||||
|
u16 *vht_mcs_mask;
|
||||||
|
@@ -2261,7 +2261,7 @@ static void ath11k_peer_assoc_h_he(struc
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
const struct ieee80211_sta_he_cap *he_cap = &sta->deflink.he_cap;
|
||||||
|
enum nl80211_band band;
|
||||||
|
@@ -2584,7 +2584,7 @@ static void ath11k_peer_assoc_h_qos(stru
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
|
||||||
|
switch (arvif->vdev_type) {
|
||||||
|
case WMI_VDEV_TYPE_AP:
|
||||||
|
@@ -2747,7 +2747,7 @@ static void ath11k_peer_assoc_h_phymode(
|
||||||
|
struct ieee80211_sta *sta,
|
||||||
|
struct peer_assoc_params *arg)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
enum nl80211_band band;
|
||||||
|
const u8 *ht_mcs_mask;
|
||||||
|
@@ -2933,7 +2933,7 @@ static bool ath11k_mac_vif_recalc_sta_he
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta_he_cap *he_cap)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct ieee80211_he_cap_elem he_cap_elem = {0};
|
||||||
|
struct ieee80211_sta_he_cap *cap_band = NULL;
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
@@ -2995,7 +2995,7 @@ static void ath11k_bss_assoc(struct ieee
|
||||||
|
struct ieee80211_bss_conf *bss_conf)
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct peer_assoc_params peer_arg;
|
||||||
|
struct ieee80211_sta *ap_sta;
|
||||||
|
struct ath11k_peer *peer;
|
||||||
|
@@ -3111,7 +3111,7 @@ static void ath11k_bss_disassoc(struct i
|
||||||
|
struct ieee80211_vif *vif)
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
@@ -3160,7 +3160,7 @@ static void ath11k_recalculate_mgmt_rate
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct cfg80211_chan_def *def)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
const struct ieee80211_supported_band *sband;
|
||||||
|
u8 basic_rate_idx;
|
||||||
|
int hw_rate_code;
|
||||||
|
@@ -4632,7 +4632,7 @@ static int ath11k_station_disassoc(struc
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
@@ -5160,7 +5160,7 @@ static int ath11k_mac_op_sta_set_txpwr(s
|
||||||
|
struct ieee80211_sta *sta)
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
int ret = 0;
|
||||||
|
s16 txpwr;
|
||||||
|
|
||||||
|
@@ -5210,7 +5210,7 @@ static void ath11k_mac_op_sta_rc_update(
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct ath11k_peer *peer;
|
||||||
|
u32 bw, smps;
|
||||||
|
|
||||||
|
@@ -5337,7 +5337,7 @@ static int ath11k_mac_op_conf_tx(struct
|
||||||
|
const struct ieee80211_tx_queue_params *params)
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct wmi_wmm_params_arg *p = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
@@ -6458,7 +6458,7 @@ static int ath11k_mac_setup_vdev_params_
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- tx_arvif = (void *)tx_vif->drv_priv;
|
||||||
|
+ tx_arvif = ath11k_vif_to_arvif(tx_vif);
|
||||||
|
|
||||||
|
if (arvif->vif->bss_conf.nontransmitted) {
|
||||||
|
if (ar->hw->wiphy != ieee80211_vif_to_wdev(tx_vif)->wiphy)
|
||||||
|
@@ -7411,7 +7411,7 @@ ath11k_mac_update_vif_chan(struct ath11k
|
||||||
|
/* TODO: Update ar->rx_channel */
|
||||||
|
|
||||||
|
for (i = 0; i < n_vifs; i++) {
|
||||||
|
- arvif = (void *)vifs[i].vif->drv_priv;
|
||||||
|
+ arvif = ath11k_vif_to_arvif(vifs[i].vif);
|
||||||
|
|
||||||
|
if (WARN_ON(!arvif->is_started))
|
||||||
|
continue;
|
||||||
|
@@ -7453,7 +7453,7 @@ ath11k_mac_update_vif_chan(struct ath11k
|
||||||
|
|
||||||
|
mbssid_tx_vif = arvif->vif->mbssid_tx_vif;
|
||||||
|
if (mbssid_tx_vif)
|
||||||
|
- tx_arvif = (struct ath11k_vif *)mbssid_tx_vif->drv_priv;
|
||||||
|
+ tx_arvif = ath11k_vif_to_arvif(mbssid_tx_vif);
|
||||||
|
|
||||||
|
ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
|
||||||
|
arvif->bssid,
|
||||||
|
@@ -7549,7 +7549,7 @@ static int ath11k_start_vdev_delay(struc
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
struct ath11k_base *ab = ar->ab;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (WARN_ON(arvif->is_started))
|
||||||
|
@@ -7599,7 +7599,7 @@ ath11k_mac_op_assign_vif_chanctx(struct
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
struct ath11k_base *ab = ar->ab;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
int ret;
|
||||||
|
struct peer_create_params param;
|
||||||
|
|
||||||
|
@@ -7689,7 +7689,7 @@ ath11k_mac_op_unassign_vif_chanctx(struc
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
struct ath11k_base *ab = ar->ab;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct ath11k_peer *peer;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
@@ -8310,7 +8310,7 @@ ath11k_mac_op_set_bitrate_mask(struct ie
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
const struct cfg80211_bitrate_mask *mask)
|
||||||
|
{
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct cfg80211_chan_def def;
|
||||||
|
struct ath11k_pdev_cap *cap;
|
||||||
|
struct ath11k *ar = arvif->ar;
|
||||||
|
@@ -8907,7 +8907,7 @@ static int ath11k_mac_op_remain_on_chann
|
||||||
|
enum ieee80211_roc_type type)
|
||||||
|
{
|
||||||
|
struct ath11k *ar = hw->priv;
|
||||||
|
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
|
||||||
|
+ struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
struct scan_req_params arg;
|
||||||
|
int ret;
|
||||||
|
u32 scan_time_msec;
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/testmode.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/testmode.c
|
||||||
|
@@ -350,7 +350,7 @@ static int ath11k_tm_cmd_wmi(struct ath1
|
||||||
|
if (ar->ab->fw_mode != ATH11K_FIRMWARE_MODE_FTM &&
|
||||||
|
(tag == WMI_TAG_VDEV_SET_PARAM_CMD || tag == WMI_TAG_UNIT_TEST_CMD)) {
|
||||||
|
if (vif) {
|
||||||
|
- arvif = (struct ath11k_vif *)vif->drv_priv;
|
||||||
|
+ arvif = ath11k_vif_to_arvif(vif);
|
||||||
|
*ptr = arvif->vdev_id;
|
||||||
|
} else {
|
||||||
|
ret = -EINVAL;
|
|
@ -0,0 +1,50 @@
|
||||||
|
From d68a283bfc39aeed2a51c67804e014bf4b35c7e1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Date: Tue, 22 Aug 2023 07:50:49 -0700
|
||||||
|
Subject: [PATCH] wifi: ath11k: Fix a few spelling errors
|
||||||
|
|
||||||
|
Fix a few issues flagged by 'codespell'.
|
||||||
|
|
||||||
|
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Acked-by: Randy Dunlap <rdunlap@infradead.org>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230822-ath_spelling-v1-2-8e2698759564@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/dp.h | 2 +-
|
||||||
|
drivers/net/wireless/ath/ath11k/dp_rx.c | 2 +-
|
||||||
|
drivers/net/wireless/ath/ath11k/dp_tx.c | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp.h
|
||||||
|
@@ -635,7 +635,7 @@ enum htt_ppdu_stats_tag_type {
|
||||||
|
* b'24 - status_swap: 1 is to swap status TLV
|
||||||
|
* b'25 - pkt_swap: 1 is to swap packet TLV
|
||||||
|
* b'26:31 - rsvd1: reserved for future use
|
||||||
|
- * dword1 - b'0:16 - ring_buffer_size: size of bufferes referenced by rx ring,
|
||||||
|
+ * dword1 - b'0:16 - ring_buffer_size: size of buffers referenced by rx ring,
|
||||||
|
* in byte units.
|
||||||
|
* Valid only for HW_TO_SW_RING and SW_TO_HW_RING
|
||||||
|
* - b'16:31 - rsvd2: Reserved for future use
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
|
@@ -3423,7 +3423,7 @@ static int ath11k_dp_rx_h_defrag_reo_rei
|
||||||
|
ath11k_hal_rx_buf_addr_info_set(msdu0, paddr, cookie,
|
||||||
|
ab->hw_params.hal_params->rx_buf_rbm);
|
||||||
|
|
||||||
|
- /* Fill mpdu details into reo entrace ring */
|
||||||
|
+ /* Fill mpdu details into reo entrance ring */
|
||||||
|
srng = &ab->hal.srng_list[ab->dp.reo_reinject_ring.ring_id];
|
||||||
|
|
||||||
|
spin_lock_bh(&srng->lock);
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
||||||
|
@@ -238,7 +238,7 @@ tcl_ring_sel:
|
||||||
|
spin_unlock_bh(&tcl_ring->lock);
|
||||||
|
ret = -ENOMEM;
|
||||||
|
|
||||||
|
- /* Checking for available tcl descritors in another ring in
|
||||||
|
+ /* Checking for available tcl descriptors in another ring in
|
||||||
|
* case of failure due to full tcl ring now, is better than
|
||||||
|
* checking this ring earlier for each pkt tx.
|
||||||
|
* Restart ring selection if some rings are not checked yet.
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 749a660b39030bfbacc366cd8670df2ee0e878b2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yang Yingliang <yangyingliang@huawei.com>
|
||||||
|
Date: Fri, 4 Aug 2023 17:12:55 +0800
|
||||||
|
Subject: [PATCH] wifi: ath11k: simplify the code with module_platform_driver
|
||||||
|
|
||||||
|
The init/exit() of driver only calls platform_driver_register/unregister,
|
||||||
|
it can be simpilfied with module_platform_driver.
|
||||||
|
|
||||||
|
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230804091255.1347178-1-yangyingliang@huawei.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/ahb.c | 12 +-----------
|
||||||
|
1 file changed, 1 insertion(+), 11 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
@@ -1306,17 +1306,7 @@ static struct platform_driver ath11k_ahb
|
||||||
|
.shutdown = ath11k_ahb_shutdown,
|
||||||
|
};
|
||||||
|
|
||||||
|
-static int ath11k_ahb_init(void)
|
||||||
|
-{
|
||||||
|
- return platform_driver_register(&ath11k_ahb_driver);
|
||||||
|
-}
|
||||||
|
-module_init(ath11k_ahb_init);
|
||||||
|
-
|
||||||
|
-static void ath11k_ahb_exit(void)
|
||||||
|
-{
|
||||||
|
- platform_driver_unregister(&ath11k_ahb_driver);
|
||||||
|
-}
|
||||||
|
-module_exit(ath11k_ahb_exit);
|
||||||
|
+module_platform_driver(ath11k_ahb_driver);
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11ax WLAN AHB devices");
|
||||||
|
MODULE_LICENSE("Dual BSD/GPL");
|
|
@ -0,0 +1,29 @@
|
||||||
|
From 6763ef191d672ff3c2db0622652d49b0c0a60c4a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||||
|
Date: Thu, 10 Aug 2023 11:12:23 +0200
|
||||||
|
Subject: [PATCH] wifi: ath11k: fix Wvoid-pointer-to-enum-cast warning
|
||||||
|
|
||||||
|
'hw_rev' is an enum, thus cast of pointer on 64-bit compile test with W=1
|
||||||
|
causes:
|
||||||
|
|
||||||
|
h11k/ahb.c:1124:11: error: cast to smaller integer type 'enum ath11k_hw_rev' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast]
|
||||||
|
|
||||||
|
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230810091224.70088-1-krzysztof.kozlowski@linaro.org
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/ahb.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
|
@@ -1096,7 +1096,7 @@ static int ath11k_ahb_probe(struct platf
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- hw_rev = (enum ath11k_hw_rev)of_id->data;
|
||||||
|
+ hw_rev = (uintptr_t)of_id->data;
|
||||||
|
|
||||||
|
switch (hw_rev) {
|
||||||
|
case ATH11K_HW_IPQ8074:
|
|
@ -0,0 +1,44 @@
|
||||||
|
From adb0b206709f4f2f1256a1ea20619ab98e99f2e7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yue Haibing <yuehaibing@huawei.com>
|
||||||
|
Date: Fri, 11 Aug 2023 18:44:13 +0800
|
||||||
|
Subject: [PATCH] wifi: ath11k: Remove unused declarations
|
||||||
|
|
||||||
|
Commit 2c3960c2253d ("ath11k: setup ce tasklet for control path")
|
||||||
|
declared but never implemented ath11k_ce_map_service_to_pipe().
|
||||||
|
Commit e3396b8bddd2 ("ath11k: ce: support different CE configurations")
|
||||||
|
declared but never implemented ath11k_ce_attr_attach().
|
||||||
|
Commit d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
|
||||||
|
declared but never implemented ath11k_qmi_event_work()/ath11k_qmi_msg_recv_work().
|
||||||
|
|
||||||
|
Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230811104413.33668-1-yuehaibing@huawei.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/ce.h | 3 ---
|
||||||
|
drivers/net/wireless/ath/ath11k/qmi.h | 2 --
|
||||||
|
2 files changed, 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/ce.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/ce.h
|
||||||
|
@@ -203,9 +203,6 @@ int ath11k_ce_alloc_pipes(struct ath11k_
|
||||||
|
void ath11k_ce_free_pipes(struct ath11k_base *ab);
|
||||||
|
int ath11k_ce_get_attr_flags(struct ath11k_base *ab, int ce_id);
|
||||||
|
void ath11k_ce_poll_send_completed(struct ath11k_base *ab, u8 pipe_id);
|
||||||
|
-int ath11k_ce_map_service_to_pipe(struct ath11k_base *ab, u16 service_id,
|
||||||
|
- u8 *ul_pipe, u8 *dl_pipe);
|
||||||
|
-int ath11k_ce_attr_attach(struct ath11k_base *ab);
|
||||||
|
void ath11k_ce_get_shadow_config(struct ath11k_base *ab,
|
||||||
|
u32 **shadow_cfg, u32 *shadow_cfg_len);
|
||||||
|
void ath11k_ce_stop_shadow_timers(struct ath11k_base *ab);
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/qmi.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.h
|
||||||
|
@@ -514,8 +514,6 @@ struct qmi_wlanfw_wlan_ini_resp_msg_v01
|
||||||
|
int ath11k_qmi_firmware_start(struct ath11k_base *ab,
|
||||||
|
u32 mode);
|
||||||
|
void ath11k_qmi_firmware_stop(struct ath11k_base *ab);
|
||||||
|
-void ath11k_qmi_event_work(struct work_struct *work);
|
||||||
|
-void ath11k_qmi_msg_recv_work(struct work_struct *work);
|
||||||
|
void ath11k_qmi_deinit_service(struct ath11k_base *ab);
|
||||||
|
int ath11k_qmi_init_service(struct ath11k_base *ab);
|
||||||
|
void ath11k_qmi_free_resource(struct ath11k_base *ab);
|
|
@ -0,0 +1,34 @@
|
||||||
|
From 4a93b554cf9fa64faa7cf164c0d32fc3ce67108b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Arowa Suliman <arowa@chromium.org>
|
||||||
|
Date: Sat, 26 Aug 2023 08:42:42 +0300
|
||||||
|
Subject: [PATCH] wifi: ath11k: mhi: add a warning message for MHI_CB_EE_RDDM
|
||||||
|
crash
|
||||||
|
|
||||||
|
Currently, the ath11k driver does not print a crash signature when a
|
||||||
|
MHI_CB_EE_RDDM crash happens. Checked by triggering a simulated crash using the
|
||||||
|
command and checking dmesg for logs:
|
||||||
|
|
||||||
|
echo assert > /sys/kernel/debug/ath11k/../simulate_fw_crash
|
||||||
|
|
||||||
|
Add a warning when firmware crash MHI_CB_EE_RDDM happens.
|
||||||
|
|
||||||
|
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.23
|
||||||
|
|
||||||
|
Signed-off-by: Arowa Suliman <arowa@chromium.org>
|
||||||
|
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/20230714001126.463127-1-arowa@chromium.org
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/mhi.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/mhi.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/mhi.c
|
||||||
|
@@ -333,6 +333,7 @@ static void ath11k_mhi_op_status_cb(stru
|
||||||
|
ath11k_warn(ab, "firmware crashed: MHI_CB_SYS_ERROR\n");
|
||||||
|
break;
|
||||||
|
case MHI_CB_EE_RDDM:
|
||||||
|
+ ath11k_warn(ab, "firmware crashed: MHI_CB_EE_RDDM\n");
|
||||||
|
if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
|
||||||
|
queue_work(ab->workqueue_aux, &ab->reset_work);
|
||||||
|
break;
|
|
@ -0,0 +1,75 @@
|
||||||
|
From 5bd2ced044bb95029d5c44cf7d23ced73e0fc05b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Date: Sat, 26 Aug 2023 08:42:46 +0300
|
||||||
|
Subject: [PATCH] wifi: ath11k: move references from rsvd2 to info fields
|
||||||
|
|
||||||
|
Remove references to reserved fields and add new info fields for
|
||||||
|
struct hal_rx_ppdu_end_user_stats. Reserved fields should not be
|
||||||
|
accessed, therefore existing references to it are to be changed to
|
||||||
|
referencing specific info fields.
|
||||||
|
|
||||||
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/1692827868-15667-1-git-send-email-quic_msinada@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
|
||||||
|
drivers/net/wireless/ath/ath11k/hal_rx.h | 11 ++++++++---
|
||||||
|
2 files changed, 13 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||||
|
@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
|
||||||
|
|
||||||
|
rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
|
||||||
|
|
||||||
|
- rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->rsvd2[10]);
|
||||||
|
+ rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
@@ -825,11 +825,11 @@ ath11k_hal_rx_populate_byte_count(void *
|
||||||
|
(struct hal_rx_ppdu_end_user_stats *)rx_tlv;
|
||||||
|
|
||||||
|
rx_user_status->mpdu_ok_byte_count =
|
||||||
|
- FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT,
|
||||||
|
- __le32_to_cpu(ppdu_end_user->rsvd2[6]));
|
||||||
|
+ FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
|
||||||
|
+ __le32_to_cpu(ppdu_end_user->info7));
|
||||||
|
rx_user_status->mpdu_err_byte_count =
|
||||||
|
- FIELD_GET(HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT,
|
||||||
|
- __le32_to_cpu(ppdu_end_user->rsvd2[8]));
|
||||||
|
+ FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
|
||||||
|
+ __le32_to_cpu(ppdu_end_user->info8));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||||
|
@@ -222,8 +222,8 @@ struct hal_rx_ppdu_start {
|
||||||
|
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)
|
||||||
|
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||||
|
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_6_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_RSVD2_8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
|
||||||
|
struct hal_rx_ppdu_end_user_stats {
|
||||||
|
__le32 rsvd0[2];
|
||||||
|
@@ -236,7 +236,12 @@ struct hal_rx_ppdu_end_user_stats {
|
||||||
|
__le32 info4;
|
||||||
|
__le32 info5;
|
||||||
|
__le32 info6;
|
||||||
|
- __le32 rsvd2[11];
|
||||||
|
+ __le32 rsvd2[5];
|
||||||
|
+ __le32 info7;
|
||||||
|
+ __le32 rsvd3;
|
||||||
|
+ __le32 info8;
|
||||||
|
+ __le32 rsvd3[2];
|
||||||
|
+ __le32 info9;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct hal_rx_ppdu_end_user_stats_ext {
|
|
@ -0,0 +1,100 @@
|
||||||
|
From 7791487cd16cafd018cba0bf73789111a9f16843 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Date: Sat, 26 Aug 2023 08:42:46 +0300
|
||||||
|
Subject: [PATCH] wifi: ath11k: fix tid bitmap is 0 in peer rx mu stats
|
||||||
|
|
||||||
|
Correct parsing of reading offset for rx tid 16 bit bitmap. Incorrect
|
||||||
|
offset caused peer rx mu stats tid bitmap to always be zero. This
|
||||||
|
correction is in the software context and does not affect the
|
||||||
|
firmware interface.
|
||||||
|
|
||||||
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00356-QCAHKSWPL_SILICONZ-1
|
||||||
|
|
||||||
|
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||||
|
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||||
|
Link: https://lore.kernel.org/r/1692827868-15667-2-git-send-email-quic_msinada@quicinc.com
|
||||||
|
---
|
||||||
|
drivers/net/wireless/ath/ath11k/hal_rx.c | 10 +++++-----
|
||||||
|
drivers/net/wireless/ath/ath11k/hal_rx.h | 17 +++++++++--------
|
||||||
|
2 files changed, 14 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||||
|
@@ -814,7 +814,7 @@ ath11k_hal_rx_handle_ofdma_info(void *rx
|
||||||
|
|
||||||
|
rx_user_status->ul_ofdma_user_v0_word0 = __le32_to_cpu(ppdu_end_user->info6);
|
||||||
|
|
||||||
|
- rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info9);
|
||||||
|
+ rx_user_status->ul_ofdma_user_v0_word1 = __le32_to_cpu(ppdu_end_user->info10);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
@@ -826,10 +826,10 @@ ath11k_hal_rx_populate_byte_count(void *
|
||||||
|
|
||||||
|
rx_user_status->mpdu_ok_byte_count =
|
||||||
|
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT,
|
||||||
|
- __le32_to_cpu(ppdu_end_user->info7));
|
||||||
|
+ __le32_to_cpu(ppdu_end_user->info8));
|
||||||
|
rx_user_status->mpdu_err_byte_count =
|
||||||
|
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT,
|
||||||
|
- __le32_to_cpu(ppdu_end_user->info8));
|
||||||
|
+ __le32_to_cpu(ppdu_end_user->info9));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
@@ -903,8 +903,8 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||||
|
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX,
|
||||||
|
__le32_to_cpu(eu_stats->info2));
|
||||||
|
ppdu_info->tid =
|
||||||
|
- ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP,
|
||||||
|
- __le32_to_cpu(eu_stats->info6))) - 1;
|
||||||
|
+ ffs(FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP,
|
||||||
|
+ __le32_to_cpu(eu_stats->info7))) - 1;
|
||||||
|
ppdu_info->tcp_msdu_count =
|
||||||
|
FIELD_GET(HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT,
|
||||||
|
__le32_to_cpu(eu_stats->info4));
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
|
||||||
|
@@ -149,7 +149,7 @@ struct hal_rx_mon_ppdu_info {
|
||||||
|
u8 beamformed;
|
||||||
|
u8 rssi_comb;
|
||||||
|
u8 rssi_chain_pri20[HAL_RX_MAX_NSS];
|
||||||
|
- u8 tid;
|
||||||
|
+ u16 tid;
|
||||||
|
u16 ht_flags;
|
||||||
|
u16 vht_flags;
|
||||||
|
u16 he_flags;
|
||||||
|
@@ -219,11 +219,11 @@ struct hal_rx_ppdu_start {
|
||||||
|
#define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT GENMASK(15, 0)
|
||||||
|
#define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT GENMASK(31, 16)
|
||||||
|
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_BITMAP GENMASK(15, 0)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO7_TID_EOSP_BITMAP GENMASK(31, 16)
|
||||||
|
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
-#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_OK_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
+#define HAL_RX_PPDU_END_USER_STATS_INFO9_MPDU_ERR_BYTE_COUNT GENMASK(24, 0)
|
||||||
|
|
||||||
|
struct hal_rx_ppdu_end_user_stats {
|
||||||
|
__le32 rsvd0[2];
|
||||||
|
@@ -236,12 +236,13 @@ struct hal_rx_ppdu_end_user_stats {
|
||||||
|
__le32 info4;
|
||||||
|
__le32 info5;
|
||||||
|
__le32 info6;
|
||||||
|
- __le32 rsvd2[5];
|
||||||
|
__le32 info7;
|
||||||
|
- __le32 rsvd3;
|
||||||
|
+ __le32 rsvd2[4];
|
||||||
|
__le32 info8;
|
||||||
|
- __le32 rsvd3[2];
|
||||||
|
+ __le32 rsvd3;
|
||||||
|
__le32 info9;
|
||||||
|
+ __le32 rsvd4[2];
|
||||||
|
+ __le32 info10;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct hal_rx_ppdu_end_user_stats_ext {
|
|
@ -93,7 +93,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
default:
|
default:
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
}
|
}
|
||||||
@@ -336,27 +366,14 @@ static void ath11k_mhi_op_status_cb(stru
|
@@ -337,27 +367,14 @@ static void ath11k_mhi_op_status_cb(stru
|
||||||
if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
|
if (!(test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)))
|
||||||
queue_work(ab->workqueue_aux, &ab->reset_work);
|
queue_work(ab->workqueue_aux, &ab->reset_work);
|
||||||
break;
|
break;
|
||||||
|
@ -138,7 +138,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
int ath11k_mhi_register(struct ath11k_pci *ar_pci);
|
int ath11k_mhi_register(struct ath11k_pci *ar_pci);
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -370,13 +370,20 @@ static void ath11k_pci_sw_reset(struct a
|
@@ -371,13 +371,20 @@ static void ath11k_pci_sw_reset(struct a
|
||||||
static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab)
|
static void ath11k_pci_init_qmi_ce_config(struct ath11k_base *ab)
|
||||||
{
|
{
|
||||||
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg;
|
||||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -458,7 +458,11 @@ static int ath11k_pci_alloc_msi(struct a
|
@@ -459,7 +459,11 @@ static int ath11k_pci_alloc_msi(struct a
|
||||||
pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
|
pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
|
||||||
&ab->pci.msi.addr_lo);
|
&ab->pci.msi.addr_lo);
|
||||||
|
|
||||||
|
|
|
@ -8,17 +8,19 @@ so until that is resolved disabled it to allow using the radio.
|
||||||
|
|
||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
---
|
---
|
||||||
drivers/net/wireless/ath/ath11k/core.c | 2 +-
|
drivers/net/wireless/ath/ath11k/core.c | 4 ++--
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||||
@@ -86,7 +86,7 @@ static const struct ath11k_hw_params ath
|
@@ -86,8 +86,8 @@ static const struct ath11k_hw_params ath
|
||||||
.supports_shadow_regs = false,
|
.supports_shadow_regs = false,
|
||||||
.idle_ps = false,
|
.idle_ps = false,
|
||||||
.supports_sta_ps = false,
|
.supports_sta_ps = false,
|
||||||
- .cold_boot_calib = true,
|
- .coldboot_cal_mm = true,
|
||||||
+ .cold_boot_calib = false,
|
- .coldboot_cal_ftm = true,
|
||||||
|
+ .coldboot_cal_mm = false,
|
||||||
|
+ .coldboot_cal_ftm = false,
|
||||||
.cbcal_restart_fw = true,
|
.cbcal_restart_fw = true,
|
||||||
.fw_mem_mode = 0,
|
.fw_mem_mode = 0,
|
||||||
.num_vdevs = 16 + 1,
|
.num_vdevs = 16 + 1,
|
||||||
|
|
|
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
{
|
{
|
||||||
.hw_rev = ATH11K_HW_IPQ8074,
|
.hw_rev = ATH11K_HW_IPQ8074,
|
||||||
.name = "ipq8074 hw2.0",
|
.name = "ipq8074 hw2.0",
|
||||||
@@ -1954,7 +1954,8 @@ static void ath11k_core_reset(struct wor
|
@@ -1974,7 +1974,8 @@ static void ath11k_core_reset(struct wor
|
||||||
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
||||||
{
|
{
|
||||||
const struct ath11k_hw_params *hw_params = NULL;
|
const struct ath11k_hw_params *hw_params = NULL;
|
||||||
|
@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
||||||
hw_params = &ath11k_hw_params[i];
|
hw_params = &ath11k_hw_params[i];
|
||||||
@@ -1970,7 +1971,30 @@ static int ath11k_init_hw_params(struct
|
@@ -1990,7 +1991,31 @@ static int ath11k_init_hw_params(struct
|
||||||
|
|
||||||
ab->hw_params = *hw_params;
|
ab->hw_params = *hw_params;
|
||||||
|
|
||||||
|
@ -62,7 +62,8 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
+ ab->hw_params.fw_mem_mode = 2;
|
+ ab->hw_params.fw_mem_mode = 2;
|
||||||
+ ab->hw_params.num_vdevs = 8;
|
+ ab->hw_params.num_vdevs = 8;
|
||||||
+ ab->hw_params.num_peers = 128;
|
+ ab->hw_params.num_peers = 128;
|
||||||
+ ab->hw_params.cold_boot_calib = false;
|
+ ab->hw_params.coldboot_cal_mm = false;
|
||||||
|
+ ab->hw_params.coldboot_cal_ftm = false;
|
||||||
+ } else
|
+ } else
|
||||||
+ ath11k_info(ab, "Unsupported FW memory mode: %u\n", fw_mem_mode);
|
+ ath11k_info(ab, "Unsupported FW memory mode: %u\n", fw_mem_mode);
|
||||||
+ }
|
+ }
|
||||||
|
|
|
@ -0,0 +1,467 @@
|
||||||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
Date: Mon, 28 Aug 2023 09:54:39 +0200
|
||||||
|
Subject: [PATCH] wifi: cfg80211: annotate iftype_data pointer with sparse
|
||||||
|
|
||||||
|
There were are a number of cases in mac80211 and iwlwifi (at
|
||||||
|
least) that used the sband->iftype_data pointer directly,
|
||||||
|
instead of using the accessors to find the right array entry
|
||||||
|
to use.
|
||||||
|
|
||||||
|
Make sparse warn when such a thing is done.
|
||||||
|
|
||||||
|
To not have a lot of casts, add two helper functions/macros
|
||||||
|
|
||||||
|
- ieee80211_set_sband_iftype_data()
|
||||||
|
- for_each_sband_iftype_data()
|
||||||
|
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
|
@@ -5893,8 +5893,9 @@ static void ath11k_mac_setup_he_cap(stru
|
||||||
|
ar->mac.iftype[NL80211_BAND_2GHZ],
|
||||||
|
NL80211_BAND_2GHZ);
|
||||||
|
band = &ar->mac.sbands[NL80211_BAND_2GHZ];
|
||||||
|
- band->iftype_data = ar->mac.iftype[NL80211_BAND_2GHZ];
|
||||||
|
- band->n_iftype_data = count;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band,
|
||||||
|
+ ar->mac.iftype[NL80211_BAND_2GHZ],
|
||||||
|
+ count);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cap->supported_bands & WMI_HOST_WLAN_5G_CAP) {
|
||||||
|
@@ -5902,8 +5903,9 @@ static void ath11k_mac_setup_he_cap(stru
|
||||||
|
ar->mac.iftype[NL80211_BAND_5GHZ],
|
||||||
|
NL80211_BAND_5GHZ);
|
||||||
|
band = &ar->mac.sbands[NL80211_BAND_5GHZ];
|
||||||
|
- band->iftype_data = ar->mac.iftype[NL80211_BAND_5GHZ];
|
||||||
|
- band->n_iftype_data = count;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band,
|
||||||
|
+ ar->mac.iftype[NL80211_BAND_5GHZ],
|
||||||
|
+ count);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cap->supported_bands & WMI_HOST_WLAN_5G_CAP &&
|
||||||
|
@@ -5912,8 +5914,9 @@ static void ath11k_mac_setup_he_cap(stru
|
||||||
|
ar->mac.iftype[NL80211_BAND_6GHZ],
|
||||||
|
NL80211_BAND_6GHZ);
|
||||||
|
band = &ar->mac.sbands[NL80211_BAND_6GHZ];
|
||||||
|
- band->iftype_data = ar->mac.iftype[NL80211_BAND_6GHZ];
|
||||||
|
- band->n_iftype_data = count;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band,
|
||||||
|
+ ar->mac.iftype[NL80211_BAND_6GHZ],
|
||||||
|
+ count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
|
||||||
|
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
|
||||||
|
@@ -1075,8 +1075,8 @@ static void iwl_init_he_hw_capab(struct
|
||||||
|
|
||||||
|
memcpy(iftype_data, iwl_he_eht_capa, sizeof(iwl_he_eht_capa));
|
||||||
|
|
||||||
|
- sband->iftype_data = iftype_data;
|
||||||
|
- sband->n_iftype_data = ARRAY_SIZE(iwl_he_eht_capa);
|
||||||
|
+ _ieee80211_set_sband_iftype_data(sband, iftype_data,
|
||||||
|
+ ARRAY_SIZE(iwl_he_eht_capa));
|
||||||
|
|
||||||
|
for (i = 0; i < sband->n_iftype_data; i++)
|
||||||
|
iwl_nvm_fixup_sband_iftd(trans, data, sband, &iftype_data[i],
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c
|
||||||
|
@@ -1119,8 +1119,7 @@ void mt7915_set_stream_he_caps(struct mt
|
||||||
|
n = mt7915_init_he_caps(phy, NL80211_BAND_2GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_2g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (phy->mt76->cap.has_5ghz) {
|
||||||
|
@@ -1128,8 +1127,7 @@ void mt7915_set_stream_he_caps(struct mt
|
||||||
|
n = mt7915_init_he_caps(phy, NL80211_BAND_5GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_5g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (phy->mt76->cap.has_6ghz) {
|
||||||
|
@@ -1137,8 +1135,7 @@ void mt7915_set_stream_he_caps(struct mt
|
||||||
|
n = mt7915_init_he_caps(phy, NL80211_BAND_6GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_6g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
|
||||||
|
@@ -196,8 +196,7 @@ void mt7921_set_stream_he_caps(struct mt
|
||||||
|
n = mt7921_init_he_caps(phy, NL80211_BAND_2GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_2g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (phy->mt76->cap.has_5ghz) {
|
||||||
|
@@ -205,16 +204,14 @@ void mt7921_set_stream_he_caps(struct mt
|
||||||
|
n = mt7921_init_he_caps(phy, NL80211_BAND_5GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_5g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
|
||||||
|
if (phy->mt76->cap.has_6ghz) {
|
||||||
|
data = phy->iftype[NL80211_BAND_6GHZ];
|
||||||
|
n = mt7921_init_he_caps(phy, NL80211_BAND_6GHZ, data);
|
||||||
|
|
||||||
|
band = &phy->mt76->sband_6g.sband;
|
||||||
|
- band->iftype_data = data;
|
||||||
|
- band->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, data, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
|
||||||
|
@@ -823,8 +823,7 @@ __mt7996_set_stream_he_eht_caps(struct m
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
- sband->iftype_data = data;
|
||||||
|
- sband->n_iftype_data = n;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(sband, data, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mt7996_set_stream_he_eht_caps(struct mt7996_phy *phy)
|
||||||
|
--- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
|
||||||
|
+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
|
||||||
|
@@ -1335,7 +1335,7 @@ static int qtnf_cmd_band_fill_iftype(con
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- kfree(band->iftype_data);
|
||||||
|
+ kfree((__force void *)band->iftype_data);
|
||||||
|
band->iftype_data = NULL;
|
||||||
|
band->n_iftype_data = tlv->n_iftype_data;
|
||||||
|
if (band->n_iftype_data == 0)
|
||||||
|
@@ -1347,7 +1347,8 @@ static int qtnf_cmd_band_fill_iftype(con
|
||||||
|
band->n_iftype_data = 0;
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
- band->iftype_data = iftype_data;
|
||||||
|
+
|
||||||
|
+ _ieee80211_set_sband_iftype_data(band, iftype_data, tlv->n_iftype_data);
|
||||||
|
|
||||||
|
for (i = 0; i < band->n_iftype_data; i++)
|
||||||
|
qtnf_cmd_conv_iftype(iftype_data++, &tlv->iftype_data[i]);
|
||||||
|
--- a/drivers/net/wireless/quantenna/qtnfmac/core.c
|
||||||
|
+++ b/drivers/net/wireless/quantenna/qtnfmac/core.c
|
||||||
|
@@ -549,7 +549,7 @@ static void qtnf_core_mac_detach(struct
|
||||||
|
if (!wiphy->bands[band])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- kfree(wiphy->bands[band]->iftype_data);
|
||||||
|
+ kfree((__force void *)wiphy->bands[band]->iftype_data);
|
||||||
|
wiphy->bands[band]->n_iftype_data = 0;
|
||||||
|
|
||||||
|
kfree(wiphy->bands[band]->channels);
|
||||||
|
--- a/drivers/net/wireless/realtek/rtw89/core.c
|
||||||
|
+++ b/drivers/net/wireless/realtek/rtw89/core.c
|
||||||
|
@@ -3328,8 +3328,7 @@ static void rtw89_init_he_cap(struct rtw
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
- sband->iftype_data = iftype_data;
|
||||||
|
- sband->n_iftype_data = idx;
|
||||||
|
+ _ieee80211_set_sband_iftype_data(sband, iftype_data, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rtw89_core_set_supported_band(struct rtw89_dev *rtwdev)
|
||||||
|
@@ -3374,11 +3373,11 @@ err:
|
||||||
|
hw->wiphy->bands[NL80211_BAND_5GHZ] = NULL;
|
||||||
|
hw->wiphy->bands[NL80211_BAND_6GHZ] = NULL;
|
||||||
|
if (sband_2ghz)
|
||||||
|
- kfree(sband_2ghz->iftype_data);
|
||||||
|
+ kfree((__force void *)sband_2ghz->iftype_data);
|
||||||
|
if (sband_5ghz)
|
||||||
|
- kfree(sband_5ghz->iftype_data);
|
||||||
|
+ kfree((__force void *)sband_5ghz->iftype_data);
|
||||||
|
if (sband_6ghz)
|
||||||
|
- kfree(sband_6ghz->iftype_data);
|
||||||
|
+ kfree((__force void *)sband_6ghz->iftype_data);
|
||||||
|
kfree(sband_2ghz);
|
||||||
|
kfree(sband_5ghz);
|
||||||
|
kfree(sband_6ghz);
|
||||||
|
@@ -3390,11 +3389,11 @@ static void rtw89_core_clr_supported_ban
|
||||||
|
struct ieee80211_hw *hw = rtwdev->hw;
|
||||||
|
|
||||||
|
if (hw->wiphy->bands[NL80211_BAND_2GHZ])
|
||||||
|
- kfree(hw->wiphy->bands[NL80211_BAND_2GHZ]->iftype_data);
|
||||||
|
+ kfree((__force void *)hw->wiphy->bands[NL80211_BAND_2GHZ]->iftype_data);
|
||||||
|
if (hw->wiphy->bands[NL80211_BAND_5GHZ])
|
||||||
|
- kfree(hw->wiphy->bands[NL80211_BAND_5GHZ]->iftype_data);
|
||||||
|
+ kfree((__force void *)hw->wiphy->bands[NL80211_BAND_5GHZ]->iftype_data);
|
||||||
|
if (hw->wiphy->bands[NL80211_BAND_6GHZ])
|
||||||
|
- kfree(hw->wiphy->bands[NL80211_BAND_6GHZ]->iftype_data);
|
||||||
|
+ kfree((__force void *)hw->wiphy->bands[NL80211_BAND_6GHZ]->iftype_data);
|
||||||
|
kfree(hw->wiphy->bands[NL80211_BAND_2GHZ]);
|
||||||
|
kfree(hw->wiphy->bands[NL80211_BAND_5GHZ]);
|
||||||
|
kfree(hw->wiphy->bands[NL80211_BAND_6GHZ]);
|
||||||
|
--- a/drivers/net/wireless/realtek/rtw89/regd.c
|
||||||
|
+++ b/drivers/net/wireless/realtek/rtw89/regd.c
|
||||||
|
@@ -376,7 +376,7 @@ bottom:
|
||||||
|
return;
|
||||||
|
|
||||||
|
wiphy->bands[NL80211_BAND_6GHZ] = NULL;
|
||||||
|
- kfree(sband->iftype_data);
|
||||||
|
+ kfree((__force void *)sband->iftype_data);
|
||||||
|
kfree(sband);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||||
|
+++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
|
||||||
|
@@ -4900,25 +4900,19 @@ static const struct ieee80211_sband_ifty
|
||||||
|
|
||||||
|
static void mac80211_hwsim_sband_capab(struct ieee80211_supported_band *sband)
|
||||||
|
{
|
||||||
|
- u16 n_iftype_data;
|
||||||
|
-
|
||||||
|
- if (sband->band == NL80211_BAND_2GHZ) {
|
||||||
|
- n_iftype_data = ARRAY_SIZE(sband_capa_2ghz);
|
||||||
|
- sband->iftype_data =
|
||||||
|
- (struct ieee80211_sband_iftype_data *)sband_capa_2ghz;
|
||||||
|
- } else if (sband->band == NL80211_BAND_5GHZ) {
|
||||||
|
- n_iftype_data = ARRAY_SIZE(sband_capa_5ghz);
|
||||||
|
- sband->iftype_data =
|
||||||
|
- (struct ieee80211_sband_iftype_data *)sband_capa_5ghz;
|
||||||
|
- } else if (sband->band == NL80211_BAND_6GHZ) {
|
||||||
|
- n_iftype_data = ARRAY_SIZE(sband_capa_6ghz);
|
||||||
|
- sband->iftype_data =
|
||||||
|
- (struct ieee80211_sband_iftype_data *)sband_capa_6ghz;
|
||||||
|
- } else {
|
||||||
|
- return;
|
||||||
|
+ switch (sband->band) {
|
||||||
|
+ case NL80211_BAND_2GHZ:
|
||||||
|
+ ieee80211_set_sband_iftype_data(sband, sband_capa_2ghz);
|
||||||
|
+ break;
|
||||||
|
+ case NL80211_BAND_5GHZ:
|
||||||
|
+ ieee80211_set_sband_iftype_data(sband, sband_capa_5ghz);
|
||||||
|
+ break;
|
||||||
|
+ case NL80211_BAND_6GHZ:
|
||||||
|
+ ieee80211_set_sband_iftype_data(sband, sband_capa_6ghz);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- sband->n_iftype_data = n_iftype_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CPTCFG_MAC80211_MESH
|
||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -415,6 +415,19 @@ struct ieee80211_sta_eht_cap {
|
||||||
|
u8 eht_ppe_thres[IEEE80211_EHT_PPE_THRES_MAX_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* sparse defines __CHECKER__; see Documentation/dev-tools/sparse.rst */
|
||||||
|
+#ifdef __CHECKER__
|
||||||
|
+/*
|
||||||
|
+ * This is used to mark the sband->iftype_data pointer which is supposed
|
||||||
|
+ * to be an array with special access semantics (per iftype), but a lot
|
||||||
|
+ * of code got it wrong in the past, so with this marking sparse will be
|
||||||
|
+ * noisy when the pointer is used directly.
|
||||||
|
+ */
|
||||||
|
+# define __iftd __attribute__((noderef, address_space(__iftype_data)))
|
||||||
|
+#else
|
||||||
|
+# define __iftd
|
||||||
|
+#endif /* __CHECKER__ */
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* struct ieee80211_sband_iftype_data - sband data per interface type
|
||||||
|
*
|
||||||
|
@@ -548,10 +561,48 @@ struct ieee80211_supported_band {
|
||||||
|
struct ieee80211_sta_s1g_cap s1g_cap;
|
||||||
|
struct ieee80211_edmg edmg_cap;
|
||||||
|
u16 n_iftype_data;
|
||||||
|
- const struct ieee80211_sband_iftype_data *iftype_data;
|
||||||
|
+ const struct ieee80211_sband_iftype_data __iftd *iftype_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * _ieee80211_set_sband_iftype_data - set sband iftype data array
|
||||||
|
+ * @sband: the sband to initialize
|
||||||
|
+ * @iftd: the iftype data array pointer
|
||||||
|
+ * @n_iftd: the length of the iftype data array
|
||||||
|
+ *
|
||||||
|
+ * Set the sband iftype data array; use this where the length cannot
|
||||||
|
+ * be derived from the ARRAY_SIZE() of the argument, but prefer
|
||||||
|
+ * ieee80211_set_sband_iftype_data() where it can be used.
|
||||||
|
+ */
|
||||||
|
+static inline void
|
||||||
|
+_ieee80211_set_sband_iftype_data(struct ieee80211_supported_band *sband,
|
||||||
|
+ const struct ieee80211_sband_iftype_data *iftd,
|
||||||
|
+ u16 n_iftd)
|
||||||
|
+{
|
||||||
|
+ sband->iftype_data = (const void __iftd __force *)iftd;
|
||||||
|
+ sband->n_iftype_data = n_iftd;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * ieee80211_set_sband_iftype_data - set sband iftype data array
|
||||||
|
+ * @sband: the sband to initialize
|
||||||
|
+ * @iftd: the iftype data array
|
||||||
|
+ */
|
||||||
|
+#define ieee80211_set_sband_iftype_data(sband, iftd) \
|
||||||
|
+ _ieee80211_set_sband_iftype_data(sband, iftd, ARRAY_SIZE(iftd))
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * for_each_sband_iftype_data - iterate sband iftype data entries
|
||||||
|
+ * @sband: the sband whose iftype_data array to iterate
|
||||||
|
+ * @i: iterator counter
|
||||||
|
+ * @iftd: iftype data pointer to set
|
||||||
|
+ */
|
||||||
|
+#define for_each_sband_iftype_data(sband, i, iftd) \
|
||||||
|
+ for (i = 0, iftd = (const void __force *)&(sband)->iftype_data[i]; \
|
||||||
|
+ i < (sband)->n_iftype_data; \
|
||||||
|
+ i++, iftd = (const void __force *)&(sband)->iftype_data[i])
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* ieee80211_get_sband_iftype_data - return sband data for a given iftype
|
||||||
|
* @sband: the sband to search for the STA on
|
||||||
|
* @iftype: enum nl80211_iftype
|
||||||
|
@@ -562,6 +613,7 @@ static inline const struct ieee80211_sba
|
||||||
|
ieee80211_get_sband_iftype_data(const struct ieee80211_supported_band *sband,
|
||||||
|
u8 iftype)
|
||||||
|
{
|
||||||
|
+ const struct ieee80211_sband_iftype_data *data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (WARN_ON(iftype >= NL80211_IFTYPE_MAX))
|
||||||
|
@@ -570,10 +622,7 @@ ieee80211_get_sband_iftype_data(const st
|
||||||
|
if (iftype == NL80211_IFTYPE_AP_VLAN)
|
||||||
|
iftype = NL80211_IFTYPE_AP;
|
||||||
|
|
||||||
|
- for (i = 0; i < sband->n_iftype_data; i++) {
|
||||||
|
- const struct ieee80211_sband_iftype_data *data =
|
||||||
|
- &sband->iftype_data[i];
|
||||||
|
-
|
||||||
|
+ for_each_sband_iftype_data(sband, i, data) {
|
||||||
|
if (data->types_mask & BIT(iftype))
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
--- a/net/mac80211/main.c
|
||||||
|
+++ b/net/mac80211/main.c
|
||||||
|
@@ -1055,6 +1055,7 @@ int ieee80211_register_hw(struct ieee802
|
||||||
|
supp_he = false;
|
||||||
|
supp_eht = false;
|
||||||
|
for (band = 0; band < NUM_NL80211_BANDS; band++) {
|
||||||
|
+ const struct ieee80211_sband_iftype_data *iftd;
|
||||||
|
struct ieee80211_supported_band *sband;
|
||||||
|
|
||||||
|
sband = local->hw.wiphy->bands[band];
|
||||||
|
@@ -1101,11 +1102,7 @@ int ieee80211_register_hw(struct ieee802
|
||||||
|
supp_ht = supp_ht || sband->ht_cap.ht_supported;
|
||||||
|
supp_vht = supp_vht || sband->vht_cap.vht_supported;
|
||||||
|
|
||||||
|
- for (i = 0; i < sband->n_iftype_data; i++) {
|
||||||
|
- const struct ieee80211_sband_iftype_data *iftd;
|
||||||
|
-
|
||||||
|
- iftd = &sband->iftype_data[i];
|
||||||
|
-
|
||||||
|
+ for_each_sband_iftype_data(sband, i, iftd) {
|
||||||
|
supp_he = supp_he || iftd->he_cap.has_he;
|
||||||
|
supp_eht = supp_eht || iftd->eht_cap.has_eht;
|
||||||
|
}
|
||||||
|
--- a/net/wireless/chan.c
|
||||||
|
+++ b/net/wireless/chan.c
|
||||||
|
@@ -6,7 +6,7 @@
|
||||||
|
*
|
||||||
|
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
|
||||||
|
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||||
|
- * Copyright 2018-2022 Intel Corporation
|
||||||
|
+ * Copyright 2018-2023 Intel Corporation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/export.h>
|
||||||
|
@@ -1162,8 +1162,7 @@ bool cfg80211_chandef_usable(struct wiph
|
||||||
|
if (!sband)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
- for (i = 0; i < sband->n_iftype_data; i++) {
|
||||||
|
- iftd = &sband->iftype_data[i];
|
||||||
|
+ for_each_sband_iftype_data(sband, i, iftd) {
|
||||||
|
if (!iftd->eht_cap.has_eht)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
--- a/net/wireless/core.c
|
||||||
|
+++ b/net/wireless/core.c
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||||
|
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||||
|
* Copyright 2015-2017 Intel Deutschland GmbH
|
||||||
|
- * Copyright (C) 2018-2022 Intel Corporation
|
||||||
|
+ * Copyright (C) 2018-2023 Intel Corporation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||||
|
@@ -817,6 +817,7 @@ int wiphy_register(struct wiphy *wiphy)
|
||||||
|
|
||||||
|
/* sanity check supported bands/channels */
|
||||||
|
for (band = 0; band < NUM_NL80211_BANDS; band++) {
|
||||||
|
+ const struct ieee80211_sband_iftype_data *iftd;
|
||||||
|
u16 types = 0;
|
||||||
|
bool have_he = false;
|
||||||
|
|
||||||
|
@@ -873,14 +874,11 @@ int wiphy_register(struct wiphy *wiphy)
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- for (i = 0; i < sband->n_iftype_data; i++) {
|
||||||
|
- const struct ieee80211_sband_iftype_data *iftd;
|
||||||
|
+ for_each_sband_iftype_data(sband, i, iftd) {
|
||||||
|
bool has_ap, has_non_ap;
|
||||||
|
u32 ap_bits = BIT(NL80211_IFTYPE_AP) |
|
||||||
|
BIT(NL80211_IFTYPE_P2P_GO);
|
||||||
|
|
||||||
|
- iftd = &sband->iftype_data[i];
|
||||||
|
-
|
||||||
|
if (WARN_ON(!iftd->types_mask))
|
||||||
|
return -EINVAL;
|
||||||
|
if (WARN_ON(types & iftd->types_mask))
|
||||||
|
--- a/net/wireless/nl80211.c
|
||||||
|
+++ b/net/wireless/nl80211.c
|
||||||
|
@@ -1906,20 +1906,20 @@ static int nl80211_send_band_rateinfo(st
|
||||||
|
struct nlattr *nl_iftype_data =
|
||||||
|
nla_nest_start_noflag(msg,
|
||||||
|
NL80211_BAND_ATTR_IFTYPE_DATA);
|
||||||
|
+ const struct ieee80211_sband_iftype_data *iftd;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (!nl_iftype_data)
|
||||||
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
- for (i = 0; i < sband->n_iftype_data; i++) {
|
||||||
|
+ for_each_sband_iftype_data(sband, i, iftd) {
|
||||||
|
struct nlattr *iftdata;
|
||||||
|
|
||||||
|
iftdata = nla_nest_start_noflag(msg, i + 1);
|
||||||
|
if (!iftdata)
|
||||||
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
- err = nl80211_send_iftype_data(msg, sband,
|
||||||
|
- &sband->iftype_data[i]);
|
||||||
|
+ err = nl80211_send_iftype_data(msg, sband, iftd);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
|
@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
||||||
|
|
||||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2023-08-14
|
PKG_SOURCE_DATE:=2023-09-18
|
||||||
PKG_SOURCE_VERSION:=b14c2351ddb8601c322576d84029e463d456caef
|
PKG_SOURCE_VERSION:=2afc7285f75dca5a0583fd917285bf33f1429cc6
|
||||||
PKG_MIRROR_HASH:=62b5e157ad525424b6857e77ed373e8d39d03af71b057f8b309d8b293d6eac5f
|
PKG_MIRROR_HASH:=2c9556b298246277ac2d65415e4449f98e6d5fdb99e0d0a92262f162df772bbc
|
||||||
|
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
PKG_USE_NINJA:=0
|
PKG_USE_NINJA:=0
|
||||||
|
@ -310,6 +310,38 @@ define KernelPackage/mt7921e
|
||||||
AUTOLOAD:=$(call AutoProbe,mt7921e)
|
AUTOLOAD:=$(call AutoProbe,mt7921e)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mt7996e
|
||||||
|
$(KernelPackage/mt76-default)
|
||||||
|
TITLE:=MediaTek MT7996E wireless driver
|
||||||
|
DEPENDS+=@PCI_SUPPORT +kmod-mt76-connac
|
||||||
|
FILES:= $(PKG_BUILD_DIR)/mt7996/mt7996e.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,mt7996e)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mt7925-common
|
||||||
|
$(KernelPackage/mt76-default)
|
||||||
|
TITLE:=MediaTek MT7925 wireless driver common code
|
||||||
|
HIDDEN:=1
|
||||||
|
DEPENDS+=+kmod-mt792x-common +@DRIVER_11AX_SUPPORT +kmod-hwmon-core
|
||||||
|
FILES:= $(PKG_BUILD_DIR)/mt7925/mt7925-common.ko
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mt7925u
|
||||||
|
$(KernelPackage/mt76-default)
|
||||||
|
TITLE:=MediaTek MT7925U wireless driver
|
||||||
|
DEPENDS+=+kmod-mt792x-usb +kmod-mt7925-common
|
||||||
|
FILES:= $(PKG_BUILD_DIR)/mt7925/mt7925u.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,mt7921u)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/mt7925e
|
||||||
|
$(KernelPackage/mt76-default)
|
||||||
|
TITLE:=MediaTek MT7925e wireless driver
|
||||||
|
DEPENDS+=@PCI_SUPPORT +kmod-mt7925-common
|
||||||
|
FILES:= $(PKG_BUILD_DIR)/mt7925/mt7925e.ko
|
||||||
|
AUTOLOAD:=$(call AutoProbe,mt7921e)
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/mt76-test
|
define Package/mt76-test
|
||||||
SECTION:=devel
|
SECTION:=devel
|
||||||
CATEGORY:=Development
|
CATEGORY:=Development
|
||||||
|
@ -418,6 +450,18 @@ endif
|
||||||
ifdef CONFIG_PACKAGE_kmod-mt7921e
|
ifdef CONFIG_PACKAGE_kmod-mt7921e
|
||||||
PKG_MAKE_FLAGS += CONFIG_MT7921E=m
|
PKG_MAKE_FLAGS += CONFIG_MT7921E=m
|
||||||
endif
|
endif
|
||||||
|
ifdef CONFIG_PACKAGE_kmod-mt7996e
|
||||||
|
PKG_MAKE_FLAGS += CONFIG_MT7996E=m
|
||||||
|
endif
|
||||||
|
ifdef CONFIG_PACKAGE_kmod-mt7925-common
|
||||||
|
PKG_MAKE_FLAGS += CONFIG_MT7925_COMMON=m
|
||||||
|
endif
|
||||||
|
ifdef CONFIG_PACKAGE_kmod-mt7925u
|
||||||
|
PKG_MAKE_FLAGS += CONFIG_MT7925U=m
|
||||||
|
endif
|
||||||
|
ifdef CONFIG_PACKAGE_kmod-mt7925e
|
||||||
|
PKG_MAKE_FLAGS += CONFIG_MT7925E=m
|
||||||
|
endif
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
+$(KERNEL_MAKE) $(PKG_JOBS) \
|
+$(KERNEL_MAKE) $(PKG_JOBS) \
|
||||||
|
@ -591,8 +635,12 @@ $(eval $(call KernelPackage,mt7921-firmware))
|
||||||
$(eval $(call KernelPackage,mt792x-common))
|
$(eval $(call KernelPackage,mt792x-common))
|
||||||
$(eval $(call KernelPackage,mt792x-usb))
|
$(eval $(call KernelPackage,mt792x-usb))
|
||||||
$(eval $(call KernelPackage,mt7921-common))
|
$(eval $(call KernelPackage,mt7921-common))
|
||||||
|
$(eval $(call KernelPackage,mt7925-common))
|
||||||
$(eval $(call KernelPackage,mt7921u))
|
$(eval $(call KernelPackage,mt7921u))
|
||||||
$(eval $(call KernelPackage,mt7921s))
|
$(eval $(call KernelPackage,mt7921s))
|
||||||
$(eval $(call KernelPackage,mt7921e))
|
$(eval $(call KernelPackage,mt7921e))
|
||||||
|
$(eval $(call KernelPackage,mt7925u))
|
||||||
|
$(eval $(call KernelPackage,mt7925e))
|
||||||
|
$(eval $(call KernelPackage,mt7996e))
|
||||||
$(eval $(call KernelPackage,mt76))
|
$(eval $(call KernelPackage,mt76))
|
||||||
$(eval $(call BuildPackage,mt76-test))
|
$(eval $(call BuildPackage,mt76-test))
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=netifd
|
PKG_NAME:=netifd
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
||||||
PKG_SOURCE_DATE:=2023-09-15.1
|
PKG_SOURCE_DATE:=2023-09-19
|
||||||
PKG_SOURCE_VERSION:=afcd3825dad9b6a6712fbf6ed8e4434819a34009
|
PKG_SOURCE_VERSION:=7a58b995fdbecd9beed57e4d66d42cb3cf66aee2
|
||||||
PKG_MIRROR_HASH:=d389db5dec7140fc12f69e8d679b9242c72d27b35c789b12adc6ebdf16913a85
|
PKG_MIRROR_HASH:=a460a3b912047f8802eb24bb737084a08dad65b2dd520e5f5e7459379d1fcf8c
|
||||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|
|
@ -26,7 +26,6 @@ function iface_remove(cfg)
|
||||||
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
|
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
hostapd.remove_iface(cfg.bss[0].ifname);
|
|
||||||
for (let bss in cfg.bss)
|
for (let bss in cfg.bss)
|
||||||
wdev_remove(bss.ifname);
|
wdev_remove(bss.ifname);
|
||||||
}
|
}
|
||||||
|
@ -95,14 +94,14 @@ function iface_add(phy, config, phy_status)
|
||||||
let config_inline = iface_gen_config(phy, config, !!phy_status);
|
let config_inline = iface_gen_config(phy, config, !!phy_status);
|
||||||
|
|
||||||
let bss = config.bss[0];
|
let bss = config.bss[0];
|
||||||
let ret = hostapd.add_iface(`bss_config=${bss.ifname}:${config_inline}`);
|
let ret = hostapd.add_iface(`bss_config=${phy}:${config_inline}`);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!phy_status)
|
if (!phy_status)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
let iface = hostapd.interfaces[bss.ifname];
|
let iface = hostapd.interfaces[phy];
|
||||||
if (!iface)
|
if (!iface)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -127,6 +126,7 @@ function iface_restart(phydev, config, old_config)
|
||||||
{
|
{
|
||||||
let phy = phydev.name;
|
let phy = phydev.name;
|
||||||
|
|
||||||
|
hostapd.remove_iface(phy);
|
||||||
iface_remove(old_config);
|
iface_remove(old_config);
|
||||||
iface_remove(config);
|
iface_remove(config);
|
||||||
|
|
||||||
|
@ -267,13 +267,13 @@ function iface_reload_config(phydev, config, old_config)
|
||||||
if (!old_config.bss || !old_config.bss[0])
|
if (!old_config.bss || !old_config.bss[0])
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let iface_name = old_config.bss[0].ifname;
|
let iface = hostapd.interfaces[phy];
|
||||||
let iface = hostapd.interfaces[iface_name];
|
|
||||||
if (!iface) {
|
if (!iface) {
|
||||||
hostapd.printf(`Could not find previous interface ${iface_name}`);
|
hostapd.printf(`Could not find previous interface ${iface_name}`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let iface_name = old_config.bss[0].ifname;
|
||||||
let first_bss = hostapd.bss[iface_name];
|
let first_bss = hostapd.bss[iface_name];
|
||||||
if (!first_bss) {
|
if (!first_bss) {
|
||||||
hostapd.printf(`Could not find bss of previous interface ${iface_name}`);
|
hostapd.printf(`Could not find bss of previous interface ${iface_name}`);
|
||||||
|
@ -512,8 +512,10 @@ function iface_set_config(phy, config)
|
||||||
|
|
||||||
hostapd.data.config[phy] = config;
|
hostapd.data.config[phy] = config;
|
||||||
|
|
||||||
if (!config)
|
if (!config) {
|
||||||
|
hostapd.remove_iface(phy);
|
||||||
return iface_remove(old_config);
|
return iface_remove(old_config);
|
||||||
|
}
|
||||||
|
|
||||||
let phydev = phy_open(phy);
|
let phydev = phy_open(phy);
|
||||||
if (!phydev) {
|
if (!phydev) {
|
||||||
|
@ -667,7 +669,7 @@ let main_obj = {
|
||||||
if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
|
if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
let iface = hostapd.interfaces[config.bss[0].ifname];
|
let iface = hostapd.interfaces[phy];
|
||||||
if (!iface)
|
if (!iface)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Mon, 18 Sep 2023 16:47:41 +0200
|
||||||
|
Subject: [PATCH] nl80211: move nl80211_put_freq_params call outside of
|
||||||
|
802.11ax #ifdef
|
||||||
|
|
||||||
|
The relevance of this call is not specific to 802.11ax, so it should be done
|
||||||
|
even with CONFIG_IEEE80211AX disabled.
|
||||||
|
|
||||||
|
Fixes: b3921db426ea ("nl80211: Add frequency info in start AP command")
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/src/drivers/driver_nl80211.c
|
||||||
|
+++ b/src/drivers/driver_nl80211.c
|
||||||
|
@@ -5226,6 +5226,9 @@ static int wpa_driver_nl80211_set_ap(voi
|
||||||
|
nla_nest_end(msg, ftm);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (params->freq && nl80211_put_freq_params(msg, params->freq) < 0)
|
||||||
|
+ goto fail;
|
||||||
|
+
|
||||||
|
#ifdef CONFIG_IEEE80211AX
|
||||||
|
if (params->he_spr_ctrl) {
|
||||||
|
struct nlattr *spr;
|
||||||
|
@@ -5260,9 +5263,6 @@ static int wpa_driver_nl80211_set_ap(voi
|
||||||
|
nla_nest_end(msg, spr);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (params->freq && nl80211_put_freq_params(msg, params->freq) < 0)
|
||||||
|
- goto fail;
|
||||||
|
-
|
||||||
|
if (params->freq && params->freq->he_enabled) {
|
||||||
|
struct nlattr *bss_color;
|
||||||
|
|
|
@ -142,6 +142,16 @@
|
||||||
{
|
{
|
||||||
if (!hapd)
|
if (!hapd)
|
||||||
return;
|
return;
|
||||||
|
@@ -3491,7 +3495,8 @@ int hostapd_remove_iface(struct hapd_int
|
||||||
|
hapd_iface = interfaces->iface[i];
|
||||||
|
if (hapd_iface == NULL)
|
||||||
|
return -1;
|
||||||
|
- if (!os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) {
|
||||||
|
+ if (!os_strcmp(hapd_iface->phy, buf) ||
|
||||||
|
+ !os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) {
|
||||||
|
wpa_printf(MSG_INFO, "Remove interface '%s'", buf);
|
||||||
|
hapd_iface->driver_ap_teardown =
|
||||||
|
!!(hapd_iface->drv_flags &
|
||||||
--- a/wpa_supplicant/Makefile
|
--- a/wpa_supplicant/Makefile
|
||||||
+++ b/wpa_supplicant/Makefile
|
+++ b/wpa_supplicant/Makefile
|
||||||
@@ -195,8 +195,20 @@ endif
|
@@ -195,8 +195,20 @@ endif
|
||||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||||||
|
|
||||||
--- a/src/ap/hostapd.c
|
--- a/src/ap/hostapd.c
|
||||||
+++ b/src/ap/hostapd.c
|
+++ b/src/ap/hostapd.c
|
||||||
@@ -3563,6 +3563,8 @@ int hostapd_remove_iface(struct hapd_int
|
@@ -3564,6 +3564,8 @@ int hostapd_remove_iface(struct hapd_int
|
||||||
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
|
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
int reassoc)
|
int reassoc)
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||||||
if (hapd->tkip_countermeasures) {
|
if (hapd->tkip_countermeasures) {
|
||||||
hostapd_drv_sta_deauth(hapd, sta->addr,
|
hostapd_drv_sta_deauth(hapd, sta->addr,
|
||||||
WLAN_REASON_MICHAEL_MIC_FAILURE);
|
WLAN_REASON_MICHAEL_MIC_FAILURE);
|
||||||
@@ -3570,10 +3572,16 @@ void hostapd_new_assoc_sta(struct hostap
|
@@ -3571,10 +3573,16 @@ void hostapd_new_assoc_sta(struct hostap
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=procd
|
PKG_NAME:=procd
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=3
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
|
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
[ "eq", "DEVNAME", "null" ],
|
[ "eq", "DEVNAME", "null" ],
|
||||||
[
|
[
|
||||||
[ "makedev", "/dev/%DEVNAME%", "0666" ],
|
[ "makedev", "/dev/%DEVNAME%", "0666" ],
|
||||||
|
[ "exec", "/bin/ln", "-s", "/proc/self/fd", "/dev/fd" ],
|
||||||
[ "exec", "/bin/ln", "-s", "/proc/self/fd/0", "/dev/stdin" ],
|
[ "exec", "/bin/ln", "-s", "/proc/self/fd/0", "/dev/stdin" ],
|
||||||
[ "exec", "/bin/ln", "-s", "/proc/self/fd/1", "/dev/stdout" ],
|
[ "exec", "/bin/ln", "-s", "/proc/self/fd/1", "/dev/stdout" ],
|
||||||
[ "exec", "/bin/ln", "-s", "/proc/self/fd/2", "/dev/stderr" ],
|
[ "exec", "/bin/ln", "-s", "/proc/self/fd/2", "/dev/stderr" ],
|
||||||
|
|
|
@ -256,15 +256,14 @@ foreach my $mirror (@ARGV) {
|
||||||
push @mirrors, "https://mirrors.ustc.edu.cn/debian/$1"
|
push @mirrors, "https://mirrors.ustc.edu.cn/debian/$1"
|
||||||
} elsif ($mirror =~ /^\@APACHE\/(.+)$/) {
|
} elsif ($mirror =~ /^\@APACHE\/(.+)$/) {
|
||||||
push @mirrors, "https://dlcdn.apache.org/$1";
|
push @mirrors, "https://dlcdn.apache.org/$1";
|
||||||
push @mirrors, "https://mirror.netcologne.de/apache.org/$1";
|
|
||||||
push @mirrors, "https://mirror.aarnet.edu.au/pub/apache/$1";
|
push @mirrors, "https://mirror.aarnet.edu.au/pub/apache/$1";
|
||||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/apache/$1";
|
push @mirrors, "https://mirror.csclub.uwaterloo.ca/apache/$1";
|
||||||
push @mirrors, "https://archive.apache.org/dist/$1";
|
push @mirrors, "https://archive.apache.org/dist/$1";
|
||||||
push @mirrors, "http://mirror.cogentco.com/pub/apache/$1";
|
push @mirrors, "https://mirror.cogentco.com/pub/apache/$1";
|
||||||
push @mirrors, "http://mirror.navercorp.com/apache/$1";
|
push @mirrors, "https://mirror.navercorp.com/apache/$1";
|
||||||
push @mirrors, "http://ftp.jaist.ac.jp/pub/apache/$1";
|
push @mirrors, "https://ftp.jaist.ac.jp/pub/apache/$1";
|
||||||
push @mirrors, "ftp://apache.cs.utah.edu/apache.org/$1";
|
push @mirrors, "https://apache.cs.utah.edu/apache.org/$1";
|
||||||
push @mirrors, "ftp://apache.mirrors.ovh.net/ftp.apache.org/dist/$1";
|
push @mirrors, "http://apache.mirrors.ovh.net/ftp.apache.org/dist/$1";
|
||||||
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/apache/$1";
|
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/apache/$1";
|
||||||
push @mirrors, "https://mirrors.ustc.edu.cn/apache/$1";
|
push @mirrors, "https://mirrors.ustc.edu.cn/apache/$1";
|
||||||
} elsif ($mirror =~ /^\@GITHUB\/(.+)$/) {
|
} elsif ($mirror =~ /^\@GITHUB\/(.+)$/) {
|
||||||
|
@ -275,23 +274,19 @@ foreach my $mirror (@ARGV) {
|
||||||
} elsif ($mirror =~ /^\@GNU\/(.+)$/) {
|
} elsif ($mirror =~ /^\@GNU\/(.+)$/) {
|
||||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnu/$1";
|
push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnu/$1";
|
||||||
push @mirrors, "https://mirror.netcologne.de/gnu/$1";
|
push @mirrors, "https://mirror.netcologne.de/gnu/$1";
|
||||||
push @mirrors, "http://ftp.kddilabs.jp/GNU/gnu/$1";
|
push @mirrors, "https://ftp.kddilabs.jp/GNU/gnu/$1";
|
||||||
push @mirrors, "http://www.nic.funet.fi/pub/gnu/gnu/$1";
|
push @mirrors, "https://www.nic.funet.fi/pub/gnu/gnu/$1";
|
||||||
push @mirrors, "http://mirror.internode.on.net/pub/gnu/$1";
|
push @mirrors, "https://mirror.navercorp.com/gnu/$1";
|
||||||
push @mirrors, "http://mirror.navercorp.com/gnu/$1";
|
push @mirrors, "https://mirrors.rit.edu/gnu/$1";
|
||||||
push @mirrors, "ftp://mirrors.rit.edu/gnu/$1";
|
|
||||||
push @mirrors, "ftp://download.xs4all.nl/pub/gnu/$1";
|
|
||||||
push @mirrors, "https://ftp.gnu.org/gnu/$1";
|
push @mirrors, "https://ftp.gnu.org/gnu/$1";
|
||||||
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/gnu/$1";
|
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/gnu/$1";
|
||||||
push @mirrors, "https://mirrors.ustc.edu.cn/gnu/$1";
|
push @mirrors, "https://mirrors.ustc.edu.cn/gnu/$1";
|
||||||
} elsif ($mirror =~ /^\@SAVANNAH\/(.+)$/) {
|
} elsif ($mirror =~ /^\@SAVANNAH\/(.+)$/) {
|
||||||
push @mirrors, "https://mirror.netcologne.de/savannah/$1";
|
push @mirrors, "https://mirror.netcologne.de/savannah/$1";
|
||||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/nongnu/$1";
|
push @mirrors, "https://mirror.csclub.uwaterloo.ca/nongnu/$1";
|
||||||
push @mirrors, "http://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
push @mirrors, "https://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
||||||
push @mirrors, "http://nongnu.uib.no/$1";
|
push @mirrors, "https://nongnu.uib.no/$1";
|
||||||
push @mirrors, "http://ftp.igh.cnrs.fr/pub/nongnu/$1";
|
push @mirrors, "https://cdimage.debian.org/mirror/gnu.org/savannah/$1";
|
||||||
push @mirrors, "ftp://cdimage.debian.org/mirror/gnu.org/savannah/$1";
|
|
||||||
push @mirrors, "ftp://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
|
||||||
} elsif ($mirror =~ /^\@KERNEL\/(.+)$/) {
|
} elsif ($mirror =~ /^\@KERNEL\/(.+)$/) {
|
||||||
my @extra = ( $1 );
|
my @extra = ( $1 );
|
||||||
if ($filename =~ /linux-\d+\.\d+(?:\.\d+)?-rc/) {
|
if ($filename =~ /linux-\d+\.\d+(?:\.\d+)?-rc/) {
|
||||||
|
@ -301,19 +296,17 @@ foreach my $mirror (@ARGV) {
|
||||||
}
|
}
|
||||||
foreach my $dir (@extra) {
|
foreach my $dir (@extra) {
|
||||||
push @mirrors, "https://cdn.kernel.org/pub/$dir";
|
push @mirrors, "https://cdn.kernel.org/pub/$dir";
|
||||||
push @mirrors, "https://download.xs4all.nl/ftp.kernel.org/pub/$dir";
|
|
||||||
push @mirrors, "https://mirrors.mit.edu/kernel/$dir";
|
push @mirrors, "https://mirrors.mit.edu/kernel/$dir";
|
||||||
push @mirrors, "http://ftp.nara.wide.ad.jp/pub/kernel.org/$dir";
|
push @mirrors, "http://ftp.nara.wide.ad.jp/pub/kernel.org/$dir";
|
||||||
push @mirrors, "http://www.ring.gr.jp/archives/linux/kernel.org/$dir";
|
push @mirrors, "http://www.ring.gr.jp/archives/linux/kernel.org/$dir";
|
||||||
push @mirrors, "ftp://ftp.riken.jp/Linux/kernel.org/$dir";
|
push @mirrors, "https://ftp.riken.jp/Linux/kernel.org/$dir";
|
||||||
push @mirrors, "ftp://www.mirrorservice.org/sites/ftp.kernel.org/pub/$dir";
|
push @mirrors, "https://www.mirrorservice.org/sites/ftp.kernel.org/pub/$dir";
|
||||||
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/kernel/$dir";
|
|
||||||
push @mirrors, "https://mirrors.ustc.edu.cn/kernel.org/$dir";
|
push @mirrors, "https://mirrors.ustc.edu.cn/kernel.org/$dir";
|
||||||
}
|
}
|
||||||
} elsif ($mirror =~ /^\@GNOME\/(.+)$/) {
|
} elsif ($mirror =~ /^\@GNOME\/(.+)$/) {
|
||||||
push @mirrors, "https://download.gnome.org/sources/$1";
|
push @mirrors, "https://download.gnome.org/sources/$1";
|
||||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnome/sources/$1";
|
push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnome/sources/$1";
|
||||||
push @mirrors, "http://ftp.acc.umu.se/pub/GNOME/sources/$1";
|
push @mirrors, "https://ftp.acc.umu.se/pub/GNOME/sources/$1";
|
||||||
push @mirrors, "http://ftp.cse.buffalo.edu/pub/Gnome/sources/$1";
|
push @mirrors, "http://ftp.cse.buffalo.edu/pub/Gnome/sources/$1";
|
||||||
push @mirrors, "http://ftp.nara.wide.ad.jp/pub/X11/GNOME/sources/$1";
|
push @mirrors, "http://ftp.nara.wide.ad.jp/pub/X11/GNOME/sources/$1";
|
||||||
push @mirrors, "https://mirrors.ustc.edu.cn/gnome/sources/$1";
|
push @mirrors, "https://mirrors.ustc.edu.cn/gnome/sources/$1";
|
||||||
|
|
|
@ -65,6 +65,8 @@
|
||||||
gmac-config {
|
gmac-config {
|
||||||
device = <&gmac>;
|
device = <&gmac>;
|
||||||
rgmii-gmac0 = <1>;
|
rgmii-gmac0 = <1>;
|
||||||
|
rxdv-delay = <3>;
|
||||||
|
rxd-delay = <3>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,9 +75,3 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&wmac {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
qca,no-eeprom;
|
|
||||||
};
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
|
||||||
|
#include "qca9533_mikrotik_routerboard-16m.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "mikrotik,routerboard-750-r2", "qca,qca9533";
|
||||||
|
model = "MikroTik RouterBOARD 750 r2 (hEX lite)";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
led-boot = &led_usr;
|
||||||
|
led-failsafe = &led_usr;
|
||||||
|
led-upgrade = &led_usr;
|
||||||
|
led-running = &led_usr;
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
led_usr: usr {
|
||||||
|
label = "green:usr";
|
||||||
|
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led1 {
|
||||||
|
label = "green:port1";
|
||||||
|
gpios = <&ssr 0 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led2 {
|
||||||
|
label = "green:port2";
|
||||||
|
gpios = <&ssr 1 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led3 {
|
||||||
|
label = "green:port3";
|
||||||
|
gpios = <&ssr 2 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led4 {
|
||||||
|
label = "green:port4";
|
||||||
|
gpios = <&ssr 3 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led5 {
|
||||||
|
label = "green:port5";
|
||||||
|
gpios = <&ssr 4 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinmux {
|
||||||
|
pmx_spi_cs1: pinmux_spi_cs1 {
|
||||||
|
pinctrl-single,bits = <0x8 0x0a000000 0xff000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pmx_spi_cs1>;
|
||||||
|
|
||||||
|
cs-gpios = <0>, <&gpio 11 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
ssr: ssr@1 {
|
||||||
|
compatible = "fairchild,74hc595";
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
registers-number = <1>;
|
||||||
|
reg = <1>;
|
||||||
|
spi-max-frequency = <10000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ð0 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
phy-handle = <&swphy4>;
|
||||||
|
};
|
|
@ -83,6 +83,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wmac {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
qca,no-eeprom;
|
||||||
|
};
|
||||||
|
|
||||||
ð0 {
|
ð0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,15 @@ define Device/mikrotik_routerboard-493g
|
||||||
endef
|
endef
|
||||||
TARGET_DEVICES += mikrotik_routerboard-493g
|
TARGET_DEVICES += mikrotik_routerboard-493g
|
||||||
|
|
||||||
|
define Device/mikrotik_routerboard-750-r2
|
||||||
|
$(Device/mikrotik_nor)
|
||||||
|
SOC := qca9533
|
||||||
|
DEVICE_MODEL := RouterBOARD 750 r2 (hEX lite)
|
||||||
|
IMAGE_SIZE := 16256k
|
||||||
|
SUPPORTED_DEVICES += rb-750-r2
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += mikrotik_routerboard-750-r2
|
||||||
|
|
||||||
define Device/mikrotik_routerboard-911-lite
|
define Device/mikrotik_routerboard-911-lite
|
||||||
$(Device/mikrotik_nor)
|
$(Device/mikrotik_nor)
|
||||||
SOC := ar9344
|
SOC := ar9344
|
||||||
|
|
|
@ -16,6 +16,7 @@ mikrotik,routerboard-lhg-5nd)
|
||||||
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "60" "100"
|
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "60" "100"
|
||||||
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
||||||
;;
|
;;
|
||||||
|
mikrotik,routerboard-750-r2|\
|
||||||
mikrotik,routerboard-951ui-2hnd|\
|
mikrotik,routerboard-951ui-2hnd|\
|
||||||
mikrotik,routerboard-951ui-2nd|\
|
mikrotik,routerboard-951ui-2nd|\
|
||||||
mikrotik,routerboard-952ui-5ac2nd)
|
mikrotik,routerboard-952ui-5ac2nd)
|
||||||
|
|
|
@ -14,6 +14,11 @@ ath79_setup_interfaces()
|
||||||
ucidef_add_switch "switch1" \
|
ucidef_add_switch "switch1" \
|
||||||
"0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"
|
"0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"
|
||||||
;;
|
;;
|
||||||
|
mikrotik,routerboard-750-r2)
|
||||||
|
ucidef_set_interface_wan "eth1"
|
||||||
|
ucidef_add_switch "switch0" \
|
||||||
|
"0@eth0" "1:lan:4" "2:lan:1" "3:lan:3" "4:lan:2"
|
||||||
|
;;
|
||||||
mikrotik,routerboard-911-lite|\
|
mikrotik,routerboard-911-lite|\
|
||||||
mikrotik,routerboard-912uag-2hpnd|\
|
mikrotik,routerboard-912uag-2hpnd|\
|
||||||
mikrotik,routerboard-lhg-2nd|\
|
mikrotik,routerboard-lhg-2nd|\
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
From 19f291d8a65cd19e7595006c7872cd95aa6f9e93 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Fri, 4 Aug 2023 19:13:10 +0200
|
||||||
|
Subject: [PATCH 893/898] net: dsa: mv88e6xxx: pass directly chip structure to
|
||||||
|
mv88e6xxx_phy_is_internal
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Since this function is a simple helper, we do not need to pass a full
|
||||||
|
dsa_switch structure, we can directly pass the mv88e6xxx_chip structure.
|
||||||
|
Doing so will allow to share this function with any other function
|
||||||
|
not manipulating dsa_switch structure but needing info about number of
|
||||||
|
internal phys
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 6 ++----
|
||||||
|
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -459,10 +459,8 @@ restore_link:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int mv88e6xxx_phy_is_internal(struct dsa_switch *ds, int port)
|
||||||
|
+static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
- struct mv88e6xxx_chip *chip = ds->priv;
|
||||||
|
-
|
||||||
|
return port < chip->info->num_internal_phys;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -704,7 +702,7 @@ static void mv88e6xxx_mac_config(struct
|
||||||
|
|
||||||
|
mv88e6xxx_reg_lock(chip);
|
||||||
|
|
||||||
|
- if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(ds, port)) {
|
||||||
|
+ if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(chip, port)) {
|
||||||
|
/* In inband mode, the link may come up at any time while the
|
||||||
|
* link is not forced down. Force the link down while we
|
||||||
|
* reconfigure the interface mode.
|
|
@ -0,0 +1,31 @@
|
||||||
|
From 03a50b4f81d9e8bcf86165d6b2ac9376d02e5df9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:42 +0200
|
||||||
|
Subject: [PATCH 894/898] net: dsa: mv88e6xxx: use mv88e6xxx_phy_is_internal in
|
||||||
|
mv88e6xxx_port_ppu_updates
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Make sure to use existing helper to get internal PHYs count instead of
|
||||||
|
redoing it manually
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -473,7 +473,7 @@ static int mv88e6xxx_port_ppu_updates(st
|
||||||
|
* report whether the port is internal.
|
||||||
|
*/
|
||||||
|
if (chip->info->family == MV88E6XXX_FAMILY_6250)
|
||||||
|
- return port < chip->info->num_internal_phys;
|
||||||
|
+ return mv88e6xxx_phy_is_internal(chip, port);
|
||||||
|
|
||||||
|
err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, ®);
|
||||||
|
if (err) {
|
|
@ -0,0 +1,69 @@
|
||||||
|
From 07120894b24cc3cf2318925baeaaf0893e3312e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:43 +0200
|
||||||
|
Subject: [PATCH 895/898] net: dsa: mv88e6xxx: add field to specify internal
|
||||||
|
phys layout
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
mv88e6xxx currently assumes that switch equipped with internal phys have
|
||||||
|
those phys mapped contiguously starting from port 0 (see
|
||||||
|
mv88e6xxx_phy_is_internal). However, some switches have internal PHYs but
|
||||||
|
NOT starting from port 0. For example 88e6393X, 88E6193X and 88E6191X have
|
||||||
|
integrated PHYs available on ports 1 to 8
|
||||||
|
To properly support this offset, add a new field to allow specifying an
|
||||||
|
internal PHYs layout. If field is not set, default layout is assumed (start
|
||||||
|
at port 0)
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 4 +++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 5 +++++
|
||||||
|
drivers/net/dsa/mv88e6xxx/global2.c | 5 ++++-
|
||||||
|
3 files changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -461,7 +461,9 @@ restore_link:
|
||||||
|
|
||||||
|
static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
- return port < chip->info->num_internal_phys;
|
||||||
|
+ return port >= chip->info->internal_phys_offset &&
|
||||||
|
+ port < chip->info->num_internal_phys +
|
||||||
|
+ chip->info->internal_phys_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mv88e6xxx_port_ppu_updates(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -165,6 +165,11 @@ struct mv88e6xxx_info {
|
||||||
|
|
||||||
|
/* Supports PTP */
|
||||||
|
bool ptp_support;
|
||||||
|
+
|
||||||
|
+ /* Internal PHY start index. 0 means that internal PHYs range starts at
|
||||||
|
+ * port 0, 1 means internal PHYs range starts at port 1, etc
|
||||||
|
+ */
|
||||||
|
+ unsigned int internal_phys_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mv88e6xxx_atu_entry {
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/global2.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
|
||||||
|
@@ -1185,8 +1185,11 @@ int mv88e6xxx_g2_irq_mdio_setup(struct m
|
||||||
|
struct mii_bus *bus)
|
||||||
|
{
|
||||||
|
int phy, irq, err, err_phy;
|
||||||
|
+ int phy_start = chip->info->internal_phys_offset;
|
||||||
|
+ int phy_end = chip->info->internal_phys_offset +
|
||||||
|
+ chip->info->num_internal_phys;
|
||||||
|
|
||||||
|
- for (phy = 0; phy < chip->info->num_internal_phys; phy++) {
|
||||||
|
+ for (phy = phy_start; phy < phy_end; phy++) {
|
||||||
|
irq = irq_find_mapping(chip->g2_irq.domain, phy);
|
||||||
|
if (irq < 0) {
|
||||||
|
err = irq;
|
|
@ -0,0 +1,52 @@
|
||||||
|
From 492b06747f544c19b5ffe531a24b67858764c50e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:44 +0200
|
||||||
|
Subject: [PATCH 896/898] net: dsa: mv88e6xxx: fix 88E6393X family internal
|
||||||
|
phys layout
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
88E6393X/88E6193X/88E6191X switches have in fact 8 internal PHYs, but those
|
||||||
|
are not present starting at port 0: supported ports go from 1 to 8
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -5370,7 +5370,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6191X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.port_base_addr = 0x0,
|
||||||
|
.phy_base_addr = 0x0,
|
||||||
|
@@ -5392,7 +5393,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6193X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.port_base_addr = 0x0,
|
||||||
|
.phy_base_addr = 0x0,
|
||||||
|
@@ -5702,7 +5704,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6393X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.port_base_addr = 0x0,
|
||||||
|
.phy_base_addr = 0x0,
|
|
@ -0,0 +1,113 @@
|
||||||
|
From 68690045f8e220826517c0d6f9388ffc1faa57ea Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:45 +0200
|
||||||
|
Subject: [PATCH 897/898] net: dsa: mv88e6xxx: pass mv88e6xxx_chip structure to
|
||||||
|
port_max_speed_mode
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Some switches families have minor differences on supported link speed for
|
||||||
|
ports. Instead of redefining a new port_max_speed_mode for each different
|
||||||
|
configuration, allow to pass mv88e6xxx_chip structure to allow
|
||||||
|
differentiating those chips by known chip id
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
Update one more instance of port_max_speed_mode that 5.15 has.
|
||||||
|
[Robert Marko]
|
||||||
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 3 ++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.c | 12 ++++++++----
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.h | 12 ++++++++----
|
||||||
|
4 files changed, 19 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -443,7 +443,7 @@ static int mv88e6xxx_port_setup_mac(stru
|
||||||
|
}
|
||||||
|
|
||||||
|
if (speed == SPEED_MAX && chip->info->ops->port_max_speed_mode)
|
||||||
|
- mode = chip->info->ops->port_max_speed_mode(port);
|
||||||
|
+ mode = chip->info->ops->port_max_speed_mode(chip, port);
|
||||||
|
|
||||||
|
if (chip->info->ops->port_set_pause) {
|
||||||
|
err = chip->info->ops->port_set_pause(chip, port, pause);
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -485,7 +485,8 @@ struct mv88e6xxx_ops {
|
||||||
|
int speed, int duplex);
|
||||||
|
|
||||||
|
/* What interface mode should be used for maximum speed? */
|
||||||
|
- phy_interface_t (*port_max_speed_mode)(int port);
|
||||||
|
+ phy_interface_t (*port_max_speed_mode)(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
|
||||||
|
int (*port_tag_remap)(struct mv88e6xxx_chip *chip, int port);
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
@@ -357,7 +357,8 @@ int mv88e6341_port_set_speed_duplex(stru
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 5)
|
||||||
|
return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
@@ -402,7 +403,8 @@ int mv88e6390_port_set_speed_duplex(stru
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
@@ -427,7 +429,8 @@ int mv88e6390x_port_set_speed_duplex(str
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_XAUI;
|
||||||
|
@@ -527,7 +530,8 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 0 || port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
@@ -350,10 +350,14 @@ int mv88e6390x_port_set_speed_duplex(str
|
||||||
|
int mv88e6393x_port_set_speed_duplex(struct mv88e6xxx_chip *chip, int port,
|
||||||
|
int speed, int duplex);
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port);
|
||||||
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
|
||||||
|
int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state);
|
||||||
|
|
|
@ -0,0 +1,165 @@
|
||||||
|
From f318a015330a11befd8c69336efc6284e240f535 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:46 +0200
|
||||||
|
Subject: [PATCH 898/898] net: dsa: mv88e6xxx: enable support for 88E6361
|
||||||
|
switch
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Marvell 88E6361 is an 8-port switch derived from the
|
||||||
|
88E6393X/88E9193X/88E6191X switches family. It can benefit from the
|
||||||
|
existing mv88e6xxx driver by simply adding the proper switch description in
|
||||||
|
the driver. Main differences with other switches from this
|
||||||
|
family are:
|
||||||
|
- 8 ports exposed (instead of 11): ports 1, 2 and 8 not available
|
||||||
|
- No 5GBase-x nor SFI/USXGMII support
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
Adapt to 5.15 since we dont have phylink_get_caps yet.
|
||||||
|
So, update the old mv88e6393x_phylink_validate instead.
|
||||||
|
Remove max_sid since 5.15 driver does not support it yet.
|
||||||
|
[Robert Marko]
|
||||||
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 49 +++++++++++++++++++++++++++++++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 3 +-
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.c | 14 +++++++--
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.h | 1 +
|
||||||
|
4 files changed, 62 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -648,6 +648,8 @@ static void mv88e6393x_phylink_validate(
|
||||||
|
{
|
||||||
|
bool is_6191x =
|
||||||
|
chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6191X;
|
||||||
|
+ bool is_6361 =
|
||||||
|
+ chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361;
|
||||||
|
|
||||||
|
if (((port == 0 || port == 9) && !is_6191x) || port == 10) {
|
||||||
|
phylink_set(mask, 10000baseT_Full);
|
||||||
|
@@ -662,8 +664,28 @@ static void mv88e6393x_phylink_validate(
|
||||||
|
phylink_set(mask, 2500baseT_Full);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (port == 0 || port == 9 || port == 10) {
|
||||||
|
+ phylink_set(mask, 1000baseX_Full);
|
||||||
|
+
|
||||||
|
+ /* 6191X supports >1G modes only on port 10 */
|
||||||
|
+ if (!is_6191x || port == 10) {
|
||||||
|
+ phylink_set(mask, 2500baseX_Full);
|
||||||
|
+ phylink_set(mask, 2500baseT_Full);
|
||||||
|
+
|
||||||
|
+ if (!is_6361) {
|
||||||
|
+ phylink_set(mask, 10000baseT_Full);
|
||||||
|
+ phylink_set(mask, 10000baseKR_Full);
|
||||||
|
+ phylink_set(mask, 10000baseCR_Full);
|
||||||
|
+ phylink_set(mask, 10000baseSR_Full);
|
||||||
|
+ phylink_set(mask, 10000baseLR_Full);
|
||||||
|
+ phylink_set(mask, 10000baseLRM_Full);
|
||||||
|
+ phylink_set(mask, 10000baseER_Full);
|
||||||
|
+ phylink_set(mask, 5000baseT_Full);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
phylink_set(mask, 1000baseT_Full);
|
||||||
|
- phylink_set(mask, 1000baseX_Full);
|
||||||
|
|
||||||
|
mv88e6065_phylink_validate(chip, port, mask, state);
|
||||||
|
}
|
||||||
|
@@ -5649,6 +5671,31 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.ptp_support = true,
|
||||||
|
.ops = &mv88e6352_ops,
|
||||||
|
},
|
||||||
|
+ [MV88E6361] = {
|
||||||
|
+ .prod_num = MV88E6XXX_PORT_SWITCH_ID_PROD_6361,
|
||||||
|
+ .family = MV88E6XXX_FAMILY_6393,
|
||||||
|
+ .name = "Marvell 88E6361",
|
||||||
|
+ .num_databases = 4096,
|
||||||
|
+ .num_macs = 16384,
|
||||||
|
+ .num_ports = 11,
|
||||||
|
+ /* Ports 1, 2 and 8 are not routed */
|
||||||
|
+ .invalid_port_mask = BIT(1) | BIT(2) | BIT(8),
|
||||||
|
+ .num_internal_phys = 5,
|
||||||
|
+ .internal_phys_offset = 3,
|
||||||
|
+ .max_vid = 4095,
|
||||||
|
+ .port_base_addr = 0x0,
|
||||||
|
+ .phy_base_addr = 0x0,
|
||||||
|
+ .global1_addr = 0x1b,
|
||||||
|
+ .global2_addr = 0x1c,
|
||||||
|
+ .age_time_coeff = 3750,
|
||||||
|
+ .g1_irqs = 10,
|
||||||
|
+ .g2_irqs = 14,
|
||||||
|
+ .atu_move_port_mask = 0x1f,
|
||||||
|
+ .pvt = true,
|
||||||
|
+ .multi_chip = true,
|
||||||
|
+ .ptp_support = true,
|
||||||
|
+ .ops = &mv88e6393x_ops,
|
||||||
|
+ },
|
||||||
|
[MV88E6390] = {
|
||||||
|
.prod_num = MV88E6XXX_PORT_SWITCH_ID_PROD_6390,
|
||||||
|
.family = MV88E6XXX_FAMILY_6390,
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -81,6 +81,7 @@ enum mv88e6xxx_model {
|
||||||
|
MV88E6350,
|
||||||
|
MV88E6351,
|
||||||
|
MV88E6352,
|
||||||
|
+ MV88E6361,
|
||||||
|
MV88E6390,
|
||||||
|
MV88E6390X,
|
||||||
|
MV88E6393X,
|
||||||
|
@@ -99,7 +100,7 @@ enum mv88e6xxx_family {
|
||||||
|
MV88E6XXX_FAMILY_6351, /* 6171 6175 6350 6351 */
|
||||||
|
MV88E6XXX_FAMILY_6352, /* 6172 6176 6240 6352 */
|
||||||
|
MV88E6XXX_FAMILY_6390, /* 6190 6190X 6191 6290 6390 6390X */
|
||||||
|
- MV88E6XXX_FAMILY_6393, /* 6191X 6193X 6393X */
|
||||||
|
+ MV88E6XXX_FAMILY_6393, /* 6191X 6193X 6361 6393X */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
@@ -451,6 +451,10 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
if (speed == SPEED_MAX)
|
||||||
|
speed = (port > 0 && port < 9) ? 1000 : 10000;
|
||||||
|
|
||||||
|
+ if (chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361 &&
|
||||||
|
+ speed > 2500)
|
||||||
|
+ return -EOPNOTSUPP;
|
||||||
|
+
|
||||||
|
if (speed == 200 && port != 0)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
@@ -533,10 +537,14 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
int port)
|
||||||
|
{
|
||||||
|
- if (port == 0 || port == 9 || port == 10)
|
||||||
|
- return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
|
||||||
|
- return PHY_INTERFACE_MODE_NA;
|
||||||
|
+ if (port != 0 && port != 9 && port != 10)
|
||||||
|
+ return PHY_INTERFACE_MODE_NA;
|
||||||
|
+
|
||||||
|
+ if (chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361)
|
||||||
|
+ return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
+
|
||||||
|
+ return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
@@ -128,6 +128,7 @@
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6220 0x2200
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6240 0x2400
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6250 0x2500
|
||||||
|
+#define MV88E6XXX_PORT_SWITCH_ID_PROD_6361 0x2610
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6290 0x2900
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6321 0x3100
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6141 0x3400
|
|
@ -0,0 +1,64 @@
|
||||||
|
From 4f86eb098e18fd0f032877dfa1a7e8c1503ca409 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:41 +0200
|
||||||
|
Subject: [PATCH 1/6] net: dsa: mv88e6xxx: pass directly chip structure to
|
||||||
|
mv88e6xxx_phy_is_internal
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Since this function is a simple helper, we do not need to pass a full
|
||||||
|
dsa_switch structure, we can directly pass the mv88e6xxx_chip structure.
|
||||||
|
Doing so will allow to share this function with any other function
|
||||||
|
not manipulating dsa_switch structure but needing info about number of
|
||||||
|
internal phys
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 10 ++++------
|
||||||
|
1 file changed, 4 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -470,10 +470,8 @@ restore_link:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int mv88e6xxx_phy_is_internal(struct dsa_switch *ds, int port)
|
||||||
|
+static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
- struct mv88e6xxx_chip *chip = ds->priv;
|
||||||
|
-
|
||||||
|
return port < chip->info->num_internal_phys;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -591,7 +589,7 @@ static void mv88e6095_phylink_get_caps(s
|
||||||
|
|
||||||
|
config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100;
|
||||||
|
|
||||||
|
- if (mv88e6xxx_phy_is_internal(chip->ds, port)) {
|
||||||
|
+ if (mv88e6xxx_phy_is_internal(chip, port)) {
|
||||||
|
__set_bit(PHY_INTERFACE_MODE_MII, config->supported_interfaces);
|
||||||
|
} else {
|
||||||
|
if (cmode < ARRAY_SIZE(mv88e6185_phy_interface_modes) &&
|
||||||
|
@@ -839,7 +837,7 @@ static void mv88e6xxx_get_caps(struct ds
|
||||||
|
chip->info->ops->phylink_get_caps(chip, port, config);
|
||||||
|
mv88e6xxx_reg_unlock(chip);
|
||||||
|
|
||||||
|
- if (mv88e6xxx_phy_is_internal(ds, port)) {
|
||||||
|
+ if (mv88e6xxx_phy_is_internal(chip, port)) {
|
||||||
|
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
||||||
|
config->supported_interfaces);
|
||||||
|
/* Internal ports with no phy-mode need GMII for PHYLIB */
|
||||||
|
@@ -860,7 +858,7 @@ static void mv88e6xxx_mac_config(struct
|
||||||
|
|
||||||
|
mv88e6xxx_reg_lock(chip);
|
||||||
|
|
||||||
|
- if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(ds, port)) {
|
||||||
|
+ if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(chip, port)) {
|
||||||
|
/* In inband mode, the link may come up at any time while the
|
||||||
|
* link is not forced down. Force the link down while we
|
||||||
|
* reconfigure the interface mode.
|
|
@ -0,0 +1,31 @@
|
||||||
|
From 73cbfad9296eed004992806e056db5b48583ca41 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:42 +0200
|
||||||
|
Subject: [PATCH 2/6] net: dsa: mv88e6xxx: use mv88e6xxx_phy_is_internal in
|
||||||
|
mv88e6xxx_port_ppu_updates
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Make sure to use existing helper to get internal PHYs count instead of
|
||||||
|
redoing it manually
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -484,7 +484,7 @@ static int mv88e6xxx_port_ppu_updates(st
|
||||||
|
* report whether the port is internal.
|
||||||
|
*/
|
||||||
|
if (chip->info->family == MV88E6XXX_FAMILY_6250)
|
||||||
|
- return port < chip->info->num_internal_phys;
|
||||||
|
+ return mv88e6xxx_phy_is_internal(chip, port);
|
||||||
|
|
||||||
|
err = mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS, ®);
|
||||||
|
if (err) {
|
|
@ -0,0 +1,69 @@
|
||||||
|
From 1414d30660d201f515a9d877571ceea9ca190b6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:43 +0200
|
||||||
|
Subject: [PATCH 3/6] net: dsa: mv88e6xxx: add field to specify internal phys
|
||||||
|
layout
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
mv88e6xxx currently assumes that switch equipped with internal phys have
|
||||||
|
those phys mapped contiguously starting from port 0 (see
|
||||||
|
mv88e6xxx_phy_is_internal). However, some switches have internal PHYs but
|
||||||
|
NOT starting from port 0. For example 88e6393X, 88E6193X and 88E6191X have
|
||||||
|
integrated PHYs available on ports 1 to 8
|
||||||
|
To properly support this offset, add a new field to allow specifying an
|
||||||
|
internal PHYs layout. If field is not set, default layout is assumed (start
|
||||||
|
at port 0)
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 4 +++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 5 +++++
|
||||||
|
drivers/net/dsa/mv88e6xxx/global2.c | 5 ++++-
|
||||||
|
3 files changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -472,7 +472,9 @@ restore_link:
|
||||||
|
|
||||||
|
static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
{
|
||||||
|
- return port < chip->info->num_internal_phys;
|
||||||
|
+ return port >= chip->info->internal_phys_offset &&
|
||||||
|
+ port < chip->info->num_internal_phys +
|
||||||
|
+ chip->info->internal_phys_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mv88e6xxx_port_ppu_updates(struct mv88e6xxx_chip *chip, int port)
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -167,6 +167,11 @@ struct mv88e6xxx_info {
|
||||||
|
|
||||||
|
/* Supports PTP */
|
||||||
|
bool ptp_support;
|
||||||
|
+
|
||||||
|
+ /* Internal PHY start index. 0 means that internal PHYs range starts at
|
||||||
|
+ * port 0, 1 means internal PHYs range starts at port 1, etc
|
||||||
|
+ */
|
||||||
|
+ unsigned int internal_phys_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mv88e6xxx_atu_entry {
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/global2.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
|
||||||
|
@@ -1185,8 +1185,11 @@ int mv88e6xxx_g2_irq_mdio_setup(struct m
|
||||||
|
struct mii_bus *bus)
|
||||||
|
{
|
||||||
|
int phy, irq, err, err_phy;
|
||||||
|
+ int phy_start = chip->info->internal_phys_offset;
|
||||||
|
+ int phy_end = chip->info->internal_phys_offset +
|
||||||
|
+ chip->info->num_internal_phys;
|
||||||
|
|
||||||
|
- for (phy = 0; phy < chip->info->num_internal_phys; phy++) {
|
||||||
|
+ for (phy = phy_start; phy < phy_end; phy++) {
|
||||||
|
irq = irq_find_mapping(chip->g2_irq.domain, phy);
|
||||||
|
if (irq < 0) {
|
||||||
|
err = irq;
|
|
@ -0,0 +1,52 @@
|
||||||
|
From eb8c75f82a6711387f3b9e03e28923f3e75a761b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:44 +0200
|
||||||
|
Subject: [PATCH 4/6] net: dsa: mv88e6xxx: fix 88E6393X family internal phys
|
||||||
|
layout
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
88E6393X/88E6193X/88E6191X switches have in fact 8 internal PHYs, but those
|
||||||
|
are not present starting at port 0: supported ports go from 1 to 8
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -5942,7 +5942,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6191X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.max_sid = 63,
|
||||||
|
.port_base_addr = 0x0,
|
||||||
|
@@ -5965,7 +5966,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6193X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.max_sid = 63,
|
||||||
|
.port_base_addr = 0x0,
|
||||||
|
@@ -6284,7 +6286,8 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.name = "Marvell 88E6393X",
|
||||||
|
.num_databases = 4096,
|
||||||
|
.num_ports = 11, /* 10 + Z80 */
|
||||||
|
- .num_internal_phys = 9,
|
||||||
|
+ .num_internal_phys = 8,
|
||||||
|
+ .internal_phys_offset = 1,
|
||||||
|
.max_vid = 8191,
|
||||||
|
.max_sid = 63,
|
||||||
|
.port_base_addr = 0x0,
|
|
@ -0,0 +1,110 @@
|
||||||
|
From cef945452c8468efce75ba0dc8420510a5b84af9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:45 +0200
|
||||||
|
Subject: [PATCH 5/6] net: dsa: mv88e6xxx: pass mv88e6xxx_chip structure to
|
||||||
|
port_max_speed_mode
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Some switches families have minor differences on supported link speed for
|
||||||
|
ports. Instead of redefining a new port_max_speed_mode for each different
|
||||||
|
configuration, allow to pass mv88e6xxx_chip structure to allow
|
||||||
|
differentiating those chips by known chip id
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 3 ++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.c | 12 ++++++++----
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.h | 12 ++++++++----
|
||||||
|
4 files changed, 19 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -3326,7 +3326,7 @@ static int mv88e6xxx_setup_port(struct m
|
||||||
|
caps = pl_config.mac_capabilities;
|
||||||
|
|
||||||
|
if (chip->info->ops->port_max_speed_mode)
|
||||||
|
- mode = chip->info->ops->port_max_speed_mode(port);
|
||||||
|
+ mode = chip->info->ops->port_max_speed_mode(chip, port);
|
||||||
|
else
|
||||||
|
mode = PHY_INTERFACE_MODE_NA;
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -508,7 +508,8 @@ struct mv88e6xxx_ops {
|
||||||
|
int speed, int duplex);
|
||||||
|
|
||||||
|
/* What interface mode should be used for maximum speed? */
|
||||||
|
- phy_interface_t (*port_max_speed_mode)(int port);
|
||||||
|
+ phy_interface_t (*port_max_speed_mode)(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
|
||||||
|
int (*port_tag_remap)(struct mv88e6xxx_chip *chip, int port);
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
@@ -342,7 +342,8 @@ int mv88e6341_port_set_speed_duplex(stru
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 5)
|
||||||
|
return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
@@ -381,7 +382,8 @@ int mv88e6390_port_set_speed_duplex(stru
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
@@ -403,7 +405,8 @@ int mv88e6390x_port_set_speed_duplex(str
|
||||||
|
duplex);
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_XAUI;
|
||||||
|
@@ -500,7 +503,8 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port)
|
||||||
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port)
|
||||||
|
{
|
||||||
|
if (port == 0 || port == 9 || port == 10)
|
||||||
|
return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
@@ -359,10 +359,14 @@ int mv88e6390x_port_set_speed_duplex(str
|
||||||
|
int mv88e6393x_port_set_speed_duplex(struct mv88e6xxx_chip *chip, int port,
|
||||||
|
int speed, int duplex);
|
||||||
|
|
||||||
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port);
|
||||||
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port);
|
||||||
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
+ int port);
|
||||||
|
|
||||||
|
int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state);
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
From 23680321789863bab2d60af507858ce50ff9f56a Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
||||||
|
Date: Mon, 29 May 2023 10:02:46 +0200
|
||||||
|
Subject: [PATCH 6/6] net: dsa: mv88e6xxx: enable support for 88E6361 switch
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Marvell 88E6361 is an 8-port switch derived from the
|
||||||
|
88E6393X/88E9193X/88E6191X switches family. It can benefit from the
|
||||||
|
existing mv88e6xxx driver by simply adding the proper switch description in
|
||||||
|
the driver. Main differences with other switches from this
|
||||||
|
family are:
|
||||||
|
- 8 ports exposed (instead of 11): ports 1, 2 and 8 not available
|
||||||
|
- No 5GBase-x nor SFI/USXGMII support
|
||||||
|
|
||||||
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.c | 42 ++++++++++++++++++++++++++++----
|
||||||
|
drivers/net/dsa/mv88e6xxx/chip.h | 3 ++-
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.c | 14 ++++++++---
|
||||||
|
drivers/net/dsa/mv88e6xxx/port.h | 1 +
|
||||||
|
4 files changed, 51 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
|
@@ -797,6 +797,8 @@ static void mv88e6393x_phylink_get_caps(
|
||||||
|
unsigned long *supported = config->supported_interfaces;
|
||||||
|
bool is_6191x =
|
||||||
|
chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6191X;
|
||||||
|
+ bool is_6361 =
|
||||||
|
+ chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361;
|
||||||
|
|
||||||
|
mv88e6xxx_translate_cmode(chip->ports[port].cmode, supported);
|
||||||
|
|
||||||
|
@@ -811,13 +813,17 @@ static void mv88e6393x_phylink_get_caps(
|
||||||
|
/* 6191X supports >1G modes only on port 10 */
|
||||||
|
if (!is_6191x || port == 10) {
|
||||||
|
__set_bit(PHY_INTERFACE_MODE_2500BASEX, supported);
|
||||||
|
- __set_bit(PHY_INTERFACE_MODE_5GBASER, supported);
|
||||||
|
- __set_bit(PHY_INTERFACE_MODE_10GBASER, supported);
|
||||||
|
+ config->mac_capabilities |= MAC_2500FD;
|
||||||
|
+
|
||||||
|
+ /* 6361 only supports up to 2500BaseX */
|
||||||
|
+ if (!is_6361) {
|
||||||
|
+ __set_bit(PHY_INTERFACE_MODE_5GBASER, supported);
|
||||||
|
+ __set_bit(PHY_INTERFACE_MODE_10GBASER, supported);
|
||||||
|
+ config->mac_capabilities |= MAC_5000FD |
|
||||||
|
+ MAC_10000FD;
|
||||||
|
+ }
|
||||||
|
/* FIXME: USXGMII is not supported yet */
|
||||||
|
/* __set_bit(PHY_INTERFACE_MODE_USXGMII, supported); */
|
||||||
|
-
|
||||||
|
- config->mac_capabilities |= MAC_2500FD | MAC_5000FD |
|
||||||
|
- MAC_10000FD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -6229,6 +6235,32 @@ static const struct mv88e6xxx_info mv88e
|
||||||
|
.ptp_support = true,
|
||||||
|
.ops = &mv88e6352_ops,
|
||||||
|
},
|
||||||
|
+ [MV88E6361] = {
|
||||||
|
+ .prod_num = MV88E6XXX_PORT_SWITCH_ID_PROD_6361,
|
||||||
|
+ .family = MV88E6XXX_FAMILY_6393,
|
||||||
|
+ .name = "Marvell 88E6361",
|
||||||
|
+ .num_databases = 4096,
|
||||||
|
+ .num_macs = 16384,
|
||||||
|
+ .num_ports = 11,
|
||||||
|
+ /* Ports 1, 2 and 8 are not routed */
|
||||||
|
+ .invalid_port_mask = BIT(1) | BIT(2) | BIT(8),
|
||||||
|
+ .num_internal_phys = 5,
|
||||||
|
+ .internal_phys_offset = 3,
|
||||||
|
+ .max_vid = 4095,
|
||||||
|
+ .max_sid = 63,
|
||||||
|
+ .port_base_addr = 0x0,
|
||||||
|
+ .phy_base_addr = 0x0,
|
||||||
|
+ .global1_addr = 0x1b,
|
||||||
|
+ .global2_addr = 0x1c,
|
||||||
|
+ .age_time_coeff = 3750,
|
||||||
|
+ .g1_irqs = 10,
|
||||||
|
+ .g2_irqs = 14,
|
||||||
|
+ .atu_move_port_mask = 0x1f,
|
||||||
|
+ .pvt = true,
|
||||||
|
+ .multi_chip = true,
|
||||||
|
+ .ptp_support = true,
|
||||||
|
+ .ops = &mv88e6393x_ops,
|
||||||
|
+ },
|
||||||
|
[MV88E6390] = {
|
||||||
|
.prod_num = MV88E6XXX_PORT_SWITCH_ID_PROD_6390,
|
||||||
|
.family = MV88E6XXX_FAMILY_6390,
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
||||||
|
@@ -82,6 +82,7 @@ enum mv88e6xxx_model {
|
||||||
|
MV88E6350,
|
||||||
|
MV88E6351,
|
||||||
|
MV88E6352,
|
||||||
|
+ MV88E6361,
|
||||||
|
MV88E6390,
|
||||||
|
MV88E6390X,
|
||||||
|
MV88E6393X,
|
||||||
|
@@ -100,7 +101,7 @@ enum mv88e6xxx_family {
|
||||||
|
MV88E6XXX_FAMILY_6351, /* 6171 6175 6350 6351 */
|
||||||
|
MV88E6XXX_FAMILY_6352, /* 6172 6176 6240 6352 */
|
||||||
|
MV88E6XXX_FAMILY_6390, /* 6190 6190X 6191 6290 6390 6390X */
|
||||||
|
- MV88E6XXX_FAMILY_6393, /* 6191X 6193X 6393X */
|
||||||
|
+ MV88E6XXX_FAMILY_6393, /* 6191X 6193X 6361 6393X */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.c
|
||||||
|
@@ -424,6 +424,10 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
u16 reg, ctrl;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
+ if (chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361 &&
|
||||||
|
+ speed > 2500)
|
||||||
|
+ return -EOPNOTSUPP;
|
||||||
|
+
|
||||||
|
if (speed == 200 && port != 0)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
@@ -506,10 +510,14 @@ int mv88e6393x_port_set_speed_duplex(str
|
||||||
|
phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
||||||
|
int port)
|
||||||
|
{
|
||||||
|
- if (port == 0 || port == 9 || port == 10)
|
||||||
|
- return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
|
||||||
|
- return PHY_INTERFACE_MODE_NA;
|
||||||
|
+ if (port != 0 && port != 9 && port != 10)
|
||||||
|
+ return PHY_INTERFACE_MODE_NA;
|
||||||
|
+
|
||||||
|
+ if (chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6361)
|
||||||
|
+ return PHY_INTERFACE_MODE_2500BASEX;
|
||||||
|
+
|
||||||
|
+ return PHY_INTERFACE_MODE_10GBASER;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
|
||||||
|
--- a/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
+++ b/drivers/net/dsa/mv88e6xxx/port.h
|
||||||
|
@@ -133,6 +133,7 @@
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6220 0x2200
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6240 0x2400
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6250 0x2500
|
||||||
|
+#define MV88E6XXX_PORT_SWITCH_ID_PROD_6361 0x2610
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6290 0x2900
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6321 0x3100
|
||||||
|
#define MV88E6XXX_PORT_SWITCH_ID_PROD_6141 0x3400
|
|
@ -9,7 +9,7 @@ Subject: [PATCH] net/dsa/mv88e6xxx: disable ATU violation
|
||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -2993,6 +2993,9 @@ static int mv88e6xxx_setup_port(struct m
|
@@ -3015,6 +3015,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||||
else
|
else
|
||||||
reg = 1 << port;
|
reg = 1 << port;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ Subject: [PATCH] net/dsa/mv88e6xxx: disable ATU violation
|
||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -3480,6 +3480,9 @@ static int mv88e6xxx_setup_port(struct m
|
@@ -3486,6 +3486,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||||
else
|
else
|
||||||
reg = 1 << port;
|
reg = 1 << port;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -6341,6 +6341,7 @@ static int mv88e6xxx_register_switch(str
|
@@ -6391,6 +6391,7 @@ static int mv88e6xxx_register_switch(str
|
||||||
ds->ops = &mv88e6xxx_switch_ops;
|
ds->ops = &mv88e6xxx_switch_ops;
|
||||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -6988,6 +6988,7 @@ static int mv88e6xxx_register_switch(str
|
@@ -7023,6 +7023,7 @@ static int mv88e6xxx_register_switch(str
|
||||||
ds->ops = &mv88e6xxx_switch_ops;
|
ds->ops = &mv88e6xxx_switch_ops;
|
||||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||||
|
|
|
@ -9,6 +9,7 @@ CPU_SUBTYPE:=neon-vfpv4
|
||||||
SUBTARGETS:=generic chromium mikrotik
|
SUBTARGETS:=generic chromium mikrotik
|
||||||
|
|
||||||
KERNEL_PATCHVER:=5.15
|
KERNEL_PATCHVER:=5.15
|
||||||
|
KERNEL_TESTING_PATCHVER:=6.1
|
||||||
|
|
||||||
KERNELNAME:=zImage Image dtbs
|
KERNELNAME:=zImage Image dtbs
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ ipq40xx_setup_interfaces()
|
||||||
p2w,r619ac-128m|\
|
p2w,r619ac-128m|\
|
||||||
pakedge,wr-1|\
|
pakedge,wr-1|\
|
||||||
teltonika,rutx50|\
|
teltonika,rutx50|\
|
||||||
|
yyets,le1|\
|
||||||
zyxel,nbg6617)
|
zyxel,nbg6617)
|
||||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
|
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
|
||||||
;;
|
;;
|
||||||
|
@ -88,6 +89,8 @@ ipq40xx_setup_interfaces()
|
||||||
aruba,ap-303h|\
|
aruba,ap-303h|\
|
||||||
buffalo,wtr-m2133hp|\
|
buffalo,wtr-m2133hp|\
|
||||||
ezviz,cs-w3-wd1200g-eup|\
|
ezviz,cs-w3-wd1200g-eup|\
|
||||||
|
netgear,rbr40|\
|
||||||
|
netgear,rbs40|\
|
||||||
netgear,rbr50|\
|
netgear,rbr50|\
|
||||||
netgear,rbs50|\
|
netgear,rbs50|\
|
||||||
netgear,srr60|\
|
netgear,srr60|\
|
||||||
|
@ -111,6 +114,7 @@ ipq40xx_setup_interfaces()
|
||||||
zte,mf286d)
|
zte,mf286d)
|
||||||
ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
|
ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
|
||||||
;;
|
;;
|
||||||
|
zte,mf287|\
|
||||||
zte,mf287plus|\
|
zte,mf287plus|\
|
||||||
zte,mf287pro)
|
zte,mf287pro)
|
||||||
ucidef_set_interface_lan "lan1 lan2 lan3 lan4"
|
ucidef_set_interface_lan "lan1 lan2 lan3 lan4"
|
||||||
|
|
|
@ -40,6 +40,8 @@ case "$FIRMWARE" in
|
||||||
# OEM assigns 4 sequential MACs
|
# OEM assigns 4 sequential MACs
|
||||||
ath10k_patch_mac $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
|
ath10k_patch_mac $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
|
||||||
;;
|
;;
|
||||||
|
netgear,rbr40|\
|
||||||
|
netgear,rbs40|\
|
||||||
netgear,rbr50|\
|
netgear,rbr50|\
|
||||||
netgear,rbs50|\
|
netgear,rbs50|\
|
||||||
netgear,srr60|\
|
netgear,srr60|\
|
||||||
|
@ -117,6 +119,8 @@ case "$FIRMWARE" in
|
||||||
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
|
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
|
||||||
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
|
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
|
||||||
;;
|
;;
|
||||||
|
netgear,rbr40|\
|
||||||
|
netgear,rbs40|\
|
||||||
netgear,rbr50|\
|
netgear,rbr50|\
|
||||||
netgear,rbs50|\
|
netgear,rbs50|\
|
||||||
netgear,srr60|\
|
netgear,srr60|\
|
||||||
|
@ -211,6 +215,8 @@ case "$FIRMWARE" in
|
||||||
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
|
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
|
||||||
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
|
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
|
||||||
;;
|
;;
|
||||||
|
netgear,rbr40|\
|
||||||
|
netgear,rbs40|\
|
||||||
netgear,rbr50|\
|
netgear,rbr50|\
|
||||||
netgear,rbs50|\
|
netgear,rbs50|\
|
||||||
netgear,srr60|\
|
netgear,srr60|\
|
||||||
|
|
|
@ -27,6 +27,7 @@ EOF
|
||||||
;;
|
;;
|
||||||
zte,mf18a |\
|
zte,mf18a |\
|
||||||
zte,mf286d |\
|
zte,mf286d |\
|
||||||
|
zte,mf287|\
|
||||||
zte,mf287plus |\
|
zte,mf287plus |\
|
||||||
zte,mf287pro |\
|
zte,mf287pro |\
|
||||||
zte,mf289f)
|
zte,mf289f)
|
||||||
|
@ -191,6 +192,8 @@ platform_do_upgrade() {
|
||||||
mikrotik,hap-ac3)
|
mikrotik,hap-ac3)
|
||||||
platform_do_upgrade_mikrotik_nand "$1"
|
platform_do_upgrade_mikrotik_nand "$1"
|
||||||
;;
|
;;
|
||||||
|
netgear,rbr40|\
|
||||||
|
netgear,rbs40|\
|
||||||
netgear,rbr50 |\
|
netgear,rbr50 |\
|
||||||
netgear,rbs50 |\
|
netgear,rbs50 |\
|
||||||
netgear,srr60 |\
|
netgear,srr60 |\
|
||||||
|
|
539
target/linux/ipq40xx/config-6.1
Normal file
539
target/linux/ipq40xx/config-6.1
Normal file
|
@ -0,0 +1,539 @@
|
||||||
|
CONFIG_ALIGNMENT_TRAP=y
|
||||||
|
# CONFIG_APQ_GCC_8084 is not set
|
||||||
|
# CONFIG_APQ_MMCC_8084 is not set
|
||||||
|
CONFIG_ARCH_32BIT_OFF_T=y
|
||||||
|
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||||
|
CONFIG_ARCH_IPQ40XX=y
|
||||||
|
CONFIG_ARCH_KEEP_MEMBLOCK=y
|
||||||
|
# CONFIG_ARCH_MDM9615 is not set
|
||||||
|
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
|
||||||
|
# CONFIG_ARCH_MSM8909 is not set
|
||||||
|
# CONFIG_ARCH_MSM8916 is not set
|
||||||
|
# CONFIG_ARCH_MSM8960 is not set
|
||||||
|
# CONFIG_ARCH_MSM8974 is not set
|
||||||
|
# CONFIG_ARCH_MSM8X60 is not set
|
||||||
|
CONFIG_ARCH_MULTIPLATFORM=y
|
||||||
|
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_QCOM=y
|
||||||
|
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||||
|
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||||
|
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARM_AMBA=y
|
||||||
|
CONFIG_ARM_APPENDED_DTB=y
|
||||||
|
CONFIG_ARM_ARCH_TIMER=y
|
||||||
|
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
||||||
|
# CONFIG_ARM_ATAG_DTB_COMPAT is not set
|
||||||
|
CONFIG_ARM_CPUIDLE=y
|
||||||
|
# CONFIG_ARM_CPU_TOPOLOGY is not set
|
||||||
|
CONFIG_ARM_GIC=y
|
||||||
|
CONFIG_ARM_HAS_GROUP_RELOCS=y
|
||||||
|
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_QCOM_CPUFREQ_HW is not set
|
||||||
|
# CONFIG_ARM_QCOM_CPUFREQ_NVMEM is not set
|
||||||
|
# CONFIG_ARM_QCOM_SPM_CPUIDLE is not set
|
||||||
|
# CONFIG_ARM_SMMU is not set
|
||||||
|
CONFIG_ARM_THUMB=y
|
||||||
|
CONFIG_ARM_UNWIND=y
|
||||||
|
CONFIG_ARM_VIRT_EXT=y
|
||||||
|
CONFIG_AT803X_PHY=y
|
||||||
|
CONFIG_AUTO_ZRELADDR=y
|
||||||
|
CONFIG_BCH=y
|
||||||
|
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
CONFIG_BLK_MQ_PCI=y
|
||||||
|
CONFIG_BOUNCE=y
|
||||||
|
# CONFIG_CACHE_L2X0 is not set
|
||||||
|
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
|
||||||
|
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
|
||||||
|
CONFIG_CC_NO_ARRAY_BOUNDS=y
|
||||||
|
CONFIG_CLKSRC_QCOM=y
|
||||||
|
CONFIG_CLONE_BACKWARDS=y
|
||||||
|
CONFIG_CMDLINE_PARTITION=y
|
||||||
|
CONFIG_COMMON_CLK=y
|
||||||
|
CONFIG_COMMON_CLK_QCOM=y
|
||||||
|
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||||
|
CONFIG_COMPAT_32BIT_TIME=y
|
||||||
|
CONFIG_CONTEXT_TRACKING=y
|
||||||
|
CONFIG_CONTEXT_TRACKING_IDLE=y
|
||||||
|
CONFIG_CPUFREQ_DT=y
|
||||||
|
CONFIG_CPUFREQ_DT_PLATDEV=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_FREQ=y
|
||||||
|
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||||
|
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||||
|
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||||
|
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||||
|
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||||
|
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||||
|
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||||
|
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
|
||||||
|
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||||
|
CONFIG_CPU_FREQ_STAT=y
|
||||||
|
CONFIG_CPU_HAS_ASID=y
|
||||||
|
CONFIG_CPU_IDLE=y
|
||||||
|
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||||
|
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||||
|
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
|
||||||
|
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||||
|
CONFIG_CPU_PABRT_V7=y
|
||||||
|
CONFIG_CPU_PM=y
|
||||||
|
CONFIG_CPU_RMAP=y
|
||||||
|
CONFIG_CPU_SPECTRE=y
|
||||||
|
CONFIG_CPU_THERMAL=y
|
||||||
|
CONFIG_CPU_THUMB_CAPABLE=y
|
||||||
|
CONFIG_CPU_TLB_V7=y
|
||||||
|
CONFIG_CPU_V7=y
|
||||||
|
CONFIG_CRC16=y
|
||||||
|
# CONFIG_CRC32_SARWATE is not set
|
||||||
|
CONFIG_CRC32_SLICEBY8=y
|
||||||
|
CONFIG_CRC8=y
|
||||||
|
CONFIG_CRYPTO_AES_ARM=y
|
||||||
|
CONFIG_CRYPTO_AES_ARM_BS=y
|
||||||
|
CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y
|
||||||
|
CONFIG_CRYPTO_BLAKE2S_ARM=y
|
||||||
|
CONFIG_CRYPTO_CBC=y
|
||||||
|
CONFIG_CRYPTO_CRYPTD=y
|
||||||
|
CONFIG_CRYPTO_DEFLATE=y
|
||||||
|
CONFIG_CRYPTO_DES=y
|
||||||
|
CONFIG_CRYPTO_DEV_QCE=y
|
||||||
|
# CONFIG_CRYPTO_DEV_QCE_ENABLE_AEAD is not set
|
||||||
|
# CONFIG_CRYPTO_DEV_QCE_ENABLE_ALL is not set
|
||||||
|
# CONFIG_CRYPTO_DEV_QCE_ENABLE_SHA is not set
|
||||||
|
CONFIG_CRYPTO_DEV_QCE_ENABLE_SKCIPHER=y
|
||||||
|
CONFIG_CRYPTO_DEV_QCE_SKCIPHER=y
|
||||||
|
CONFIG_CRYPTO_DEV_QCE_SW_MAX_LEN=512
|
||||||
|
CONFIG_CRYPTO_DEV_QCOM_RNG=y
|
||||||
|
CONFIG_CRYPTO_DRBG=y
|
||||||
|
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||||
|
CONFIG_CRYPTO_DRBG_MENU=y
|
||||||
|
CONFIG_CRYPTO_ECB=y
|
||||||
|
CONFIG_CRYPTO_HASH_INFO=y
|
||||||
|
CONFIG_CRYPTO_HMAC=y
|
||||||
|
CONFIG_CRYPTO_HW=y
|
||||||
|
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||||
|
CONFIG_CRYPTO_LIB_DES=y
|
||||||
|
CONFIG_CRYPTO_LIB_SHA1=y
|
||||||
|
CONFIG_CRYPTO_LIB_SHA256=y
|
||||||
|
CONFIG_CRYPTO_LIB_UTILS=y
|
||||||
|
CONFIG_CRYPTO_LZO=y
|
||||||
|
CONFIG_CRYPTO_RNG=y
|
||||||
|
CONFIG_CRYPTO_RNG2=y
|
||||||
|
CONFIG_CRYPTO_RNG_DEFAULT=y
|
||||||
|
CONFIG_CRYPTO_SEQIV=y
|
||||||
|
CONFIG_CRYPTO_SHA1=y
|
||||||
|
CONFIG_CRYPTO_SHA256=y
|
||||||
|
CONFIG_CRYPTO_SHA256_ARM=y
|
||||||
|
CONFIG_CRYPTO_SHA512=y
|
||||||
|
CONFIG_CRYPTO_SIMD=y
|
||||||
|
CONFIG_CRYPTO_XTS=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_DMADEVICES=y
|
||||||
|
CONFIG_DMA_ENGINE=y
|
||||||
|
CONFIG_DMA_OF=y
|
||||||
|
CONFIG_DMA_OPS=y
|
||||||
|
CONFIG_DMA_SHARED_BUFFER=y
|
||||||
|
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||||
|
CONFIG_DTC=y
|
||||||
|
CONFIG_DT_IDLE_STATES=y
|
||||||
|
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||||
|
CONFIG_EDAC_SUPPORT=y
|
||||||
|
CONFIG_EEPROM_AT24=y
|
||||||
|
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
|
||||||
|
CONFIG_EXTCON=y
|
||||||
|
CONFIG_FIXED_PHY=y
|
||||||
|
CONFIG_FIX_EARLYCON_MEM=y
|
||||||
|
CONFIG_FWNODE_MDIO=y
|
||||||
|
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||||
|
CONFIG_FW_LOADER_SYSFS=y
|
||||||
|
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
|
||||||
|
CONFIG_GENERIC_ALLOCATOR=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_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_MSI_IRQ_DOMAIN=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_74X164=y
|
||||||
|
CONFIG_GPIO_CDEV=y
|
||||||
|
CONFIG_GPIO_WATCHDOG=y
|
||||||
|
CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y
|
||||||
|
CONFIG_GRO_CELLS=y
|
||||||
|
CONFIG_HARDEN_BRANCH_PREDICTOR=y
|
||||||
|
CONFIG_HARDIRQS_SW_RESEND=y
|
||||||
|
CONFIG_HAS_DMA=y
|
||||||
|
CONFIG_HAS_IOMEM=y
|
||||||
|
CONFIG_HAS_IOPORT_MAP=y
|
||||||
|
CONFIG_HAVE_SMP=y
|
||||||
|
CONFIG_HIGHMEM=y
|
||||||
|
# CONFIG_HIGHPTE is not set
|
||||||
|
CONFIG_HWSPINLOCK=y
|
||||||
|
CONFIG_HWSPINLOCK_QCOM=y
|
||||||
|
CONFIG_HW_RANDOM=y
|
||||||
|
CONFIG_HW_RANDOM_OPTEE=y
|
||||||
|
CONFIG_HZ_FIXED=0
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_BOARDINFO=y
|
||||||
|
CONFIG_I2C_CHARDEV=y
|
||||||
|
CONFIG_I2C_HELPER_AUTO=y
|
||||||
|
# CONFIG_I2C_QCOM_CCI is not set
|
||||||
|
CONFIG_I2C_QUP=y
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
# 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_IPQ_APSS_PLL is not set
|
||||||
|
CONFIG_IPQ_GCC_4019=y
|
||||||
|
# CONFIG_IPQ_GCC_6018 is not set
|
||||||
|
# CONFIG_IPQ_GCC_806X is not set
|
||||||
|
# CONFIG_IPQ_GCC_8074 is not set
|
||||||
|
# CONFIG_IPQ_LCC_806X is not set
|
||||||
|
CONFIG_IRQCHIP=y
|
||||||
|
CONFIG_IRQSTACKS=y
|
||||||
|
CONFIG_IRQ_DOMAIN=y
|
||||||
|
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||||
|
CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y
|
||||||
|
CONFIG_IRQ_FORCED_THREADING=y
|
||||||
|
CONFIG_IRQ_WORK=y
|
||||||
|
CONFIG_KMAP_LOCAL=y
|
||||||
|
CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y
|
||||||
|
# CONFIG_KPSS_XCC is not set
|
||||||
|
# CONFIG_KRAITCC is not set
|
||||||
|
CONFIG_LEDS_LP5523=y
|
||||||
|
CONFIG_LEDS_LP5562=y
|
||||||
|
CONFIG_LEDS_LP55XX_COMMON=y
|
||||||
|
CONFIG_LEDS_TLC591XX=y
|
||||||
|
CONFIG_LIBFDT=y
|
||||||
|
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||||
|
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||||
|
CONFIG_LZO_COMPRESS=y
|
||||||
|
CONFIG_LZO_DECOMPRESS=y
|
||||||
|
CONFIG_MDIO_BITBANG=y
|
||||||
|
CONFIG_MDIO_BUS=y
|
||||||
|
CONFIG_MDIO_DEVICE=y
|
||||||
|
CONFIG_MDIO_DEVRES=y
|
||||||
|
CONFIG_MDIO_GPIO=y
|
||||||
|
CONFIG_MDIO_IPQ4019=y
|
||||||
|
# CONFIG_MDM_GCC_9615 is not set
|
||||||
|
# CONFIG_MDM_LCC_9615 is not set
|
||||||
|
CONFIG_MEMFD_CREATE=y
|
||||||
|
# CONFIG_MFD_HI6421_SPMI is not set
|
||||||
|
# CONFIG_MFD_QCOM_RPM is not set
|
||||||
|
# CONFIG_MFD_SPMI_PMIC is not set
|
||||||
|
CONFIG_MFD_SYSCON=y
|
||||||
|
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
|
||||||
|
CONFIG_MIGRATION=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_BLOCK=y
|
||||||
|
CONFIG_MMC_CQHCI=y
|
||||||
|
CONFIG_MMC_SDHCI=y
|
||||||
|
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
|
||||||
|
CONFIG_MMC_SDHCI_MSM=y
|
||||||
|
# CONFIG_MMC_SDHCI_PCI is not set
|
||||||
|
CONFIG_MMC_SDHCI_PLTFM=y
|
||||||
|
CONFIG_MODULES_USE_ELF_REL=y
|
||||||
|
# CONFIG_MSM_GCC_8660 is not set
|
||||||
|
# CONFIG_MSM_GCC_8909 is not set
|
||||||
|
# CONFIG_MSM_GCC_8916 is not set
|
||||||
|
# CONFIG_MSM_GCC_8939 is not set
|
||||||
|
# CONFIG_MSM_GCC_8960 is not set
|
||||||
|
# CONFIG_MSM_GCC_8974 is not set
|
||||||
|
# CONFIG_MSM_GCC_8976 is not set
|
||||||
|
# CONFIG_MSM_GCC_8994 is not set
|
||||||
|
# CONFIG_MSM_GCC_8996 is not set
|
||||||
|
# CONFIG_MSM_GCC_8998 is not set
|
||||||
|
# CONFIG_MSM_GPUCC_8998 is not set
|
||||||
|
# CONFIG_MSM_LCC_8960 is not set
|
||||||
|
# CONFIG_MSM_MMCC_8960 is not set
|
||||||
|
# CONFIG_MSM_MMCC_8974 is not set
|
||||||
|
# CONFIG_MSM_MMCC_8996 is not set
|
||||||
|
# CONFIG_MSM_MMCC_8998 is not set
|
||||||
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
|
CONFIG_MTD_NAND_CORE=y
|
||||||
|
CONFIG_MTD_NAND_ECC=y
|
||||||
|
CONFIG_MTD_NAND_ECC_SW_BCH=y
|
||||||
|
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||||
|
CONFIG_MTD_NAND_QCOM=y
|
||||||
|
# CONFIG_MTD_QCOMSMEM_PARTS is not set
|
||||||
|
CONFIG_MTD_RAW_NAND=y
|
||||||
|
CONFIG_MTD_SPI_NAND=y
|
||||||
|
CONFIG_MTD_SPI_NOR=y
|
||||||
|
CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||||
|
CONFIG_MTD_SPLIT_FIT_FW=y
|
||||||
|
CONFIG_MTD_SPLIT_WRGG_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_NEON=y
|
||||||
|
CONFIG_NET_DEVLINK=y
|
||||||
|
CONFIG_NET_DSA=y
|
||||||
|
CONFIG_NET_DSA_QCA8K_IPQ4019=y
|
||||||
|
CONFIG_NET_DSA_TAG_OOB=y
|
||||||
|
CONFIG_NET_FLOW_LIMIT=y
|
||||||
|
CONFIG_NET_PTP_CLASSIFY=y
|
||||||
|
CONFIG_NET_SELFTESTS=y
|
||||||
|
CONFIG_NET_SWITCHDEV=y
|
||||||
|
CONFIG_NLS=y
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_NO_HZ_COMMON=y
|
||||||
|
CONFIG_NO_HZ_IDLE=y
|
||||||
|
CONFIG_NR_CPUS=4
|
||||||
|
CONFIG_NVMEM=y
|
||||||
|
CONFIG_NVMEM_QCOM_QFPROM=y
|
||||||
|
# CONFIG_NVMEM_QCOM_SEC_QFPROM is not set
|
||||||
|
# CONFIG_NVMEM_SPMI_SDAM is not set
|
||||||
|
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_OPTEE=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_PCI=y
|
||||||
|
CONFIG_PCIEAER=y
|
||||||
|
CONFIG_PCIEPORTBUS=y
|
||||||
|
CONFIG_PCIE_DW=y
|
||||||
|
CONFIG_PCIE_DW_HOST=y
|
||||||
|
CONFIG_PCIE_QCOM=y
|
||||||
|
CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
|
||||||
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||||
|
CONFIG_PCI_MSI=y
|
||||||
|
CONFIG_PCI_MSI_IRQ_DOMAIN=y
|
||||||
|
CONFIG_PERF_USE_VMALLOC=y
|
||||||
|
CONFIG_PGTABLE_LEVELS=2
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_PHYLINK=y
|
||||||
|
# CONFIG_PHY_QCOM_APQ8064_SATA is not set
|
||||||
|
# CONFIG_PHY_QCOM_EDP is not set
|
||||||
|
CONFIG_PHY_QCOM_IPQ4019_USB=y
|
||||||
|
# CONFIG_PHY_QCOM_IPQ806X_SATA is not set
|
||||||
|
# CONFIG_PHY_QCOM_IPQ806X_USB is not set
|
||||||
|
# CONFIG_PHY_QCOM_PCIE2 is not set
|
||||||
|
# CONFIG_PHY_QCOM_QMP is not set
|
||||||
|
# CONFIG_PHY_QCOM_QUSB2 is not set
|
||||||
|
# CONFIG_PHY_QCOM_USB_HS_28NM is not set
|
||||||
|
# CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2 is not set
|
||||||
|
# CONFIG_PHY_QCOM_USB_SS is not set
|
||||||
|
CONFIG_PINCTRL=y
|
||||||
|
# CONFIG_PINCTRL_APQ8064 is not set
|
||||||
|
# CONFIG_PINCTRL_APQ8084 is not set
|
||||||
|
CONFIG_PINCTRL_IPQ4019=y
|
||||||
|
# CONFIG_PINCTRL_IPQ8064 is not set
|
||||||
|
# CONFIG_PINCTRL_MDM9615 is not set
|
||||||
|
CONFIG_PINCTRL_MSM=y
|
||||||
|
# CONFIG_PINCTRL_MSM8226 is not set
|
||||||
|
# CONFIG_PINCTRL_MSM8660 is not set
|
||||||
|
# CONFIG_PINCTRL_MSM8909 is not set
|
||||||
|
# CONFIG_PINCTRL_MSM8916 is not set
|
||||||
|
# CONFIG_PINCTRL_MSM8960 is not set
|
||||||
|
# CONFIG_PINCTRL_QCOM_SPMI_PMIC is not set
|
||||||
|
# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set
|
||||||
|
# CONFIG_PINCTRL_SDX65 is not set
|
||||||
|
CONFIG_PM_OPP=y
|
||||||
|
CONFIG_POWER_RESET=y
|
||||||
|
CONFIG_POWER_RESET_GPIO_RESTART=y
|
||||||
|
CONFIG_POWER_RESET_MSM=y
|
||||||
|
CONFIG_POWER_SUPPLY=y
|
||||||
|
CONFIG_PPS=y
|
||||||
|
CONFIG_PREEMPT_NONE_BUILD=y
|
||||||
|
CONFIG_PRINTK_TIME=y
|
||||||
|
CONFIG_PTP_1588_CLOCK=y
|
||||||
|
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
|
||||||
|
CONFIG_QCA807X_PHY=y
|
||||||
|
# CONFIG_QCM_DISPCC_2290 is not set
|
||||||
|
# CONFIG_QCM_GCC_2290 is not set
|
||||||
|
CONFIG_QCOM_A53PLL=y
|
||||||
|
# CONFIG_QCOM_ADM is not set
|
||||||
|
CONFIG_QCOM_BAM_DMA=y
|
||||||
|
# CONFIG_QCOM_COMMAND_DB is not set
|
||||||
|
# CONFIG_QCOM_CPR is not set
|
||||||
|
# CONFIG_QCOM_EBI2 is not set
|
||||||
|
# CONFIG_QCOM_GENI_SE is not set
|
||||||
|
# CONFIG_QCOM_GSBI is not set
|
||||||
|
# CONFIG_QCOM_HFPLL is not set
|
||||||
|
# CONFIG_QCOM_ICC_BWMON is not set
|
||||||
|
# CONFIG_QCOM_IOMMU is not set
|
||||||
|
CONFIG_QCOM_IPQ4019_ESS_EDMA=y
|
||||||
|
# CONFIG_QCOM_LLCC is not set
|
||||||
|
# CONFIG_QCOM_OCMEM is not set
|
||||||
|
# CONFIG_QCOM_PDC is not set
|
||||||
|
# CONFIG_QCOM_RMTFS_MEM is not set
|
||||||
|
# CONFIG_QCOM_RPMH is not set
|
||||||
|
CONFIG_QCOM_SCM=y
|
||||||
|
# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
|
||||||
|
CONFIG_QCOM_SMEM=y
|
||||||
|
# CONFIG_QCOM_SMSM is not set
|
||||||
|
# CONFIG_QCOM_SOCINFO is not set
|
||||||
|
# CONFIG_QCOM_SPM is not set
|
||||||
|
# CONFIG_QCOM_STATS is not set
|
||||||
|
CONFIG_QCOM_TCSR=y
|
||||||
|
# CONFIG_QCOM_TSENS is not set
|
||||||
|
CONFIG_QCOM_WDT=y
|
||||||
|
# CONFIG_QCS_GCC_404 is not set
|
||||||
|
# CONFIG_QCS_Q6SSTOP_404 is not set
|
||||||
|
# CONFIG_QCS_TURING_404 is not set
|
||||||
|
CONFIG_RANDSTRUCT_NONE=y
|
||||||
|
CONFIG_RAS=y
|
||||||
|
CONFIG_RATIONAL=y
|
||||||
|
CONFIG_REGMAP=y
|
||||||
|
CONFIG_REGMAP_I2C=y
|
||||||
|
CONFIG_REGMAP_MMIO=y
|
||||||
|
CONFIG_REGULATOR=y
|
||||||
|
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||||
|
# CONFIG_REGULATOR_QCOM_LABIBB is not set
|
||||||
|
# CONFIG_REGULATOR_QCOM_SPMI is not set
|
||||||
|
# CONFIG_REGULATOR_QCOM_USB_VBUS is not set
|
||||||
|
CONFIG_REGULATOR_VCTRL=y
|
||||||
|
CONFIG_REGULATOR_VQMMC_IPQ4019=y
|
||||||
|
CONFIG_RESET_CONTROLLER=y
|
||||||
|
# CONFIG_RESET_QCOM_AOSS is not set
|
||||||
|
# CONFIG_RESET_QCOM_PDC is not set
|
||||||
|
CONFIG_RFS_ACCEL=y
|
||||||
|
CONFIG_RPS=y
|
||||||
|
CONFIG_RTC_CLASS=y
|
||||||
|
# CONFIG_RTC_DRV_OPTEE is not set
|
||||||
|
CONFIG_RTC_I2C_AND_SPI=y
|
||||||
|
CONFIG_RTC_MC146818_LIB=y
|
||||||
|
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||||
|
# CONFIG_SC_CAMCC_7280 is not set
|
||||||
|
# CONFIG_SC_DISPCC_7180 is not set
|
||||||
|
# CONFIG_SC_GCC_7180 is not set
|
||||||
|
# CONFIG_SC_GCC_8280XP is not set
|
||||||
|
# CONFIG_SC_GPUCC_7180 is not set
|
||||||
|
# CONFIG_SC_LPASSCC_7280 is not set
|
||||||
|
# CONFIG_SC_LPASS_CORECC_7180 is not set
|
||||||
|
# CONFIG_SC_LPASS_CORECC_7280 is not set
|
||||||
|
# CONFIG_SC_MSS_7180 is not set
|
||||||
|
# CONFIG_SC_VIDEOCC_7180 is not set
|
||||||
|
# CONFIG_SDM_CAMCC_845 is not set
|
||||||
|
# CONFIG_SDM_DISPCC_845 is not set
|
||||||
|
# CONFIG_SDM_GCC_660 is not set
|
||||||
|
# CONFIG_SDM_GCC_845 is not set
|
||||||
|
# CONFIG_SDM_GPUCC_845 is not set
|
||||||
|
# CONFIG_SDM_LPASSCC_845 is not set
|
||||||
|
# CONFIG_SDM_VIDEOCC_845 is not set
|
||||||
|
# CONFIG_SDX_GCC_65 is not set
|
||||||
|
CONFIG_SERIAL_8250_FSL=y
|
||||||
|
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||||
|
CONFIG_SERIAL_MSM=y
|
||||||
|
CONFIG_SERIAL_MSM_CONSOLE=y
|
||||||
|
CONFIG_SGL_ALLOC=y
|
||||||
|
CONFIG_SKB_EXTENSIONS=y
|
||||||
|
CONFIG_SMP=y
|
||||||
|
CONFIG_SMP_ON_UP=y
|
||||||
|
# CONFIG_SM_CAMCC_8450 is not set
|
||||||
|
# CONFIG_SM_GCC_8150 is not set
|
||||||
|
# CONFIG_SM_GCC_8250 is not set
|
||||||
|
# CONFIG_SM_GCC_8450 is not set
|
||||||
|
# CONFIG_SM_GPUCC_6350 is not set
|
||||||
|
# CONFIG_SM_GPUCC_8150 is not set
|
||||||
|
# CONFIG_SM_GPUCC_8250 is not set
|
||||||
|
# CONFIG_SM_GPUCC_8350 is not set
|
||||||
|
# CONFIG_SM_VIDEOCC_8150 is not set
|
||||||
|
# CONFIG_SM_VIDEOCC_8250 is not set
|
||||||
|
CONFIG_SOCK_RX_QUEUE_MAPPING=y
|
||||||
|
CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||||
|
CONFIG_SPARSE_IRQ=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_SPI_BITBANG=y
|
||||||
|
CONFIG_SPI_GPIO=y
|
||||||
|
CONFIG_SPI_MASTER=y
|
||||||
|
CONFIG_SPI_MEM=y
|
||||||
|
CONFIG_SPI_QUP=y
|
||||||
|
CONFIG_SPMI=y
|
||||||
|
# CONFIG_SPMI_HISI3670 is not set
|
||||||
|
CONFIG_SPMI_MSM_PMIC_ARB=y
|
||||||
|
# CONFIG_SPMI_PMIC_CLKDIV is not set
|
||||||
|
CONFIG_SRCU=y
|
||||||
|
CONFIG_SWPHY=y
|
||||||
|
CONFIG_SWP_EMULATE=y
|
||||||
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
|
CONFIG_TEE=y
|
||||||
|
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_OF=y
|
||||||
|
CONFIG_TIMER_PROBE=y
|
||||||
|
CONFIG_TREE_RCU=y
|
||||||
|
CONFIG_TREE_SRCU=y
|
||||||
|
CONFIG_UBIFS_FS=y
|
||||||
|
CONFIG_UEVENT_HELPER_PATH=""
|
||||||
|
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||||
|
CONFIG_UNWINDER_ARM=y
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_COMMON=y
|
||||||
|
CONFIG_USB_SUPPORT=y
|
||||||
|
CONFIG_USE_OF=y
|
||||||
|
CONFIG_VFP=y
|
||||||
|
CONFIG_VFPv3=y
|
||||||
|
CONFIG_WATCHDOG_CORE=y
|
||||||
|
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
|
|
@ -0,0 +1,221 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
// Copyright (c) 2022, Pawel Dembicki <paweldembicki@gmail.com>.
|
||||||
|
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
||||||
|
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
||||||
|
|
||||||
|
#include "qcom-ipq4018-mf287_common.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "ZTE MF287";
|
||||||
|
compatible = "zte,mf287";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio_modem_reset {
|
||||||
|
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&key_reset {
|
||||||
|
gpios = <&tlmm 63 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&key_wps {
|
||||||
|
gpios = <&tlmm 2 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&led_status {
|
||||||
|
gpios = <&tlmm 0 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_spi1 {
|
||||||
|
pinctrl-0 = <&spi_0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>,
|
||||||
|
<&tlmm 59 GPIO_ACTIVE_HIGH>,
|
||||||
|
<&tlmm 1 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
|
flash@0 {
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <24000000>;
|
||||||
|
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "0:SBL1";
|
||||||
|
reg = <0x0 0x40000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@40000 {
|
||||||
|
label = "0:MIBIB";
|
||||||
|
reg = <0x40000 0x20000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@60000 {
|
||||||
|
label = "0:QSEE";
|
||||||
|
reg = <0x60000 0x60000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@c0000 {
|
||||||
|
label = "0:CDT";
|
||||||
|
reg = <0xc0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@d0000 {
|
||||||
|
label = "0:DDRPARAMS";
|
||||||
|
reg = <0xd0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@e0000 {
|
||||||
|
label = "0:APPSBLENV";
|
||||||
|
reg = <0xe0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@f0000 {
|
||||||
|
label = "0:APPSBL";
|
||||||
|
reg = <0xf0000 0xc0000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@1b0000 {
|
||||||
|
label = "0:reserved1";
|
||||||
|
reg = <0x1b0000 0x50000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi-nand@1 { /* flash@1 ? */
|
||||||
|
compatible = "spi-nand";
|
||||||
|
reg = <1>;
|
||||||
|
spi-max-frequency = <24000000>;
|
||||||
|
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "fota-flag";
|
||||||
|
reg = <0x0 0x140000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@140000 {
|
||||||
|
label = "ART";
|
||||||
|
reg = <0x140000 0x140000>;
|
||||||
|
read-only;
|
||||||
|
compatible = "nvmem-cells";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
precal_art_1000: precal@1000 {
|
||||||
|
reg = <0x1000 0x2f20>;
|
||||||
|
};
|
||||||
|
|
||||||
|
precal_art_5000: precal@5000 {
|
||||||
|
reg = <0x5000 0x2f20>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@280000 {
|
||||||
|
label = "mac";
|
||||||
|
reg = <0x280000 0x140000>;
|
||||||
|
read-only;
|
||||||
|
compatible = "nvmem-cells";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
macaddr_mac_0: macaddr@0 {
|
||||||
|
reg = <0x0 0x6>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@3c0000 {
|
||||||
|
label = "cfg-param";
|
||||||
|
reg = <0x3c0000 0x600000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@9c0000 {
|
||||||
|
label = "oops";
|
||||||
|
reg = <0x9c0000 0x140000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@b00000 {
|
||||||
|
label = "web";
|
||||||
|
reg = <0xb00000 0x800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@1300000 {
|
||||||
|
label = "rootfs";
|
||||||
|
reg = <0x1300000 0x2200000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@3500000 {
|
||||||
|
label = "data";
|
||||||
|
reg = <0x3500000 0x1900000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@4e00000 {
|
||||||
|
label = "fota";
|
||||||
|
reg = <0x4e00000 0x3200000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
zigbee@2 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
compatible = "silabs,em3581";
|
||||||
|
reg = <2>;
|
||||||
|
spi-max-frequency = <12000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&tlmm {
|
||||||
|
serial_pins: serial_pinmux {
|
||||||
|
mux {
|
||||||
|
pins = "gpio60", "gpio61";
|
||||||
|
function = "blsp_uart0";
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi_0_pins: spi_0_pinmux {
|
||||||
|
pinmux {
|
||||||
|
function = "blsp_spi0";
|
||||||
|
pins = "gpio55", "gpio56", "gpio57";
|
||||||
|
drive-strength = <12>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinmux_cs {
|
||||||
|
function = "gpio";
|
||||||
|
pins = "gpio54", "gpio59", "gpio1";
|
||||||
|
drive-strength = <2>;
|
||||||
|
bias-disable;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&wifi0 {
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287";
|
||||||
|
};
|
||||||
|
|
||||||
|
&wifi1{
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287";
|
||||||
|
};
|
|
@ -35,6 +35,16 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpio_export {
|
||||||
|
compatible = "gpio-export";
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
gpio_modem_reset: modem {
|
||||||
|
gpio-export,name = "modem-reset";
|
||||||
|
gpio-export,output = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
keys {
|
keys {
|
||||||
compatible = "gpio-keys";
|
compatible = "gpio-keys";
|
||||||
|
|
||||||
|
@ -171,7 +181,6 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
nvmem-cell-names = "pre-calibration", "mac-address";
|
nvmem-cell-names = "pre-calibration", "mac-address";
|
||||||
nvmem-cells = <&precal_art_1000>, <&macaddr_mac_0>;
|
nvmem-cells = <&precal_art_1000>, <&macaddr_mac_0>;
|
||||||
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&wifi1 {
|
&wifi1 {
|
||||||
|
@ -179,5 +188,4 @@
|
||||||
nvmem-cell-names = "pre-calibration", "mac-address";
|
nvmem-cell-names = "pre-calibration", "mac-address";
|
||||||
nvmem-cells = <&precal_art_5000>, <&macaddr_mac_0>;
|
nvmem-cells = <&precal_art_5000>, <&macaddr_mac_0>;
|
||||||
mac-address-increment = <1>;
|
mac-address-increment = <1>;
|
||||||
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
|
||||||
};
|
};
|
|
@ -3,20 +3,15 @@
|
||||||
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
||||||
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
||||||
|
|
||||||
#include "qcom-ipq4018-mf287.dtsi"
|
#include "qcom-ipq4018-mf287_common.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "ZTE MF287Plus";
|
model = "ZTE MF287Plus";
|
||||||
compatible = "zte,mf287plus";
|
compatible = "zte,mf287plus";
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
&gpio_modem_reset {
|
||||||
* This node is used to restart modem module to avoid anomalous
|
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
||||||
* behaviours on initial communication.
|
|
||||||
*/
|
|
||||||
gpio-restart {
|
|
||||||
compatible = "gpio-restart";
|
|
||||||
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&key_reset {
|
&key_reset {
|
||||||
|
@ -216,3 +211,11 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&wifi0 {
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||||
|
};
|
||||||
|
|
||||||
|
&wifi1{
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||||
|
};
|
||||||
|
|
|
@ -3,23 +3,12 @@
|
||||||
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
||||||
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
||||||
|
|
||||||
#include "qcom-ipq4018-mf287.dtsi"
|
#include "qcom-ipq4018-mf287_common.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "ZTE MF287Pro";
|
model = "ZTE MF287Pro";
|
||||||
compatible = "zte,mf287pro";
|
compatible = "zte,mf287pro";
|
||||||
|
|
||||||
gpio_export {
|
|
||||||
compatible = "gpio-export";
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
modem {
|
|
||||||
gpio-export,name = "modem-reset";
|
|
||||||
gpio-export,output = <0>;
|
|
||||||
gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
regulator-usb-vbus {
|
regulator-usb-vbus {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "USB_VBUS";
|
regulator-name = "USB_VBUS";
|
||||||
|
@ -31,6 +20,10 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gpio_modem_reset {
|
||||||
|
gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
|
||||||
&key_reset {
|
&key_reset {
|
||||||
gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
|
@ -263,3 +256,13 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* The MF287Plus and MF287Pro share the same board data file */
|
||||||
|
&wifi0 {
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The MF287Plus and MF287Pro share the same board data file */
|
||||||
|
&wifi1{
|
||||||
|
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,326 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
|
||||||
|
#include "qcom-ipq4019.dtsi"
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/input/input.h>
|
||||||
|
#include <dt-bindings/soc/qcom,tcsr.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "YYeTs LE1";
|
||||||
|
compatible = "yyets,le1";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
led-boot = &led_usb;
|
||||||
|
led-failsafe = &led_usb;
|
||||||
|
led-upgrade = &led_usb;
|
||||||
|
|
||||||
|
ethernet0 = &swport5;
|
||||||
|
ethernet1 = &gmac;
|
||||||
|
label-mac-device = &gmac;
|
||||||
|
};
|
||||||
|
|
||||||
|
keys {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
|
||||||
|
reset {
|
||||||
|
label = "reset";
|
||||||
|
gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
|
||||||
|
linux,code = <KEY_RESTART>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
|
led_usb: usb {
|
||||||
|
label = "green:usb";
|
||||||
|
gpios = <&tlmm 36 GPIO_ACTIVE_LOW>;
|
||||||
|
linux,default-trigger = "usbport";
|
||||||
|
trigger-sources = <&usb3_port1>, <&usb3_port2>, <&usb2_port1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
wlan2g {
|
||||||
|
label = "green:wlan2g";
|
||||||
|
gpios = <&tlmm 32 GPIO_ACTIVE_LOW>;
|
||||||
|
linux,default-trigger = "phy0tpt";
|
||||||
|
};
|
||||||
|
|
||||||
|
wlan5g {
|
||||||
|
label = "green:wlan5g";
|
||||||
|
gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
|
||||||
|
linux,default-trigger = "phy1tpt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
soc {
|
||||||
|
tcsr@1949000 {
|
||||||
|
compatible = "qcom,tcsr";
|
||||||
|
reg = <0x1949000 0x100>;
|
||||||
|
qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
|
||||||
|
};
|
||||||
|
|
||||||
|
tcsr@194b000 {
|
||||||
|
compatible = "qcom,tcsr";
|
||||||
|
reg = <0x194b000 0x100>;
|
||||||
|
qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ess_tcsr@1953000 {
|
||||||
|
compatible = "qcom,tcsr";
|
||||||
|
reg = <0x1953000 0x1000>;
|
||||||
|
qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
|
||||||
|
};
|
||||||
|
|
||||||
|
tcsr@1957000 {
|
||||||
|
compatible = "qcom,tcsr";
|
||||||
|
reg = <0x1957000 0x100>;
|
||||||
|
qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_dma {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_spi1 {
|
||||||
|
cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-0 = <&spi_0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
flash@0 {
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <24000000>;
|
||||||
|
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "SBL1";
|
||||||
|
reg = <0x0 0x40000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@40000 {
|
||||||
|
label = "MIBIB";
|
||||||
|
reg = <0x40000 0x20000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@60000 {
|
||||||
|
label = "QSEE";
|
||||||
|
reg = <0x60000 0x60000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@c0000 {
|
||||||
|
label = "CDT";
|
||||||
|
reg = <0xc0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@d0000 {
|
||||||
|
label = "DDRPARAMS";
|
||||||
|
reg = <0xd0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@e0000 {
|
||||||
|
label = "APPSBLENV";
|
||||||
|
reg = <0xe0000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@f0000 {
|
||||||
|
label = "APPSBL";
|
||||||
|
reg = <0xf0000 0x80000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@170000 {
|
||||||
|
label = "ART";
|
||||||
|
reg = <0x170000 0x10000>;
|
||||||
|
read-only;
|
||||||
|
|
||||||
|
compatible = "nvmem-cells";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
precal_art_1000: precal@1000 {
|
||||||
|
reg = <0x1000 0x2f20>;
|
||||||
|
};
|
||||||
|
|
||||||
|
precal_art_5000: precal@5000 {
|
||||||
|
reg = <0x5000 0x2f20>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@180000 {
|
||||||
|
compatible = "denx,fit";
|
||||||
|
label = "firmware";
|
||||||
|
reg = <0x180000 0x1e80000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_uart1 {
|
||||||
|
pinctrl-0 = <&serial_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cryptobam {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&crypto {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gmac {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&mdio {
|
||||||
|
pinctrl-0 = <&mdio_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&prng {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&switch {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&swport1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&swport2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&swport3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&swport4 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&swport5 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&tlmm {
|
||||||
|
mdio_pins: mdio_pinmux {
|
||||||
|
mux_1 {
|
||||||
|
pins = "gpio6";
|
||||||
|
function = "mdio";
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
mux_2 {
|
||||||
|
pins = "gpio7";
|
||||||
|
function = "mdc";
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
serial_pins: serial_pinmux {
|
||||||
|
mux {
|
||||||
|
pins = "gpio16", "gpio17";
|
||||||
|
function = "blsp_uart0";
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi_0_pins: spi_0_pinmux {
|
||||||
|
pinmux {
|
||||||
|
function = "blsp_spi0";
|
||||||
|
pins = "gpio13", "gpio14", "gpio15";
|
||||||
|
drive-strength = <12>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinmux_cs {
|
||||||
|
function = "gpio";
|
||||||
|
pins = "gpio12";
|
||||||
|
drive-strength = <2>;
|
||||||
|
bias-disable;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
dwc3@6000000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
usb2_port1: port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
#trigger-source-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2_hs_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
dwc3@8a00000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
usb3_port1: port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
#trigger-source-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb3_port2: port@2 {
|
||||||
|
reg = <2>;
|
||||||
|
#trigger-source-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_hs_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_ss_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&watchdog {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&wifi0 {
|
||||||
|
status = "okay";
|
||||||
|
nvmem-cells = <&precal_art_1000>;
|
||||||
|
nvmem-cell-names = "pre-calibration";
|
||||||
|
qcom,ath10k-calibration-variant = "YYeTs-LE1";
|
||||||
|
};
|
||||||
|
|
||||||
|
&wifi1 {
|
||||||
|
status = "okay";
|
||||||
|
nvmem-cells = <&precal_art_5000>;
|
||||||
|
nvmem-cell-names = "pre-calibration";
|
||||||
|
qcom,ath10k-calibration-variant = "YYeTs-LE1";
|
||||||
|
};
|
|
@ -0,0 +1,12 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
|
||||||
|
#include "qcom-ipq4019-orbi.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "NETGEAR RBR40";
|
||||||
|
compatible = "netgear,rbr40";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
bootargs = "root=/dev/mmcblk0p20 blkdevparts=mmcblk0:512K@17K(0:SBL1)ro,512K(0:BOOTCONFIG)ro,512K(0:QSEE)ro,512K(0:QSEE_ALT)ro,256K(0:CDT)ro,256K(0:CDT_ALT)ro,256K(0:DDRPARAMS)ro,256K(0:APPSBLENV)ro,1M(0:APPSBL)ro,1M(0:APPSBL_ALT)ro,256K(0:ART)ro,256K(ARTMTD)ro,2M(language)ro,256K(config)ro,256K(pot)ro,256K(traffic_meter)ro,256K(pot_bak)ro,256K(traffic_meter.bak)ro,3840K(kernel),31488K(rootfs),35328K@9233K(firmware),256K(mtdoops)ro,1457651200(reserved)ro,-(unallocated) rootfstype=squashfs,ext4 rootwait";
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,12 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
|
||||||
|
#include "qcom-ipq4019-orbi.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "NETGEAR RBS40";
|
||||||
|
compatible = "netgear,rbs40";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
bootargs = "root=/dev/mmcblk0p20 blkdevparts=mmcblk0:512K@17K(0:SBL1)ro,512K(0:BOOTCONFIG)ro,512K(0:QSEE)ro,512K(0:QSEE_ALT)ro,256K(0:CDT)ro,256K(0:CDT_ALT)ro,256K(0:DDRPARAMS)ro,256K(0:APPSBLENV)ro,1M(0:APPSBL)ro,1M(0:APPSBL_ALT)ro,256K(0:ART)ro,256K(ARTMTD)ro,2M(language)ro,256K(config)ro,256K(pot)ro,256K(traffic_meter)ro,256K(pot_bak)ro,256K(traffic_meter.bak)ro,3840K(kernel),31488K(rootfs),35328K@9233K(firmware),256K(mtdoops)ro,1457651200(reserved)ro,-(unallocated) rootfstype=squashfs,ext4 rootwait";
|
||||||
|
};
|
||||||
|
};
|
|
@ -644,8 +644,13 @@ static int qca807x_sfp_insert(void *upstream, const struct sfp_eeprom_id *id)
|
||||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, };
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, };
|
||||||
phy_interface_t iface;
|
phy_interface_t iface;
|
||||||
int ret;
|
int ret;
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0)
|
||||||
|
DECLARE_PHY_INTERFACE_MASK(interfaces);
|
||||||
|
|
||||||
|
sfp_parse_support(phydev->sfp_bus, id, support, interfaces);
|
||||||
|
#else
|
||||||
sfp_parse_support(phydev->sfp_bus, id, support);
|
sfp_parse_support(phydev->sfp_bus, id, support);
|
||||||
|
#endif
|
||||||
iface = sfp_select_interface(phydev->sfp_bus, support);
|
iface = sfp_select_interface(phydev->sfp_bus, support);
|
||||||
|
|
||||||
dev_info(&phydev->mdio.dev, "%s SFP module inserted\n", phy_modes(iface));
|
dev_info(&phydev->mdio.dev, "%s SFP module inserted\n", phy_modes(iface));
|
||||||
|
|
|
@ -826,6 +826,30 @@ define Device/netgear_orbi
|
||||||
DEVICE_PACKAGES := ath10k-firmware-qca9984-ct e2fsprogs kmod-fs-ext4 losetup
|
DEVICE_PACKAGES := ath10k-firmware-qca9984-ct e2fsprogs kmod-fs-ext4 losetup
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Device/netgear_rbx40
|
||||||
|
$(call Device/netgear_orbi)
|
||||||
|
NETGEAR_HW_ID := 29765515+0+4096+512+2x2+2x2+2x2
|
||||||
|
KERNEL_SIZE := 3932160
|
||||||
|
ROOTFS_SIZE := 32243712
|
||||||
|
IMAGE_SIZE := 36175872
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Device/netgear_rbr40
|
||||||
|
$(call Device/netgear_rbx40)
|
||||||
|
DEVICE_MODEL := RBR40
|
||||||
|
DEVICE_VARIANT := v1
|
||||||
|
NETGEAR_BOARD_ID := RBR40
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += netgear_rbr40
|
||||||
|
|
||||||
|
define Device/netgear_rbs40
|
||||||
|
$(call Device/netgear_rbx40)
|
||||||
|
DEVICE_MODEL := RBS40
|
||||||
|
DEVICE_VARIANT := v1
|
||||||
|
NETGEAR_BOARD_ID := RBS40
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += netgear_rbs40
|
||||||
|
|
||||||
define Device/netgear_rbx50
|
define Device/netgear_rbx50
|
||||||
$(call Device/netgear_orbi)
|
$(call Device/netgear_orbi)
|
||||||
NETGEAR_HW_ID := 29765352+0+4000+512+2x2+2x2+4x4
|
NETGEAR_HW_ID := 29765352+0+4000+512+2x2+2x2+4x4
|
||||||
|
@ -1098,6 +1122,20 @@ define Device/wallys_dr40x9
|
||||||
endef
|
endef
|
||||||
TARGET_DEVICES += wallys_dr40x9
|
TARGET_DEVICES += wallys_dr40x9
|
||||||
|
|
||||||
|
define Device/yyets_le1
|
||||||
|
$(call Device/FitzImage)
|
||||||
|
DEVICE_VENDOR := YYeTs
|
||||||
|
DEVICE_MODEL := LE1
|
||||||
|
SOC := qcom-ipq4019
|
||||||
|
KERNEL_SIZE := 4096k
|
||||||
|
IMAGE_SIZE := 31232k
|
||||||
|
IMAGES += factory.bin
|
||||||
|
IMAGE/factory.bin := qsdk-ipq-factory-nor | check-size
|
||||||
|
IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata
|
||||||
|
DEVICE_PACKAGES := ipq-wifi-yyets_le1 kmod-usb-ledtrig-usbport
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += yyets_le1
|
||||||
|
|
||||||
define Device/zte_mf18a
|
define Device/zte_mf18a
|
||||||
$(call Device/FitImage)
|
$(call Device/FitImage)
|
||||||
DEVICE_VENDOR := ZTE
|
DEVICE_VENDOR := ZTE
|
||||||
|
@ -1130,7 +1168,6 @@ TARGET_DEVICES += zte_mf286d
|
||||||
|
|
||||||
define Device/zte_mf287_common
|
define Device/zte_mf287_common
|
||||||
$(call Device/zte_mf28x_common)
|
$(call Device/zte_mf28x_common)
|
||||||
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
|
||||||
SOC := qcom-ipq4018
|
SOC := qcom-ipq4018
|
||||||
# The recovery image is used to return back to stock (an initramfs-based image
|
# The recovery image is used to return back to stock (an initramfs-based image
|
||||||
# that can be flashed to the device via sysupgrade
|
# that can be flashed to the device via sysupgrade
|
||||||
|
@ -1138,20 +1175,28 @@ define Device/zte_mf287_common
|
||||||
# exploit for the web interface
|
# exploit for the web interface
|
||||||
IMAGES += factory.bin recovery.bin
|
IMAGES += factory.bin recovery.bin
|
||||||
IMAGE/factory.bin := append-ubi
|
IMAGE/factory.bin := append-ubi
|
||||||
IMAGE/recovery.bin := append-squashfs4-fakeroot | sysupgrade-tar kernel=$$$$(BIN_DIR)/openwrt-$$(BOARD)$$(if $$(SUBTARGET),-$$(SUBTARGET))-$$(DEVICE_NAME)-initramfs-zImage.itb rootfs=$$$$@ | append-metadata
|
IMAGE/recovery.bin := append-squashfs4-fakeroot | sysupgrade-tar kernel=$$$$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE) rootfs=$$$$@ | append-metadata
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Device/zte_mf287plus
|
define Device/zte_mf287plus
|
||||||
$(call Device/zte_mf287_common)
|
$(call Device/zte_mf287_common)
|
||||||
|
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
||||||
DEVICE_DTS_CONFIG := config@ap.dk01.1-c2
|
DEVICE_DTS_CONFIG := config@ap.dk01.1-c2
|
||||||
DEVICE_MODEL := MF287Plus
|
DEVICE_MODEL := MF287Plus
|
||||||
DEVICE_ALT0_VENDOR := ZTE
|
|
||||||
DEVICE_ALT0_MODEL := MF287
|
|
||||||
endef
|
endef
|
||||||
TARGET_DEVICES += zte_mf287plus
|
TARGET_DEVICES += zte_mf287plus
|
||||||
|
|
||||||
|
define Device/zte_mf287
|
||||||
|
$(call Device/zte_mf287_common)
|
||||||
|
DEVICE_PACKAGES += ipq-wifi-zte_mf287
|
||||||
|
DEVICE_DTS_CONFIG := config@ap.dk01.1-c2
|
||||||
|
DEVICE_MODEL := MF287
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += zte_mf287
|
||||||
|
|
||||||
define Device/zte_mf287pro
|
define Device/zte_mf287pro
|
||||||
$(call Device/zte_mf287_common)
|
$(call Device/zte_mf287_common)
|
||||||
|
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
||||||
DEVICE_DTS_CONFIG := config@ap.dk04.1-c1
|
DEVICE_DTS_CONFIG := config@ap.dk04.1-c1
|
||||||
DEVICE_MODEL := MF287Pro
|
DEVICE_MODEL := MF287Pro
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
From 53cac0823f86c39eb4b00e2c9a7b2483a4182008 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Mon, 14 Aug 2023 12:37:58 +0200
|
||||||
|
Subject: [PATCH 1/2] dt-bindings: clock: qcom: ipq4019: add missing networking
|
||||||
|
resets
|
||||||
|
|
||||||
|
Add bindings for the missing networking resets found in IPQ4019 GCC.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
include/dt-bindings/clock/qcom,gcc-ipq4019.h | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
||||||
|
+++ b/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
||||||
|
@@ -165,5 +165,11 @@
|
||||||
|
#define GCC_QDSS_BCR 69
|
||||||
|
#define GCC_MPM_BCR 70
|
||||||
|
#define GCC_SPDM_BCR 71
|
||||||
|
+#define ESS_MAC1_ARES 72
|
||||||
|
+#define ESS_MAC2_ARES 73
|
||||||
|
+#define ESS_MAC3_ARES 74
|
||||||
|
+#define ESS_MAC4_ARES 75
|
||||||
|
+#define ESS_MAC5_ARES 76
|
||||||
|
+#define ESS_PSGMII_ARES 77
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 6038ba75e2aa8e57d4eaf20a90c8061c43b1117f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Mon, 14 Aug 2023 12:39:04 +0200
|
||||||
|
Subject: [PATCH 2/2] clk: qcom: gcc-ipq4019: add missing networking resets
|
||||||
|
|
||||||
|
IPQ4019 has more networking related resets that will be required for future
|
||||||
|
wired networking support, so lets add them.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
drivers/clk/qcom/gcc-ipq4019.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
+++ b/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
@@ -1707,6 +1707,12 @@ static const struct qcom_reset_map gcc_i
|
||||||
|
[GCC_TCSR_BCR] = {0x22000, 0},
|
||||||
|
[GCC_MPM_BCR] = {0x24000, 0},
|
||||||
|
[GCC_SPDM_BCR] = {0x25000, 0},
|
||||||
|
+ [ESS_MAC1_ARES] = {0x1200C, 0},
|
||||||
|
+ [ESS_MAC2_ARES] = {0x1200C, 1},
|
||||||
|
+ [ESS_MAC3_ARES] = {0x1200C, 2},
|
||||||
|
+ [ESS_MAC4_ARES] = {0x1200C, 3},
|
||||||
|
+ [ESS_MAC5_ARES] = {0x1200C, 4},
|
||||||
|
+ [ESS_PSGMII_ARES] = {0x1200C, 5},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct regmap_config gcc_ipq4019_regmap_config = {
|
|
@ -1,52 +0,0 @@
|
||||||
From 480c1f7648fc586db12d6003c717c23667a4fcf0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ram Chandra Jangir <rjangir@codeaurora.org>
|
|
||||||
Date: Tue, 28 Mar 2017 22:35:33 +0530
|
|
||||||
Subject: [PATCH] clk: qcom: ipq4019: add ess reset
|
|
||||||
|
|
||||||
Added the ESS reset in IPQ4019 GCC.
|
|
||||||
|
|
||||||
Signed-off-by: Ram Chandra Jangir <rjangir@codeaurora.org>
|
|
||||||
---
|
|
||||||
drivers/clk/qcom/gcc-ipq4019.c | 11 +++++++++++
|
|
||||||
include/dt-bindings/clock/qcom,gcc-ipq4019.h | 11 +++++++++++
|
|
||||||
2 files changed, 22 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/clk/qcom/gcc-ipq4019.c
|
|
||||||
+++ b/drivers/clk/qcom/gcc-ipq4019.c
|
|
||||||
@@ -1735,6 +1735,17 @@ static const struct qcom_reset_map gcc_i
|
|
||||||
[GCC_TCSR_BCR] = {0x22000, 0},
|
|
||||||
[GCC_MPM_BCR] = {0x24000, 0},
|
|
||||||
[GCC_SPDM_BCR] = {0x25000, 0},
|
|
||||||
+ [ESS_MAC1_ARES] = {0x1200C, 0},
|
|
||||||
+ [ESS_MAC2_ARES] = {0x1200C, 1},
|
|
||||||
+ [ESS_MAC3_ARES] = {0x1200C, 2},
|
|
||||||
+ [ESS_MAC4_ARES] = {0x1200C, 3},
|
|
||||||
+ [ESS_MAC5_ARES] = {0x1200C, 4},
|
|
||||||
+ [ESS_PSGMII_ARES] = {0x1200C, 5},
|
|
||||||
+ [ESS_MAC1_CLK_DIS] = {0x1200C, 8},
|
|
||||||
+ [ESS_MAC2_CLK_DIS] = {0x1200C, 9},
|
|
||||||
+ [ESS_MAC3_CLK_DIS] = {0x1200C, 10},
|
|
||||||
+ [ESS_MAC4_CLK_DIS] = {0x1200C, 11},
|
|
||||||
+ [ESS_MAC5_CLK_DIS] = {0x1200C, 12},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct regmap_config gcc_ipq4019_regmap_config = {
|
|
||||||
--- a/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
|
||||||
+++ b/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
|
||||||
@@ -165,5 +165,16 @@
|
|
||||||
#define GCC_QDSS_BCR 69
|
|
||||||
#define GCC_MPM_BCR 70
|
|
||||||
#define GCC_SPDM_BCR 71
|
|
||||||
+#define ESS_MAC1_ARES 72
|
|
||||||
+#define ESS_MAC2_ARES 73
|
|
||||||
+#define ESS_MAC3_ARES 74
|
|
||||||
+#define ESS_MAC4_ARES 75
|
|
||||||
+#define ESS_MAC5_ARES 76
|
|
||||||
+#define ESS_PSGMII_ARES 77
|
|
||||||
+#define ESS_MAC1_CLK_DIS 78
|
|
||||||
+#define ESS_MAC2_CLK_DIS 79
|
|
||||||
+#define ESS_MAC3_CLK_DIS 80
|
|
||||||
+#define ESS_MAC4_CLK_DIS 81
|
|
||||||
+#define ESS_MAC5_CLK_DIS 82
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
From be59072c6eeb7535bf9a339fb9d5a8bfae17ac22 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Mon, 14 Aug 2023 12:40:23 +0200
|
||||||
|
Subject: [PATCH] dt-bindings: clock: qcom: ipq4019: add missing networking
|
||||||
|
resets
|
||||||
|
|
||||||
|
Add bindings for the missing networking resets found in IPQ4019 GCC.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||||
|
Link: https://lore.kernel.org/r/20230814104119.96858-1-robert.marko@sartura.hr
|
||||||
|
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
||||||
|
---
|
||||||
|
include/dt-bindings/clock/qcom,gcc-ipq4019.h | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
||||||
|
+++ b/include/dt-bindings/clock/qcom,gcc-ipq4019.h
|
||||||
|
@@ -165,5 +165,11 @@
|
||||||
|
#define GCC_QDSS_BCR 69
|
||||||
|
#define GCC_MPM_BCR 70
|
||||||
|
#define GCC_SPDM_BCR 71
|
||||||
|
+#define ESS_MAC1_ARES 72
|
||||||
|
+#define ESS_MAC2_ARES 73
|
||||||
|
+#define ESS_MAC3_ARES 74
|
||||||
|
+#define ESS_MAC4_ARES 75
|
||||||
|
+#define ESS_MAC5_ARES 76
|
||||||
|
+#define ESS_PSGMII_ARES 77
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,30 @@
|
||||||
|
From 20014461691efc9e274c3870357152db7f091820 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Mon, 14 Aug 2023 12:40:24 +0200
|
||||||
|
Subject: [PATCH] clk: qcom: gcc-ipq4019: add missing networking resets
|
||||||
|
|
||||||
|
IPQ4019 has more networking related resets that will be required for future
|
||||||
|
wired networking support, so lets add them.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Link: https://lore.kernel.org/r/20230814104119.96858-2-robert.marko@sartura.hr
|
||||||
|
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
||||||
|
---
|
||||||
|
drivers/clk/qcom/gcc-ipq4019.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
+++ b/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
@@ -1707,6 +1707,12 @@ static const struct qcom_reset_map gcc_i
|
||||||
|
[GCC_TCSR_BCR] = {0x22000, 0},
|
||||||
|
[GCC_MPM_BCR] = {0x24000, 0},
|
||||||
|
[GCC_SPDM_BCR] = {0x25000, 0},
|
||||||
|
+ [ESS_MAC1_ARES] = {0x1200C, 0},
|
||||||
|
+ [ESS_MAC2_ARES] = {0x1200C, 1},
|
||||||
|
+ [ESS_MAC3_ARES] = {0x1200C, 2},
|
||||||
|
+ [ESS_MAC4_ARES] = {0x1200C, 3},
|
||||||
|
+ [ESS_MAC5_ARES] = {0x1200C, 4},
|
||||||
|
+ [ESS_PSGMII_ARES] = {0x1200C, 5},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct regmap_config gcc_ipq4019_regmap_config = {
|
|
@ -0,0 +1,105 @@
|
||||||
|
From 9a0e95e34e9c0a713ddfd48c3a88a20d2bdfd514 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Date: Fri, 11 Aug 2023 13:10:07 +0200
|
||||||
|
Subject: [PATCH] net: phy: Introduce PSGMII PHY interface mode
|
||||||
|
|
||||||
|
The PSGMII interface is similar to QSGMII. The main difference
|
||||||
|
is that the PSGMII interface combines five SGMII lines into a
|
||||||
|
single link while in QSGMII only four lines are combined.
|
||||||
|
|
||||||
|
Similarly to the QSGMII, this interface mode might also needs
|
||||||
|
special handling within the MAC driver.
|
||||||
|
|
||||||
|
It is commonly used by Qualcomm with their QCA807x PHY series and
|
||||||
|
modern WiSoC-s.
|
||||||
|
|
||||||
|
Add definitions for the PHY layer to allow to express this type
|
||||||
|
of connection between the MAC and PHY.
|
||||||
|
|
||||||
|
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
Documentation/networking/phy.rst | 4 ++++
|
||||||
|
drivers/net/phy/phy-core.c | 2 ++
|
||||||
|
drivers/net/phy/phylink.c | 3 +++
|
||||||
|
include/linux/phy.h | 4 ++++
|
||||||
|
4 files changed, 13 insertions(+)
|
||||||
|
|
||||||
|
--- a/Documentation/networking/phy.rst
|
||||||
|
+++ b/Documentation/networking/phy.rst
|
||||||
|
@@ -323,6 +323,10 @@ Some of the interface modes are describe
|
||||||
|
contrast with the 1000BASE-X phy mode used for Clause 38 and 39 PMDs, this
|
||||||
|
interface mode has different autonegotiation and only supports full duplex.
|
||||||
|
|
||||||
|
+``PHY_INTERFACE_MODE_PSGMII``
|
||||||
|
+ This is the Penta SGMII mode, it is similar to QSGMII but it combines 5
|
||||||
|
+ SGMII lines into a single link compared to 4 on QSGMII.
|
||||||
|
+
|
||||||
|
Pause frames / flow control
|
||||||
|
===========================
|
||||||
|
|
||||||
|
--- a/drivers/net/phy/phy-core.c
|
||||||
|
+++ b/drivers/net/phy/phy-core.c
|
||||||
|
@@ -140,6 +140,8 @@ int phy_interface_num_ports(phy_interfac
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QUSGMII:
|
||||||
|
return 4;
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
+ return 5;
|
||||||
|
case PHY_INTERFACE_MODE_MAX:
|
||||||
|
WARN_ONCE(1, "PHY_INTERFACE_MODE_MAX isn't a valid interface mode");
|
||||||
|
return 0;
|
||||||
|
--- a/drivers/net/phy/phylink.c
|
||||||
|
+++ b/drivers/net/phy/phylink.c
|
||||||
|
@@ -187,6 +187,7 @@ static int phylink_interface_max_speed(p
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII:
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QUSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
@@ -448,6 +449,7 @@ unsigned long phylink_get_capabilities(p
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII:
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QUSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
@@ -814,6 +816,7 @@ static int phylink_parse_mode(struct phy
|
||||||
|
|
||||||
|
switch (pl->link_config.interface) {
|
||||||
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QUSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII:
|
||||||
|
--- a/include/linux/phy.h
|
||||||
|
+++ b/include/linux/phy.h
|
||||||
|
@@ -104,6 +104,7 @@ extern const int phy_10gbit_features_arr
|
||||||
|
* @PHY_INTERFACE_MODE_XGMII: 10 gigabit media-independent interface
|
||||||
|
* @PHY_INTERFACE_MODE_XLGMII:40 gigabit media-independent interface
|
||||||
|
* @PHY_INTERFACE_MODE_MOCA: Multimedia over Coax
|
||||||
|
+ * @PHY_INTERFACE_MODE_PSGMII: Penta SGMII
|
||||||
|
* @PHY_INTERFACE_MODE_QSGMII: Quad SGMII
|
||||||
|
* @PHY_INTERFACE_MODE_TRGMII: Turbo RGMII
|
||||||
|
* @PHY_INTERFACE_MODE_100BASEX: 100 BaseX
|
||||||
|
@@ -141,6 +142,7 @@ typedef enum {
|
||||||
|
PHY_INTERFACE_MODE_XGMII,
|
||||||
|
PHY_INTERFACE_MODE_XLGMII,
|
||||||
|
PHY_INTERFACE_MODE_MOCA,
|
||||||
|
+ PHY_INTERFACE_MODE_PSGMII,
|
||||||
|
PHY_INTERFACE_MODE_QSGMII,
|
||||||
|
PHY_INTERFACE_MODE_TRGMII,
|
||||||
|
PHY_INTERFACE_MODE_100BASEX,
|
||||||
|
@@ -248,6 +250,8 @@ static inline const char *phy_modes(phy_
|
||||||
|
return "xlgmii";
|
||||||
|
case PHY_INTERFACE_MODE_MOCA:
|
||||||
|
return "moca";
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
+ return "psgmii";
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
return "qsgmii";
|
||||||
|
case PHY_INTERFACE_MODE_TRGMII:
|
|
@ -0,0 +1,115 @@
|
||||||
|
From f2b87dc1028b710ec8ce25808b9d21f92b376184 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
|
Date: Sun, 11 Mar 2018 14:41:31 +0100
|
||||||
|
Subject: [PATCH 2/2] clk: fix apss cpu overclocking
|
||||||
|
|
||||||
|
There's an interaction issue between the clk changes:"
|
||||||
|
clk: qcom: ipq4019: Add the apss cpu pll divider clock node
|
||||||
|
clk: qcom: ipq4019: remove fixed clocks and add pll clocks
|
||||||
|
" and the cpufreq-dt.
|
||||||
|
|
||||||
|
cpufreq-dt is now spamming the kernel-log with the following:
|
||||||
|
|
||||||
|
[ 1099.190658] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP
|
||||||
|
for freq 761142857 (-34)
|
||||||
|
|
||||||
|
This only happens on certain devices like the Compex WPJ428
|
||||||
|
and AVM FritzBox!4040. However, other devices like the Asus
|
||||||
|
RT-AC58U and Meraki MR33 work just fine.
|
||||||
|
|
||||||
|
The issue stem from the fact that all higher CPU-Clocks
|
||||||
|
are achieved by switching the clock-parent to the P_DDRPLLAPSS
|
||||||
|
(ddrpllapss). Which is set by Qualcomm's proprietary bootcode
|
||||||
|
as part of the DDR calibration.
|
||||||
|
|
||||||
|
For example, the FB4040 uses 256 MiB Nanya NT5CC128M16IP clocked
|
||||||
|
at round 533 MHz (ddrpllsdcc = 190285714 Hz).
|
||||||
|
|
||||||
|
whereas the 128 MiB Nanya NT5CC64M16GP-DI in the ASUS RT-AC58U is
|
||||||
|
clocked at a slightly higher 537 MHz ( ddrpllsdcc = 192000000 Hz).
|
||||||
|
|
||||||
|
This patch attempts to fix the issue by modifying
|
||||||
|
clk_cpu_div_round_rate(), clk_cpu_div_set_rate(), clk_cpu_div_recalc_rate()
|
||||||
|
to use a new qcom_find_freq_close() function, which returns the closest
|
||||||
|
matching frequency, instead of the next higher. This way, the SoC in
|
||||||
|
the FB4040 (with its max clock speed of 710.4 MHz) will no longer
|
||||||
|
try to overclock to 761 MHz.
|
||||||
|
|
||||||
|
Fixes: d83dcacea18 ("clk: qcom: ipq4019: Add the apss cpu pll divider clock node")
|
||||||
|
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||||
|
Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
|
---
|
||||||
|
drivers/clk/qcom/gcc-ipq4019.c | 34 +++++++++++++++++++++++++++++++---
|
||||||
|
1 file changed, 31 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
+++ b/drivers/clk/qcom/gcc-ipq4019.c
|
||||||
|
@@ -1243,6 +1243,29 @@ static const struct clk_fepll_vco gcc_fe
|
||||||
|
.reg = 0x2f020,
|
||||||
|
};
|
||||||
|
|
||||||
|
+
|
||||||
|
+const struct freq_tbl *qcom_find_freq_close(const struct freq_tbl *f,
|
||||||
|
+ unsigned long rate)
|
||||||
|
+{
|
||||||
|
+ const struct freq_tbl *last = NULL;
|
||||||
|
+
|
||||||
|
+ for ( ; f->freq; f++) {
|
||||||
|
+ if (rate == f->freq)
|
||||||
|
+ return f;
|
||||||
|
+
|
||||||
|
+ if (f->freq > rate) {
|
||||||
|
+ if (!last ||
|
||||||
|
+ (f->freq - rate) < (rate - last->freq))
|
||||||
|
+ return f;
|
||||||
|
+ else
|
||||||
|
+ return last;
|
||||||
|
+ }
|
||||||
|
+ last = f;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return last;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Round rate function for APSS CPU PLL Clock divider.
|
||||||
|
* It looks up the frequency table and returns the next higher frequency
|
||||||
|
@@ -1255,7 +1278,7 @@ static long clk_cpu_div_round_rate(struc
|
||||||
|
struct clk_hw *p_hw;
|
||||||
|
const struct freq_tbl *f;
|
||||||
|
|
||||||
|
- f = qcom_find_freq(pll->freq_tbl, rate);
|
||||||
|
+ f = qcom_find_freq_close(pll->freq_tbl, rate);
|
||||||
|
if (!f)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
@@ -1277,7 +1300,7 @@ static int clk_cpu_div_set_rate(struct c
|
||||||
|
const struct freq_tbl *f;
|
||||||
|
u32 mask;
|
||||||
|
|
||||||
|
- f = qcom_find_freq(pll->freq_tbl, rate);
|
||||||
|
+ f = qcom_find_freq_close(pll->freq_tbl, rate);
|
||||||
|
if (!f)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
@@ -1304,6 +1327,7 @@ static unsigned long
|
||||||
|
clk_cpu_div_recalc_rate(struct clk_hw *hw,
|
||||||
|
unsigned long parent_rate)
|
||||||
|
{
|
||||||
|
+ const struct freq_tbl *f;
|
||||||
|
struct clk_fepll *pll = to_clk_fepll(hw);
|
||||||
|
u32 cdiv, pre_div;
|
||||||
|
u64 rate;
|
||||||
|
@@ -1324,7 +1348,11 @@ clk_cpu_div_recalc_rate(struct clk_hw *h
|
||||||
|
rate = clk_fepll_vco_calc_rate(pll, parent_rate) * 2;
|
||||||
|
do_div(rate, pre_div);
|
||||||
|
|
||||||
|
- return rate;
|
||||||
|
+ f = qcom_find_freq_close(pll->freq_tbl, rate);
|
||||||
|
+ if (!f)
|
||||||
|
+ return rate;
|
||||||
|
+
|
||||||
|
+ return f->freq;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct clk_ops clk_regmap_cpu_div_ops = {
|
|
@ -0,0 +1,48 @@
|
||||||
|
From 0843a61d6913bdac8889eb048ed89f7903059787 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robimarko@gmail.com>
|
||||||
|
Date: Fri, 30 Oct 2020 13:36:31 +0100
|
||||||
|
Subject: [PATCH] arm: compressed: add appended DTB section
|
||||||
|
|
||||||
|
This adds a appended_dtb section to the ARM decompressor
|
||||||
|
linker script.
|
||||||
|
|
||||||
|
This allows using the existing ARM zImage appended DTB support for
|
||||||
|
appending a DTB to the raw ELF kernel.
|
||||||
|
|
||||||
|
Its size is set to 1MB max to match the zImage appended DTB size limit.
|
||||||
|
|
||||||
|
To use it to pass the DTB to the kernel, objcopy is used:
|
||||||
|
|
||||||
|
objcopy --set-section-flags=.appended_dtb=alloc,contents \
|
||||||
|
--update-section=.appended_dtb=<target>.dtb vmlinux
|
||||||
|
|
||||||
|
This is based off the following patch:
|
||||||
|
https://github.com/openwrt/openwrt/commit/c063e27e02a9dcac0e7f5877fb154e58fa3e1a69
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
---
|
||||||
|
arch/arm/boot/compressed/vmlinux.lds.S | 9 ++++++++-
|
||||||
|
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/compressed/vmlinux.lds.S
|
||||||
|
+++ b/arch/arm/boot/compressed/vmlinux.lds.S
|
||||||
|
@@ -103,6 +103,13 @@ SECTIONS
|
||||||
|
|
||||||
|
_edata = .;
|
||||||
|
|
||||||
|
+ .appended_dtb : {
|
||||||
|
+ /* leave space for appended DTB */
|
||||||
|
+ . += 0x100000;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ _edata_dtb = .;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* The image_end section appears after any additional loadable sections
|
||||||
|
* that the linker may decide to insert in the binary image. Having
|
||||||
|
@@ -140,4 +147,4 @@ SECTIONS
|
||||||
|
|
||||||
|
ARM_ASSERTS
|
||||||
|
}
|
||||||
|
-ASSERT(_edata_real == _edata, "error: zImage file size is incorrect");
|
||||||
|
+ASSERT(_edata_real == _edata_dtb, "error: zImage file size is incorrect");
|
|
@ -0,0 +1,66 @@
|
||||||
|
From 11d6a6128a5a07c429941afc202b6e62a19771be Mon Sep 17 00:00:00 2001
|
||||||
|
From: John Thomson <git@johnthomson.fastmail.com.au>
|
||||||
|
Date: Fri, 23 Oct 2020 19:42:36 +1000
|
||||||
|
Subject: [PATCH 2/2] arm: compressed: set ipq40xx watchdog to allow boot
|
||||||
|
|
||||||
|
For IPQ40XX systems where the SoC watchdog is activated before linux,
|
||||||
|
the watchdog timer may be too small for linux to finish uncompress,
|
||||||
|
boot, and watchdog management start.
|
||||||
|
If the watchdog is enabled, set the timeout for it to 30 seconds.
|
||||||
|
The functionality and offsets were copied from:
|
||||||
|
drivers/watchdog/qcom-wdt.c qcom_wdt_set_timeout & qcom_wdt_start
|
||||||
|
The watchdog memory address was taken from:
|
||||||
|
arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||||
|
|
||||||
|
This was required on Mikrotik IPQ40XX consumer hardware using Mikrotik's
|
||||||
|
RouterBoot bootloader.
|
||||||
|
|
||||||
|
Signed-off-by: John Thomson <git@johnthomson.fastmail.com.au>
|
||||||
|
---
|
||||||
|
arch/arm/boot/compressed/head.S | 35 +++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 35 insertions(+)
|
||||||
|
|
||||||
|
--- a/arch/arm/boot/compressed/head.S
|
||||||
|
+++ b/arch/arm/boot/compressed/head.S
|
||||||
|
@@ -620,6 +620,41 @@ not_relocated: mov r0, #0
|
||||||
|
bic r4, r4, #1
|
||||||
|
blne cache_on
|
||||||
|
|
||||||
|
+/* Set the Qualcom IPQ40xx watchdog timeout to 30 seconds
|
||||||
|
+ * if it is enabled, so that there is time for kernel
|
||||||
|
+ * to decompress, boot, and take over the watchdog.
|
||||||
|
+ * data and functionality from drivers/watchdog/qcom-wdt.c
|
||||||
|
+ * address from arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||||
|
+ */
|
||||||
|
+#ifdef CONFIG_ARCH_IPQ40XX
|
||||||
|
+watchdog_set:
|
||||||
|
+ /* offsets:
|
||||||
|
+ * 0x04 reset (=1 resets countdown)
|
||||||
|
+ * 0x08 enable (=0 disables)
|
||||||
|
+ * 0x0c status (=1 when SoC was reset by watchdog)
|
||||||
|
+ * 0x10 bark (=timeout warning in ticks)
|
||||||
|
+ * 0x14 bite (=timeout reset in ticks)
|
||||||
|
+ * clock rate is 1<<15 hertz
|
||||||
|
+ */
|
||||||
|
+ .equ watchdog, 0x0b017000 @Store watchdog base address
|
||||||
|
+ movw r0, #:lower16:watchdog
|
||||||
|
+ movt r0, #:upper16:watchdog
|
||||||
|
+ ldr r1, [r0, #0x08] @Get enabled?
|
||||||
|
+ cmp r1, #1 @If not enabled, do not change
|
||||||
|
+ bne watchdog_finished
|
||||||
|
+ mov r1, #0
|
||||||
|
+ str r1, [r0, #0x08] @Disable the watchdog
|
||||||
|
+ mov r1, #1
|
||||||
|
+ str r1, [r0, #0x04] @Pet the watchdog
|
||||||
|
+ mov r1, #30 @30 seconds timeout
|
||||||
|
+ lsl r1, r1, #15 @converted to ticks
|
||||||
|
+ str r1, [r0, #0x10] @Set the bark timeout
|
||||||
|
+ str r1, [r0, #0x14] @Set the bite timeout
|
||||||
|
+ mov r1, #1
|
||||||
|
+ str r1, [r0, #0x08] @Enable the watchdog
|
||||||
|
+watchdog_finished:
|
||||||
|
+#endif /* CONFIG_ARCH_IPQ40XX */
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* The C runtime environment should now be setup sufficiently.
|
||||||
|
* Set up some pointers, and start decompressing.
|
|
@ -0,0 +1,24 @@
|
||||||
|
From f63ea127643a605da97090ce585fdd7c2d17fa42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
Date: Mon, 14 Dec 2020 13:35:35 +0100
|
||||||
|
Subject: [PATCH] mmc: sdhci-msm: use sdhci_set_clock
|
||||||
|
|
||||||
|
When using sdhci_msm_set_clock clock setting will fail, so lets
|
||||||
|
use the generic sdhci_set_clock.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
---
|
||||||
|
drivers/mmc/host/sdhci-msm.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/mmc/host/sdhci-msm.c
|
||||||
|
+++ b/drivers/mmc/host/sdhci-msm.c
|
||||||
|
@@ -2451,7 +2451,7 @@ MODULE_DEVICE_TABLE(of, sdhci_msm_dt_mat
|
||||||
|
|
||||||
|
static const struct sdhci_ops sdhci_msm_ops = {
|
||||||
|
.reset = sdhci_msm_reset,
|
||||||
|
- .set_clock = sdhci_msm_set_clock,
|
||||||
|
+ .set_clock = sdhci_set_clock,
|
||||||
|
.get_min_clock = sdhci_msm_get_min_clock,
|
||||||
|
.get_max_clock = sdhci_msm_get_max_clock,
|
||||||
|
.set_bus_width = sdhci_set_bus_width,
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue