diff options
author | Stefan Roese <sr@denx.de> | 2022-04-07 09:11:54 +0200 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2022-05-04 07:05:51 +0200 |
commit | 1770808199ce6155dd3ec9a3d32d0d8db99746be (patch) | |
tree | 71cbfcaf82e75b4347dd41512c8d555a4373a574 | |
parent | 78c01757f07022543c8583112f999450eba579b5 (diff) | |
download | u-boot-1770808199ce6155dd3ec9a3d32d0d8db99746be.zip u-boot-1770808199ce6155dd3ec9a3d32d0d8db99746be.tar.gz u-boot-1770808199ce6155dd3ec9a3d32d0d8db99746be.tar.bz2 |
mips: octeon: nic23: Enable ethernet support
This patch enables the Kconfig symbols needed for full ethernet support
on the NIC23. Additionally board specific setup is done, mostly GPIOs
related to SFP / GPIO configuration. With this, ethernet can be used on
this board. Here an example of a tftp load:
=> tftp ffffffff81000000 big
Using ethernet-mac-nexus@11800e2000000 device
TFTP from server 192.168.1.5; our IP address is 192.168.1.247
Filename 'big'.
Load address: 0xffffffff81000000
Loading: ################################################## 10 MiB
9.7 MiB/s
done
Bytes transferred = 10485760 (a00000 hex)
Signed-off-by: Stefan Roese <sr@denx.de>
-rw-r--r-- | board/Marvell/octeon_nic23/board.c | 87 | ||||
-rw-r--r-- | configs/octeon_nic23_defconfig | 10 |
2 files changed, 95 insertions, 2 deletions
diff --git a/board/Marvell/octeon_nic23/board.c b/board/Marvell/octeon_nic23/board.c index 9f5eb2e..3e2c544 100644 --- a/board/Marvell/octeon_nic23/board.c +++ b/board/Marvell/octeon_nic23/board.c @@ -1,10 +1,11 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * Copyright (C) 2021 Stefan Roese <sr@denx.de> + * Copyright (C) 2021-2022 Stefan Roese <sr@denx.de> */ #include <dm.h> #include <ram.h> +#include <asm/gpio.h> #include <mach/octeon_ddr.h> #include <mach/cvmx-qlm.h> @@ -84,6 +85,52 @@ int board_fix_fdt(void *fdt) return rc; } +int board_early_init_f(void) +{ + struct gpio_desc gpio = {}; + ofnode node; + + /* Initial GPIO configuration */ + + /* GPIO 7: Vitesse reset */ + node = ofnode_by_compatible(ofnode_null(), "vitesse,vsc7224"); + if (ofnode_valid(node)) { + gpio_request_by_name_nodev(node, "los", 0, &gpio, GPIOD_IS_IN); + dm_gpio_free(gpio.dev, &gpio); + gpio_request_by_name_nodev(node, "reset", 0, &gpio, + GPIOD_IS_OUT); + if (dm_gpio_is_valid(&gpio)) { + /* Vitesse reset */ + debug("%s: Setting GPIO 7 to 1\n", __func__); + dm_gpio_set_value(&gpio, 1); + } + dm_gpio_free(gpio.dev, &gpio); + } + + /* SFP+ transmitters */ + ofnode_for_each_compatible_node(node, "ethernet,sfp-slot") { + gpio_request_by_name_nodev(node, "tx_disable", 0, + &gpio, GPIOD_IS_OUT); + if (dm_gpio_is_valid(&gpio)) { + debug("%s: Setting GPIO %d to 1\n", __func__, + gpio.offset); + dm_gpio_set_value(&gpio, 1); + } + dm_gpio_free(gpio.dev, &gpio); + gpio_request_by_name_nodev(node, "mod_abs", 0, &gpio, + GPIOD_IS_IN); + dm_gpio_free(gpio.dev, &gpio); + gpio_request_by_name_nodev(node, "tx_error", 0, &gpio, + GPIOD_IS_IN); + dm_gpio_free(gpio.dev, &gpio); + gpio_request_by_name_nodev(node, "rx_los", 0, &gpio, + GPIOD_IS_IN); + dm_gpio_free(gpio.dev, &gpio); + } + + return 0; +} + void board_configure_qlms(void) { octeon_configure_qlm(4, 3000, CVMX_QLM_MODE_SATA_2X1, 0, 0, 0, 0); @@ -100,7 +147,45 @@ void board_configure_qlms(void) int board_late_init(void) { + struct gpio_desc gpio = {}; + ofnode node; + + /* Turn on SFP+ transmitters */ + ofnode_for_each_compatible_node(node, "ethernet,sfp-slot") { + gpio_request_by_name_nodev(node, "tx_disable", 0, + &gpio, GPIOD_IS_OUT); + if (dm_gpio_is_valid(&gpio)) { + debug("%s: Setting GPIO %d to 0\n", __func__, + gpio.offset); + dm_gpio_set_value(&gpio, 0); + } + dm_gpio_free(gpio.dev, &gpio); + } + board_configure_qlms(); return 0; } + +int last_stage_init(void) +{ + struct gpio_desc gpio = {}; + ofnode node; + + node = ofnode_by_compatible(ofnode_null(), "vitesse,vsc7224"); + if (!ofnode_valid(node)) { + printf("Vitesse SPF DT node not found!"); + return 0; + } + + gpio_request_by_name_nodev(node, "reset", 0, &gpio, GPIOD_IS_OUT); + if (dm_gpio_is_valid(&gpio)) { + /* Take Vitesse retimer out of reset */ + debug("%s: Setting GPIO 7 to 0\n", __func__); + dm_gpio_set_value(&gpio, 0); + mdelay(50); + } + dm_gpio_free(gpio.dev, &gpio); + + return 0; +} diff --git a/configs/octeon_nic23_defconfig b/configs/octeon_nic23_defconfig index 1a1718a..3ab5838 100644 --- a/configs/octeon_nic23_defconfig +++ b/configs/octeon_nic23_defconfig @@ -14,13 +14,16 @@ CONFIG_ARCH_OCTEON=y CONFIG_TARGET_OCTEON_NIC23=y # CONFIG_MIPS_CACHE_SETUP is not set # CONFIG_MIPS_CACHE_DISABLE is not set +CONFIG_MIPS_RELOCATION_TABLE_SIZE=0xc000 CONFIG_DEBUG_UART=y CONFIG_AHCI=y CONFIG_OF_BOARD_FIXUP=y CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y # CONFIG_SYS_DEVICE_NULLDEV is not set CONFIG_ARCH_MISC_INIT=y +CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_LATE_INIT=y +CONFIG_LAST_STAGE_INIT=y CONFIG_HUSH_PARSER=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_GPIO=y @@ -37,6 +40,7 @@ CONFIG_CMD_FAT=y CONFIG_CMD_FS_GENERIC=y CONFIG_EFI_PARTITION=y CONFIG_ENV_IS_IN_SPI_FLASH=y +CONFIG_TFTP_TSIZE=y CONFIG_SATA=y CONFIG_AHCI_MVEBU=y CONFIG_CLK=y @@ -50,7 +54,11 @@ CONFIG_DM_SPI_FLASH=y CONFIG_SPI_FLASH_ATMEL=y CONFIG_SPI_FLASH_SPANSION=y CONFIG_SPI_FLASH_STMICRO=y -# CONFIG_NETDEVICES is not set +CONFIG_PHYLIB=y +CONFIG_PHYLIB_10G=y +CONFIG_DM_MDIO=y +CONFIG_DM_ETH_PHY=y +CONFIG_NET_OCTEON=y CONFIG_PCI=y CONFIG_DM_REGULATOR=y CONFIG_DM_REGULATOR_FIXED=y |