blob: 4ac77c8989d925fb57ca21a020f5548a26cf5ad3 [file] [log] [blame]
developer8051e042022-04-08 13:26:36 +08001/* SPDX-License-Identifier: GPL-2.0
2 *
3 * Copyright (c) 2022 MediaTek Inc.
4 * Author: Henry Yen <henry.yen@mediatek.com>
5 */
6
7#ifndef MTK_ETH_RESET_H
8#define MTK_ETH_RESET_H
9
10/* Frame Engine Reset FSM */
11#define MTK_FE_START_RESET 0x2000
12#define MTK_FE_RESET_DONE 0x2001
13#define MTK_WIFI_RESET_DONE 0x2002
developerbe971722022-05-23 13:51:05 +080014#define MTK_WIFI_CHIP_ONLINE 0x2003
15#define MTK_WIFI_CHIP_OFFLINE 0x2004
developer8051e042022-04-08 13:26:36 +080016#define MTK_FE_RESET_NAT_DONE 0x4001
17
developer37482a42022-12-26 13:31:13 +080018#define MTK_FE_STOP_TRAFFIC (0x2005)
19#define MTK_FE_STOP_TRAFFIC_DONE (0x2006)
20#define MTK_FE_START_TRAFFIC (0x2007)
developer7979ddb2023-04-24 17:19:21 +080021#define MTK_FE_STOP_TRAFFIC_DONE_FAIL (0x2008)
22
developer37482a42022-12-26 13:31:13 +080023
developer8051e042022-04-08 13:26:36 +080024/* ADMA Rx Debug Monitor */
25#define MTK_ADMA_RX_DBG0 (PDMA_BASE + 0x238)
26#define MTK_ADMA_RX_DBG1 (PDMA_BASE + 0x23C)
27
28/* PPE Configurations */
29#define MTK_PPE_GLO_CFG(x) (PPE_BASE(x) + 0x00)
30#define MTK_PPE_TB_CFG(x) (PPE_BASE(x) + 0x1C)
31#define MTK_PPE_BIND_LMT_1(x) (PPE_BASE(x) + 0x30)
32#define MTK_PPE_KA(x) (PPE_BASE(x) + 0x34)
33#define MTK_PPE_KA_CFG_MASK (0x3 << 12)
34#define MTK_PPE_NTU_KA_MASK (0xFF << 16)
35#define MTK_PPE_KA_T_MASK (0xFFFF << 0)
36#define MTK_PPE_TCP_KA_MASK (0xFF << 16)
37#define MTK_PPE_UDP_KA_MASK (0xFF << 24)
38#define MTK_PPE_TICK_SEL_MASK (0x1 << 24)
39#define MTK_PPE_SCAN_MODE_MASK (0x3 << 16)
40#define MTK_PPE_BUSY BIT(31)
41
developer37482a42022-12-26 13:31:13 +080042#if defined(CONFIG_MEDIATEK_NETSYS_V3)
43#define MTK_WDMA_CNT (0x3)
44#else
45#define MTK_WDMA_CNT (0x2)
46#endif
47
developer8051e042022-04-08 13:26:36 +080048enum mtk_reset_type {
49 MTK_TYPE_COLD_RESET = 0,
50 MTK_TYPE_WARM_RESET,
51};
52
53enum mtk_reset_event_id {
54 MTK_EVENT_FORCE = 0,
55 MTK_EVENT_WARM_CNT = 1,
56 MTK_EVENT_COLD_CNT = 2,
57 MTK_EVENT_TOTAL_CNT = 3,
58 MTK_EVENT_FQ_EMPTY = 8,
59 MTK_EVENT_TSO_FAIL = 12,
60 MTK_EVENT_TSO_ILLEGAL = 13,
61 MTK_EVENT_TSO_ALIGN = 14,
62 MTK_EVENT_RFIFO_OV = 18,
63 MTK_EVENT_RFIFO_UF = 19,
64};
65
66extern struct notifier_block mtk_eth_netdevice_nb __read_mostly;
67extern struct completion wait_ser_done;
68extern char* mtk_reset_event_name[32];
69extern atomic_t reset_lock;
developer37482a42022-12-26 13:31:13 +080070extern struct completion wait_nat_done;
71extern u32 mtk_reset_flag;
developer7979ddb2023-04-24 17:19:21 +080072extern bool mtk_stop_fail;
developer8051e042022-04-08 13:26:36 +080073
74irqreturn_t mtk_handle_fe_irq(int irq, void *_eth);
75u32 mtk_check_reset_event(struct mtk_eth *eth, u32 status);
76int mtk_eth_cold_reset(struct mtk_eth *eth);
77int mtk_eth_warm_reset(struct mtk_eth *eth);
78void mtk_reset_event_update(struct mtk_eth *eth, u32 id);
79void mtk_dump_netsys_info(void *_eth);
80void mtk_dma_monitor(struct timer_list *t);
81void mtk_prepare_reset_fe(struct mtk_eth *eth);
82void mtk_prepare_reset_ppe(struct mtk_eth *eth, u32 ppe_id);
83
84#endif /* MTK_ETH_RESET_H */