Merge branch 'master' of https://github.com/difuseHQ/difos
This commit is contained in:
commit
dce06ef040
229 changed files with 14629 additions and 8375 deletions
|
@ -1,2 +1,2 @@
|
|||
LINUX_VERSION-5.15 = .127
|
||||
LINUX_KERNEL_HASH-5.15.127 = add0a575341b263a06e93599fc220a5dd34cb4ca5b9d05097a5db2a061928f26
|
||||
LINUX_VERSION-5.15 = .128
|
||||
LINUX_KERNEL_HASH-5.15.128 = 0f2eca845183fd76f53b0c867c97f12b9ace2d7e8ee2cdeec7eb2897651b80de
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
LINUX_VERSION-6.1 = .47
|
||||
LINUX_KERNEL_HASH-6.1.47 = 93d58b6af007a5f44dd26831ff310707deb1ab9380c5136a534287eb3fddfcab
|
||||
LINUX_VERSION-6.1 = .48
|
||||
LINUX_KERNEL_HASH-6.1.48 = c606cbd0353e677df6fae73cc16ba3c9244b98372ed7771d551024016f55ac31
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
--- a/plat/mediatek/mt7988/bl2/bl2_plat_init.c
|
||||
+++ b/plat/mediatek/mt7988/bl2/bl2_plat_init.c
|
||||
@@ -90,6 +90,8 @@ static void mtk_i2p5g_phy_init(void)
|
||||
* clear bit 22 to use external MDIO.
|
||||
*/
|
||||
mmio_setbits_32(GBE_TOP_REG, I2P5G_MDIO);
|
||||
+ /* Internal 2.5Gphy power on sequence */
|
||||
+ eth_2p5g_phy_mtcmos_ctrl(true);
|
||||
}
|
||||
|
||||
static void mt7988_i2c_init(void)
|
|
@ -124,10 +124,34 @@ define U-Boot/mt7622_bananapi_bpi-r64-snand
|
|||
DEPENDS:=+trusted-firmware-a-mt7622-snand-2ddr
|
||||
endef
|
||||
|
||||
define U-Boot/mt7622_ubnt_unifi-6-lr
|
||||
define U-Boot/mt7622_ubnt_unifi-6-lr-v1
|
||||
NAME:=Ubiquiti UniFi 6 LR
|
||||
UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod ubnt_unifi-6-lr-v2-ubootmod
|
||||
UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v1
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod
|
||||
BUILD_SUBTARGET:=mt7622
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=nor
|
||||
BL2_DDRBLOB:=2
|
||||
DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr
|
||||
FIP_COMPRESS:=1
|
||||
endef
|
||||
|
||||
define U-Boot/mt7622_ubnt_unifi-6-lr-v2
|
||||
NAME:=Ubiquiti UniFi 6 LR v2
|
||||
UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v2
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-v2-ubootmod
|
||||
BUILD_SUBTARGET:=mt7622
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=nor
|
||||
BL2_DDRBLOB:=2
|
||||
DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr
|
||||
FIP_COMPRESS:=1
|
||||
endef
|
||||
|
||||
define U-Boot/mt7622_ubnt_unifi-6-lr-v3
|
||||
NAME:=Ubiquiti UniFi 6 LR v3
|
||||
UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v3
|
||||
BUILD_DEVICES:=ubnt_unifi-6-lr-v3-ubootmod
|
||||
BUILD_SUBTARGET:=mt7622
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=nor
|
||||
|
@ -324,61 +348,62 @@ endef
|
|||
define U-Boot/mt7988_rfb-spim-nand
|
||||
NAME:=MT7988 Reference Board
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb-nand
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb
|
||||
UBOOT_CONFIG:=mt7988_rfb
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=spim-nand
|
||||
BL2_SOC:=mt7988
|
||||
BL2_DDRTYPE:=ddr4
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-ddr4
|
||||
BL2_DDRTYPE:=comb
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-comb
|
||||
endef
|
||||
|
||||
define U-Boot/mt7988_rfb-snand
|
||||
NAME:=MT7988 Reference Board
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb-nand
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb
|
||||
UBOOT_CONFIG:=mt7988_rfb
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=snand
|
||||
BL2_SOC:=mt7988
|
||||
BL2_DDRTYPE:=ddr4
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-snand-ddr4
|
||||
BL2_DDRTYPE:=comb
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-snand-comb
|
||||
endef
|
||||
|
||||
define U-Boot/mt7988_rfb-nor
|
||||
NAME:=MT7988 Reference Board
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb-nand
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb
|
||||
UBOOT_CONFIG:=mt7988_rfb
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=nor
|
||||
BL2_SOC:=mt7988
|
||||
BL2_DDRTYPE:=ddr4
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-nor-ddr4
|
||||
BL2_DDRTYPE:=comb
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-nor-comb
|
||||
FIP_COMPRESS:=1
|
||||
endef
|
||||
|
||||
define U-Boot/mt7988_rfb-emmc
|
||||
NAME:=MT7988 Reference Board
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb-nand
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb
|
||||
UBOOT_CONFIG:=mt7988_rfb
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=emmc
|
||||
BL2_SOC:=mt7988
|
||||
BL2_DDRTYPE:=ddr4
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-emmc-ddr4
|
||||
BL2_DDRTYPE:=comb
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-emmc-comb
|
||||
endef
|
||||
|
||||
define U-Boot/mt7988_rfb-sd
|
||||
NAME:=MT7988 Reference Board
|
||||
BUILD_SUBTARGET:=filogic
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb-nand
|
||||
BUILD_DEVICES:=mediatek_mt7988a-rfb
|
||||
UBOOT_CONFIG:=mt7988_sd_rfb
|
||||
UBOOT_IMAGE:=u-boot.fip
|
||||
BL2_BOOTDEV:=sdmmc
|
||||
BL2_SOC:=mt7988
|
||||
BL2_DDRTYPE:=ddr4
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-sdmmc-ddr4
|
||||
BL2_DDRTYPE:=comb
|
||||
DEPENDS:=+trusted-firmware-a-mt7988-sdmmc-comb
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
|
@ -391,7 +416,9 @@ UBOOT_TARGETS := \
|
|||
mt7622_bananapi_bpi-r64-snand \
|
||||
mt7622_linksys_e8450 \
|
||||
mt7622_rfb1 \
|
||||
mt7622_ubnt_unifi-6-lr \
|
||||
mt7622_ubnt_unifi-6-lr-v1 \
|
||||
mt7622_ubnt_unifi-6-lr-v2 \
|
||||
mt7622_ubnt_unifi-6-lr-v3 \
|
||||
mt7623n_bpir2 \
|
||||
mt7623a_unielec_u7623 \
|
||||
mt7628_rfb \
|
||||
|
|
|
@ -310,3 +310,14 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||
|
||||
switch (key) {
|
||||
case BKEY_PLUS:
|
||||
--- a/boot/bootflow_menu.c
|
||||
+++ b/boot/bootflow_menu.c
|
||||
@@ -231,7 +231,7 @@ int bootflow_menu_run(struct bootstd_pri
|
||||
|
||||
key = 0;
|
||||
if (ichar) {
|
||||
- key = bootmenu_conv_key(ichar);
|
||||
+ key = bootmenu_conv_key(NULL, ichar, NULL);
|
||||
if (key == BKEY_NONE)
|
||||
key = ichar;
|
||||
}
|
||||
|
|
|
@ -411,7 +411,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||
+CONFIG_TARGET_MT7988=y
|
||||
+CONFIG_DEBUG_UART_BASE=0x11000000
|
||||
+CONFIG_DEBUG_UART_CLOCK=40000000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x46000000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x50000000
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+# CONFIG_AUTOBOOT is not set
|
||||
+CONFIG_DEFAULT_FDT_FILE="mt7988-rfb"
|
||||
|
@ -497,7 +497,7 @@ Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|||
+CONFIG_TARGET_MT7988=y
|
||||
+CONFIG_DEBUG_UART_BASE=0x11000000
|
||||
+CONFIG_DEBUG_UART_CLOCK=40000000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x46000000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x50000000
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+# CONFIG_AUTOBOOT is not set
|
||||
+CONFIG_DEFAULT_FDT_FILE="mt7988-sd-rfb"
|
||||
|
|
|
@ -0,0 +1,314 @@
|
|||
--- a/configs/mt7988_sd_rfb_defconfig
|
||||
+++ b/configs/mt7988_sd_rfb_defconfig
|
||||
@@ -12,6 +12,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000
|
||||
CONFIG_DEBUG_UART_CLOCK=40000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x50000000
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
+CONFIG_SMBIOS_PRODUCT_NAME=""
|
||||
+CONFIG_CFB_CONSOLE_ANSI=y
|
||||
+CONFIG_BOARD_LATE_INIT=y
|
||||
+CONFIG_BUTTON=y
|
||||
+CONFIG_BUTTON_GPIO=y
|
||||
+CONFIG_GPIO_HOG=y
|
||||
+CONFIG_CMD_ENV_FLAGS=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_BLINK=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
+CONFIG_SPI_BOOT=y
|
||||
+CONFIG_SD_BOOT=y
|
||||
+CONFIG_NAND_BOOT=y
|
||||
+CONFIG_BOOTSTD_DEFAULTS=y
|
||||
+CONFIG_BOOTSTD_FULL=y
|
||||
# CONFIG_AUTOBOOT is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="mt7988-sd-rfb"
|
||||
CONFIG_LOGLEVEL=7
|
||||
@@ -22,15 +40,118 @@ CONFIG_SYS_PBSIZE=1049
|
||||
# CONFIG_BOOTM_PLAN9 is not set
|
||||
# CONFIG_BOOTM_RTEMS is not set
|
||||
# CONFIG_BOOTM_VXWORKS is not set
|
||||
-# CONFIG_CMD_ELF is not set
|
||||
+CONFIG_CMD_BOOTMENU=y
|
||||
+CONFIG_CMD_BOOTP=y
|
||||
+CONFIG_CMD_BUTTON=y
|
||||
+CONFIG_CMD_CACHE=y
|
||||
+CONFIG_CMD_CDP=y
|
||||
+CONFIG_CMD_CPU=y
|
||||
+CONFIG_CMD_DHCP=y
|
||||
+CONFIG_CMD_DM=y
|
||||
+CONFIG_CMD_ELF=y
|
||||
+CONFIG_CMD_DNS=y
|
||||
+CONFIG_CMD_ECHO=y
|
||||
+CONFIG_CMD_ENV_READMEM=y
|
||||
+CONFIG_CMD_ERASEENV=y
|
||||
+CONFIG_CMD_EXT4=y
|
||||
+CONFIG_CMD_FAT=y
|
||||
+CONFIG_CMD_FDT=y
|
||||
+CONFIG_CMD_FS_GENERIC=y
|
||||
+CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DM=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_GPT=y
|
||||
+CONFIG_CMD_HASH=y
|
||||
+CONFIG_CMD_ITEST=y
|
||||
+CONFIG_CMD_LED=y
|
||||
+CONFIG_CMD_LICENSE=y
|
||||
+CONFIG_CMD_LINK_LOCAL=y
|
||||
+CONFIG_CMD_MMC=y
|
||||
+CONFIG_CMD_MTD=y
|
||||
+CONFIG_CMD_NAND=y
|
||||
+CONFIG_CMD_NAND_TRIMFFS=y
|
||||
+CONFIG_CMD_PCI=y
|
||||
+CONFIG_CMD_PSTORE=y
|
||||
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
|
||||
+CONFIG_CMD_SF_TEST=y
|
||||
+CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_PXE=y
|
||||
CONFIG_CMD_PWM=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SMC=y
|
||||
+CONFIG_CMD_TFTPBOOT=y
|
||||
+CONFIG_CMD_TFTPSRV=y
|
||||
+CONFIG_CMD_UBI=y
|
||||
+CONFIG_CMD_UBI_RENAME=y
|
||||
+CONFIG_CMD_UBIFS=y
|
||||
+CONFIG_CMD_ASKENV=y
|
||||
+CONFIG_CMD_PART=y
|
||||
+CONFIG_CMD_RARP=y
|
||||
+CONFIG_CMD_SETEXPR=y
|
||||
+CONFIG_CMD_SLEEP=y
|
||||
+CONFIG_CMD_SNTP=y
|
||||
+CONFIG_CMD_SOURCE=y
|
||||
+CONFIG_CMD_STRINGS=y
|
||||
+CONFIG_CMD_USB=y
|
||||
+CONFIG_CMD_UUID=y
|
||||
+CONFIG_DISPLAY_CPUINFO=y
|
||||
+CONFIG_DM_MMC=y
|
||||
+CONFIG_DM_MTD=y
|
||||
+CONFIG_DM_REGULATOR=y
|
||||
+CONFIG_DM_REGULATOR_FIXED=y
|
||||
+CONFIG_DM_REGULATOR_GPIO=y
|
||||
+CONFIG_DM_USB=y
|
||||
+CONFIG_DM_PWM=y
|
||||
+CONFIG_PWM_MTK=y
|
||||
+CONFIG_HUSH_PARSER=y
|
||||
+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+CONFIG_VERSION_VARIABLE=y
|
||||
+CONFIG_PARTITION_UUIDS=y
|
||||
+CONFIG_NETCONSOLE=y
|
||||
+CONFIG_DM_GPIO=y
|
||||
+CONFIG_DM_SCSI=y
|
||||
+CONFIG_PHY=y
|
||||
+CONFIG_PHY_MTK_TPHY=y
|
||||
+CONFIG_PCI=y
|
||||
+CONFIG_MTD=y
|
||||
+CONFIG_MTD_UBI_FASTMAP=y
|
||||
+# CONFIG_MTD_RAW_NAND is not set
|
||||
+CONFIG_DM_PCI=y
|
||||
+CONFIG_PCIE_MEDIATEK=y
|
||||
+CONFIG_PINCTRL_MT7988=y
|
||||
+CONFIG_PRE_CONSOLE_BUFFER=y
|
||||
+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
|
||||
+CONFIG_RAM=y
|
||||
+CONFIG_DM_SERIAL=y
|
||||
+CONFIG_MTK_SERIAL=y
|
||||
+CONFIG_SPI=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_MTK_SPI_NAND=y
|
||||
+CONFIG_MTK_SPI_NAND_MTD=y
|
||||
+CONFIG_SYSRESET_WATCHDOG=y
|
||||
+CONFIG_WDT_MTK=y
|
||||
+CONFIG_LZO=y
|
||||
+CONFIG_ZSTD=y
|
||||
+CONFIG_HEXDUMP=y
|
||||
+CONFIG_RANDOM_UUID=y
|
||||
+CONFIG_REGEX=y
|
||||
+CONFIG_USB=y
|
||||
+CONFIG_USB_HOST=y
|
||||
+CONFIG_USB_XHCI_HCD=y
|
||||
+CONFIG_USB_XHCI_MTK=y
|
||||
+CONFIG_USB_STORAGE=y
|
||||
+CONFIG_OF_EMBED=y
|
||||
+CONFIG_ENV_OVERWRITE=y
|
||||
+CONFIG_ENV_IS_IN_MMC=y
|
||||
+CONFIG_ENV_OFFSET=0x400000
|
||||
+CONFIG_ENV_OFFSET_REDUND=0x440000
|
||||
+CONFIG_ENV_SIZE=0x40000
|
||||
+CONFIG_ENV_SIZE_REDUND=0x40000
|
||||
CONFIG_DOS_PARTITION=y
|
||||
CONFIG_EFI_PARTITION=y
|
||||
CONFIG_PARTITION_TYPE_GUID=y
|
||||
@@ -46,6 +167,9 @@ CONFIG_PROT_TCP=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_CLK=y
|
||||
+CONFIG_MMC=y
|
||||
+CONFIG_MMC_DEFAULT_DEV=1
|
||||
+CONFIG_MMC_SUPPORTS_TUNING=y
|
||||
CONFIG_MMC_HS200_SUPPORT=y
|
||||
CONFIG_MMC_MTK=y
|
||||
CONFIG_MTD=y
|
||||
--- a/configs/mt7988_rfb_defconfig
|
||||
+++ b/configs/mt7988_rfb_defconfig
|
||||
@@ -12,6 +12,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000
|
||||
CONFIG_DEBUG_UART_CLOCK=40000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x50000000
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
+CONFIG_SMBIOS_PRODUCT_NAME=""
|
||||
+CONFIG_CFB_CONSOLE_ANSI=y
|
||||
+CONFIG_BOARD_LATE_INIT=y
|
||||
+CONFIG_BUTTON=y
|
||||
+CONFIG_BUTTON_GPIO=y
|
||||
+CONFIG_GPIO_HOG=y
|
||||
+CONFIG_CMD_ENV_FLAGS=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_BLINK=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
+CONFIG_SPI_BOOT=y
|
||||
+CONFIG_SD_BOOT=y
|
||||
+CONFIG_NAND_BOOT=y
|
||||
+CONFIG_BOOTSTD_DEFAULTS=y
|
||||
+CONFIG_BOOTSTD_FULL=y
|
||||
# CONFIG_AUTOBOOT is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="mt7988-rfb"
|
||||
CONFIG_LOGLEVEL=7
|
||||
@@ -22,15 +40,118 @@ CONFIG_SYS_PBSIZE=1049
|
||||
# CONFIG_BOOTM_PLAN9 is not set
|
||||
# CONFIG_BOOTM_RTEMS is not set
|
||||
# CONFIG_BOOTM_VXWORKS is not set
|
||||
-# CONFIG_CMD_ELF is not set
|
||||
+CONFIG_CMD_BOOTMENU=y
|
||||
+CONFIG_CMD_BOOTP=y
|
||||
+CONFIG_CMD_BUTTON=y
|
||||
+CONFIG_CMD_CACHE=y
|
||||
+CONFIG_CMD_CDP=y
|
||||
+CONFIG_CMD_CPU=y
|
||||
+CONFIG_CMD_DHCP=y
|
||||
+CONFIG_CMD_DM=y
|
||||
+CONFIG_CMD_ELF=y
|
||||
+CONFIG_CMD_DNS=y
|
||||
+CONFIG_CMD_ECHO=y
|
||||
+CONFIG_CMD_ENV_READMEM=y
|
||||
+CONFIG_CMD_ERASEENV=y
|
||||
+CONFIG_CMD_EXT4=y
|
||||
+CONFIG_CMD_FAT=y
|
||||
+CONFIG_CMD_FDT=y
|
||||
+CONFIG_CMD_FS_GENERIC=y
|
||||
+CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DM=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_GPT=y
|
||||
+CONFIG_CMD_HASH=y
|
||||
+CONFIG_CMD_ITEST=y
|
||||
+CONFIG_CMD_LED=y
|
||||
+CONFIG_CMD_LICENSE=y
|
||||
+CONFIG_CMD_LINK_LOCAL=y
|
||||
+CONFIG_CMD_MMC=y
|
||||
+CONFIG_CMD_MTD=y
|
||||
+CONFIG_CMD_NAND=y
|
||||
+CONFIG_CMD_NAND_TRIMFFS=y
|
||||
+CONFIG_CMD_PCI=y
|
||||
+CONFIG_CMD_PSTORE=y
|
||||
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
|
||||
+CONFIG_CMD_SF_TEST=y
|
||||
+CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_PXE=y
|
||||
CONFIG_CMD_PWM=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_SMC=y
|
||||
+CONFIG_CMD_TFTPBOOT=y
|
||||
+CONFIG_CMD_TFTPSRV=y
|
||||
+CONFIG_CMD_UBI=y
|
||||
+CONFIG_CMD_UBI_RENAME=y
|
||||
+CONFIG_CMD_UBIFS=y
|
||||
+CONFIG_CMD_ASKENV=y
|
||||
+CONFIG_CMD_PART=y
|
||||
+CONFIG_CMD_RARP=y
|
||||
+CONFIG_CMD_SETEXPR=y
|
||||
+CONFIG_CMD_SLEEP=y
|
||||
+CONFIG_CMD_SNTP=y
|
||||
+CONFIG_CMD_SOURCE=y
|
||||
+CONFIG_CMD_STRINGS=y
|
||||
+CONFIG_CMD_USB=y
|
||||
+CONFIG_CMD_UUID=y
|
||||
+CONFIG_DISPLAY_CPUINFO=y
|
||||
+CONFIG_DM_MMC=y
|
||||
+CONFIG_DM_MTD=y
|
||||
+CONFIG_DM_REGULATOR=y
|
||||
+CONFIG_DM_REGULATOR_FIXED=y
|
||||
+CONFIG_DM_REGULATOR_GPIO=y
|
||||
+CONFIG_DM_USB=y
|
||||
+CONFIG_DM_PWM=y
|
||||
+CONFIG_PWM_MTK=y
|
||||
+CONFIG_HUSH_PARSER=y
|
||||
+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+CONFIG_VERSION_VARIABLE=y
|
||||
+CONFIG_PARTITION_UUIDS=y
|
||||
+CONFIG_NETCONSOLE=y
|
||||
+CONFIG_DM_GPIO=y
|
||||
+CONFIG_DM_SCSI=y
|
||||
+CONFIG_PHY=y
|
||||
+CONFIG_PHY_MTK_TPHY=y
|
||||
+CONFIG_PCI=y
|
||||
+CONFIG_MTD=y
|
||||
+CONFIG_MTD_UBI_FASTMAP=y
|
||||
+# CONFIG_MTD_RAW_NAND is not set
|
||||
+CONFIG_DM_PCI=y
|
||||
+CONFIG_PCIE_MEDIATEK=y
|
||||
+CONFIG_PINCTRL_MT7988=y
|
||||
+CONFIG_PRE_CONSOLE_BUFFER=y
|
||||
+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
|
||||
+CONFIG_RAM=y
|
||||
+CONFIG_DM_SERIAL=y
|
||||
+CONFIG_MTK_SERIAL=y
|
||||
+CONFIG_SPI=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_MTK_SPI_NAND=y
|
||||
+CONFIG_MTK_SPI_NAND_MTD=y
|
||||
+CONFIG_SYSRESET_WATCHDOG=y
|
||||
+CONFIG_WDT_MTK=y
|
||||
+CONFIG_LZO=y
|
||||
+CONFIG_ZSTD=y
|
||||
+CONFIG_HEXDUMP=y
|
||||
+CONFIG_RANDOM_UUID=y
|
||||
+CONFIG_REGEX=y
|
||||
+CONFIG_USB=y
|
||||
+CONFIG_USB_HOST=y
|
||||
+CONFIG_USB_XHCI_HCD=y
|
||||
+CONFIG_USB_XHCI_MTK=y
|
||||
+CONFIG_USB_STORAGE=y
|
||||
+CONFIG_OF_EMBED=y
|
||||
+CONFIG_ENV_OVERWRITE=y
|
||||
+CONFIG_ENV_IS_IN_MMC=y
|
||||
+CONFIG_ENV_OFFSET=0x400000
|
||||
+CONFIG_ENV_OFFSET_REDUND=0x440000
|
||||
+CONFIG_ENV_SIZE=0x40000
|
||||
+CONFIG_ENV_SIZE_REDUND=0x40000
|
||||
CONFIG_DOS_PARTITION=y
|
||||
CONFIG_EFI_PARTITION=y
|
||||
CONFIG_PARTITION_TYPE_GUID=y
|
||||
@@ -46,6 +167,9 @@ CONFIG_PROT_TCP=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_CLK=y
|
||||
+CONFIG_MMC=y
|
||||
+CONFIG_MMC_DEFAULT_DEV=1
|
||||
+CONFIG_MMC_SUPPORTS_TUNING=y
|
||||
CONFIG_MMC_HS200_SUPPORT=y
|
||||
CONFIG_MMC_MTK=y
|
||||
CONFIG_MTD=y
|
|
@ -1,5 +1,5 @@
|
|||
--- /dev/null
|
||||
+++ b/configs/mt7622_ubnt_unifi-6-lr_defconfig
|
||||
+++ b/configs/mt7622_ubnt_unifi-6-lr-v1_defconfig
|
||||
@@ -0,0 +1,147 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_POSITION_INDEPENDENT=y
|
||||
|
@ -149,6 +149,305 @@
|
|||
+CONFIG_USE_SERVERIP=y
|
||||
+CONFIG_SERVERIP="192.168.1.254"
|
||||
--- /dev/null
|
||||
+++ b/configs/mt7622_ubnt_unifi-6-lr-v2_defconfig
|
||||
@@ -0,0 +1,147 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_POSITION_INDEPENDENT=y
|
||||
+CONFIG_ARCH_MEDIATEK=y
|
||||
+CONFIG_TARGET_MT7622=y
|
||||
+CONFIG_TEXT_BASE=0x41e00000
|
||||
+CONFIG_SYS_MALLOC_F_LEN=0x4000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x40080000
|
||||
+CONFIG_USE_DEFAULT_ENV_FILE=y
|
||||
+CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)"
|
||||
+CONFIG_ENV_IS_IN_MTD=y
|
||||
+CONFIG_ENV_MTD_NAME="nor0"
|
||||
+CONFIG_ENV_SIZE_REDUND=0x4000
|
||||
+CONFIG_ENV_SIZE=0x4000
|
||||
+CONFIG_ENV_OFFSET=0xc0000
|
||||
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_BOARD_LATE_INIT=y
|
||||
+CONFIG_RESET_BUTTON_SETTLE_DELAY=400
|
||||
+CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
+CONFIG_DEFAULT_ENV_FILE="ubnt_unifi-6-lr-v2_env"
|
||||
+CONFIG_DEBUG_UART_BASE=0x11002000
|
||||
+CONFIG_DEBUG_UART_CLOCK=25000000
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr"
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+CONFIG_SMBIOS_PRODUCT_NAME=""
|
||||
+CONFIG_AUTOBOOT_KEYED=y
|
||||
+CONFIG_BOOTDELAY=30
|
||||
+CONFIG_AUTOBOOT_MENU_SHOW=y
|
||||
+CONFIG_CFB_CONSOLE_ANSI=y
|
||||
+CONFIG_BUTTON=y
|
||||
+CONFIG_BUTTON_GPIO=y
|
||||
+CONFIG_GPIO_HOG=y
|
||||
+CONFIG_CMD_ENV_FLAGS=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
+CONFIG_LOGLEVEL=7
|
||||
+CONFIG_LOG=y
|
||||
+CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr"
|
||||
+CONFIG_SYS_PROMPT="MT7622> "
|
||||
+# CONFIG_LEGACY_IMAGE_FORMAT is not set
|
||||
+# CONFIG_BOOTM_PLAN9 is not set
|
||||
+# CONFIG_BOOTM_RTEMS is not set
|
||||
+# CONFIG_BOOTM_VXWORKS is not set
|
||||
+# CONFIG_EFI is not set
|
||||
+# CONFIG_EFI_LOADER is not set
|
||||
+CONFIG_CMD_BOOTMENU=y
|
||||
+# CONFIG_CMD_BOOTEFI is not set
|
||||
+CONFIG_CMD_BOOTP=y
|
||||
+CONFIG_CMD_BUTTON=y
|
||||
+CONFIG_CMD_CDP=y
|
||||
+CONFIG_CMD_DHCP=y
|
||||
+CONFIG_CMD_DNS=y
|
||||
+CONFIG_CMD_ECHO=y
|
||||
+# CONFIG_CMD_ELF is not set
|
||||
+# CONFIG_CMD_BOOTEFI_BOOTMGR is not set
|
||||
+CONFIG_CMD_ENV_READMEM=y
|
||||
+CONFIG_CMD_ERASEENV=y
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_HASH=y
|
||||
+CONFIG_CMD_ITEST=y
|
||||
+CONFIG_CMD_LED=y
|
||||
+CONFIG_CMD_LINK_LOCAL=y
|
||||
+# CONFIG_CMD_MBR is not set
|
||||
+CONFIG_CMD_MTD=y
|
||||
+CONFIG_CMD_MTDPARTS=y
|
||||
+# CONFIG_CMD_PCI is not set
|
||||
+CONFIG_CMD_SF_TEST=y
|
||||
+CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_PXE=y
|
||||
+CONFIG_CMD_SMC=y
|
||||
+CONFIG_CMD_TFTPBOOT=y
|
||||
+CONFIG_CMD_TFTPSRV=y
|
||||
+# CONFIG_CMD_UNLZ4 is not set
|
||||
+CONFIG_CMD_ASKENV=y
|
||||
+CONFIG_CMD_PSTORE=y
|
||||
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
|
||||
+CONFIG_CMD_RARP=y
|
||||
+CONFIG_CMD_SETEXPR=y
|
||||
+CONFIG_CMD_SLEEP=y
|
||||
+CONFIG_CMD_SOURCE=y
|
||||
+CONFIG_CMD_UUID=y
|
||||
+CONFIG_DISPLAY_CPUINFO=y
|
||||
+CONFIG_DM_ETH=y
|
||||
+CONFIG_DM_ETH_PHY=y
|
||||
+CONFIG_DM_GPIO=y
|
||||
+CONFIG_DM_MDIO=y
|
||||
+CONFIG_DM_MTD=y
|
||||
+CONFIG_DM_REGULATOR=y
|
||||
+CONFIG_DM_REGULATOR_FIXED=y
|
||||
+CONFIG_DM_REGULATOR_GPIO=y
|
||||
+# CONFIG_DM_MMC is not set
|
||||
+CONFIG_DM_SERIAL=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_DM_SPI_FLASH=y
|
||||
+CONFIG_HUSH_PARSER=y
|
||||
+# CONFIG_PARTITION_UUIDS is not set
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+# CONFIG_LED is not set
|
||||
+# CONFIG_LZ4 is not set
|
||||
+CONFIG_VERSION_VARIABLE=y
|
||||
+CONFIG_NETCONSOLE=y
|
||||
+CONFIG_REGMAP=y
|
||||
+CONFIG_SYSCON=y
|
||||
+CONFIG_CLK=y
|
||||
+CONFIG_PHY=y
|
||||
+CONFIG_PHY_FIXED=y
|
||||
+CONFIG_PHYLIB_10G=y
|
||||
+CONFIG_PHY_AQUANTIA=y
|
||||
+CONFIG_PHY_ADDR_ENABLE=y
|
||||
+CONFIG_PHY_ADDR=8
|
||||
+CONFIG_MEDIATEK_ETH=y
|
||||
+CONFIG_MTD=y
|
||||
+# CONFIG_MMC is not set
|
||||
+CONFIG_PINCTRL=y
|
||||
+CONFIG_PINCONF=y
|
||||
+CONFIG_PINCTRL_MT7622=y
|
||||
+CONFIG_POWER_DOMAIN=y
|
||||
+CONFIG_PRE_CONSOLE_BUFFER=y
|
||||
+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
|
||||
+CONFIG_MTK_POWER_DOMAIN=y
|
||||
+CONFIG_RAM=y
|
||||
+CONFIG_MTK_SERIAL=y
|
||||
+CONFIG_SPI=y
|
||||
+CONFIG_MTK_SNFI_SPI=y
|
||||
+CONFIG_MTK_SNOR=y
|
||||
+CONFIG_SYSRESET_WATCHDOG=y
|
||||
+CONFIG_WDT_MTK=y
|
||||
+CONFIG_HEXDUMP=y
|
||||
+CONFIG_RANDOM_UUID=y
|
||||
+CONFIG_REGEX=y
|
||||
+CONFIG_SPI_FLASH=y
|
||||
+CONFIG_SPI_FLASH_BAR=y
|
||||
+CONFIG_SPI_FLASH_MTD=y
|
||||
+CONFIG_SPI_FLASH_UNLOCK_ALL=y
|
||||
+CONFIG_SPI_FLASH_EON=y
|
||||
+CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
+CONFIG_SPI_FLASH_MACRONIX=y
|
||||
+CONFIG_SPI_FLASH_SPANSION=y
|
||||
+CONFIG_SPI_FLASH_STMICRO=y
|
||||
+CONFIG_SPI_FLASH_SST=y
|
||||
+CONFIG_SPI_FLASH_WINBOND=y
|
||||
+CONFIG_SPI_FLASH_XMC=y
|
||||
+CONFIG_SPI_FLASH_USE_4K_SECTORS=y
|
||||
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
|
||||
+CONFIG_USE_IPADDR=y
|
||||
+CONFIG_IPADDR="192.168.1.1"
|
||||
+CONFIG_USE_SERVERIP=y
|
||||
+CONFIG_SERVERIP="192.168.1.254"
|
||||
--- /dev/null
|
||||
+++ b/configs/mt7622_ubnt_unifi-6-lr-v3_defconfig
|
||||
@@ -0,0 +1,146 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_POSITION_INDEPENDENT=y
|
||||
+CONFIG_ARCH_MEDIATEK=y
|
||||
+CONFIG_TARGET_MT7622=y
|
||||
+CONFIG_TEXT_BASE=0x41e00000
|
||||
+CONFIG_SYS_MALLOC_F_LEN=0x4000
|
||||
+CONFIG_SYS_LOAD_ADDR=0x40080000
|
||||
+CONFIG_USE_DEFAULT_ENV_FILE=y
|
||||
+CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)"
|
||||
+CONFIG_ENV_IS_IN_MTD=y
|
||||
+CONFIG_ENV_MTD_NAME="nor0"
|
||||
+CONFIG_ENV_SIZE_REDUND=0x4000
|
||||
+CONFIG_ENV_SIZE=0x4000
|
||||
+CONFIG_ENV_OFFSET=0xc0000
|
||||
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
+CONFIG_BOARD_LATE_INIT=y
|
||||
+CONFIG_RESET_BUTTON_SETTLE_DELAY=400
|
||||
+CONFIG_BOOTP_SEND_HOSTNAME=y
|
||||
+CONFIG_DEFAULT_ENV_FILE="ubnt_unifi-6-lr_env"
|
||||
+CONFIG_DEBUG_UART_BASE=0x11002000
|
||||
+CONFIG_DEBUG_UART_CLOCK=25000000
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr-v3"
|
||||
+CONFIG_DEBUG_UART=y
|
||||
+CONFIG_SMBIOS_PRODUCT_NAME=""
|
||||
+CONFIG_AUTOBOOT_KEYED=y
|
||||
+CONFIG_BOOTDELAY=30
|
||||
+CONFIG_AUTOBOOT_MENU_SHOW=y
|
||||
+CONFIG_CFB_CONSOLE_ANSI=y
|
||||
+CONFIG_BUTTON=y
|
||||
+CONFIG_BUTTON_GPIO=y
|
||||
+CONFIG_GPIO_HOG=y
|
||||
+CONFIG_CMD_ENV_FLAGS=y
|
||||
+CONFIG_FIT=y
|
||||
+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
|
||||
+CONFIG_LOGLEVEL=7
|
||||
+CONFIG_LOG=y
|
||||
+CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr-v3"
|
||||
+CONFIG_SYS_PROMPT="MT7622> "
|
||||
+# CONFIG_LEGACY_IMAGE_FORMAT is not set
|
||||
+# CONFIG_BOOTM_PLAN9 is not set
|
||||
+# CONFIG_BOOTM_RTEMS is not set
|
||||
+# CONFIG_BOOTM_VXWORKS is not set
|
||||
+# CONFIG_EFI is not set
|
||||
+# CONFIG_EFI_LOADER is not set
|
||||
+CONFIG_CMD_BOOTMENU=y
|
||||
+# CONFIG_CMD_BOOTEFI is not set
|
||||
+CONFIG_CMD_BOOTP=y
|
||||
+CONFIG_CMD_BUTTON=y
|
||||
+CONFIG_CMD_CDP=y
|
||||
+CONFIG_CMD_DHCP=y
|
||||
+CONFIG_CMD_DNS=y
|
||||
+CONFIG_CMD_ECHO=y
|
||||
+# CONFIG_CMD_ELF is not set
|
||||
+# CONFIG_CMD_BOOTEFI_BOOTMGR is not set
|
||||
+CONFIG_CMD_ENV_READMEM=y
|
||||
+CONFIG_CMD_ERASEENV=y
|
||||
+CONFIG_CMD_GPIO=y
|
||||
+CONFIG_CMD_HASH=y
|
||||
+CONFIG_CMD_ITEST=y
|
||||
+CONFIG_CMD_LED=y
|
||||
+CONFIG_CMD_LINK_LOCAL=y
|
||||
+# CONFIG_CMD_MBR is not set
|
||||
+CONFIG_CMD_MTD=y
|
||||
+CONFIG_CMD_MTDPARTS=y
|
||||
+# CONFIG_CMD_PCI is not set
|
||||
+CONFIG_CMD_SF_TEST=y
|
||||
+CONFIG_CMD_PING=y
|
||||
+CONFIG_CMD_PXE=y
|
||||
+CONFIG_CMD_SMC=y
|
||||
+CONFIG_CMD_TFTPBOOT=y
|
||||
+CONFIG_CMD_TFTPSRV=y
|
||||
+# CONFIG_CMD_UNLZ4 is not set
|
||||
+CONFIG_CMD_ASKENV=y
|
||||
+CONFIG_CMD_PSTORE=y
|
||||
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
|
||||
+CONFIG_CMD_RARP=y
|
||||
+CONFIG_CMD_SETEXPR=y
|
||||
+CONFIG_CMD_SLEEP=y
|
||||
+CONFIG_CMD_SOURCE=y
|
||||
+CONFIG_CMD_UUID=y
|
||||
+CONFIG_DISPLAY_CPUINFO=y
|
||||
+CONFIG_DM_ETH=y
|
||||
+CONFIG_DM_ETH_PHY=y
|
||||
+CONFIG_DM_GPIO=y
|
||||
+CONFIG_DM_MDIO=y
|
||||
+CONFIG_DM_MTD=y
|
||||
+CONFIG_DM_REGULATOR=y
|
||||
+CONFIG_DM_REGULATOR_FIXED=y
|
||||
+CONFIG_DM_REGULATOR_GPIO=y
|
||||
+# CONFIG_DM_MMC is not set
|
||||
+CONFIG_DM_SERIAL=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_DM_SPI_FLASH=y
|
||||
+CONFIG_HUSH_PARSER=y
|
||||
+# CONFIG_PARTITION_UUIDS is not set
|
||||
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
+# CONFIG_LED is not set
|
||||
+# CONFIG_LZ4 is not set
|
||||
+CONFIG_VERSION_VARIABLE=y
|
||||
+CONFIG_NETCONSOLE=y
|
||||
+CONFIG_REGMAP=y
|
||||
+CONFIG_SYSCON=y
|
||||
+CONFIG_CLK=y
|
||||
+CONFIG_PHY=y
|
||||
+CONFIG_PHY_FIXED=y
|
||||
+CONFIG_PHY_REALTEK=y
|
||||
+CONFIG_PHY_ADDR_ENABLE=y
|
||||
+CONFIG_PHY_ADDR=0
|
||||
+CONFIG_MEDIATEK_ETH=y
|
||||
+CONFIG_MTD=y
|
||||
+# CONFIG_MMC is not set
|
||||
+CONFIG_PINCTRL=y
|
||||
+CONFIG_PINCONF=y
|
||||
+CONFIG_PINCTRL_MT7622=y
|
||||
+CONFIG_POWER_DOMAIN=y
|
||||
+CONFIG_PRE_CONSOLE_BUFFER=y
|
||||
+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
|
||||
+CONFIG_MTK_POWER_DOMAIN=y
|
||||
+CONFIG_RAM=y
|
||||
+CONFIG_MTK_SERIAL=y
|
||||
+CONFIG_SPI=y
|
||||
+CONFIG_MTK_SNFI_SPI=y
|
||||
+CONFIG_MTK_SNOR=y
|
||||
+CONFIG_SYSRESET_WATCHDOG=y
|
||||
+CONFIG_WDT_MTK=y
|
||||
+CONFIG_HEXDUMP=y
|
||||
+CONFIG_RANDOM_UUID=y
|
||||
+CONFIG_REGEX=y
|
||||
+CONFIG_SPI_FLASH=y
|
||||
+CONFIG_SPI_FLASH_BAR=y
|
||||
+CONFIG_SPI_FLASH_MTD=y
|
||||
+CONFIG_SPI_FLASH_UNLOCK_ALL=y
|
||||
+CONFIG_SPI_FLASH_EON=y
|
||||
+CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
+CONFIG_SPI_FLASH_MACRONIX=y
|
||||
+CONFIG_SPI_FLASH_SPANSION=y
|
||||
+CONFIG_SPI_FLASH_STMICRO=y
|
||||
+CONFIG_SPI_FLASH_SST=y
|
||||
+CONFIG_SPI_FLASH_WINBOND=y
|
||||
+CONFIG_SPI_FLASH_XMC=y
|
||||
+CONFIG_SPI_FLASH_USE_4K_SECTORS=y
|
||||
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
|
||||
+CONFIG_USE_IPADDR=y
|
||||
+CONFIG_IPADDR="192.168.1.1"
|
||||
+CONFIG_USE_SERVERIP=y
|
||||
+CONFIG_SERVERIP="192.168.1.254"
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr.dts
|
||||
@@ -0,0 +1,193 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
|
@ -344,13 +643,210 @@
|
|||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr-v3.dts
|
||||
@@ -0,0 +1,193 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Copyright (c) 2019 MediaTek Inc.
|
||||
+ * Author: Sam Shih <sam.shih@mediatek.com>
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include <dt-bindings/input/linux-event-codes.h>
|
||||
+#include "mt7622.dtsi"
|
||||
+#include "mt7622-u-boot.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ model = "mt7622-ubnt-unifi-6-lr-v3";
|
||||
+ compatible = "mediatek,mt7622", "ubnt,unifi-6-lr-v3";
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = &uart0;
|
||||
+ tick-timer = &timer0;
|
||||
+ };
|
||||
+
|
||||
+ memory@40000000 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x40000000 0x20000000>;
|
||||
+ };
|
||||
+
|
||||
+ aliases {
|
||||
+ spi0 = &snor;
|
||||
+ };
|
||||
+
|
||||
+ gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ reset {
|
||||
+ label = "reset";
|
||||
+ gpios = <&gpio 62 GPIO_ACTIVE_LOW>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ memory@40000000 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x40000000 0x20000000>;
|
||||
+ };
|
||||
+
|
||||
+ reg_1p8v: regulator-1p8v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "fixed-1.8V";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_3p3v: regulator-3p3v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "fixed-3.3V";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_5v: regulator-5v {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "fixed-5V";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pcie {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pcie0_pins>, <&pcie1_pins>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ pcie@0,0 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ pcie@1,0 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pinctrl {
|
||||
+ eth_pins: eth-pins {
|
||||
+ mux {
|
||||
+ function = "eth";
|
||||
+ groups = "mdc_mdio", "rgmii_via_gmac2";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie0_pins: pcie0-pins {
|
||||
+ mux {
|
||||
+ function = "pcie";
|
||||
+ groups = "pcie0_pad_perst",
|
||||
+ "pcie0_1_waken",
|
||||
+ "pcie0_1_clkreq";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ pcie1_pins: pcie1-pins {
|
||||
+ mux {
|
||||
+ function = "pcie";
|
||||
+ groups = "pcie1_pad_perst",
|
||||
+ "pcie1_0_waken",
|
||||
+ "pcie1_0_clkreq";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ snfi_pins: snfi-pins {
|
||||
+ mux {
|
||||
+ function = "flash";
|
||||
+ groups = "snfi";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ snor_pins: snor-pins {
|
||||
+ mux {
|
||||
+ function = "flash";
|
||||
+ groups = "spi_nor";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ uart0_pins: uart0 {
|
||||
+ mux {
|
||||
+ function = "uart";
|
||||
+ groups = "uart0_0_tx_rx" ;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ watchdog_pins: watchdog-default {
|
||||
+ mux {
|
||||
+ function = "watchdog";
|
||||
+ groups = "watchdog";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&snor {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&snor_pins>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ spi-flash@0 {
|
||||
+ compatible = "jedec,spi-nor";
|
||||
+ reg = <0>;
|
||||
+ spi-tx-bus-width = <1>;
|
||||
+ spi-rx-bus-width = <4>;
|
||||
+ u-boot,dm-pre-reloc;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ mediatek,force-highspeed;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&watchdog {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&watchdog_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+ð {
|
||||
+ status = "okay";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <ð_pins>;
|
||||
+
|
||||
+ mediatek,gmac-id = <0>;
|
||||
+ phy-mode = "sgmii";
|
||||
+ phy-handle = <&gphy>;
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <2500>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+
|
||||
+ mdio-bus {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ gphy: ethernet-phy@0 {
|
||||
+ /* RealTek RTL8211FS */
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <0x0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -1306,6 +1306,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
|
||||
@@ -1306,6 +1306,8 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
|
||||
mt7623a-unielec-u7623-02-emmc.dtb \
|
||||
mt7622-bananapi-bpi-r64.dtb \
|
||||
mt7622-linksys-e8450-ubi.dtb \
|
||||
+ mt7622-ubnt-unifi-6-lr.dtb \
|
||||
+ mt7622-ubnt-unifi-6-lr-v3.dtb \
|
||||
mt7623n-bananapi-bpi-r2.dtb \
|
||||
mt7629-rfb.dtb \
|
||||
mt7981-rfb.dtb \
|
||||
|
@ -407,6 +903,112 @@
|
|||
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first
|
||||
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
|
||||
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [33m$ver[0m"
|
||||
--- /dev/null
|
||||
+++ b/ubnt_unifi-6-lr-v2_env
|
||||
@@ -0,0 +1,50 @@
|
||||
+ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory
|
||||
+ipaddr=192.168.1.1
|
||||
+serverip=192.168.1.254
|
||||
+loadaddr=0x48000000
|
||||
+bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi
|
||||
+bootdelay=0
|
||||
+bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-initramfs-recovery.itb
|
||||
+bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-preloader.bin
|
||||
+bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-bl31-uboot.fip
|
||||
+bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-squashfs-sysupgrade.itb
|
||||
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
||||
+bootmenu_default=0
|
||||
+bootmenu_delay=0
|
||||
+bootmenu_title= [0;34m( ( ( [1;39mOpenWrt[0;34m ) ) )[0m
|
||||
+bootmenu_0=Initialize environment.=run _firstboot
|
||||
+bootmenu_0d=Run default boot command.=run boot_default
|
||||
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
|
||||
+bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return
|
||||
+bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return
|
||||
+bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
|
||||
+bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
|
||||
+bootmenu_6=[31mLoad BL31+U-Boot FIP via TFTP then write to flash.[0m=run boot_tftp_write_fip ; run bootmenu_confirm_return
|
||||
+bootmenu_7=[31mLoad BL2 preloader via TFTP then write to flash.[0m=run boot_tftp_write_preloader ; run bootmenu_confirm_return
|
||||
+bootmenu_8=Reboot.=reset
|
||||
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
|
||||
+boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu
|
||||
+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever
|
||||
+boot_production=run nor_read_production && bootm $loadaddr
|
||||
+boot_recovery=run nor_read_recovery ; bootm $loadaddr
|
||||
+boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip
|
||||
+boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader
|
||||
+boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done
|
||||
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi
|
||||
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi
|
||||
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr
|
||||
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip
|
||||
+boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader
|
||||
+boot_nor=run boot_production ; run boot_recovery
|
||||
+boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000
|
||||
+boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000
|
||||
+reset_factory=mtd erase nor0 0xc0000 0x10000 && reset
|
||||
+nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size
|
||||
+nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size
|
||||
+nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000
|
||||
+nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize
|
||||
+nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize
|
||||
+_init_env=setenv _init_env ; saveenv
|
||||
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first
|
||||
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
|
||||
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [33m$ver[0m"--- /dev/null
|
||||
--- /dev/null
|
||||
+++ b/ubnt_unifi-6-lr-v3_env
|
||||
@@ -0,0 +1,50 @@
|
||||
+ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory
|
||||
+ipaddr=192.168.1.1
|
||||
+serverip=192.168.1.254
|
||||
+loadaddr=0x48000000
|
||||
+bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi
|
||||
+bootdelay=0
|
||||
+bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-initramfs-recovery.itb
|
||||
+bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-preloader.bin
|
||||
+bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-bl31-uboot.fip
|
||||
+bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-squashfs-sysupgrade.itb
|
||||
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
|
||||
+bootmenu_default=0
|
||||
+bootmenu_delay=0
|
||||
+bootmenu_title= [0;34m( ( ( [1;39mOpenWrt[0;34m ) ) )[0m
|
||||
+bootmenu_0=Initialize environment.=run _firstboot
|
||||
+bootmenu_0d=Run default boot command.=run boot_default
|
||||
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
|
||||
+bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return
|
||||
+bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return
|
||||
+bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
|
||||
+bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
|
||||
+bootmenu_6=[31mLoad BL31+U-Boot FIP via TFTP then write to flash.[0m=run boot_tftp_write_fip ; run bootmenu_confirm_return
|
||||
+bootmenu_7=[31mLoad BL2 preloader via TFTP then write to flash.[0m=run boot_tftp_write_preloader ; run bootmenu_confirm_return
|
||||
+bootmenu_8=Reboot.=reset
|
||||
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
|
||||
+boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu
|
||||
+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever
|
||||
+boot_production=run nor_read_production && bootm $loadaddr
|
||||
+boot_recovery=run nor_read_recovery ; bootm $loadaddr
|
||||
+boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip
|
||||
+boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader
|
||||
+boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done
|
||||
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi
|
||||
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi
|
||||
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr
|
||||
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip
|
||||
+boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader
|
||||
+boot_nor=run boot_production ; run boot_recovery
|
||||
+boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000
|
||||
+boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000
|
||||
+reset_factory=mtd erase nor0 0xc0000 0x10000 && reset
|
||||
+nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size
|
||||
+nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size
|
||||
+nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000
|
||||
+nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize
|
||||
+nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize
|
||||
+_init_env=setenv _init_env ; saveenv
|
||||
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first
|
||||
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
|
||||
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [33m$ver[0m"
|
||||
--- a/common/board_r.c
|
||||
+++ b/common/board_r.c
|
||||
@@ -66,6 +66,7 @@
|
||||
|
|
|
@ -66,6 +66,13 @@ define U-Boot/roc-cc-rk3328
|
|||
firefly_roc-rk3328-cc
|
||||
endef
|
||||
|
||||
define U-Boot/rock64-rk3328
|
||||
$(U-Boot/rk3328/Default)
|
||||
NAME:=Rock64
|
||||
BUILD_DEVICES:= \
|
||||
pine64_rock64
|
||||
endef
|
||||
|
||||
# RK3399 boards
|
||||
|
||||
define U-Boot/rk3399/Default
|
||||
|
@ -111,7 +118,8 @@ UBOOT_TARGETS := \
|
|||
nanopi-r2s-rk3328 \
|
||||
orangepi-r1-plus-rk3328 \
|
||||
orangepi-r1-plus-lts-rk3328 \
|
||||
roc-cc-rk3328
|
||||
roc-cc-rk3328 \
|
||||
rock64-rk3328
|
||||
|
||||
UBOOT_CONFIGURE_VARS += USE_PRIVATE_LIBGCC=yes
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* DO NOT MODIFY
|
||||
*
|
||||
* Declares externs for all device/uclass instances.
|
||||
* This was generated by dtoc from a .dtb (device tree binary) file.
|
||||
*/
|
||||
|
||||
#include <dm/device-internal.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
|
||||
/* driver declarations - these allow DM_DRIVER_GET() to be used */
|
||||
extern U_BOOT_DRIVER(rockchip_rk3328_cru);
|
||||
extern U_BOOT_DRIVER(rockchip_rk3328_dmc);
|
||||
extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc);
|
||||
extern U_BOOT_DRIVER(rockchip_rk3288_dw_mshc);
|
||||
extern U_BOOT_DRIVER(ns16550_serial);
|
||||
extern U_BOOT_DRIVER(rockchip_rk3328_spi);
|
||||
extern U_BOOT_DRIVER(jedec_spi_nor);
|
||||
extern U_BOOT_DRIVER(rockchip_rk3328_grf);
|
||||
|
||||
/* uclass driver declarations - needed for DM_UCLASS_DRIVER_REF() */
|
||||
extern UCLASS_DRIVER(clk);
|
||||
extern UCLASS_DRIVER(mmc);
|
||||
extern UCLASS_DRIVER(ram);
|
||||
extern UCLASS_DRIVER(serial);
|
||||
extern UCLASS_DRIVER(spi_flash);
|
||||
extern UCLASS_DRIVER(syscon);
|
|
@ -0,0 +1,219 @@
|
|||
/*
|
||||
* DO NOT MODIFY
|
||||
*
|
||||
* Declares the U_BOOT_DRIVER() records and platform data.
|
||||
* This was generated by dtoc from a .dtb (device tree binary) file.
|
||||
*/
|
||||
|
||||
/* Allow use of U_BOOT_DRVINFO() in this file */
|
||||
#define DT_PLAT_C
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <dt-structs.h>
|
||||
|
||||
/*
|
||||
* driver_info declarations, ordered by 'struct driver_info' linker_list idx:
|
||||
*
|
||||
* idx driver_info driver
|
||||
* --- -------------------- --------------------
|
||||
* 0: clock_controller_at_ff440000 rockchip_rk3328_cru
|
||||
* 1: dmc rockchip_rk3328_dmc
|
||||
* 2: mmc_at_ff500000 rockchip_rk3288_dw_mshc
|
||||
* 3: mmc_at_ff520000 rockchip_rk3288_dw_mshc
|
||||
* 4: serial_at_ff130000 ns16550_serial
|
||||
* 5: spi_at_ff190000 rockchip_rk3328_spi
|
||||
* 6: spiflash_at_0 jedec_spi_nor
|
||||
* 7: syscon_at_ff100000 rockchip_rk3328_grf
|
||||
* --- -------------------- --------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* Node /clock-controller@ff440000 index 0
|
||||
* driver rockchip_rk3328_cru parent None
|
||||
*/
|
||||
static struct dtd_rockchip_rk3328_cru dtv_clock_controller_at_ff440000 = {
|
||||
.reg = {0xff440000, 0x1000},
|
||||
.rockchip_grf = 0x3b,
|
||||
};
|
||||
U_BOOT_DRVINFO(clock_controller_at_ff440000) = {
|
||||
.name = "rockchip_rk3328_cru",
|
||||
.plat = &dtv_clock_controller_at_ff440000,
|
||||
.plat_size = sizeof(dtv_clock_controller_at_ff440000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /dmc index 1
|
||||
* driver rockchip_rk3328_dmc parent None
|
||||
*/
|
||||
static struct dtd_rockchip_rk3328_dmc dtv_dmc = {
|
||||
.reg = {0xff400000, 0x1000, 0xff780000, 0x3000, 0xff100000, 0x1000, 0xff440000, 0x1000,
|
||||
0xff720000, 0x1000, 0xff798000, 0x1000},
|
||||
.rockchip_sdram_params = {0x1, 0xc, 0x3, 0x1, 0x0, 0x0, 0x10, 0x10,
|
||||
0x10, 0x10, 0x0, 0x98899459, 0x0, 0x2e, 0x544, 0x15,
|
||||
0x432, 0xff, 0x320, 0x6, 0x1, 0x0, 0x1, 0x0,
|
||||
0x43041008, 0x64, 0x300054, 0xd0, 0x500002, 0xd4, 0x10000, 0xd8,
|
||||
0xe03, 0xdc, 0x43001a, 0xe0, 0x10000, 0xe4, 0xe0005, 0xf4,
|
||||
0xf011f, 0x100, 0xb141b11, 0x104, 0x3031a, 0x108, 0x3060809, 0x10c,
|
||||
0x606000, 0x110, 0x8020409, 0x114, 0x1010606, 0x118, 0x2020004, 0x120,
|
||||
0x404, 0x138, 0x58, 0x180, 0x900024, 0x184, 0x1400000, 0x190,
|
||||
0x7050002, 0x198, 0x5001100, 0x1a0, 0xc0400003, 0x240, 0xa020b28, 0x244,
|
||||
0x101, 0x250, 0xf00, 0x490, 0x1, 0xffffffff, 0xffffffff, 0xffffffff,
|
||||
0xffffffff, 0xffffffff, 0xffffffff, 0x4, 0xb, 0x28, 0xc, 0x2c,
|
||||
0x0, 0x30, 0x6, 0xffffffff, 0xffffffff, 0x77, 0x88, 0x79,
|
||||
0x79, 0x87, 0x97, 0x87, 0x78, 0x77, 0x78, 0x87,
|
||||
0x88, 0x87, 0x87, 0x77, 0x78, 0x78, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x78, 0x78, 0x69, 0x9, 0x77,
|
||||
0x78, 0x77, 0x78, 0x77, 0x78, 0x77, 0x78, 0x77,
|
||||
0x79, 0x9, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x69, 0x9, 0x77, 0x78, 0x77,
|
||||
0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0x9,
|
||||
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
|
||||
0x78, 0x69, 0x9, 0x77, 0x78, 0x77, 0x78, 0x77,
|
||||
0x78, 0x77, 0x78, 0x77, 0x79, 0x9, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x69,
|
||||
0x9, 0x77, 0x78, 0x77, 0x77, 0x77, 0x77, 0x77,
|
||||
0x77, 0x77, 0x79, 0x9},
|
||||
};
|
||||
U_BOOT_DRVINFO(dmc) = {
|
||||
.name = "rockchip_rk3328_dmc",
|
||||
.plat = &dtv_dmc,
|
||||
.plat_size = sizeof(dtv_dmc),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /mmc@ff500000 index 2
|
||||
* driver rockchip_rk3288_dw_mshc parent None
|
||||
*/
|
||||
static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff500000 = {
|
||||
.bus_width = 0x4,
|
||||
.cap_mmc_highspeed = true,
|
||||
.cap_sd_highspeed = true,
|
||||
.clocks = {
|
||||
{0, {317}},
|
||||
{0, {33}},
|
||||
{0, {74}},
|
||||
{0, {78}},},
|
||||
.disable_wp = true,
|
||||
.fifo_depth = 0x100,
|
||||
.interrupts = {0x0, 0xc, 0x4},
|
||||
.max_frequency = 0x8f0d180,
|
||||
.pinctrl_0 = {0x4a, 0x4b, 0x4c, 0x4d},
|
||||
.pinctrl_names = "default",
|
||||
.reg = {0xff500000, 0x4000},
|
||||
.u_boot_spl_fifo_mode = true,
|
||||
.vmmc_supply = 0x4e,
|
||||
};
|
||||
U_BOOT_DRVINFO(mmc_at_ff500000) = {
|
||||
.name = "rockchip_rk3288_dw_mshc",
|
||||
.plat = &dtv_mmc_at_ff500000,
|
||||
.plat_size = sizeof(dtv_mmc_at_ff500000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /mmc@ff520000 index 3
|
||||
* driver rockchip_rk3288_dw_mshc parent None
|
||||
*/
|
||||
static struct dtd_rockchip_rk3288_dw_mshc dtv_mmc_at_ff520000 = {
|
||||
.bus_width = 0x8,
|
||||
.cap_mmc_highspeed = true,
|
||||
.clocks = {
|
||||
{0, {319}},
|
||||
{0, {35}},
|
||||
{0, {76}},
|
||||
{0, {80}},},
|
||||
.fifo_depth = 0x100,
|
||||
.interrupts = {0x0, 0xe, 0x4},
|
||||
.max_frequency = 0x8f0d180,
|
||||
.mmc_hs200_1_8v = true,
|
||||
.non_removable = true,
|
||||
.pinctrl_0 = {0x4f, 0x50, 0x51, 0x0},
|
||||
.pinctrl_names = "default",
|
||||
.reg = {0xff520000, 0x4000},
|
||||
.u_boot_spl_fifo_mode = true,
|
||||
.vmmc_supply = 0x1e,
|
||||
.vqmmc_supply = 0x1f,
|
||||
};
|
||||
U_BOOT_DRVINFO(mmc_at_ff520000) = {
|
||||
.name = "rockchip_rk3288_dw_mshc",
|
||||
.plat = &dtv_mmc_at_ff520000,
|
||||
.plat_size = sizeof(dtv_mmc_at_ff520000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /serial@ff130000 index 4
|
||||
* driver ns16550_serial parent None
|
||||
*/
|
||||
static struct dtd_ns16550_serial dtv_serial_at_ff130000 = {
|
||||
.clock_frequency = 0x16e3600,
|
||||
.clocks = {
|
||||
{0, {40}},
|
||||
{0, {212}},},
|
||||
.dma_names = {"tx", "rx"},
|
||||
.dmas = {0x10, 0x6, 0x10, 0x7},
|
||||
.interrupts = {0x0, 0x39, 0x4},
|
||||
.pinctrl_0 = 0x27,
|
||||
.pinctrl_names = "default",
|
||||
.reg = {0xff130000, 0x100},
|
||||
.reg_io_width = 0x4,
|
||||
.reg_shift = 0x2,
|
||||
};
|
||||
U_BOOT_DRVINFO(serial_at_ff130000) = {
|
||||
.name = "ns16550_serial",
|
||||
.plat = &dtv_serial_at_ff130000,
|
||||
.plat_size = sizeof(dtv_serial_at_ff130000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/* Node /spi@ff190000 index 5 */
|
||||
static struct dtd_rockchip_rk3328_spi dtv_spi_at_ff190000 = {
|
||||
.clocks = {
|
||||
{0, {32}},
|
||||
{0, {209}},},
|
||||
.dma_names = {"tx", "rx"},
|
||||
.dmas = {0x10, 0x8, 0x10, 0x9},
|
||||
.interrupts = {0x0, 0x31, 0x4},
|
||||
.pinctrl_0 = {0x2f, 0x30, 0x31, 0x32},
|
||||
.pinctrl_names = "default",
|
||||
.reg = {0xff190000, 0x1000},
|
||||
};
|
||||
U_BOOT_DRVINFO(spi_at_ff190000) = {
|
||||
.name = "rockchip_rk3328_spi",
|
||||
.plat = &dtv_spi_at_ff190000,
|
||||
.plat_size = sizeof(dtv_spi_at_ff190000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /spi@ff190000/spiflash@0 index 6
|
||||
* driver jedec_spi_nor parent None
|
||||
*/
|
||||
static struct dtd_jedec_spi_nor dtv_spiflash_at_0 = {
|
||||
.reg = {0x0},
|
||||
.spi_max_frequency = 0x2faf080,
|
||||
};
|
||||
U_BOOT_DRVINFO(spiflash_at_0) = {
|
||||
.name = "jedec_spi_nor",
|
||||
.plat = &dtv_spiflash_at_0,
|
||||
.plat_size = sizeof(dtv_spiflash_at_0),
|
||||
.parent_idx = 5,
|
||||
};
|
||||
|
||||
/*
|
||||
* Node /syscon@ff100000 index 7
|
||||
* driver rockchip_rk3328_grf parent None
|
||||
*/
|
||||
static struct dtd_rockchip_rk3328_grf dtv_syscon_at_ff100000 = {
|
||||
.reg = {0xff100000, 0x1000},
|
||||
};
|
||||
U_BOOT_DRVINFO(syscon_at_ff100000) = {
|
||||
.name = "rockchip_rk3328_grf",
|
||||
.plat = &dtv_syscon_at_ff100000,
|
||||
.plat_size = sizeof(dtv_syscon_at_ff100000),
|
||||
.parent_idx = -1,
|
||||
};
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* DO NOT MODIFY
|
||||
*
|
||||
* Defines the structs used to hold devicetree data.
|
||||
* This was generated by dtoc from a .dtb (device tree binary) file.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <linux/libfdt.h>
|
||||
struct dtd_jedec_spi_nor {
|
||||
fdt32_t reg[1];
|
||||
fdt32_t spi_max_frequency;
|
||||
};
|
||||
struct dtd_ns16550_serial {
|
||||
fdt32_t clock_frequency;
|
||||
struct phandle_1_arg clocks[2];
|
||||
const char * dma_names[2];
|
||||
fdt32_t dmas[4];
|
||||
fdt32_t interrupts[3];
|
||||
fdt32_t pinctrl_0;
|
||||
const char * pinctrl_names;
|
||||
fdt64_t reg[2];
|
||||
fdt32_t reg_io_width;
|
||||
fdt32_t reg_shift;
|
||||
};
|
||||
struct dtd_rockchip_rk3288_dw_mshc {
|
||||
fdt32_t bus_width;
|
||||
bool cap_mmc_highspeed;
|
||||
bool cap_sd_highspeed;
|
||||
struct phandle_1_arg clocks[4];
|
||||
bool disable_wp;
|
||||
fdt32_t fifo_depth;
|
||||
fdt32_t interrupts[3];
|
||||
fdt32_t max_frequency;
|
||||
bool mmc_hs200_1_8v;
|
||||
bool non_removable;
|
||||
fdt32_t pinctrl_0[4];
|
||||
const char * pinctrl_names;
|
||||
fdt64_t reg[2];
|
||||
bool u_boot_spl_fifo_mode;
|
||||
fdt32_t vmmc_supply;
|
||||
fdt32_t vqmmc_supply;
|
||||
};
|
||||
struct dtd_rockchip_rk3328_cru {
|
||||
fdt64_t reg[2];
|
||||
fdt32_t rockchip_grf;
|
||||
};
|
||||
struct dtd_rockchip_rk3328_dmc {
|
||||
fdt64_t reg[12];
|
||||
fdt32_t rockchip_sdram_params[196];
|
||||
};
|
||||
struct dtd_rockchip_rk3328_grf {
|
||||
fdt64_t reg[2];
|
||||
};
|
||||
struct dtd_rockchip_rk3328_spi {
|
||||
struct phandle_1_arg clocks[2];
|
||||
const char * dma_names[2];
|
||||
fdt32_t dmas[4];
|
||||
fdt32_t interrupts[3];
|
||||
fdt32_t pinctrl_0[4];
|
||||
const char * pinctrl_names;
|
||||
fdt64_t reg[2];
|
||||
};
|
|
@ -9,9 +9,9 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_VERSION:=2020.07
|
||||
PKG_VERSION:=2023.04
|
||||
|
||||
PKG_HASH:=c1f5bf9ee6bb6e648edbf19ce2ca9452f614b08a9f886f1a566aa42e8cf05f6a
|
||||
PKG_HASH:=e31cac91545ff41b71cec5d8c22afd695645cd6e2a442ccdacacd60534069341
|
||||
|
||||
PKG_MAINTAINER:=Zoltan HERPAI <wigyori@uid0.hu>
|
||||
|
||||
|
@ -392,7 +392,7 @@ UBOOT_TARGETS := \
|
|||
UBOOT_CONFIGURE_VARS += USE_PRIVATE_LIBGCC=yes
|
||||
|
||||
UBOOT_MAKE_FLAGS += \
|
||||
BL31=$(STAGING_DIR_IMAGE)/bl31_sunxi-$(ATF).bin
|
||||
BL31=$(STAGING_DIR_IMAGE)/bl31_sunxi-$(ATF).bin SCP=/dev/null
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
||||
|
|
|
@ -1,375 +0,0 @@
|
|||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -475,6 +475,7 @@ dtb-$(CONFIG_MACH_SUN6I) += \
|
||||
sun6i-a31-m9.dtb \
|
||||
sun6i-a31-mele-a1000g-quad.dtb \
|
||||
sun6i-a31-mixtile-loftq.dtb \
|
||||
+ sun6i-a31-pangolin.dtb \
|
||||
sun6i-a31s-colorfly-e708-q1.dtb \
|
||||
sun6i-a31s-cs908.dtb \
|
||||
sun6i-a31s-inet-q972.dtb \
|
||||
--- a/arch/arm/dts/sun6i-a31.dtsi
|
||||
+++ b/arch/arm/dts/sun6i-a31.dtsi
|
||||
@@ -641,6 +641,11 @@
|
||||
function = "lcd0";
|
||||
};
|
||||
|
||||
+ i2c3_pins_a: i2c3@0 {
|
||||
+ allwinner,pins = "PB5", "PB6";
|
||||
+ allwinner,function = "i2c3";
|
||||
+ };
|
||||
+
|
||||
mmc0_pins_a: mmc0@0 {
|
||||
pins = "PF0", "PF1", "PF2",
|
||||
"PF3", "PF4", "PF5";
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun6i-a31-pangolin.dts
|
||||
@@ -0,0 +1,292 @@
|
||||
+/*
|
||||
+ * Copyright 2015, Theobroma Systems Design und Consulting GmbH
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "sun6i-a31.dtsi"
|
||||
+#include "sunxi-common-regulators.dtsi"
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "Theobroma Systems A31 Pangolin";
|
||||
+ compatible = "tsd,a31-pangolin", "allwinner,sun6i-a31";
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart0;
|
||||
+ serial2 = &uart2;
|
||||
+ spi0 = &spi0;
|
||||
+ spi1 = &spi1;
|
||||
+ spi2 = &spi2;
|
||||
+ spi3 = &spi3;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial2:115200n8";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ehci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gmac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac_pins_rgmii_a>;
|
||||
+ phy = <&phy1>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ snps,reset-gpio = <&pio 0 7 GPIO_ACTIVE_LOW>;
|
||||
+ snps,reset-active-low;
|
||||
+ snps,reset-delays-us = <0 10000 30000>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ phy1: ethernet-phy@4 {
|
||||
+ reg = <4>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c1_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c2_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c3_pins_a>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ rtc_twi: rtc@6f {
|
||||
+ compatible = "isil,isl1208";
|
||||
+ reg = <0x6f>;
|
||||
+ };
|
||||
+ fan: fan@18 {
|
||||
+ compatible = "ti,amc6821";
|
||||
+ reg = <0x18>;
|
||||
+ cooling-min-state = <0>;
|
||||
+ cooling-max-state = <9>;
|
||||
+ #cooling-cells = <2>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ flash: flash@0 {
|
||||
+ compatible = "spansion,m25p40";
|
||||
+ spi-max-frequency = <16000000>;
|
||||
+ spi-cpol;
|
||||
+ spi-cpha;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&spi1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ir {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&ir_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_pangolin>;
|
||||
+ vmmc-supply = <®_vcc3v0>;
|
||||
+ bus-width = <4>;
|
||||
+ cd-gpios = <&pio 2 19 GPIO_ACTIVE_LOW>; /* PC19 */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc0_pins_a {
|
||||
+ /* external pull-ups missing for some pins */
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
+};
|
||||
+
|
||||
+&mmc2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc2_pins_a>;
|
||||
+ vmmc-supply = <®_vcc3v0>;
|
||||
+ bus-width = <8>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pio {
|
||||
+ mmc0_cd_pin_pangolin: mmc0_cd_pin@0 {
|
||||
+ allwinner,pins = "PC19";
|
||||
+ allwinner,function = "gpio_in";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
|
||||
+ };
|
||||
+
|
||||
+ leds_pins_pangolin: led_pins@0 {
|
||||
+ allwinner,pins = "PH7", "PC16";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_20_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
+ };
|
||||
+
|
||||
+ mmc2_pins_a: mmc2@0 {
|
||||
+ allwinner,pins = "PC6","PC7","PC8","PC9","PC10","PC11",
|
||||
+ "PC12","PC13","PC14","PC15";
|
||||
+ allwinner,function = "mmc2";
|
||||
+ allwinner,drive = <SUN4I_PINCTRL_30_MA>;
|
||||
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&p2wi {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ axp221: pmic@68 {
|
||||
+ compatible = "x-powers,axp221";
|
||||
+ reg = <0x68>;
|
||||
+ interrupt-parent = <&nmi_intc>;
|
||||
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+ dcdc1-supply = <&vcc_3v0>;
|
||||
+ dcdc5-supply = <&vcc_dram>;
|
||||
+
|
||||
+ regulators {
|
||||
+ x-powers,dcdc-freq = <3000>;
|
||||
+
|
||||
+ vcc_3v0: dcdc1 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "vcc-3v0";
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpu: dcdc2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <700000>;
|
||||
+ regulator-max-microvolt = <1320000>;
|
||||
+ regulator-name = "vdd-cpu";
|
||||
+ };
|
||||
+
|
||||
+ vdd_gpu: dcdc3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <700000>;
|
||||
+ regulator-max-microvolt = <1320000>;
|
||||
+ regulator-name = "vdd-gpu";
|
||||
+ };
|
||||
+
|
||||
+ vdd_sys_dll: dcdc4 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1100000>;
|
||||
+ regulator-max-microvolt = <1100000>;
|
||||
+ regulator-name = "vdd-sys-dll";
|
||||
+ };
|
||||
+
|
||||
+ vcc_dram: dcdc5 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1500000>;
|
||||
+ regulator-max-microvolt = <1500000>;
|
||||
+ regulator-name = "vcc-dram";
|
||||
+ };
|
||||
+
|
||||
+ vcc_wifi: aldo1 {
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vcc_wifi";
|
||||
+ };
|
||||
+
|
||||
+ avcc: aldo3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "avcc";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb1_vbus_pin_a {
|
||||
+ allwinner,pins = "PD23";
|
||||
+};
|
||||
+
|
||||
+®_usb1_vbus {
|
||||
+ gpio = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD 23 */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbphy {
|
||||
+ status = "okay";
|
||||
+ usb1_vbus-supply = <®_usb1_vbus>;
|
||||
+};
|
||||
--- /dev/null
|
||||
+++ b/configs/pangolin_defconfig
|
||||
@@ -0,0 +1,36 @@
|
||||
+CONFIG_SUNXI_PANGOLIN=y
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_SYS_EXTRA_OPTIONS="USB_EHCI,SUNXI_GMAC,RGMII"
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31-pangolin"
|
||||
+CONFIG_VIDEO_VGA_VIA_LCD=y
|
||||
+CONFIG_VIDEO_VGA_EXTERNAL_DAC_EN="PH25"
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_MACH_SUN6I=y
|
||||
+CONFIG_DRAM_CHANNELS=1
|
||||
+CONFIG_DRAM_CLK=360
|
||||
+CONFIG_DRAM_ZQ=70
|
||||
+CONFIG_AXP_DCDC1_VOLT=3300
|
||||
+CONFIG_AXP_ALDO1_VOLT=0
|
||||
+CONFIG_AXP_ALDO2_VOLT=1800
|
||||
+CONFIG_AXP_ALDO3_VOLT=3000
|
||||
+CONFIG_AXP_DLDO4_VOLT=3300
|
||||
+CONFIG_AXP_ELDO1_VOLT=1200
|
||||
+CONFIG_AXP_ELDO2_VOLT=2500
|
||||
+CONFIG_AXP_ELDO3_VOLT=3300
|
||||
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
+CONFIG_CONS_INDEX=3
|
||||
+# Vbus gpio for usb1
|
||||
+CONFIG_USB1_VBUS_PIN=""
|
||||
+# No Vbus gpio for usb2
|
||||
+CONFIG_USB2_VBUS_PIN=""
|
||||
+CONFIG_USB=y
|
||||
+CONFIG_DM_USB=y
|
||||
+CONFIG_USB_EHCI=y
|
||||
+CONFIG_USB_KEYBOARD=y
|
||||
+CONFIG_DM_ETH=y
|
||||
+CONFIG_CMD_IMLS=n
|
||||
+CONFIG_ETH_DESIGNWARE=y
|
||||
+CONFIG_DM_SPI=y
|
||||
+CONFIG_DM_SPI_FLASH=y
|
||||
+CONFIG_SUNXI_SPI=y
|
||||
--- a/arch/arm/mach-sunxi/Kconfig
|
||||
+++ b/arch/arm/mach-sunxi/Kconfig
|
||||
@@ -896,6 +896,14 @@ config VIDEO_LCD_PANEL_I2C_SCL
|
||||
Set the SCL pin for the LCD i2c interface. This takes a string in the
|
||||
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
|
||||
|
||||
+choice
|
||||
+ prompt "Sunxi Board Variant"
|
||||
+ optional
|
||||
+
|
||||
+config SUNXI_PANGOLIN
|
||||
+ bool "Theobroma A31 uQ7 Board"
|
||||
+
|
||||
+endchoice
|
||||
|
||||
# Note only one of these may be selected at a time! But hidden choices are
|
||||
# not supported by Kconfig
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
--- a/configs/A20-OLinuXino-Lime2_defconfig
|
||||
+++ b/configs/A20-OLinuXino-Lime2_defconfig
|
||||
@@ -23,6 +23,7 @@ CONFIG_ETH_DESIGNWARE=y
|
||||
@@ -26,6 +26,7 @@ CONFIG_ETH_DESIGNWARE=y
|
||||
CONFIG_RGMII=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SUN7I_GMAC=y
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
--- a/configs/A20-OLinuXino-Lime2-eMMC_defconfig
|
||||
+++ b/configs/A20-OLinuXino-Lime2-eMMC_defconfig
|
||||
@@ -8,6 +8,8 @@ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
CONFIG_USB0_VBUS_PIN="PC17"
|
||||
CONFIG_USB0_VBUS_DET="PH5"
|
||||
CONFIG_I2C1_ENABLE=y
|
||||
+CONFIG_PHY_MICREL=y
|
||||
+CONFIG_PHY_MICREL_KSZ90X1=y
|
||||
CONFIG_SATAPWR="PC3"
|
||||
CONFIG_SPL_SPI_SUNXI=y
|
||||
CONFIG_AHCI=y
|
||||
--- a/configs/A20-OLinuXino-Lime2_defconfig
|
||||
+++ b/configs/A20-OLinuXino-Lime2_defconfig
|
||||
@@ -7,6 +7,8 @@ CONFIG_MMC0_CD_PIN="PH1"
|
||||
CONFIG_USB0_VBUS_PIN="PC17"
|
||||
CONFIG_USB0_VBUS_DET="PH5"
|
||||
CONFIG_I2C1_ENABLE=y
|
||||
+CONFIG_PHY_MICREL=y
|
||||
+CONFIG_PHY_MICREL_KSZ90X1=y
|
||||
CONFIG_SATAPWR="PC3"
|
||||
CONFIG_AHCI=y
|
||||
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
--- a/drivers/net/phy/micrel_ksz90x1.c
|
||||
+++ b/drivers/net/phy/micrel_ksz90x1.c
|
||||
@@ -14,6 +14,8 @@
|
||||
#include <errno.h>
|
||||
#include <micrel.h>
|
||||
#include <phy.h>
|
||||
+#include <asm/io.h>
|
||||
+#include <asm/arch/clock.h>
|
||||
|
||||
/*
|
||||
* KSZ9021 - KSZ9031 common
|
||||
@@ -344,6 +346,10 @@ static int ksz9031_phy_extwrite(struct p
|
||||
static int ksz9031_config(struct phy_device *phydev)
|
||||
{
|
||||
int ret;
|
||||
+ struct sunxi_ccm_reg *const ccm =
|
||||
+ (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
|
||||
+
|
||||
+ setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_DELAY(4));
|
||||
|
||||
ret = ksz9031_of_config(phydev);
|
||||
if (ret)
|
|
@ -14,7 +14,7 @@ More specifically, the following settings are now used:
|
|||
|
||||
--- a/arch/arm/mach-sunxi/clock_sun6i.c
|
||||
+++ b/arch/arm/mach-sunxi/clock_sun6i.c
|
||||
@@ -114,11 +114,12 @@ void clock_set_pll1(unsigned int clk)
|
||||
@@ -131,11 +131,12 @@ void clock_set_pll1(unsigned int clk)
|
||||
struct sunxi_ccm_reg * const ccm =
|
||||
(struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
|
||||
const int p = 0;
|
||||
|
|
|
@ -18,7 +18,7 @@ required setting for the PLL LDO is 1.37v as per the A31 manual.
|
|||
|
||||
--- a/arch/arm/mach-sunxi/clock_sun6i.c
|
||||
+++ b/arch/arm/mach-sunxi/clock_sun6i.c
|
||||
@@ -27,13 +27,26 @@ void clock_init_safe(void)
|
||||
@@ -28,13 +28,26 @@ void clock_init_safe(void)
|
||||
struct sunxi_prcm_reg * const prcm =
|
||||
(struct sunxi_prcm_reg *)SUNXI_PRCM_BASE;
|
||||
|
||||
|
@ -47,8 +47,8 @@ required setting for the PLL LDO is 1.37v as per the A31 manual.
|
|||
#endif
|
||||
|
||||
#if defined(CONFIG_MACH_SUN8I_R40) || defined(CONFIG_MACH_SUN50I)
|
||||
--- a/arch/arm/include/asm/arch-sunxi/prcm.h
|
||||
+++ b/arch/arm/include/asm/arch-sunxi/prcm.h
|
||||
--- a/arch/arm/include/asm/arch-sunxi/prcm_sun6i.h
|
||||
+++ b/arch/arm/include/asm/arch-sunxi/prcm_sun6i.h
|
||||
@@ -110,13 +110,13 @@
|
||||
#define PRCM_PLL_CTRL_LDO_OUT_MASK \
|
||||
__PRCM_PLL_CTRL_LDO_OUT(0x7)
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
From d7311b6e7cdd1fc0e92665188e650934718cb2b1 Mon Sep 17 00:00:00 2001
|
||||
From: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
|
||||
Date: Tue, 16 Jun 2015 10:52:01 +0200
|
||||
Subject: sun6i: define alternate-function for UART2 on GPG
|
||||
|
||||
|
||||
--- a/arch/arm/include/asm/arch-sunxi/gpio.h
|
||||
+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
|
||||
@@ -190,6 +190,7 @@ enum sunxi_gpio_number {
|
||||
#define SUN6I_GPG_SDC1 2
|
||||
#define SUN8I_GPG_SDC1 2
|
||||
#define SUN6I_GPG_TWI3 2
|
||||
+#define SUN6I_GPG_UART2 2
|
||||
#define SUN5I_GPG_UART1 4
|
||||
|
||||
#define SUN6I_GPH_PWM 2
|
|
@ -1,30 +0,0 @@
|
|||
From c058dfb69136d62f88ae8b121104bdb7ce2df03f Mon Sep 17 00:00:00 2001
|
||||
From: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
|
||||
Date: Tue, 16 Jun 2015 10:53:11 +0200
|
||||
Subject: ARM: sun6i: Support console on UART2 (GPG6/GPG7)
|
||||
|
||||
|
||||
--- a/arch/arm/mach-sunxi/board.c
|
||||
+++ b/arch/arm/mach-sunxi/board.c
|
||||
@@ -132,6 +132,10 @@ static int gpio_init(void)
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPG(3), SUN5I_GPG_UART1);
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPG(4), SUN5I_GPG_UART1);
|
||||
sunxi_gpio_set_pull(SUNXI_GPG(4), SUNXI_GPIO_PULL_UP);
|
||||
+#elif CONFIG_CONS_INDEX == 3 && defined(CONFIG_MACH_SUN6I)
|
||||
+ sunxi_gpio_set_cfgpin(SUNXI_GPG(6), SUN6I_GPG_UART2);
|
||||
+ sunxi_gpio_set_cfgpin(SUNXI_GPG(7), SUN6I_GPG_UART2);
|
||||
+ sunxi_gpio_set_pull(SUNXI_GPG(7), SUNXI_GPIO_PULL_UP);
|
||||
#elif CONFIG_CONS_INDEX == 3 && defined(CONFIG_MACH_SUN8I)
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUN8I_GPB_UART2);
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUN8I_GPB_UART2);
|
||||
--- a/include/configs/sunxi-common.h
|
||||
+++ b/include/configs/sunxi-common.h
|
||||
@@ -244,6 +244,8 @@ extern int soft_i2c_gpio_scl;
|
||||
#endif
|
||||
#elif CONFIG_CONS_INDEX == 2 && defined(CONFIG_MACH_SUN5I)
|
||||
#define OF_STDOUT_PATH "/soc@01c00000/serial@01c28400:115200"
|
||||
+#elif CONFIG_CONS_INDEX == 3 && defined(CONFIG_MACH_SUN6I)
|
||||
+#define OF_STDOUT_PATH "/soc@01c00000/serial@01c28800:115200"
|
||||
#elif CONFIG_CONS_INDEX == 3 && defined(CONFIG_MACH_SUN8I)
|
||||
#define OF_STDOUT_PATH "/soc@01c00000/serial@01c28800:115200"
|
||||
#elif CONFIG_CONS_INDEX == 5 && defined(CONFIG_MACH_SUN8I)
|
|
@ -1,23 +0,0 @@
|
|||
From 78d5fab8e345b1273ec8c22d06f1a1d27670b518 Mon Sep 17 00:00:00 2001
|
||||
From: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
|
||||
Date: Tue, 16 Jun 2015 10:59:38 +0200
|
||||
Subject: ARM: sunxi: Make CONS_INDEX configurable
|
||||
|
||||
|
||||
--- a/arch/arm/mach-sunxi/Kconfig
|
||||
+++ b/arch/arm/mach-sunxi/Kconfig
|
||||
@@ -559,6 +559,14 @@ config SYS_BOARD
|
||||
config SYS_SOC
|
||||
default "sunxi"
|
||||
|
||||
+config CONS_INDEX
|
||||
+ int "UART used for console"
|
||||
+ range 1 5
|
||||
+ default 1
|
||||
+ ---help---
|
||||
+ Defines the UART port used for serial output. It starts at 1 so UART0 is 1,
|
||||
+ UART1 is 2 and so on.
|
||||
+
|
||||
config UART0_PORT_F
|
||||
bool "UART0 on MicroSD breakout board"
|
||||
default n
|
|
@ -17,7 +17,7 @@ Cc: Simon Glass <sjg@chromium.org>
|
|||
|
||||
--- a/tools/fit_image.c
|
||||
+++ b/tools/fit_image.c
|
||||
@@ -751,9 +751,14 @@ static int fit_handle_file(struct image_
|
||||
@@ -754,9 +754,14 @@ static int fit_handle_file(struct image_
|
||||
}
|
||||
*cmd = '\0';
|
||||
} else if (params->datafile) {
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
From def280c4792262a368c8861312dc6b376181021f Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Mon, 1 Jan 2018 23:10:56 +0100
|
||||
Subject: sunxi: deactivate binman
|
||||
|
||||
Use the old way to generate the images instead of binman.
|
||||
binman needs python with swig to avoid this host tool dependency use the
|
||||
old way of generating images.
|
||||
---
|
||||
Makefile | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1607,8 +1607,10 @@ endif
|
||||
|
||||
ifneq ($(CONFIG_ARCH_SUNXI),)
|
||||
ifeq ($(CONFIG_ARM64),)
|
||||
-u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
|
||||
- $(call if_changed,binman)
|
||||
+OBJCOPYFLAGS_u-boot-sunxi-with-spl.bin = -I binary -O binary \
|
||||
+ --pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff
|
||||
+u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img FORCE
|
||||
+ $(call if_changed,pad_cat)
|
||||
else
|
||||
u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
|
||||
$(call if_changed,cat)
|
||||
--- a/arch/arm/Kconfig
|
||||
+++ b/arch/arm/Kconfig
|
||||
@@ -995,7 +995,6 @@ config ARCH_SOCFPGA
|
||||
|
||||
config ARCH_SUNXI
|
||||
bool "Support sunxi (Allwinner) SoCs"
|
||||
- select BINMAN
|
||||
select CMD_GPIO
|
||||
select CMD_MMC if MMC
|
||||
select CMD_USB if DISTRO_DEFAULTS
|
|
@ -1,19 +0,0 @@
|
|||
--- a/configs/A13-OLinuXino_defconfig
|
||||
+++ b/configs/A13-OLinuXino_defconfig
|
||||
@@ -7,7 +7,6 @@ CONFIG_DRAM_EMR1=0
|
||||
CONFIG_MMC0_CD_PIN="PG0"
|
||||
CONFIG_USB0_VBUS_DET="PG1"
|
||||
CONFIG_USB1_VBUS_PIN="PG11"
|
||||
-CONFIG_AXP_GPIO=y
|
||||
# CONFIG_VIDEO_HDMI is not set
|
||||
CONFIG_VIDEO_VGA_VIA_LCD=y
|
||||
CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH=y
|
||||
@@ -20,7 +19,7 @@ CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-olinuxino"
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
|
||||
-CONFIG_AXP_ALDO3_VOLT=3300
|
||||
+CONFIG_SUNXI_NO_PMIC=y
|
||||
CONFIG_CONS_INDEX=2
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
|
@ -1,148 +0,0 @@
|
|||
From 2527b24f39d8f27ba2fd922ca27a1f14119cfa1b Mon Sep 17 00:00:00 2001
|
||||
From: Yu-Tung Chang <mtwget@gmail.com>
|
||||
Date: Sat, 19 Jun 2021 16:16:45 +0800
|
||||
Subject: [PATCH] sunxi: h3: Add initial ZeroPi support
|
||||
|
||||
ZeroPi is a new board of high performance with low cost
|
||||
designed by FriendlyElec., using the Allwinner H3 SOC.
|
||||
|
||||
ZeroPi features
|
||||
- Allwinner H3, Quad-core Cortex-A7@1.2GHz
|
||||
- 256MB/512MB DDR3 RAM
|
||||
- microsd slot
|
||||
- 10/100/1000Mbps Ethernet
|
||||
- Debug Serial Port
|
||||
- DC 5V/2A power-supply
|
||||
|
||||
Signed-off-by: Yu-Tung Chang <mtwget@gmail.com>
|
||||
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -560,7 +560,8 @@ dtb-$(CONFIG_MACH_SUN8I_H3) += \
|
||||
sun8i-h3-orangepi-plus.dtb \
|
||||
sun8i-h3-orangepi-plus2e.dtb \
|
||||
sun8i-h3-orangepi-zero-plus2.dtb \
|
||||
- sun8i-h3-rervision-dvk.dtb
|
||||
+ sun8i-h3-rervision-dvk.dtb \
|
||||
+ sun8i-h3-zeropi.dtb
|
||||
dtb-$(CONFIG_MACH_SUN8I_R40) += \
|
||||
sun8i-r40-bananapi-m2-ultra.dtb \
|
||||
sun8i-v40-bananapi-m2-berry.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun8i-h3-zeropi.dts
|
||||
@@ -0,0 +1,85 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2020 Yu-Tung Chang <mtwget@gmail.com>
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#include "sun8i-h3-nanopi.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "FriendlyARM ZeroPi";
|
||||
+ compatible = "friendlyarm,zeropi", "allwinner,sun8i-h3";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &emac;
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&external_mdio {
|
||||
+ ext_rgmii_phy: ethernet-phy@7 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <7>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emac_rgmii_pins>;
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ phy-handle = <&ext_rgmii_phy>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
+
|
||||
+ allwinner,leds-active-low;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_otg {
|
||||
+ status = "okay";
|
||||
+ dr_mode = "host";
|
||||
+};
|
||||
--- a/board/sunxi/MAINTAINERS
|
||||
+++ b/board/sunxi/MAINTAINERS
|
||||
@@ -508,3 +508,9 @@ YONES TOPTECH BS1078 V2 BOARD
|
||||
M: Peter Korsgaard <peter@korsgaard.com>
|
||||
S: Maintained
|
||||
F: configs/Yones_Toptech_BS1078_V2_defconfig
|
||||
+
|
||||
+ZEROPI BOARD
|
||||
+M: Yu-Tung Chang <mtwget@gmail.com>
|
||||
+S: Maintained
|
||||
+F: configs/zeropi_defconfig
|
||||
+F: arch/arm/dts/sun8i-h3-zeropi.dts
|
||||
--- /dev/null
|
||||
+++ b/configs/zeropi_defconfig
|
||||
@@ -0,0 +1,13 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun8i-h3-zeropi"
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_MACH_SUN8I_H3=y
|
||||
+CONFIG_DRAM_CLK=408
|
||||
+CONFIG_MACPWR="PD6"
|
||||
+# CONFIG_VIDEO_DE2 is not set
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
+CONFIG_CONSOLE_MUX=y
|
||||
+CONFIG_SUN8I_EMAC=y
|
||||
+CONFIG_USB_EHCI_HCD=y
|
||||
+CONFIG_USB_OHCI_HCD=y
|
|
@ -12,165 +12,6 @@ Signed-off-by: Jayantajit Gogoi <jayanta.gogoi525@gmail.com>
|
|||
create mode 100644 arch/arm/dts/sun8i-h3-nanopi-r1.dts
|
||||
create mode 100644 configs/nanopi_r1_defconfig
|
||||
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -551,6 +551,7 @@ dtb-$(CONFIG_MACH_SUN8I_H3) += \
|
||||
sun8i-h3-nanopi-m1-plus.dtb \
|
||||
sun8i-h3-nanopi-neo.dtb \
|
||||
sun8i-h3-nanopi-neo-air.dtb \
|
||||
+ sun8i-h3-nanopi-r1.dtb \
|
||||
sun8i-h3-orangepi-2.dtb \
|
||||
sun8i-h3-orangepi-lite.dtb \
|
||||
sun8i-h3-orangepi-one.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun8i-h3-nanopi-r1.dts
|
||||
@@ -0,0 +1,146 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (C) 2019 Igor Pecovnik <igor@armbian.com>
|
||||
+ * Copyright (C) 2020 Jayantajit Gogoi <jayanta.gogoi525@gmail.com>
|
||||
+ */
|
||||
+
|
||||
+/* NanoPi R1 is based on the NanoPi-H3 design from FriendlyARM */
|
||||
+#include "sun8i-h3-nanopi.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "FriendlyARM NanoPi R1";
|
||||
+ compatible = "friendlyarm,nanopi-r1", "allwinner,sun8i-h3";
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpux: gpio-regulator {
|
||||
+ compatible = "regulator-gpio";
|
||||
+ pinctrl-names = "default";
|
||||
+ 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>;
|
||||
+ gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>;
|
||||
+ gpios-states = <0x1>;
|
||||
+ states = <1100000 0x0
|
||||
+ 1300000 0x1>;
|
||||
+ };
|
||||
+
|
||||
+ wifi_pwrseq: wifi_pwrseq {
|
||||
+ compatible = "mmc-pwrseq-simple";
|
||||
+ pinctrl-names = "default";
|
||||
+ reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ /delete-node/ pwr;
|
||||
+ status {
|
||||
+ label = "nanopi:red:status";
|
||||
+ gpios = <&pio 0 10 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+
|
||||
+ wan {
|
||||
+ label = "nanopi:green:wan";
|
||||
+ gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ lan {
|
||||
+ label = "nanopi:green:lan";
|
||||
+ gpios = <&pio 0 9 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ r_gpio_keys {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&sw_r_npi>;
|
||||
+
|
||||
+ /delete-node/ k1;
|
||||
+ reset {
|
||||
+ label = "reset";
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <&vdd_cpux>;
|
||||
+};
|
||||
+
|
||||
+&ehci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emac_rgmii_pins>;
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ phy-handle = <&ext_rgmii_phy>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&external_mdio {
|
||||
+ ext_rgmii_phy: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <7>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc1 {
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ vqmmc-supply = <®_vcc3v3>;
|
||||
+ mmc-pwrseq = <&wifi_pwrseq>;
|
||||
+ bus-width = <4>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ sdio_wifi: sdio_wifi@1 {
|
||||
+ reg = <1>;
|
||||
+ compatible = "brcm,bcm4329-fmac";
|
||||
+ interrupt-parent = <&pio>;
|
||||
+ interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ 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";
|
||||
+};
|
||||
+
|
||||
+&ohci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&r_pio {
|
||||
+ sw_r_npi: key_pins {
|
||||
+ pins = "PL3";
|
||||
+ function = "gpio_in";
|
||||
+ };
|
||||
+};
|
||||
--- /dev/null
|
||||
+++ b/configs/nanopi_r1_defconfig
|
||||
@@ -0,0 +1,21 @@
|
||||
|
|
|
@ -1,261 +0,0 @@
|
|||
From e7510d24cab4741f72489b9d67c2d42b18fe5374 Mon Sep 17 00:00:00 2001
|
||||
From: Chukun Pan <amadeus@jmu.edu.cn>
|
||||
Date: Sun, 10 Oct 2021 21:36:57 +0800
|
||||
Subject: [PATCH] sunxi: Add support for FriendlyARM NanoPi R1S H5
|
||||
|
||||
This adds support for the NanoPi R1S H5 board.
|
||||
|
||||
Allwinner H5 SoC
|
||||
512MB DDR3 RAM
|
||||
10/100/1000M Ethernet x 2
|
||||
RTL8189ETV WiFi 802.11b/g/n
|
||||
USB 2.0 host port (A)
|
||||
MicroSD Slot
|
||||
Reset button
|
||||
Serial Debug Port
|
||||
WAN - LAN - SYS LED
|
||||
|
||||
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
|
||||
---
|
||||
arch/arm/dts/Makefile | 1 +
|
||||
arch/arm/dts/sun50i-h5-nanopi-r1s-h5.dts | 195 +++++++++++++++++++++++
|
||||
board/sunxi/MAINTAINERS | 5 +
|
||||
configs/nanopi_r1s_h5_defconfig | 14 ++
|
||||
4 files changed, 215 insertions(+)
|
||||
create mode 100644 arch/arm/dts/sun50i-h5-nanopi-r1s-h5.dts
|
||||
create mode 100644 configs/nanopi_r1s_h5_defconfig
|
||||
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -575,6 +575,7 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
|
||||
sun50i-h5-libretech-all-h5-cc.dtb \
|
||||
sun50i-h5-nanopi-neo2.dtb \
|
||||
sun50i-h5-nanopi-neo-plus2.dtb \
|
||||
+ sun50i-h5-nanopi-r1s-h5.dtb \
|
||||
sun50i-h5-orangepi-zero-plus.dtb \
|
||||
sun50i-h5-orangepi-pc2.dtb \
|
||||
sun50i-h5-orangepi-prime.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun50i-h5-nanopi-r1s-h5.dts
|
||||
@@ -0,0 +1,190 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (C) 2021 Chukun Pan <amadeus@jmu.edu.cn>
|
||||
+ *
|
||||
+ * Based on sun50i-h5-nanopi-neo-plus2.dts, which is:
|
||||
+ * Copyright (C) 2017 Antony Antony <antony@phenome.org>
|
||||
+ * Copyright (C) 2016 ARM Ltd.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "sun50i-h5.dtsi"
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "FriendlyARM NanoPi R1S H5";
|
||||
+ compatible = "friendlyarm,nanopi-r1s-h5", "allwinner,sun50i-h5";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &emac;
|
||||
+ ethernet1 = &rtl8189etv;
|
||||
+ serial0 = &uart0;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ sys {
|
||||
+ label = "nanopi:red:sys";
|
||||
+ gpios = <&pio 0 10 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+
|
||||
+ lan {
|
||||
+ label = "nanopi:green:lan";
|
||||
+ gpios = <&pio 0 9 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ wan {
|
||||
+ label = "nanopi:green:wan";
|
||||
+ gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ r-gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ reset {
|
||||
+ label = "reset";
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc3v3: vcc3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+
|
||||
+ reg_usb0_vbus: usb0-vbus {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "usb0-vbus";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&r_pio 0 2 GPIO_ACTIVE_HIGH>; /* PL2 */
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ vdd_cpux: gpio-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 6 GPIO_ACTIVE_HIGH>;
|
||||
+ gpios-states = <0x1>;
|
||||
+ states = <1100000 0x0>, <1300000 0x1>;
|
||||
+ };
|
||||
+
|
||||
+ wifi_pwrseq: wifi_pwrseq {
|
||||
+ compatible = "mmc-pwrseq-simple";
|
||||
+ reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */
|
||||
+ post-power-on-delay-ms = <200>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <&vdd_cpux>;
|
||||
+};
|
||||
+
|
||||
+&ehci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&emac_rgmii_pins>;
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ phy-handle = <&ext_rgmii_phy>;
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&external_mdio {
|
||||
+ ext_rgmii_phy: ethernet-phy@7 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <7>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ eeprom@51 {
|
||||
+ compatible = "microchip,24c02";
|
||||
+ reg = <0x51>;
|
||||
+ pagesize = <16>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ bus-width = <4>;
|
||||
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc1 {
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ vqmmc-supply = <®_vcc3v3>;
|
||||
+ mmc-pwrseq = <&wifi_pwrseq>;
|
||||
+ bus-width = <4>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ rtl8189etv: sdio_wifi@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ohci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_pa_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb_otg {
|
||||
+ dr_mode = "peripheral";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbphy {
|
||||
+ /* USB Type-A port's VBUS is always on */
|
||||
+ usb0_id_det-gpios = <&pio 6 12 GPIO_ACTIVE_HIGH>; /* PG12 */
|
||||
+ usb0_vbus-supply = <®_usb0_vbus>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
--- a/board/sunxi/MAINTAINERS
|
||||
+++ b/board/sunxi/MAINTAINERS
|
||||
@@ -358,6 +358,11 @@ M: Jelle van der Waa <jelle@vdwaa.nl>
|
||||
S: Maintained
|
||||
F: configs/nanopi_neo_air_defconfig
|
||||
|
||||
+NANOPI-R1S-H5 BOARD
|
||||
+M: Chukun Pan <amadeus@jmu.edu.cn>
|
||||
+S: Maintained
|
||||
+F: configs/nanopi_r1s_h5_defconfig
|
||||
+
|
||||
NANOPI-A64 BOARD
|
||||
M: Jagan Teki <jagan@amarulasolutions.com>
|
||||
S: Maintained
|
||||
--- /dev/null
|
||||
+++ b/configs/nanopi_r1s_h5_defconfig
|
||||
@@ -0,0 +1,14 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_MACH_SUN50I_H5=y
|
||||
+CONFIG_DRAM_CLK=672
|
||||
+CONFIG_DRAM_ZQ=3881977
|
||||
+# CONFIG_DRAM_ODT_EN is not set
|
||||
+CONFIG_MACPWR="PD6"
|
||||
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h5-nanopi-r1s-h5"
|
||||
+CONFIG_SUN8I_EMAC=y
|
||||
+CONFIG_USB_EHCI_HCD=y
|
||||
+CONFIG_USB_OHCI_HCD=y
|
|
@ -1,29 +0,0 @@
|
|||
From 20abdd7feefbb4fccef5c653e045911670237e8b Mon Sep 17 00:00:00 2001
|
||||
From: Stijn Tintel <stijn@linux-ipv6.be>
|
||||
Date: Thu, 22 Dec 2022 00:35:07 +0200
|
||||
Subject: [PATCH] arm: sunxi: increase SYS_MALLOC_F_LEN
|
||||
|
||||
Version 2020.10 throws the following output after loading bl31:
|
||||
alloc space exhausted
|
||||
|
||||
This has been fixed in v2022.07, but the change is too intrusive to
|
||||
backport. Instead, just modify the default for ARCH_SUNXI for now.
|
||||
|
||||
See e05689242238 ("Kconfig: Change SYS_MALLOC_F_LEN default to 0x2000").
|
||||
|
||||
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||||
---
|
||||
Kconfig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/Kconfig
|
||||
+++ b/Kconfig
|
||||
@@ -146,7 +146,7 @@ config SYS_MALLOC_F_LEN
|
||||
default 0x2000 if (ARCH_IMX8 || ARCH_IMX8M || ARCH_MX7 || \
|
||||
ARCH_MX7ULP || ARCH_MX6 || ARCH_MX5 || \
|
||||
ARCH_LS1012A || ARCH_LS1021A || ARCH_LS1043A || \
|
||||
- ARCH_LS1046A || ARCH_QEMU)
|
||||
+ ARCH_LS1046A || ARCH_QEMU || ARCH_SUNXI)
|
||||
default 0x400
|
||||
help
|
||||
Before relocation, memory is very limited on many platforms. Still,
|
|
@ -0,0 +1,30 @@
|
|||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -2000,26 +2000,7 @@ endif
|
||||
# Check dtc and pylibfdt, if DTC is provided, else build them
|
||||
PHONY += scripts_dtc
|
||||
scripts_dtc: scripts_basic
|
||||
- $(Q)if test "$(DTC)" = "$(DTC_INTREE)"; then \
|
||||
- $(MAKE) $(build)=scripts/dtc; \
|
||||
- else \
|
||||
- if ! $(DTC) -v >/dev/null; then \
|
||||
- echo '*** Failed to check dtc version: $(DTC)'; \
|
||||
- false; \
|
||||
- else \
|
||||
- if test "$(call dtc-version)" -lt $(DTC_MIN_VERSION); then \
|
||||
- echo '*** Your dtc is too old, please upgrade to dtc $(DTC_MIN_VERSION) or newer'; \
|
||||
- false; \
|
||||
- else \
|
||||
- if [ -n "$(CONFIG_PYLIBFDT)" ]; then \
|
||||
- if ! echo "import libfdt" | $(PYTHON3) 2>/dev/null; then \
|
||||
- echo '*** pylibfdt does not seem to be available with $(PYTHON3)'; \
|
||||
- false; \
|
||||
- fi; \
|
||||
- fi; \
|
||||
- fi; \
|
||||
- fi; \
|
||||
- fi
|
||||
+ $(MAKE) $(build)=scripts/dtc
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
quiet_cmd_cpp_lds = LDS $@
|
|
@ -90,3 +90,17 @@
|
|||
return ret;
|
||||
}
|
||||
|
||||
--- a/src/linux/ifxos_linux_thread_drv.c
|
||||
+++ b/src/linux/ifxos_linux_thread_drv.c
|
||||
@@ -154,7 +154,11 @@ IFXOS_STATIC int IFXOS_KernelThreadStart
|
||||
retVal = pThrCntrl->pThrFct(&pThrCntrl->thrParams);
|
||||
pThrCntrl->thrParams.bRunning = IFX_FALSE;
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0))
|
||||
+ kthread_complete_and_exit(&pThrCntrl->thrCompletion, (long)retVal);
|
||||
+#else
|
||||
complete_and_exit(&pThrCntrl->thrCompletion, (long)retVal);
|
||||
+#endif
|
||||
|
||||
IFXOS_PRN_USR_DBG_NL( IFXOS, IFXOS_PRN_LEVEL_NORMAL,
|
||||
("EXIT - Kernel Thread Startup <%s>" IFXOS_CRLF,
|
||||
|
|
|
@ -8,3 +8,16 @@
|
|||
MODULE_LICENSE ("GPL");
|
||||
#endif /* #ifdef MODULE*/
|
||||
|
||||
--- a/src/drv_mei_cpe_linux.h
|
||||
+++ b/src/drv_mei_cpe_linux.h
|
||||
@@ -110,6 +110,10 @@ typedef irqreturn_t (*usedIsrHandler_t)(
|
||||
# endif
|
||||
#endif
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0))
|
||||
+#define PDE_DATA pde_data
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
Function typedef for the Linux request_threaded_irq()
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/src/drv_mei_cpe_linux.c
|
||||
+++ b/src/drv_mei_cpe_linux.c
|
||||
@@ -1267,7 +1267,9 @@ static long MEI_Ioctl( struct file *filp,
|
||||
@@ -1267,7 +1267,9 @@ static long MEI_Ioctl( struct file *filp
|
||||
MEI_IOCTL_RETURN:
|
||||
|
||||
local_args.drv_ioctl.retCode = ret;
|
||||
|
|
|
@ -42,6 +42,25 @@
|
|||
dev_err(&pdev->dev,
|
||||
"%s: Failed to enable MSI interrupts error code: %d\n",
|
||||
__func__, err);
|
||||
@@ -589,15 +589,15 @@ static int dc_ep_probe(struct pci_dev *p
|
||||
/* Target structures have a limit of 32 bit DMA pointers.
|
||||
* DMA pointers can be wider than 32 bits by default on some systems.
|
||||
*/
|
||||
- ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
|
||||
+ ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "32-bit DMA not available: %d\n", ret);
|
||||
goto err_region;
|
||||
}
|
||||
|
||||
- ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
|
||||
+ ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
if (ret) {
|
||||
- dev_err(&pdev->dev, "cannot enable 32-bit consistent DMA\n");
|
||||
+ dev_err(&pdev->dev, "cannot enable 32-bit coherent DMA\n");
|
||||
goto err_region;
|
||||
}
|
||||
|
||||
@@ -654,7 +654,7 @@ static int dc_ep_probe(struct pci_dev *p
|
||||
goto err_iomap;
|
||||
|
||||
|
|
|
@ -243,7 +243,33 @@
|
|||
|
||||
#include "inc/tc_main.h"
|
||||
#include "inc/reg_addr.h"
|
||||
@@ -182,8 +182,8 @@ static int ptm_get_qid(struct net_device
|
||||
@@ -62,6 +62,9 @@
|
||||
#include "inc/fw/vrx518_addr_def.h"
|
||||
#include "inc/fw/vrx518_ppe_fw.h"
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0))
|
||||
+#define PDE_DATA pde_data
|
||||
+#endif
|
||||
|
||||
static struct ptm_priv *g_ptm_priv;
|
||||
static struct ptm_ep_priv g_ep_priv[BOND_MAX];
|
||||
@@ -84,6 +87,7 @@ static int ptm_erb_addr_get(const unsign
|
||||
unsigned int *data_addr, unsigned int *desc_addr);
|
||||
|
||||
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5,16,0))
|
||||
static inline void tc_ether_addr_copy(u8 *dst, const u8 *src)
|
||||
{
|
||||
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
|
||||
@@ -98,6 +102,7 @@ static inline void tc_ether_addr_copy(u8
|
||||
a[2] = b[2];
|
||||
#endif
|
||||
}
|
||||
+#endif
|
||||
|
||||
static inline int is_ptm_sl(struct ptm_ep_priv *priv)
|
||||
{
|
||||
@@ -182,8 +187,8 @@ static int ptm_get_qid(struct net_device
|
||||
return qid;
|
||||
}
|
||||
|
||||
|
@ -254,7 +280,7 @@
|
|||
{
|
||||
struct ptm_priv *ptm_tc = netdev_priv(dev);
|
||||
|
||||
@@ -191,8 +191,6 @@ static struct rtnl_link_stats64 *ptm_get
|
||||
@@ -191,8 +196,6 @@ static struct rtnl_link_stats64 *ptm_get
|
||||
memcpy(storage, &ptm_tc->stats64, sizeof(ptm_tc->stats64));
|
||||
else
|
||||
storage->tx_errors += ptm_tc->stats64.tx_errors;
|
||||
|
@ -263,7 +289,16 @@
|
|||
}
|
||||
|
||||
static int ptm_set_mac_address(struct net_device *dev, void *p)
|
||||
@@ -209,7 +207,7 @@ static int ptm_set_mac_address(struct ne
|
||||
@@ -204,12 +207,16 @@ static int ptm_set_mac_address(struct ne
|
||||
return -EBUSY;
|
||||
|
||||
tc_info(ptm_tc->tc_priv, MSG_EVENT, "ptm mac address update!\n");
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0))
|
||||
+ eth_hw_addr_set(dev, addr->sa_data);
|
||||
+#else
|
||||
tc_ether_addr_copy(dev->dev_addr, addr->sa_data);
|
||||
+#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -272,7 +307,7 @@
|
|||
{
|
||||
struct ptm_priv *ptm_tc = netdev_priv(dev);
|
||||
|
||||
@@ -503,7 +501,7 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
@@ -503,7 +510,7 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
if (!showtime_stat(ptm_tc->tc_priv))
|
||||
goto PTM_XMIT_DROP;
|
||||
|
||||
|
@ -281,7 +316,7 @@
|
|||
goto PTM_XMIT_DROP;
|
||||
|
||||
dump_skb_info(ptm_tc->tc_priv, skb, (MSG_TX | MSG_TXDATA));
|
||||
@@ -632,11 +630,8 @@ static int ptm_dev_init(struct tc_priv *
|
||||
@@ -632,11 +639,8 @@ static int ptm_dev_init(struct tc_priv *
|
||||
struct ptm_priv *ptm_tc;
|
||||
const char macaddr[ETH_ALEN]
|
||||
= {0xAC, 0x9A, 0x96, 0x11, 0x22, 0x33};
|
||||
|
@ -295,7 +330,19 @@
|
|||
if (!dev) {
|
||||
tc_dbg(tc_priv, MSG_INIT, "Cannot alloc net device\n");
|
||||
return -ENOMEM;
|
||||
@@ -2103,7 +2098,6 @@ static int ptm_showtime_exit(const unsig
|
||||
@@ -644,7 +648,11 @@ static int ptm_dev_init(struct tc_priv *
|
||||
ptm_tc = netdev_priv(dev);
|
||||
ptm_tc->dev = dev;
|
||||
ptm_tc->tc_priv = tc_priv;
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,16,0))
|
||||
+ eth_hw_addr_set(dev, macaddr);
|
||||
+#else
|
||||
tc_ether_addr_copy(dev->dev_addr, macaddr);
|
||||
+#endif
|
||||
spin_lock_init(&ptm_tc->ptm_lock);
|
||||
memcpy(ptm_tc->outq_map, def_outq_map, sizeof(def_outq_map));
|
||||
SET_NETDEV_DEV(ptm_tc->dev, tc_priv->ep_dev[id].dev);
|
||||
@@ -2103,7 +2111,6 @@ static int ptm_showtime_exit(const unsig
|
||||
struct ptm_ep_priv *priv = tc_ep_priv(idx);
|
||||
u32 stop = ACA_TXIN_EN;
|
||||
struct dc_ep_dev *ep;
|
||||
|
@ -398,7 +445,18 @@
|
|||
#include <net/genetlink.h>
|
||||
#include <linux/time.h>
|
||||
#include "inc/tc_main.h"
|
||||
@@ -353,7 +355,7 @@ static ssize_t mem_proc_write(struct fil
|
||||
@@ -35,6 +37,10 @@
|
||||
#include "inc/platform.h"
|
||||
#include "inc/dsl_tc.h"
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0))
|
||||
+#define PDE_DATA pde_data
|
||||
+#endif
|
||||
+
|
||||
#define ATM_HEADER_SIZE (ATM_CELL_SIZE - ATM_CELL_PAYLOAD)
|
||||
static char *dbg_flag_str[] = {
|
||||
"rx",
|
||||
@@ -353,7 +359,7 @@ static ssize_t mem_proc_write(struct fil
|
||||
}
|
||||
addr = set_val = repeat_cnt = 0;
|
||||
|
||||
|
@ -407,7 +465,7 @@
|
|||
return -EFAULT;
|
||||
|
||||
len = count < sizeof(str) ? count : sizeof(str) - 1;
|
||||
@@ -450,13 +452,12 @@ static int proc_read_mem_seq_open(struct
|
||||
@@ -450,13 +456,12 @@ static int proc_read_mem_seq_open(struct
|
||||
return single_open(file, proc_read_mem, NULL);
|
||||
}
|
||||
|
||||
|
@ -427,7 +485,7 @@
|
|||
};
|
||||
|
||||
static ssize_t pp32_proc_write(struct file *file, const char __user *buf,
|
||||
@@ -748,13 +749,12 @@ static int proc_read_pp32_seq_open(struc
|
||||
@@ -748,13 +753,12 @@ static int proc_read_pp32_seq_open(struc
|
||||
return single_open(file, proc_read_pp32, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -447,7 +505,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_tc_cfg(struct seq_file *seq, void *v)
|
||||
@@ -865,13 +865,12 @@ static int proc_read_tc_cfg_seq_open(str
|
||||
@@ -865,13 +869,12 @@ static int proc_read_tc_cfg_seq_open(str
|
||||
return single_open(file, proc_read_tc_cfg, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -467,7 +525,7 @@
|
|||
};
|
||||
|
||||
static ssize_t proc_write_dbg(struct file *file, const char __user *buf,
|
||||
@@ -951,13 +950,12 @@ static int proc_read_dbg_seq_open(struct
|
||||
@@ -951,13 +954,12 @@ static int proc_read_dbg_seq_open(struct
|
||||
return single_open(file, proc_read_dbg, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -487,7 +545,7 @@
|
|||
};
|
||||
|
||||
static ssize_t proc_write_tc_switch(struct file *file, const char __user *buf,
|
||||
@@ -1018,11 +1016,11 @@ proc_tc_switch_help:
|
||||
@@ -1018,11 +1020,11 @@ proc_tc_switch_help:
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -503,7 +561,7 @@
|
|||
static ssize_t proc_write_show_time(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *data)
|
||||
{
|
||||
@@ -1077,10 +1075,9 @@ proc_show_time_help:
|
||||
@@ -1077,10 +1079,9 @@ proc_show_time_help:
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -517,7 +575,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_ver(struct seq_file *seq, void *v)
|
||||
@@ -1128,12 +1125,11 @@ static int proc_read_ver_seq_open(struct
|
||||
@@ -1128,12 +1129,11 @@ static int proc_read_ver_seq_open(struct
|
||||
return single_open(file, proc_read_ver, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -535,7 +593,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_soc(struct seq_file *seq, void *v)
|
||||
@@ -1142,20 +1138,18 @@ static int proc_read_soc(struct seq_file
|
||||
@@ -1142,20 +1142,18 @@ static int proc_read_soc(struct seq_file
|
||||
|
||||
tcpriv = (struct tc_priv *)seq->private;
|
||||
|
||||
|
@ -564,7 +622,7 @@
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -1165,15 +1159,13 @@ static int proc_read_soc_seq_open(struct
|
||||
@@ -1165,15 +1163,13 @@ static int proc_read_soc_seq_open(struct
|
||||
return single_open(file, proc_read_soc, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -585,7 +643,7 @@
|
|||
static struct tc_proc_list tc_procs[] = {
|
||||
{TC_PROC_DIR, 0, NULL, 1},
|
||||
{"cfg", 0644, &tc_cfg_proc_fops, 0},
|
||||
@@ -1241,13 +1233,12 @@ static int proc_read_ptm_wanmib_seq_open
|
||||
@@ -1241,13 +1237,12 @@ static int proc_read_ptm_wanmib_seq_open
|
||||
return single_open(file, proc_read_ptm_wanmib, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -605,7 +663,7 @@
|
|||
};
|
||||
|
||||
static int proc_ptm_read_cfg(struct seq_file *seq, void *v)
|
||||
@@ -1300,7 +1291,7 @@ static ssize_t ptm_cfg_proc_write(struct
|
||||
@@ -1300,7 +1295,7 @@ static ssize_t ptm_cfg_proc_write(struct
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -614,7 +672,7 @@
|
|||
return -EFAULT;
|
||||
|
||||
len = count < sizeof(str) ? count : sizeof(str) - 1;
|
||||
@@ -1343,13 +1334,12 @@ proc_ptm_cfg_help:
|
||||
@@ -1343,13 +1338,12 @@ proc_ptm_cfg_help:
|
||||
}
|
||||
|
||||
|
||||
|
@ -634,7 +692,7 @@
|
|||
};
|
||||
|
||||
static ssize_t proc_ptm_write_prio(struct file *file, const char __user *buf,
|
||||
@@ -1455,13 +1445,12 @@ static int proc_ptm_read_prio_seq_open(s
|
||||
@@ -1455,13 +1449,12 @@ static int proc_ptm_read_prio_seq_open(s
|
||||
return single_open(file, proc_ptm_read_prio, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -654,7 +712,7 @@
|
|||
};
|
||||
|
||||
static int proc_ptm_read_bond_seq_open(struct inode *inode, struct file *file)
|
||||
@@ -1469,12 +1458,11 @@ static int proc_ptm_read_bond_seq_open(s
|
||||
@@ -1469,12 +1462,11 @@ static int proc_ptm_read_bond_seq_open(s
|
||||
return single_open(file, proc_ptm_read_bond, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -672,7 +730,7 @@
|
|||
};
|
||||
|
||||
static int proc_ptm_read_bondmib_seq_open(struct inode *inode,
|
||||
@@ -1483,13 +1471,12 @@ static int proc_ptm_read_bondmib_seq_ope
|
||||
@@ -1483,13 +1475,12 @@ static int proc_ptm_read_bondmib_seq_ope
|
||||
return single_open(file, proc_ptm_read_bondmib, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -692,7 +750,7 @@
|
|||
};
|
||||
|
||||
struct fwdbg_t {
|
||||
@@ -1910,14 +1897,14 @@ static int proc_read_fwdbg_seq_open(stru
|
||||
@@ -1910,14 +1901,14 @@ static int proc_read_fwdbg_seq_open(stru
|
||||
{
|
||||
return single_open(file, proc_read_fwdbg, NULL);
|
||||
}
|
||||
|
@ -714,7 +772,7 @@
|
|||
static struct tc_proc_list ptm_sl_procs[] = {
|
||||
{TC_PROC_PTM_DIR, 0, NULL, 1},
|
||||
{"mem", 0644, &mem_proc_fops, 0},
|
||||
@@ -2077,7 +2064,7 @@ static ssize_t atm_cfg_proc_write(struct
|
||||
@@ -2077,7 +2068,7 @@ static ssize_t atm_cfg_proc_write(struct
|
||||
|
||||
priv = (struct atm_priv *)PDE_DATA(file_inode(file));
|
||||
|
||||
|
@ -723,7 +781,7 @@
|
|||
return -EFAULT;
|
||||
|
||||
len = count < sizeof(str) ? count : sizeof(str) - 1;
|
||||
@@ -2119,13 +2106,12 @@ proc_atm_cfg_help:
|
||||
@@ -2119,13 +2110,12 @@ proc_atm_cfg_help:
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -743,7 +801,7 @@
|
|||
};
|
||||
|
||||
static ssize_t proc_write_atm_wanmib(struct file *file, const char __user *buf,
|
||||
@@ -2173,13 +2159,12 @@ static int proc_read_atm_wanmib_seq_open
|
||||
@@ -2173,13 +2163,12 @@ static int proc_read_atm_wanmib_seq_open
|
||||
|
||||
|
||||
|
||||
|
@ -763,7 +821,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_htu_seq_open(struct inode *inode, struct file *file)
|
||||
@@ -2187,12 +2172,11 @@ static int proc_read_htu_seq_open(struct
|
||||
@@ -2187,12 +2176,11 @@ static int proc_read_htu_seq_open(struct
|
||||
return single_open(file, proc_read_htu, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -781,7 +839,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_queue_seq_open(struct inode *inode, struct file *file)
|
||||
@@ -2200,12 +2184,11 @@ static int proc_read_queue_seq_open(stru
|
||||
@@ -2200,12 +2188,11 @@ static int proc_read_queue_seq_open(stru
|
||||
return single_open(file, proc_read_queue, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
|
@ -799,7 +857,7 @@
|
|||
};
|
||||
|
||||
static void set_q_prio(struct atm_priv *priv,
|
||||
@@ -2428,13 +2411,12 @@ static const struct seq_operations pvc_m
|
||||
@@ -2428,13 +2415,12 @@ static const struct seq_operations pvc_m
|
||||
.show = pvc_mib_seq_show,
|
||||
};
|
||||
|
||||
|
@ -819,7 +877,7 @@
|
|||
};
|
||||
|
||||
static int proc_read_pvc_mib_seq_open(struct inode *inode, struct file *file)
|
||||
@@ -2447,12 +2429,11 @@ static int proc_read_pvc_mib_seq_open(st
|
||||
@@ -2447,12 +2433,11 @@ static int proc_read_pvc_mib_seq_open(st
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -837,7 +895,7 @@
|
|||
};
|
||||
|
||||
static ssize_t proc_write_cell(struct file *file,
|
||||
@@ -2592,13 +2573,12 @@ static int proc_read_cell_seq_open(struc
|
||||
@@ -2592,13 +2577,12 @@ static int proc_read_cell_seq_open(struc
|
||||
return single_open(file, proc_read_cell, NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ This replaces it by a basic working implementation.
|
|||
tc_dbg(priv->tc_priv, MSG_TX, "ATM: TX fail\n");
|
||||
--- a/dcdp/ptm_tc.c
|
||||
+++ b/dcdp/ptm_tc.c
|
||||
@@ -497,6 +497,7 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
@@ -506,6 +506,7 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
struct ptm_priv *ptm_tc = netdev_priv(dev);
|
||||
int qid;
|
||||
enum tc_pkt_type type;
|
||||
|
@ -87,7 +87,7 @@ This replaces it by a basic working implementation.
|
|||
|
||||
if (!showtime_stat(ptm_tc->tc_priv))
|
||||
goto PTM_XMIT_DROP;
|
||||
@@ -510,11 +511,13 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
@@ -519,11 +520,13 @@ static int ptm_xmit(struct sk_buff *skb,
|
||||
type = ptm_tc->tc_priv->tc_mode == TC_PTM_BND_MODE
|
||||
? PTM_BOND_PKT : PTM_SL_PKT;
|
||||
|
||||
|
@ -102,7 +102,7 @@ This replaces it by a basic working implementation.
|
|||
}
|
||||
|
||||
return 0;
|
||||
@@ -631,7 +634,7 @@ static int ptm_dev_init(struct tc_priv *
|
||||
@@ -640,7 +643,7 @@ static int ptm_dev_init(struct tc_priv *
|
||||
const char macaddr[ETH_ALEN]
|
||||
= {0xAC, 0x9A, 0x96, 0x11, 0x22, 0x33};
|
||||
|
||||
|
@ -111,7 +111,7 @@ This replaces it by a basic working implementation.
|
|||
if (!dev) {
|
||||
tc_dbg(tc_priv, MSG_INIT, "Cannot alloc net device\n");
|
||||
return -ENOMEM;
|
||||
@@ -2324,7 +2327,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2337,7 +2340,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
cfg = &priv->tc_priv->cfg;
|
||||
|
||||
txin = ¶m.aca_txin;
|
||||
|
@ -123,7 +123,7 @@ This replaces it by a basic working implementation.
|
|||
txin->hd_size_in_dw = cfg->txin.soc_desc_dwsz;
|
||||
txin->pd_desc_base = SB_XBAR_ADDR(__ACA_TX_IN_PD_LIST_BASE);
|
||||
txin->pd_desc_num = __ACA_TX_IN_PD_LIST_NUM;
|
||||
@@ -2347,7 +2354,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2360,7 +2367,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
txin->soc_cmlt_cnt_addr);
|
||||
|
||||
txout = ¶m.aca_txout;
|
||||
|
@ -135,7 +135,7 @@ This replaces it by a basic working implementation.
|
|||
txout->hd_size_in_dw = cfg->txout.soc_desc_dwsz;
|
||||
if (priv->tc_priv->param.cdma_desc_loc == LOC_IN_FPI)
|
||||
txout->pd_desc_base = sb_r32(__TX_OUT_SHADOW_PTR) - phybase;
|
||||
@@ -2373,7 +2384,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2386,7 +2397,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
txout->soc_cmlt_cnt_addr);
|
||||
|
||||
rxout = ¶m.aca_rxout;
|
||||
|
@ -147,7 +147,7 @@ This replaces it by a basic working implementation.
|
|||
rxout->hd_size_in_dw = cfg->rxout.soc_desc_dwsz;
|
||||
if (priv->tc_priv->param.cdma_desc_loc == LOC_IN_FPI)
|
||||
rxout->pd_desc_base = sb_r32(__RX_OUT_SHADOW_PTR) - phybase;
|
||||
@@ -2399,7 +2414,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2412,7 +2427,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
rxout->soc_cmlt_cnt_addr);
|
||||
|
||||
rxin = ¶m.aca_rxin;
|
||||
|
|
|
@ -54,7 +54,7 @@ significantly lower latencies when the line is saturated.
|
|||
struct cdma {
|
||||
--- a/dcdp/ptm_tc.c
|
||||
+++ b/dcdp/ptm_tc.c
|
||||
@@ -75,7 +75,11 @@ static const u32 tx_kvec[] = {
|
||||
@@ -78,7 +78,11 @@ static const u32 tx_kvec[] = {
|
||||
0x30B1B233, 0xB43536B7, 0xB8393ABB, 0x3CBDBE3F,
|
||||
0xC04142C3, 0x44C5C647, 0x48C9CA4B, 0xCC4D4ECF
|
||||
};
|
||||
|
@ -66,7 +66,7 @@ significantly lower latencies when the line is saturated.
|
|||
static const char ptm_drv_name[] = "PTM SL";
|
||||
static const char ptm_bond_name[][IFNAMSIZ] = {"PTM US BOND", "PTM DS BOND"};
|
||||
|
||||
@@ -1005,6 +1009,10 @@ static void us_fp_desq_cfg_ctxt_init(str
|
||||
@@ -1018,6 +1022,10 @@ static void us_fp_desq_cfg_ctxt_init(str
|
||||
int i;
|
||||
u32 desc_addr;
|
||||
rx_descriptor_t desc;
|
||||
|
@ -77,7 +77,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
memset(&desq_cfg, 0, sizeof(desq_cfg));
|
||||
/* Initialize US Fast-Path Descriptor Queue Config/Context */
|
||||
@@ -1012,7 +1020,11 @@ static void us_fp_desq_cfg_ctxt_init(str
|
||||
@@ -1025,7 +1033,11 @@ static void us_fp_desq_cfg_ctxt_init(str
|
||||
desq_cfg.fast_path = 1;
|
||||
desq_cfg.mbox_int_en = 0;
|
||||
desq_cfg.des_sync_needed = 0;
|
||||
|
@ -89,7 +89,7 @@ significantly lower latencies when the line is saturated.
|
|||
desq_cfg.des_base_addr = __US_FAST_PATH_DES_LIST_BASE;
|
||||
|
||||
tc_mem_write(priv, fpi_addr(__US_FP_INQ_DES_CFG_CTXT),
|
||||
@@ -1036,12 +1048,20 @@ static void us_qos_desq_cfg_ctxt_init(st
|
||||
@@ -1049,12 +1061,20 @@ static void us_qos_desq_cfg_ctxt_init(st
|
||||
int offset, i;
|
||||
rx_descriptor_t desc;
|
||||
u32 phy_addr;
|
||||
|
@ -110,7 +110,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
offset = 0;
|
||||
for (i = 0; i < QOSQ_NUM; i++) {
|
||||
@@ -1080,6 +1100,10 @@ static void us_outq_desq_cfg_ctxt_init(s
|
||||
@@ -1093,6 +1113,10 @@ static void us_outq_desq_cfg_ctxt_init(s
|
||||
u32 phy_addr;
|
||||
int i;
|
||||
u32 offset;
|
||||
|
@ -121,7 +121,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
/* Setup OUTQ_QoS_CFG_CTXT */
|
||||
/* NOTE: By default, Shaping & WFQ both are DISABLED!! */
|
||||
@@ -1108,7 +1132,11 @@ static void us_outq_desq_cfg_ctxt_init(s
|
||||
@@ -1121,7 +1145,11 @@ static void us_outq_desq_cfg_ctxt_init(s
|
||||
desq_cfg.des_in_own_val = US_OUTQ_DES_OWN;
|
||||
desq_cfg.mbox_int_en = 0;
|
||||
desq_cfg.des_sync_needed = 0;
|
||||
|
@ -134,7 +134,7 @@ significantly lower latencies when the line is saturated.
|
|||
/**
|
||||
* Only BC0 is used in VRX518
|
||||
*/
|
||||
@@ -1174,7 +1202,11 @@ static void us_qos_cfg_init(struct ptm_e
|
||||
@@ -1187,7 +1215,11 @@ static void us_qos_cfg_init(struct ptm_e
|
||||
/* Set QoS NO DROP */
|
||||
sb_w32(1, __QOSQ_NO_DROP);
|
||||
/* Enable Preemption function/Disable QoS by default */
|
||||
|
@ -146,7 +146,7 @@ significantly lower latencies when the line is saturated.
|
|||
/* By default, all qid mappint to non-preemption queue */
|
||||
sb_w32(0x0, _QID2PREEMP_MAP);
|
||||
|
||||
@@ -1376,6 +1408,11 @@ static void ptm_local_desq_cfg_ctxt_init
|
||||
@@ -1389,6 +1421,11 @@ static void ptm_local_desq_cfg_ctxt_init
|
||||
u32 dcnt, addr, pdbram_base;
|
||||
unsigned int us_des_alloc[] = {
|
||||
__US_TC_LOCAL_Q0_DES_LIST_NUM, __US_TC_LOCAL_Q1_DES_LIST_NUM};
|
||||
|
@ -158,7 +158,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
/* Setup the Local DESQ Configuration/Context for UpStream Queues */
|
||||
memset(&desq_cfg, 0, sizeof(desq_cfg));
|
||||
@@ -2321,6 +2358,10 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2334,6 +2371,10 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
u32 phybase = priv->ep->phy_membase;
|
||||
u32 start;
|
||||
u32 type;
|
||||
|
@ -169,7 +169,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
priv->tc_priv->tc_ops.soc_cfg_get(&priv->tc_priv->cfg, ptm_id(priv));
|
||||
memset(¶m, 0, sizeof(param));
|
||||
@@ -2334,7 +2375,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
@@ -2347,7 +2388,11 @@ static void ptm_aca_init(struct ptm_ep_p
|
||||
#endif
|
||||
txin->hd_size_in_dw = cfg->txin.soc_desc_dwsz;
|
||||
txin->pd_desc_base = SB_XBAR_ADDR(__ACA_TX_IN_PD_LIST_BASE);
|
||||
|
@ -198,7 +198,7 @@ significantly lower latencies when the line is saturated.
|
|||
|
||||
--- a/dcdp/tc_proc.c
|
||||
+++ b/dcdp/tc_proc.c
|
||||
@@ -1114,6 +1114,9 @@ static int proc_read_ver(struct seq_file
|
||||
@@ -1118,6 +1118,9 @@ static int proc_read_ver(struct seq_file
|
||||
(date >> 16) & 0xff,
|
||||
(date & 0xffff));
|
||||
|
||||
|
@ -208,7 +208,7 @@ significantly lower latencies when the line is saturated.
|
|||
#ifdef FEATURE_POWER_DOWN
|
||||
seq_puts(seq, " + Support Power Down enhancement feature\n");
|
||||
#endif
|
||||
@@ -1166,6 +1169,113 @@ static const struct proc_ops tc_soc_proc
|
||||
@@ -1170,6 +1173,113 @@ static const struct proc_ops tc_soc_proc
|
||||
.proc_release = single_release,
|
||||
};
|
||||
|
||||
|
@ -322,7 +322,7 @@ significantly lower latencies when the line is saturated.
|
|||
static struct tc_proc_list tc_procs[] = {
|
||||
{TC_PROC_DIR, 0, NULL, 1},
|
||||
{"cfg", 0644, &tc_cfg_proc_fops, 0},
|
||||
@@ -1174,6 +1284,9 @@ static struct tc_proc_list tc_procs[] =
|
||||
@@ -1178,6 +1288,9 @@ static struct tc_proc_list tc_procs[] =
|
||||
{"showtime", 0200, &tc_show_time_proc_fops, 0},
|
||||
{"ver", 0644, &tc_ver_proc_fops, 0},
|
||||
{"soc", 0644, &tc_soc_proc_fops, 0},
|
||||
|
@ -332,7 +332,7 @@ significantly lower latencies when the line is saturated.
|
|||
};
|
||||
|
||||
int tc_proc_init(struct tc_priv *priv)
|
||||
@@ -1333,7 +1446,6 @@ proc_ptm_cfg_help:
|
||||
@@ -1337,7 +1450,6 @@ proc_ptm_cfg_help:
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
|
@ -334,7 +334,7 @@
|
|||
int (*umt_init)(u32 umt_id, u32 umt_period, u32 umt_dst);
|
||||
--- a/dcdp/ptm_tc.c
|
||||
+++ b/dcdp/ptm_tc.c
|
||||
@@ -141,7 +141,11 @@ static int ptm_open(struct net_device *d
|
||||
@@ -146,7 +146,11 @@ static int ptm_open(struct net_device *d
|
||||
struct ptm_priv *ptm_tc = netdev_priv(dev);
|
||||
|
||||
tc_info(ptm_tc->tc_priv, MSG_EVENT, "ptm open\n");
|
||||
|
@ -346,7 +346,7 @@
|
|||
#ifdef CONFIG_SOC_TYPE_XWAY
|
||||
xet_phy_wan_port(7, NULL, 1, 1);
|
||||
if (ppa_hook_ppa_phys_port_add_fn)
|
||||
@@ -158,7 +162,11 @@ static int ptm_stop(struct net_device *d
|
||||
@@ -163,7 +167,11 @@ static int ptm_stop(struct net_device *d
|
||||
struct ptm_priv *ptm_tc = netdev_priv(dev);
|
||||
|
||||
tc_info(ptm_tc->tc_priv, MSG_EVENT, "ptm stop\n");
|
||||
|
@ -358,7 +358,7 @@
|
|||
#ifdef CONFIG_SOC_TYPE_XWAY
|
||||
if (ppa_drv_datapath_mac_entry_setting)
|
||||
ppa_drv_datapath_mac_entry_setting(dev->dev_addr, 0, 6, 10, 1, 2);
|
||||
@@ -555,7 +563,7 @@ static void ptm_rx(struct net_device *de
|
||||
@@ -564,7 +572,7 @@ static void ptm_rx(struct net_device *de
|
||||
ptm_tc->stats64.rx_packets++;
|
||||
ptm_tc->stats64.rx_bytes += skb->len;
|
||||
|
||||
|
@ -367,17 +367,22 @@
|
|||
ptm_tc->stats64.rx_dropped++;
|
||||
|
||||
return;
|
||||
@@ -651,6 +659,9 @@ static int ptm_dev_init(struct tc_priv *
|
||||
@@ -664,6 +672,14 @@ static int ptm_dev_init(struct tc_priv *
|
||||
memcpy(ptm_tc->outq_map, def_outq_map, sizeof(def_outq_map));
|
||||
SET_NETDEV_DEV(ptm_tc->dev, tc_priv->ep_dev[id].dev);
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0))
|
||||
+ netif_napi_add(ptm_tc->dev, &ptm_tc->napi_rx, tc_priv->tc_ops.napi_rx);
|
||||
+ netif_napi_add_tx(ptm_tc->dev, &ptm_tc->napi_tx, tc_priv->tc_ops.napi_tx);
|
||||
+#else
|
||||
+ netif_napi_add(ptm_tc->dev, &ptm_tc->napi_rx, tc_priv->tc_ops.napi_rx, NAPI_POLL_WEIGHT);
|
||||
+ netif_tx_napi_add(ptm_tc->dev, &ptm_tc->napi_tx, tc_priv->tc_ops.napi_tx, NAPI_POLL_WEIGHT);
|
||||
+
|
||||
+#endif
|
||||
err = register_netdev(ptm_tc->dev);
|
||||
if (err)
|
||||
goto err1;
|
||||
@@ -2605,7 +2616,9 @@ static int ptm_ring_init(struct ptm_ep_p
|
||||
@@ -2618,7 +2634,9 @@ static int ptm_ring_init(struct ptm_ep_p
|
||||
{
|
||||
ptm_aca_ring_config_init(priv, id, bonding);
|
||||
return priv->tc_priv->tc_ops.dev_reg(priv->ptm_tc->dev,
|
||||
|
@ -388,7 +393,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -2960,7 +2973,9 @@ void ptm_tc_unload(enum dsl_tc_mode tc_m
|
||||
@@ -2973,7 +2991,9 @@ void ptm_tc_unload(enum dsl_tc_mode tc_m
|
||||
/* unregister device */
|
||||
if (ptm_tc->tc_priv->tc_ops.dev_unreg != NULL)
|
||||
ptm_tc->tc_priv->tc_ops.dev_unreg(ptm_tc->dev,
|
||||
|
@ -399,7 +404,7 @@
|
|||
|
||||
/* remove PTM callback function */
|
||||
ptm_cb_setup(ptm_tc, 0);
|
||||
@@ -2978,6 +2993,10 @@ void ptm_exit(void)
|
||||
@@ -2991,6 +3011,10 @@ void ptm_exit(void)
|
||||
|
||||
if (!priv)
|
||||
return;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/dcdp/ptm_tc.c
|
||||
+++ b/dcdp/ptm_tc.c
|
||||
@@ -298,15 +298,19 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
@@ -307,15 +307,19 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
)
|
||||
{
|
||||
struct rtnl_link_stats64 *stat;
|
||||
|
@ -21,7 +21,7 @@
|
|||
if (bonding)
|
||||
stats->tc_info = TC_PTM_BND_MODE;
|
||||
else
|
||||
@@ -340,11 +344,11 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
@@ -349,11 +353,11 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
? cur_cnt - last_cnt
|
||||
: cur_cnt + ((unsigned int)(-1) - last_cnt);
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
|||
|
||||
cur_cnt = tc_r32(GIF0_RX_CRC_ERR_CNT);
|
||||
last_cnt = priv->ptm_mib.rx_crc_err_pdu[0];
|
||||
@@ -358,7 +362,7 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
@@ -367,7 +371,7 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
? cur_cnt - last_cnt
|
||||
: cur_cnt + ((unsigned int)(-1) - last_cnt);
|
||||
|
||||
|
@ -45,7 +45,7 @@
|
|||
cur_cnt = sb_r32(__US_TC_LOCAL_Q_CFG_CTXT_BASE +
|
||||
offsetof(desq_cfg_ctxt_t, deq_pkt_cnt) / 4);
|
||||
last_cnt = priv->ptm_mib.tx_total_pdu[0];
|
||||
@@ -376,90 +380,108 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
@@ -385,90 +389,108 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||
/* For bonding information */
|
||||
if (bonding) {
|
||||
int i;
|
||||
|
|
|
@ -13,7 +13,8 @@ fixseama() {
|
|||
}
|
||||
|
||||
case "$board" in
|
||||
dlink,dir-885l)
|
||||
dlink,dir-885l | \
|
||||
dlink,dir-890l)
|
||||
fixseama
|
||||
;;
|
||||
*)
|
||||
|
|
|
@ -37,6 +37,7 @@ platform_expected_image() {
|
|||
|
||||
case "$machine" in
|
||||
"dlink,dir-885l") echo "seamaseal wrgac42_dlink.2015_dir885l"; return;;
|
||||
"dlink,dir-890l") echo "seamaseal wrgac36_dlink.2013gui_dir890"; return;;
|
||||
"luxul,abr-4500-v1") echo "lxl ABR-4500"; return;;
|
||||
"luxul,xap-810-v1") echo "lxl XAP-810"; return;;
|
||||
"luxul,xap-1410-v1") echo "lxl XAP-1410"; return;;
|
||||
|
|
|
@ -88,6 +88,12 @@ define Build/luxul-lxl
|
|||
mv $@.new $@
|
||||
endef
|
||||
|
||||
# Outputs a lzma compressed U-Boot that start at 0x00008000
|
||||
# just like the D-Link boot loaders expect
|
||||
define Build/dlink-uboot-bin
|
||||
$(STAGING_DIR_HOST)/bin/lzma e $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-u-boot.bin -d16 $@
|
||||
endef
|
||||
|
||||
define Build/seama-nand
|
||||
# Seama entity
|
||||
$(STAGING_DIR_HOST)/bin/oseama \
|
||||
|
@ -274,6 +280,21 @@ define Device/dlink_dir-885l
|
|||
endef
|
||||
TARGET_DEVICES += dlink_dir-885l
|
||||
|
||||
define Device/dlink_dir-890l
|
||||
DEVICE_VENDOR := D-Link
|
||||
DEVICE_MODEL := DIR-890L
|
||||
DEVICE_PACKAGES := $(BRCMFMAC_43602A1) $(USB2_PACKAGES) $(USB3_PACKAGES)
|
||||
# Layout: U-boot (128kb max) followed by kernel and appended DTB.
|
||||
# This is done because the boot loader will only read the first 2 MB
|
||||
# from the flash and decompress the LZMA it finds there after the
|
||||
# SEAMA header. Since the compressed kernel will not fit in 2 MB,
|
||||
# we put U-Boot there and let U-Boot read and execute the kernel.
|
||||
KERNEL := dlink-uboot-bin | pad-to 128k | append-kernel | append-dtb
|
||||
$(Device/dlink)
|
||||
SIGNATURE := wrgac36_dlink.2013gui_dir890
|
||||
endef
|
||||
TARGET_DEVICES += dlink_dir-890l
|
||||
|
||||
define Device/dlink_dwl-8610ap
|
||||
DEVICE_VENDOR := D-Link
|
||||
DEVICE_MODEL := DWL-8610AP
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
From 8110437e59616293228cd781c486d8495a61e36a Mon Sep 17 00:00:00 2001
|
||||
From: Yan Cangang <nalanzeyu@gmail.com>
|
||||
Date: Sun, 20 Nov 2022 13:52:58 +0800
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix resource leak in error path
|
||||
|
||||
In mtk_probe(), when mtk_ppe_init() or mtk_eth_offload_init() failed,
|
||||
mtk_mdio_cleanup() isn't called. Fix it.
|
||||
|
||||
Fixes: ba37b7caf1ed ("net: ethernet: mtk_eth_soc: add support for initializing the PPE")
|
||||
Fixes: 502e84e2382d ("net: ethernet: mtk_eth_soc: add flow offloading support")
|
||||
Signed-off-by: Yan Cangang <nalanzeyu@gmail.com>
|
||||
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4087,13 +4087,13 @@ static int mtk_probe(struct platform_dev
|
||||
eth->soc->offload_version, i);
|
||||
if (!eth->ppe[i]) {
|
||||
err = -ENOMEM;
|
||||
- goto err_free_dev;
|
||||
+ goto err_deinit_mdio;
|
||||
}
|
||||
}
|
||||
|
||||
err = mtk_eth_offload_init(eth);
|
||||
if (err)
|
||||
- goto err_free_dev;
|
||||
+ goto err_deinit_mdio;
|
||||
}
|
||||
|
||||
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
|
@ -0,0 +1,107 @@
|
|||
From 603ea5e7ffa73c7fac07d8713d97285990695213 Mon Sep 17 00:00:00 2001
|
||||
From: Yan Cangang <nalanzeyu@gmail.com>
|
||||
Date: Sun, 20 Nov 2022 13:52:59 +0800
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix memory leak in error path
|
||||
|
||||
In mtk_ppe_init(), when dmam_alloc_coherent() or devm_kzalloc() failed,
|
||||
the rhashtable ppe->l2_flows isn't destroyed. Fix it.
|
||||
|
||||
In mtk_probe(), when mtk_ppe_init() or mtk_eth_offload_init() or
|
||||
register_netdev() failed, have the same problem. Fix it.
|
||||
|
||||
Fixes: 33fc42de3327 ("net: ethernet: mtk_eth_soc: support creating mac address based offload entries")
|
||||
Signed-off-by: Yan Cangang <nalanzeyu@gmail.com>
|
||||
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 9 +++++----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 19 +++++++++++++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 1 +
|
||||
3 files changed, 23 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4087,13 +4087,13 @@ static int mtk_probe(struct platform_dev
|
||||
eth->soc->offload_version, i);
|
||||
if (!eth->ppe[i]) {
|
||||
err = -ENOMEM;
|
||||
- goto err_deinit_mdio;
|
||||
+ goto err_deinit_ppe;
|
||||
}
|
||||
}
|
||||
|
||||
err = mtk_eth_offload_init(eth);
|
||||
if (err)
|
||||
- goto err_deinit_mdio;
|
||||
+ goto err_deinit_ppe;
|
||||
}
|
||||
|
||||
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
@@ -4103,7 +4103,7 @@ static int mtk_probe(struct platform_dev
|
||||
err = register_netdev(eth->netdev[i]);
|
||||
if (err) {
|
||||
dev_err(eth->dev, "error bringing up device\n");
|
||||
- goto err_deinit_mdio;
|
||||
+ goto err_deinit_ppe;
|
||||
} else
|
||||
netif_info(eth, probe, eth->netdev[i],
|
||||
"mediatek frame engine at 0x%08lx, irq %d\n",
|
||||
@@ -4123,7 +4123,8 @@ static int mtk_probe(struct platform_dev
|
||||
|
||||
return 0;
|
||||
|
||||
-err_deinit_mdio:
|
||||
+err_deinit_ppe:
|
||||
+ mtk_ppe_deinit(eth);
|
||||
mtk_mdio_cleanup(eth);
|
||||
err_free_dev:
|
||||
mtk_free_dev(eth);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -743,7 +743,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
MTK_PPE_ENTRIES * soc->foe_entry_size,
|
||||
&ppe->foe_phys, GFP_KERNEL);
|
||||
if (!foe)
|
||||
- return NULL;
|
||||
+ goto err_free_l2_flows;
|
||||
|
||||
ppe->foe_table = foe;
|
||||
|
||||
@@ -751,11 +751,26 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
sizeof(*ppe->foe_flow);
|
||||
ppe->foe_flow = devm_kzalloc(dev, foe_flow_size, GFP_KERNEL);
|
||||
if (!ppe->foe_flow)
|
||||
- return NULL;
|
||||
+ goto err_free_l2_flows;
|
||||
|
||||
mtk_ppe_debugfs_init(ppe, index);
|
||||
|
||||
return ppe;
|
||||
+
|
||||
+err_free_l2_flows:
|
||||
+ rhashtable_destroy(&ppe->l2_flows);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+void mtk_ppe_deinit(struct mtk_eth *eth)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(eth->ppe); i++) {
|
||||
+ if (!eth->ppe[i])
|
||||
+ return;
|
||||
+ rhashtable_destroy(ð->ppe[i]->l2_flows);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void mtk_ppe_init_foe_table(struct mtk_ppe *ppe)
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -304,6 +304,7 @@ struct mtk_ppe {
|
||||
|
||||
struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base,
|
||||
int version, int index);
|
||||
+void mtk_ppe_deinit(struct mtk_eth *eth);
|
||||
void mtk_ppe_start(struct mtk_ppe *ppe);
|
||||
int mtk_ppe_stop(struct mtk_ppe *ppe);
|
||||
|
|
@ -237,8 +237,8 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||
{
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -306,6 +306,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
int version, int index);
|
||||
@@ -307,6 +307,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
void mtk_ppe_deinit(struct mtk_eth *eth);
|
||||
void mtk_ppe_start(struct mtk_ppe *ppe);
|
||||
int mtk_ppe_stop(struct mtk_ppe *ppe);
|
||||
+int mtk_ppe_prepare_reset(struct mtk_ppe *ppe);
|
||||
|
|
|
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4421,7 +4421,7 @@ static const struct mtk_soc_data mt7621_
|
||||
@@ -4422,7 +4422,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7621_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
|
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
.hash_offset = 2,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
.txrx = {
|
||||
@@ -4460,7 +4460,7 @@ static const struct mtk_soc_data mt7623_
|
||||
@@ -4461,7 +4461,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
|
|
|
@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
#define MTK_FOE_IB2_DEST_PORT_V2 GENMASK(12, 9)
|
||||
#define MTK_FOE_IB2_MULTICAST_V2 BIT(13)
|
||||
#define MTK_FOE_IB2_WDMA_WINFO_V2 BIT(19)
|
||||
@@ -351,6 +353,8 @@ int mtk_foe_entry_set_pppoe(struct mtk_e
|
||||
@@ -352,6 +354,8 @@ int mtk_foe_entry_set_pppoe(struct mtk_e
|
||||
int sid);
|
||||
int mtk_foe_entry_set_wdma(struct mtk_eth *eth, struct mtk_foe_entry *entry,
|
||||
int wdma_idx, int txq, int bss, int wcid);
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 27 Oct 2022 23:39:52 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: compile out netsys v2 code
|
||||
on mt7621
|
||||
|
||||
Avoid some branches in the hot path on low-end devices with limited CPU power,
|
||||
and reduce code size
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -917,7 +917,13 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
|
||||
(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
|
||||
|
||||
-#define MTK_HAS_CAPS(caps, _x) (((caps) & (_x)) == (_x))
|
||||
+#ifdef CONFIG_SOC_MT7621
|
||||
+#define MTK_CAP_MASK MTK_NETSYS_V2
|
||||
+#else
|
||||
+#define MTK_CAP_MASK 0
|
||||
+#endif
|
||||
+
|
||||
+#define MTK_HAS_CAPS(caps, _x) (((caps) & (_x) & ~(MTK_CAP_MASK)) == (_x))
|
||||
|
||||
#define MT7621_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
|
||||
MTK_GMAC2_RGMII | MTK_SHARED_INT | \
|
|
@ -181,7 +181,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/* CDMP Ingress Control Register */
|
||||
#define MTK_CDMP_IG_CTRL 0x400
|
||||
#define MTK_CDMP_STAG_EN BIT(0)
|
||||
@@ -1166,6 +1172,8 @@ struct mtk_eth {
|
||||
@@ -1160,6 +1166,8 @@ struct mtk_eth {
|
||||
|
||||
int ip_align;
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1070,11 +1070,13 @@ struct mtk_soc_data {
|
||||
@@ -1064,11 +1064,13 @@ struct mtk_soc_data {
|
||||
* @regmap: The register map pointing at the range used to setup
|
||||
* SGMII modes
|
||||
* @ana_rgc3: The offset refers to register ANA_RGC3 related to regmap
|
||||
|
|
|
@ -51,7 +51,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
mtk_eth_path_name(path), __func__, updated);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4748,6 +4748,26 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -4749,6 +4749,26 @@ static const struct mtk_soc_data mt7629_
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
static const struct mtk_soc_data mt7986_data = {
|
||||
.reg_map = &mt7986_reg_map,
|
||||
.ana_rgc3 = 0x128,
|
||||
@@ -4790,6 +4810,7 @@ const struct of_device_id of_mtk_match[]
|
||||
@@ -4791,6 +4811,7 @@ const struct of_device_id of_mtk_match[]
|
||||
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
||||
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
||||
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
||||
|
@ -145,7 +145,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
||||
BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
||||
@@ -963,6 +987,11 @@ enum mkt_eth_capabilities {
|
||||
@@ -957,6 +981,11 @@ enum mkt_eth_capabilities {
|
||||
MTK_MUX_U3_GMAC2_TO_QPHY | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
|
||||
|
||||
|
@ -157,7 +157,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
@@ -1076,12 +1105,14 @@ struct mtk_soc_data {
|
||||
@@ -1070,12 +1099,14 @@ struct mtk_soc_data {
|
||||
* @ana_rgc3: The offset refers to register ANA_RGC3 related to regmap
|
||||
* @interface: Currently configured interface mode
|
||||
* @pcs: Phylink PCS structure
|
||||
|
|
|
@ -151,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
}
|
||||
|
||||
if (eth->soc->offload_version) {
|
||||
@@ -4648,6 +4685,8 @@ err_deinit_hw:
|
||||
@@ -4649,6 +4686,8 @@ err_deinit_hw:
|
||||
mtk_hw_deinit(eth);
|
||||
err_wed_exit:
|
||||
mtk_wed_exit();
|
||||
|
@ -228,7 +228,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
/* Infrasys subsystem config registers */
|
||||
#define INFRA_MISC2 0x70c
|
||||
#define CO_QPHY_SEL BIT(0)
|
||||
@@ -1105,31 +1046,6 @@ struct mtk_soc_data {
|
||||
@@ -1099,31 +1040,6 @@ struct mtk_soc_data {
|
||||
/* currently no SoC has more than 2 macs */
|
||||
#define MTK_MAX_DEVS 2
|
||||
|
||||
|
@ -260,7 +260,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
/* struct mtk_eth - This is the main datasructure for holding the state
|
||||
* of the driver
|
||||
* @dev: The device pointer
|
||||
@@ -1149,6 +1065,7 @@ struct mtk_sgmii {
|
||||
@@ -1143,6 +1059,7 @@ struct mtk_sgmii {
|
||||
* MII modes
|
||||
* @infra: The register map pointing at the range used to setup
|
||||
* SGMII and GePHY path
|
||||
|
@ -268,7 +268,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
* @pctl: The register map pointing at the range used to setup
|
||||
* GMAC port drive/slew values
|
||||
* @dma_refcnt: track how many netdevs are using the DMA engine
|
||||
@@ -1189,8 +1106,8 @@ struct mtk_eth {
|
||||
@@ -1183,8 +1100,8 @@ struct mtk_eth {
|
||||
u32 msg_enable;
|
||||
unsigned long sysclk;
|
||||
struct regmap *ethsys;
|
||||
|
@ -279,7 +279,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
struct regmap *pctl;
|
||||
bool hwlro;
|
||||
refcount_t dma_refcnt;
|
||||
@@ -1352,10 +1269,6 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
@@ -1346,10 +1263,6 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
|
||||
u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -523,6 +523,7 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
@@ -464,6 +464,7 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
hwe->ib1 &= ~MTK_FOE_IB1_STATE;
|
||||
hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID);
|
||||
dma_wmb();
|
|
@ -53,7 +53,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4689,8 +4689,8 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4635,8 +4635,8 @@ static int mtk_probe(struct platform_dev
|
||||
for (i = 0; i < num_ppe; i++) {
|
||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||
|
||||
|
@ -64,7 +64,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
if (!eth->ppe[i]) {
|
||||
err = -ENOMEM;
|
||||
goto err_deinit_ppe;
|
||||
@@ -4816,6 +4816,7 @@ static const struct mtk_soc_data mt7622_
|
||||
@@ -4762,6 +4762,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
|
@ -72,7 +72,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
@@ -4853,6 +4854,7 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -4799,6 +4800,7 @@ static const struct mtk_soc_data mt7629_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7629_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
|
@ -80,7 +80,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4873,6 +4875,7 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -4819,6 +4821,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
|
@ -88,8 +88,8 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
@@ -4892,6 +4895,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.required_pctl = false,
|
||||
@@ -4839,6 +4842,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
+ .has_accounting = true,
|
||||
|
@ -98,7 +98,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1017,6 +1017,8 @@ struct mtk_reg_map {
|
||||
@@ -1008,6 +1008,8 @@ struct mtk_reg_map {
|
||||
* the extra setup for those pins used by GMAC.
|
||||
* @hash_offset Flow table hash offset.
|
||||
* @foe_entry_size Foe table entry size.
|
||||
|
@ -107,7 +107,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
* @txd_size Tx DMA descriptor size.
|
||||
* @rxd_size Rx DMA descriptor size.
|
||||
* @rx_irq_done_mask Rx irq done register mask.
|
||||
@@ -1034,6 +1036,7 @@ struct mtk_soc_data {
|
||||
@@ -1025,6 +1027,7 @@ struct mtk_soc_data {
|
||||
u8 hash_offset;
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
|
@ -166,7 +166,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
static void mtk_ppe_cache_clear(struct mtk_ppe *ppe)
|
||||
{
|
||||
ppe_set(ppe, MTK_PPE_CACHE_CTL, MTK_PPE_CACHE_CTL_CLEAR);
|
||||
@@ -459,6 +501,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
@@ -465,6 +507,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID);
|
||||
dma_wmb();
|
||||
mtk_ppe_cache_clear(ppe);
|
||||
|
@ -180,7 +180,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
}
|
||||
entry->hash = 0xffff;
|
||||
|
||||
@@ -566,6 +615,9 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -572,6 +621,9 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
wmb();
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
||||
|
@ -190,7 +190,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
dma_wmb();
|
||||
|
||||
mtk_ppe_cache_clear(ppe);
|
||||
@@ -757,11 +809,39 @@ int mtk_ppe_prepare_reset(struct mtk_ppe
|
||||
@@ -763,11 +815,39 @@ int mtk_ppe_prepare_reset(struct mtk_ppe
|
||||
return mtk_ppe_wait_busy(ppe);
|
||||
}
|
||||
|
||||
|
@ -232,7 +232,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
struct mtk_ppe *ppe;
|
||||
u32 foe_flow_size;
|
||||
void *foe;
|
||||
@@ -778,7 +858,8 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
@@ -784,7 +864,8 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
ppe->base = base;
|
||||
ppe->eth = eth;
|
||||
ppe->dev = dev;
|
||||
|
@ -242,7 +242,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
|
||||
foe = dmam_alloc_coherent(ppe->dev,
|
||||
MTK_PPE_ENTRIES * soc->foe_entry_size,
|
||||
@@ -794,6 +875,23 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
@@ -800,6 +881,23 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
if (!ppe->foe_flow)
|
||||
goto err_free_l2_flows;
|
||||
|
||||
|
@ -266,7 +266,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
mtk_ppe_debugfs_init(ppe, index);
|
||||
|
||||
return ppe;
|
||||
@@ -923,6 +1021,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
@@ -929,6 +1027,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT1, 0xcb777);
|
||||
ppe_w32(ppe, MTK_PPE_SBW_CTRL, 0x7f);
|
||||
}
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -640,6 +640,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -605,6 +605,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
struct mtk_eth *eth = ppe->eth;
|
||||
u16 timestamp = mtk_eth_timestamp(eth);
|
||||
struct mtk_foe_entry *hwe;
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
entry->ib1 &= ~MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
@@ -656,8 +657,13 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -621,8 +622,13 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
wmb();
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From b804f765485109f9644cc05d1e8fc79ca6c6e4aa Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Wed, 19 Jul 2023 01:39:36 +0100
|
||||
Subject: [PATCH 094/250] net: ethernet: mtk_eth_soc: always
|
||||
mtk_get_ib1_pkt_type
|
||||
|
||||
entries and bind debugfs files would display wrong data on NETSYS_V2 and
|
||||
later because instead of using mtk_get_ib1_pkt_type the driver would use
|
||||
MTK_FOE_IB1_PACKET_TYPE which corresponds to NETSYS_V1(.x) SoCs.
|
||||
Use mtk_get_ib1_pkt_type so entries and bind records display correctly.
|
||||
|
||||
Fixes: 03a3180e5c09e ("net: ethernet: mtk_eth_soc: introduce flow offloading support for mt7986")
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/c0ae03d0182f4d27b874cbdf0059bc972c317f3c.1689727134.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
|
||||
@@ -98,7 +98,7 @@ mtk_ppe_debugfs_foe_show(struct seq_file
|
||||
|
||||
acct = mtk_foe_entry_get_mib(ppe, i, NULL);
|
||||
|
||||
- type = FIELD_GET(MTK_FOE_IB1_PACKET_TYPE, entry->ib1);
|
||||
+ type = mtk_get_ib1_pkt_type(ppe->eth, entry->ib1);
|
||||
seq_printf(m, "%05x %s %7s", i,
|
||||
mtk_foe_entry_state_str(state),
|
||||
mtk_foe_pkt_type_str(type));
|
|
@ -0,0 +1,78 @@
|
|||
From 5ea0e1312bcfebc06b5f91d1bb82b823d6395125 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Wed, 19 Jul 2023 12:29:49 +0200
|
||||
Subject: [PATCH 095/250] net: ethernet: mtk_ppe: add MTK_FOE_ENTRY_V{1,2}_SIZE
|
||||
macros
|
||||
|
||||
Introduce MTK_FOE_ENTRY_V{1,2}_SIZE macros in order to make more
|
||||
explicit foe_entry size for different chipset revisions.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Reviewed-by: Simon Horman <simon.horman@corigine.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 +++++-----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 3 +++
|
||||
2 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4711,7 +4711,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.required_pctl = false,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4732,7 +4732,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4751,7 +4751,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.required_pctl = true,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4789,8 +4789,8 @@ static const struct mtk_soc_data mt7981_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
.has_accounting = true,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
@@ -4810,8 +4810,8 @@ static const struct mtk_soc_data mt7986_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
.has_accounting = true,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -216,6 +216,9 @@ struct mtk_foe_ipv6_6rd {
|
||||
struct mtk_foe_mac_info l2;
|
||||
};
|
||||
|
||||
+#define MTK_FOE_ENTRY_V1_SIZE 80
|
||||
+#define MTK_FOE_ENTRY_V2_SIZE 96
|
||||
+
|
||||
struct mtk_foe_entry {
|
||||
u32 ib1;
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
From 8cfa2576d79f9379d167a8994f0fca935c07a8bc Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Sat, 22 Jul 2023 21:32:49 +0100
|
||||
Subject: [PATCH 096/250] net: ethernet: mtk_eth_soc: remove incorrect PLL
|
||||
configuration
|
||||
|
||||
MT7623 GMAC0 attempts to configure the system clocking according to the
|
||||
required speed in the .mac_config callback for non-SGMII, non-baseX and
|
||||
non-TRGMII modes.
|
||||
|
||||
state->speed setting has never been reliable in the .mac_config
|
||||
callback - there are cases where this is not the link speed,
|
||||
particularly via ethtool paths, so this has always been unreliable (as
|
||||
detailed in phylink's documentation.)
|
||||
|
||||
There is the additional issue that mtk_gmac0_rgmii_adjust() will only
|
||||
be called if state->interface changes, which means it only configures
|
||||
the system clocking on the very first .mac_config call, which will be
|
||||
made when the network device is first brought up before any link is
|
||||
established.
|
||||
|
||||
Essentially, this code is incredibly buggy, and probably never worked.
|
||||
|
||||
Moreover, checking the in-kernel DT files, it seems no platform makes
|
||||
use of this code path.
|
||||
|
||||
Therefore, let's remove it, and disable interface modes for port 0 that
|
||||
are not SGMII, 1000base-X, 2500base-X or TRGMII on the MT7623.
|
||||
|
||||
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 54 ++++++---------------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
|
||||
2 files changed, 17 insertions(+), 38 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -309,7 +309,7 @@ static int mt7621_gmac0_rgmii_adjust(str
|
||||
}
|
||||
|
||||
static void mtk_gmac0_rgmii_adjust(struct mtk_eth *eth,
|
||||
- phy_interface_t interface, int speed)
|
||||
+ phy_interface_t interface)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
@@ -323,26 +323,7 @@ static void mtk_gmac0_rgmii_adjust(struc
|
||||
return;
|
||||
}
|
||||
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- INTF_MODE_RGMII_1000 : INTF_MODE_RGMII_10_100;
|
||||
- mtk_w32(eth, val, INTF_MODE);
|
||||
-
|
||||
- regmap_update_bits(eth->ethsys, ETHSYS_CLKCFG0,
|
||||
- ETHSYS_TRGMII_CLK_SEL362_5,
|
||||
- ETHSYS_TRGMII_CLK_SEL362_5);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ? 250000000 : 500000000;
|
||||
- ret = clk_set_rate(eth->clks[MTK_CLK_TRGPLL], val);
|
||||
- if (ret)
|
||||
- dev_err(eth->dev, "Failed to set trgmii pll: %d\n", ret);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- RCK_CTRL_RGMII_1000 : RCK_CTRL_RGMII_10_100;
|
||||
- mtk_w32(eth, val, TRGMII_RCK_CTRL);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- TCK_CTRL_RGMII_1000 : TCK_CTRL_RGMII_10_100;
|
||||
- mtk_w32(eth, val, TRGMII_TCK_CTRL);
|
||||
+ dev_err(eth->dev, "Missing PLL configuration, ethernet may not work\n");
|
||||
}
|
||||
|
||||
static struct phylink_pcs *mtk_mac_select_pcs(struct phylink_config *config,
|
||||
@@ -428,17 +409,8 @@ static void mtk_mac_config(struct phylin
|
||||
state->interface))
|
||||
goto err_phy;
|
||||
} else {
|
||||
- /* FIXME: this is incorrect. Not only does it
|
||||
- * use state->speed (which is not guaranteed
|
||||
- * to be correct) but it also makes use of it
|
||||
- * in a code path that will only be reachable
|
||||
- * when the PHY interface mode changes, not
|
||||
- * when the speed changes. Consequently, RGMII
|
||||
- * is probably broken.
|
||||
- */
|
||||
mtk_gmac0_rgmii_adjust(mac->hw,
|
||||
- state->interface,
|
||||
- state->speed);
|
||||
+ state->interface);
|
||||
|
||||
/* mt7623_pad_clk_setup */
|
||||
for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
|
||||
@@ -4286,13 +4258,19 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
||||
|
||||
- __set_bit(PHY_INTERFACE_MODE_MII,
|
||||
- mac->phylink_config.supported_interfaces);
|
||||
- __set_bit(PHY_INTERFACE_MODE_GMII,
|
||||
- mac->phylink_config.supported_interfaces);
|
||||
+ /* MT7623 gmac0 is now missing its speed-specific PLL configuration
|
||||
+ * in its .mac_config method (since state->speed is not valid there.
|
||||
+ * Disable support for MII, GMII and RGMII.
|
||||
+ */
|
||||
+ if (!mac->hw->soc->disable_pll_modes || mac->id != 0) {
|
||||
+ __set_bit(PHY_INTERFACE_MODE_MII,
|
||||
+ mac->phylink_config.supported_interfaces);
|
||||
+ __set_bit(PHY_INTERFACE_MODE_GMII,
|
||||
+ mac->phylink_config.supported_interfaces);
|
||||
|
||||
- if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII))
|
||||
- phy_interface_set_rgmii(mac->phylink_config.supported_interfaces);
|
||||
+ if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII))
|
||||
+ phy_interface_set_rgmii(mac->phylink_config.supported_interfaces);
|
||||
+ }
|
||||
|
||||
if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && !mac->id)
|
||||
__set_bit(PHY_INTERFACE_MODE_TRGMII,
|
||||
@@ -4752,6 +4730,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
+ .disable_pll_modes = true,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1027,6 +1027,7 @@ struct mtk_soc_data {
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
bool has_accounting;
|
||||
+ bool disable_pll_modes;
|
||||
struct {
|
||||
u32 txd_size;
|
||||
u32 rxd_size;
|
|
@ -0,0 +1,81 @@
|
|||
From a4c2233b1e4359b6c64b6f9ba98c8718a11fffee Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Sat, 22 Jul 2023 21:32:54 +0100
|
||||
Subject: [PATCH 097/250] net: ethernet: mtk_eth_soc: remove mac_pcs_get_state
|
||||
and modernise
|
||||
|
||||
Remove the .mac_pcs_get_state function, since as far as I can tell is
|
||||
never called - no DT appears to specify an in-band-status management
|
||||
nor SFP support for this driver.
|
||||
|
||||
Removal of this, along with the previous patch to remove the incorrect
|
||||
clocking configuration, means that the driver becomes non-legacy, so
|
||||
we can remove the "legacy_pre_march2020" status from this driver.
|
||||
|
||||
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 35 ---------------------
|
||||
1 file changed, 35 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -512,38 +512,6 @@ static int mtk_mac_finish(struct phylink
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void mtk_mac_pcs_get_state(struct phylink_config *config,
|
||||
- struct phylink_link_state *state)
|
||||
-{
|
||||
- struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
||||
- phylink_config);
|
||||
- u32 pmsr = mtk_r32(mac->hw, MTK_MAC_MSR(mac->id));
|
||||
-
|
||||
- state->link = (pmsr & MAC_MSR_LINK);
|
||||
- state->duplex = (pmsr & MAC_MSR_DPX) >> 1;
|
||||
-
|
||||
- switch (pmsr & (MAC_MSR_SPEED_1000 | MAC_MSR_SPEED_100)) {
|
||||
- case 0:
|
||||
- state->speed = SPEED_10;
|
||||
- break;
|
||||
- case MAC_MSR_SPEED_100:
|
||||
- state->speed = SPEED_100;
|
||||
- break;
|
||||
- case MAC_MSR_SPEED_1000:
|
||||
- state->speed = SPEED_1000;
|
||||
- break;
|
||||
- default:
|
||||
- state->speed = SPEED_UNKNOWN;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- state->pause &= (MLO_PAUSE_RX | MLO_PAUSE_TX);
|
||||
- if (pmsr & MAC_MSR_RX_FC)
|
||||
- state->pause |= MLO_PAUSE_RX;
|
||||
- if (pmsr & MAC_MSR_TX_FC)
|
||||
- state->pause |= MLO_PAUSE_TX;
|
||||
-}
|
||||
-
|
||||
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@@ -666,7 +634,6 @@ static void mtk_mac_link_up(struct phyli
|
||||
static const struct phylink_mac_ops mtk_phylink_ops = {
|
||||
.validate = phylink_generic_validate,
|
||||
.mac_select_pcs = mtk_mac_select_pcs,
|
||||
- .mac_pcs_get_state = mtk_mac_pcs_get_state,
|
||||
.mac_config = mtk_mac_config,
|
||||
.mac_finish = mtk_mac_finish,
|
||||
.mac_link_down = mtk_mac_link_down,
|
||||
@@ -4253,8 +4220,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
|
||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||
- /* This driver makes use of state->speed in mac_config */
|
||||
- mac->phylink_config.legacy_pre_march2020 = true;
|
||||
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
||||
|
|
@ -0,0 +1,550 @@
|
|||
From 5d8d05fbf804b4485646d39551ac27452e45afd3 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 25 Jul 2023 01:52:02 +0100
|
||||
Subject: [PATCH 099/250] net: ethernet: mtk_eth_soc: add version in
|
||||
mtk_soc_data
|
||||
|
||||
Introduce version field in mtk_soc_data data structure in order to
|
||||
make mtk_eth driver easier to maintain for chipset configuration
|
||||
codebase. Get rid of MTK_NETSYS_V2 bit in chip capabilities.
|
||||
This is a preliminary patch to introduce support for MT7988 SoC.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/e52fae302ca135436e5cdd26d38d87be2da63055.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 55 +++++++++++--------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 36 +++++++-----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 18 +++---
|
||||
.../net/ethernet/mediatek/mtk_ppe_offload.c | 2 +-
|
||||
drivers/net/ethernet/mediatek/mtk_wed.c | 4 +-
|
||||
5 files changed, 66 insertions(+), 49 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -537,7 +537,7 @@ static void mtk_set_queue_speed(struct m
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v1(eth))
|
||||
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
||||
|
||||
if (IS_ENABLED(CONFIG_SOC_MT7621)) {
|
||||
@@ -912,7 +912,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
||||
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
||||
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
||||
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
|
||||
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
|
||||
}
|
||||
@@ -970,7 +970,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
|
||||
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
||||
txd->txd4 = 0;
|
||||
- if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
txd->txd5 = 0;
|
||||
txd->txd6 = 0;
|
||||
txd->txd7 = 0;
|
||||
@@ -1159,7 +1159,7 @@ static void mtk_tx_set_dma_desc(struct n
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mtk_tx_set_dma_desc_v2(dev, txd, info);
|
||||
else
|
||||
mtk_tx_set_dma_desc_v1(dev, txd, info);
|
||||
@@ -1466,7 +1466,7 @@ static void mtk_update_rx_cpu_idx(struct
|
||||
|
||||
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
||||
{
|
||||
- return MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2);
|
||||
+ return eth->soc->version == 2;
|
||||
}
|
||||
|
||||
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
|
||||
@@ -1806,7 +1806,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
break;
|
||||
|
||||
/* find out which mac the packet come from. values start at 1 */
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
|
||||
else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||
@@ -1902,7 +1902,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb->dev = netdev;
|
||||
bytes += skb->len;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
||||
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
||||
if (hash != MTK_RXD5_FOE_ENTRY)
|
||||
@@ -1927,8 +1927,8 @@ static int mtk_poll_rx(struct napi_struc
|
||||
/* When using VLAN untagging in combination with DSA, the
|
||||
* hardware treats the MTK special tag as a VLAN and untags it.
|
||||
*/
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
|
||||
- (trxd.rxd2 & RX_DMA_VTAG) && netdev_uses_dsa(netdev)) {
|
||||
+ if (mtk_is_netsys_v1(eth) && (trxd.rxd2 & RX_DMA_VTAG) &&
|
||||
+ netdev_uses_dsa(netdev)) {
|
||||
unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
|
||||
|
||||
if (port < ARRAY_SIZE(eth->dsa_meta) &&
|
||||
@@ -2232,7 +2232,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
txd->txd2 = next_ptr;
|
||||
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
||||
txd->txd4 = 0;
|
||||
- if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
txd->txd5 = 0;
|
||||
txd->txd6 = 0;
|
||||
txd->txd7 = 0;
|
||||
@@ -2285,14 +2285,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v1(eth))
|
||||
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
|
||||
ofs += MTK_QTX_OFFSET;
|
||||
}
|
||||
val = MTK_QDMA_TX_SCH_MAX_WFQ | (MTK_QDMA_TX_SCH_MAX_WFQ << 16);
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate + 4);
|
||||
} else {
|
||||
mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
|
||||
@@ -2419,7 +2419,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
|
||||
rxd->rxd3 = 0;
|
||||
rxd->rxd4 = 0;
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
rxd->rxd5 = 0;
|
||||
rxd->rxd6 = 0;
|
||||
rxd->rxd7 = 0;
|
||||
@@ -2967,7 +2967,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
|
||||
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
|
||||
MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
|
||||
MTK_CHK_DDONE_EN | MTK_LEAKY_BUCKET_EN;
|
||||
@@ -3111,7 +3111,7 @@ static int mtk_open(struct net_device *d
|
||||
phylink_start(mac->phylink);
|
||||
netif_tx_start_all_queues(dev);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return 0;
|
||||
|
||||
if (mtk_uses_dsa(dev) && !eth->prog) {
|
||||
@@ -3376,7 +3376,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
{
|
||||
u32 val;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
|
||||
val = RSTCTRL_PPE0_V2;
|
||||
} else {
|
||||
@@ -3388,7 +3388,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
|
||||
ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||
0x3ffffff);
|
||||
}
|
||||
@@ -3414,7 +3414,7 @@ static void mtk_hw_warm_reset(struct mtk
|
||||
return;
|
||||
}
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
|
||||
else
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
|
||||
@@ -3584,7 +3584,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
else
|
||||
mtk_hw_reset(eth);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
/* Set FE to PDMAv2 if necessary */
|
||||
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
||||
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
||||
@@ -3621,7 +3621,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
*/
|
||||
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
|
||||
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v1(eth)) {
|
||||
val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
|
||||
mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
|
||||
|
||||
@@ -3643,7 +3643,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||
|
||||
@@ -4432,7 +4432,7 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
err = -EINVAL;
|
||||
@@ -4540,9 +4540,8 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
|
||||
if (eth->soc->offload_version) {
|
||||
- u32 num_ppe;
|
||||
+ u32 num_ppe = mtk_is_netsys_v2_or_greater(eth) ? 2 : 1;
|
||||
|
||||
- num_ppe = MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ? 2 : 1;
|
||||
num_ppe = min_t(u32, ARRAY_SIZE(eth->ppe), num_ppe);
|
||||
for (i = 0; i < num_ppe; i++) {
|
||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||
@@ -4636,6 +4635,7 @@ static const struct mtk_soc_data mt2701_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4652,6 +4652,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7621_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -4672,6 +4673,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7622_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
@@ -4692,6 +4694,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
+ .version = 1,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -4714,6 +4717,7 @@ static const struct mtk_soc_data mt7629_
|
||||
.required_clks = MT7629_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
.has_accounting = true,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4731,6 +4735,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7981_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 2,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
@@ -4752,6 +4757,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7986_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 2,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
@@ -4772,6 +4778,7 @@ static const struct mtk_soc_data rt5350_
|
||||
.hw_features = MTK_HW_FEATURES_MT7628,
|
||||
.required_clks = MT7628_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -817,7 +817,6 @@ enum mkt_eth_capabilities {
|
||||
MTK_SHARED_INT_BIT,
|
||||
MTK_TRGMII_MT7621_CLK_BIT,
|
||||
MTK_QDMA_BIT,
|
||||
- MTK_NETSYS_V2_BIT,
|
||||
MTK_SOC_MT7628_BIT,
|
||||
MTK_RSTCTRL_PPE1_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
@@ -852,7 +851,6 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
|
||||
#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
|
||||
#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
||||
-#define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
|
||||
#define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
|
||||
#define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT)
|
||||
@@ -931,11 +929,11 @@ enum mkt_eth_capabilities {
|
||||
#define MT7981_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
|
||||
- MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1)
|
||||
|
||||
#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
- MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1)
|
||||
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
||||
@@ -1006,6 +1004,7 @@ struct mtk_reg_map {
|
||||
* @required_pctl A bool value to show whether the SoC requires
|
||||
* the extra setup for those pins used by GMAC.
|
||||
* @hash_offset Flow table hash offset.
|
||||
+ * @version SoC version.
|
||||
* @foe_entry_size Foe table entry size.
|
||||
* @has_accounting Bool indicating support for accounting of
|
||||
* offloaded flows.
|
||||
@@ -1024,6 +1023,7 @@ struct mtk_soc_data {
|
||||
bool required_pctl;
|
||||
u8 offload_version;
|
||||
u8 hash_offset;
|
||||
+ u8 version;
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
bool has_accounting;
|
||||
@@ -1180,6 +1180,16 @@ struct mtk_mac {
|
||||
/* the struct describing the SoC. these are declared in the soc_xyz.c files */
|
||||
extern const struct of_device_id of_mtk_match[];
|
||||
|
||||
+static inline bool mtk_is_netsys_v1(struct mtk_eth *eth)
|
||||
+{
|
||||
+ return eth->soc->version == 1;
|
||||
+}
|
||||
+
|
||||
+static inline bool mtk_is_netsys_v2_or_greater(struct mtk_eth *eth)
|
||||
+{
|
||||
+ return eth->soc->version > 1;
|
||||
+}
|
||||
+
|
||||
static inline struct mtk_foe_entry *
|
||||
mtk_foe_get_entry(struct mtk_ppe *ppe, u16 hash)
|
||||
{
|
||||
@@ -1190,7 +1200,7 @@ mtk_foe_get_entry(struct mtk_ppe *ppe, u
|
||||
|
||||
static inline u32 mtk_get_ib1_ts_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_TIMESTAMP;
|
||||
@@ -1198,7 +1208,7 @@ static inline u32 mtk_get_ib1_ts_mask(st
|
||||
|
||||
static inline u32 mtk_get_ib1_ppoe_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_PPPOE_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_PPPOE;
|
||||
@@ -1206,7 +1216,7 @@ static inline u32 mtk_get_ib1_ppoe_mask(
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_tag_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_VLAN_TAG_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_VLAN_TAG;
|
||||
@@ -1214,7 +1224,7 @@ static inline u32 mtk_get_ib1_vlan_tag_m
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_layer_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_VLAN_LAYER_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_VLAN_LAYER;
|
||||
@@ -1222,7 +1232,7 @@ static inline u32 mtk_get_ib1_vlan_layer
|
||||
|
||||
static inline u32 mtk_prep_ib1_vlan_layer(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_PREP(MTK_FOE_IB1_BIND_VLAN_LAYER_V2, val);
|
||||
|
||||
return FIELD_PREP(MTK_FOE_IB1_BIND_VLAN_LAYER, val);
|
||||
@@ -1230,7 +1240,7 @@ static inline u32 mtk_prep_ib1_vlan_laye
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_layer(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_GET(MTK_FOE_IB1_BIND_VLAN_LAYER_V2, val);
|
||||
|
||||
return FIELD_GET(MTK_FOE_IB1_BIND_VLAN_LAYER, val);
|
||||
@@ -1238,7 +1248,7 @@ static inline u32 mtk_get_ib1_vlan_layer
|
||||
|
||||
static inline u32 mtk_get_ib1_pkt_type_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_PACKET_TYPE_V2;
|
||||
|
||||
return MTK_FOE_IB1_PACKET_TYPE;
|
||||
@@ -1246,7 +1256,7 @@ static inline u32 mtk_get_ib1_pkt_type_m
|
||||
|
||||
static inline u32 mtk_get_ib1_pkt_type(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_GET(MTK_FOE_IB1_PACKET_TYPE_V2, val);
|
||||
|
||||
return FIELD_GET(MTK_FOE_IB1_PACKET_TYPE, val);
|
||||
@@ -1254,7 +1264,7 @@ static inline u32 mtk_get_ib1_pkt_type(s
|
||||
|
||||
static inline u32 mtk_get_ib2_multicast_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB2_MULTICAST_V2;
|
||||
|
||||
return MTK_FOE_IB2_MULTICAST;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -207,7 +207,7 @@ int mtk_foe_entry_prepare(struct mtk_eth
|
||||
|
||||
memset(entry, 0, sizeof(*entry));
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
val = FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_BIND) |
|
||||
FIELD_PREP(MTK_FOE_IB1_PACKET_TYPE_V2, type) |
|
||||
FIELD_PREP(MTK_FOE_IB1_UDP, l4proto == IPPROTO_UDP) |
|
||||
@@ -271,7 +271,7 @@ int mtk_foe_entry_set_pse_port(struct mt
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
u32 val = *ib2;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
val &= ~MTK_FOE_IB2_DEST_PORT_V2;
|
||||
val |= FIELD_PREP(MTK_FOE_IB2_DEST_PORT_V2, port);
|
||||
} else {
|
||||
@@ -422,7 +422,7 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
||||
struct mtk_foe_mac_info *l2 = mtk_foe_entry_l2(eth, entry);
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
||||
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
||||
MTK_FOE_IB2_WDMA_WINFO_V2;
|
||||
@@ -452,7 +452,7 @@ int mtk_foe_entry_set_queue(struct mtk_e
|
||||
{
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
*ib2 &= ~MTK_FOE_IB2_QID_V2;
|
||||
*ib2 |= FIELD_PREP(MTK_FOE_IB2_QID_V2, queue);
|
||||
*ib2 |= MTK_FOE_IB2_PSE_QOS_V2;
|
||||
@@ -607,7 +607,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
struct mtk_foe_entry *hwe;
|
||||
u32 val;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
entry->ib1 &= ~MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
entry->ib1 |= FIELD_PREP(MTK_FOE_IB1_BIND_TIMESTAMP_V2,
|
||||
timestamp);
|
||||
@@ -623,7 +623,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
||||
if (ppe->accounting) {
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
val = MTK_FOE_IB2_MIB_CNT_V2;
|
||||
else
|
||||
val = MTK_FOE_IB2_MIB_CNT;
|
||||
@@ -971,7 +971,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
MTK_PPE_SCAN_MODE_KEEPALIVE_AGE) |
|
||||
FIELD_PREP(MTK_PPE_TB_CFG_ENTRY_NUM,
|
||||
MTK_PPE_ENTRIES_SHIFT);
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
||||
val |= MTK_PPE_TB_CFG_INFO_SEL;
|
||||
ppe_w32(ppe, MTK_PPE_TB_CFG, val);
|
||||
|
||||
@@ -987,7 +987,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
MTK_PPE_FLOW_CFG_IP4_NAPT |
|
||||
MTK_PPE_FLOW_CFG_IP4_DSLITE |
|
||||
MTK_PPE_FLOW_CFG_IP4_NAT_FRAG;
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
||||
val |= MTK_PPE_MD_TOAP_BYP_CRSN0 |
|
||||
MTK_PPE_MD_TOAP_BYP_CRSN1 |
|
||||
MTK_PPE_MD_TOAP_BYP_CRSN2 |
|
||||
@@ -1029,7 +1029,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT, 0);
|
||||
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth)) {
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT1, 0xcb777);
|
||||
ppe_w32(ppe, MTK_PPE_SBW_CTRL, 0x7f);
|
||||
}
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
@@ -193,7 +193,7 @@ mtk_flow_set_output_device(struct mtk_et
|
||||
if (mtk_flow_get_wdma_info(dev, dest_mac, &info) == 0) {
|
||||
mtk_foe_entry_set_wdma(eth, foe, info.wdma_idx, info.queue,
|
||||
info.bss, info.wcid);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
switch (info.wdma_idx) {
|
||||
case 0:
|
||||
pse_port = 8;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
@@ -1091,7 +1091,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||
} else {
|
||||
struct mtk_eth *eth = dev->hw->eth;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
wed_set(dev, MTK_WED_RESET_IDX,
|
||||
MTK_WED_RESET_IDX_RX_V2);
|
||||
else
|
||||
@@ -1813,7 +1813,7 @@ void mtk_wed_add_hw(struct device_node *
|
||||
hw->wdma = wdma;
|
||||
hw->index = index;
|
||||
hw->irq = irq;
|
||||
- hw->version = MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ? 2 : 1;
|
||||
+ hw->version = mtk_is_netsys_v1(eth) ? 1 : 2;
|
||||
|
||||
if (hw->version == 1) {
|
||||
hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
|
|
@ -0,0 +1,29 @@
|
|||
From f8fb8dbd158c585be7574faf92db7d614b6722ff Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 25 Jul 2023 01:52:27 +0100
|
||||
Subject: [PATCH 100/250] net: ethernet: mtk_eth_soc: increase MAX_DEVS to 3
|
||||
|
||||
This is a preliminary patch to add MT7988 SoC support since it runs 3
|
||||
macs instead of 2.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/3563e5fab367e7d79a7f1296fabaa5c20f202d7a.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1040,8 +1040,8 @@ struct mtk_soc_data {
|
||||
|
||||
#define MTK_DMA_MONITOR_TIMEOUT msecs_to_jiffies(1000)
|
||||
|
||||
-/* currently no SoC has more than 2 macs */
|
||||
-#define MTK_MAX_DEVS 2
|
||||
+/* currently no SoC has more than 3 macs */
|
||||
+#define MTK_MAX_DEVS 3
|
||||
|
||||
/* struct mtk_eth - This is the main datasructure for holding the state
|
||||
* of the driver
|
|
@ -1,143 +1,176 @@
|
|||
From 4e35e80750b33727e606be9e7ce447bde2e0deb7 Mon Sep 17 00:00:00 2001
|
||||
From 856be974290f28d7943be2ac5a382c4139486196 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 7 Mar 2023 15:55:35 +0000
|
||||
Subject: [PATCH 3/7] net: ethernet: mtk_eth_soc: rely on num_devs and remove
|
||||
MTK_MAC_COUNT
|
||||
Date: Tue, 25 Jul 2023 01:52:44 +0100
|
||||
Subject: [PATCH 101/250] net: ethernet: mtk_eth_soc: rely on MTK_MAX_DEVS and
|
||||
remove MTK_MAC_COUNT
|
||||
|
||||
Get rid of MTK_MAC_COUNT since it is a duplicated of eth->soc->num_devs.
|
||||
Get rid of MTK_MAC_COUNT since it is a duplicated of MTK_MAX_DEVS.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/1856f4266f2fc80677807b1bad867659e7b00c65.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 30 ++++++++++-----------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 49 ++++++++++++---------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 -
|
||||
2 files changed, 15 insertions(+), 16 deletions(-)
|
||||
2 files changed, 27 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -944,7 +944,7 @@ static void mtk_stats_update(struct mtk_
|
||||
@@ -838,7 +838,7 @@ static void mtk_stats_update(struct mtk_
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->mac[i] || !eth->mac[i]->hw_stats)
|
||||
continue;
|
||||
if (spin_trylock(ð->mac[i]->hw_stats->stats_lock)) {
|
||||
@@ -1449,7 +1449,7 @@ static int mtk_queue_stopped(struct mtk_
|
||||
@@ -1341,7 +1341,7 @@ static int mtk_queue_stopped(struct mtk_
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
if (netif_queue_stopped(eth->netdev[i]))
|
||||
@@ -1463,7 +1463,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
@@ -1355,7 +1355,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
netif_tx_wake_all_queues(eth->netdev[i]);
|
||||
@@ -1956,7 +1956,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1812,7 +1812,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||
mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
|
||||
|
||||
- if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
||||
+ if (unlikely(mac < 0 || mac >= eth->soc->num_devs ||
|
||||
+ if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
|
||||
!eth->netdev[mac]))
|
||||
goto release_desc;
|
||||
|
||||
@@ -2993,7 +2993,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -2841,7 +2841,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++)
|
||||
+ for (i = 0; i < soc->num_devs; i++)
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++)
|
||||
if (eth->netdev[i])
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
if (eth->scratch_ring) {
|
||||
@@ -3147,7 +3147,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
@@ -2995,8 +2995,13 @@ static void mtk_gdm_config(struct mtk_et
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||
return;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
u32 val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
- u32 val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (!eth->netdev[i])
|
||||
+ continue;
|
||||
+
|
||||
+ val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
|
||||
/* default setup the forward port to send frame to PDMA */
|
||||
@@ -3758,7 +3758,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
val &= ~0xffff;
|
||||
@@ -3006,7 +3011,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
|
||||
val |= config;
|
||||
|
||||
- if (eth->netdev[i] && netdev_uses_dsa(eth->netdev[i]))
|
||||
+ if (netdev_uses_dsa(eth->netdev[i]))
|
||||
val |= MTK_GDMA_SPECIAL_TAG;
|
||||
|
||||
mtk_w32(eth, val, MTK_GDMA_FWD_CFG(i));
|
||||
@@ -3605,15 +3610,15 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
* up with the more appropriate value when mtk_mac_config call is being
|
||||
* invoked.
|
||||
*/
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
struct net_device *dev = eth->netdev[i];
|
||||
|
||||
mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
@@ -3946,7 +3946,7 @@ static void mtk_pending_work(struct work
|
||||
- mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
- if (dev) {
|
||||
- struct mtk_mac *mac = netdev_priv(dev);
|
||||
+ if (!dev)
|
||||
+ continue;
|
||||
|
||||
- mtk_set_mcr_max_rx(mac, dev->mtu + MTK_RX_ETH_HLEN);
|
||||
- }
|
||||
+ mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
+ mtk_set_mcr_max_rx(netdev_priv(dev),
|
||||
+ dev->mtu + MTK_RX_ETH_HLEN);
|
||||
}
|
||||
|
||||
/* Indicates CDM to parse the MTK special tag from CPU
|
||||
@@ -3793,7 +3798,7 @@ static void mtk_pending_work(struct work
|
||||
mtk_prepare_for_reset(eth);
|
||||
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
||||
continue;
|
||||
|
||||
@@ -3962,7 +3962,7 @@ static void mtk_pending_work(struct work
|
||||
@@ -3809,8 +3814,8 @@ static void mtk_pending_work(struct work
|
||||
mtk_hw_init(eth, true);
|
||||
|
||||
/* restart DMA and enable IRQs */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
if (!test_bit(i, &restart))
|
||||
- if (!test_bit(i, &restart))
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
+ if (!eth->netdev[i] || !test_bit(i, &restart))
|
||||
continue;
|
||||
|
||||
@@ -3990,7 +3990,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
if (mtk_open(eth->netdev[i])) {
|
||||
@@ -3837,7 +3842,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
free_netdev(eth->netdev[i]);
|
||||
@@ -4009,7 +4009,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
@@ -3856,7 +3861,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
struct mtk_mac *mac;
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
@@ -4313,7 +4313,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4157,7 +4162,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
}
|
||||
|
||||
id = be32_to_cpup(_id);
|
||||
- if (id >= MTK_MAC_COUNT) {
|
||||
+ if (id >= eth->soc->num_devs) {
|
||||
+ if (id >= MTK_MAX_DEVS) {
|
||||
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -4454,7 +4454,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
@@ -4302,7 +4307,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
dev = eth->netdev[i];
|
||||
|
||||
if (!dev || !(dev->flags & IFF_UP))
|
||||
@@ -4780,7 +4780,7 @@ static int mtk_remove(struct platform_de
|
||||
@@ -4610,7 +4615,7 @@ static int mtk_remove(struct platform_de
|
||||
int i;
|
||||
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
mtk_stop(eth->netdev[i]);
|
|
@ -1,22 +1,24 @@
|
|||
From ab817f559d505329d8a413c7d29250f6d87d77a0 Mon Sep 17 00:00:00 2001
|
||||
From a41d535855976838d246c079143c948dcf0f7931 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 7 Mar 2023 15:55:47 +0000
|
||||
Subject: [PATCH 4/7] net: ethernet: mtk_eth_soc: add MTK_NETSYS_V3 capability
|
||||
bit
|
||||
Date: Tue, 25 Jul 2023 01:52:59 +0100
|
||||
Subject: [PATCH 102/250] net: ethernet: mtk_eth_soc: add NETSYS_V3 version
|
||||
support
|
||||
|
||||
Introduce MTK_NETSYS_V3 bit in the device capabilities.
|
||||
Introduce NETSYS_V3 chipset version support.
|
||||
This is a preliminary patch to introduce support for MT7988 SoC.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/0db2260910755d76fa48e303b9f9bdf4e5a82340.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 115 ++++++++++++++++----
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 44 +++++++-
|
||||
2 files changed, 134 insertions(+), 25 deletions(-)
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 105 ++++++++++++++------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 48 +++++++--
|
||||
2 files changed, 116 insertions(+), 37 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -924,17 +924,32 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
@@ -818,17 +818,32 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x20 + offs);
|
||||
hw_stats->rx_flow_control_packets +=
|
||||
mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x24 + offs);
|
||||
|
@ -32,7 +34,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
- hw_stats->tx_packets +=
|
||||
- mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x38 + offs);
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) {
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ hw_stats->tx_skip +=
|
||||
+ mtk_r32(mac->hw, reg_map->gdm1_cnt + 0x50 + offs);
|
||||
+ hw_stats->tx_collisions +=
|
||||
|
@ -60,7 +62,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
}
|
||||
|
||||
u64_stats_update_end(&hw_stats->syncp);
|
||||
@@ -1238,7 +1253,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
@@ -1130,7 +1145,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
data |= TX_DMA_LS0;
|
||||
WRITE_ONCE(desc->txd3, data);
|
||||
|
||||
|
@ -72,57 +74,53 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||
WRITE_ONCE(desc->txd4, data);
|
||||
|
||||
@@ -1249,6 +1267,9 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
@@ -1141,6 +1159,8 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
/* tx checksum offload */
|
||||
if (info->csum)
|
||||
data |= TX_DMA_CHKSUM_V2;
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3) &&
|
||||
+ netdev_uses_dsa(dev))
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth) && netdev_uses_dsa(dev))
|
||||
+ data |= TX_DMA_SPTAG_V3;
|
||||
}
|
||||
WRITE_ONCE(desc->txd5, data);
|
||||
|
||||
@@ -1314,8 +1335,13 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1206,8 +1226,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
mtk_tx_set_dma_desc(dev, itxd, &txd_info);
|
||||
|
||||
itx_buf->flags |= MTK_TX_FLAGS_SINGLE0;
|
||||
- itx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 :
|
||||
- MTK_TX_FLAGS_FPORT1;
|
||||
+ if (mac->id == MTK_GMAC1_ID)
|
||||
+ itx_buf->flags |= MTK_TX_FLAGS_FPORT0;
|
||||
+ else if (mac->id == MTK_GMAC2_ID)
|
||||
+ itx_buf->flags |= MTK_TX_FLAGS_FPORT1;
|
||||
+ else
|
||||
+ itx_buf->flags |= MTK_TX_FLAGS_FPORT2;
|
||||
+
|
||||
+ itx_buf->mac_id = mac->id;
|
||||
setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
|
||||
k++);
|
||||
|
||||
@@ -1363,8 +1389,13 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
@@ -1255,8 +1274,7 @@ static int mtk_tx_map(struct sk_buff *sk
|
||||
memset(tx_buf, 0, sizeof(*tx_buf));
|
||||
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
||||
tx_buf->flags |= MTK_TX_FLAGS_PAGE0;
|
||||
- tx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 :
|
||||
- MTK_TX_FLAGS_FPORT1;
|
||||
+
|
||||
+ if (mac->id == MTK_GMAC1_ID)
|
||||
+ tx_buf->flags |= MTK_TX_FLAGS_FPORT0;
|
||||
+ else if (mac->id == MTK_GMAC2_ID)
|
||||
+ tx_buf->flags |= MTK_TX_FLAGS_FPORT1;
|
||||
+ else
|
||||
+ tx_buf->flags |= MTK_TX_FLAGS_FPORT2;
|
||||
+ tx_buf->mac_id = mac->id;
|
||||
|
||||
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
|
||||
txd_info.size, k++);
|
||||
@@ -1950,11 +1981,24 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1558,7 +1576,7 @@ static int mtk_xdp_frame_map(struct mtk_
|
||||
}
|
||||
mtk_tx_set_dma_desc(dev, txd, txd_info);
|
||||
|
||||
- tx_buf->flags |= !mac->id ? MTK_TX_FLAGS_FPORT0 : MTK_TX_FLAGS_FPORT1;
|
||||
+ tx_buf->mac_id = mac->id;
|
||||
tx_buf->type = dma_map ? MTK_TYPE_XDP_NDO : MTK_TYPE_XDP_TX;
|
||||
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
|
||||
|
||||
@@ -1806,11 +1824,24 @@ static int mtk_poll_rx(struct napi_struc
|
||||
break;
|
||||
|
||||
/* find out which mac the packet come from. values start at 1 */
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
|
||||
- if (mtk_is_netsys_v2_or_greater(eth))
|
||||
- mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
|
||||
- else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
||||
- !(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||
+ if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
+ u32 val = RX_DMA_GET_SPORT_V2(trxd.rxd5);
|
||||
+
|
||||
+ switch (val) {
|
||||
|
@ -137,29 +135,44 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+ break;
|
||||
+ }
|
||||
+ } else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
||||
+ !(trxd.rxd4 & RX_DMA_SPECIAL_TAG)) {
|
||||
+ !(trxd.rxd4 & RX_DMA_SPECIAL_TAG)) {
|
||||
mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
|
||||
+ }
|
||||
|
||||
if (unlikely(mac < 0 || mac >= eth->soc->num_devs ||
|
||||
if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
|
||||
!eth->netdev[mac]))
|
||||
@@ -2185,7 +2229,9 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
@@ -2030,7 +2061,6 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
|
||||
while ((cpu != dma) && budget) {
|
||||
u32 next_cpu = desc->txd2;
|
||||
- int mac = 0;
|
||||
|
||||
desc = mtk_qdma_phys_to_virt(ring, desc->txd2);
|
||||
if ((desc->txd3 & TX_DMA_OWNER_CPU) == 0)
|
||||
@@ -2038,15 +2068,13 @@ static int mtk_poll_tx_qdma(struct mtk_e
|
||||
|
||||
tx_buf = mtk_desc_to_tx_buf(ring, desc,
|
||||
eth->soc->txrx.txd_size);
|
||||
if (tx_buf->flags & MTK_TX_FLAGS_FPORT1)
|
||||
- if (tx_buf->flags & MTK_TX_FLAGS_FPORT1)
|
||||
- mac = 1;
|
||||
+ mac = MTK_GMAC2_ID;
|
||||
+ else if (tx_buf->flags & MTK_TX_FLAGS_FPORT2)
|
||||
+ mac = MTK_GMAC3_ID;
|
||||
|
||||
-
|
||||
if (!tx_buf->data)
|
||||
break;
|
||||
@@ -3796,7 +3842,26 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
|
||||
if (tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
|
||||
if (tx_buf->type == MTK_TYPE_SKB)
|
||||
- mtk_poll_tx_done(eth, state, mac, tx_buf->data);
|
||||
+ mtk_poll_tx_done(eth, state, tx_buf->mac_id,
|
||||
+ tx_buf->data);
|
||||
|
||||
budget--;
|
||||
}
|
||||
@@ -3648,7 +3676,24 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) {
|
||||
- if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ /* PSE should not drop port1, port8 and port9 packets */
|
||||
+ mtk_w32(eth, 0x00000302, PSE_DROP_CFG);
|
||||
+
|
||||
|
@ -168,9 +181,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+ mtk_w32(eth, 0x00000077, MTK_CDMW1_THRES);
|
||||
+
|
||||
+ /* Disable GDM1 RX CRC stripping */
|
||||
+ val = mtk_r32(eth, MTK_GDMA_FWD_CFG(0));
|
||||
+ val &= ~MTK_GDMA_STRP_CRC;
|
||||
+ mtk_w32(eth, val, MTK_GDMA_FWD_CFG(0));
|
||||
+ mtk_m32(eth, MTK_GDMA_STRP_CRC, 0, MTK_GDMA_FWD_CFG(0));
|
||||
+
|
||||
+ /* PSE GDM3 MIB counter has incorrect hw default values,
|
||||
+ * so the driver ought to read clear the values beforehand
|
||||
|
@ -178,17 +189,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+ */
|
||||
+ for (i = 0; i < 0x80; i += 0x4)
|
||||
+ mtk_r32(eth, reg_map->gdm1_cnt + 0x100 + i);
|
||||
+ } else if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ } else if (!mtk_is_netsys_v1(eth)) {
|
||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||
|
||||
@@ -4361,7 +4426,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4210,7 +4255,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
}
|
||||
spin_lock_init(&mac->hw_stats->stats_lock);
|
||||
u64_stats_init(&mac->hw_stats->syncp);
|
||||
- mac->hw_stats->reg_offset = id * MTK_STAT_OFFSET;
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3))
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth))
|
||||
+ mac->hw_stats->reg_offset = id * 0x80;
|
||||
+ else
|
||||
+ mac->hw_stats->reg_offset = id * 0x40;
|
||||
|
@ -197,7 +208,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
err = of_get_phy_mode(np, &phy_mode);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -121,6 +121,7 @@
|
||||
@@ -122,6 +122,7 @@
|
||||
#define MTK_GDMA_ICS_EN BIT(22)
|
||||
#define MTK_GDMA_TCS_EN BIT(21)
|
||||
#define MTK_GDMA_UCS_EN BIT(20)
|
||||
|
@ -205,7 +216,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
#define MTK_GDMA_TO_PDMA 0x0
|
||||
#define MTK_GDMA_DROP_ALL 0x7777
|
||||
|
||||
@@ -286,8 +287,6 @@
|
||||
@@ -287,8 +288,6 @@
|
||||
/* QDMA Interrupt grouping registers */
|
||||
#define MTK_RLS_DONE_INT BIT(0)
|
||||
|
||||
|
@ -214,7 +225,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
/* QDMA TX NUM */
|
||||
#define QID_BITS_V2(x) (((x) & 0x3f) << 16)
|
||||
#define MTK_QDMA_GMAC2_QID 8
|
||||
@@ -300,6 +299,8 @@
|
||||
@@ -301,6 +300,8 @@
|
||||
#define TX_DMA_CHKSUM_V2 (0x7 << 28)
|
||||
#define TX_DMA_TSO_V2 BIT(31)
|
||||
|
||||
|
@ -223,15 +234,20 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
/* QDMA V2 descriptor txd4 */
|
||||
#define TX_DMA_FPORT_SHIFT_V2 8
|
||||
#define TX_DMA_FPORT_MASK_V2 0xf
|
||||
@@ -639,6 +640,7 @@ enum mtk_tx_flags {
|
||||
@@ -631,12 +632,6 @@ enum mtk_tx_flags {
|
||||
*/
|
||||
MTK_TX_FLAGS_FPORT0 = 0x04,
|
||||
MTK_TX_FLAGS_FPORT1 = 0x08,
|
||||
+ MTK_TX_FLAGS_FPORT2 = 0x10,
|
||||
MTK_TX_FLAGS_SINGLE0 = 0x01,
|
||||
MTK_TX_FLAGS_PAGE0 = 0x02,
|
||||
-
|
||||
- /* MTK_TX_FLAGS_FPORTx allows tracking which port the transmitted
|
||||
- * SKB out instead of looking up through hardware TX descriptor.
|
||||
- */
|
||||
- MTK_TX_FLAGS_FPORT0 = 0x04,
|
||||
- MTK_TX_FLAGS_FPORT1 = 0x08,
|
||||
};
|
||||
|
||||
/* This enum allows us to identify how the clock is defined on the array of the
|
||||
@@ -724,6 +726,42 @@ enum mtk_dev_state {
|
||||
@@ -722,6 +717,35 @@ enum mtk_dev_state {
|
||||
MTK_RESETTING
|
||||
};
|
||||
|
||||
|
@ -263,30 +279,29 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+ MTK_GMAC3_ID,
|
||||
+ MTK_GMAC_ID_MAX
|
||||
+};
|
||||
+
|
||||
+/* GDM Type */
|
||||
+enum mtk_gdm_type {
|
||||
+ MTK_GDM_TYPE = 0,
|
||||
+ MTK_XGDM_TYPE,
|
||||
+ MTK_GDM_TYPE_MAX
|
||||
+};
|
||||
+
|
||||
enum mtk_tx_buf_type {
|
||||
MTK_TYPE_SKB,
|
||||
MTK_TYPE_XDP_TX,
|
||||
@@ -820,6 +858,7 @@ enum mkt_eth_capabilities {
|
||||
MTK_QDMA_BIT,
|
||||
MTK_NETSYS_V1_BIT,
|
||||
MTK_NETSYS_V2_BIT,
|
||||
+ MTK_NETSYS_V3_BIT,
|
||||
MTK_SOC_MT7628_BIT,
|
||||
MTK_RSTCTRL_PPE1_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
@@ -856,6 +895,7 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
||||
#define MTK_NETSYS_V1 BIT(MTK_NETSYS_V1_BIT)
|
||||
#define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
|
||||
+#define MTK_NETSYS_V3 BIT(MTK_NETSYS_V3_BIT)
|
||||
#define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
|
||||
#define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT)
|
||||
@@ -740,7 +764,8 @@ struct mtk_tx_buf {
|
||||
enum mtk_tx_buf_type type;
|
||||
void *data;
|
||||
|
||||
- u32 flags;
|
||||
+ u16 mac_id;
|
||||
+ u16 flags;
|
||||
DEFINE_DMA_UNMAP_ADDR(dma_addr0);
|
||||
DEFINE_DMA_UNMAP_LEN(dma_len0);
|
||||
DEFINE_DMA_UNMAP_ADDR(dma_addr1);
|
||||
@@ -1189,6 +1214,11 @@ static inline bool mtk_is_netsys_v2_or_g
|
||||
return eth->soc->version > 1;
|
||||
}
|
||||
|
||||
+static inline bool mtk_is_netsys_v3_or_greater(struct mtk_eth *eth)
|
||||
+{
|
||||
+ return eth->soc->version > 2;
|
||||
+}
|
||||
+
|
||||
static inline struct mtk_foe_entry *
|
||||
mtk_foe_get_entry(struct mtk_ppe *ppe, u16 hash)
|
||||
{
|
|
@ -1,17 +1,19 @@
|
|||
From 45b575fd9e6a455090820248bf1b98b1f2c7b6c8 Mon Sep 17 00:00:00 2001
|
||||
From db797ae0542220a98658229397da464c383c991c Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 7 Mar 2023 15:56:00 +0000
|
||||
Subject: [PATCH 5/7] net: ethernet: mtk_eth_soc: convert caps in mtk_soc_data
|
||||
struct to u64
|
||||
Date: Tue, 25 Jul 2023 01:53:13 +0100
|
||||
Subject: [PATCH 103/250] net: ethernet: mtk_eth_soc: convert caps in
|
||||
mtk_soc_data struct to u64
|
||||
|
||||
This is a preliminary patch to introduce support for MT7988 SoC.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/9499ac3670b2fc5b444404b84e8a4a169beabbf2.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_path.c | 22 +++----
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 62 ++++++++++----------
|
||||
2 files changed, 42 insertions(+), 42 deletions(-)
|
||||
drivers/net/ethernet/mediatek/mtk_eth_path.c | 22 ++++----
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 56 ++++++++++----------
|
||||
2 files changed, 39 insertions(+), 39 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
|
@ -111,7 +113,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
MTK_ETH_PATH_GMAC2_RGMII;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -881,44 +881,44 @@ enum mkt_eth_capabilities {
|
||||
@@ -863,41 +863,41 @@ enum mkt_eth_capabilities {
|
||||
};
|
||||
|
||||
/* Supported hardware group on SoCs */
|
||||
|
@ -127,9 +129,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
-#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
|
||||
-#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
|
||||
-#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
||||
-#define MTK_NETSYS_V1 BIT(MTK_NETSYS_V1_BIT)
|
||||
-#define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
|
||||
-#define MTK_NETSYS_V3 BIT(MTK_NETSYS_V3_BIT)
|
||||
-#define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
|
||||
-#define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
|
||||
-#define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT)
|
||||
|
@ -145,9 +144,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
+#define MTK_SHARED_INT BIT_ULL(MTK_SHARED_INT_BIT)
|
||||
+#define MTK_TRGMII_MT7621_CLK BIT_ULL(MTK_TRGMII_MT7621_CLK_BIT)
|
||||
+#define MTK_QDMA BIT_ULL(MTK_QDMA_BIT)
|
||||
+#define MTK_NETSYS_V1 BIT_ULL(MTK_NETSYS_V1_BIT)
|
||||
+#define MTK_NETSYS_V2 BIT_ULL(MTK_NETSYS_V2_BIT)
|
||||
+#define MTK_NETSYS_V3 BIT_ULL(MTK_NETSYS_V3_BIT)
|
||||
+#define MTK_SOC_MT7628 BIT_ULL(MTK_SOC_MT7628_BIT)
|
||||
+#define MTK_RSTCTRL_PPE1 BIT_ULL(MTK_RSTCTRL_PPE1_BIT)
|
||||
+#define MTK_U3_COPHY_V2 BIT_ULL(MTK_U3_COPHY_V2_BIT)
|
||||
|
@ -186,7 +182,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||
|
||||
#define MTK_GMAC1_RGMII (MTK_ETH_PATH_GMAC1_RGMII | MTK_RGMII)
|
||||
#define MTK_GMAC1_TRGMII (MTK_ETH_PATH_GMAC1_TRGMII | MTK_TRGMII)
|
||||
@@ -1074,7 +1074,7 @@ struct mtk_reg_map {
|
||||
@@ -1042,7 +1042,7 @@ struct mtk_reg_map {
|
||||
struct mtk_soc_data {
|
||||
const struct mtk_reg_map *reg_map;
|
||||
u32 ana_rgc3;
|
|
@ -0,0 +1,132 @@
|
|||
From a1c9f7d1d24e90294f6a6755b137fcf306851e93 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Tue, 25 Jul 2023 01:53:28 +0100
|
||||
Subject: [PATCH 104/250] net: ethernet: mtk_eth_soc: convert clock bitmap to
|
||||
u64
|
||||
|
||||
The to-be-added MT7988 SoC adds many new clocks which need to be
|
||||
controlled by the Ethernet driver, which will result in their total
|
||||
number exceeding 32.
|
||||
Prepare by converting clock bitmaps into 64-bit types.
|
||||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/6960a39bb0078cf84d7642a9558e6a91c6cc9df3.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 96 +++++++++++----------
|
||||
1 file changed, 49 insertions(+), 47 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -663,54 +663,56 @@ enum mtk_clks_map {
|
||||
MTK_CLK_MAX
|
||||
};
|
||||
|
||||
-#define MT7623_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
||||
- BIT(MTK_CLK_GP1) | BIT(MTK_CLK_GP2) | \
|
||||
- BIT(MTK_CLK_TRGPLL))
|
||||
-#define MT7622_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
||||
- BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
|
||||
- BIT(MTK_CLK_GP2) | \
|
||||
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII_CK) | \
|
||||
- BIT(MTK_CLK_ETH2PLL))
|
||||
+#define MT7623_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
||||
+ BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
|
||||
+ BIT_ULL(MTK_CLK_TRGPLL))
|
||||
+#define MT7622_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
||||
+ BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
|
||||
+ BIT_ULL(MTK_CLK_GP2) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CK) | \
|
||||
+ BIT_ULL(MTK_CLK_ETH2PLL))
|
||||
#define MT7621_CLKS_BITMAP (0)
|
||||
#define MT7628_CLKS_BITMAP (0)
|
||||
-#define MT7629_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
||||
- BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
|
||||
- BIT(MTK_CLK_GP2) | BIT(MTK_CLK_FE) | \
|
||||
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII_CK) | \
|
||||
- BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
|
||||
-#define MT7981_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
|
||||
- BIT(MTK_CLK_WOCPU0) | \
|
||||
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII_CK))
|
||||
-#define MT7986_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
|
||||
- BIT(MTK_CLK_WOCPU1) | BIT(MTK_CLK_WOCPU0) | \
|
||||
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
||||
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
- BIT(MTK_CLK_SGMII2_CDR_FB))
|
||||
+#define MT7629_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
||||
+ BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
|
||||
+ BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_FE) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CK) | \
|
||||
+ BIT_ULL(MTK_CLK_ETH2PLL) | BIT_ULL(MTK_CLK_SGMIITOP))
|
||||
+#define MT7981_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | \
|
||||
+ BIT_ULL(MTK_CLK_GP1) | \
|
||||
+ BIT_ULL(MTK_CLK_WOCPU0) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CK))
|
||||
+#define MT7986_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | \
|
||||
+ BIT_ULL(MTK_CLK_GP1) | \
|
||||
+ BIT_ULL(MTK_CLK_WOCPU1) | BIT_ULL(MTK_CLK_WOCPU0) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB))
|
||||
|
||||
enum mtk_dev_state {
|
||||
MTK_HW_INIT,
|
||||
@@ -1043,7 +1045,7 @@ struct mtk_soc_data {
|
||||
const struct mtk_reg_map *reg_map;
|
||||
u32 ana_rgc3;
|
||||
u64 caps;
|
||||
- u32 required_clks;
|
||||
+ u64 required_clks;
|
||||
bool required_pctl;
|
||||
u8 offload_version;
|
||||
u8 hash_offset;
|
|
@ -0,0 +1,477 @@
|
|||
From 94f825a7eadfc8b4c8828efdb7705d9703f9c73e Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 25 Jul 2023 01:57:42 +0100
|
||||
Subject: [PATCH 105/250] net: ethernet: mtk_eth_soc: add basic support for
|
||||
MT7988 SoC
|
||||
|
||||
Introduce support for ethernet chip available in MT7988 SoC to
|
||||
mtk_eth_soc driver. As a first step support only the first GMAC which
|
||||
is hard-wired to the internal DSA switch having 4 built-in gigabit
|
||||
Ethernet PHYs.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/25c8377095b95d186872eeda7aa055da83e8f0ca.1690246605.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_path.c | 14 +-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 201 +++++++++++++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 86 +++++++-
|
||||
3 files changed, 273 insertions(+), 28 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
@@ -43,7 +43,7 @@ static const char *mtk_eth_path_name(u64
|
||||
static int set_mux_gdm1_to_gmac1_esw(struct mtk_eth *eth, u64 path)
|
||||
{
|
||||
bool updated = true;
|
||||
- u32 val, mask, set;
|
||||
+ u32 mask, set, reg;
|
||||
|
||||
switch (path) {
|
||||
case MTK_ETH_PATH_GMAC1_SGMII:
|
||||
@@ -59,11 +59,13 @@ static int set_mux_gdm1_to_gmac1_esw(str
|
||||
break;
|
||||
}
|
||||
|
||||
- if (updated) {
|
||||
- val = mtk_r32(eth, MTK_MAC_MISC);
|
||||
- val = (val & mask) | set;
|
||||
- mtk_w32(eth, val, MTK_MAC_MISC);
|
||||
- }
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth))
|
||||
+ reg = MTK_MAC_MISC_V3;
|
||||
+ else
|
||||
+ reg = MTK_MAC_MISC;
|
||||
+
|
||||
+ if (updated)
|
||||
+ mtk_m32(eth, mask, set, reg);
|
||||
|
||||
dev_dbg(eth->dev, "path %s in %s updated = %d\n",
|
||||
mtk_eth_path_name(path), __func__, updated);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -152,6 +152,54 @@ static const struct mtk_reg_map mt7986_r
|
||||
.pse_oq_sta = 0x01a0,
|
||||
};
|
||||
|
||||
+static const struct mtk_reg_map mt7988_reg_map = {
|
||||
+ .tx_irq_mask = 0x461c,
|
||||
+ .tx_irq_status = 0x4618,
|
||||
+ .pdma = {
|
||||
+ .rx_ptr = 0x6900,
|
||||
+ .rx_cnt_cfg = 0x6904,
|
||||
+ .pcrx_ptr = 0x6908,
|
||||
+ .glo_cfg = 0x6a04,
|
||||
+ .rst_idx = 0x6a08,
|
||||
+ .delay_irq = 0x6a0c,
|
||||
+ .irq_status = 0x6a20,
|
||||
+ .irq_mask = 0x6a28,
|
||||
+ .adma_rx_dbg0 = 0x6a38,
|
||||
+ .int_grp = 0x6a50,
|
||||
+ },
|
||||
+ .qdma = {
|
||||
+ .qtx_cfg = 0x4400,
|
||||
+ .qtx_sch = 0x4404,
|
||||
+ .rx_ptr = 0x4500,
|
||||
+ .rx_cnt_cfg = 0x4504,
|
||||
+ .qcrx_ptr = 0x4508,
|
||||
+ .glo_cfg = 0x4604,
|
||||
+ .rst_idx = 0x4608,
|
||||
+ .delay_irq = 0x460c,
|
||||
+ .fc_th = 0x4610,
|
||||
+ .int_grp = 0x4620,
|
||||
+ .hred = 0x4644,
|
||||
+ .ctx_ptr = 0x4700,
|
||||
+ .dtx_ptr = 0x4704,
|
||||
+ .crx_ptr = 0x4710,
|
||||
+ .drx_ptr = 0x4714,
|
||||
+ .fq_head = 0x4720,
|
||||
+ .fq_tail = 0x4724,
|
||||
+ .fq_count = 0x4728,
|
||||
+ .fq_blen = 0x472c,
|
||||
+ .tx_sch_rate = 0x4798,
|
||||
+ },
|
||||
+ .gdm1_cnt = 0x1c00,
|
||||
+ .gdma_to_ppe0 = 0x3333,
|
||||
+ .ppe_base = 0x2000,
|
||||
+ .wdma_base = {
|
||||
+ [0] = 0x4800,
|
||||
+ [1] = 0x4c00,
|
||||
+ },
|
||||
+ .pse_iq_sta = 0x0180,
|
||||
+ .pse_oq_sta = 0x01a0,
|
||||
+};
|
||||
+
|
||||
/* strings used by ethtool */
|
||||
static const struct mtk_ethtool_stats {
|
||||
char str[ETH_GSTRING_LEN];
|
||||
@@ -179,10 +227,54 @@ static const struct mtk_ethtool_stats {
|
||||
};
|
||||
|
||||
static const char * const mtk_clks_source_name[] = {
|
||||
- "ethif", "sgmiitop", "esw", "gp0", "gp1", "gp2", "fe", "trgpll",
|
||||
- "sgmii_tx250m", "sgmii_rx250m", "sgmii_cdr_ref", "sgmii_cdr_fb",
|
||||
- "sgmii2_tx250m", "sgmii2_rx250m", "sgmii2_cdr_ref", "sgmii2_cdr_fb",
|
||||
- "sgmii_ck", "eth2pll", "wocpu0", "wocpu1", "netsys0", "netsys1"
|
||||
+ "ethif",
|
||||
+ "sgmiitop",
|
||||
+ "esw",
|
||||
+ "gp0",
|
||||
+ "gp1",
|
||||
+ "gp2",
|
||||
+ "gp3",
|
||||
+ "xgp1",
|
||||
+ "xgp2",
|
||||
+ "xgp3",
|
||||
+ "crypto",
|
||||
+ "fe",
|
||||
+ "trgpll",
|
||||
+ "sgmii_tx250m",
|
||||
+ "sgmii_rx250m",
|
||||
+ "sgmii_cdr_ref",
|
||||
+ "sgmii_cdr_fb",
|
||||
+ "sgmii2_tx250m",
|
||||
+ "sgmii2_rx250m",
|
||||
+ "sgmii2_cdr_ref",
|
||||
+ "sgmii2_cdr_fb",
|
||||
+ "sgmii_ck",
|
||||
+ "eth2pll",
|
||||
+ "wocpu0",
|
||||
+ "wocpu1",
|
||||
+ "netsys0",
|
||||
+ "netsys1",
|
||||
+ "ethwarp_wocpu2",
|
||||
+ "ethwarp_wocpu1",
|
||||
+ "ethwarp_wocpu0",
|
||||
+ "top_usxgmii0_sel",
|
||||
+ "top_usxgmii1_sel",
|
||||
+ "top_sgm0_sel",
|
||||
+ "top_sgm1_sel",
|
||||
+ "top_xfi_phy0_xtal_sel",
|
||||
+ "top_xfi_phy1_xtal_sel",
|
||||
+ "top_eth_gmii_sel",
|
||||
+ "top_eth_refck_50m_sel",
|
||||
+ "top_eth_sys_200m_sel",
|
||||
+ "top_eth_sys_sel",
|
||||
+ "top_eth_xgmii_sel",
|
||||
+ "top_eth_mii_sel",
|
||||
+ "top_netsys_sel",
|
||||
+ "top_netsys_500m_sel",
|
||||
+ "top_netsys_pao_2x_sel",
|
||||
+ "top_netsys_sync_250m_sel",
|
||||
+ "top_netsys_ppefb_250m_sel",
|
||||
+ "top_netsys_warp_sel",
|
||||
};
|
||||
|
||||
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
|
||||
@@ -195,7 +287,7 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
|
||||
return __raw_readl(eth->base + reg);
|
||||
}
|
||||
|
||||
-static u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned reg)
|
||||
+u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned int reg)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
@@ -326,6 +418,19 @@ static void mtk_gmac0_rgmii_adjust(struc
|
||||
dev_err(eth->dev, "Missing PLL configuration, ethernet may not work\n");
|
||||
}
|
||||
|
||||
+static void mtk_setup_bridge_switch(struct mtk_eth *eth)
|
||||
+{
|
||||
+ /* Force Port1 XGMAC Link Up */
|
||||
+ mtk_m32(eth, 0, MTK_XGMAC_FORCE_LINK(MTK_GMAC1_ID),
|
||||
+ MTK_XGMAC_STS(MTK_GMAC1_ID));
|
||||
+
|
||||
+ /* Adjust GSW bridge IPG to 11 */
|
||||
+ mtk_m32(eth, GSWTX_IPG_MASK | GSWRX_IPG_MASK,
|
||||
+ (GSW_IPG_11 << GSWTX_IPG_SHIFT) |
|
||||
+ (GSW_IPG_11 << GSWRX_IPG_SHIFT),
|
||||
+ MTK_GSW_CFG);
|
||||
+}
|
||||
+
|
||||
static struct phylink_pcs *mtk_mac_select_pcs(struct phylink_config *config,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@@ -395,6 +500,8 @@ static void mtk_mac_config(struct phylin
|
||||
goto init_err;
|
||||
}
|
||||
break;
|
||||
+ case PHY_INTERFACE_MODE_INTERNAL:
|
||||
+ break;
|
||||
default:
|
||||
goto err_phy;
|
||||
}
|
||||
@@ -472,6 +579,15 @@ static void mtk_mac_config(struct phylin
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* Setup gmac */
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth) &&
|
||||
+ mac->interface == PHY_INTERFACE_MODE_INTERNAL) {
|
||||
+ mtk_w32(mac->hw, MTK_GDMA_XGDM_SEL, MTK_GDMA_EG_CTRL(mac->id));
|
||||
+ mtk_w32(mac->hw, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(mac->id));
|
||||
+
|
||||
+ mtk_setup_bridge_switch(eth);
|
||||
+ }
|
||||
+
|
||||
return;
|
||||
|
||||
err_phy:
|
||||
@@ -682,11 +798,15 @@ static int mtk_mdio_init(struct mtk_eth
|
||||
}
|
||||
divider = min_t(unsigned int, DIV_ROUND_UP(MDC_MAX_FREQ, max_clk), 63);
|
||||
|
||||
+ /* Configure MDC Turbo Mode */
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth))
|
||||
+ mtk_m32(eth, 0, MISC_MDC_TURBO, MTK_MAC_MISC_V3);
|
||||
+
|
||||
/* Configure MDC Divider */
|
||||
- val = mtk_r32(eth, MTK_PPSC);
|
||||
- val &= ~PPSC_MDC_CFG;
|
||||
- val |= FIELD_PREP(PPSC_MDC_CFG, divider) | PPSC_MDC_TURBO;
|
||||
- mtk_w32(eth, val, MTK_PPSC);
|
||||
+ val = FIELD_PREP(PPSC_MDC_CFG, divider);
|
||||
+ if (!mtk_is_netsys_v3_or_greater(eth))
|
||||
+ val |= PPSC_MDC_TURBO;
|
||||
+ mtk_m32(eth, PPSC_MDC_CFG, val, MTK_PPSC);
|
||||
|
||||
dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
|
||||
|
||||
@@ -1145,10 +1265,19 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
data |= TX_DMA_LS0;
|
||||
WRITE_ONCE(desc->txd3, data);
|
||||
|
||||
- if (mac->id == MTK_GMAC3_ID)
|
||||
- data = PSE_GDM3_PORT;
|
||||
- else
|
||||
- data = (mac->id + 1) << TX_DMA_FPORT_SHIFT_V2; /* forward port */
|
||||
+ /* set forward port */
|
||||
+ switch (mac->id) {
|
||||
+ case MTK_GMAC1_ID:
|
||||
+ data = PSE_GDM1_PORT << TX_DMA_FPORT_SHIFT_V2;
|
||||
+ break;
|
||||
+ case MTK_GMAC2_ID:
|
||||
+ data = PSE_GDM2_PORT << TX_DMA_FPORT_SHIFT_V2;
|
||||
+ break;
|
||||
+ case MTK_GMAC3_ID:
|
||||
+ data = PSE_GDM3_PORT << TX_DMA_FPORT_SHIFT_V2;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||
WRITE_ONCE(desc->txd4, data);
|
||||
|
||||
@@ -4304,6 +4433,17 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
mac->phylink_config.supported_interfaces);
|
||||
}
|
||||
|
||||
+ if (mtk_is_netsys_v3_or_greater(mac->hw) &&
|
||||
+ MTK_HAS_CAPS(mac->hw->soc->caps, MTK_ESW_BIT) &&
|
||||
+ id == MTK_GMAC1_ID) {
|
||||
+ mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE |
|
||||
+ MAC_SYM_PAUSE |
|
||||
+ MAC_10000FD;
|
||||
+ phy_interface_zero(mac->phylink_config.supported_interfaces);
|
||||
+ __set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
||||
+ mac->phylink_config.supported_interfaces);
|
||||
+ }
|
||||
+
|
||||
phylink = phylink_create(&mac->phylink_config,
|
||||
of_fwnode_handle(mac->of_node),
|
||||
phy_mode, &mtk_phylink_ops);
|
||||
@@ -4826,6 +4966,24 @@ static const struct mtk_soc_data mt7986_
|
||||
},
|
||||
};
|
||||
|
||||
+static const struct mtk_soc_data mt7988_data = {
|
||||
+ .reg_map = &mt7988_reg_map,
|
||||
+ .ana_rgc3 = 0x128,
|
||||
+ .caps = MT7988_CAPS,
|
||||
+ .hw_features = MTK_HW_FEATURES,
|
||||
+ .required_clks = MT7988_CLKS_BITMAP,
|
||||
+ .required_pctl = false,
|
||||
+ .version = 3,
|
||||
+ .txrx = {
|
||||
+ .txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
+ .rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
+ .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
|
||||
+ .rx_dma_l4_valid = RX_DMA_L4_VALID_V2,
|
||||
+ .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
||||
+ .dma_len_offset = 8,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static const struct mtk_soc_data rt5350_data = {
|
||||
.reg_map = &mt7628_reg_map,
|
||||
.caps = MT7628_CAPS,
|
||||
@@ -4844,14 +5002,15 @@ static const struct mtk_soc_data rt5350_
|
||||
};
|
||||
|
||||
const struct of_device_id of_mtk_match[] = {
|
||||
- { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data},
|
||||
- { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data},
|
||||
- { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
||||
- { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
||||
- { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
||||
- { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data},
|
||||
- { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data},
|
||||
- { .compatible = "ralink,rt5350-eth", .data = &rt5350_data},
|
||||
+ { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data },
|
||||
+ { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data },
|
||||
+ { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data },
|
||||
+ { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data },
|
||||
+ { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
|
||||
+ { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
|
||||
+ { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
|
||||
+ { .compatible = "mediatek,mt7988-eth", .data = &mt7988_data },
|
||||
+ { .compatible = "ralink,rt5350-eth", .data = &rt5350_data },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_mtk_match);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -117,7 +117,8 @@
|
||||
#define MTK_CDMP_EG_CTRL 0x404
|
||||
|
||||
/* GDM Exgress Control Register */
|
||||
-#define MTK_GDMA_FWD_CFG(x) (0x500 + (x * 0x1000))
|
||||
+#define MTK_GDMA_FWD_CFG(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
|
||||
+ 0x540 : 0x500 + (_x * 0x1000); })
|
||||
#define MTK_GDMA_SPECIAL_TAG BIT(24)
|
||||
#define MTK_GDMA_ICS_EN BIT(22)
|
||||
#define MTK_GDMA_TCS_EN BIT(21)
|
||||
@@ -126,6 +127,11 @@
|
||||
#define MTK_GDMA_TO_PDMA 0x0
|
||||
#define MTK_GDMA_DROP_ALL 0x7777
|
||||
|
||||
+/* GDM Egress Control Register */
|
||||
+#define MTK_GDMA_EG_CTRL(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
|
||||
+ 0x544 : 0x504 + (_x * 0x1000); })
|
||||
+#define MTK_GDMA_XGDM_SEL BIT(31)
|
||||
+
|
||||
/* Unicast Filter MAC Address Register - Low */
|
||||
#define MTK_GDMA_MAC_ADRL(x) (0x508 + (x * 0x1000))
|
||||
|
||||
@@ -386,7 +392,26 @@
|
||||
#define PHY_IAC_TIMEOUT HZ
|
||||
|
||||
#define MTK_MAC_MISC 0x1000c
|
||||
+#define MTK_MAC_MISC_V3 0x10010
|
||||
#define MTK_MUX_TO_ESW BIT(0)
|
||||
+#define MISC_MDC_TURBO BIT(4)
|
||||
+
|
||||
+/* XMAC status registers */
|
||||
+#define MTK_XGMAC_STS(x) (((x) == MTK_GMAC3_ID) ? 0x1001C : 0x1000C)
|
||||
+#define MTK_XGMAC_FORCE_LINK(x) (((x) == MTK_GMAC2_ID) ? BIT(31) : BIT(15))
|
||||
+#define MTK_USXGMII_PCS_LINK BIT(8)
|
||||
+#define MTK_XGMAC_RX_FC BIT(5)
|
||||
+#define MTK_XGMAC_TX_FC BIT(4)
|
||||
+#define MTK_USXGMII_PCS_MODE GENMASK(3, 1)
|
||||
+#define MTK_XGMAC_LINK_STS BIT(0)
|
||||
+
|
||||
+/* GSW bridge registers */
|
||||
+#define MTK_GSW_CFG (0x10080)
|
||||
+#define GSWTX_IPG_MASK GENMASK(19, 16)
|
||||
+#define GSWTX_IPG_SHIFT 16
|
||||
+#define GSWRX_IPG_MASK GENMASK(3, 0)
|
||||
+#define GSWRX_IPG_SHIFT 0
|
||||
+#define GSW_IPG_11 11
|
||||
|
||||
/* Mac control registers */
|
||||
#define MTK_MAC_MCR(x) (0x10100 + (x * 0x100))
|
||||
@@ -644,6 +669,11 @@ enum mtk_clks_map {
|
||||
MTK_CLK_GP0,
|
||||
MTK_CLK_GP1,
|
||||
MTK_CLK_GP2,
|
||||
+ MTK_CLK_GP3,
|
||||
+ MTK_CLK_XGP1,
|
||||
+ MTK_CLK_XGP2,
|
||||
+ MTK_CLK_XGP3,
|
||||
+ MTK_CLK_CRYPTO,
|
||||
MTK_CLK_FE,
|
||||
MTK_CLK_TRGPLL,
|
||||
MTK_CLK_SGMII_TX_250M,
|
||||
@@ -660,6 +690,27 @@ enum mtk_clks_map {
|
||||
MTK_CLK_WOCPU1,
|
||||
MTK_CLK_NETSYS0,
|
||||
MTK_CLK_NETSYS1,
|
||||
+ MTK_CLK_ETHWARP_WOCPU2,
|
||||
+ MTK_CLK_ETHWARP_WOCPU1,
|
||||
+ MTK_CLK_ETHWARP_WOCPU0,
|
||||
+ MTK_CLK_TOP_USXGMII_SBUS_0_SEL,
|
||||
+ MTK_CLK_TOP_USXGMII_SBUS_1_SEL,
|
||||
+ MTK_CLK_TOP_SGM_0_SEL,
|
||||
+ MTK_CLK_TOP_SGM_1_SEL,
|
||||
+ MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL,
|
||||
+ MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL,
|
||||
+ MTK_CLK_TOP_ETH_GMII_SEL,
|
||||
+ MTK_CLK_TOP_ETH_REFCK_50M_SEL,
|
||||
+ MTK_CLK_TOP_ETH_SYS_200M_SEL,
|
||||
+ MTK_CLK_TOP_ETH_SYS_SEL,
|
||||
+ MTK_CLK_TOP_ETH_XGMII_SEL,
|
||||
+ MTK_CLK_TOP_ETH_MII_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_500M_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_PAO_2X_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_SYNC_250M_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL,
|
||||
+ MTK_CLK_TOP_NETSYS_WARP_SEL,
|
||||
MTK_CLK_MAX
|
||||
};
|
||||
|
||||
@@ -713,6 +764,36 @@ enum mtk_clks_map {
|
||||
BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
||||
BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
||||
BIT_ULL(MTK_CLK_SGMII2_CDR_FB))
|
||||
+#define MT7988_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_ESW) | \
|
||||
+ BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
|
||||
+ BIT_ULL(MTK_CLK_GP3) | BIT_ULL(MTK_CLK_XGP1) | \
|
||||
+ BIT_ULL(MTK_CLK_XGP2) | BIT_ULL(MTK_CLK_XGP3) | \
|
||||
+ BIT_ULL(MTK_CLK_CRYPTO) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
||||
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU2) | \
|
||||
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU1) | \
|
||||
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU0) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_0_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_1_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_SGM_0_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_SGM_1_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_GMII_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_REFCK_50M_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_SYS_200M_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_SYS_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_XGMII_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_ETH_MII_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_500M_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_PAO_2X_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_SYNC_250M_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL) | \
|
||||
+ BIT_ULL(MTK_CLK_TOP_NETSYS_WARP_SEL))
|
||||
|
||||
enum mtk_dev_state {
|
||||
MTK_HW_INIT,
|
||||
@@ -961,6 +1042,8 @@ enum mkt_eth_capabilities {
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_RSTCTRL_PPE1)
|
||||
|
||||
+#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1)
|
||||
+
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
||||
u32 size;
|
||||
@@ -1306,6 +1389,7 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
|
||||
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
|
||||
u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
|
||||
+u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned int reg);
|
||||
|
||||
int mtk_gmac_sgmii_path_setup(struct mtk_eth *eth, int mac_id);
|
||||
int mtk_gmac_gephy_path_setup(struct mtk_eth *eth, int mac_id);
|
|
@ -0,0 +1,27 @@
|
|||
From 38a7eb76220731eff40602cf433f24880be0a6c2 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Thu, 27 Jul 2023 09:02:26 +0200
|
||||
Subject: [PATCH 106/250] net: ethernet: mtk_eth_soc: enable page_pool support
|
||||
for MT7988 SoC
|
||||
|
||||
In order to recycle pages, enable page_pool allocator for MT7988 SoC.
|
||||
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/fd4e8693980e47385a543e7b002eec0b88bd09df.1690440675.git.lorenzo@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1613,7 +1613,7 @@ static void mtk_update_rx_cpu_idx(struct
|
||||
|
||||
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
||||
{
|
||||
- return eth->soc->version == 2;
|
||||
+ return mtk_is_netsys_v2_or_greater(eth);
|
||||
}
|
||||
|
||||
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
|
|
@ -0,0 +1,135 @@
|
|||
From 199e7d5a7f03dd377f3a7a458360dbedd71d50ba Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Thu, 27 Jul 2023 09:07:28 +0200
|
||||
Subject: [PATCH 107/250] net: ethernet: mtk_eth_soc: enable nft hw
|
||||
flowtable_offload for MT7988 SoC
|
||||
|
||||
Enable hw Packet Process Engine (PPE) for MT7988 SoC.
|
||||
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/5e86341b0220a49620dadc02d77970de5ded9efc.1690441576.git.lorenzo@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 3 +++
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 19 +++++++++++++++----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 19 ++++++++++++++++++-
|
||||
3 files changed, 36 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4974,6 +4974,9 @@ static const struct mtk_soc_data mt7988_
|
||||
.required_clks = MT7988_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
.version = 3,
|
||||
+ .offload_version = 2,
|
||||
+ .hash_offset = 4,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -422,13 +422,22 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
||||
struct mtk_foe_mac_info *l2 = mtk_foe_entry_l2(eth, entry);
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
|
||||
- if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
+ switch (eth->soc->version) {
|
||||
+ case 3:
|
||||
+ *ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
||||
+ *ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
||||
+ MTK_FOE_IB2_WDMA_WINFO_V2;
|
||||
+ l2->w3info = FIELD_PREP(MTK_FOE_WINFO_WCID_V3, wcid) |
|
||||
+ FIELD_PREP(MTK_FOE_WINFO_BSS_V3, bss);
|
||||
+ break;
|
||||
+ case 2:
|
||||
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
||||
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
||||
MTK_FOE_IB2_WDMA_WINFO_V2;
|
||||
l2->winfo = FIELD_PREP(MTK_FOE_WINFO_WCID, wcid) |
|
||||
FIELD_PREP(MTK_FOE_WINFO_BSS, bss);
|
||||
- } else {
|
||||
+ break;
|
||||
+ default:
|
||||
*ib2 &= ~MTK_FOE_IB2_PORT_MG;
|
||||
*ib2 |= MTK_FOE_IB2_WDMA_WINFO;
|
||||
if (wdma_idx)
|
||||
@@ -436,6 +445,7 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
||||
l2->vlan2 = FIELD_PREP(MTK_FOE_VLAN2_WINFO_BSS, bss) |
|
||||
FIELD_PREP(MTK_FOE_VLAN2_WINFO_WCID, wcid) |
|
||||
FIELD_PREP(MTK_FOE_VLAN2_WINFO_RING, txq);
|
||||
+ break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -956,8 +966,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
mtk_ppe_init_foe_table(ppe);
|
||||
ppe_w32(ppe, MTK_PPE_TB_BASE, ppe->foe_phys);
|
||||
|
||||
- val = MTK_PPE_TB_CFG_ENTRY_80B |
|
||||
- MTK_PPE_TB_CFG_AGE_NON_L4 |
|
||||
+ val = MTK_PPE_TB_CFG_AGE_NON_L4 |
|
||||
MTK_PPE_TB_CFG_AGE_UNBIND |
|
||||
MTK_PPE_TB_CFG_AGE_TCP |
|
||||
MTK_PPE_TB_CFG_AGE_UDP |
|
||||
@@ -973,6 +982,8 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
MTK_PPE_ENTRIES_SHIFT);
|
||||
if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
||||
val |= MTK_PPE_TB_CFG_INFO_SEL;
|
||||
+ if (!mtk_is_netsys_v3_or_greater(ppe->eth))
|
||||
+ val |= MTK_PPE_TB_CFG_ENTRY_80B;
|
||||
ppe_w32(ppe, MTK_PPE_TB_CFG, val);
|
||||
|
||||
ppe_w32(ppe, MTK_PPE_IP_PROTO_CHK,
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -85,6 +85,17 @@ enum {
|
||||
#define MTK_FOE_WINFO_BSS GENMASK(5, 0)
|
||||
#define MTK_FOE_WINFO_WCID GENMASK(15, 6)
|
||||
|
||||
+#define MTK_FOE_WINFO_BSS_V3 GENMASK(23, 16)
|
||||
+#define MTK_FOE_WINFO_WCID_V3 GENMASK(15, 0)
|
||||
+
|
||||
+#define MTK_FOE_WINFO_PAO_USR_INFO GENMASK(15, 0)
|
||||
+#define MTK_FOE_WINFO_PAO_TID GENMASK(19, 16)
|
||||
+#define MTK_FOE_WINFO_PAO_IS_FIXEDRATE BIT(20)
|
||||
+#define MTK_FOE_WINFO_PAO_IS_PRIOR BIT(21)
|
||||
+#define MTK_FOE_WINFO_PAO_IS_SP BIT(22)
|
||||
+#define MTK_FOE_WINFO_PAO_HF BIT(23)
|
||||
+#define MTK_FOE_WINFO_PAO_AMSDU_EN BIT(24)
|
||||
+
|
||||
enum {
|
||||
MTK_FOE_STATE_INVALID,
|
||||
MTK_FOE_STATE_UNBIND,
|
||||
@@ -106,8 +117,13 @@ struct mtk_foe_mac_info {
|
||||
u16 pppoe_id;
|
||||
u16 src_mac_lo;
|
||||
|
||||
+ /* netsys_v2 */
|
||||
u16 minfo;
|
||||
u16 winfo;
|
||||
+
|
||||
+ /* netsys_v3 */
|
||||
+ u32 w3info;
|
||||
+ u32 wpao;
|
||||
};
|
||||
|
||||
/* software-only entry type */
|
||||
@@ -218,6 +234,7 @@ struct mtk_foe_ipv6_6rd {
|
||||
|
||||
#define MTK_FOE_ENTRY_V1_SIZE 80
|
||||
#define MTK_FOE_ENTRY_V2_SIZE 96
|
||||
+#define MTK_FOE_ENTRY_V3_SIZE 128
|
||||
|
||||
struct mtk_foe_entry {
|
||||
u32 ib1;
|
||||
@@ -228,7 +245,7 @@ struct mtk_foe_entry {
|
||||
struct mtk_foe_ipv4_dslite dslite;
|
||||
struct mtk_foe_ipv6 ipv6;
|
||||
struct mtk_foe_ipv6_6rd ipv6_6rd;
|
||||
- u32 data[23];
|
||||
+ u32 data[31];
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
From 0c024632c1e7ff69914329bfd87bec749b9c0aed Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Wed, 2 Aug 2023 04:31:09 +0100
|
||||
Subject: [PATCH 108/250] net: ethernet: mtk_eth_soc: support per-flow
|
||||
accounting on MT7988
|
||||
|
||||
NETSYS_V3 uses 64 bits for each counters while older SoCs are using
|
||||
48/40 bits for each counter.
|
||||
Support reading per-flow byte and package counters on NETSYS_V3.
|
||||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Link: https://lore.kernel.org/r/37a0928fa8c1253b197884c68ce1f54239421ac5.1690946442.git.daniel@makrotopia.org
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 +
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 21 +++++++++++++-------
|
||||
drivers/net/ethernet/mediatek/mtk_ppe_regs.h | 2 ++
|
||||
3 files changed, 17 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4976,6 +4976,7 @@ static const struct mtk_soc_data mt7988_
|
||||
.version = 3,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
+ .has_accounting = true,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -91,7 +91,6 @@ static int mtk_ppe_mib_wait_busy(struct
|
||||
|
||||
static int mtk_mib_entry_read(struct mtk_ppe *ppe, u16 index, u64 *bytes, u64 *packets)
|
||||
{
|
||||
- u32 byte_cnt_low, byte_cnt_high, pkt_cnt_low, pkt_cnt_high;
|
||||
u32 val, cnt_r0, cnt_r1, cnt_r2;
|
||||
int ret;
|
||||
|
||||
@@ -106,12 +105,20 @@ static int mtk_mib_entry_read(struct mtk
|
||||
cnt_r1 = readl(ppe->base + MTK_PPE_MIB_SER_R1);
|
||||
cnt_r2 = readl(ppe->base + MTK_PPE_MIB_SER_R2);
|
||||
|
||||
- byte_cnt_low = FIELD_GET(MTK_PPE_MIB_SER_R0_BYTE_CNT_LOW, cnt_r0);
|
||||
- byte_cnt_high = FIELD_GET(MTK_PPE_MIB_SER_R1_BYTE_CNT_HIGH, cnt_r1);
|
||||
- pkt_cnt_low = FIELD_GET(MTK_PPE_MIB_SER_R1_PKT_CNT_LOW, cnt_r1);
|
||||
- pkt_cnt_high = FIELD_GET(MTK_PPE_MIB_SER_R2_PKT_CNT_HIGH, cnt_r2);
|
||||
- *bytes = ((u64)byte_cnt_high << 32) | byte_cnt_low;
|
||||
- *packets = (pkt_cnt_high << 16) | pkt_cnt_low;
|
||||
+ if (mtk_is_netsys_v3_or_greater(ppe->eth)) {
|
||||
+ /* 64 bit for each counter */
|
||||
+ u32 cnt_r3 = readl(ppe->base + MTK_PPE_MIB_SER_R3);
|
||||
+ *bytes = ((u64)cnt_r1 << 32) | cnt_r0;
|
||||
+ *packets = ((u64)cnt_r3 << 32) | cnt_r2;
|
||||
+ } else {
|
||||
+ /* 48 bit byte counter, 40 bit packet counter */
|
||||
+ u32 byte_cnt_low = FIELD_GET(MTK_PPE_MIB_SER_R0_BYTE_CNT_LOW, cnt_r0);
|
||||
+ u32 byte_cnt_high = FIELD_GET(MTK_PPE_MIB_SER_R1_BYTE_CNT_HIGH, cnt_r1);
|
||||
+ u32 pkt_cnt_low = FIELD_GET(MTK_PPE_MIB_SER_R1_PKT_CNT_LOW, cnt_r1);
|
||||
+ u32 pkt_cnt_high = FIELD_GET(MTK_PPE_MIB_SER_R2_PKT_CNT_HIGH, cnt_r2);
|
||||
+ *bytes = ((u64)byte_cnt_high << 32) | byte_cnt_low;
|
||||
+ *packets = (pkt_cnt_high << 16) | pkt_cnt_low;
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_regs.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_regs.h
|
||||
@@ -163,6 +163,8 @@ enum {
|
||||
#define MTK_PPE_MIB_SER_R2 0x348
|
||||
#define MTK_PPE_MIB_SER_R2_PKT_CNT_HIGH GENMASK(23, 0)
|
||||
|
||||
+#define MTK_PPE_MIB_SER_R3 0x34c
|
||||
+
|
||||
#define MTK_PPE_MIB_CACHE_CTL 0x350
|
||||
#define MTK_PPE_MIB_CACHE_CTL_EN BIT(0)
|
||||
#define MTK_PPE_MIB_CACHE_CTL_FLUSH BIT(2)
|
|
@ -0,0 +1,52 @@
|
|||
From 3b12f42772c26869d60398c1710aa27b27cd945c Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Mon, 21 Aug 2023 17:12:44 +0100
|
||||
Subject: [PATCH 109/250] net: ethernet: mtk_eth_soc: fix NULL pointer on hw
|
||||
reset
|
||||
|
||||
When a hardware reset is triggered on devices not initializing WED the
|
||||
calls to mtk_wed_fe_reset and mtk_wed_fe_reset_complete dereference a
|
||||
pointer on uninitialized stack memory.
|
||||
Break out of both functions in case a hw_list entry is 0.
|
||||
|
||||
Fixes: 08a764a7c51b ("net: ethernet: mtk_wed: add reset/reset_complete callbacks")
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/5465c1609b464cc7407ae1530c40821dcdf9d3e6.1692634266.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_wed.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
@@ -214,9 +214,13 @@ void mtk_wed_fe_reset(void)
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
|
||||
struct mtk_wed_hw *hw = hw_list[i];
|
||||
- struct mtk_wed_device *dev = hw->wed_dev;
|
||||
+ struct mtk_wed_device *dev;
|
||||
int err;
|
||||
|
||||
+ if (!hw)
|
||||
+ break;
|
||||
+
|
||||
+ dev = hw->wed_dev;
|
||||
if (!dev || !dev->wlan.reset)
|
||||
continue;
|
||||
|
||||
@@ -237,8 +241,12 @@ void mtk_wed_fe_reset_complete(void)
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
|
||||
struct mtk_wed_hw *hw = hw_list[i];
|
||||
- struct mtk_wed_device *dev = hw->wed_dev;
|
||||
+ struct mtk_wed_device *dev;
|
||||
+
|
||||
+ if (!hw)
|
||||
+ break;
|
||||
|
||||
+ dev = hw->wed_dev;
|
||||
if (!dev || !dev->wlan.reset_complete)
|
||||
continue;
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
From 489aea123d74a846ce746bfdb3efe1e7ad512e0d Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Tue, 22 Aug 2023 17:31:24 +0100
|
||||
Subject: [PATCH 110/250] net: ethernet: mtk_eth_soc: fix register definitions
|
||||
for MT7988
|
||||
|
||||
More register macros need to be adjusted for the 3rd GMAC on MT7988.
|
||||
Account for added bit in SYSCFG0_SGMII_MASK.
|
||||
|
||||
Fixes: 445eb6448ed3 ("net: ethernet: mtk_eth_soc: add basic support for MT7988 SoC")
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Link: https://lore.kernel.org/r/1c8da012e2ca80939906d85f314138c552139f0f.1692721443.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -133,10 +133,12 @@
|
||||
#define MTK_GDMA_XGDM_SEL BIT(31)
|
||||
|
||||
/* Unicast Filter MAC Address Register - Low */
|
||||
-#define MTK_GDMA_MAC_ADRL(x) (0x508 + (x * 0x1000))
|
||||
+#define MTK_GDMA_MAC_ADRL(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
|
||||
+ 0x548 : 0x508 + (_x * 0x1000); })
|
||||
|
||||
/* Unicast Filter MAC Address Register - High */
|
||||
-#define MTK_GDMA_MAC_ADRH(x) (0x50C + (x * 0x1000))
|
||||
+#define MTK_GDMA_MAC_ADRH(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
|
||||
+ 0x54C : 0x50C + (_x * 0x1000); })
|
||||
|
||||
/* FE global misc reg*/
|
||||
#define MTK_FE_GLO_MISC 0x124
|
||||
@@ -500,7 +502,7 @@
|
||||
#define ETHSYS_SYSCFG0 0x14
|
||||
#define SYSCFG0_GE_MASK 0x3
|
||||
#define SYSCFG0_GE_MODE(x, y) (x << (12 + (y * 2)))
|
||||
-#define SYSCFG0_SGMII_MASK GENMASK(9, 8)
|
||||
+#define SYSCFG0_SGMII_MASK GENMASK(9, 7)
|
||||
#define SYSCFG0_SGMII_GMAC1 ((2 << 8) & SYSCFG0_SGMII_MASK)
|
||||
#define SYSCFG0_SGMII_GMAC2 ((3 << 8) & SYSCFG0_SGMII_MASK)
|
||||
#define SYSCFG0_SGMII_GMAC1_V2 BIT(9)
|
|
@ -0,0 +1,188 @@
|
|||
From 15a84d1c44ae8c1451c265ee60500588a24e8cd6 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Tue, 22 Aug 2023 17:32:03 +0100
|
||||
Subject: [PATCH 111/250] net: ethernet: mtk_eth_soc: add reset bits for MT7988
|
||||
|
||||
Add bits needed to reset the frame engine on MT7988.
|
||||
|
||||
Fixes: 445eb6448ed3 ("net: ethernet: mtk_eth_soc: add basic support for MT7988 SoC")
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/89b6c38380e7a3800c1362aa7575600717bc7543.1692721443.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 76 +++++++++++++++------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 16 +++--
|
||||
2 files changed, 68 insertions(+), 24 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -3538,19 +3538,34 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
{
|
||||
u32 val;
|
||||
|
||||
- if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
|
||||
+
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ val = RSTCTRL_PPE0_V3;
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ val |= RSTCTRL_PPE1_V3;
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
|
||||
+ val |= RSTCTRL_PPE2;
|
||||
+
|
||||
+ val |= RSTCTRL_WDMA0 | RSTCTRL_WDMA1 | RSTCTRL_WDMA2;
|
||||
+ } else if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
val = RSTCTRL_PPE0_V2;
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ val |= RSTCTRL_PPE1;
|
||||
} else {
|
||||
val = RSTCTRL_PPE0;
|
||||
}
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
- val |= RSTCTRL_PPE1;
|
||||
-
|
||||
ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
|
||||
|
||||
- if (mtk_is_netsys_v2_or_greater(eth))
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth))
|
||||
+ regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||
+ 0x6f8ff);
|
||||
+ else if (mtk_is_netsys_v2_or_greater(eth))
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||
0x3ffffff);
|
||||
}
|
||||
@@ -3576,13 +3591,21 @@ static void mtk_hw_warm_reset(struct mtk
|
||||
return;
|
||||
}
|
||||
|
||||
- if (mtk_is_netsys_v2_or_greater(eth))
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V3;
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ rst_mask |= RSTCTRL_PPE1_V3;
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
|
||||
+ rst_mask |= RSTCTRL_PPE2;
|
||||
+
|
||||
+ rst_mask |= RSTCTRL_WDMA0 | RSTCTRL_WDMA1 | RSTCTRL_WDMA2;
|
||||
+ } else if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
|
||||
- else
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ rst_mask |= RSTCTRL_PPE1;
|
||||
+ } else {
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
|
||||
-
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
- rst_mask |= RSTCTRL_PPE1;
|
||||
+ }
|
||||
|
||||
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL, rst_mask, rst_mask);
|
||||
|
||||
@@ -3934,11 +3957,17 @@ static void mtk_prepare_for_reset(struct
|
||||
u32 val;
|
||||
int i;
|
||||
|
||||
- /* disabe FE P3 and P4 */
|
||||
- val = mtk_r32(eth, MTK_FE_GLO_CFG) | MTK_FE_LINK_DOWN_P3;
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
- val |= MTK_FE_LINK_DOWN_P4;
|
||||
- mtk_w32(eth, val, MTK_FE_GLO_CFG);
|
||||
+ /* set FE PPE ports link down */
|
||||
+ for (i = MTK_GMAC1_ID;
|
||||
+ i <= (mtk_is_netsys_v3_or_greater(eth) ? MTK_GMAC3_ID : MTK_GMAC2_ID);
|
||||
+ i += 2) {
|
||||
+ val = mtk_r32(eth, MTK_FE_GLO_CFG(i)) | MTK_FE_LINK_DOWN_P(PSE_PPE0_PORT);
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ val |= MTK_FE_LINK_DOWN_P(PSE_PPE1_PORT);
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
|
||||
+ val |= MTK_FE_LINK_DOWN_P(PSE_PPE2_PORT);
|
||||
+ mtk_w32(eth, val, MTK_FE_GLO_CFG(i));
|
||||
+ }
|
||||
|
||||
/* adjust PPE configurations to prepare for reset */
|
||||
for (i = 0; i < ARRAY_SIZE(eth->ppe); i++)
|
||||
@@ -3999,11 +4028,18 @@ static void mtk_pending_work(struct work
|
||||
}
|
||||
}
|
||||
|
||||
- /* enabe FE P3 and P4 */
|
||||
- val = mtk_r32(eth, MTK_FE_GLO_CFG) & ~MTK_FE_LINK_DOWN_P3;
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
- val &= ~MTK_FE_LINK_DOWN_P4;
|
||||
- mtk_w32(eth, val, MTK_FE_GLO_CFG);
|
||||
+ /* set FE PPE ports link up */
|
||||
+ for (i = MTK_GMAC1_ID;
|
||||
+ i <= (mtk_is_netsys_v3_or_greater(eth) ? MTK_GMAC3_ID : MTK_GMAC2_ID);
|
||||
+ i += 2) {
|
||||
+ val = mtk_r32(eth, MTK_FE_GLO_CFG(i)) & ~MTK_FE_LINK_DOWN_P(PSE_PPE0_PORT);
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE1))
|
||||
+ val &= ~MTK_FE_LINK_DOWN_P(PSE_PPE1_PORT);
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSTCTRL_PPE2))
|
||||
+ val &= ~MTK_FE_LINK_DOWN_P(PSE_PPE2_PORT);
|
||||
+
|
||||
+ mtk_w32(eth, val, MTK_FE_GLO_CFG(i));
|
||||
+ }
|
||||
|
||||
clear_bit(MTK_RESETTING, ð->state);
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -76,9 +76,8 @@
|
||||
#define MTK_HW_LRO_SDL_REMAIN_ROOM 1522
|
||||
|
||||
/* Frame Engine Global Configuration */
|
||||
-#define MTK_FE_GLO_CFG 0x00
|
||||
-#define MTK_FE_LINK_DOWN_P3 BIT(11)
|
||||
-#define MTK_FE_LINK_DOWN_P4 BIT(12)
|
||||
+#define MTK_FE_GLO_CFG(x) (((x) == MTK_GMAC3_ID) ? 0x24 : 0x00)
|
||||
+#define MTK_FE_LINK_DOWN_P(x) BIT(((x) + 8) % 16)
|
||||
|
||||
/* Frame Engine Global Reset Register */
|
||||
#define MTK_RST_GL 0x04
|
||||
@@ -519,9 +518,15 @@
|
||||
/* ethernet reset control register */
|
||||
#define ETHSYS_RSTCTRL 0x34
|
||||
#define RSTCTRL_FE BIT(6)
|
||||
+#define RSTCTRL_WDMA0 BIT(24)
|
||||
+#define RSTCTRL_WDMA1 BIT(25)
|
||||
+#define RSTCTRL_WDMA2 BIT(26)
|
||||
#define RSTCTRL_PPE0 BIT(31)
|
||||
#define RSTCTRL_PPE0_V2 BIT(30)
|
||||
#define RSTCTRL_PPE1 BIT(31)
|
||||
+#define RSTCTRL_PPE0_V3 BIT(29)
|
||||
+#define RSTCTRL_PPE1_V3 BIT(30)
|
||||
+#define RSTCTRL_PPE2 BIT(31)
|
||||
#define RSTCTRL_ETH BIT(23)
|
||||
|
||||
/* ethernet reset check idle register */
|
||||
@@ -928,6 +933,7 @@ enum mkt_eth_capabilities {
|
||||
MTK_QDMA_BIT,
|
||||
MTK_SOC_MT7628_BIT,
|
||||
MTK_RSTCTRL_PPE1_BIT,
|
||||
+ MTK_RSTCTRL_PPE2_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
|
||||
/* MUX BITS*/
|
||||
@@ -962,6 +968,7 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_QDMA BIT_ULL(MTK_QDMA_BIT)
|
||||
#define MTK_SOC_MT7628 BIT_ULL(MTK_SOC_MT7628_BIT)
|
||||
#define MTK_RSTCTRL_PPE1 BIT_ULL(MTK_RSTCTRL_PPE1_BIT)
|
||||
+#define MTK_RSTCTRL_PPE2 BIT_ULL(MTK_RSTCTRL_PPE2_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT_ULL(MTK_U3_COPHY_V2_BIT)
|
||||
|
||||
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
||||
@@ -1044,7 +1051,8 @@ enum mkt_eth_capabilities {
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_RSTCTRL_PPE1)
|
||||
|
||||
-#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1)
|
||||
+#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1 | \
|
||||
+ MTK_RSTCTRL_PPE2)
|
||||
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
|
@ -0,0 +1,254 @@
|
|||
From 25ce45fe40b574e5d7ffa407f7f2db03e7d5a910 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Tue, 22 Aug 2023 17:32:54 +0100
|
||||
Subject: [PATCH 112/250] net: ethernet: mtk_eth_soc: add support for in-SoC
|
||||
SRAM
|
||||
|
||||
MT7981, MT7986 and MT7988 come with in-SoC SRAM dedicated for Ethernet
|
||||
DMA rings. Support using the SRAM without breaking existing device tree
|
||||
bindings, ie. only new SoC starting from MT7988 will have the SRAM
|
||||
declared as additional resource in device tree. For MT7981 and MT7986
|
||||
an offset on top of the main I/O base is used.
|
||||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/e45e0f230c63ad58869e8fe35b95a2fb8925b625.1692721443.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 88 ++++++++++++++++-----
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 12 ++-
|
||||
2 files changed, 78 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1075,10 +1075,13 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
dma_addr_t dma_addr;
|
||||
int i;
|
||||
|
||||
- eth->scratch_ring = dma_alloc_coherent(eth->dma_dev,
|
||||
- cnt * soc->txrx.txd_size,
|
||||
- ð->phy_scratch_ring,
|
||||
- GFP_KERNEL);
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM))
|
||||
+ eth->scratch_ring = eth->sram_base;
|
||||
+ else
|
||||
+ eth->scratch_ring = dma_alloc_coherent(eth->dma_dev,
|
||||
+ cnt * soc->txrx.txd_size,
|
||||
+ ð->phy_scratch_ring,
|
||||
+ GFP_KERNEL);
|
||||
if (unlikely(!eth->scratch_ring))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2376,8 +2379,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
if (!ring->buf)
|
||||
goto no_tx_mem;
|
||||
|
||||
- ring->dma = dma_alloc_coherent(eth->dma_dev, ring_size * sz,
|
||||
- &ring->phys, GFP_KERNEL);
|
||||
+ if (MTK_HAS_CAPS(soc->caps, MTK_SRAM)) {
|
||||
+ ring->dma = eth->sram_base + ring_size * sz;
|
||||
+ ring->phys = eth->phy_scratch_ring + ring_size * (dma_addr_t)sz;
|
||||
+ } else {
|
||||
+ ring->dma = dma_alloc_coherent(eth->dma_dev, ring_size * sz,
|
||||
+ &ring->phys, GFP_KERNEL);
|
||||
+ }
|
||||
+
|
||||
if (!ring->dma)
|
||||
goto no_tx_mem;
|
||||
|
||||
@@ -2476,8 +2485,7 @@ static void mtk_tx_clean(struct mtk_eth
|
||||
kfree(ring->buf);
|
||||
ring->buf = NULL;
|
||||
}
|
||||
-
|
||||
- if (ring->dma) {
|
||||
+ if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
ring->dma_size * soc->txrx.txd_size,
|
||||
ring->dma, ring->phys);
|
||||
@@ -2496,9 +2504,14 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
{
|
||||
const struct mtk_reg_map *reg_map = eth->soc->reg_map;
|
||||
struct mtk_rx_ring *ring;
|
||||
- int rx_data_len, rx_dma_size;
|
||||
+ int rx_data_len, rx_dma_size, tx_ring_size;
|
||||
int i;
|
||||
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||
+ tx_ring_size = MTK_QDMA_RING_SIZE;
|
||||
+ else
|
||||
+ tx_ring_size = MTK_DMA_SIZE;
|
||||
+
|
||||
if (rx_flag == MTK_RX_FLAGS_QDMA) {
|
||||
if (ring_no)
|
||||
return -EINVAL;
|
||||
@@ -2533,9 +2546,20 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
ring->page_pool = pp;
|
||||
}
|
||||
|
||||
- ring->dma = dma_alloc_coherent(eth->dma_dev,
|
||||
- rx_dma_size * eth->soc->txrx.rxd_size,
|
||||
- &ring->phys, GFP_KERNEL);
|
||||
+ if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM) ||
|
||||
+ rx_flag != MTK_RX_FLAGS_NORMAL) {
|
||||
+ ring->dma = dma_alloc_coherent(eth->dma_dev,
|
||||
+ rx_dma_size * eth->soc->txrx.rxd_size,
|
||||
+ &ring->phys, GFP_KERNEL);
|
||||
+ } else {
|
||||
+ struct mtk_tx_ring *tx_ring = ð->tx_ring;
|
||||
+
|
||||
+ ring->dma = tx_ring->dma + tx_ring_size *
|
||||
+ eth->soc->txrx.txd_size * (ring_no + 1);
|
||||
+ ring->phys = tx_ring->phys + tx_ring_size *
|
||||
+ eth->soc->txrx.txd_size * (ring_no + 1);
|
||||
+ }
|
||||
+
|
||||
if (!ring->dma)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -2618,7 +2642,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring)
|
||||
+static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring, bool in_sram)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -2641,7 +2665,7 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
ring->data = NULL;
|
||||
}
|
||||
|
||||
- if (ring->dma) {
|
||||
+ if (!in_sram && ring->dma) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
ring->dma_size * eth->soc->txrx.rxd_size,
|
||||
ring->dma, ring->phys);
|
||||
@@ -3001,7 +3025,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
for (i = 0; i < MTK_MAX_DEVS; i++)
|
||||
if (eth->netdev[i])
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
- if (eth->scratch_ring) {
|
||||
+ if (!MTK_HAS_CAPS(soc->caps, MTK_SRAM) && eth->scratch_ring) {
|
||||
dma_free_coherent(eth->dma_dev,
|
||||
MTK_QDMA_RING_SIZE * soc->txrx.txd_size,
|
||||
eth->scratch_ring, eth->phy_scratch_ring);
|
||||
@@ -3009,13 +3033,13 @@ static void mtk_dma_free(struct mtk_eth
|
||||
eth->phy_scratch_ring = 0;
|
||||
}
|
||||
mtk_tx_clean(eth);
|
||||
- mtk_rx_clean(eth, ð->rx_ring[0]);
|
||||
- mtk_rx_clean(eth, ð->rx_ring_qdma);
|
||||
+ mtk_rx_clean(eth, ð->rx_ring[0], MTK_HAS_CAPS(soc->caps, MTK_SRAM));
|
||||
+ mtk_rx_clean(eth, ð->rx_ring_qdma, false);
|
||||
|
||||
if (eth->hwlro) {
|
||||
mtk_hwlro_rx_uninit(eth);
|
||||
for (i = 1; i < MTK_MAX_RX_RING_NUM; i++)
|
||||
- mtk_rx_clean(eth, ð->rx_ring[i]);
|
||||
+ mtk_rx_clean(eth, ð->rx_ring[i], false);
|
||||
}
|
||||
|
||||
kfree(eth->scratch_head);
|
||||
@@ -4585,7 +4609,7 @@ static int mtk_sgmii_init(struct mtk_eth
|
||||
|
||||
static int mtk_probe(struct platform_device *pdev)
|
||||
{
|
||||
- struct resource *res = NULL;
|
||||
+ struct resource *res = NULL, *res_sram;
|
||||
struct device_node *mac_np;
|
||||
struct mtk_eth *eth;
|
||||
int err, i;
|
||||
@@ -4605,6 +4629,20 @@ static int mtk_probe(struct platform_dev
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||
eth->ip_align = NET_IP_ALIGN;
|
||||
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM)) {
|
||||
+ /* SRAM is actual memory and supports transparent access just like DRAM.
|
||||
+ * Hence we don't require __iomem being set and don't need to use accessor
|
||||
+ * functions to read from or write to SRAM.
|
||||
+ */
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ eth->sram_base = (void __force *)devm_platform_ioremap_resource(pdev, 1);
|
||||
+ if (IS_ERR(eth->sram_base))
|
||||
+ return PTR_ERR(eth->sram_base);
|
||||
+ } else {
|
||||
+ eth->sram_base = (void __force *)eth->base + MTK_ETH_SRAM_OFFSET;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
spin_lock_init(ð->page_lock);
|
||||
spin_lock_init(ð->tx_irq_lock);
|
||||
spin_lock_init(ð->rx_irq_lock);
|
||||
@@ -4668,6 +4706,18 @@ static int mtk_probe(struct platform_dev
|
||||
err = -EINVAL;
|
||||
goto err_destroy_sgmii;
|
||||
}
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_SRAM)) {
|
||||
+ if (mtk_is_netsys_v3_or_greater(eth)) {
|
||||
+ res_sram = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
+ if (!res_sram) {
|
||||
+ err = -EINVAL;
|
||||
+ goto err_destroy_sgmii;
|
||||
+ }
|
||||
+ eth->phy_scratch_ring = res_sram->start;
|
||||
+ } else {
|
||||
+ eth->phy_scratch_ring = res->start + MTK_ETH_SRAM_OFFSET;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
if (eth->soc->offload_version) {
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -139,6 +139,9 @@
|
||||
#define MTK_GDMA_MAC_ADRH(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
|
||||
0x54C : 0x50C + (_x * 0x1000); })
|
||||
|
||||
+/* Internal SRAM offset */
|
||||
+#define MTK_ETH_SRAM_OFFSET 0x40000
|
||||
+
|
||||
/* FE global misc reg*/
|
||||
#define MTK_FE_GLO_MISC 0x124
|
||||
|
||||
@@ -935,6 +938,7 @@ enum mkt_eth_capabilities {
|
||||
MTK_RSTCTRL_PPE1_BIT,
|
||||
MTK_RSTCTRL_PPE2_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
+ MTK_SRAM_BIT,
|
||||
|
||||
/* MUX BITS*/
|
||||
MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
|
||||
@@ -970,6 +974,7 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_RSTCTRL_PPE1 BIT_ULL(MTK_RSTCTRL_PPE1_BIT)
|
||||
#define MTK_RSTCTRL_PPE2 BIT_ULL(MTK_RSTCTRL_PPE2_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT_ULL(MTK_U3_COPHY_V2_BIT)
|
||||
+#define MTK_SRAM BIT_ULL(MTK_SRAM_BIT)
|
||||
|
||||
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
||||
BIT_ULL(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
||||
@@ -1045,14 +1050,14 @@ enum mkt_eth_capabilities {
|
||||
#define MT7981_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
|
||||
- MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1 | MTK_SRAM)
|
||||
|
||||
#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
- MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1 | MTK_SRAM)
|
||||
|
||||
#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1 | \
|
||||
- MTK_RSTCTRL_PPE2)
|
||||
+ MTK_RSTCTRL_PPE2 | MTK_SRAM)
|
||||
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
||||
@@ -1212,6 +1217,7 @@ struct mtk_eth {
|
||||
struct device *dev;
|
||||
struct device *dma_dev;
|
||||
void __iomem *base;
|
||||
+ void *sram_base;
|
||||
spinlock_t page_lock;
|
||||
spinlock_t tx_irq_lock;
|
||||
spinlock_t rx_irq_lock;
|
|
@ -0,0 +1,166 @@
|
|||
From 0b0d606eb9650fa01dd5621e072aa29a10544399 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Tue, 22 Aug 2023 17:33:12 +0100
|
||||
Subject: [PATCH 113/250] net: ethernet: mtk_eth_soc: support 36-bit DMA
|
||||
addressing on MT7988
|
||||
|
||||
Systems having 4 GiB of RAM and more require DMA addressing beyond the
|
||||
current 32-bit limit. Starting from MT7988 the hardware now supports
|
||||
36-bit DMA addressing, let's use that new capability in the driver to
|
||||
avoid running into swiotlb on systems with 4 GiB of RAM or more.
|
||||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/95b919c98876c9e49761e44662e7c937479eecb8.1692721443.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 30 +++++++++++++++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 22 +++++++++++++--
|
||||
2 files changed, 48 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -1266,6 +1266,10 @@ static void mtk_tx_set_dma_desc_v2(struc
|
||||
data = TX_DMA_PLEN0(info->size);
|
||||
if (info->last)
|
||||
data |= TX_DMA_LS0;
|
||||
+
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
|
||||
+ data |= TX_DMA_PREP_ADDR64(info->addr);
|
||||
+
|
||||
WRITE_ONCE(desc->txd3, data);
|
||||
|
||||
/* set forward port */
|
||||
@@ -1933,6 +1937,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
bool xdp_flush = false;
|
||||
int idx;
|
||||
struct sk_buff *skb;
|
||||
+ u64 addr64 = 0;
|
||||
u8 *data, *new_data;
|
||||
struct mtk_rx_dma_v2 *rxd, trxd;
|
||||
int done = 0, bytes = 0;
|
||||
@@ -2048,7 +2053,10 @@ static int mtk_poll_rx(struct napi_struc
|
||||
goto release_desc;
|
||||
}
|
||||
|
||||
- dma_unmap_single(eth->dma_dev, trxd.rxd1,
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
|
||||
+ addr64 = RX_DMA_GET_ADDR64(trxd.rxd2);
|
||||
+
|
||||
+ dma_unmap_single(eth->dma_dev, ((u64)trxd.rxd1 | addr64),
|
||||
ring->buf_size, DMA_FROM_DEVICE);
|
||||
|
||||
skb = build_skb(data, ring->frag_size);
|
||||
@@ -2114,6 +2122,9 @@ release_desc:
|
||||
else
|
||||
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
||||
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
|
||||
+ rxd->rxd2 |= RX_DMA_PREP_ADDR64(dma_addr);
|
||||
+
|
||||
ring->calc_idx = idx;
|
||||
done++;
|
||||
}
|
||||
@@ -2598,6 +2609,9 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
else
|
||||
rxd->rxd2 = RX_DMA_PREP_PLEN0(ring->buf_size);
|
||||
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
|
||||
+ rxd->rxd2 |= RX_DMA_PREP_ADDR64(dma_addr);
|
||||
+
|
||||
rxd->rxd3 = 0;
|
||||
rxd->rxd4 = 0;
|
||||
if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
@@ -2644,6 +2658,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
|
||||
static void mtk_rx_clean(struct mtk_eth *eth, struct mtk_rx_ring *ring, bool in_sram)
|
||||
{
|
||||
+ u64 addr64 = 0;
|
||||
int i;
|
||||
|
||||
if (ring->data && ring->dma) {
|
||||
@@ -2657,7 +2672,10 @@ static void mtk_rx_clean(struct mtk_eth
|
||||
if (!rxd->rxd1)
|
||||
continue;
|
||||
|
||||
- dma_unmap_single(eth->dma_dev, rxd->rxd1,
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA))
|
||||
+ addr64 = RX_DMA_GET_ADDR64(rxd->rxd2);
|
||||
+
|
||||
+ dma_unmap_single(eth->dma_dev, ((u64)rxd->rxd1 | addr64),
|
||||
ring->buf_size, DMA_FROM_DEVICE);
|
||||
mtk_rx_put_buff(ring, ring->data[i], false);
|
||||
}
|
||||
@@ -4643,6 +4661,14 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
+ if (MTK_HAS_CAPS(eth->soc->caps, MTK_36BIT_DMA)) {
|
||||
+ err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(36));
|
||||
+ if (err) {
|
||||
+ dev_err(&pdev->dev, "Wrong DMA config\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
spin_lock_init(ð->page_lock);
|
||||
spin_lock_init(ð->tx_irq_lock);
|
||||
spin_lock_init(ð->rx_irq_lock);
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -331,6 +331,14 @@
|
||||
#define TX_DMA_PLEN1(x) ((x) & eth->soc->txrx.dma_max_len)
|
||||
#define TX_DMA_SWC BIT(14)
|
||||
#define TX_DMA_PQID GENMASK(3, 0)
|
||||
+#define TX_DMA_ADDR64_MASK GENMASK(3, 0)
|
||||
+#if IS_ENABLED(CONFIG_64BIT)
|
||||
+# define TX_DMA_GET_ADDR64(x) (((u64)FIELD_GET(TX_DMA_ADDR64_MASK, (x))) << 32)
|
||||
+# define TX_DMA_PREP_ADDR64(x) FIELD_PREP(TX_DMA_ADDR64_MASK, ((x) >> 32))
|
||||
+#else
|
||||
+# define TX_DMA_GET_ADDR64(x) (0)
|
||||
+# define TX_DMA_PREP_ADDR64(x) (0)
|
||||
+#endif
|
||||
|
||||
/* PDMA on MT7628 */
|
||||
#define TX_DMA_DONE BIT(31)
|
||||
@@ -343,6 +351,14 @@
|
||||
#define RX_DMA_PREP_PLEN0(x) (((x) & eth->soc->txrx.dma_max_len) << eth->soc->txrx.dma_len_offset)
|
||||
#define RX_DMA_GET_PLEN0(x) (((x) >> eth->soc->txrx.dma_len_offset) & eth->soc->txrx.dma_max_len)
|
||||
#define RX_DMA_VTAG BIT(15)
|
||||
+#define RX_DMA_ADDR64_MASK GENMASK(3, 0)
|
||||
+#if IS_ENABLED(CONFIG_64BIT)
|
||||
+# define RX_DMA_GET_ADDR64(x) (((u64)FIELD_GET(RX_DMA_ADDR64_MASK, (x))) << 32)
|
||||
+# define RX_DMA_PREP_ADDR64(x) FIELD_PREP(RX_DMA_ADDR64_MASK, ((x) >> 32))
|
||||
+#else
|
||||
+# define RX_DMA_GET_ADDR64(x) (0)
|
||||
+# define RX_DMA_PREP_ADDR64(x) (0)
|
||||
+#endif
|
||||
|
||||
/* QDMA descriptor rxd3 */
|
||||
#define RX_DMA_VID(x) ((x) & VLAN_VID_MASK)
|
||||
@@ -939,6 +955,7 @@ enum mkt_eth_capabilities {
|
||||
MTK_RSTCTRL_PPE2_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
MTK_SRAM_BIT,
|
||||
+ MTK_36BIT_DMA_BIT,
|
||||
|
||||
/* MUX BITS*/
|
||||
MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
|
||||
@@ -975,6 +992,7 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_RSTCTRL_PPE2 BIT_ULL(MTK_RSTCTRL_PPE2_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT_ULL(MTK_U3_COPHY_V2_BIT)
|
||||
#define MTK_SRAM BIT_ULL(MTK_SRAM_BIT)
|
||||
+#define MTK_36BIT_DMA BIT_ULL(MTK_36BIT_DMA_BIT)
|
||||
|
||||
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
||||
BIT_ULL(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
||||
@@ -1056,8 +1074,8 @@ enum mkt_eth_capabilities {
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_RSTCTRL_PPE1 | MTK_SRAM)
|
||||
|
||||
-#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1 | \
|
||||
- MTK_RSTCTRL_PPE2 | MTK_SRAM)
|
||||
+#define MT7988_CAPS (MTK_36BIT_DMA | MTK_GDM1_ESW | MTK_QDMA | \
|
||||
+ MTK_RSTCTRL_PPE1 | MTK_RSTCTRL_PPE2 | MTK_SRAM)
|
||||
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
|
@ -0,0 +1,81 @@
|
|||
From bfac8c490d605bea03b1f1927582b6f396462164 Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Mon, 27 Jun 2022 12:44:43 +0100
|
||||
Subject: [PATCH] net: phylink: disable PCS polling over major configuration
|
||||
|
||||
While we are performing a major configuration, there is no point having
|
||||
the PCS polling timer running. Stop it before we begin preparing for
|
||||
the configuration change, and restart it only once we've successfully
|
||||
completed the change.
|
||||
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/phy/phylink.c | 30 ++++++++++++++++++++----------
|
||||
1 file changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/phy/phylink.c
|
||||
+++ b/drivers/net/phy/phylink.c
|
||||
@@ -756,6 +756,18 @@ static void phylink_resolve_flow(struct
|
||||
}
|
||||
}
|
||||
|
||||
+static void phylink_pcs_poll_stop(struct phylink *pl)
|
||||
+{
|
||||
+ if (pl->cfg_link_an_mode == MLO_AN_INBAND)
|
||||
+ del_timer(&pl->link_poll);
|
||||
+}
|
||||
+
|
||||
+static void phylink_pcs_poll_start(struct phylink *pl)
|
||||
+{
|
||||
+ if (pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND)
|
||||
+ mod_timer(&pl->link_poll, jiffies + HZ);
|
||||
+}
|
||||
+
|
||||
static void phylink_mac_config(struct phylink *pl,
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
@@ -787,6 +799,7 @@ static void phylink_major_config(struct
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
struct phylink_pcs *pcs = NULL;
|
||||
+ bool pcs_changed = false;
|
||||
int err;
|
||||
|
||||
phylink_dbg(pl, "major config %s\n", phy_modes(state->interface));
|
||||
@@ -799,8 +812,12 @@ static void phylink_major_config(struct
|
||||
pcs);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ pcs_changed = pcs && pl->pcs != pcs;
|
||||
}
|
||||
|
||||
+ phylink_pcs_poll_stop(pl);
|
||||
+
|
||||
if (pl->mac_ops->mac_prepare) {
|
||||
err = pl->mac_ops->mac_prepare(pl->config, pl->cur_link_an_mode,
|
||||
state->interface);
|
||||
@@ -814,8 +831,10 @@ static void phylink_major_config(struct
|
||||
/* If we have a new PCS, switch to the new PCS after preparing the MAC
|
||||
* for the change.
|
||||
*/
|
||||
- if (pcs)
|
||||
- phylink_set_pcs(pl, pcs);
|
||||
+ if (pcs_changed) {
|
||||
+ pl->pcs = pcs;
|
||||
+ pl->pcs_ops = pcs->ops;
|
||||
+ }
|
||||
|
||||
phylink_mac_config(pl, state);
|
||||
|
||||
@@ -841,6 +860,8 @@ static void phylink_major_config(struct
|
||||
phylink_err(pl, "mac_finish failed: %pe\n",
|
||||
ERR_PTR(err));
|
||||
}
|
||||
+
|
||||
+ phylink_pcs_poll_start(pl);
|
||||
}
|
||||
|
||||
/*
|
|
@ -0,0 +1,38 @@
|
|||
From b7d78b46d5e8dc77c656c13885d31e931923b915 Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
||||
Date: Wed, 29 Jun 2022 22:33:58 +0300
|
||||
Subject: [PATCH] net: phylink: fix NULL pl->pcs dereference during
|
||||
phylink_pcs_poll_start
|
||||
|
||||
The current link mode of the phylink instance may not require an
|
||||
attached PCS. However, phylink_major_config() unconditionally
|
||||
dereferences this potentially NULL pointer when restarting the link poll
|
||||
timer, which will panic the kernel.
|
||||
|
||||
Fix the problem by checking whether a PCS exists in phylink_pcs_poll_start(),
|
||||
otherwise do nothing. The code prior to the blamed patch also only
|
||||
looked at pcs->poll within an "if (pcs)" block.
|
||||
|
||||
Fixes: bfac8c490d60 ("net: phylink: disable PCS polling over major configuration")
|
||||
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
|
||||
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Tested-by: Gerhard Engleder <gerhard@engleder-embedded.com>
|
||||
Tested-by: Michael Walle <michael@walle.cc> # on kontron-kbox-a-230-ls
|
||||
Tested-by: Nicolas Ferre <nicolas.ferre@microchip.com> # on sam9x60ek
|
||||
Link: https://lore.kernel.org/r/20220629193358.4007923-1-vladimir.oltean@nxp.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/phy/phylink.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/phy/phylink.c
|
||||
+++ b/drivers/net/phy/phylink.c
|
||||
@@ -764,7 +764,7 @@ static void phylink_pcs_poll_stop(struct
|
||||
|
||||
static void phylink_pcs_poll_start(struct phylink *pl)
|
||||
{
|
||||
- if (pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND)
|
||||
+ if (pl->pcs && pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND)
|
||||
mod_timer(&pl->link_poll, jiffies + HZ);
|
||||
}
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
From 90ef0a7b0622c62758b2638604927867775479ea Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Thu, 13 Jul 2023 09:42:07 +0100
|
||||
Subject: [PATCH] net: phylink: add pcs_enable()/pcs_disable() methods
|
||||
|
||||
Add phylink PCS enable/disable callbacks that will allow us to place
|
||||
IEEE 802.3 register compliant PCS in power-down mode while not being
|
||||
used.
|
||||
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/phy/phylink.c | 48 +++++++++++++++++++++++++++++++--------
|
||||
include/linux/phylink.h | 16 +++++++++++++
|
||||
2 files changed, 55 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/net/phy/phylink.c
|
||||
+++ b/drivers/net/phy/phylink.c
|
||||
@@ -34,6 +34,10 @@ enum {
|
||||
PHYLINK_DISABLE_STOPPED,
|
||||
PHYLINK_DISABLE_LINK,
|
||||
PHYLINK_DISABLE_MAC_WOL,
|
||||
+
|
||||
+ PCS_STATE_DOWN = 0,
|
||||
+ PCS_STATE_STARTING,
|
||||
+ PCS_STATE_STARTED,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -72,6 +76,7 @@ struct phylink {
|
||||
struct mutex state_mutex;
|
||||
struct phylink_link_state phy_state;
|
||||
struct work_struct resolve;
|
||||
+ unsigned int pcs_state;
|
||||
|
||||
bool mac_link_dropped;
|
||||
bool using_mac_select_pcs;
|
||||
@@ -795,6 +800,22 @@ static void phylink_mac_pcs_an_restart(s
|
||||
}
|
||||
}
|
||||
|
||||
+static void phylink_pcs_disable(struct phylink_pcs *pcs)
|
||||
+{
|
||||
+ if (pcs && pcs->ops->pcs_disable)
|
||||
+ pcs->ops->pcs_disable(pcs);
|
||||
+}
|
||||
+
|
||||
+static int phylink_pcs_enable(struct phylink_pcs *pcs)
|
||||
+{
|
||||
+ int err = 0;
|
||||
+
|
||||
+ if (pcs && pcs->ops->pcs_enable)
|
||||
+ err = pcs->ops->pcs_enable(pcs);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
static void phylink_major_config(struct phylink *pl, bool restart,
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
@@ -832,12 +853,16 @@ static void phylink_major_config(struct
|
||||
* for the change.
|
||||
*/
|
||||
if (pcs_changed) {
|
||||
+ phylink_pcs_disable(pl->pcs);
|
||||
pl->pcs = pcs;
|
||||
pl->pcs_ops = pcs->ops;
|
||||
}
|
||||
|
||||
phylink_mac_config(pl, state);
|
||||
|
||||
+ if (pl->pcs_state == PCS_STATE_STARTING || pcs_changed)
|
||||
+ phylink_pcs_enable(pl->pcs);
|
||||
+
|
||||
if (pl->pcs_ops) {
|
||||
err = pl->pcs_ops->pcs_config(pl->pcs, pl->cur_link_an_mode,
|
||||
state->interface,
|
||||
@@ -1260,6 +1285,7 @@ struct phylink *phylink_create(struct ph
|
||||
pl->link_config.speed = SPEED_UNKNOWN;
|
||||
pl->link_config.duplex = DUPLEX_UNKNOWN;
|
||||
pl->link_config.an_enabled = true;
|
||||
+ pl->pcs_state = PCS_STATE_DOWN;
|
||||
pl->mac_ops = mac_ops;
|
||||
__set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
|
||||
timer_setup(&pl->link_poll, phylink_fixed_poll, 0);
|
||||
@@ -1651,6 +1677,8 @@ void phylink_start(struct phylink *pl)
|
||||
if (pl->netdev)
|
||||
netif_carrier_off(pl->netdev);
|
||||
|
||||
+ pl->pcs_state = PCS_STATE_STARTING;
|
||||
+
|
||||
/* Apply the link configuration to the MAC when starting. This allows
|
||||
* a fixed-link to start with the correct parameters, and also
|
||||
* ensures that we set the appropriate advertisement for Serdes links.
|
||||
@@ -1661,6 +1689,8 @@ void phylink_start(struct phylink *pl)
|
||||
*/
|
||||
phylink_mac_initial_config(pl, true);
|
||||
|
||||
+ pl->pcs_state = PCS_STATE_STARTED;
|
||||
+
|
||||
clear_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
|
||||
phylink_run_resolve(pl);
|
||||
|
||||
@@ -1680,16 +1710,9 @@ void phylink_start(struct phylink *pl)
|
||||
poll = true;
|
||||
}
|
||||
|
||||
- switch (pl->cfg_link_an_mode) {
|
||||
- case MLO_AN_FIXED:
|
||||
+ if (pl->cfg_link_an_mode == MLO_AN_FIXED)
|
||||
poll |= pl->config->poll_fixed_state;
|
||||
- break;
|
||||
- case MLO_AN_INBAND:
|
||||
- poll |= pl->config->pcs_poll;
|
||||
- if (pl->pcs)
|
||||
- poll |= pl->pcs->poll;
|
||||
- break;
|
||||
- }
|
||||
+
|
||||
if (poll)
|
||||
mod_timer(&pl->link_poll, jiffies + HZ);
|
||||
if (pl->phydev)
|
||||
@@ -1726,6 +1749,10 @@ void phylink_stop(struct phylink *pl)
|
||||
}
|
||||
|
||||
phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_STOPPED);
|
||||
+
|
||||
+ pl->pcs_state = PCS_STATE_DOWN;
|
||||
+
|
||||
+ phylink_pcs_disable(pl->pcs);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_stop);
|
||||
|
||||
--- a/include/linux/phylink.h
|
||||
+++ b/include/linux/phylink.h
|
||||
@@ -419,6 +419,8 @@ struct phylink_pcs {
|
||||
/**
|
||||
* struct phylink_pcs_ops - MAC PCS operations structure.
|
||||
* @pcs_validate: validate the link configuration.
|
||||
+ * @pcs_enable: enable the PCS.
|
||||
+ * @pcs_disable: disable the PCS.
|
||||
* @pcs_get_state: read the current MAC PCS link state from the hardware.
|
||||
* @pcs_config: configure the MAC PCS for the selected mode and state.
|
||||
* @pcs_an_restart: restart 802.3z BaseX autonegotiation.
|
||||
@@ -428,6 +430,8 @@ struct phylink_pcs {
|
||||
struct phylink_pcs_ops {
|
||||
int (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported,
|
||||
const struct phylink_link_state *state);
|
||||
+ int (*pcs_enable)(struct phylink_pcs *pcs);
|
||||
+ void (*pcs_disable)(struct phylink_pcs *pcs);
|
||||
void (*pcs_get_state)(struct phylink_pcs *pcs,
|
||||
struct phylink_link_state *state);
|
||||
int (*pcs_config)(struct phylink_pcs *pcs, unsigned int mode,
|
||||
@@ -458,6 +462,18 @@ int pcs_validate(struct phylink_pcs *pcs
|
||||
const struct phylink_link_state *state);
|
||||
|
||||
/**
|
||||
+ * pcs_enable() - enable the PCS.
|
||||
+ * @pcs: a pointer to a &struct phylink_pcs.
|
||||
+ */
|
||||
+int pcs_enable(struct phylink_pcs *pcs);
|
||||
+
|
||||
+/**
|
||||
+ * pcs_disable() - disable the PCS.
|
||||
+ * @pcs: a pointer to a &struct phylink_pcs.
|
||||
+ */
|
||||
+void pcs_disable(struct phylink_pcs *pcs);
|
||||
+
|
||||
+/**
|
||||
* pcs_get_state() - Read the current inband link state from the hardware
|
||||
* @pcs: a pointer to a &struct phylink_pcs.
|
||||
* @state: a pointer to a &struct phylink_link_state.
|
|
@ -0,0 +1,44 @@
|
|||
From e4ccdfb78a47132f2d215658aab8902fc457c4b4 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Fri, 18 Aug 2023 04:07:46 +0100
|
||||
Subject: [PATCH 082/125] net: pcs: lynxi: implement pcs_disable op
|
||||
|
||||
When switching from 10GBase-R/5GBase-R/USXGMII to one of the interface
|
||||
modes provided by mtk-pcs-lynxi we need to make sure to always perform
|
||||
a full configuration of the PHYA.
|
||||
|
||||
Implement pcs_disable op which resets the stored interface mode to
|
||||
PHY_INTERFACE_MODE_NA to trigger a full reconfiguration once the LynxI
|
||||
PCS driver had previously been deselected in favor of another PCS
|
||||
driver such as the to-be-added driver for the USXGMII PCS found in
|
||||
MT7988.
|
||||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/f23d1a60d2c9d2fb72e32dcb0eaa5f7e867a3d68.1692327891.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/pcs/pcs-mtk-lynxi.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
--- a/drivers/net/pcs/pcs-mtk-lynxi.c
|
||||
+++ b/drivers/net/pcs/pcs-mtk-lynxi.c
|
||||
@@ -241,11 +241,19 @@ static void mtk_pcs_lynxi_link_up(struct
|
||||
}
|
||||
}
|
||||
|
||||
+static void mtk_pcs_lynxi_disable(struct phylink_pcs *pcs)
|
||||
+{
|
||||
+ struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
|
||||
+
|
||||
+ mpcs->interface = PHY_INTERFACE_MODE_NA;
|
||||
+}
|
||||
+
|
||||
static const struct phylink_pcs_ops mtk_pcs_lynxi_ops = {
|
||||
.pcs_get_state = mtk_pcs_lynxi_get_state,
|
||||
.pcs_config = mtk_pcs_lynxi_config,
|
||||
.pcs_an_restart = mtk_pcs_lynxi_restart_an,
|
||||
.pcs_link_up = mtk_pcs_lynxi_link_up,
|
||||
+ .pcs_disable = mtk_pcs_lynxi_disable,
|
||||
};
|
||||
|
||||
struct phylink_pcs *mtk_pcs_lynxi_create(struct device *dev,
|
|
@ -131,7 +131,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||
/**
|
||||
* fwnode_mdio_find_device - Given a fwnode, find the mdio_device
|
||||
* @fwnode: pointer to the mdio_device's fwnode
|
||||
@@ -3118,6 +3189,11 @@ static int phy_probe(struct device *dev)
|
||||
@@ -3120,6 +3191,11 @@ static int phy_probe(struct device *dev)
|
||||
/* Set the state to READY by default */
|
||||
phydev->state = PHY_READY;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -2272,6 +2272,23 @@ struct btmtk_section_map {
|
||||
@@ -2275,6 +2275,23 @@ struct btmtk_section_map {
|
||||
};
|
||||
} __packed;
|
||||
|
||||
|
@ -41,7 +41,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|||
static void btusb_mtk_wmt_recv(struct urb *urb)
|
||||
{
|
||||
struct hci_dev *hdev = urb->context;
|
||||
@@ -3923,6 +3940,7 @@ static int btusb_probe(struct usb_interf
|
||||
@@ -3926,6 +3943,7 @@ static int btusb_probe(struct usb_interf
|
||||
hdev->shutdown = btusb_mtk_shutdown;
|
||||
hdev->manufacturer = 70;
|
||||
hdev->cmd_timeout = btusb_mtk_cmd_timeout;
|
||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|||
|
||||
--- a/drivers/bluetooth/btusb.c
|
||||
+++ b/drivers/bluetooth/btusb.c
|
||||
@@ -2277,7 +2277,7 @@ static int btusb_set_bdaddr_mtk(struct h
|
||||
@@ -2280,7 +2280,7 @@ static int btusb_set_bdaddr_mtk(struct h
|
||||
struct sk_buff *skb;
|
||||
long ret;
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
From 1b9827ceab08450308f7971d6fd700ec88b6ce67 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sat, 3 Dec 2022 14:20:37 +0100
|
||||
Subject: [PATCH 098/250] net: mtk_eth_soc: enable flow offload support for
|
||||
MT7986 SoC
|
||||
|
||||
Since Wireless Ethernet Dispatcher is now available for mt7986 in mt76,
|
||||
enable hw flow support for MT7986 SoC.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/fdcaacd827938e6a8c4aa1ac2c13e46d2c08c821.1670072898.git.lorenzo@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4331,6 +4331,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7986_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
.txrx = {
|
|
@ -1,28 +0,0 @@
|
|||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 27 Oct 2022 23:39:52 +0200
|
||||
Subject: [PATCH] net: ethernet: mtk_eth_soc: compile out netsys v2 code
|
||||
on mt7621
|
||||
|
||||
Avoid some branches in the hot path on low-end devices with limited CPU power,
|
||||
and reduce code size
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -921,7 +921,13 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
|
||||
(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
|
||||
|
||||
-#define MTK_HAS_CAPS(caps, _x) (((caps) & (_x)) == (_x))
|
||||
+#ifdef CONFIG_SOC_MT7621
|
||||
+#define MTK_CAP_MASK MTK_NETSYS_V2
|
||||
+#else
|
||||
+#define MTK_CAP_MASK 0
|
||||
+#endif
|
||||
+
|
||||
+#define MTK_HAS_CAPS(caps, _x) (((caps) & (_x) & ~(MTK_CAP_MASK)) == (_x))
|
||||
|
||||
#define MT7621_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
|
||||
MTK_GMAC2_RGMII | MTK_SHARED_INT | \
|
|
@ -181,7 +181,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/* CDMP Ingress Control Register */
|
||||
#define MTK_CDMP_IG_CTRL 0x400
|
||||
#define MTK_CDMP_STAG_EN BIT(0)
|
||||
@@ -1170,6 +1176,8 @@ struct mtk_eth {
|
||||
@@ -1164,6 +1170,8 @@ struct mtk_eth {
|
||||
|
||||
int ip_align;
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1073,11 +1073,13 @@ struct mtk_soc_data {
|
||||
@@ -1067,11 +1067,13 @@ struct mtk_soc_data {
|
||||
* @regmap: The register map pointing at the range used to setup
|
||||
* SGMII modes
|
||||
* @ana_rgc3: The offset refers to register ANA_RGC3 related to regmap
|
||||
|
|
|
@ -14,6 +14,12 @@ new device-tree attribute 'mediatek,pn_swap' to support them.
|
|||
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_path.c | 14 +++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 21 +++++++++++++
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 31 ++++++++++++++++++++
|
||||
drivers/net/ethernet/mediatek/mtk_sgmii.c | 10 +++++++
|
||||
4 files changed, 73 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_path.c
|
||||
|
@ -78,7 +84,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
static const struct mtk_soc_data mt7986_data = {
|
||||
.reg_map = &mt7986_reg_map,
|
||||
.ana_rgc3 = 0x128,
|
||||
@@ -4842,6 +4862,7 @@ const struct of_device_id of_mtk_match[]
|
||||
@@ -4843,6 +4863,7 @@ const struct of_device_id of_mtk_match[]
|
||||
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
||||
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
||||
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
||||
|
@ -145,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
|
||||
#define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
|
||||
BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
|
||||
@@ -966,6 +990,11 @@ enum mkt_eth_capabilities {
|
||||
@@ -960,6 +984,11 @@ enum mkt_eth_capabilities {
|
||||
MTK_MUX_U3_GMAC2_TO_QPHY | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
|
||||
|
||||
|
@ -157,7 +163,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
@@ -1079,12 +1108,14 @@ struct mtk_soc_data {
|
||||
@@ -1073,12 +1102,14 @@ struct mtk_soc_data {
|
||||
* @ana_rgc3: The offset refers to register ANA_RGC3 related to regmap
|
||||
* @interface: Currently configured interface mode
|
||||
* @pcs: Phylink PCS structure
|
||||
|
|
|
@ -228,7 +228,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
/* Infrasys subsystem config registers */
|
||||
#define INFRA_MISC2 0x70c
|
||||
#define CO_QPHY_SEL BIT(0)
|
||||
@@ -1108,31 +1049,6 @@ struct mtk_soc_data {
|
||||
@@ -1102,31 +1043,6 @@ struct mtk_soc_data {
|
||||
/* currently no SoC has more than 2 macs */
|
||||
#define MTK_MAX_DEVS 2
|
||||
|
||||
|
@ -260,7 +260,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
/* struct mtk_eth - This is the main datasructure for holding the state
|
||||
* of the driver
|
||||
* @dev: The device pointer
|
||||
@@ -1152,6 +1068,7 @@ struct mtk_sgmii {
|
||||
@@ -1146,6 +1062,7 @@ struct mtk_sgmii {
|
||||
* MII modes
|
||||
* @infra: The register map pointing at the range used to setup
|
||||
* SGMII and GePHY path
|
||||
|
@ -268,7 +268,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
* @pctl: The register map pointing at the range used to setup
|
||||
* GMAC port drive/slew values
|
||||
* @dma_refcnt: track how many netdevs are using the DMA engine
|
||||
@@ -1192,8 +1109,8 @@ struct mtk_eth {
|
||||
@@ -1186,8 +1103,8 @@ struct mtk_eth {
|
||||
u32 msg_enable;
|
||||
unsigned long sysclk;
|
||||
struct regmap *ethsys;
|
||||
|
@ -279,7 +279,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||
struct regmap *pctl;
|
||||
bool hwlro;
|
||||
refcount_t dma_refcnt;
|
||||
@@ -1355,10 +1272,6 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
@@ -1349,10 +1266,6 @@ void mtk_stats_update_mac(struct mtk_mac
|
||||
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
|
||||
u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
|
||||
|
||||
|
|
|
@ -1,59 +1,33 @@
|
|||
From patchwork Wed Nov 2 00:58:01 2022
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Patchwork-Submitter: Daniel Golle <daniel@makrotopia.org>
|
||||
X-Patchwork-Id: 13027653
|
||||
X-Patchwork-Delegate: kuba@kernel.org
|
||||
Return-Path: <netdev-owner@kernel.org>
|
||||
Date: Wed, 2 Nov 2022 00:58:01 +0000
|
||||
From f601293f37c4be618c5efaef85d2ee21f97e82e0 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
To: Felix Fietkau <nbd@nbd.name>, John Crispin <john@phrozen.org>,
|
||||
Sean Wang <sean.wang@mediatek.com>,
|
||||
Mark Lee <Mark-MC.Lee@mediatek.com>,
|
||||
"David S. Miller" <davem@davemloft.net>,
|
||||
Eric Dumazet <edumazet@google.com>,
|
||||
Jakub Kicinski <kuba@kernel.org>,
|
||||
Paolo Abeni <pabeni@redhat.com>,
|
||||
Matthias Brugger <matthias.bgg@gmail.com>,
|
||||
netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
|
||||
linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org
|
||||
Subject: [PATCH v4] net: ethernet: mediatek: ppe: add support for flow
|
||||
Date: Sun, 19 Mar 2023 12:57:35 +0000
|
||||
Subject: [PATCH 092/250] net: ethernet: mtk_eth_soc: ppe: add support for flow
|
||||
accounting
|
||||
Message-ID: <Y2HAmYYPd77dz+K5@makrotopia.org>
|
||||
MIME-Version: 1.0
|
||||
Content-Disposition: inline
|
||||
Precedence: bulk
|
||||
List-ID: <netdev.vger.kernel.org>
|
||||
X-Mailing-List: netdev@vger.kernel.org
|
||||
X-Patchwork-Delegate: kuba@kernel.org
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The PPE units found in MT7622 and newer support packet and byte
|
||||
accounting of hw-offloaded flows. Add support for reading those
|
||||
counters as found in MediaTek's SDK[1].
|
||||
accounting of hw-offloaded flows. Add support for reading those counters
|
||||
as found in MediaTek's SDK[1].
|
||||
|
||||
[1]: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/bc6a6a375c800dc2b80e1a325a2c732d1737df92
|
||||
Tested-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
v4: declare function mtk_mib_entry_read as static
|
||||
v3: don't bother to set 'false' values in any zero-initialized struct
|
||||
use mtk_foe_entry_ib2
|
||||
both changes were requested by Felix Fietkau
|
||||
|
||||
v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
||||
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 7 +-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 110 +++++++++++++++++-
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 23 +++-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 8 +-
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 3 +
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 114 +++++++++++++++++-
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 25 +++-
|
||||
.../net/ethernet/mediatek/mtk_ppe_debugfs.c | 9 +-
|
||||
.../net/ethernet/mediatek/mtk_ppe_offload.c | 7 ++
|
||||
.../net/ethernet/mediatek/mtk_ppe_offload.c | 8 ++
|
||||
drivers/net/ethernet/mediatek/mtk_ppe_regs.h | 14 +++
|
||||
7 files changed, 166 insertions(+), 5 deletions(-)
|
||||
7 files changed, 172 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4635,8 +4635,8 @@ static int mtk_probe(struct platform_dev
|
||||
@@ -4689,8 +4689,8 @@ static int mtk_probe(struct platform_dev
|
||||
for (i = 0; i < num_ppe; i++) {
|
||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||
|
||||
|
@ -63,8 +37,8 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
+
|
||||
if (!eth->ppe[i]) {
|
||||
err = -ENOMEM;
|
||||
goto err_free_dev;
|
||||
@@ -4763,6 +4763,7 @@ static const struct mtk_soc_data mt7622_
|
||||
goto err_deinit_ppe;
|
||||
@@ -4814,6 +4814,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
|
@ -72,7 +46,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
@@ -4800,6 +4801,7 @@ static const struct mtk_soc_data mt7629_
|
||||
@@ -4851,6 +4852,7 @@ static const struct mtk_soc_data mt7629_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7629_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
|
@ -80,7 +54,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4820,6 +4822,7 @@ static const struct mtk_soc_data mt7981_
|
||||
@@ -4871,6 +4873,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
|
@ -88,7 +62,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
@@ -4840,6 +4843,7 @@ static const struct mtk_soc_data mt7986_
|
||||
@@ -4891,6 +4894,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
|
@ -98,7 +72,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1014,6 +1014,8 @@ struct mtk_reg_map {
|
||||
@@ -1011,6 +1011,8 @@ struct mtk_reg_map {
|
||||
* the extra setup for those pins used by GMAC.
|
||||
* @hash_offset Flow table hash offset.
|
||||
* @foe_entry_size Foe table entry size.
|
||||
|
@ -107,7 +81,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
* @txd_size Tx DMA descriptor size.
|
||||
* @rxd_size Rx DMA descriptor size.
|
||||
* @rx_irq_done_mask Rx irq done register mask.
|
||||
@@ -1031,6 +1033,7 @@ struct mtk_soc_data {
|
||||
@@ -1028,6 +1030,7 @@ struct mtk_soc_data {
|
||||
u8 hash_offset;
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
|
@ -166,10 +140,10 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
static void mtk_ppe_cache_clear(struct mtk_ppe *ppe)
|
||||
{
|
||||
ppe_set(ppe, MTK_PPE_CACHE_CTL, MTK_PPE_CACHE_CTL_CLEAR);
|
||||
@@ -464,6 +506,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
hwe->ib1 &= ~MTK_FOE_IB1_STATE;
|
||||
@@ -459,6 +501,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp
|
||||
hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID);
|
||||
dma_wmb();
|
||||
mtk_ppe_cache_clear(ppe);
|
||||
+ if (ppe->accounting) {
|
||||
+ struct mtk_foe_accounting *acct;
|
||||
+
|
||||
|
@ -180,7 +154,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
}
|
||||
entry->hash = 0xffff;
|
||||
|
||||
@@ -571,6 +620,9 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -566,6 +615,9 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
wmb();
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
||||
|
@ -190,7 +164,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
dma_wmb();
|
||||
|
||||
mtk_ppe_cache_clear(ppe);
|
||||
@@ -762,11 +814,39 @@ int mtk_ppe_prepare_reset(struct mtk_ppe
|
||||
@@ -757,11 +809,39 @@ int mtk_ppe_prepare_reset(struct mtk_ppe
|
||||
return mtk_ppe_wait_busy(ppe);
|
||||
}
|
||||
|
||||
|
@ -232,7 +206,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
struct mtk_ppe *ppe;
|
||||
u32 foe_flow_size;
|
||||
void *foe;
|
||||
@@ -783,7 +863,8 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
@@ -778,7 +858,8 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
ppe->base = base;
|
||||
ppe->eth = eth;
|
||||
ppe->dev = dev;
|
||||
|
@ -242,9 +216,9 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
|
||||
foe = dmam_alloc_coherent(ppe->dev,
|
||||
MTK_PPE_ENTRIES * soc->foe_entry_size,
|
||||
@@ -799,6 +880,23 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
@@ -794,6 +875,23 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
|
||||
if (!ppe->foe_flow)
|
||||
return NULL;
|
||||
goto err_free_l2_flows;
|
||||
|
||||
+ if (accounting) {
|
||||
+ mib = dmam_alloc_coherent(ppe->dev, MTK_PPE_ENTRIES * sizeof(*mib),
|
||||
|
@ -266,7 +240,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
mtk_ppe_debugfs_init(ppe, index);
|
||||
|
||||
return ppe;
|
||||
@@ -913,6 +1011,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
@@ -923,6 +1021,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT1, 0xcb777);
|
||||
ppe_w32(ppe, MTK_PPE_SBW_CTRL, 0x7f);
|
||||
}
|
||||
|
@ -328,17 +302,18 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||
u16 foe_check_time[MTK_PPE_ENTRIES];
|
||||
struct hlist_head *foe_flow;
|
||||
|
||||
@@ -303,8 +322,7 @@ struct mtk_ppe {
|
||||
@@ -303,8 +322,8 @@ struct mtk_ppe {
|
||||
void *acct_table;
|
||||
};
|
||||
|
||||
-struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base,
|
||||
- int version, int index);
|
||||
+struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, int index);
|
||||
+
|
||||
void mtk_ppe_deinit(struct mtk_eth *eth);
|
||||
void mtk_ppe_start(struct mtk_ppe *ppe);
|
||||
int mtk_ppe_stop(struct mtk_ppe *ppe);
|
||||
int mtk_ppe_prepare_reset(struct mtk_ppe *ppe);
|
||||
@@ -358,5 +376,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
|
||||
@@ -359,5 +378,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
|
||||
void mtk_foe_entry_clear(struct mtk_ppe *ppe, struct mtk_flow_entry *entry);
|
||||
int mtk_foe_entry_idle_time(struct mtk_ppe *ppe, struct mtk_flow_entry *entry);
|
||||
int mtk_ppe_debugfs_init(struct mtk_ppe *ppe, int index);
|
|
@ -1,17 +1,24 @@
|
|||
From 88a0fd5927b7c2c7aecd6dc747d898eb38043d2b Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 23 Mar 2023 21:45:43 +0100
|
||||
Subject: [PATCH] net: ethernet: mediatek: fix ppe flow accounting for v1
|
||||
hardware
|
||||
Date: Thu, 20 Apr 2023 22:06:42 +0100
|
||||
Subject: [PATCH 093/250] net: mtk_eth_soc: mediatek: fix ppe flow accounting
|
||||
for v1 hardware
|
||||
|
||||
Older chips (like MT7622) use a different bit in ib2 to enable hardware
|
||||
counter support.
|
||||
counter support. Add macros for both and select the appropriate bit.
|
||||
|
||||
Fixes: 3fbe4d8c0e53 ("net: ethernet: mtk_eth_soc: ppe: add support for flow accounting")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 10 ++++++++--
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 3 ++-
|
||||
2 files changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -646,6 +646,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -599,6 +599,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
struct mtk_eth *eth = ppe->eth;
|
||||
u16 timestamp = mtk_eth_timestamp(eth);
|
||||
struct mtk_foe_entry *hwe;
|
||||
|
@ -19,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
entry->ib1 &= ~MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
@@ -662,8 +663,13 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
@@ -615,8 +616,13 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
wmb();
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From b804f765485109f9644cc05d1e8fc79ca6c6e4aa Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Golle <daniel@makrotopia.org>
|
||||
Date: Wed, 19 Jul 2023 01:39:36 +0100
|
||||
Subject: [PATCH 094/250] net: ethernet: mtk_eth_soc: always
|
||||
mtk_get_ib1_pkt_type
|
||||
|
||||
entries and bind debugfs files would display wrong data on NETSYS_V2 and
|
||||
later because instead of using mtk_get_ib1_pkt_type the driver would use
|
||||
MTK_FOE_IB1_PACKET_TYPE which corresponds to NETSYS_V1(.x) SoCs.
|
||||
Use mtk_get_ib1_pkt_type so entries and bind records display correctly.
|
||||
|
||||
Fixes: 03a3180e5c09e ("net: ethernet: mtk_eth_soc: introduce flow offloading support for mt7986")
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/c0ae03d0182f4d27b874cbdf0059bc972c317f3c.1689727134.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
|
||||
@@ -98,7 +98,7 @@ mtk_ppe_debugfs_foe_show(struct seq_file
|
||||
|
||||
acct = mtk_foe_entry_get_mib(ppe, i, NULL);
|
||||
|
||||
- type = FIELD_GET(MTK_FOE_IB1_PACKET_TYPE, entry->ib1);
|
||||
+ type = mtk_get_ib1_pkt_type(ppe->eth, entry->ib1);
|
||||
seq_printf(m, "%05x %s %7s", i,
|
||||
mtk_foe_entry_state_str(state),
|
||||
mtk_foe_pkt_type_str(type));
|
|
@ -0,0 +1,78 @@
|
|||
From 5ea0e1312bcfebc06b5f91d1bb82b823d6395125 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Wed, 19 Jul 2023 12:29:49 +0200
|
||||
Subject: [PATCH 095/250] net: ethernet: mtk_ppe: add MTK_FOE_ENTRY_V{1,2}_SIZE
|
||||
macros
|
||||
|
||||
Introduce MTK_FOE_ENTRY_V{1,2}_SIZE macros in order to make more
|
||||
explicit foe_entry size for different chipset revisions.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Reviewed-by: Simon Horman <simon.horman@corigine.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 +++++-----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.h | 3 +++
|
||||
2 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -4763,7 +4763,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.required_pctl = false,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4784,7 +4784,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4803,7 +4803,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.required_pctl = true,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4841,8 +4841,8 @@ static const struct mtk_soc_data mt7981_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
.has_accounting = true,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
@@ -4862,8 +4862,8 @@ static const struct mtk_soc_data mt7986_
|
||||
.required_pctl = false,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
- .foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||
.has_accounting = true,
|
||||
+ .foe_entry_size = MTK_FOE_ENTRY_V2_SIZE,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
||||
@@ -216,6 +216,9 @@ struct mtk_foe_ipv6_6rd {
|
||||
struct mtk_foe_mac_info l2;
|
||||
};
|
||||
|
||||
+#define MTK_FOE_ENTRY_V1_SIZE 80
|
||||
+#define MTK_FOE_ENTRY_V2_SIZE 96
|
||||
+
|
||||
struct mtk_foe_entry {
|
||||
u32 ib1;
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
From 8cfa2576d79f9379d167a8994f0fca935c07a8bc Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Sat, 22 Jul 2023 21:32:49 +0100
|
||||
Subject: [PATCH 096/250] net: ethernet: mtk_eth_soc: remove incorrect PLL
|
||||
configuration
|
||||
|
||||
MT7623 GMAC0 attempts to configure the system clocking according to the
|
||||
required speed in the .mac_config callback for non-SGMII, non-baseX and
|
||||
non-TRGMII modes.
|
||||
|
||||
state->speed setting has never been reliable in the .mac_config
|
||||
callback - there are cases where this is not the link speed,
|
||||
particularly via ethtool paths, so this has always been unreliable (as
|
||||
detailed in phylink's documentation.)
|
||||
|
||||
There is the additional issue that mtk_gmac0_rgmii_adjust() will only
|
||||
be called if state->interface changes, which means it only configures
|
||||
the system clocking on the very first .mac_config call, which will be
|
||||
made when the network device is first brought up before any link is
|
||||
established.
|
||||
|
||||
Essentially, this code is incredibly buggy, and probably never worked.
|
||||
|
||||
Moreover, checking the in-kernel DT files, it seems no platform makes
|
||||
use of this code path.
|
||||
|
||||
Therefore, let's remove it, and disable interface modes for port 0 that
|
||||
are not SGMII, 1000base-X, 2500base-X or TRGMII on the MT7623.
|
||||
|
||||
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 54 ++++++---------------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
|
||||
2 files changed, 17 insertions(+), 38 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -352,7 +352,7 @@ static int mt7621_gmac0_rgmii_adjust(str
|
||||
}
|
||||
|
||||
static void mtk_gmac0_rgmii_adjust(struct mtk_eth *eth,
|
||||
- phy_interface_t interface, int speed)
|
||||
+ phy_interface_t interface)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
@@ -366,26 +366,7 @@ static void mtk_gmac0_rgmii_adjust(struc
|
||||
return;
|
||||
}
|
||||
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- INTF_MODE_RGMII_1000 : INTF_MODE_RGMII_10_100;
|
||||
- mtk_w32(eth, val, INTF_MODE);
|
||||
-
|
||||
- regmap_update_bits(eth->ethsys, ETHSYS_CLKCFG0,
|
||||
- ETHSYS_TRGMII_CLK_SEL362_5,
|
||||
- ETHSYS_TRGMII_CLK_SEL362_5);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ? 250000000 : 500000000;
|
||||
- ret = clk_set_rate(eth->clks[MTK_CLK_TRGPLL], val);
|
||||
- if (ret)
|
||||
- dev_err(eth->dev, "Failed to set trgmii pll: %d\n", ret);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- RCK_CTRL_RGMII_1000 : RCK_CTRL_RGMII_10_100;
|
||||
- mtk_w32(eth, val, TRGMII_RCK_CTRL);
|
||||
-
|
||||
- val = (speed == SPEED_1000) ?
|
||||
- TCK_CTRL_RGMII_1000 : TCK_CTRL_RGMII_10_100;
|
||||
- mtk_w32(eth, val, TRGMII_TCK_CTRL);
|
||||
+ dev_err(eth->dev, "Missing PLL configuration, ethernet may not work\n");
|
||||
}
|
||||
|
||||
static struct phylink_pcs *mtk_mac_select_pcs(struct phylink_config *config,
|
||||
@@ -471,17 +452,8 @@ static void mtk_mac_config(struct phylin
|
||||
state->interface))
|
||||
goto err_phy;
|
||||
} else {
|
||||
- /* FIXME: this is incorrect. Not only does it
|
||||
- * use state->speed (which is not guaranteed
|
||||
- * to be correct) but it also makes use of it
|
||||
- * in a code path that will only be reachable
|
||||
- * when the PHY interface mode changes, not
|
||||
- * when the speed changes. Consequently, RGMII
|
||||
- * is probably broken.
|
||||
- */
|
||||
mtk_gmac0_rgmii_adjust(mac->hw,
|
||||
- state->interface,
|
||||
- state->speed);
|
||||
+ state->interface);
|
||||
|
||||
/* mt7623_pad_clk_setup */
|
||||
for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
|
||||
@@ -4340,13 +4312,19 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
||||
|
||||
- __set_bit(PHY_INTERFACE_MODE_MII,
|
||||
- mac->phylink_config.supported_interfaces);
|
||||
- __set_bit(PHY_INTERFACE_MODE_GMII,
|
||||
- mac->phylink_config.supported_interfaces);
|
||||
+ /* MT7623 gmac0 is now missing its speed-specific PLL configuration
|
||||
+ * in its .mac_config method (since state->speed is not valid there.
|
||||
+ * Disable support for MII, GMII and RGMII.
|
||||
+ */
|
||||
+ if (!mac->hw->soc->disable_pll_modes || mac->id != 0) {
|
||||
+ __set_bit(PHY_INTERFACE_MODE_MII,
|
||||
+ mac->phylink_config.supported_interfaces);
|
||||
+ __set_bit(PHY_INTERFACE_MODE_GMII,
|
||||
+ mac->phylink_config.supported_interfaces);
|
||||
|
||||
- if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII))
|
||||
- phy_interface_set_rgmii(mac->phylink_config.supported_interfaces);
|
||||
+ if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII))
|
||||
+ phy_interface_set_rgmii(mac->phylink_config.supported_interfaces);
|
||||
+ }
|
||||
|
||||
if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && !mac->id)
|
||||
__set_bit(PHY_INTERFACE_MODE_TRGMII,
|
||||
@@ -4804,6 +4782,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
+ .disable_pll_modes = true,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1030,6 +1030,7 @@ struct mtk_soc_data {
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
bool has_accounting;
|
||||
+ bool disable_pll_modes;
|
||||
struct {
|
||||
u32 txd_size;
|
||||
u32 rxd_size;
|
|
@ -0,0 +1,81 @@
|
|||
From a4c2233b1e4359b6c64b6f9ba98c8718a11fffee Mon Sep 17 00:00:00 2001
|
||||
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
||||
Date: Sat, 22 Jul 2023 21:32:54 +0100
|
||||
Subject: [PATCH 097/250] net: ethernet: mtk_eth_soc: remove mac_pcs_get_state
|
||||
and modernise
|
||||
|
||||
Remove the .mac_pcs_get_state function, since as far as I can tell is
|
||||
never called - no DT appears to specify an in-band-status management
|
||||
nor SFP support for this driver.
|
||||
|
||||
Removal of this, along with the previous patch to remove the incorrect
|
||||
clocking configuration, means that the driver becomes non-legacy, so
|
||||
we can remove the "legacy_pre_march2020" status from this driver.
|
||||
|
||||
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Tested-by: Frank Wunderlich <frank-w@public-files.de>
|
||||
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 35 ---------------------
|
||||
1 file changed, 35 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -555,38 +555,6 @@ static int mtk_mac_finish(struct phylink
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void mtk_mac_pcs_get_state(struct phylink_config *config,
|
||||
- struct phylink_link_state *state)
|
||||
-{
|
||||
- struct mtk_mac *mac = container_of(config, struct mtk_mac,
|
||||
- phylink_config);
|
||||
- u32 pmsr = mtk_r32(mac->hw, MTK_MAC_MSR(mac->id));
|
||||
-
|
||||
- state->link = (pmsr & MAC_MSR_LINK);
|
||||
- state->duplex = (pmsr & MAC_MSR_DPX) >> 1;
|
||||
-
|
||||
- switch (pmsr & (MAC_MSR_SPEED_1000 | MAC_MSR_SPEED_100)) {
|
||||
- case 0:
|
||||
- state->speed = SPEED_10;
|
||||
- break;
|
||||
- case MAC_MSR_SPEED_100:
|
||||
- state->speed = SPEED_100;
|
||||
- break;
|
||||
- case MAC_MSR_SPEED_1000:
|
||||
- state->speed = SPEED_1000;
|
||||
- break;
|
||||
- default:
|
||||
- state->speed = SPEED_UNKNOWN;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- state->pause &= (MLO_PAUSE_RX | MLO_PAUSE_TX);
|
||||
- if (pmsr & MAC_MSR_RX_FC)
|
||||
- state->pause |= MLO_PAUSE_RX;
|
||||
- if (pmsr & MAC_MSR_TX_FC)
|
||||
- state->pause |= MLO_PAUSE_TX;
|
||||
-}
|
||||
-
|
||||
static void mtk_mac_link_down(struct phylink_config *config, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@@ -709,7 +677,6 @@ static void mtk_mac_link_up(struct phyli
|
||||
static const struct phylink_mac_ops mtk_phylink_ops = {
|
||||
.validate = phylink_generic_validate,
|
||||
.mac_select_pcs = mtk_mac_select_pcs,
|
||||
- .mac_pcs_get_state = mtk_mac_pcs_get_state,
|
||||
.mac_config = mtk_mac_config,
|
||||
.mac_finish = mtk_mac_finish,
|
||||
.mac_link_down = mtk_mac_link_down,
|
||||
@@ -4307,8 +4274,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
|
||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||
- /* This driver makes use of state->speed in mac_config */
|
||||
- mac->phylink_config.legacy_pre_march2020 = true;
|
||||
mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
|
||||
MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD;
|
||||
|
|
@ -0,0 +1,550 @@
|
|||
From 5d8d05fbf804b4485646d39551ac27452e45afd3 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 25 Jul 2023 01:52:02 +0100
|
||||
Subject: [PATCH 099/250] net: ethernet: mtk_eth_soc: add version in
|
||||
mtk_soc_data
|
||||
|
||||
Introduce version field in mtk_soc_data data structure in order to
|
||||
make mtk_eth driver easier to maintain for chipset configuration
|
||||
codebase. Get rid of MTK_NETSYS_V2 bit in chip capabilities.
|
||||
This is a preliminary patch to introduce support for MT7988 SoC.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/e52fae302ca135436e5cdd26d38d87be2da63055.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 55 +++++++++++--------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 36 +++++++-----
|
||||
drivers/net/ethernet/mediatek/mtk_ppe.c | 18 +++---
|
||||
.../net/ethernet/mediatek/mtk_ppe_offload.c | 2 +-
|
||||
drivers/net/ethernet/mediatek/mtk_wed.c | 4 +-
|
||||
5 files changed, 66 insertions(+), 49 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -580,7 +580,7 @@ static void mtk_set_queue_speed(struct m
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v1(eth))
|
||||
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
||||
|
||||
if (IS_ENABLED(CONFIG_SOC_MT7621)) {
|
||||
@@ -956,7 +956,7 @@ static bool mtk_rx_get_desc(struct mtk_e
|
||||
rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
|
||||
rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
|
||||
rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
|
||||
rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
|
||||
}
|
||||
@@ -1014,7 +1014,7 @@ static int mtk_init_fq_dma(struct mtk_et
|
||||
|
||||
txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
|
||||
txd->txd4 = 0;
|
||||
- if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
txd->txd5 = 0;
|
||||
txd->txd6 = 0;
|
||||
txd->txd7 = 0;
|
||||
@@ -1205,7 +1205,7 @@ static void mtk_tx_set_dma_desc(struct n
|
||||
struct mtk_mac *mac = netdev_priv(dev);
|
||||
struct mtk_eth *eth = mac->hw;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mtk_tx_set_dma_desc_v2(dev, txd, info);
|
||||
else
|
||||
mtk_tx_set_dma_desc_v1(dev, txd, info);
|
||||
@@ -1512,7 +1512,7 @@ static void mtk_update_rx_cpu_idx(struct
|
||||
|
||||
static bool mtk_page_pool_enabled(struct mtk_eth *eth)
|
||||
{
|
||||
- return MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2);
|
||||
+ return eth->soc->version == 2;
|
||||
}
|
||||
|
||||
static struct page_pool *mtk_create_page_pool(struct mtk_eth *eth,
|
||||
@@ -1854,7 +1854,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
break;
|
||||
|
||||
/* find out which mac the packet come from. values start at 1 */
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
|
||||
else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
|
||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||
@@ -1950,7 +1950,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
skb->dev = netdev;
|
||||
bytes += skb->len;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
|
||||
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
|
||||
if (hash != MTK_RXD5_FOE_ENTRY)
|
||||
@@ -1975,8 +1975,8 @@ static int mtk_poll_rx(struct napi_struc
|
||||
/* When using VLAN untagging in combination with DSA, the
|
||||
* hardware treats the MTK special tag as a VLAN and untags it.
|
||||
*/
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
|
||||
- (trxd.rxd2 & RX_DMA_VTAG) && netdev_uses_dsa(netdev)) {
|
||||
+ if (mtk_is_netsys_v1(eth) && (trxd.rxd2 & RX_DMA_VTAG) &&
|
||||
+ netdev_uses_dsa(netdev)) {
|
||||
unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
|
||||
|
||||
if (port < ARRAY_SIZE(eth->dsa_meta) &&
|
||||
@@ -2286,7 +2286,7 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
txd->txd2 = next_ptr;
|
||||
txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
|
||||
txd->txd4 = 0;
|
||||
- if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
txd->txd5 = 0;
|
||||
txd->txd6 = 0;
|
||||
txd->txd7 = 0;
|
||||
@@ -2339,14 +2339,14 @@ static int mtk_tx_alloc(struct mtk_eth *
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
|
||||
FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
|
||||
MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v1(eth))
|
||||
val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
|
||||
ofs += MTK_QTX_OFFSET;
|
||||
}
|
||||
val = MTK_QDMA_TX_SCH_MAX_WFQ | (MTK_QDMA_TX_SCH_MAX_WFQ << 16);
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
mtk_w32(eth, val, soc->reg_map->qdma.tx_sch_rate + 4);
|
||||
} else {
|
||||
mtk_w32(eth, ring->phys_pdma, MT7628_TX_BASE_PTR0);
|
||||
@@ -2475,7 +2475,7 @@ static int mtk_rx_alloc(struct mtk_eth *
|
||||
|
||||
rxd->rxd3 = 0;
|
||||
rxd->rxd4 = 0;
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
rxd->rxd5 = 0;
|
||||
rxd->rxd6 = 0;
|
||||
rxd->rxd7 = 0;
|
||||
@@ -3023,7 +3023,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
|
||||
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
|
||||
MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
|
||||
MTK_CHK_DDONE_EN | MTK_LEAKY_BUCKET_EN;
|
||||
@@ -3165,7 +3165,7 @@ static int mtk_open(struct net_device *d
|
||||
phylink_start(mac->phylink);
|
||||
netif_tx_start_all_queues(dev);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return 0;
|
||||
|
||||
if (mtk_uses_dsa(dev) && !eth->prog) {
|
||||
@@ -3430,7 +3430,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
{
|
||||
u32 val;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
|
||||
val = RSTCTRL_PPE0_V2;
|
||||
} else {
|
||||
@@ -3442,7 +3442,7 @@ static void mtk_hw_reset(struct mtk_eth
|
||||
|
||||
ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
|
||||
0x3ffffff);
|
||||
}
|
||||
@@ -3468,7 +3468,7 @@ static void mtk_hw_warm_reset(struct mtk
|
||||
return;
|
||||
}
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0_V2;
|
||||
else
|
||||
rst_mask = RSTCTRL_ETH | RSTCTRL_PPE0;
|
||||
@@ -3638,7 +3638,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
else
|
||||
mtk_hw_reset(eth);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
/* Set FE to PDMAv2 if necessary */
|
||||
val = mtk_r32(eth, MTK_FE_GLO_MISC);
|
||||
mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
|
||||
@@ -3675,7 +3675,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
*/
|
||||
val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
|
||||
mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
|
||||
- if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v1(eth)) {
|
||||
val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
|
||||
mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
|
||||
|
||||
@@ -3697,7 +3697,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
mtk_w32(eth, eth->soc->txrx.rx_irq_done_mask, reg_map->qdma.int_grp + 4);
|
||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||
|
||||
@@ -4486,7 +4486,7 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
}
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
err = -EINVAL;
|
||||
@@ -4594,9 +4594,8 @@ static int mtk_probe(struct platform_dev
|
||||
}
|
||||
|
||||
if (eth->soc->offload_version) {
|
||||
- u32 num_ppe;
|
||||
+ u32 num_ppe = mtk_is_netsys_v2_or_greater(eth) ? 2 : 1;
|
||||
|
||||
- num_ppe = MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ? 2 : 1;
|
||||
num_ppe = min_t(u32, ARRAY_SIZE(eth->ppe), num_ppe);
|
||||
for (i = 0; i < num_ppe; i++) {
|
||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||
@@ -4688,6 +4687,7 @@ static const struct mtk_soc_data mt2701_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4704,6 +4704,7 @@ static const struct mtk_soc_data mt7621_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7621_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -4724,6 +4725,7 @@ static const struct mtk_soc_data mt7622_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7622_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 2,
|
||||
.has_accounting = true,
|
||||
@@ -4744,6 +4746,7 @@ static const struct mtk_soc_data mt7623_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7623_CLKS_BITMAP,
|
||||
.required_pctl = true,
|
||||
+ .version = 1,
|
||||
.offload_version = 1,
|
||||
.hash_offset = 2,
|
||||
.foe_entry_size = MTK_FOE_ENTRY_V1_SIZE,
|
||||
@@ -4766,6 +4769,7 @@ static const struct mtk_soc_data mt7629_
|
||||
.required_clks = MT7629_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
.has_accounting = true,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
@@ -4783,6 +4787,7 @@ static const struct mtk_soc_data mt7981_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7981_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 2,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
@@ -4804,6 +4809,7 @@ static const struct mtk_soc_data mt7986_
|
||||
.hw_features = MTK_HW_FEATURES,
|
||||
.required_clks = MT7986_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 2,
|
||||
.offload_version = 2,
|
||||
.hash_offset = 4,
|
||||
.has_accounting = true,
|
||||
@@ -4824,6 +4830,7 @@ static const struct mtk_soc_data rt5350_
|
||||
.hw_features = MTK_HW_FEATURES_MT7628,
|
||||
.required_clks = MT7628_CLKS_BITMAP,
|
||||
.required_pctl = false,
|
||||
+ .version = 1,
|
||||
.txrx = {
|
||||
.txd_size = sizeof(struct mtk_tx_dma),
|
||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -820,7 +820,6 @@ enum mkt_eth_capabilities {
|
||||
MTK_SHARED_INT_BIT,
|
||||
MTK_TRGMII_MT7621_CLK_BIT,
|
||||
MTK_QDMA_BIT,
|
||||
- MTK_NETSYS_V2_BIT,
|
||||
MTK_SOC_MT7628_BIT,
|
||||
MTK_RSTCTRL_PPE1_BIT,
|
||||
MTK_U3_COPHY_V2_BIT,
|
||||
@@ -855,7 +854,6 @@ enum mkt_eth_capabilities {
|
||||
#define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
|
||||
#define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
|
||||
#define MTK_QDMA BIT(MTK_QDMA_BIT)
|
||||
-#define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
|
||||
#define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
|
||||
#define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
|
||||
#define MTK_U3_COPHY_V2 BIT(MTK_U3_COPHY_V2_BIT)
|
||||
@@ -934,11 +932,11 @@ enum mkt_eth_capabilities {
|
||||
#define MT7981_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
|
||||
- MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1)
|
||||
|
||||
#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
||||
MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
||||
- MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
||||
+ MTK_RSTCTRL_PPE1)
|
||||
|
||||
struct mtk_tx_dma_desc_info {
|
||||
dma_addr_t addr;
|
||||
@@ -1009,6 +1007,7 @@ struct mtk_reg_map {
|
||||
* @required_pctl A bool value to show whether the SoC requires
|
||||
* the extra setup for those pins used by GMAC.
|
||||
* @hash_offset Flow table hash offset.
|
||||
+ * @version SoC version.
|
||||
* @foe_entry_size Foe table entry size.
|
||||
* @has_accounting Bool indicating support for accounting of
|
||||
* offloaded flows.
|
||||
@@ -1027,6 +1026,7 @@ struct mtk_soc_data {
|
||||
bool required_pctl;
|
||||
u8 offload_version;
|
||||
u8 hash_offset;
|
||||
+ u8 version;
|
||||
u16 foe_entry_size;
|
||||
netdev_features_t hw_features;
|
||||
bool has_accounting;
|
||||
@@ -1183,6 +1183,16 @@ struct mtk_mac {
|
||||
/* the struct describing the SoC. these are declared in the soc_xyz.c files */
|
||||
extern const struct of_device_id of_mtk_match[];
|
||||
|
||||
+static inline bool mtk_is_netsys_v1(struct mtk_eth *eth)
|
||||
+{
|
||||
+ return eth->soc->version == 1;
|
||||
+}
|
||||
+
|
||||
+static inline bool mtk_is_netsys_v2_or_greater(struct mtk_eth *eth)
|
||||
+{
|
||||
+ return eth->soc->version > 1;
|
||||
+}
|
||||
+
|
||||
static inline struct mtk_foe_entry *
|
||||
mtk_foe_get_entry(struct mtk_ppe *ppe, u16 hash)
|
||||
{
|
||||
@@ -1193,7 +1203,7 @@ mtk_foe_get_entry(struct mtk_ppe *ppe, u
|
||||
|
||||
static inline u32 mtk_get_ib1_ts_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_TIMESTAMP;
|
||||
@@ -1201,7 +1211,7 @@ static inline u32 mtk_get_ib1_ts_mask(st
|
||||
|
||||
static inline u32 mtk_get_ib1_ppoe_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_PPPOE_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_PPPOE;
|
||||
@@ -1209,7 +1219,7 @@ static inline u32 mtk_get_ib1_ppoe_mask(
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_tag_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_VLAN_TAG_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_VLAN_TAG;
|
||||
@@ -1217,7 +1227,7 @@ static inline u32 mtk_get_ib1_vlan_tag_m
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_layer_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_BIND_VLAN_LAYER_V2;
|
||||
|
||||
return MTK_FOE_IB1_BIND_VLAN_LAYER;
|
||||
@@ -1225,7 +1235,7 @@ static inline u32 mtk_get_ib1_vlan_layer
|
||||
|
||||
static inline u32 mtk_prep_ib1_vlan_layer(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_PREP(MTK_FOE_IB1_BIND_VLAN_LAYER_V2, val);
|
||||
|
||||
return FIELD_PREP(MTK_FOE_IB1_BIND_VLAN_LAYER, val);
|
||||
@@ -1233,7 +1243,7 @@ static inline u32 mtk_prep_ib1_vlan_laye
|
||||
|
||||
static inline u32 mtk_get_ib1_vlan_layer(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_GET(MTK_FOE_IB1_BIND_VLAN_LAYER_V2, val);
|
||||
|
||||
return FIELD_GET(MTK_FOE_IB1_BIND_VLAN_LAYER, val);
|
||||
@@ -1241,7 +1251,7 @@ static inline u32 mtk_get_ib1_vlan_layer
|
||||
|
||||
static inline u32 mtk_get_ib1_pkt_type_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB1_PACKET_TYPE_V2;
|
||||
|
||||
return MTK_FOE_IB1_PACKET_TYPE;
|
||||
@@ -1249,7 +1259,7 @@ static inline u32 mtk_get_ib1_pkt_type_m
|
||||
|
||||
static inline u32 mtk_get_ib1_pkt_type(struct mtk_eth *eth, u32 val)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return FIELD_GET(MTK_FOE_IB1_PACKET_TYPE_V2, val);
|
||||
|
||||
return FIELD_GET(MTK_FOE_IB1_PACKET_TYPE, val);
|
||||
@@ -1257,7 +1267,7 @@ static inline u32 mtk_get_ib1_pkt_type(s
|
||||
|
||||
static inline u32 mtk_get_ib2_multicast_mask(struct mtk_eth *eth)
|
||||
{
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
return MTK_FOE_IB2_MULTICAST_V2;
|
||||
|
||||
return MTK_FOE_IB2_MULTICAST;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
||||
@@ -207,7 +207,7 @@ int mtk_foe_entry_prepare(struct mtk_eth
|
||||
|
||||
memset(entry, 0, sizeof(*entry));
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
val = FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_BIND) |
|
||||
FIELD_PREP(MTK_FOE_IB1_PACKET_TYPE_V2, type) |
|
||||
FIELD_PREP(MTK_FOE_IB1_UDP, l4proto == IPPROTO_UDP) |
|
||||
@@ -271,7 +271,7 @@ int mtk_foe_entry_set_pse_port(struct mt
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
u32 val = *ib2;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
val &= ~MTK_FOE_IB2_DEST_PORT_V2;
|
||||
val |= FIELD_PREP(MTK_FOE_IB2_DEST_PORT_V2, port);
|
||||
} else {
|
||||
@@ -422,7 +422,7 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
||||
struct mtk_foe_mac_info *l2 = mtk_foe_entry_l2(eth, entry);
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
||||
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
||||
MTK_FOE_IB2_WDMA_WINFO_V2;
|
||||
@@ -446,7 +446,7 @@ int mtk_foe_entry_set_queue(struct mtk_e
|
||||
{
|
||||
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
*ib2 &= ~MTK_FOE_IB2_QID_V2;
|
||||
*ib2 |= FIELD_PREP(MTK_FOE_IB2_QID_V2, queue);
|
||||
*ib2 |= MTK_FOE_IB2_PSE_QOS_V2;
|
||||
@@ -601,7 +601,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
struct mtk_foe_entry *hwe;
|
||||
u32 val;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
entry->ib1 &= ~MTK_FOE_IB1_BIND_TIMESTAMP_V2;
|
||||
entry->ib1 |= FIELD_PREP(MTK_FOE_IB1_BIND_TIMESTAMP_V2,
|
||||
timestamp);
|
||||
@@ -617,7 +617,7 @@ __mtk_foe_entry_commit(struct mtk_ppe *p
|
||||
hwe->ib1 = entry->ib1;
|
||||
|
||||
if (ppe->accounting) {
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
val = MTK_FOE_IB2_MIB_CNT_V2;
|
||||
else
|
||||
val = MTK_FOE_IB2_MIB_CNT;
|
||||
@@ -965,7 +965,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
MTK_PPE_SCAN_MODE_KEEPALIVE_AGE) |
|
||||
FIELD_PREP(MTK_PPE_TB_CFG_ENTRY_NUM,
|
||||
MTK_PPE_ENTRIES_SHIFT);
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
||||
val |= MTK_PPE_TB_CFG_INFO_SEL;
|
||||
ppe_w32(ppe, MTK_PPE_TB_CFG, val);
|
||||
|
||||
@@ -981,7 +981,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
MTK_PPE_FLOW_CFG_IP4_NAPT |
|
||||
MTK_PPE_FLOW_CFG_IP4_DSLITE |
|
||||
MTK_PPE_FLOW_CFG_IP4_NAT_FRAG;
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
||||
val |= MTK_PPE_MD_TOAP_BYP_CRSN0 |
|
||||
MTK_PPE_MD_TOAP_BYP_CRSN1 |
|
||||
MTK_PPE_MD_TOAP_BYP_CRSN2 |
|
||||
@@ -1023,7 +1023,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
||||
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT, 0);
|
||||
|
||||
- if (MTK_HAS_CAPS(ppe->eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(ppe->eth)) {
|
||||
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT1, 0xcb777);
|
||||
ppe_w32(ppe, MTK_PPE_SBW_CTRL, 0x7f);
|
||||
}
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
@@ -193,7 +193,7 @@ mtk_flow_set_output_device(struct mtk_et
|
||||
if (mtk_flow_get_wdma_info(dev, dest_mac, &info) == 0) {
|
||||
mtk_foe_entry_set_wdma(eth, foe, info.wdma_idx, info.queue,
|
||||
info.bss, info.wcid);
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth)) {
|
||||
switch (info.wdma_idx) {
|
||||
case 0:
|
||||
pse_port = 8;
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||||
@@ -1084,7 +1084,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *
|
||||
} else {
|
||||
struct mtk_eth *eth = dev->hw->eth;
|
||||
|
||||
- if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
|
||||
+ if (mtk_is_netsys_v2_or_greater(eth))
|
||||
wed_set(dev, MTK_WED_RESET_IDX,
|
||||
MTK_WED_RESET_IDX_RX_V2);
|
||||
else
|
||||
@@ -1806,7 +1806,7 @@ void mtk_wed_add_hw(struct device_node *
|
||||
hw->wdma = wdma;
|
||||
hw->index = index;
|
||||
hw->irq = irq;
|
||||
- hw->version = MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ? 2 : 1;
|
||||
+ hw->version = mtk_is_netsys_v1(eth) ? 1 : 2;
|
||||
|
||||
if (hw->version == 1) {
|
||||
hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
|
|
@ -0,0 +1,29 @@
|
|||
From f8fb8dbd158c585be7574faf92db7d614b6722ff Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 25 Jul 2023 01:52:27 +0100
|
||||
Subject: [PATCH 100/250] net: ethernet: mtk_eth_soc: increase MAX_DEVS to 3
|
||||
|
||||
This is a preliminary patch to add MT7988 SoC support since it runs 3
|
||||
macs instead of 2.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/3563e5fab367e7d79a7f1296fabaa5c20f202d7a.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
||||
@@ -1043,8 +1043,8 @@ struct mtk_soc_data {
|
||||
|
||||
#define MTK_DMA_MONITOR_TIMEOUT msecs_to_jiffies(1000)
|
||||
|
||||
-/* currently no SoC has more than 2 macs */
|
||||
-#define MTK_MAX_DEVS 2
|
||||
+/* currently no SoC has more than 3 macs */
|
||||
+#define MTK_MAX_DEVS 3
|
||||
|
||||
/* struct mtk_eth - This is the main datasructure for holding the state
|
||||
* of the driver
|
|
@ -1,143 +1,176 @@
|
|||
From 4e35e80750b33727e606be9e7ce447bde2e0deb7 Mon Sep 17 00:00:00 2001
|
||||
From 856be974290f28d7943be2ac5a382c4139486196 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 7 Mar 2023 15:55:35 +0000
|
||||
Subject: [PATCH 3/7] net: ethernet: mtk_eth_soc: rely on num_devs and remove
|
||||
MTK_MAC_COUNT
|
||||
Date: Tue, 25 Jul 2023 01:52:44 +0100
|
||||
Subject: [PATCH 101/250] net: ethernet: mtk_eth_soc: rely on MTK_MAX_DEVS and
|
||||
remove MTK_MAC_COUNT
|
||||
|
||||
Get rid of MTK_MAC_COUNT since it is a duplicated of eth->soc->num_devs.
|
||||
Get rid of MTK_MAC_COUNT since it is a duplicated of MTK_MAX_DEVS.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
Link: https://lore.kernel.org/r/1856f4266f2fc80677807b1bad867659e7b00c65.1690246066.git.daniel@makrotopia.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 30 ++++++++++-----------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 49 ++++++++++++---------
|
||||
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 -
|
||||
2 files changed, 15 insertions(+), 16 deletions(-)
|
||||
2 files changed, 27 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||
@@ -900,7 +900,7 @@ static void mtk_stats_update(struct mtk_
|
||||
@@ -882,7 +882,7 @@ static void mtk_stats_update(struct mtk_
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->mac[i] || !eth->mac[i]->hw_stats)
|
||||
continue;
|
||||
if (spin_trylock(ð->mac[i]->hw_stats->stats_lock)) {
|
||||
@@ -1403,7 +1403,7 @@ static int mtk_queue_stopped(struct mtk_
|
||||
@@ -1387,7 +1387,7 @@ static int mtk_queue_stopped(struct mtk_
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
if (netif_queue_stopped(eth->netdev[i]))
|
||||
@@ -1417,7 +1417,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
@@ -1401,7 +1401,7 @@ static void mtk_wake_queue(struct mtk_et
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
netif_tx_wake_all_queues(eth->netdev[i]);
|
||||
@@ -1908,7 +1908,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
@@ -1860,7 +1860,7 @@ static int mtk_poll_rx(struct napi_struc
|
||||
!(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
|
||||
mac = RX_DMA_GET_SPORT(trxd.rxd4) - 1;
|
||||
|
||||
- if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
||||
+ if (unlikely(mac < 0 || mac >= eth->soc->num_devs ||
|
||||
+ if (unlikely(mac < 0 || mac >= MTK_MAX_DEVS ||
|
||||
!eth->netdev[mac]))
|
||||
goto release_desc;
|
||||
|
||||
@@ -2937,7 +2937,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
@@ -2897,7 +2897,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||
const struct mtk_soc_data *soc = eth->soc;
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++)
|
||||
+ for (i = 0; i < soc->num_devs; i++)
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++)
|
||||
if (eth->netdev[i])
|
||||
netdev_reset_queue(eth->netdev[i]);
|
||||
if (eth->scratch_ring) {
|
||||
@@ -3091,7 +3091,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
@@ -3051,8 +3051,13 @@ static void mtk_gdm_config(struct mtk_et
|
||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||
return;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
u32 val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
- u32 val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (!eth->netdev[i])
|
||||
+ continue;
|
||||
+
|
||||
+ val = mtk_r32(eth, MTK_GDMA_FWD_CFG(i));
|
||||
|
||||
/* default setup the forward port to send frame to PDMA */
|
||||
@@ -3704,7 +3704,7 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
val &= ~0xffff;
|
||||
@@ -3062,7 +3067,7 @@ static void mtk_gdm_config(struct mtk_et
|
||||
|
||||
val |= config;
|
||||
|
||||
- if (eth->netdev[i] && netdev_uses_dsa(eth->netdev[i]))
|
||||
+ if (netdev_uses_dsa(eth->netdev[i]))
|
||||
val |= MTK_GDMA_SPECIAL_TAG;
|
||||
|
||||
mtk_w32(eth, val, MTK_GDMA_FWD_CFG(i));
|
||||
@@ -3659,15 +3664,15 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||
* up with the more appropriate value when mtk_mac_config call is being
|
||||
* invoked.
|
||||
*/
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
struct net_device *dev = eth->netdev[i];
|
||||
|
||||
mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
@@ -3892,7 +3892,7 @@ static void mtk_pending_work(struct work
|
||||
- mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
- if (dev) {
|
||||
- struct mtk_mac *mac = netdev_priv(dev);
|
||||
+ if (!dev)
|
||||
+ continue;
|
||||
|
||||
- mtk_set_mcr_max_rx(mac, dev->mtu + MTK_RX_ETH_HLEN);
|
||||
- }
|
||||
+ mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||
+ mtk_set_mcr_max_rx(netdev_priv(dev),
|
||||
+ dev->mtu + MTK_RX_ETH_HLEN);
|
||||
}
|
||||
|
||||
/* Indicates CDM to parse the MTK special tag from CPU
|
||||
@@ -3847,7 +3852,7 @@ static void mtk_pending_work(struct work
|
||||
mtk_prepare_for_reset(eth);
|
||||
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
||||
continue;
|
||||
|
||||
@@ -3908,7 +3908,7 @@ static void mtk_pending_work(struct work
|
||||
@@ -3863,8 +3868,8 @@ static void mtk_pending_work(struct work
|
||||
mtk_hw_init(eth, true);
|
||||
|
||||
/* restart DMA and enable IRQs */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
if (!test_bit(i, &restart))
|
||||
- if (!test_bit(i, &restart))
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
+ if (!eth->netdev[i] || !test_bit(i, &restart))
|
||||
continue;
|
||||
|
||||
@@ -3936,7 +3936,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
if (mtk_open(eth->netdev[i])) {
|
||||
@@ -3891,7 +3896,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
free_netdev(eth->netdev[i]);
|
||||
@@ -3955,7 +3955,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
@@ -3910,7 +3915,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||
{
|
||||
int i;
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
struct mtk_mac *mac;
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
@@ -4259,7 +4259,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
@@ -4211,7 +4216,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||
}
|
||||
|
||||
id = be32_to_cpup(_id);
|
||||
- if (id >= MTK_MAC_COUNT) {
|
||||
+ if (id >= eth->soc->num_devs) {
|
||||
+ if (id >= MTK_MAX_DEVS) {
|
||||
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -4400,7 +4400,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
@@ -4356,7 +4361,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
dev = eth->netdev[i];
|
||||
|
||||
if (!dev || !(dev->flags & IFF_UP))
|
||||
@@ -4727,7 +4727,7 @@ static int mtk_remove(struct platform_de
|
||||
@@ -4662,7 +4667,7 @@ static int mtk_remove(struct platform_de
|
||||
int i;
|
||||
|
||||
/* stop all devices to make sure that dma is properly shut down */
|
||||
- for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||
+ for (i = 0; i < eth->soc->num_devs; i++) {
|
||||
+ for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||
if (!eth->netdev[i])
|
||||
continue;
|
||||
mtk_stop(eth->netdev[i]);
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue