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
|
||||
endef
|
||||
|
||||
define Trusted-Firmware-A/sunxi-h616
|
||||
NAME:=Allwinner H616
|
||||
PLAT:=sun50i_h616
|
||||
endef
|
||||
|
||||
TFA_TARGETS:= \
|
||||
sunxi-a64 \
|
||||
sunxi-h6
|
||||
sunxi-h6 \
|
||||
sunxi-h616
|
||||
|
||||
define Package/trusted-firmware-a/install
|
||||
$(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
|
||||
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
|
||||
BUILD_SUBTARGET:=cortexa7
|
||||
NAME:=Bananapi M2 Ultra
|
||||
|
@ -340,6 +349,13 @@ define U-Boot/bananapi_m2_berry
|
|||
BUILD_DEVICES:=sinovoip_bananapi-m2-berry
|
||||
endef
|
||||
|
||||
define U-Boot/bananapi_p2_zero
|
||||
BUILD_SUBTARGET:=cortexa7
|
||||
NAME:=Bananapi P2 Zero
|
||||
BUILD_DEVICES:=sinovoip_bananapi-p2-zero
|
||||
endef
|
||||
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
a64-olinuxino \
|
||||
a64-olinuxino-emmc \
|
||||
|
@ -352,6 +368,7 @@ UBOOT_TARGETS := \
|
|||
bananapi_m2_plus_h3 \
|
||||
Bananapi \
|
||||
bananapi_m2_berry \
|
||||
bananapi_p2_zero \
|
||||
Bananapi_M2_Ultra \
|
||||
Bananapro \
|
||||
Cubieboard \
|
||||
|
@ -382,6 +399,7 @@ UBOOT_TARGETS := \
|
|||
orangepi_plus \
|
||||
orangepi_2 \
|
||||
orangepi_pc2 \
|
||||
orangepi_zero2 \
|
||||
pangolin \
|
||||
pine64_plus \
|
||||
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
|
||||
|
||||
PKG_NAME:=ipq-wifi
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
|
||||
PKG_SOURCE_DATE:=2023-06-03
|
||||
PKG_SOURCE_VERSION:=cd9c30ca47b8e5388b770c523a7f6b8b969e2f92
|
||||
PKG_MIRROR_HASH:=45e623fcc512b514ade0f22e217275536aa8de4afba7dfdb11696482b8fa71a2
|
||||
PKG_SOURCE_DATE:=2023-09-16
|
||||
PKG_SOURCE_VERSION:=57aa1b1562ac60f11a6bec8be02cd3b68b12b3fa
|
||||
PKG_MIRROR_HASH:=f8f9ab78ae85180a6e601d7c911d6c350b0cc132172d4baefc8f9fe07566ce0f
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
|
@ -41,7 +41,9 @@ ALLWIFIBOARDS:= \
|
|||
wallys_dr40x9 \
|
||||
xiaomi_ax3600 \
|
||||
xiaomi_ax9000 \
|
||||
yyets_le1 \
|
||||
zte_mf289f \
|
||||
zte_mf287 \
|
||||
zte_mf287plus \
|
||||
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,xiaomi_ax3600,Xiaomi AX3600))
|
||||
$(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_mf287,ZTE MF287))
|
||||
$(eval $(call generate-ipq-wifi-package,zte_mf287plus,ZTE MF287Plus))
|
||||
$(eval $(call generate-ipq-wifi-package,zyxel_nbg7815,Zyxel NBG7815))
|
||||
|
||||
|
|
|
@ -417,9 +417,11 @@ $(eval $(call KernelPackage,hwmon-mcp3021))
|
|||
define KernelPackage/hwmon-nct6775
|
||||
TITLE:=NCT6106D/6775F/6776F/6779D/6791D/6792D/6793D and compatibles monitoring support
|
||||
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)
|
||||
$(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
|
||||
|
||||
define KernelPackage/hwmon-nct6775/description
|
||||
|
|
|
@ -1344,7 +1344,8 @@ define KernelPackage/mlx5-core
|
|||
CONFIG_MLX5_MPFS=y \
|
||||
CONFIG_MLX5_SW_STEERING=n \
|
||||
CONFIG_MLX5_TC_CT=n \
|
||||
CONFIG_MLX5_TLS=n
|
||||
CONFIG_MLX5_TLS=n \
|
||||
CONFIG_MLX5_VFIO_PCI=n
|
||||
AUTOLOAD:=$(call AutoProbe,mlx5_core)
|
||||
endef
|
||||
|
||||
|
|
|
@ -16,6 +16,24 @@ V4L2_MEM2MEM_DIR=platform
|
|||
# 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
|
||||
SUBMENU:=$(VIDEO_MENU)
|
||||
TITLE:=Backlight support
|
||||
|
@ -241,6 +259,36 @@ endef
|
|||
|
||||
$(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
|
||||
SUBMENU:=$(VIDEO_MENU)
|
||||
TITLE:=GPU memory management subsystem
|
||||
|
@ -293,7 +341,9 @@ define KernelPackage/drm-amdgpu
|
|||
SUBMENU:=$(VIDEO_MENU)
|
||||
TITLE:=AMDGPU DRM support
|
||||
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 \
|
||||
CONFIG_DRM_AMDGPU_SI=y \
|
||||
CONFIG_DRM_AMDGPU_CIK=y \
|
||||
|
@ -391,7 +441,8 @@ define KernelPackage/drm-radeon
|
|||
SUBMENU:=$(VIDEO_MENU)
|
||||
TITLE:=Radeon DRM support
|
||||
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
|
||||
FILES:=$(LINUX_DIR)/drivers/gpu/drm/radeon/radeon.ko
|
||||
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:
|
||||
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)))
|
||||
queue_work(ab->workqueue_aux, &ab->reset_work);
|
||||
break;
|
||||
|
@ -138,7 +138,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
int ath11k_mhi_register(struct ath11k_pci *ar_pci);
|
||||
--- a/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)
|
||||
{
|
||||
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
|
||||
+++ 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,
|
||||
&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>
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
drivers/net/wireless/ath/ath11k/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/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,
|
||||
.idle_ps = false,
|
||||
.supports_sta_ps = false,
|
||||
- .cold_boot_calib = true,
|
||||
+ .cold_boot_calib = false,
|
||||
- .coldboot_cal_mm = true,
|
||||
- .coldboot_cal_ftm = true,
|
||||
+ .coldboot_cal_mm = false,
|
||||
+ .coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = true,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 16 + 1,
|
||||
|
|
|
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
.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)
|
||||
{
|
||||
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++) {
|
||||
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;
|
||||
|
||||
|
@ -62,7 +62,8 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
+ ab->hw_params.fw_mem_mode = 2;
|
||||
+ ab->hw_params.num_vdevs = 8;
|
||||
+ 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
|
||||
+ 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_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2023-08-14
|
||||
PKG_SOURCE_VERSION:=b14c2351ddb8601c322576d84029e463d456caef
|
||||
PKG_MIRROR_HASH:=62b5e157ad525424b6857e77ed373e8d39d03af71b057f8b309d8b293d6eac5f
|
||||
PKG_SOURCE_DATE:=2023-09-18
|
||||
PKG_SOURCE_VERSION:=2afc7285f75dca5a0583fd917285bf33f1429cc6
|
||||
PKG_MIRROR_HASH:=2c9556b298246277ac2d65415e4449f98e6d5fdb99e0d0a92262f162df772bbc
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_USE_NINJA:=0
|
||||
|
@ -310,6 +310,38 @@ define KernelPackage/mt7921e
|
|||
AUTOLOAD:=$(call AutoProbe,mt7921e)
|
||||
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
|
||||
SECTION:=devel
|
||||
CATEGORY:=Development
|
||||
|
@ -418,6 +450,18 @@ endif
|
|||
ifdef CONFIG_PACKAGE_kmod-mt7921e
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7921E=m
|
||||
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
|
||||
+$(KERNEL_MAKE) $(PKG_JOBS) \
|
||||
|
@ -591,8 +635,12 @@ $(eval $(call KernelPackage,mt7921-firmware))
|
|||
$(eval $(call KernelPackage,mt792x-common))
|
||||
$(eval $(call KernelPackage,mt792x-usb))
|
||||
$(eval $(call KernelPackage,mt7921-common))
|
||||
$(eval $(call KernelPackage,mt7925-common))
|
||||
$(eval $(call KernelPackage,mt7921u))
|
||||
$(eval $(call KernelPackage,mt7921s))
|
||||
$(eval $(call KernelPackage,mt7921e))
|
||||
$(eval $(call KernelPackage,mt7925u))
|
||||
$(eval $(call KernelPackage,mt7925e))
|
||||
$(eval $(call KernelPackage,mt7996e))
|
||||
$(eval $(call KernelPackage,mt76))
|
||||
$(eval $(call BuildPackage,mt76-test))
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=netifd
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
||||
PKG_SOURCE_DATE:=2023-09-15.1
|
||||
PKG_SOURCE_VERSION:=afcd3825dad9b6a6712fbf6ed8e4434819a34009
|
||||
PKG_MIRROR_HASH:=d389db5dec7140fc12f69e8d679b9242c72d27b35c789b12adc6ebdf16913a85
|
||||
PKG_SOURCE_DATE:=2023-09-19
|
||||
PKG_SOURCE_VERSION:=7a58b995fdbecd9beed57e4d66d42cb3cf66aee2
|
||||
PKG_MIRROR_HASH:=a460a3b912047f8802eb24bb737084a08dad65b2dd520e5f5e7459379d1fcf8c
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
|
|
@ -26,7 +26,6 @@ function iface_remove(cfg)
|
|||
if (!cfg || !cfg.bss || !cfg.bss[0] || !cfg.bss[0].ifname)
|
||||
return;
|
||||
|
||||
hostapd.remove_iface(cfg.bss[0].ifname);
|
||||
for (let bss in cfg.bss)
|
||||
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 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)
|
||||
return false;
|
||||
|
||||
if (!phy_status)
|
||||
return true;
|
||||
|
||||
let iface = hostapd.interfaces[bss.ifname];
|
||||
let iface = hostapd.interfaces[phy];
|
||||
if (!iface)
|
||||
return false;
|
||||
|
||||
|
@ -127,6 +126,7 @@ function iface_restart(phydev, config, old_config)
|
|||
{
|
||||
let phy = phydev.name;
|
||||
|
||||
hostapd.remove_iface(phy);
|
||||
iface_remove(old_config);
|
||||
iface_remove(config);
|
||||
|
||||
|
@ -267,13 +267,13 @@ function iface_reload_config(phydev, config, old_config)
|
|||
if (!old_config.bss || !old_config.bss[0])
|
||||
return false;
|
||||
|
||||
let iface_name = old_config.bss[0].ifname;
|
||||
let iface = hostapd.interfaces[iface_name];
|
||||
let iface = hostapd.interfaces[phy];
|
||||
if (!iface) {
|
||||
hostapd.printf(`Could not find previous interface ${iface_name}`);
|
||||
return false;
|
||||
}
|
||||
|
||||
let iface_name = old_config.bss[0].ifname;
|
||||
let first_bss = hostapd.bss[iface_name];
|
||||
if (!first_bss) {
|
||||
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;
|
||||
|
||||
if (!config)
|
||||
if (!config) {
|
||||
hostapd.remove_iface(phy);
|
||||
return iface_remove(old_config);
|
||||
}
|
||||
|
||||
let phydev = phy_open(phy);
|
||||
if (!phydev) {
|
||||
|
@ -667,7 +669,7 @@ let main_obj = {
|
|||
if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
|
||||
return 0;
|
||||
|
||||
let iface = hostapd.interfaces[config.bss[0].ifname];
|
||||
let iface = hostapd.interfaces[phy];
|
||||
if (!iface)
|
||||
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)
|
||||
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
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -195,8 +195,20 @@ endif
|
||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
|||
|
||||
--- a/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,
|
||||
int reassoc)
|
||||
{
|
||||
|
@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
|||
if (hapd->tkip_countermeasures) {
|
||||
hostapd_drv_sta_deauth(hapd, sta->addr,
|
||||
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
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=procd
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
[ "eq", "DEVNAME", "null" ],
|
||||
[
|
||||
[ "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/1", "/dev/stdout" ],
|
||||
[ "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"
|
||||
} elsif ($mirror =~ /^\@APACHE\/(.+)$/) {
|
||||
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.csclub.uwaterloo.ca/apache/$1";
|
||||
push @mirrors, "https://archive.apache.org/dist/$1";
|
||||
push @mirrors, "http://mirror.cogentco.com/pub/apache/$1";
|
||||
push @mirrors, "http://mirror.navercorp.com/apache/$1";
|
||||
push @mirrors, "http://ftp.jaist.ac.jp/pub/apache/$1";
|
||||
push @mirrors, "ftp://apache.cs.utah.edu/apache.org/$1";
|
||||
push @mirrors, "ftp://apache.mirrors.ovh.net/ftp.apache.org/dist/$1";
|
||||
push @mirrors, "https://mirror.cogentco.com/pub/apache/$1";
|
||||
push @mirrors, "https://mirror.navercorp.com/apache/$1";
|
||||
push @mirrors, "https://ftp.jaist.ac.jp/pub/apache/$1";
|
||||
push @mirrors, "https://apache.cs.utah.edu/apache.org/$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.ustc.edu.cn/apache/$1";
|
||||
} elsif ($mirror =~ /^\@GITHUB\/(.+)$/) {
|
||||
|
@ -275,23 +274,19 @@ foreach my $mirror (@ARGV) {
|
|||
} elsif ($mirror =~ /^\@GNU\/(.+)$/) {
|
||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnu/$1";
|
||||
push @mirrors, "https://mirror.netcologne.de/gnu/$1";
|
||||
push @mirrors, "http://ftp.kddilabs.jp/GNU/gnu/$1";
|
||||
push @mirrors, "http://www.nic.funet.fi/pub/gnu/gnu/$1";
|
||||
push @mirrors, "http://mirror.internode.on.net/pub/gnu/$1";
|
||||
push @mirrors, "http://mirror.navercorp.com/gnu/$1";
|
||||
push @mirrors, "ftp://mirrors.rit.edu/gnu/$1";
|
||||
push @mirrors, "ftp://download.xs4all.nl/pub/gnu/$1";
|
||||
push @mirrors, "https://ftp.kddilabs.jp/GNU/gnu/$1";
|
||||
push @mirrors, "https://www.nic.funet.fi/pub/gnu/gnu/$1";
|
||||
push @mirrors, "https://mirror.navercorp.com/gnu/$1";
|
||||
push @mirrors, "https://mirrors.rit.edu/gnu/$1";
|
||||
push @mirrors, "https://ftp.gnu.org/gnu/$1";
|
||||
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/gnu/$1";
|
||||
push @mirrors, "https://mirrors.ustc.edu.cn/gnu/$1";
|
||||
} elsif ($mirror =~ /^\@SAVANNAH\/(.+)$/) {
|
||||
push @mirrors, "https://mirror.netcologne.de/savannah/$1";
|
||||
push @mirrors, "https://mirror.csclub.uwaterloo.ca/nongnu/$1";
|
||||
push @mirrors, "http://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
||||
push @mirrors, "http://nongnu.uib.no/$1";
|
||||
push @mirrors, "http://ftp.igh.cnrs.fr/pub/nongnu/$1";
|
||||
push @mirrors, "ftp://cdimage.debian.org/mirror/gnu.org/savannah/$1";
|
||||
push @mirrors, "ftp://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
||||
push @mirrors, "https://ftp.acc.umu.se/mirror/gnu.org/savannah/$1";
|
||||
push @mirrors, "https://nongnu.uib.no/$1";
|
||||
push @mirrors, "https://cdimage.debian.org/mirror/gnu.org/savannah/$1";
|
||||
} elsif ($mirror =~ /^\@KERNEL\/(.+)$/) {
|
||||
my @extra = ( $1 );
|
||||
if ($filename =~ /linux-\d+\.\d+(?:\.\d+)?-rc/) {
|
||||
|
@ -301,19 +296,17 @@ foreach my $mirror (@ARGV) {
|
|||
}
|
||||
foreach my $dir (@extra) {
|
||||
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, "http://ftp.nara.wide.ad.jp/pub/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, "ftp://www.mirrorservice.org/sites/ftp.kernel.org/pub/$dir";
|
||||
push @mirrors, "https://mirrors.tuna.tsinghua.edu.cn/kernel/$dir";
|
||||
push @mirrors, "https://ftp.riken.jp/Linux/kernel.org/$dir";
|
||||
push @mirrors, "https://www.mirrorservice.org/sites/ftp.kernel.org/pub/$dir";
|
||||
push @mirrors, "https://mirrors.ustc.edu.cn/kernel.org/$dir";
|
||||
}
|
||||
} elsif ($mirror =~ /^\@GNOME\/(.+)$/) {
|
||||
push @mirrors, "https://download.gnome.org/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.nara.wide.ad.jp/pub/X11/GNOME/sources/$1";
|
||||
push @mirrors, "https://mirrors.ustc.edu.cn/gnome/sources/$1";
|
||||
|
|
|
@ -65,6 +65,8 @@
|
|||
gmac-config {
|
||||
device = <&gmac>;
|
||||
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 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -66,6 +66,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -93,6 +93,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -42,6 +42,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -36,6 +36,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -50,6 +50,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -9,6 +9,15 @@ define Device/mikrotik_routerboard-493g
|
|||
endef
|
||||
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
|
||||
$(Device/mikrotik_nor)
|
||||
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 "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
||||
;;
|
||||
mikrotik,routerboard-750-r2|\
|
||||
mikrotik,routerboard-951ui-2hnd|\
|
||||
mikrotik,routerboard-951ui-2nd|\
|
||||
mikrotik,routerboard-952ui-5ac2nd)
|
||||
|
|
|
@ -14,6 +14,11 @@ ath79_setup_interfaces()
|
|||
ucidef_add_switch "switch1" \
|
||||
"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-912uag-2hpnd|\
|
||||
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
|
||||
+++ 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
|
||||
reg = 1 << port;
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ Subject: [PATCH] net/dsa/mv88e6xxx: disable ATU violation
|
|||
|
||||
--- a/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
|
||||
reg = 1 << port;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
|||
|
||||
--- a/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->ageing_time_min = chip->info->age_time_coeff;
|
||||
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
|
||||
+++ 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->ageing_time_min = chip->info->age_time_coeff;
|
||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||
|
|
|
@ -9,6 +9,7 @@ CPU_SUBTYPE:=neon-vfpv4
|
|||
SUBTARGETS:=generic chromium mikrotik
|
||||
|
||||
KERNEL_PATCHVER:=5.15
|
||||
KERNEL_TESTING_PATCHVER:=6.1
|
||||
|
||||
KERNELNAME:=zImage Image dtbs
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ ipq40xx_setup_interfaces()
|
|||
p2w,r619ac-128m|\
|
||||
pakedge,wr-1|\
|
||||
teltonika,rutx50|\
|
||||
yyets,le1|\
|
||||
zyxel,nbg6617)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
|
||||
;;
|
||||
|
@ -88,6 +89,8 @@ ipq40xx_setup_interfaces()
|
|||
aruba,ap-303h|\
|
||||
buffalo,wtr-m2133hp|\
|
||||
ezviz,cs-w3-wd1200g-eup|\
|
||||
netgear,rbr40|\
|
||||
netgear,rbs40|\
|
||||
netgear,rbr50|\
|
||||
netgear,rbs50|\
|
||||
netgear,srr60|\
|
||||
|
@ -111,6 +114,7 @@ ipq40xx_setup_interfaces()
|
|||
zte,mf286d)
|
||||
ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
|
||||
;;
|
||||
zte,mf287|\
|
||||
zte,mf287plus|\
|
||||
zte,mf287pro)
|
||||
ucidef_set_interface_lan "lan1 lan2 lan3 lan4"
|
||||
|
|
|
@ -40,6 +40,8 @@ case "$FIRMWARE" in
|
|||
# OEM assigns 4 sequential MACs
|
||||
ath10k_patch_mac $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
|
||||
;;
|
||||
netgear,rbr40|\
|
||||
netgear,rbs40|\
|
||||
netgear,rbr50|\
|
||||
netgear,rbs50|\
|
||||
netgear,srr60|\
|
||||
|
@ -117,6 +119,8 @@ case "$FIRMWARE" in
|
|||
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
|
||||
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
|
||||
;;
|
||||
netgear,rbr40|\
|
||||
netgear,rbs40|\
|
||||
netgear,rbr50|\
|
||||
netgear,rbs50|\
|
||||
netgear,srr60|\
|
||||
|
@ -211,6 +215,8 @@ case "$FIRMWARE" in
|
|||
( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
|
||||
( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
|
||||
;;
|
||||
netgear,rbr40|\
|
||||
netgear,rbs40|\
|
||||
netgear,rbr50|\
|
||||
netgear,rbs50|\
|
||||
netgear,srr60|\
|
||||
|
|
|
@ -27,6 +27,7 @@ EOF
|
|||
;;
|
||||
zte,mf18a |\
|
||||
zte,mf286d |\
|
||||
zte,mf287|\
|
||||
zte,mf287plus |\
|
||||
zte,mf287pro |\
|
||||
zte,mf289f)
|
||||
|
@ -191,6 +192,8 @@ platform_do_upgrade() {
|
|||
mikrotik,hap-ac3)
|
||||
platform_do_upgrade_mikrotik_nand "$1"
|
||||
;;
|
||||
netgear,rbr40|\
|
||||
netgear,rbs40|\
|
||||
netgear,rbr50 |\
|
||||
netgear,rbs50 |\
|
||||
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 {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
|
@ -171,7 +181,6 @@
|
|||
status = "okay";
|
||||
nvmem-cell-names = "pre-calibration", "mac-address";
|
||||
nvmem-cells = <&precal_art_1000>, <&macaddr_mac_0>;
|
||||
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||
};
|
||||
|
||||
&wifi1 {
|
||||
|
@ -179,5 +188,4 @@
|
|||
nvmem-cell-names = "pre-calibration", "mac-address";
|
||||
nvmem-cells = <&precal_art_5000>, <&macaddr_mac_0>;
|
||||
mac-address-increment = <1>;
|
||||
qcom,ath10k-calibration-variant = "zte,mf287plus";
|
||||
};
|
|
@ -3,20 +3,15 @@
|
|||
// Copyright (c) 2022, Giammarco Marzano <stich86@gmail.com>.
|
||||
// Copyright (c) 2023, Andreas Böhler <dev@aboehler.at>
|
||||
|
||||
#include "qcom-ipq4018-mf287.dtsi"
|
||||
#include "qcom-ipq4018-mf287_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ZTE MF287Plus";
|
||||
compatible = "zte,mf287plus";
|
||||
};
|
||||
|
||||
/*
|
||||
* This node is used to restart modem module to avoid anomalous
|
||||
* behaviours on initial communication.
|
||||
*/
|
||||
gpio-restart {
|
||||
compatible = "gpio-restart";
|
||||
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
&gpio_modem_reset {
|
||||
gpios = <&tlmm 5 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
&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) 2023, Andreas Böhler <dev@aboehler.at>
|
||||
|
||||
#include "qcom-ipq4018-mf287.dtsi"
|
||||
#include "qcom-ipq4018-mf287_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "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 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "USB_VBUS";
|
||||
|
@ -31,6 +20,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
&gpio_modem_reset {
|
||||
gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
&key_reset {
|
||||
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, };
|
||||
phy_interface_t iface;
|
||||
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);
|
||||
#endif
|
||||
iface = sfp_select_interface(phydev->sfp_bus, support);
|
||||
|
||||
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
|
||||
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
|
||||
$(call Device/netgear_orbi)
|
||||
NETGEAR_HW_ID := 29765352+0+4000+512+2x2+2x2+4x4
|
||||
|
@ -1098,6 +1122,20 @@ define Device/wallys_dr40x9
|
|||
endef
|
||||
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
|
||||
$(call Device/FitImage)
|
||||
DEVICE_VENDOR := ZTE
|
||||
|
@ -1130,7 +1168,6 @@ TARGET_DEVICES += zte_mf286d
|
|||
|
||||
define Device/zte_mf287_common
|
||||
$(call Device/zte_mf28x_common)
|
||||
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
||||
SOC := qcom-ipq4018
|
||||
# The recovery image is used to return back to stock (an initramfs-based image
|
||||
# that can be flashed to the device via sysupgrade
|
||||
|
@ -1138,20 +1175,28 @@ define Device/zte_mf287_common
|
|||
# exploit for the web interface
|
||||
IMAGES += factory.bin recovery.bin
|
||||
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
|
||||
|
||||
define Device/zte_mf287plus
|
||||
$(call Device/zte_mf287_common)
|
||||
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
||||
DEVICE_DTS_CONFIG := config@ap.dk01.1-c2
|
||||
DEVICE_MODEL := MF287Plus
|
||||
DEVICE_ALT0_VENDOR := ZTE
|
||||
DEVICE_ALT0_MODEL := MF287
|
||||
endef
|
||||
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
|
||||
$(call Device/zte_mf287_common)
|
||||
DEVICE_PACKAGES += ipq-wifi-zte_mf287plus
|
||||
DEVICE_DTS_CONFIG := config@ap.dk04.1-c1
|
||||
DEVICE_MODEL := MF287Pro
|
||||
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