292 lines
15 KiB
C
292 lines
15 KiB
C
/*
|
|
* 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__ */
|