| /* |
| * Copyright (c) 2020 DENX Software Engineering GmbH |
| * Lukasz Majewski <lukma@denx.de> |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef __DSA_KSZ8794_H__ |
| #define __DSA_KSZ8794_H__ |
| |
| /* SPI commands */ |
| #define KSZ8794_SPI_CMD_WR (BIT(6)) |
| #define KSZ8794_SPI_CMD_RD (BIT(6) | BIT(5)) |
| |
| /* PHY registers */ |
| #define KSZ8794_BMCR 0x00 |
| #define KSZ8794_BMSR 0x01 |
| #define KSZ8794_PHYID1 0x02 |
| #define KSZ8794_PHYID2 0x03 |
| #define KSZ8794_ANAR 0x04 |
| #define KSZ8794_ANLPAR 0x05 |
| #define KSZ8794_LINKMD 0x1D |
| #define KSZ8794_PHYSCS 0x1F |
| |
| /* SWITCH registers */ |
| #define KSZ8794_CHIP_ID0 0x00 |
| #define KSZ8794_CHIP_ID1 0x01 |
| #define KSZ8794_GLOBAL_CTRL0 0x02 |
| #define KSZ8794_GLOBAL_CTRL1 0x03 |
| #define KSZ8794_GLOBAL_CTRL2 0x04 |
| #define KSZ8794_GLOBAL_CTRL3 0x05 |
| #define KSZ8794_GLOBAL_CTRL4 0x06 |
| #define KSZ8794_GLOBAL_CTRL5 0x07 |
| #define KSZ8794_GLOBAL_CTRL6_MIB_CTRL 0x08 |
| #define KSZ8794_GLOBAL_CTRL7 0x09 |
| #define KSZ8794_GLOBAL_CTRL8 0x0A |
| #define KSZ8794_GLOBAL_CTRL9 0x0B |
| #define KSZ8794_GLOBAL_CTRL10 0x0C |
| #define KSZ8794_GLOBAL_CTRL11 0x0D |
| #define KSZ8794_PD_MGMT_CTRL1 0x0E |
| #define KSZ8794_PD_MGMT_CTRL2 0x0F |
| #define KSZ8794_PORT1_CTRL0 0x10 |
| #define KSZ8794_PORT1_CTRL1 0x11 |
| #define KSZ8794_PORT1_CTRL2 0x12 |
| #define KSZ8794_PORT1_CTRL3 0x13 |
| #define KSZ8794_PORT1_CTRL4 0x14 |
| #define KSZ8794_PORT1_CTRL5 0x15 |
| #define KSZ8794_PORT1_CTRL7 0x17 |
| #define KSZ8794_PORT1_STAT0 0x18 |
| #define KSZ8794_PORT1_STAT1 0x19 |
| #define KSZ8794_PORT1_PHY_CTRL8 0x1A |
| #define KSZ8794_PORT1_LINKMD 0x1B |
| #define KSZ8794_PORT1_PHY_CTRL9 0x1C |
| #define KSZ8794_PORT1_PHY_CTRL10 0x1D |
| #define KSZ8794_PORT1_STAT2 0x1E |
| #define KSZ8794_PORT1_CTRL11_STAT3 0x1F |
| #define KSZ8794_PORT2_CTRL0 0x20 |
| #define KSZ8794_PORT2_CTRL1 0x21 |
| #define KSZ8794_PORT2_CTRL2 0x22 |
| #define KSZ8794_PORT2_CTRL3 0x23 |
| #define KSZ8794_PORT2_CTRL4 0x24 |
| #define KSZ8794_PORT2_CTRL5 0x25 |
| #define KSZ8794_PORT2_CTRL7 0x27 |
| #define KSZ8794_PORT2_STAT0 0x28 |
| #define KSZ8794_PORT2_STAT1 0x29 |
| #define KSZ8794_PORT2_PHY_CTRL8 0x2A |
| #define KSZ8794_PORT2_LINKMD 0x2B |
| #define KSZ8794_PORT2_PHY_CTRL9 0x2C |
| #define KSZ8794_PORT2_PHY_CTRL10 0x2D |
| #define KSZ8794_PORT2_STAT2 0x2E |
| #define KSZ8794_PORT2_CTRL11_STAT3 0x2F |
| #define KSZ8794_PORT3_CTRL0 0x30 |
| #define KSZ8794_PORT3_CTRL1 0x31 |
| #define KSZ8794_PORT3_CTRL2 0x32 |
| #define KSZ8794_PORT3_CTRL3 0x33 |
| #define KSZ8794_PORT3_CTRL4 0x34 |
| #define KSZ8794_PORT3_CTRL5 0x35 |
| #define KSZ8794_PORT3_CTRL7 0x37 |
| #define KSZ8794_PORT3_STAT0 0x38 |
| #define KSZ8794_PORT3_STAT1 0x39 |
| #define KSZ8794_PORT3_PHY_CTRL8 0x3A |
| #define KSZ8794_PORT3_LINKMD 0x3B |
| #define KSZ8794_PORT3_PHY_CTRL9 0x3C |
| #define KSZ8794_PORT3_PHY_CTRL10 0x3D |
| #define KSZ8794_PORT3_STAT2 0x3E |
| #define KSZ8794_PORT3_CTRL11_STAT3 0x3F |
| #define KSZ8794_PORT4_CTRL0 0x50 |
| #define KSZ8794_PORT4_CTRL1 0x51 |
| #define KSZ8794_PORT4_CTRL2 0x52 |
| #define KSZ8794_PORT4_CTRL3 0x53 |
| #define KSZ8794_PORT4_CTRL4 0x54 |
| #define KSZ8794_PORT4_CTRL5 0x55 |
| #define KSZ8794_PORT4_IF_CTRL6 0x56 |
| #define KSZ8794_MAC_ADDR0 0x68 |
| #define KSZ8794_MAC_ADDR1 0x69 |
| #define KSZ8794_MAC_ADDR2 0x6A |
| #define KSZ8794_MAC_ADDR3 0x6B |
| #define KSZ8794_MAC_ADDR4 0x6C |
| #define KSZ8794_MAC_ADDR5 0x6D |
| #define KSZ8794_IND_ACCESS_CTRL0 0x6E |
| #define KSZ8794_IND_ACCESS_CTRL1 0x6F |
| #define KSZ8794_IND_DATA8 0x70 |
| #define KSZ8794_IND_DATA7 0x71 |
| #define KSZ8794_IND_DATA6 0x72 |
| #define KSZ8794_IND_DATA5 0x73 |
| #define KSZ8794_IND_DATA4 0x74 |
| #define KSZ8794_IND_DATA3 0x75 |
| #define KSZ8794_IND_DATA2 0x76 |
| #define KSZ8794_IND_DATA1 0x77 |
| #define KSZ8794_IND_DATA0 0x78 |
| #define KSZ8794_INT_STAT 0x7C |
| #define KSZ8794_INT_MASK 0x7D |
| #define KSZ8794_ACL_INT_STAT 0x7E |
| #define KSZ8794_ACL_CTRL 0x7F |
| #define KSZ8794_GLOBAL_CTRL12 0x80 |
| #define KSZ8794_GLOBAL_CTRL13 0x81 |
| #define KSZ8794_GLOBAL_CTRL14 0x82 |
| #define KSZ8794_GLOBAL_CTRL15 0x83 |
| #define KSZ8794_GLOBAL_CTRL16 0x84 |
| #define KSZ8794_GLOBAL_CTRL17 0x85 |
| #define KSZ8794_GLOBAL_CTRL18 0x86 |
| #define KSZ8794_GLOBAL_CTRL19 0x87 |
| #define KSZ8794_TOS_PRIO_CTRL0 0x90 |
| #define KSZ8794_TOS_PRIO_CTRL1 0x91 |
| #define KSZ8794_TOS_PRIO_CTRL2 0x92 |
| #define KSZ8794_TOS_PRIO_CTRL3 0x93 |
| #define KSZ8794_TOS_PRIO_CTRL4 0x94 |
| #define KSZ8794_TOS_PRIO_CTRL5 0x95 |
| #define KSZ8794_TOS_PRIO_CTRL6 0x96 |
| #define KSZ8794_TOS_PRIO_CTRL7 0x97 |
| #define KSZ8794_TOS_PRIO_CTRL8 0x98 |
| #define KSZ8794_TOS_PRIO_CTRL9 0x99 |
| #define KSZ8794_TOS_PRIO_CTRL10 0x9A |
| #define KSZ8794_TOS_PRIO_CTRL11 0x9B |
| #define KSZ8794_TOS_PRIO_CTRL12 0x9C |
| #define KSZ8794_TOS_PRIO_CTRL13 0x9D |
| #define KSZ8794_TOS_PRIO_CTRL14 0x9E |
| #define KSZ8794_TOS_PRIO_CTRL15 0x9F |
| #define KSZ8794_IND_BYTE 0xA0 |
| #define KSZ8794_GLOBAL_CTRL20 0xA3 |
| #define KSZ8794_GLOBAL_CTRL21 0xA4 |
| #define KSZ8794_PORT1_CTRL12 0xB0 |
| #define KSZ8794_PORT1_CTRL13 0xB1 |
| #define KSZ8794_PORT1_CTRL14 0xB2 |
| #define KSZ8794_PORT1_CTRL15 0xB3 |
| #define KSZ8794_PORT1_CTRL16 0xB4 |
| #define KSZ8794_PORT1_CTRL17 0xB5 |
| #define KSZ8794_PORT1_RATE_LIMIT_CTRL 0xB6 |
| #define KSZ8794_PORT1_PRIO0_IG_LIMIT_CTRL1 0xB7 |
| #define KSZ8794_PORT1_PRIO1_IG_LIMIT_CTRL2 0xB8 |
| #define KSZ8794_PORT1_PRIO2_IG_LIMIT_CTRL3 0xB9 |
| #define KSZ8794_PORT1_PRIO3_IG_LIMIT_CTRL4 0xBA |
| #define KSZ8794_PORT1_QUEUE0_EG_LIMIT_CTRL1 0xBB |
| #define KSZ8794_PORT1_QUEUE1_EG_LIMIT_CTRL2 0xBC |
| #define KSZ8794_PORT1_QUEUE2_EG_LIMIT_CTRL3 0xBD |
| #define KSZ8794_PORT1_QUEUE3_EG_LIMIT_CTRL4 0xBE |
| #define KSZ8794_TEST 0xBF |
| #define KSZ8794_PORT2_CTRL12 0xC0 |
| #define KSZ8794_PORT2_CTRL13 0xC1 |
| #define KSZ8794_PORT2_CTRL14 0xC2 |
| #define KSZ8794_PORT2_CTRL15 0xC3 |
| #define KSZ8794_PORT2_CTRL16 0xC4 |
| #define KSZ8794_PORT2_CTRL17 0xC5 |
| #define KSZ8794_PORT2_RATE_LIMIT_CTRL 0xC6 |
| #define KSZ8794_PORT2_PRIO0_IG_LIMIT_CTRL1 0xC7 |
| #define KSZ8794_PORT2_PRIO1_IG_LIMIT_CTRL2 0xC8 |
| #define KSZ8794_PORT2_PRIO2_IG_LIMIT_CTRL3 0xC9 |
| #define KSZ8794_PORT2_PRIO3_IG_LIMIT_CTRL4 0xCA |
| #define KSZ8794_PORT2_QUEUE0_EG_LIMIT_CTRL1 0xCB |
| #define KSZ8794_PORT2_QUEUE1_EG_LIMIT_CTRL2 0xCC |
| #define KSZ8794_PORT2_QUEUE2_EG_LIMIT_CTRL3 0xCD |
| #define KSZ8794_PORT2_QUEUE3_EG_LIMIT_CTRL4 0xCE |
| #define KSZ8794_PORT3_CTRL12 0xD0 |
| #define KSZ8794_PORT3_CTRL13 0xD1 |
| #define KSZ8794_PORT3_CTRL14 0xD2 |
| #define KSZ8794_PORT3_CTRL15 0xD3 |
| #define KSZ8794_PORT3_CTRL16 0xD4 |
| #define KSZ8794_PORT3_CTRL17 0xD5 |
| #define KSZ8794_PORT3_RATE_LIMIT_CTRL 0xD6 |
| #define KSZ8794_PORT3_PRIO0_IG_LIMIT_CTRL1 0xD7 |
| #define KSZ8794_PORT3_PRIO1_IG_LIMIT_CTRL2 0xD8 |
| #define KSZ8794_PORT3_PRIO2_IG_LIMIT_CTRL3 0xD9 |
| #define KSZ8794_PORT3_PRIO3_IG_LIMIT_CTRL4 0xDA |
| #define KSZ8794_PORT3_QUEUE0_EG_LIMIT_CTRL1 0xDB |
| #define KSZ8794_PORT3_QUEUE1_EG_LIMIT_CTRL2 0xDC |
| #define KSZ8794_PORT3_QUEUE2_EG_LIMIT_CTRL3 0xDD |
| #define KSZ8794_PORT3_QUEUE3_EG_LIMIT_CTRL4 0xDE |
| #define KSZ8794_TEST2 0xDF |
| #define KSZ8794_TEST3 0xEF |
| #define KSZ8794_PORT4_CTRL12 0xF0 |
| #define KSZ8794_PORT4_CTRL13 0xF1 |
| #define KSZ8794_PORT4_CTRL14 0xF2 |
| #define KSZ8794_PORT4_CTRL15 0xF3 |
| #define KSZ8794_PORT4_CTRL16 0xF4 |
| #define KSZ8794_PORT4_CTRL17 0xF5 |
| #define KSZ8794_PORT4_RATE_LIMIT_CTRL 0xF6 |
| #define KSZ8794_PORT4_PRIO0_IG_LIMIT_CTRL1 0xF7 |
| #define KSZ8794_PORT4_PRIO1_IG_LIMIT_CTRL2 0xF8 |
| #define KSZ8794_PORT4_PRIO2_IG_LIMIT_CTRL3 0xF9 |
| #define KSZ8794_PORT4_PRIO3_IG_LIMIT_CTRL4 0xFA |
| #define KSZ8794_PORT4_QUEUE0_EG_LIMIT_CTRL1 0xFB |
| #define KSZ8794_PORT4_QUEUE1_EG_LIMIT_CTRL2 0xFC |
| #define KSZ8794_PORT4_QUEUE2_EG_LIMIT_CTRL3 0xFD |
| #define KSZ8794_PORT4_QUEUE3_EG_LIMIT_CTRL4 0xFE |
| #define KSZ8794_TEST4 0xFF |
| |
| /* Basic Control register */ |
| #define KSZ8794_BMCR_RESET 0x8000 |
| #define KSZ8794_BMCR_LOOPBACK 0x4000 |
| #define KSZ8794_BMCR_FORCE_100 0x2000 |
| #define KSZ8794_BMCR_AN_EN 0x1000 |
| #define KSZ8794_BMCR_POWER_DOWN 0x0800 |
| #define KSZ8794_BMCR_ISOLATE 0x0400 |
| #define KSZ8794_BMCR_RESTART_AN 0x0200 |
| #define KSZ8794_BMCR_FORCE_FULL_DUPLEX 0x0100 |
| #define KSZ8794_BMCR_HP_MDIX 0x0020 |
| #define KSZ8794_BMCR_FORCE_MDI 0x0010 |
| #define KSZ8794_BMCR_AUTO_MDIX_DIS 0x0008 |
| #define KSZ8794_BMCR_FAR_END_FAULT_DIS 0x0004 |
| #define KSZ8794_BMCR_TRANSMIT_DIS 0x0002 |
| #define KSZ8794_BMCR_LED_DIS 0x0001 |
| |
| /* Basic Status register */ |
| #define KSZ8794_BMSR_100BT4 0x8000 |
| #define KSZ8794_BMSR_100BTX_FD 0x4000 |
| #define KSZ8794_BMSR_100BTX_HD 0x2000 |
| #define KSZ8794_BMSR_10BT_FD 0x1000 |
| #define KSZ8794_BMSR_10BT_HD 0x0800 |
| #define KSZ8794_BMSR_AN_COMPLETE 0x0020 |
| #define KSZ8794_BMSR_FAR_END_FAULT 0x0010 |
| #define KSZ8794_BMSR_AN_CAPABLE 0x0008 |
| #define KSZ8794_BMSR_LINK_STATUS 0x0004 |
| #define KSZ8794_BMSR_EXTENDED_CAPABLE 0x0001 |
| |
| #define KSZ8794_GLOBAL_CTRL10_TAIL_TAG_EN BIT(1) |
| #define KSZ8794_GLOBAL_CTRL2_LEG_MAX_PKT_SIZ_CHK_DIS BIT(1) |
| |
| #define KSZ8794_CTRL2_PORTn(n) (0x02 + ((n) * 0x10)) |
| #define KSZ8794_CTRL2_TRANSMIT_EN BIT(2) |
| #define KSZ8794_CTRL2_RECEIVE_EN BIT(1) |
| #define KSZ8794_CTRL2_LEARNING_DIS BIT(0) |
| |
| #define KSZ8794_STAT2_PORTn(n) (0x0E + ((n) * 0x10)) |
| #define KSZ8794_STAT2_LINK_GOOD BIT(5) |
| |
| #define KSZ8794_CHIP_ID0_ID_DEFAULT 0x87 |
| #define KSZ8794_PWR_MGNT_MODE_SOFT_DOWN BIT(4) |
| |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_MASK 0x07 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_2MA 0x00 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_4MA 0x01 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_8MA 0x02 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_12MA 0x03 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_16MA 0x04 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_20MA 0x05 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_24MA 0x06 |
| #define KSZ8794_GLOBAL_CTRL20_LOWSPEED_28MA 0x07 |
| |
| enum { |
| /* LAN ports for the ksz8794 switch */ |
| KSZ8794_PORT1 = 1, |
| KSZ8794_PORT2, |
| KSZ8794_PORT3, |
| /* SWITCH <-> CPU port */ |
| KSZ8794_PORT4 = 4, |
| }; |
| |
| #include <drivers/spi.h> |
| struct dsa_ksz8794_spi { |
| const struct device *spi; |
| struct spi_config spi_cfg; |
| struct spi_cs_control cs_ctrl; |
| bool is_init; |
| }; |
| |
| #define KSZ8794_REG_IND_DATA_8 0x70 |
| #define KSZ8794_REG_IND_DATA_7 0x71 |
| #define KSZ8794_REG_IND_DATA_6 0x72 |
| #define KSZ8794_REG_IND_DATA_5 0x73 |
| #define KSZ8794_REG_IND_DATA_4 0x74 |
| #define KSZ8794_REG_IND_DATA_3 0x75 |
| #define KSZ8794_REG_IND_DATA_2 0x76 |
| #define KSZ8794_REG_IND_DATA_1 0x77 |
| #define KSZ8794_REG_IND_DATA_0 0x78 |
| |
| #define KSZ8794_REG_IND_CTRL_0 0x6E |
| #define KSZ8794_REG_IND_CTRL_1 0x6F |
| |
| #define KSZ8794_STATIC_MAC_TABLE_VALID BIT(5) |
| #define KSZ8794_STATIC_MAC_TABLE_OVERRIDE BIT(6) |
| |
| #endif /* __DSA_KSZ8794_H__ */ |