| /* |
| * Copyright (c) 2024 Robert Slawinski <robert.slawinski1@gmail.com> |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /* The absolute PHY address is 10 bit length. Last 5 bits for oldest |
| * part of address - see Clause 22 of IEEE 802.3. |
| */ |
| #define DM8806_REGAD_WIDTH 0x5u |
| |
| /* Mask for checksum error. Checksum status is present on the 8-th bit of the |
| * Serial Bus Error Check Register (339h) [8] |
| */ |
| #define DM8806_SMI_ERR 8 |
| |
| /* PHY read opcode as part of the MDIO frame in Clause 22 */ |
| #define DM8806_PHY_READ 0x2u |
| /* PHY write opcode as part of the MDIO frame in Clause 22 */ |
| #define DM8806_PHY_WRITE 0x1u |
| |
| /* Port 0~4 PHY Control Register. */ |
| #define DM8806_PORTX_PHY_CONTROL_REGISTER 0x0u |
| /* 10 Mbit/s transfer with half duplex mask. */ |
| #define DM8806_MODE_10_BASET_HALF_DUPLEX 0x0u |
| /* 10 Mbit/s transfer with full duplex mask. */ |
| #define DM8806_MODE_10_BASET_FULL_DUPLEX 0x100u |
| /* 100 Mbit/s transfer with half duplex mask. */ |
| #define DM8806_MODE_100_BASET_HALF_DUPLEX 0x2000u |
| /* 100 Mbit/s transfer with full duplex mask. */ |
| #define DM8806_MODE_100_BASET_FULL_DUPLEX 0x2100u |
| /* Duplex mode ability offset. */ |
| #define DM8806_DUPLEX_MODE (1 << 8) |
| /* Power down mode offset. */ |
| #define DM8806_POWER_DOWN (1 << 11) |
| /* Auto negotiation mode offset. */ |
| #define DM8806_AUTO_NEGOTIATION (1 << 12) |
| /* Link speed selection offset. */ |
| #define DM8806_LINK_SPEED (1 << 13) |
| |
| /* Port 0~4 Status Data Register. */ |
| #define DM8806_PORTX_SWITCH_STATUS 0x10u |
| /* 10 Mbit/s transfer speed with half duplex. */ |
| #define DM8806_SPEED_10MBPS_HALF_DUPLEX 0x00u |
| /* 10 Mbit/s transfer speed with full duplex. */ |
| #define DM8806_SPEED_10MBPS_FULL_DUPLEX 0x01u |
| /* 100 Mbit/s transfer speed with half duplex. */ |
| #define DM8806_SPEED_100MBPS_HALF_DUPLEX 0x02u |
| /* 100 Mbit/s transfer speed with full duplex. */ |
| #define DM8806_SPEED_100MBPS_FULL_DUPLEX 0x03u |
| /* Speed and duplex mode status offset. */ |
| #define DM8806_SPEED_AND_DUPLEX_OFFSET 0x01u |
| /* Speed and duplex mode staus mask. */ |
| #define DM8806_SPEED_AND_DUPLEX_MASK 0x07u |
| /* Link status mask. */ |
| #define DM8806_LINK_STATUS_MASK 0x1u |
| |
| /* Switch Engine Registers */ |
| /* Address Table Control And Status Register PHY Address */ |
| #define DM8806_ADDR_TAB_CTRL_STAT_PHY_ADDR 0x15u |
| /* Address Table Control And Status Register Register SAddress */ |
| #define DM8806_ADDR_TAB_CTRL_STAT_REG_ADDR 0x10u |
| |
| /* Address Table Access bussy flag offset */ |
| #define DM8806_ATB_S_OFFSET 0xf |
| /* Address Table Command Result flag offset */ |
| #define DM8806_ATB_CR_OFFSET 0xd |
| /* Address Table Command Result flag mask */ |
| #define DM8806_ATB_CR_MASK 0x3 |
| |
| /* Unicast Address Table Index*/ |
| #define DM8806_UNICAST_ADDR_TAB (1 << 0 | 1 << 1) |
| /* Multicast Address Table Index*/ |
| #define DM8806_MULTICAST_ADDR_TAB (1 << 0) |
| /* IGMP Table Index*/ |
| #define DM8806_IGMP_ADDR_TAB (1 << 1) |
| |
| /* Read a entry with sequence number of address table */ |
| #define DM8806_ATB_CMD_READ (1 << 2 | 1 << 3 | 1 << 4) |
| /* Write a entry with MAC address */ |
| #define DM8806_ATB_CMD_WRITE (1 << 2) |
| /* Delete a entry with MAC address */ |
| #define DM8806_ATB_CMD_DELETE (1 << 3) |
| /* Search a entry with MAC address */ |
| #define DM8806_ATB_CMD_SEARCH (1 << 2 | 1 << 3) |
| /* Clear one or more than one entries with Port or FID */ |
| #define DM8806_ATB_CMD_CLEAR (1 << 4) |
| |
| /* Address Table Data 0 PHY Address */ |
| #define DM8806_ADDR_TAB_DATA0_PHY_ADDR 0x15u |
| /* Address Table Data 0 Register Address */ |
| #define DM8806_ADDR_TAB_DATA0_REG_ADDR 0x11u |
| /* Port number or port map mask*/ |
| #define DM8806_ATB_PORT_MASK 0x1f |
| |
| /* Address Table Data 1 PHY Address */ |
| #define DM8806_ADDR_TAB_DATA1_PHY_ADDR 0x15u |
| /* Address Table Data 1 Register Address */ |
| #define DM8806_ADDR_TAB_DATA1_REG_ADDR 0x12u |
| |
| /* Address Table Data 2 PHY Address */ |
| #define DM8806_ADDR_TAB_DATA2_PHY_ADDR 0x15u |
| /* Address Table Data 2 Register Address */ |
| #define DM8806_ADDR_TAB_DATA2_REG_ADDR 0x13u |
| |
| /* Address Table Data 3 PHY Address */ |
| #define DM8806_ADDR_TAB_DATA3_PHY_ADDR 0x15u |
| /* Address Table Data 3 Register Address */ |
| #define DM8806_ADDR_TAB_DATA3_REG_ADDR 0x14u |
| |
| /* Address Table Data 4 PHY Address */ |
| #define DM8806_ADDR_TAB_DATA4_PHY_ADDR 0x15u |
| /* Address Table Data 4 Register Address */ |
| #define DM8806_ADDR_TAB_DATA4_REG_ADDR 0x15u |
| |
| /* WoL Control Register PHY Address */ |
| #define DM8806_WOLL_CTRL_REG_PHY_ADDR 0x15u |
| /* WoL Control Register Register Address */ |
| #define DM8806_WOLL_CTRL_REG_REG_ADDR 0x1bu |
| |
| /* Serial Bus Error Check PHY Address. */ |
| #define DM8806_SMI_BUS_ERR_CHK_PHY_ADDRESS 0x19u |
| /* Serial Bus Error Check Register Address. */ |
| #define DM8806_SMI_BUS_ERR_CHK_REG_ADDRESS 0x19u |
| |
| /* Serial Bus Control PHY Address. */ |
| #define DM8806_SMI_BUS_CTRL_PHY_ADDRESS 0x19u |
| /* Serial Bus Control Register Address. */ |
| #define DM8806_SMI_BUS_CTRL_REG_ADDRESS 0x1au |
| /* SMI Bus Error Check Enable. */ |
| #define DM8806_SMI_ECE BIT(0) |
| |
| /* PHY address 0x18h */ |
| #define DM8806_PHY_ADDRESS_18H 0x18u |
| |
| /* Interrupt Status Register PHY Address. */ |
| #define DM8806_INT_STAT_PHY_ADDR 0x18u |
| /* Interrupt Status Register Register Address. */ |
| #define DM8806_INT_STAT_REG_ADDR 0x18u |
| |
| /* Interrupt Mask & Control Register PHY Address. */ |
| #define DM8806_INT_MASK_CTRL_PHY_ADDR 0x18u |
| /* Interrupt Mask & Control Register Register Address. */ |
| #define DM8806_INT_MASK_CTRL_REG_ADDR 0x19u |
| |
| /* Switch Register offset */ |
| #define DM8806_SWITCH_REGISTER_OFFSET 0x08 |
| |
| /* Energy Efficient Ethernet Control Register Address. */ |
| #define DM8806_ENERGY_EFFICIENT_ETH_CTRL_REG_ADDR 0x1e |
| |
| /* Energy Efficient Ethernet enable bit */ |
| #define DM8806_EEE_EN BIT(15) |
| |
| #define DM8806_PORT5_MAC_CONTROL 0x15u |
| /* Port 5 Force Speed control bit */ |
| #define DM8806_P5_SPEED_100M ~BIT(0) |
| /* Port 5 Force Duplex control bit */ |
| #define DM8806_P5_FULL_DUPLEX ~BIT(1) |
| /* Port 5 Force Link control bit. Only available in force mode. */ |
| #define DM8806_P5_FORCE_LINK_ON ~BIT(2) |
| /* Port 5 Force Mode Enable control bit. Only available for |
| * MII/RevMII/RMII |
| */ |
| #define DM8806_P5_EN_FORCE BIT(3) |
| /* Bit 4 is reserved and should not be use */ |
| /* Port 5 50MHz Clock Output Enable control bit. Only available when Port 5 |
| * be configured as RMII |
| */ |
| #define DM8806_P5_50M_CLK_OUT_ENABLE BIT(5) |
| /* Port 5 Clock Source Selection control bit. Only available when Port 5 |
| * is configured as RMII |
| */ |
| #define DM8806_P5_50M_INT_CLK_SOURCE BIT(6) |
| /* Port 5 Output Pin Slew Rate. */ |
| #define DM8806_P5_NORMAL_SLEW_RATE ~BIT(7) |
| /* IRQ and LED Control Register. */ |
| #define DM8806_IRQ_LED_CONTROL 0x17u |
| /* LED mode 0: |
| * LNK_LED: |
| * 100M link fail - LED off |
| * 100M link ok and no TX/RX activity - LED on |
| * 100M link ok and TX/RX activity - LED blinking |
| * SPD_LED: |
| * No colision: - LED off |
| * Colision: - LED blinking |
| * FDX_LED: |
| * 10M link fail - LED off |
| * 10M link ok and no TX/RX activity - LED on |
| * 10M link ok and TX/RX activity - LED blinking |
| */ |
| #define DM8806_LED_MODE_0 ~(BIT(0) | BIT(1)) |