| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* Renesas Ethernet Switch device driver | |
| * | |
| * Copyright (C) 2022-2025 Renesas Electronics Corporation | |
| */ | |
| #ifndef __RSWITCH_H__ | |
| #define __RSWITCH_H__ | |
| #include <linux/platform_device.h> | |
| #include <linux/phy.h> | |
| #include "rcar_gen4_ptp.h" | |
| #define RSWITCH_MAX_NUM_QUEUES 128 | |
| #define RSWITCH_NUM_AGENTS 5 | |
| #define RSWITCH_NUM_PORTS 3 | |
| #define rswitch_for_all_ports(_priv, _rdev) \ | |
| list_for_each_entry(_rdev, &_priv->port_list, list) | |
| #define rswitch_for_each_enabled_port(priv, i) \ | |
| for (i = 0; i < RSWITCH_NUM_PORTS; i++) \ | |
| if (priv->rdev[i]->disabled) \ | |
| continue; \ | |
| else | |
| #define rswitch_for_each_enabled_port_continue_reverse(priv, i) \ | |
| for (; i-- > 0; ) \ | |
| if (priv->rdev[i]->disabled) \ | |
| continue; \ | |
| else | |
| #define TX_RING_SIZE 1024 | |
| #define RX_RING_SIZE 4096 | |
| #define TS_RING_SIZE (TX_RING_SIZE * RSWITCH_NUM_PORTS) | |
| #define RSWITCH_MAX_MTU 9600 | |
| #define RSWITCH_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN) | |
| #define RSWITCH_DESC_BUF_SIZE 2048 | |
| #define RSWITCH_TAILROOM SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) | |
| #define RSWITCH_ALIGN 128 | |
| #define RSWITCH_BUF_SIZE (RSWITCH_HEADROOM + RSWITCH_DESC_BUF_SIZE + \ | |
| RSWITCH_TAILROOM + RSWITCH_ALIGN) | |
| #define RSWITCH_MAP_BUF_SIZE (RSWITCH_BUF_SIZE - RSWITCH_HEADROOM) | |
| #define RSWITCH_MAX_CTAG_PCP 7 | |
| #define RSWITCH_TIMEOUT_US 100000 | |
| #define RSWITCH_TOP_OFFSET 0x00008000 | |
| #define RSWITCH_COMA_OFFSET 0x00009000 | |
| #define RSWITCH_ETHA_OFFSET 0x0000a000 /* with RMAC */ | |
| #define RSWITCH_ETHA_SIZE 0x00002000 /* with RMAC */ | |
| #define RSWITCH_GWCA0_OFFSET 0x00010000 | |
| #define RSWITCH_GWCA1_OFFSET 0x00012000 | |
| /* TODO: hardcoded ETHA/GWCA settings for now */ | |
| #define GWCA_IRQ_RESOURCE_NAME "gwca0_rxtx%d" | |
| #define GWCA_IRQ_NAME "rswitch: gwca0_rxtx%d" | |
| #define GWCA_NUM_IRQS 8 | |
| #define GWCA_INDEX 0 | |
| #define AGENT_INDEX_GWCA 3 | |
| #define GWCA_IPV_NUM 0 | |
| #define GWRO RSWITCH_GWCA0_OFFSET | |
| #define GWCA_TS_IRQ_RESOURCE_NAME "gwca0_rxts0" | |
| #define GWCA_TS_IRQ_NAME "rswitch: gwca0_rxts0" | |
| #define GWCA_TS_IRQ_BIT BIT(0) | |
| #define FWRO 0 | |
| #define TPRO RSWITCH_TOP_OFFSET | |
| #define CARO RSWITCH_COMA_OFFSET | |
| #define TARO 0 | |
| #define RMRO 0x1000 | |
| enum rswitch_reg { | |
| FWGC = FWRO + 0x0000, | |
| FWTTC0 = FWRO + 0x0010, | |
| FWTTC1 = FWRO + 0x0014, | |
| FWLBMC = FWRO + 0x0018, | |
| FWCEPTC = FWRO + 0x0020, | |
| FWCEPRC0 = FWRO + 0x0024, | |
| FWCEPRC1 = FWRO + 0x0028, | |
| FWCEPRC2 = FWRO + 0x002c, | |
| FWCLPTC = FWRO + 0x0030, | |
| FWCLPRC = FWRO + 0x0034, | |
| FWCMPTC = FWRO + 0x0040, | |
| FWEMPTC = FWRO + 0x0044, | |
| FWSDMPTC = FWRO + 0x0050, | |
| FWSDMPVC = FWRO + 0x0054, | |
| FWLBWMC0 = FWRO + 0x0080, | |
| FWPC00 = FWRO + 0x0100, | |
| FWPC10 = FWRO + 0x0104, | |
| FWPC20 = FWRO + 0x0108, | |
| FWCTGC00 = FWRO + 0x0400, | |
| FWCTGC10 = FWRO + 0x0404, | |
| FWCTTC00 = FWRO + 0x0408, | |
| FWCTTC10 = FWRO + 0x040c, | |
| FWCTTC200 = FWRO + 0x0410, | |
| FWCTSC00 = FWRO + 0x0420, | |
| FWCTSC10 = FWRO + 0x0424, | |
| FWCTSC20 = FWRO + 0x0428, | |
| FWCTSC30 = FWRO + 0x042c, | |
| FWCTSC40 = FWRO + 0x0430, | |
| FWTWBFC0 = FWRO + 0x1000, | |
| FWTWBFVC0 = FWRO + 0x1004, | |
| FWTHBFC0 = FWRO + 0x1400, | |
| FWTHBFV0C0 = FWRO + 0x1404, | |
| FWTHBFV1C0 = FWRO + 0x1408, | |
| FWFOBFC0 = FWRO + 0x1800, | |
| FWFOBFV0C0 = FWRO + 0x1804, | |
| FWFOBFV1C0 = FWRO + 0x1808, | |
| FWRFC0 = FWRO + 0x1c00, | |
| FWRFVC0 = FWRO + 0x1c04, | |
| FWCFC0 = FWRO + 0x2000, | |
| FWCFMC00 = FWRO + 0x2004, | |
| FWIP4SC = FWRO + 0x4008, | |
| FWIP6SC = FWRO + 0x4018, | |
| FWIP6OC = FWRO + 0x401c, | |
| FWL2SC = FWRO + 0x4020, | |
| FWSFHEC = FWRO + 0x4030, | |
| FWSHCR0 = FWRO + 0x4040, | |
| FWSHCR1 = FWRO + 0x4044, | |
| FWSHCR2 = FWRO + 0x4048, | |
| FWSHCR3 = FWRO + 0x404c, | |
| FWSHCR4 = FWRO + 0x4050, | |
| FWSHCR5 = FWRO + 0x4054, | |
| FWSHCR6 = FWRO + 0x4058, | |
| FWSHCR7 = FWRO + 0x405c, | |
| FWSHCR8 = FWRO + 0x4060, | |
| FWSHCR9 = FWRO + 0x4064, | |
| FWSHCR10 = FWRO + 0x4068, | |
| FWSHCR11 = FWRO + 0x406c, | |
| FWSHCR12 = FWRO + 0x4070, | |
| FWSHCR13 = FWRO + 0x4074, | |
| FWSHCRR = FWRO + 0x4078, | |
| FWLTHHEC = FWRO + 0x4090, | |
| FWLTHHC = FWRO + 0x4094, | |
| FWLTHTL0 = FWRO + 0x40a0, | |
| FWLTHTL1 = FWRO + 0x40a4, | |
| FWLTHTL2 = FWRO + 0x40a8, | |
| FWLTHTL3 = FWRO + 0x40ac, | |
| FWLTHTL4 = FWRO + 0x40b0, | |
| FWLTHTL5 = FWRO + 0x40b4, | |
| FWLTHTL6 = FWRO + 0x40b8, | |
| FWLTHTL7 = FWRO + 0x40bc, | |
| FWLTHTL80 = FWRO + 0x40c0, | |
| FWLTHTL9 = FWRO + 0x40d0, | |
| FWLTHTLR = FWRO + 0x40d4, | |
| FWLTHTIM = FWRO + 0x40e0, | |
| FWLTHTEM = FWRO + 0x40e4, | |
| FWLTHTS0 = FWRO + 0x4100, | |
| FWLTHTS1 = FWRO + 0x4104, | |
| FWLTHTS2 = FWRO + 0x4108, | |
| FWLTHTS3 = FWRO + 0x410c, | |
| FWLTHTS4 = FWRO + 0x4110, | |
| FWLTHTSR0 = FWRO + 0x4120, | |
| FWLTHTSR1 = FWRO + 0x4124, | |
| FWLTHTSR2 = FWRO + 0x4128, | |
| FWLTHTSR3 = FWRO + 0x412c, | |
| FWLTHTSR40 = FWRO + 0x4130, | |
| FWLTHTSR5 = FWRO + 0x4140, | |
| FWLTHTR = FWRO + 0x4150, | |
| FWLTHTRR0 = FWRO + 0x4154, | |
| FWLTHTRR1 = FWRO + 0x4158, | |
| FWLTHTRR2 = FWRO + 0x415c, | |
| FWLTHTRR3 = FWRO + 0x4160, | |
| FWLTHTRR4 = FWRO + 0x4164, | |
| FWLTHTRR5 = FWRO + 0x4168, | |
| FWLTHTRR6 = FWRO + 0x416c, | |
| FWLTHTRR7 = FWRO + 0x4170, | |
| FWLTHTRR8 = FWRO + 0x4174, | |
| FWLTHTRR9 = FWRO + 0x4180, | |
| FWLTHTRR10 = FWRO + 0x4190, | |
| FWIPHEC = FWRO + 0x4214, | |
| FWIPHC = FWRO + 0x4218, | |
| FWIPTL0 = FWRO + 0x4220, | |
| FWIPTL1 = FWRO + 0x4224, | |
| FWIPTL2 = FWRO + 0x4228, | |
| FWIPTL3 = FWRO + 0x422c, | |
| FWIPTL4 = FWRO + 0x4230, | |
| FWIPTL5 = FWRO + 0x4234, | |
| FWIPTL6 = FWRO + 0x4238, | |
| FWIPTL7 = FWRO + 0x4240, | |
| FWIPTL8 = FWRO + 0x4250, | |
| FWIPTLR = FWRO + 0x4254, | |
| FWIPTIM = FWRO + 0x4260, | |
| FWIPTEM = FWRO + 0x4264, | |
| FWIPTS0 = FWRO + 0x4270, | |
| FWIPTS1 = FWRO + 0x4274, | |
| FWIPTS2 = FWRO + 0x4278, | |
| FWIPTS3 = FWRO + 0x427c, | |
| FWIPTS4 = FWRO + 0x4280, | |
| FWIPTSR0 = FWRO + 0x4284, | |
| FWIPTSR1 = FWRO + 0x4288, | |
| FWIPTSR2 = FWRO + 0x428c, | |
| FWIPTSR3 = FWRO + 0x4290, | |
| FWIPTSR4 = FWRO + 0x42a0, | |
| FWIPTR = FWRO + 0x42b0, | |
| FWIPTRR0 = FWRO + 0x42b4, | |
| FWIPTRR1 = FWRO + 0x42b8, | |
| FWIPTRR2 = FWRO + 0x42bc, | |
| FWIPTRR3 = FWRO + 0x42c0, | |
| FWIPTRR4 = FWRO + 0x42c4, | |
| FWIPTRR5 = FWRO + 0x42c8, | |
| FWIPTRR6 = FWRO + 0x42cc, | |
| FWIPTRR7 = FWRO + 0x42d0, | |
| FWIPTRR8 = FWRO + 0x42e0, | |
| FWIPTRR9 = FWRO + 0x42f0, | |
| FWIPHLEC = FWRO + 0x4300, | |
| FWIPAGUSPC = FWRO + 0x4500, | |
| FWIPAGC = FWRO + 0x4504, | |
| FWIPAGM0 = FWRO + 0x4510, | |
| FWIPAGM1 = FWRO + 0x4514, | |
| FWIPAGM2 = FWRO + 0x4518, | |
| FWIPAGM3 = FWRO + 0x451c, | |
| FWIPAGM4 = FWRO + 0x4520, | |
| FWMACHEC = FWRO + 0x4620, | |
| FWMACHC = FWRO + 0x4624, | |
| FWMACTL0 = FWRO + 0x4630, | |
| FWMACTL1 = FWRO + 0x4634, | |
| FWMACTL2 = FWRO + 0x4638, | |
| FWMACTL3 = FWRO + 0x463c, | |
| FWMACTL4 = FWRO + 0x4640, | |
| FWMACTL5 = FWRO + 0x4650, | |
| FWMACTLR = FWRO + 0x4654, | |
| FWMACTIM = FWRO + 0x4660, | |
| FWMACTEM = FWRO + 0x4664, | |
| FWMACTS0 = FWRO + 0x4670, | |
| FWMACTS1 = FWRO + 0x4674, | |
| FWMACTSR0 = FWRO + 0x4678, | |
| FWMACTSR1 = FWRO + 0x467c, | |
| FWMACTSR2 = FWRO + 0x4680, | |
| FWMACTSR3 = FWRO + 0x4690, | |
| FWMACTR = FWRO + 0x46a0, | |
| FWMACTRR0 = FWRO + 0x46a4, | |
| FWMACTRR1 = FWRO + 0x46a8, | |
| FWMACTRR2 = FWRO + 0x46ac, | |
| FWMACTRR3 = FWRO + 0x46b0, | |
| FWMACTRR4 = FWRO + 0x46b4, | |
| FWMACTRR5 = FWRO + 0x46c0, | |
| FWMACTRR6 = FWRO + 0x46d0, | |
| FWMACHLEC = FWRO + 0x4700, | |
| FWMACAGUSPC = FWRO + 0x4880, | |
| FWMACAGC = FWRO + 0x4884, | |
| FWMACAGM0 = FWRO + 0x4888, | |
| FWMACAGM1 = FWRO + 0x488c, | |
| FWVLANTEC = FWRO + 0x4900, | |
| FWVLANTL0 = FWRO + 0x4910, | |
| FWVLANTL1 = FWRO + 0x4914, | |
| FWVLANTL2 = FWRO + 0x4918, | |
| FWVLANTL3 = FWRO + 0x4920, | |
| FWVLANTL4 = FWRO + 0x4930, | |
| FWVLANTLR = FWRO + 0x4934, | |
| FWVLANTIM = FWRO + 0x4940, | |
| FWVLANTEM = FWRO + 0x4944, | |
| FWVLANTS = FWRO + 0x4950, | |
| FWVLANTSR0 = FWRO + 0x4954, | |
| FWVLANTSR1 = FWRO + 0x4958, | |
| FWVLANTSR2 = FWRO + 0x4960, | |
| FWVLANTSR3 = FWRO + 0x4970, | |
| FWPBFC0 = FWRO + 0x4a00, | |
| FWPBFCSDC00 = FWRO + 0x4a04, | |
| FWL23URL0 = FWRO + 0x4e00, | |
| FWL23URL1 = FWRO + 0x4e04, | |
| FWL23URL2 = FWRO + 0x4e08, | |
| FWL23URL3 = FWRO + 0x4e0c, | |
| FWL23URLR = FWRO + 0x4e10, | |
| FWL23UTIM = FWRO + 0x4e20, | |
| FWL23URR = FWRO + 0x4e30, | |
| FWL23URRR0 = FWRO + 0x4e34, | |
| FWL23URRR1 = FWRO + 0x4e38, | |
| FWL23URRR2 = FWRO + 0x4e3c, | |
| FWL23URRR3 = FWRO + 0x4e40, | |
| FWL23URMC0 = FWRO + 0x4f00, | |
| FWPMFGC0 = FWRO + 0x5000, | |
| FWPGFC0 = FWRO + 0x5100, | |
| FWPGFIGSC0 = FWRO + 0x5104, | |
| FWPGFENC0 = FWRO + 0x5108, | |
| FWPGFENM0 = FWRO + 0x510c, | |
| FWPGFCSTC00 = FWRO + 0x5110, | |
| FWPGFCSTC10 = FWRO + 0x5114, | |
| FWPGFCSTM00 = FWRO + 0x5118, | |
| FWPGFCSTM10 = FWRO + 0x511c, | |
| FWPGFCTC0 = FWRO + 0x5120, | |
| FWPGFCTM0 = FWRO + 0x5124, | |
| FWPGFHCC0 = FWRO + 0x5128, | |
| FWPGFSM0 = FWRO + 0x512c, | |
| FWPGFGC0 = FWRO + 0x5130, | |
| FWPGFGL0 = FWRO + 0x5500, | |
| FWPGFGL1 = FWRO + 0x5504, | |
| FWPGFGLR = FWRO + 0x5518, | |
| FWPGFGR = FWRO + 0x5510, | |
| FWPGFGRR0 = FWRO + 0x5514, | |
| FWPGFGRR1 = FWRO + 0x5518, | |
| FWPGFRIM = FWRO + 0x5520, | |
| FWPMTRFC0 = FWRO + 0x5600, | |
| FWPMTRCBSC0 = FWRO + 0x5604, | |
| FWPMTRC0RC0 = FWRO + 0x5608, | |
| FWPMTREBSC0 = FWRO + 0x560c, | |
| FWPMTREIRC0 = FWRO + 0x5610, | |
| FWPMTRFM0 = FWRO + 0x5614, | |
| FWFTL0 = FWRO + 0x6000, | |
| FWFTL1 = FWRO + 0x6004, | |
| FWFTLR = FWRO + 0x6008, | |
| FWFTOC = FWRO + 0x6010, | |
| FWFTOPC = FWRO + 0x6014, | |
| FWFTIM = FWRO + 0x6020, | |
| FWFTR = FWRO + 0x6030, | |
| FWFTRR0 = FWRO + 0x6034, | |
| FWFTRR1 = FWRO + 0x6038, | |
| FWFTRR2 = FWRO + 0x603c, | |
| FWSEQNGC0 = FWRO + 0x6100, | |
| FWSEQNGM0 = FWRO + 0x6104, | |
| FWSEQNRC = FWRO + 0x6200, | |
| FWCTFDCN0 = FWRO + 0x6300, | |
| FWLTHFDCN0 = FWRO + 0x6304, | |
| FWIPFDCN0 = FWRO + 0x6308, | |
| FWLTWFDCN0 = FWRO + 0x630c, | |
| FWPBFDCN0 = FWRO + 0x6310, | |
| FWMHLCN0 = FWRO + 0x6314, | |
| FWIHLCN0 = FWRO + 0x6318, | |
| FWICRDCN0 = FWRO + 0x6500, | |
| FWWMRDCN0 = FWRO + 0x6504, | |
| FWCTRDCN0 = FWRO + 0x6508, | |
| FWLTHRDCN0 = FWRO + 0x650c, | |
| FWIPRDCN0 = FWRO + 0x6510, | |
| FWLTWRDCN0 = FWRO + 0x6514, | |
| FWPBRDCN0 = FWRO + 0x6518, | |
| FWPMFDCN0 = FWRO + 0x6700, | |
| FWPGFDCN0 = FWRO + 0x6780, | |
| FWPMGDCN0 = FWRO + 0x6800, | |
| FWPMYDCN0 = FWRO + 0x6804, | |
| FWPMRDCN0 = FWRO + 0x6808, | |
| FWFRPPCN0 = FWRO + 0x6a00, | |
| FWFRDPCN0 = FWRO + 0x6a04, | |
| FWEIS00 = FWRO + 0x7900, | |
| FWEIE00 = FWRO + 0x7904, | |
| FWEID00 = FWRO + 0x7908, | |
| FWEIS1 = FWRO + 0x7a00, | |
| FWEIE1 = FWRO + 0x7a04, | |
| FWEID1 = FWRO + 0x7a08, | |
| FWEIS2 = FWRO + 0x7a10, | |
| FWEIE2 = FWRO + 0x7a14, | |
| FWEID2 = FWRO + 0x7a18, | |
| FWEIS3 = FWRO + 0x7a20, | |
| FWEIE3 = FWRO + 0x7a24, | |
| FWEID3 = FWRO + 0x7a28, | |
| FWEIS4 = FWRO + 0x7a30, | |
| FWEIE4 = FWRO + 0x7a34, | |
| FWEID4 = FWRO + 0x7a38, | |
| FWEIS5 = FWRO + 0x7a40, | |
| FWEIE5 = FWRO + 0x7a44, | |
| FWEID5 = FWRO + 0x7a48, | |
| FWEIS60 = FWRO + 0x7a50, | |
| FWEIE60 = FWRO + 0x7a54, | |
| FWEID60 = FWRO + 0x7a58, | |
| FWEIS61 = FWRO + 0x7a60, | |
| FWEIE61 = FWRO + 0x7a64, | |
| FWEID61 = FWRO + 0x7a68, | |
| FWEIS62 = FWRO + 0x7a70, | |
| FWEIE62 = FWRO + 0x7a74, | |
| FWEID62 = FWRO + 0x7a78, | |
| FWEIS63 = FWRO + 0x7a80, | |
| FWEIE63 = FWRO + 0x7a84, | |
| FWEID63 = FWRO + 0x7a88, | |
| FWEIS70 = FWRO + 0x7a90, | |
| FWEIE70 = FWRO + 0x7A94, | |
| FWEID70 = FWRO + 0x7a98, | |
| FWEIS71 = FWRO + 0x7aa0, | |
| FWEIE71 = FWRO + 0x7aa4, | |
| FWEID71 = FWRO + 0x7aa8, | |
| FWEIS72 = FWRO + 0x7ab0, | |
| FWEIE72 = FWRO + 0x7ab4, | |
| FWEID72 = FWRO + 0x7ab8, | |
| FWEIS73 = FWRO + 0x7ac0, | |
| FWEIE73 = FWRO + 0x7ac4, | |
| FWEID73 = FWRO + 0x7ac8, | |
| FWEIS80 = FWRO + 0x7ad0, | |
| FWEIE80 = FWRO + 0x7ad4, | |
| FWEID80 = FWRO + 0x7ad8, | |
| FWEIS81 = FWRO + 0x7ae0, | |
| FWEIE81 = FWRO + 0x7ae4, | |
| FWEID81 = FWRO + 0x7ae8, | |
| FWEIS82 = FWRO + 0x7af0, | |
| FWEIE82 = FWRO + 0x7af4, | |
| FWEID82 = FWRO + 0x7af8, | |
| FWEIS83 = FWRO + 0x7b00, | |
| FWEIE83 = FWRO + 0x7b04, | |
| FWEID83 = FWRO + 0x7b08, | |
| FWMIS0 = FWRO + 0x7c00, | |
| FWMIE0 = FWRO + 0x7c04, | |
| FWMID0 = FWRO + 0x7c08, | |
| FWSCR0 = FWRO + 0x7d00, | |
| FWSCR1 = FWRO + 0x7d04, | |
| FWSCR2 = FWRO + 0x7d08, | |
| FWSCR3 = FWRO + 0x7d0c, | |
| FWSCR4 = FWRO + 0x7d10, | |
| FWSCR5 = FWRO + 0x7d14, | |
| FWSCR6 = FWRO + 0x7d18, | |
| FWSCR7 = FWRO + 0x7d1c, | |
| FWSCR8 = FWRO + 0x7d20, | |
| FWSCR9 = FWRO + 0x7d24, | |
| FWSCR10 = FWRO + 0x7d28, | |
| FWSCR11 = FWRO + 0x7d2c, | |
| FWSCR12 = FWRO + 0x7d30, | |
| FWSCR13 = FWRO + 0x7d34, | |
| FWSCR14 = FWRO + 0x7d38, | |
| FWSCR15 = FWRO + 0x7d3c, | |
| FWSCR16 = FWRO + 0x7d40, | |
| FWSCR17 = FWRO + 0x7d44, | |
| FWSCR18 = FWRO + 0x7d48, | |
| FWSCR19 = FWRO + 0x7d4c, | |
| FWSCR20 = FWRO + 0x7d50, | |
| FWSCR21 = FWRO + 0x7d54, | |
| FWSCR22 = FWRO + 0x7d58, | |
| FWSCR23 = FWRO + 0x7d5c, | |
| FWSCR24 = FWRO + 0x7d60, | |
| FWSCR25 = FWRO + 0x7d64, | |
| FWSCR26 = FWRO + 0x7d68, | |
| FWSCR27 = FWRO + 0x7d6c, | |
| FWSCR28 = FWRO + 0x7d70, | |
| FWSCR29 = FWRO + 0x7d74, | |
| FWSCR30 = FWRO + 0x7d78, | |
| FWSCR31 = FWRO + 0x7d7c, | |
| FWSCR32 = FWRO + 0x7d80, | |
| FWSCR33 = FWRO + 0x7d84, | |
| FWSCR34 = FWRO + 0x7d88, | |
| FWSCR35 = FWRO + 0x7d8c, | |
| FWSCR36 = FWRO + 0x7d90, | |
| FWSCR37 = FWRO + 0x7d94, | |
| FWSCR38 = FWRO + 0x7d98, | |
| FWSCR39 = FWRO + 0x7d9c, | |
| FWSCR40 = FWRO + 0x7da0, | |
| FWSCR41 = FWRO + 0x7da4, | |
| FWSCR42 = FWRO + 0x7da8, | |
| FWSCR43 = FWRO + 0x7dac, | |
| FWSCR44 = FWRO + 0x7db0, | |
| FWSCR45 = FWRO + 0x7db4, | |
| FWSCR46 = FWRO + 0x7db8, | |
| TPEMIMC0 = TPRO + 0x0000, | |
| TPEMIMC1 = TPRO + 0x0004, | |
| TPEMIMC2 = TPRO + 0x0008, | |
| TPEMIMC3 = TPRO + 0x000c, | |
| TPEMIMC4 = TPRO + 0x0010, | |
| TPEMIMC5 = TPRO + 0x0014, | |
| TPEMIMC60 = TPRO + 0x0080, | |
| TPEMIMC70 = TPRO + 0x0100, | |
| TSIM = TPRO + 0x0700, | |
| TFIM = TPRO + 0x0704, | |
| TCIM = TPRO + 0x0708, | |
| TGIM0 = TPRO + 0x0710, | |
| TGIM1 = TPRO + 0x0714, | |
| TEIM0 = TPRO + 0x0720, | |
| TEIM1 = TPRO + 0x0724, | |
| TEIM2 = TPRO + 0x0728, | |
| RIPV = CARO + 0x0000, | |
| RRC = CARO + 0x0004, | |
| RCEC = CARO + 0x0008, | |
| RCDC = CARO + 0x000c, | |
| RSSIS = CARO + 0x0010, | |
| RSSIE = CARO + 0x0014, | |
| RSSID = CARO + 0x0018, | |
| CABPIBWMC = CARO + 0x0020, | |
| CABPWMLC = CARO + 0x0040, | |
| CABPPFLC0 = CARO + 0x0050, | |
| CABPPWMLC0 = CARO + 0x0060, | |
| CABPPPFLC00 = CARO + 0x00a0, | |
| CABPULC = CARO + 0x0100, | |
| CABPIRM = CARO + 0x0140, | |
| CABPPCM = CARO + 0x0144, | |
| CABPLCM = CARO + 0x0148, | |
| CABPCPM = CARO + 0x0180, | |
| CABPMCPM = CARO + 0x0200, | |
| CARDNM = CARO + 0x0280, | |
| CARDMNM = CARO + 0x0284, | |
| CARDCN = CARO + 0x0290, | |
| CAEIS0 = CARO + 0x0300, | |
| CAEIE0 = CARO + 0x0304, | |
| CAEID0 = CARO + 0x0308, | |
| CAEIS1 = CARO + 0x0310, | |
| CAEIE1 = CARO + 0x0314, | |
| CAEID1 = CARO + 0x0318, | |
| CAMIS0 = CARO + 0x0340, | |
| CAMIE0 = CARO + 0x0344, | |
| CAMID0 = CARO + 0x0348, | |
| CAMIS1 = CARO + 0x0350, | |
| CAMIE1 = CARO + 0x0354, | |
| CAMID1 = CARO + 0x0358, | |
| CASCR = CARO + 0x0380, | |
| EAMC = TARO + 0x0000, | |
| EAMS = TARO + 0x0004, | |
| EAIRC = TARO + 0x0010, | |
| EATDQSC = TARO + 0x0014, | |
| EATDQC = TARO + 0x0018, | |
| EATDQAC = TARO + 0x001c, | |
| EATPEC = TARO + 0x0020, | |
| EATMFSC0 = TARO + 0x0040, | |
| EATDQDC0 = TARO + 0x0060, | |
| EATDQM0 = TARO + 0x0080, | |
| EATDQMLM0 = TARO + 0x00a0, | |
| EACTQC = TARO + 0x0100, | |
| EACTDQDC = TARO + 0x0104, | |
| EACTDQM = TARO + 0x0108, | |
| EACTDQMLM = TARO + 0x010c, | |
| EAVCC = TARO + 0x0130, | |
| EAVTC = TARO + 0x0134, | |
| EATTFC = TARO + 0x0138, | |
| EACAEC = TARO + 0x0200, | |
| EACC = TARO + 0x0204, | |
| EACAIVC0 = TARO + 0x0220, | |
| EACAULC0 = TARO + 0x0240, | |
| EACOEM = TARO + 0x0260, | |
| EACOIVM0 = TARO + 0x0280, | |
| EACOULM0 = TARO + 0x02a0, | |
| EACGSM = TARO + 0x02c0, | |
| EATASC = TARO + 0x0300, | |
| EATASENC0 = TARO + 0x0320, | |
| EATASCTENC = TARO + 0x0340, | |
| EATASENM0 = TARO + 0x0360, | |
| EATASCTENM = TARO + 0x0380, | |
| EATASCSTC0 = TARO + 0x03a0, | |
| EATASCSTC1 = TARO + 0x03a4, | |
| EATASCSTM0 = TARO + 0x03a8, | |
| EATASCSTM1 = TARO + 0x03ac, | |
| EATASCTC = TARO + 0x03b0, | |
| EATASCTM = TARO + 0x03b4, | |
| EATASGL0 = TARO + 0x03c0, | |
| EATASGL1 = TARO + 0x03c4, | |
| EATASGLR = TARO + 0x03c8, | |
| EATASGR = TARO + 0x03d0, | |
| EATASGRR = TARO + 0x03d4, | |
| EATASHCC = TARO + 0x03e0, | |
| EATASRIRM = TARO + 0x03e4, | |
| EATASSM = TARO + 0x03e8, | |
| EAUSMFSECN = TARO + 0x0400, | |
| EATFECN = TARO + 0x0404, | |
| EAFSECN = TARO + 0x0408, | |
| EADQOECN = TARO + 0x040c, | |
| EADQSECN = TARO + 0x0410, | |
| EACKSECN = TARO + 0x0414, | |
| EAEIS0 = TARO + 0x0500, | |
| EAEIE0 = TARO + 0x0504, | |
| EAEID0 = TARO + 0x0508, | |
| EAEIS1 = TARO + 0x0510, | |
| EAEIE1 = TARO + 0x0514, | |
| EAEID1 = TARO + 0x0518, | |
| EAEIS2 = TARO + 0x0520, | |
| EAEIE2 = TARO + 0x0524, | |
| EAEID2 = TARO + 0x0528, | |
| EASCR = TARO + 0x0580, | |
| MPSM = RMRO + 0x0000, | |
| MPIC = RMRO + 0x0004, | |
| MPIM = RMRO + 0x0008, | |
| MIOC = RMRO + 0x0010, | |
| MIOM = RMRO + 0x0014, | |
| MXMS = RMRO + 0x0018, | |
| MTFFC = RMRO + 0x0020, | |
| MTPFC = RMRO + 0x0024, | |
| MTPFC2 = RMRO + 0x0028, | |
| MTPFC30 = RMRO + 0x0030, | |
| MTATC0 = RMRO + 0x0050, | |
| MTIM = RMRO + 0x0060, | |
| MRGC = RMRO + 0x0080, | |
| MRMAC0 = RMRO + 0x0084, | |
| MRMAC1 = RMRO + 0x0088, | |
| MRAFC = RMRO + 0x008c, | |
| MRSCE = RMRO + 0x0090, | |
| MRSCP = RMRO + 0x0094, | |
| MRSCC = RMRO + 0x0098, | |
| MRFSCE = RMRO + 0x009c, | |
| MRFSCP = RMRO + 0x00a0, | |
| MTRC = RMRO + 0x00a4, | |
| MRIM = RMRO + 0x00a8, | |
| MRPFM = RMRO + 0x00ac, | |
| MPFC0 = RMRO + 0x0100, | |
| MLVC = RMRO + 0x0180, | |
| MEEEC = RMRO + 0x0184, | |
| MLBC = RMRO + 0x0188, | |
| MXGMIIC = RMRO + 0x0190, | |
| MPCH = RMRO + 0x0194, | |
| MANC = RMRO + 0x0198, | |
| MANM = RMRO + 0x019c, | |
| MPLCA1 = RMRO + 0x01a0, | |
| MPLCA2 = RMRO + 0x01a4, | |
| MPLCA3 = RMRO + 0x01a8, | |
| MPLCA4 = RMRO + 0x01ac, | |
| MPLCAM = RMRO + 0x01b0, | |
| MHDC1 = RMRO + 0x01c0, | |
| MHDC2 = RMRO + 0x01c4, | |
| MEIS = RMRO + 0x0200, | |
| MEIE = RMRO + 0x0204, | |
| MEID = RMRO + 0x0208, | |
| MMIS0 = RMRO + 0x0210, | |
| MMIE0 = RMRO + 0x0214, | |
| MMID0 = RMRO + 0x0218, | |
| MMIS1 = RMRO + 0x0220, | |
| MMIE1 = RMRO + 0x0224, | |
| MMID1 = RMRO + 0x0228, | |
| MMIS2 = RMRO + 0x0230, | |
| MMIE2 = RMRO + 0x0234, | |
| MMID2 = RMRO + 0x0238, | |
| MMPFTCT = RMRO + 0x0300, | |
| MAPFTCT = RMRO + 0x0304, | |
| MPFRCT = RMRO + 0x0308, | |
| MFCICT = RMRO + 0x030c, | |
| MEEECT = RMRO + 0x0310, | |
| MMPCFTCT0 = RMRO + 0x0320, | |
| MAPCFTCT0 = RMRO + 0x0330, | |
| MPCFRCT0 = RMRO + 0x0340, | |
| MHDCC = RMRO + 0x0350, | |
| MROVFC = RMRO + 0x0354, | |
| MRHCRCEC = RMRO + 0x0358, | |
| MRXBCE = RMRO + 0x0400, | |
| MRXBCP = RMRO + 0x0404, | |
| MRGFCE = RMRO + 0x0408, | |
| MRGFCP = RMRO + 0x040c, | |
| MRBFC = RMRO + 0x0410, | |
| MRMFC = RMRO + 0x0414, | |
| MRUFC = RMRO + 0x0418, | |
| MRPEFC = RMRO + 0x041c, | |
| MRNEFC = RMRO + 0x0420, | |
| MRFMEFC = RMRO + 0x0424, | |
| MRFFMEFC = RMRO + 0x0428, | |
| MRCFCEFC = RMRO + 0x042c, | |
| MRFCEFC = RMRO + 0x0430, | |
| MRRCFEFC = RMRO + 0x0434, | |
| MRUEFC = RMRO + 0x043c, | |
| MROEFC = RMRO + 0x0440, | |
| MRBOEC = RMRO + 0x0444, | |
| MTXBCE = RMRO + 0x0500, | |
| MTXBCP = RMRO + 0x0504, | |
| MTGFCE = RMRO + 0x0508, | |
| MTGFCP = RMRO + 0x050c, | |
| MTBFC = RMRO + 0x0510, | |
| MTMFC = RMRO + 0x0514, | |
| MTUFC = RMRO + 0x0518, | |
| MTEFC = RMRO + 0x051c, | |
| GWMC = GWRO + 0x0000, | |
| GWMS = GWRO + 0x0004, | |
| GWIRC = GWRO + 0x0010, | |
| GWRDQSC = GWRO + 0x0014, | |
| GWRDQC = GWRO + 0x0018, | |
| GWRDQAC = GWRO + 0x001c, | |
| GWRGC = GWRO + 0x0020, | |
| GWRMFSC0 = GWRO + 0x0040, | |
| GWRDQDC0 = GWRO + 0x0060, | |
| GWRDQM0 = GWRO + 0x0080, | |
| GWRDQMLM0 = GWRO + 0x00a0, | |
| GWMTIRM = GWRO + 0x0100, | |
| GWMSTLS = GWRO + 0x0104, | |
| GWMSTLR = GWRO + 0x0108, | |
| GWMSTSS = GWRO + 0x010c, | |
| GWMSTSR = GWRO + 0x0110, | |
| GWMAC0 = GWRO + 0x0120, | |
| GWMAC1 = GWRO + 0x0124, | |
| GWVCC = GWRO + 0x0130, | |
| GWVTC = GWRO + 0x0134, | |
| GWTTFC = GWRO + 0x0138, | |
| GWTDCAC00 = GWRO + 0x0140, | |
| GWTDCAC10 = GWRO + 0x0144, | |
| GWTSDCC0 = GWRO + 0x0160, | |
| GWTNM = GWRO + 0x0180, | |
| GWTMNM = GWRO + 0x0184, | |
| GWAC = GWRO + 0x0190, | |
| GWDCBAC0 = GWRO + 0x0194, | |
| GWDCBAC1 = GWRO + 0x0198, | |
| GWIICBSC = GWRO + 0x019c, | |
| GWMDNC = GWRO + 0x01a0, | |
| GWTRC0 = GWRO + 0x0200, | |
| GWTPC0 = GWRO + 0x0300, | |
| GWARIRM = GWRO + 0x0380, | |
| GWDCC0 = GWRO + 0x0400, | |
| GWAARSS = GWRO + 0x0800, | |
| GWAARSR0 = GWRO + 0x0804, | |
| GWAARSR1 = GWRO + 0x0808, | |
| GWIDAUAS0 = GWRO + 0x0840, | |
| GWIDASM0 = GWRO + 0x0880, | |
| GWIDASAM00 = GWRO + 0x0900, | |
| GWIDASAM10 = GWRO + 0x0904, | |
| GWIDACAM00 = GWRO + 0x0980, | |
| GWIDACAM10 = GWRO + 0x0984, | |
| GWGRLC = GWRO + 0x0a00, | |
| GWGRLULC = GWRO + 0x0a04, | |
| GWRLIVC0 = GWRO + 0x0a80, | |
| GWRLULC0 = GWRO + 0x0a84, | |
| GWIDPC = GWRO + 0x0b00, | |
| GWIDC0 = GWRO + 0x0c00, | |
| GWDIS0 = GWRO + 0x1100, | |
| GWDIE0 = GWRO + 0x1104, | |
| GWDID0 = GWRO + 0x1108, | |
| GWTSDIS = GWRO + 0x1180, | |
| GWTSDIE = GWRO + 0x1184, | |
| GWTSDID = GWRO + 0x1188, | |
| GWEIS0 = GWRO + 0x1190, | |
| GWEIE0 = GWRO + 0x1194, | |
| GWEID0 = GWRO + 0x1198, | |
| GWEIS1 = GWRO + 0x11a0, | |
| GWEIE1 = GWRO + 0x11a4, | |
| GWEID1 = GWRO + 0x11a8, | |
| GWEIS20 = GWRO + 0x1200, | |
| GWEIE20 = GWRO + 0x1204, | |
| GWEID20 = GWRO + 0x1208, | |
| GWEIS3 = GWRO + 0x1280, | |
| GWEIE3 = GWRO + 0x1284, | |
| GWEID3 = GWRO + 0x1288, | |
| GWEIS4 = GWRO + 0x1290, | |
| GWEIE4 = GWRO + 0x1294, | |
| GWEID4 = GWRO + 0x1298, | |
| GWEIS5 = GWRO + 0x12a0, | |
| GWEIE5 = GWRO + 0x12a4, | |
| GWEID5 = GWRO + 0x12a8, | |
| GWSCR0 = GWRO + 0x1800, | |
| GWSCR1 = GWRO + 0x1900, | |
| }; | |
| /* ETHA/RMAC */ | |
| enum rswitch_etha_mode { | |
| EAMC_OPC_RESET, | |
| EAMC_OPC_DISABLE, | |
| EAMC_OPC_CONFIG, | |
| EAMC_OPC_OPERATION, | |
| }; | |
| #define EAMS_OPS_MASK EAMC_OPC_OPERATION | |
| #define EAVCC_VEM_SC_TAG (0x3 << 16) | |
| #define MPIC_PIS GENMASK(2, 0) | |
| #define MPIC_PIS_GMII 2 | |
| #define MPIC_PIS_XGMII 4 | |
| #define MPIC_LSC GENMASK(5, 3) | |
| #define MPIC_LSC_100M 1 | |
| #define MPIC_LSC_1G 2 | |
| #define MPIC_LSC_2_5G 3 | |
| #define MPIC_PSMCS GENMASK(22, 16) | |
| #define MPIC_PSMHT GENMASK(26, 24) | |
| #define MPSM_PSME BIT(0) | |
| #define MPSM_MFF BIT(2) | |
| #define MPSM_MMF_C22 0 | |
| #define MPSM_MMF_C45 1 | |
| #define MPSM_PDA GENMASK(7, 3) | |
| #define MPSM_PRA GENMASK(12, 8) | |
| #define MPSM_POP GENMASK(14, 13) | |
| #define MPSM_POP_ADDRESS 0 | |
| #define MPSM_POP_WRITE 1 | |
| #define MPSM_POP_READ_C22 2 | |
| #define MPSM_POP_READ_C45 3 | |
| #define MPSM_PRD GENMASK(31, 16) | |
| #define MLVC_PLV BIT(16) | |
| /* GWCA */ | |
| enum rswitch_gwca_mode { | |
| GWMC_OPC_RESET, | |
| GWMC_OPC_DISABLE, | |
| GWMC_OPC_CONFIG, | |
| GWMC_OPC_OPERATION, | |
| }; | |
| #define GWMS_OPS_MASK GWMC_OPC_OPERATION | |
| #define GWMTIRM_MTIOG BIT(0) | |
| #define GWMTIRM_MTR BIT(1) | |
| #define GWVCC_VEM_SC_TAG (0x3 << 16) | |
| #define GWARIRM_ARIOG BIT(0) | |
| #define GWARIRM_ARR BIT(1) | |
| #define GWMDNC_TSDMN(num) (((num) << 16) & GENMASK(17, 16)) | |
| #define GWMDNC_TXDMN(num) (((num) << 8) & GENMASK(12, 8)) | |
| #define GWMDNC_RXDMN(num) ((num) & GENMASK(4, 0)) | |
| #define GWDCC_BALR BIT(24) | |
| #define GWDCC_DCP_MASK GENMASK(18, 16) | |
| #define GWDCC_DCP(prio) FIELD_PREP(GWDCC_DCP_MASK, (prio)) | |
| #define GWDCC_DQT BIT(11) | |
| #define GWDCC_ETS BIT(9) | |
| #define GWDCC_EDE BIT(8) | |
| #define GWTRC(queue) (GWTRC0 + (queue) / 32 * 4) | |
| #define GWTPC_PPPL(ipv) BIT(ipv) | |
| #define GWDCC_OFFS(queue) (GWDCC0 + (queue) * 4) | |
| #define GWDIS(i) (GWDIS0 + (i) * 0x10) | |
| #define GWDIE(i) (GWDIE0 + (i) * 0x10) | |
| #define GWDID(i) (GWDID0 + (i) * 0x10) | |
| /* COMA */ | |
| #define RRC_RR BIT(0) | |
| #define RRC_RR_CLR 0 | |
| #define RCEC_ACE_DEFAULT (BIT(0) | BIT(AGENT_INDEX_GWCA)) | |
| #define RCEC_RCE BIT(16) | |
| #define RCDC_RCD BIT(16) | |
| #define CABPIRM_BPIOG BIT(0) | |
| #define CABPIRM_BPR BIT(1) | |
| #define CABPPFLC_INIT_VALUE 0x00800080 | |
| /* MFWD */ | |
| #define FWPC0(i) (FWPC00 + (i) * 0x10) | |
| #define FWPC0_LTHTA BIT(0) | |
| #define FWPC0_IP4UE BIT(3) | |
| #define FWPC0_IP4TE BIT(4) | |
| #define FWPC0_IP4OE BIT(5) | |
| #define FWPC0_L2SE BIT(9) | |
| #define FWPC0_IP4EA BIT(10) | |
| #define FWPC0_IPDSA BIT(12) | |
| #define FWPC0_IPHLA BIT(18) | |
| #define FWPC0_MACDSA BIT(20) | |
| #define FWPC0_MACSSA BIT(23) | |
| #define FWPC0_MACHLA BIT(26) | |
| #define FWPC0_MACHMA BIT(27) | |
| #define FWPC0_VLANSA BIT(28) | |
| #define FWPC1(i) (FWPC10 + (i) * 0x10) | |
| #define FWCP1_LTHFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16) | |
| #define FWPC1_DDE BIT(0) | |
| #define FWPC2(i) (FWPC20 + (i) * 0x10) | |
| #define FWCP2_LTWFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16) | |
| #define FWCP2_LTWFW_MASK GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16) | |
| #define FWPBFC(i) (FWPBFC0 + (i) * 0x10) | |
| #define FWPBFC_PBDV GENMASK(RSWITCH_NUM_AGENTS - 1, 0) | |
| #define FWPBFCSDC(j, i) (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04) | |
| #define FWMACHEC_MACHMUE_MASK GENMASK(26, 16) | |
| #define FWMACTIM_MACTIOG BIT(0) | |
| #define FWMACTIM_MACTR BIT(1) | |
| #define FWMACAGUSPC_MACAGUSP GENMASK(9, 0) | |
| #define FWMACAGC_MACAGT GENMASK(15, 0) | |
| #define FWMACAGC_MACAGE BIT(16) | |
| #define FWMACAGC_MACAGSL BIT(17) | |
| #define FWMACAGC_MACAGPM BIT(18) | |
| #define FWMACAGC_MACDES BIT(24) | |
| #define FWMACAGC_MACAGOG BIT(28) | |
| #define FWMACAGC_MACDESOG BIT(29) | |
| #define RSW_AGEING_CLK_PER_US 0x140 | |
| #define RSW_AGEING_TIME 300 | |
| /* TOP */ | |
| #define TPEMIMC7(queue) (TPEMIMC70 + (queue) * 4) | |
| /* Descriptors */ | |
| enum RX_DS_CC_BIT { | |
| RX_DS = 0x0fff, /* Data size */ | |
| RX_TR = 0x1000, /* Truncation indication */ | |
| RX_EI = 0x2000, /* Error indication */ | |
| RX_PS = 0xc000, /* Padding selection */ | |
| }; | |
| enum TX_DS_TAGL_BIT { | |
| TX_DS = 0x0fff, /* Data size */ | |
| TX_TAGL = 0xf000, /* Frame tag LSBs */ | |
| }; | |
| enum DIE_DT { | |
| /* Frame data */ | |
| DT_FSINGLE = 0x80, | |
| DT_FSTART = 0x90, | |
| DT_FMID = 0xa0, | |
| DT_FEND = 0xb0, | |
| /* Chain control */ | |
| DT_LEMPTY = 0xc0, | |
| DT_EEMPTY = 0xd0, | |
| DT_LINKFIX = 0x00, | |
| DT_LINK = 0xe0, | |
| DT_EOS = 0xf0, | |
| /* HW/SW arbitration */ | |
| DT_FEMPTY = 0x40, | |
| DT_FEMPTY_IS = 0x10, | |
| DT_FEMPTY_IC = 0x20, | |
| DT_FEMPTY_ND = 0x30, | |
| DT_FEMPTY_START = 0x50, | |
| DT_FEMPTY_MID = 0x60, | |
| DT_FEMPTY_END = 0x70, | |
| DT_MASK = 0xf0, | |
| DIE = 0x08, /* Descriptor Interrupt Enable */ | |
| }; | |
| /* Both transmission and reception */ | |
| #define INFO1_FMT BIT(2) | |
| #define INFO1_TXC BIT(3) | |
| /* For transmission */ | |
| #define INFO1_TSUN(val) ((u64)(val) << 8ULL) | |
| #define INFO1_IPV(prio) ((u64)(prio) << 28ULL) | |
| #define INFO1_CSD0(index) ((u64)(index) << 32ULL) | |
| #define INFO1_CSD1(index) ((u64)(index) << 40ULL) | |
| #define INFO1_DV(port_vector) ((u64)(port_vector) << 48ULL) | |
| /* For reception */ | |
| #define INFO1_SPN(port) ((u64)(port) << 36ULL) | |
| /* For timestamp descriptor in dptrl (Byte 4 to 7) */ | |
| #define TS_DESC_TSUN(dptrl) ((dptrl) & GENMASK(7, 0)) | |
| #define TS_DESC_SPN(dptrl) (((dptrl) & GENMASK(10, 8)) >> 8) | |
| #define TS_DESC_DPN(dptrl) (((dptrl) & GENMASK(17, 16)) >> 16) | |
| #define TS_DESC_TN(dptrl) ((dptrl) & BIT(24)) | |
| struct rswitch_desc { | |
| __le16 info_ds; /* Descriptor size */ | |
| u8 die_dt; /* Descriptor interrupt enable and type */ | |
| __u8 dptrh; /* Descriptor pointer MSB */ | |
| __le32 dptrl; /* Descriptor pointer LSW */ | |
| } __packed; | |
| struct rswitch_ts_desc { | |
| struct rswitch_desc desc; | |
| __le32 ts_nsec; | |
| __le32 ts_sec; | |
| } __packed; | |
| struct rswitch_ext_desc { | |
| struct rswitch_desc desc; | |
| __le64 info1; | |
| } __packed; | |
| struct rswitch_ext_ts_desc { | |
| struct rswitch_desc desc; | |
| __le64 info1; | |
| __le32 ts_nsec; | |
| __le32 ts_sec; | |
| } __packed; | |
| struct rswitch_etha { | |
| unsigned int index; | |
| void __iomem *addr; | |
| void __iomem *coma_addr; | |
| bool external_phy; | |
| struct mii_bus *mii; | |
| phy_interface_t phy_interface; | |
| u32 psmcs; | |
| u8 mac_addr[MAX_ADDR_LEN]; | |
| int link; | |
| int speed; | |
| /* This hardware could not be initialized twice so that marked | |
| * this flag to avoid multiple initialization. | |
| */ | |
| bool operated; | |
| }; | |
| /* The datasheet said descriptor "chain" and/or "queue". For consistency of | |
| * name, this driver calls "queue". | |
| */ | |
| struct rswitch_gwca_queue { | |
| union { | |
| struct rswitch_ext_desc *tx_ring; | |
| struct rswitch_ext_ts_desc *rx_ring; | |
| struct rswitch_ts_desc *ts_ring; | |
| }; | |
| /* Common */ | |
| dma_addr_t ring_dma; | |
| unsigned int ring_size; | |
| unsigned int cur; | |
| unsigned int dirty; | |
| /* For [rt]x_ring */ | |
| unsigned int index; | |
| bool dir_tx; | |
| struct net_device *ndev; /* queue to ndev for irq */ | |
| union { | |
| /* For TX */ | |
| struct { | |
| struct sk_buff **skbs; | |
| dma_addr_t *unmap_addrs; | |
| }; | |
| /* For RX */ | |
| struct { | |
| void **rx_bufs; | |
| struct sk_buff *skb_fstart; | |
| u16 pkt_len; | |
| }; | |
| }; | |
| }; | |
| #define RSWITCH_NUM_IRQ_REGS (RSWITCH_MAX_NUM_QUEUES / BITS_PER_TYPE(u32)) | |
| struct rswitch_gwca { | |
| unsigned int index; | |
| struct rswitch_desc *linkfix_table; | |
| dma_addr_t linkfix_table_dma; | |
| u32 linkfix_table_size; | |
| struct rswitch_gwca_queue *queues; | |
| int num_queues; | |
| struct rswitch_gwca_queue ts_queue; | |
| DECLARE_BITMAP(used, RSWITCH_MAX_NUM_QUEUES); | |
| u32 tx_irq_bits[RSWITCH_NUM_IRQ_REGS]; | |
| u32 rx_irq_bits[RSWITCH_NUM_IRQ_REGS]; | |
| }; | |
| #define NUM_QUEUES_PER_NDEV 2 | |
| #define TS_TAGS_PER_PORT 256 | |
| struct rswitch_device { | |
| struct rswitch_private *priv; | |
| struct net_device *ndev; | |
| struct napi_struct napi; | |
| void __iomem *addr; | |
| struct rswitch_gwca_queue *tx_queue; | |
| struct rswitch_gwca_queue *rx_queue; | |
| struct sk_buff *ts_skb[TS_TAGS_PER_PORT]; | |
| DECLARE_BITMAP(ts_skb_used, TS_TAGS_PER_PORT); | |
| bool disabled; | |
| struct list_head list; | |
| int port; | |
| struct rswitch_etha *etha; | |
| struct device_node *np_port; | |
| struct phy *serdes; | |
| struct net_device *brdev; /* master bridge device */ | |
| unsigned int learning_requested : 1; | |
| unsigned int learning_offloaded : 1; | |
| unsigned int forwarding_requested : 1; | |
| unsigned int forwarding_offloaded : 1; | |
| }; | |
| struct rswitch_mfwd_mac_table_entry { | |
| int queue_index; | |
| unsigned char addr[MAX_ADDR_LEN]; | |
| }; | |
| struct rswitch_mfwd { | |
| struct rswitch_mac_table_entry *mac_table_entries; | |
| int num_mac_table_entries; | |
| }; | |
| struct rswitch_private { | |
| struct platform_device *pdev; | |
| void __iomem *addr; | |
| struct rcar_gen4_ptp_private *ptp_priv; | |
| struct rswitch_device *rdev[RSWITCH_NUM_PORTS]; | |
| DECLARE_BITMAP(opened_ports, RSWITCH_NUM_PORTS); | |
| struct rswitch_gwca gwca; | |
| struct rswitch_etha etha[RSWITCH_NUM_PORTS]; | |
| struct rswitch_mfwd mfwd; | |
| struct list_head port_list; | |
| spinlock_t lock; /* lock interrupt registers' control */ | |
| struct clk *clk; | |
| bool etha_no_runtime_change; | |
| bool gwca_halt; | |
| struct net_device *offload_brdev; | |
| enum hwtstamp_tx_types tstamp_tx_ctrl; | |
| enum hwtstamp_rx_filters tstamp_rx_ctrl; | |
| }; | |
| bool is_rdev(const struct net_device *ndev); | |
| void rswitch_modify(void __iomem *addr, enum rswitch_reg reg, u32 clear, u32 set); | |
| #endif /* #ifndef __RSWITCH_H__ */ |