Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen
2023-11-14 14:01:11 +08:00
14 changed files with 246 additions and 278 deletions

View File

@@ -40,8 +40,10 @@ IMG_PREFIX_VERCODE:=$(if $(CONFIG_VERSION_CODE_FILENAMES),$(call sanitize,$(VERS
IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$(IMG_PREFIX_EXTRA)$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
IMG_ROOTFS:=$(IMG_PREFIX)-rootfs
IMG_COMBINED:=$(IMG_PREFIX)-combined
ifeq ($(DUMP),)
IMG_PART_SIGNATURE:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | cut -b1-8)
IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | sed -E 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/')
endif
MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt
@@ -167,7 +169,9 @@ define Image/pad-to
mv $(1).new $(1)
endef
ifeq ($(DUMP),)
ROOTFS_PARTSIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_PARTSIZE)*1024*1024)))
endif
define Image/pad-root-squashfs
$(call Image/pad-to,$(KDIR)/root.squashfs,$(if $(1),$(1),$(ROOTFS_PARTSIZE)))

View File

@@ -182,7 +182,6 @@ $(eval $(call SetupHostCommand,perl,Please install Perl 5.x, \
perl --version | grep "perl.*v5"))
$(eval $(call SetupHostCommand,python,Please install Python >= 3.7, \
python3.12 -V 2>&1 | grep 'Python 3', \
python3.11 -V 2>&1 | grep 'Python 3', \
python3.10 -V 2>&1 | grep 'Python 3', \
python3.9 -V 2>&1 | grep 'Python 3', \
@@ -191,7 +190,6 @@ $(eval $(call SetupHostCommand,python,Please install Python >= 3.7, \
python3 -V 2>&1 | grep -E 'Python 3\.([7-9]|[0-9][0-9])\.?'))
$(eval $(call SetupHostCommand,python3,Please install Python >= 3.7, \
python3.12 -V 2>&1 | grep 'Python 3', \
python3.11 -V 2>&1 | grep 'Python 3', \
python3.10 -V 2>&1 | grep 'Python 3', \
python3.9 -V 2>&1 | grep 'Python 3', \

View File

@@ -50,7 +50,8 @@ define PackageDir
$$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(2)) \
echo Source-Makefile: $(SCAN_DIR)/$(2)/Makefile; \
$(if $(3),echo Override: $(3),true); \
$(NO_TRACE_MAKE) --no-print-dir -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) 2>/dev/null || { \
$(if $(findstring c,$(OPENWRT_VERBOSE)),$(MAKE),$(NO_TRACE_MAKE) --no-print-dir) -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) \
$(if $(findstring c,$(OPENWRT_VERBOSE)),,2>/dev/null) || { \
mkdir -p "$(TOPDIR)/logs/$(SCAN_DIR)/$(2)"; \
$(NO_TRACE_MAKE) --no-print-dir -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) > $(TOPDIR)/logs/$(SCAN_DIR)/$(2)/dump.txt 2>&1; \
$$(call progress,ERROR: please fix $(SCAN_DIR)/$(2)/Makefile - see logs/$(SCAN_DIR)/$(2)/dump.txt for details\n) \

View File

@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=gdb
PKG_VERSION:=13.2
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/gdb
@@ -58,6 +58,7 @@ CONFIGURE_ARGS+= \
--with-system-zlib \
--without-expat \
--without-lzma \
--without-zstd \
--disable-unit-tests \
--disable-ubsan \
--disable-sim \

View File

@@ -86,12 +86,12 @@ define Package/rtl8723bu-firmware/install
endef
$(eval $(call BuildPackage,rtl8723bu-firmware))
Package/rtl8723du-firmware = $(call Package/firmware-default,RealTek RTL8723DU firmware)
define Package/rtl8723du-firmware/install
Package/rtl8723de-firmware = $(call Package/firmware-default,RealTek RTL8723DE firmware)
define Package/rtl8723de-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw88
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw88/rtw8723d_fw.bin $(1)/lib/firmware/rtw88
endef
$(eval $(call BuildPackage,rtl8723du-firmware))
$(eval $(call BuildPackage,rtl8723de-firmware))
Package/rtl8761a-firmware = $(call Package/firmware-default,RealTek RTL8761A firmware)
define Package/rtl8761a-firmware/install
@@ -145,3 +145,32 @@ define Package/rtl8822ce-firmware/install
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw88/rtw8822c_wow_fw.bin $(1)/lib/firmware/rtw88
endef
$(eval $(call BuildPackage,rtl8822ce-firmware))
Package/rtl8851be-firmware = $(call Package/firmware-default,RealTek RTL8851BE firmware)
define Package/rtl8851be-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw89/rtw8851b_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8851be-firmware))
Package/rtl8852ae-firmware = $(call Package/firmware-default,RealTek RTL8852AE firmware)
define Package/rtl8852ae-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw89/rtw8852a_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852ae-firmware))
Package/rtl8852be-firmware = $(call Package/firmware-default,RealTek RTL8852BE firmware)
define Package/rtl8852be-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw89/rtw8852b_fw.bin $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw89/rtw8852b_fw-1.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852be-firmware))
Package/rtl8852ce-firmware = $(call Package/firmware-default,RealTek RTL8852CE firmware)
define Package/rtl8852ce-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtw89/rtw8852c_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852ce-firmware))

View File

@@ -1,8 +1,9 @@
PKG_DRIVERS += \
rtlwifi rtlwifi-pci rtlwifi-btcoexist rtlwifi-usb rtl8192c-common \
rtl8192ce rtl8192se rtl8192de rtl8192cu rtl8723bs rtl8821ae \
rtl8xxxu rtw88 rtw88-pci rtw88-usb rtw88-8822b rtw88-8822c rtw88-8723d \
rtw88-8822be rtw88-8822bu rtw88-8822ce rtw88-8723de
rtl8xxxu rtw88 rtw88-pci rtw88-usb rtw88-8821c rtw88-8822b rtw88-8822c \
rtw88-8723d rtw88-8821ce rtw88-8821cu rtw88-8822be rtw88-8822bu \
rtw88-8822ce rtw88-8822cu rtw88-8723de
config-$(call config_package,rtlwifi) += RTL_CARDS RTLWIFI
config-$(call config_package,rtlwifi-pci) += RTLWIFI_PCI
@@ -25,11 +26,15 @@ config-y += STAGING
config-$(call config_package,rtw88) += RTW88 RTW88_CORE
config-$(call config_package,rtw88-pci) += RTW88_PCI
config-$(call config_package,rtw88-usb) += RTW88_USB
config-$(call config_package,rtw88-8821c) += RTW88_8821C
config-$(call config_package,rtw88-8821ce) += RTW88_8821CE
config-$(call config_package,rtw88-8821cu) += RTW88_8821CU
config-$(call config_package,rtw88-8822b) += RTW88_8822B
config-$(call config_package,rtw88-8822be) += RTW88_8822BE
config-$(call config_package,rtw88-8822bu) += RTW88_8822BU
config-$(call config_package,rtw88-8822c) += RTW88_8822C
config-$(call config_package,rtw88-8822ce) += RTW88_8822CE
config-$(call config_package,rtw88-8822cu) += RTW88_8822CU
config-$(call config_package,rtw88-8723d) += RTW88_8723D
config-$(call config_package,rtw88-8723de) += RTW88_8723DE
config-$(CONFIG_PACKAGE_RTW88_DEBUG) += RTW88_DEBUG
@@ -196,16 +201,25 @@ endef
define KernelPackage/rtw88-usb
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTW88 USB chips support
DEPENDS+= @USB_SUPPORT +kmod-rtw88
DEPENDS+= @USB_SUPPORT +kmod-rtw88 +kmod-usb-core
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_usb.ko
AUTOLOAD:=$(call AutoProbe,rtw88_usb)
HIDDEN:=1
endef
define KernelPackage/rtw88-8821c
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8821C family support
DEPENDS+= +kmod-rtw88 +rtl8821ce-firmware +@DRIVER_11AC_SUPPORT
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8821c.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8821c)
HIDDEN:=1
endef
define KernelPackage/rtw88-8822b
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8822B family support
DEPENDS+= +kmod-rtw88 +@DRIVER_11AC_SUPPORT
DEPENDS+= +kmod-rtw88 +rtl8822be-firmware +@DRIVER_11AC_SUPPORT
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8822b.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8822b)
HIDDEN:=1
@@ -214,7 +228,7 @@ endef
define KernelPackage/rtw88-8822c
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8822C family support
DEPENDS+= +kmod-rtw88 +@DRIVER_11AC_SUPPORT
DEPENDS+= +kmod-rtw88 +rtl8822ce-firmware +@DRIVER_11AC_SUPPORT
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8822c.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8822c)
HIDDEN:=1
@@ -223,12 +237,28 @@ endef
define KernelPackage/rtw88-8723d
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8723D family support
DEPENDS+= +kmod-rtw88
DEPENDS+= +kmod-rtw88 +rtl8723de-firmware
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8723d.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8723d)
HIDDEN:=1
endef
define KernelPackage/rtw88-8821ce
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8821CE support
DEPENDS+= +kmod-rtw88-pci +kmod-rtw88-8821c
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8821ce.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8821ce)
endef
define KernelPackage/rtw88-8821cu
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8821CU support
DEPENDS+= +kmod-rtw88-usb +kmod-rtw88-8821c
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8821cu.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8821cu)
endef
define KernelPackage/rtw88-8822be
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8822BE support
@@ -240,7 +270,7 @@ endef
define KernelPackage/rtw88-8822bu
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8822BU support
DEPENDS+= +kmod-rtw88-usb +rtl8822be-firmware +kmod-rtw88-8822b
DEPENDS+= +kmod-rtw88-usb +kmod-rtw88-8822b
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8822bu.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8822bu)
endef
@@ -253,6 +283,14 @@ define KernelPackage/rtw88-8822ce
AUTOLOAD:=$(call AutoProbe,rtw88_8822ce)
endef
define KernelPackage/rtw88-8822cu
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8822CU support
DEPENDS+= +kmod-rtw88-usb +kmod-rtw88-8822c
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/realtek/rtw88/rtw88_8822cu.ko
AUTOLOAD:=$(call AutoProbe,rtw88_8822cu)
endef
define KernelPackage/rtw88-8723de
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8723DE support

View File

@@ -0,0 +1,131 @@
From a651d10fbd880098d7b98dee27dfd1eb15146fb2 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Sun, 12 Nov 2023 18:40:22 +0100
Subject: [PATCH] malibu-phy: add support for manual define of first phy addr
The usage of first_phy_addr is EXTREMELY FRAGILE and results
in dangerous results if the OEM (or anyone that by chance try to
implement things in a logical manner) deviates from the default values
from the "magical template".
To be in more details. With QSDK 12.4, some tweaks were done to improve
autoneg and now on every call of port status, the phydev is tried to
add. This resulted in the call and log spam of an error with ports that
are actually not present on the system with qsdk reporting phydev is
NULL. This itself is not an error and printing the error is correct.
What is actually an error from ages is setting generic bitmap reporting
presence of port that are actually not present. This is very common on
OEM where the switch_lan_bmp is always a variant of 0x1e (that on bitmap
results in PORT1 PORT2 PORT3 PORT4 present) or 0x3e (PORT1 PORT2 PORT3
PORT4 PORT5). Reality is that many device are used as AP with one LAN
port or one WAN port. (or even exotic configuration with PORT1 not
present and PORT2 PORT3 PORT4 present (Xiaomi 3600)
With this finding one can say... ok nice, then lets update the DT and
set the correct bitmap...
Again world is a bad place and reality is that this cause wonderful
regression in some case of by extreme luck the first ever connected
port working and the rest of the switch dead.
The problem has been bisected to all the device that doesn't have the
PORT1 declared in any of the bitmap.
With this prefaction in mind, on to the REAL problem.
malibu_phy_hw_init FOR SOME REASON, set a global variable first_phy_addr
to the first detected PHY addr that coincidentally is always PORT1.
PORT1 addr is 0x0. The entire code in malibu_phy use this variable to
derive the phy addrs in some function.
Declaring a bitmap where the PORT1 is missing (or worse PORT4 the only
one connected) result in first_phy_addr set to 1 or whatever phy addr is
detected first setting wrong value all over the init stage.
To fix this, introduce a new binding malibu_first_phy_addr to manually
declare the first phy that the malibu PHY driver should use and permit
to detach it from port bmp detection. The legacy detection is kept for
compatibility reason.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
include/init/ssdk_dts.h | 1 +
include/init/ssdk_init.h | 2 ++
src/hsl/phy/malibu_phy.c | 5 +++++
src/init/ssdk_dts.c | 15 +++++++++++++++
4 files changed, 23 insertions(+)
--- a/include/init/ssdk_dts.h
+++ b/include/init/ssdk_dts.h
@@ -146,6 +146,7 @@ a_uint32_t ssdk_wan_bmp_get(a_uint32_t d
sw_error_t ssdk_lan_bmp_set(a_uint32_t dev_id, a_uint32_t lan_bmp);
sw_error_t ssdk_wan_bmp_set(a_uint32_t dev_id, a_uint32_t wan_bmp);
a_uint32_t ssdk_inner_bmp_get(a_uint32_t dev_id);
+a_uint32_t ssdk_malibu_first_phy_addr_get(a_uint32_t dev_id);
hsl_reg_mode ssdk_switch_reg_access_mode_get(a_uint32_t dev_id);
void ssdk_switch_reg_map_info_get(a_uint32_t dev_id, ssdk_reg_map_info *info);
a_uint32_t ssdk_switch_pcie_base_get(a_uint32_t dev_id);
--- a/include/init/ssdk_init.h
+++ b/include/init/ssdk_init.h
@@ -194,6 +194,7 @@ enum ssdk_port_wrapper_cfg {
a_uint32_t lan_bmp;
a_uint32_t wan_bmp;
a_uint32_t inner_bmp;
+ a_uint32_t malibu_first_phy_addr;
} ssdk_port_cfg;
typedef struct
@@ -384,6 +385,7 @@ ssdk_hsl_access_mode_set(a_uint32_t dev_
a_uint32_t ssdk_dt_global_get_mac_mode(a_uint32_t dev_id, a_uint32_t index);
a_uint32_t ssdk_dt_global_set_mac_mode(a_uint32_t dev_id, a_uint32_t index, a_uint32_t mode);
+a_uint32_t ssdk_malibu_first_phy_addr_get(a_uint32_t dev_id);
a_uint32_t
qca_hppe_port_mac_type_get(a_uint32_t dev_id, a_uint32_t port_id);
--- a/src/hsl/phy/malibu_phy.c
+++ b/src/hsl/phy/malibu_phy.c
@@ -1945,6 +1945,11 @@ static int malibu_phy_api_ops_init(void)
int malibu_phy_init(a_uint32_t dev_id, a_uint32_t port_bmp)
{
static a_uint32_t phy_ops_flag = 0;
+ a_uint32_t malibu_first_phy_addr;
+
+ malibu_first_phy_addr = ssdk_malibu_first_phy_addr_get(dev_id);
+ if (malibu_first_phy_addr != MAX_PHY_ADDR)
+ first_phy_addr = malibu_first_phy_addr;
if(phy_ops_flag == 0) {
malibu_phy_api_ops_init();
--- a/src/init/ssdk_dts.c
+++ b/src/init/ssdk_dts.c
@@ -186,6 +186,13 @@ a_uint32_t ssdk_inner_bmp_get(a_uint32_t
return cfg->port_cfg.inner_bmp;
}
+a_uint32_t ssdk_malibu_first_phy_addr_get(a_uint32_t dev_id)
+{
+ ssdk_dt_cfg* cfg = ssdk_dt_global.ssdk_dt_switch_nodes[dev_id];
+
+ return cfg->port_cfg.malibu_first_phy_addr;
+}
+
hsl_reg_mode ssdk_switch_reg_access_mode_get(a_uint32_t dev_id)
{
ssdk_dt_cfg* cfg = ssdk_dt_global.ssdk_dt_switch_nodes[dev_id];
@@ -1039,6 +1046,14 @@ static void ssdk_dt_parse_port_bmp(a_uin
cfg->port_cfg.inner_bmp;
}
+ /* Permit to manually declare start phy addr for malibu PHY. If not found set to legacy detection. */
+ if (!of_property_read_u32(switch_node, "malibu_first_phy_addr", &cfg->port_cfg.malibu_first_phy_addr)) {
+ ssdk_dt_global.ssdk_dt_switch_nodes[dev_id]->port_cfg.malibu_first_phy_addr =
+ cfg->port_cfg.malibu_first_phy_addr;
+ } else {
+ ssdk_dt_global.ssdk_dt_switch_nodes[dev_id]->port_cfg.malibu_first_phy_addr = MAX_PHY_ADDR;
+ }
+
ssdk_dt_global.ssdk_dt_switch_nodes[dev_id]->port_cfg.cpu_bmp = cfg->port_cfg.cpu_bmp;
ssdk_dt_global.ssdk_dt_switch_nodes[dev_id]->port_cfg.lan_bmp = cfg->port_cfg.lan_bmp;
ssdk_dt_global.ssdk_dt_switch_nodes[dev_id]->port_cfg.wan_bmp = cfg->port_cfg.wan_bmp;

View File

@@ -1,264 +0,0 @@
From 46ed8163ac0d9a11a629f1c446e8c5e711cf35d6 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Sat, 11 Nov 2023 18:13:02 +0100
Subject: [PATCH] malibu-phy: drop usage of first_phy_addr
I'm very confused by this and to me it's not clear the real usage of
this logic.
From what I can see the usage of this is EXTREMELY FRAGILE and results
in dangerous results if the OEM (or anyone that by chance try to
implement things in a logical manner) deviates from the default values
from the "magical template".
To be in more details. With QSDK 12.4, some tweaks were done to improve
autoneg and now on every call of port status, the phydev is tried to
add. This resulted in the call and log spam of an error with ports that
are actually not present on the system with qsdk reporting phydev is
NULL. This itself is not an error and printing the error is correct.
What is actually an error from ages is setting generic bitmap reporting
presence of port that are actually not present. This is very common on
OEM where the switch_lan_bmp is always a variant of 0x1e (that on bitmap
results in PORT1 PORT2 PORT3 PORT4 present) or 0x3e (PORT1 PORT2 PORT3
PORT4 PORT5). Reality is that many device are used as AP with one LAN
port or one WAN port. (or even exotic configuration with PORT1 not
present and PORT2 PORT3 PORT4 present (Xiaomi 3600)
With this finding one can say... ok nice, then lets update the DT and
set the correct bitmap...
Again world is a bad place and reality is that this cause wonderful
regression in some case of by extreme luck the first ever connected
port working and the rest of the switch dead.
The problem has been bisected to all the device that doesn't have the
PORT1 declared in any of the bitmap.
With this perfection in mind, on to the REAL problem.
malibu_phy_hw_init FOR SOME REASON, set a global variable first_phy_addr
to the first detected PHY addr that coincidentally is always PORT1.
PORT1 addr is 0x0. The entire code in malibu_phy use this variable to
derive the phy addrs in some function.
Declaring a bitmap where the PORT1 is missing (or worse PORT4 the only
one connected) result in first_phy_addr set to 1 or whatever phy addr is
detected first setting wrong value all over the init stage.
To fix this, just drop this variable and hardcode everything to assume
the first phy adrr is ALWAYS 0 and remove calculation and use define for
special case.
With the following change normal switch traffic is restored and ports
function is recovered.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
src/hsl/phy/malibu_phy.c | 63 +++++++++++++++++-----------------------
1 file changed, 26 insertions(+), 37 deletions(-)
--- a/src/hsl/phy/malibu_phy.c
+++ b/src/hsl/phy/malibu_phy.c
@@ -26,8 +26,9 @@
#include "qcaphy_common.h"
#include "ssdk_plat.h"
-static a_uint32_t first_phy_addr = MAX_PHY_ADDR;
static a_uint32_t combo_phy_addr = MAX_PHY_ADDR;
+#define PORT4_PHY_ID 0x4
+#define PORT5_PHY_ID 0x5
#define COMBO_PHY_ID combo_phy_addr
/******************************************************************************
@@ -1250,10 +1251,10 @@ sw_error_t
malibu_phy_serdes_reset(a_uint32_t dev_id)
{
- hsl_phy_mii_reg_write(dev_id, first_phy_addr + MALIBU_PHY_PSGMII_ADDR_INC,
+ hsl_phy_mii_reg_write(dev_id, MALIBU_PHY_PSGMII_ADDR_INC,
MALIBU_MODE_RESET_REG, MALIBU_MODE_CHANAGE_RESET);
mdelay(100);
- hsl_phy_mii_reg_write(dev_id, first_phy_addr + MALIBU_PHY_PSGMII_ADDR_INC,
+ hsl_phy_mii_reg_write(dev_id, MALIBU_PHY_PSGMII_ADDR_INC,
MALIBU_MODE_RESET_REG, MALIBU_MODE_RESET_DEFAULT_VALUE);
return SW_OK;
@@ -1271,8 +1272,7 @@ malibu_phy_interface_set_mode(a_uint32_t
a_uint16_t phy_data = 0;
static fal_port_interface_mode_t phy_mode = PORT_INTERFACE_MODE_MAX;
- if ((phy_addr < first_phy_addr) ||
- (phy_addr > (first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)))
+ if (phy_addr > MALIBU_PHY_MAX_ADDR_INC)
return SW_NOT_SUPPORTED;
/*if interface_mode have been configured, then no need to configure again*/
if(phy_mode == interface_mode)
@@ -1295,20 +1295,19 @@ malibu_phy_interface_set_mode(a_uint32_t
return SW_BAD_PARAM;
}
- hsl_phy_modify_mii(dev_id,
- first_phy_addr + MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG,
+ hsl_phy_modify_mii(dev_id, MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG,
BITS(0, 4), phy_data);
/* reset operation */
malibu_phy_serdes_reset(dev_id);
if (interface_mode == PHY_PSGMII_FIBER) {
- hsl_phy_mii_reg_write(dev_id, first_phy_addr + MALIBU_PHY_MAX_ADDR_INC,
+ hsl_phy_mii_reg_write(dev_id, MALIBU_PHY_MAX_ADDR_INC,
MALIBU_PHY_CHIP_CONFIG, MALIBU_MODECTRL_DFLT);
- hsl_phy_mii_reg_write(dev_id, first_phy_addr + MALIBU_PHY_MAX_ADDR_INC,
+ hsl_phy_mii_reg_write(dev_id, MALIBU_PHY_MAX_ADDR_INC,
MALIBU_PHY_CONTROL, MALIBU_MIICTRL_DFLT);
hsl_phy_phydev_autoneg_update(dev_id,
- first_phy_addr + MALIBU_PHY_MAX_ADDR_INC, A_FALSE, 0);
+ MALIBU_PHY_MAX_ADDR_INC, A_FALSE, 0);
}
phy_mode = interface_mode;
SSDK_DEBUG("malibu phy is configured as phy_mode:0x%x\n", phy_mode);
@@ -1329,13 +1328,12 @@ malibu_phy_interface_get_mode(a_uint32_t
a_uint16_t phy_data;
a_uint16_t copper_mode;
- if ((phy_addr < first_phy_addr) ||
- (phy_addr > (first_phy_addr + MALIBU_PHY_MAX_ADDR_INC))) {
+ if (phy_addr > MALIBU_PHY_MAX_ADDR_INC) {
return SW_NOT_SUPPORTED;
}
phy_data = hsl_phy_mii_reg_read(dev_id,
- first_phy_addr + MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG);
+ MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG);
copper_mode = ((phy_data & MALIBU_PHY_COPPER_MODE) >> 0xf);
phy_data &= 0x000f;
@@ -1344,13 +1342,13 @@ malibu_phy_interface_get_mode(a_uint32_t
*interface_mode = PHY_PSGMII_BASET;
break;
case MALIBU_PHY_PSGMII_BX1000:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode = PHY_PSGMII_BX1000;
else
*interface_mode = PHY_PSGMII_BASET;
break;
case MALIBU_PHY_PSGMII_FX100:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode = PHY_PSGMII_FX100;
else
*interface_mode = PHY_PSGMII_BASET;
@@ -1359,14 +1357,14 @@ malibu_phy_interface_get_mode(a_uint32_t
if (copper_mode) {
*interface_mode = PHY_PSGMII_BASET;
} else {
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode = PHY_PSGMII_FIBER;
else
*interface_mode = PHY_PSGMII_BASET;
}
break;
case MALIBU_PHY_SGMII_BASET:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode = PHY_SGMII_BASET;
else
*interface_mode = PORT_QSGMII;
@@ -1392,13 +1390,12 @@ malibu_phy_interface_get_mode_status(a_u
a_uint16_t phy_data, phy_mode, phy_mode_status;
a_uint16_t copper_mode;
- if ((phy_addr < first_phy_addr) ||
- (phy_addr > (first_phy_addr + MALIBU_PHY_MAX_ADDR_INC))) {
+ if (phy_addr > MALIBU_PHY_MAX_ADDR_INC) {
return SW_NOT_SUPPORTED;
}
phy_data = hsl_phy_mii_reg_read(dev_id,
- first_phy_addr + MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG);
+ MALIBU_PHY_MAX_ADDR_INC, MALIBU_PHY_CHIP_CONFIG);
copper_mode = ((phy_data & MALIBU_PHY_COPPER_MODE) >> 0xf);
phy_mode = phy_data & 0x000f;
phy_mode_status = (phy_data & 0x00f0) >> 0x4;
@@ -1407,7 +1404,7 @@ malibu_phy_interface_get_mode_status(a_u
if (copper_mode) {
*interface_mode_status = PHY_PSGMII_BASET;
} else {
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode_status = PHY_PSGMII_FIBER;
else
*interface_mode_status = PHY_PSGMII_BASET;
@@ -1418,19 +1415,19 @@ malibu_phy_interface_get_mode_status(a_u
*interface_mode_status = PHY_PSGMII_BASET;
break;
case MALIBU_PHY_PSGMII_BX1000:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode_status = PHY_PSGMII_BX1000;
else
*interface_mode_status = PHY_PSGMII_BASET;
break;
case MALIBU_PHY_PSGMII_FX100:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode_status = PHY_PSGMII_FX100;
else
*interface_mode_status = PHY_PSGMII_BASET;
break;
case MALIBU_PHY_SGMII_BASET:
- if (phy_addr == first_phy_addr + MALIBU_PHY_MAX_ADDR_INC)
+ if (phy_addr == MALIBU_PHY_MAX_ADDR_INC)
*interface_mode_status = PHY_SGMII_BASET;
else
*interface_mode_status = PORT_QSGMII;
@@ -1795,10 +1792,6 @@ malibu_phy_hw_init(a_uint32_t dev_id, a_
{
phy_cnt ++;
phy_addr = qca_ssdk_port_to_phy_addr(dev_id, port_id);
- if (phy_addr < first_phy_addr)
- {
- first_phy_addr = phy_addr;
- }
/*enable phy power saving function by default */
malibu_phy_set_8023az(dev_id, phy_addr, A_TRUE);
malibu_phy_set_powersave(dev_id, phy_addr, A_TRUE);
@@ -1824,29 +1817,25 @@ malibu_phy_hw_init(a_uint32_t dev_id, a_
MALIBU_EXTENDED_NEXT_PAGE_EN, 0);
}
}
- /* qca 8072 two ports phy chip's firstly address to init phy chip */
- if ((phy_cnt == QCA8072_PHY_NUM) && (first_phy_addr >= 0x3)) {
- first_phy_addr = first_phy_addr - 0x3;
- }
/*workaround to enable AZ transmitting ability*/
- hsl_phy_mmd_reg_write(dev_id, first_phy_addr + 5, A_FALSE, MALIBU_PHY_MMD1_NUM,
+ hsl_phy_mmd_reg_write(dev_id, PORT5_PHY_ID, A_FALSE, MALIBU_PHY_MMD1_NUM,
MALIBU_PSGMII_MODE_CTRL, MALIBU_PHY_PSGMII_MODE_CTRL_ADJUST_VALUE);
/* adjust psgmii serdes tx amp */
- hsl_phy_mii_reg_write(dev_id, first_phy_addr + 5,
+ hsl_phy_mii_reg_write(dev_id, PORT5_PHY_ID,
MALIBU_PSGMII_TX_DRIVER_1_CTRL, MALIBU_PHY_PSGMII_REDUCE_SERDES_TX_AMP);
/* to avoid psgmii module goes into hibernation, work with psgmii self test*/
- hsl_phy_modify_mmd(dev_id, first_phy_addr + 4, A_FALSE, MALIBU_PHY_MMD3_NUM,
+ hsl_phy_modify_mmd(dev_id, PORT4_PHY_ID, A_FALSE, MALIBU_PHY_MMD3_NUM,
MALIBU_PHY_MMD3_ADDR_REMOTE_LOOPBACK_CTRL, BIT(1), 0);
mode = ssdk_dt_global_get_mac_mode(dev_id, 0);
if (mode == PORT_WRAPPER_PSGMII_FIBER)
- malibu_phy_interface_set_mode(dev_id, first_phy_addr, PHY_PSGMII_FIBER);
+ malibu_phy_interface_set_mode(dev_id, 0x0, PHY_PSGMII_FIBER);
/*init combo phy address*/
- combo_phy_addr = first_phy_addr+4;
+ combo_phy_addr = PORT4_PHY_ID;
return SW_OK;
}

View File

@@ -8,8 +8,11 @@ include $(INCLUDE_DIR)/image.mk
LS_SD_KERNELPART_SIZE = 40
LS_SD_KERNELPART_OFFSET = 16
LS_SD_ROOTFSPART_OFFSET = 64
ifeq ($(DUMP),)
LS_SD_IMAGE_SIZE = $(shell echo $$((($(LS_SD_ROOTFSPART_OFFSET) + \
$(CONFIG_TARGET_ROOTFS_PARTSIZE)))))
endif
# The limitation of flash sysupgrade.bin is 1MB dtb + 16MB kernel + 32MB rootfs
LS_SYSUPGRADE_IMAGE_SIZE = 49m

View File

@@ -213,7 +213,9 @@ define Device/bananapi_bpi-r3
pad-to 64M | append-image squashfs-sysupgrade.itb | check-size |\
) \
gzip
ifeq ($(DUMP),)
IMAGE_SIZE := $$(shell expr 64 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
endif
KERNEL := kernel-bin | gzip
KERNEL_INITRAMFS := kernel-bin | lzma | \
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k

View File

@@ -107,7 +107,9 @@ define Device/bananapi_bpi-r64
pad-to 46080k | append-image squashfs-sysupgrade.itb | check-size |\
) \
gzip
ifeq ($(DUMP),)
IMAGE_SIZE := $$(shell expr 45 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
endif
KERNEL := kernel-bin | gzip
KERNEL_INITRAMFS := kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb with-initrd | pad-to 128k
IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb external-static-with-rootfs | append-metadata

View File

@@ -96,7 +96,9 @@ define Device/bananapi_bpi-r2
KERNEL := kernel-bin | gzip
KERNEL_INITRAMFS_SUFFIX := -recovery.itb
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb with-initrd
ifeq ($(DUMP),)
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
endif
IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb external-static-with-rootfs | append-metadata
ARTIFACT/preloader.bin := mt7623-mbr emmc |\
pad-to 2k | append-preloader $$(UBOOT_TARGET)
@@ -130,7 +132,9 @@ define Device/unielec_u7623-02
UBOOT_TARGET := mt7623a_unielec_u7623
UBOOT_IMAGE := u-boot-mtk.bin
UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
ifeq ($(DUMP),)
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
endif
IMAGES := sysupgrade.itb
KERNEL := kernel-bin | gzip
KERNEL_INITRAMFS_SUFFIX := -recovery.itb

View File

@@ -323,6 +323,7 @@
switch_lan_bmp = <(ESS_PORT1 | ESS_PORT2 | ESS_PORT3 | ESS_PORT4 | ESS_PORT5)>; /* lan port bitmap */
switch_wan_bmp = <ESS_PORT6>; /* wan port bitmap */
malibu_first_phy_addr = <16>; /* PHY addr of the first malibu PHY */
switch_mac_mode = <0xb>; /* mac mode for uniphy instance0*/
switch_mac_mode1 = <0xd>; /* mac mode for uniphy instance1*/
switch_mac_mode2 = <0xd>; /* mac mode for uniphy instance2*/

View File

@@ -23,6 +23,24 @@
switch_access_mode = "local bus";
switch_cpu_bmp = <ESS_PORT0>; /* cpu port bitmap */
switch_inner_bmp = <ESS_PORT7>; /*inner port bitmap*/
/* This is a special binding that controls how the malibu PHY are
* init. This value reflect the PHY addr of the first malibu PHY.
* Malibu PHY are in a bundle of 5 PHY.
* Some device might have some port not connected.
* SSDK still needs the addrs of the first PHY (even if not connected)
* to correctly setup the malibu PHY.
*
* This is needed as previously SSDK based this on the port bmp, but
* this can be problematic now that we specify correct bmp.
*
* Most common configuration have the malibu PHY placed at 0.
* But some device might have it placed at address 16.
* To drive the correct value, check the port id of the malibu PHY
* and try to understand what is the first one in devices where some
* port are missing. port_phyinfo is normally the way to go to derive
* this value in the few special cases.
*/
malibu_first_phy_addr = <0>;
clocks = <&gcc GCC_CMN_12GPLL_AHB_CLK>,
<&gcc GCC_CMN_12GPLL_SYS_CLK>,
<&gcc GCC_UNIPHY0_AHB_CLK>,