blob: 6a0afaf2f7510743d0362ab5a38d704a81a3fc01 [file] [log] [blame]
developer5e9bfbf2023-09-01 13:53:52 +08001/* SPDX-License-Identifier: GPL-2.0 */
2/*************************************************
3 * FILE NAME: air_en8811h.h
4 * PURPOSE:
5 * EN8811H PHY Driver for Linux
6 * NOTES:
7 *
8 * Copyright (C) 2023 Airoha Technology Corp.
9 *************************************************/
10#ifndef __EN8811H_H
11#define __EN8811H_H
12
13#define EN8811H_MD32_DM "EthMD32.dm.bin"
14#define EN8811H_MD32_DSP "EthMD32.DSP.bin"
15
16#define EN8811H_PHY_ID1 0x03a2
17#define EN8811H_PHY_ID2 0xa411
18#define EN8811H_PHY_ID ((EN8811H_PHY_ID1 << 16) | EN8811H_PHY_ID2)
19#define EN8811H_PHY_READY 0x02
20#define MAX_RETRY 25
21
22#define EN8811H_TX_POL_NORMAL 0x1
23#define EN8811H_TX_POL_REVERSE 0x0
24
25#define EN8811H_RX_POL_NORMAL (0x0 << 1)
26#define EN8811H_RX_POL_REVERSE (0x1 << 1)
27
28
29/***************************************************************
30 * The following led_cfg example is for reference only.
31 * LED0 Link 2500/Blink 2500 TxRx (GPIO5) <-> BASE_T_LED0,
32 * LED1 Link 1000/Blink 1000 TxRx (GPIO4) <-> BASE_T_LED1,
33 * LED2 Link 100 /Blink 100 TxRx (GPIO3) <-> BASE_T_LED2,
34 ***************************************************************/
35/* User-defined.B */
36#define AIR_LED0_ON (LED_ON_EVT_LINK_2500M)
37#define AIR_LED0_BLK (LED_BLK_EVT_2500M_TX_ACT | LED_BLK_EVT_2500M_RX_ACT)
38#define AIR_LED1_ON (LED_ON_EVT_LINK_1000M)
39#define AIR_LED1_BLK (LED_BLK_EVT_1000M_TX_ACT | LED_BLK_EVT_1000M_RX_ACT)
40#define AIR_LED2_ON (LED_ON_EVT_LINK_100M)
41#define AIR_LED2_BLK (LED_BLK_EVT_100M_TX_ACT | LED_BLK_EVT_100M_RX_ACT)
42/* User-defined.E */
43
44/* CL45 MDIO control */
45#define MII_MMD_ACC_CTL_REG 0x0d
46#define MII_MMD_ADDR_DATA_REG 0x0e
47#define MMD_OP_MODE_DATA BIT(14)
48
49#define EN8811H_DRIVER_VERSION "v1.2.2"
50
51#define LED_ON_CTRL(i) (0x024 + ((i)*2))
52#define LED_ON_EN (1 << 15)
53#define LED_ON_POL (1 << 14)
54#define LED_ON_EVT_MASK (0x1ff)
55/* LED ON Event Option.B */
56#define LED_ON_EVT_LINK_2500M (1 << 8)
57#define LED_ON_EVT_FORCE (1 << 6)
58#define LED_ON_EVT_LINK_DOWN (1 << 3)
59#define LED_ON_EVT_LINK_100M (1 << 1)
60#define LED_ON_EVT_LINK_1000M (1 << 0)
61/* LED ON Event Option.E */
62
63#define LED_BLK_CTRL(i) (0x025 + ((i)*2))
64#define LED_BLK_EVT_MASK (0xfff)
65/* LED Blinking Event Option.B*/
66#define LED_BLK_EVT_2500M_RX_ACT (1 << 11)
67#define LED_BLK_EVT_2500M_TX_ACT (1 << 10)
68#define LED_BLK_EVT_FORCE (1 << 9)
69#define LED_BLK_EVT_100M_RX_ACT (1 << 3)
70#define LED_BLK_EVT_100M_TX_ACT (1 << 2)
71#define LED_BLK_EVT_1000M_RX_ACT (1 << 1)
72#define LED_BLK_EVT_1000M_TX_ACT (1 << 0)
73/* LED Blinking Event Option.E*/
74#define EN8811H_LED_COUNT 3
75
76#define LED_BCR (0x021)
77#define LED_BCR_EXT_CTRL (1 << 15)
78#define LED_BCR_CLK_EN (1 << 3)
79#define LED_BCR_TIME_TEST (1 << 2)
80#define LED_BCR_MODE_MASK (3)
81#define LED_BCR_MODE_DISABLE (0)
82
83#define LED_ON_DUR (0x022)
84#define LED_ON_DUR_MASK (0xffff)
85
86#define LED_BLK_DUR (0x023)
87#define LED_BLK_DUR_MASK (0xffff)
88
89#define UNIT_LED_BLINK_DURATION 1024
90
91#define GET_BIT(val, bit) ((val & BIT(bit)) >> bit)
92
93#define INVALID_DATA 0xffff
94#define PBUS_INVALID_DATA 0xffffffff
95
96struct en8811h_priv {
97 struct dentry *debugfs_root;
98 unsigned int dm_crc32;
99 unsigned int dsp_crc32;
100 char buf[512];
101};
102
103struct air_base_t_led_cfg {
104 u16 en;
105 u16 gpio;
106 u16 pol;
107 u16 on_cfg;
108 u16 blk_cfg;
109};
110enum air_led_gpio {
111 AIR_LED2_GPIO3 = 3,
112 AIR_LED1_GPIO4,
113 AIR_LED0_GPIO5,
114 AIR_LED_LAST
115};
116
117enum air_base_t_led {
118 AIR_BASE_T_LED0,
119 AIR_BASE_T_LED1,
120 AIR_BASE_T_LED2,
121 AIR_BASE_T_LED3
122};
123
124enum air_led_blk_dur {
125 AIR_LED_BLK_DUR_32M,
126 AIR_LED_BLK_DUR_64M,
127 AIR_LED_BLK_DUR_128M,
128 AIR_LED_BLK_DUR_256M,
129 AIR_LED_BLK_DUR_512M,
130 AIR_LED_BLK_DUR_1024M,
131 AIR_LED_BLK_DUR_LAST
132};
133
134enum air_led_polarity {
135 AIR_ACTIVE_LOW,
136 AIR_ACTIVE_HIGH,
137};
138enum air_led_mode {
139 AIR_LED_MODE_DISABLE,
140 AIR_LED_MODE_USER_DEFINE,
141 AIR_LED_MODE_LAST
142};
143
144#endif /* End of __EN8811H_H */