Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'octeontx2-af-kpu'

Kiran Kumar K says:

====================
adding KPU profile changes for GTPU and custom

Adding changes to limit the KPU processing for GTPU headers to parse
packet up to L4 and added changes to variable length headers to parse LA
as part of PKIND action.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+197 -342
+19 -1
drivers/net/ethernet/marvell/octeontx2/af/mbox.h
··· 84 84 #define OTX2_MBOX_REQ_SIG (0xdead) 85 85 #define OTX2_MBOX_RSP_SIG (0xbeef) 86 86 u16 sig; /* Signature, for validating corrupted msgs */ 87 - #define OTX2_MBOX_VERSION (0x0009) 87 + #define OTX2_MBOX_VERSION (0x000a) 88 88 u16 ver; /* Version of msg's structure for this ID */ 89 89 u16 next_msgoff; /* Offset of next msg within mailbox region */ 90 90 int rc; /* Msg process'ed response code */ ··· 231 231 M(NPC_MCAM_READ_ENTRY, 0x600f, npc_mcam_read_entry, \ 232 232 npc_mcam_read_entry_req, \ 233 233 npc_mcam_read_entry_rsp) \ 234 + M(NPC_SET_PKIND, 0x6010, npc_set_pkind, \ 235 + npc_set_pkind, msg_rsp) \ 234 236 M(NPC_MCAM_READ_BASE_RULE, 0x6011, npc_read_base_steer_rule, \ 235 237 msg_req, npc_mcam_read_base_rule_rsp) \ 236 238 M(NPC_MCAM_GET_STATS, 0x6012, npc_mcam_entry_stats, \ ··· 599 597 #define RPM_TX_STATS_COUNT 34 600 598 u64 rx_stats[RPM_RX_STATS_COUNT]; 601 599 u64 tx_stats[RPM_TX_STATS_COUNT]; 600 + }; 601 + 602 + struct npc_set_pkind { 603 + struct mbox_msghdr hdr; 604 + #define OTX2_PRIV_FLAGS_DEFAULT BIT_ULL(0) 605 + #define OTX2_PRIV_FLAGS_CUSTOM BIT_ULL(63) 606 + u64 mode; 607 + #define PKIND_TX BIT_ULL(0) 608 + #define PKIND_RX BIT_ULL(1) 609 + u8 dir; 610 + u8 pkind; /* valid only in case custom flag */ 611 + u8 var_len_off; /* Offset of custom header length field. 612 + * Valid only for pkind NPC_RX_CUSTOM_PRE_L2_PKIND 613 + */ 614 + u8 var_len_off_mask; /* Mask for length with in offset */ 615 + u8 shift_dir; /* shift direction to get length of the header at var_len_off */ 602 616 }; 603 617 604 618 /* NPA mbox message formats */
+7 -2
drivers/net/ethernet/marvell/octeontx2/af/npc.h
··· 31 31 NPC_LT_LA_HIGIG2_ETHER, 32 32 NPC_LT_LA_IH_NIX_HIGIG2_ETHER, 33 33 NPC_LT_LA_CUSTOM_L2_90B_ETHER, 34 - NPC_LT_LA_CH_LEN_90B_ETHER, 35 34 NPC_LT_LA_CPT_HDR, 36 35 NPC_LT_LA_CUSTOM_L2_24B_ETHER, 36 + NPC_LT_LA_CUSTOM_PRE_L2_ETHER, 37 37 NPC_LT_LA_CUSTOM0 = 0xE, 38 38 NPC_LT_LA_CUSTOM1 = 0xF, 39 39 }; ··· 148 148 * Software assigns pkind for each incoming port such as CGX 149 149 * Ethernet interfaces, LBK interfaces, etc. 150 150 */ 151 - #define NPC_UNRESERVED_PKIND_COUNT NPC_RX_VLAN_EXDSA_PKIND 151 + #define NPC_UNRESERVED_PKIND_COUNT NPC_RX_CUSTOM_PRE_L2_PKIND 152 152 153 153 enum npc_pkind_type { 154 154 NPC_RX_LBK_PKIND = 0ULL, 155 + NPC_RX_CUSTOM_PRE_L2_PKIND = 55ULL, 155 156 NPC_RX_VLAN_EXDSA_PKIND = 56ULL, 156 157 NPC_RX_CHLEN24B_PKIND = 57ULL, 157 158 NPC_RX_CPT_HDR_PKIND, ··· 161 160 NPC_RX_HIGIG_PKIND, 162 161 NPC_RX_EDSA_PKIND, 163 162 NPC_TX_DEF_PKIND, /* NIX-TX PKIND */ 163 + }; 164 + 165 + enum npc_interface_type { 166 + NPC_INTF_MODE_DEF, 164 167 }; 165 168 166 169 /* list of known and supported fields in packet header and
+65 -338
drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h
··· 176 176 NPC_S_KPU1_EXDSA, 177 177 NPC_S_KPU1_HIGIG2, 178 178 NPC_S_KPU1_IH_NIX_HIGIG2, 179 - NPC_S_KPU1_CUSTOM_L2_90B, 179 + NPC_S_KPU1_CUSTOM_PRE_L2, 180 180 NPC_S_KPU1_CPT_HDR, 181 - NPC_S_KPU1_CUSTOM_L2_24B, 182 181 NPC_S_KPU1_VLAN_EXDSA, 183 182 NPC_S_KPU2_CTAG, 184 183 NPC_S_KPU2_CTAG2, ··· 978 979 { 979 980 NPC_ERRLEV_RE, NPC_EC_NOERR, 980 981 12, 16, 20, 0, 0, 981 - NPC_S_KPU1_ETHER, 0, 0, 982 - NPC_LID_LA, NPC_LT_NA, 982 + NPC_S_KPU1_CUSTOM_PRE_L2, 0, 1, 983 + NPC_LID_LA, NPC_LT_LA_CUSTOM_PRE_L2_ETHER, 983 984 0, 984 985 0, 0, 0, 0, 985 986 ··· 995 996 }, 996 997 { 997 998 NPC_ERRLEV_RE, NPC_EC_NOERR, 998 - 36, 40, 44, 0, 0, 999 - NPC_S_KPU1_CUSTOM_L2_24B, 0, 0, 1000 - NPC_LID_LA, NPC_LT_NA, 999 + 12, 16, 20, 0, 0, 1000 + NPC_S_KPU1_CUSTOM_PRE_L2, 24, 1, 1001 + NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 1001 1002 0, 1002 1003 0, 0, 0, 0, 1003 1004 ··· 1013 1014 }, 1014 1015 { 1015 1016 NPC_ERRLEV_RE, NPC_EC_NOERR, 1016 - 102, 106, 110, 0, 0, 1017 - NPC_S_KPU1_CUSTOM_L2_90B, 0, 0, 1018 - NPC_LID_LA, NPC_LT_NA, 1017 + 12, 16, 20, 0, 0, 1018 + NPC_S_KPU1_CUSTOM_PRE_L2, 90, 1, 1019 + NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 1019 1020 0, 1020 1021 0, 0, 0, 0, 1021 1022 ··· 1710 1711 0x0000, 1711 1712 }, 1712 1713 { 1713 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1714 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1714 1715 NPC_ETYPE_IP, 1715 1716 0xffff, 1716 1717 0x0000, ··· 1719 1720 0x0000, 1720 1721 }, 1721 1722 { 1722 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1723 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1723 1724 NPC_ETYPE_IP6, 1724 1725 0xffff, 1725 1726 0x0000, ··· 1728 1729 0x0000, 1729 1730 }, 1730 1731 { 1731 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1732 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1732 1733 NPC_ETYPE_ARP, 1733 1734 0xffff, 1734 1735 0x0000, ··· 1737 1738 0x0000, 1738 1739 }, 1739 1740 { 1740 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1741 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1741 1742 NPC_ETYPE_RARP, 1742 1743 0xffff, 1743 1744 0x0000, ··· 1746 1747 0x0000, 1747 1748 }, 1748 1749 { 1749 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1750 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1750 1751 NPC_ETYPE_PTP, 1751 1752 0xffff, 1752 1753 0x0000, ··· 1755 1756 0x0000, 1756 1757 }, 1757 1758 { 1758 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1759 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1759 1760 NPC_ETYPE_FCOE, 1760 1761 0xffff, 1761 1762 0x0000, ··· 1764 1765 0x0000, 1765 1766 }, 1766 1767 { 1767 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1768 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1768 1769 NPC_ETYPE_CTAG, 1769 1770 0xffff, 1770 1771 NPC_ETYPE_CTAG, ··· 1773 1774 0x0000, 1774 1775 }, 1775 1776 { 1776 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1777 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1777 1778 NPC_ETYPE_CTAG, 1778 1779 0xffff, 1779 1780 0x0000, ··· 1782 1783 0x0000, 1783 1784 }, 1784 1785 { 1785 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1786 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1786 1787 NPC_ETYPE_SBTAG, 1787 1788 0xffff, 1788 1789 0x0000, ··· 1791 1792 0x0000, 1792 1793 }, 1793 1794 { 1794 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1795 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1795 1796 NPC_ETYPE_QINQ, 1796 1797 0xffff, 1797 1798 0x0000, ··· 1800 1801 0x0000, 1801 1802 }, 1802 1803 { 1803 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1804 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1804 1805 NPC_ETYPE_ETAG, 1805 1806 0xffff, 1806 1807 0x0000, ··· 1809 1810 0x0000, 1810 1811 }, 1811 1812 { 1812 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1813 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1813 1814 NPC_ETYPE_MPLSU, 1814 1815 0xffff, 1815 1816 0x0000, ··· 1818 1819 0x0000, 1819 1820 }, 1820 1821 { 1821 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1822 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1822 1823 NPC_ETYPE_MPLSM, 1823 1824 0xffff, 1824 1825 0x0000, ··· 1827 1828 0x0000, 1828 1829 }, 1829 1830 { 1830 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1831 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1831 1832 NPC_ETYPE_NSH, 1832 1833 0xffff, 1833 1834 0x0000, ··· 1836 1837 0x0000, 1837 1838 }, 1838 1839 { 1839 - NPC_S_KPU1_CUSTOM_L2_90B, 0xff, 1840 + NPC_S_KPU1_CUSTOM_PRE_L2, 0xff, 1840 1841 0x0000, 1841 1842 0x0000, 1842 1843 0x0000, ··· 1918 1919 }, 1919 1920 { 1920 1921 NPC_S_KPU1_CPT_HDR, 0xff, 1921 - 0x0000, 1922 - 0x0000, 1923 - 0x0000, 1924 - 0x0000, 1925 - 0x0000, 1926 - 0x0000, 1927 - }, 1928 - { 1929 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1930 - NPC_ETYPE_IP, 1931 - 0xffff, 1932 - 0x0000, 1933 - 0x0000, 1934 - 0x0000, 1935 - 0x0000, 1936 - }, 1937 - { 1938 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1939 - NPC_ETYPE_IP6, 1940 - 0xffff, 1941 - 0x0000, 1942 - 0x0000, 1943 - 0x0000, 1944 - 0x0000, 1945 - }, 1946 - { 1947 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1948 - NPC_ETYPE_ARP, 1949 - 0xffff, 1950 - 0x0000, 1951 - 0x0000, 1952 - 0x0000, 1953 - 0x0000, 1954 - }, 1955 - { 1956 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1957 - NPC_ETYPE_RARP, 1958 - 0xffff, 1959 - 0x0000, 1960 - 0x0000, 1961 - 0x0000, 1962 - 0x0000, 1963 - }, 1964 - { 1965 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1966 - NPC_ETYPE_PTP, 1967 - 0xffff, 1968 - 0x0000, 1969 - 0x0000, 1970 - 0x0000, 1971 - 0x0000, 1972 - }, 1973 - { 1974 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1975 - NPC_ETYPE_FCOE, 1976 - 0xffff, 1977 - 0x0000, 1978 - 0x0000, 1979 - 0x0000, 1980 - 0x0000, 1981 - }, 1982 - { 1983 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1984 - NPC_ETYPE_CTAG, 1985 - 0xffff, 1986 - NPC_ETYPE_CTAG, 1987 - 0xffff, 1988 - 0x0000, 1989 - 0x0000, 1990 - }, 1991 - { 1992 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 1993 - NPC_ETYPE_CTAG, 1994 - 0xffff, 1995 - 0x0000, 1996 - 0x0000, 1997 - 0x0000, 1998 - 0x0000, 1999 - }, 2000 - { 2001 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2002 - NPC_ETYPE_SBTAG, 2003 - 0xffff, 2004 - 0x0000, 2005 - 0x0000, 2006 - 0x0000, 2007 - 0x0000, 2008 - }, 2009 - { 2010 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2011 - NPC_ETYPE_QINQ, 2012 - 0xffff, 2013 - 0x0000, 2014 - 0x0000, 2015 - 0x0000, 2016 - 0x0000, 2017 - }, 2018 - { 2019 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2020 - NPC_ETYPE_ETAG, 2021 - 0xffff, 2022 - 0x0000, 2023 - 0x0000, 2024 - 0x0000, 2025 - 0x0000, 2026 - }, 2027 - { 2028 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2029 - NPC_ETYPE_MPLSU, 2030 - 0xffff, 2031 - 0x0000, 2032 - 0x0000, 2033 - 0x0000, 2034 - 0x0000, 2035 - }, 2036 - { 2037 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2038 - NPC_ETYPE_MPLSM, 2039 - 0xffff, 2040 - 0x0000, 2041 - 0x0000, 2042 - 0x0000, 2043 - 0x0000, 2044 - }, 2045 - { 2046 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2047 - NPC_ETYPE_NSH, 2048 - 0xffff, 2049 - 0x0000, 2050 - 0x0000, 2051 - 0x0000, 2052 - 0x0000, 2053 - }, 2054 - { 2055 - NPC_S_KPU1_CUSTOM_L2_24B, 0xff, 2056 1922 0x0000, 2057 1923 0x0000, 2058 1924 0x0000, ··· 7360 7496 NPC_S_KPU9_GTPU, 0xff, 7361 7497 0x0000, 7362 7498 0x0000, 7363 - NPC_GTP_PT_GTP | NPC_GTP_VER1 | NPC_GTP_MT_G_PDU, 7364 - NPC_GTP_PT_MASK | NPC_GTP_VER_MASK | NPC_GTP_MT_MASK, 7365 - 0x0000, 7366 - 0x0000, 7367 - }, 7368 - { 7369 - NPC_S_KPU9_GTPU, 0xff, 7370 - 0x0000, 7371 - 0x0000, 7372 7499 NPC_GTP_PT_GTP | NPC_GTP_VER1, 7373 7500 NPC_GTP_PT_MASK | NPC_GTP_VER_MASK, 7374 7501 0x0000, ··· 9047 9192 { 9048 9193 NPC_ERRLEV_RE, NPC_EC_NOERR, 9049 9194 8, 0, 6, 3, 0, 9050 - NPC_S_KPU5_IP, 104, 1, 9051 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9195 + NPC_S_KPU5_IP, 14, 0, 9196 + NPC_LID_LA, NPC_LT_NA, 9052 9197 0, 9053 9198 0, 0, 0, 0, 9054 9199 }, 9055 9200 { 9056 9201 NPC_ERRLEV_RE, NPC_EC_NOERR, 9057 9202 6, 0, 0, 3, 0, 9058 - NPC_S_KPU5_IP6, 104, 1, 9059 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9203 + NPC_S_KPU5_IP6, 14, 0, 9204 + NPC_LID_LA, NPC_LT_NA, 9060 9205 0, 9061 9206 0, 0, 0, 0, 9062 9207 }, 9063 9208 { 9064 9209 NPC_ERRLEV_RE, NPC_EC_NOERR, 9065 9210 0, 0, 0, 3, 0, 9066 - NPC_S_KPU5_ARP, 104, 1, 9067 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9211 + NPC_S_KPU5_ARP, 14, 0, 9212 + NPC_LID_LA, NPC_LT_NA, 9068 9213 0, 9069 9214 0, 0, 0, 0, 9070 9215 }, 9071 9216 { 9072 9217 NPC_ERRLEV_RE, NPC_EC_NOERR, 9073 9218 0, 0, 0, 3, 0, 9074 - NPC_S_KPU5_RARP, 104, 1, 9075 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9219 + NPC_S_KPU5_RARP, 14, 0, 9220 + NPC_LID_LA, NPC_LT_NA, 9076 9221 0, 9077 9222 0, 0, 0, 0, 9078 9223 }, 9079 9224 { 9080 9225 NPC_ERRLEV_RE, NPC_EC_NOERR, 9081 9226 0, 0, 0, 3, 0, 9082 - NPC_S_KPU5_PTP, 104, 1, 9083 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9227 + NPC_S_KPU5_PTP, 14, 0, 9228 + NPC_LID_LA, NPC_LT_NA, 9084 9229 0, 9085 9230 0, 0, 0, 0, 9086 9231 }, 9087 9232 { 9088 9233 NPC_ERRLEV_RE, NPC_EC_NOERR, 9089 9234 0, 0, 0, 3, 0, 9090 - NPC_S_KPU5_FCOE, 104, 1, 9091 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9235 + NPC_S_KPU5_FCOE, 14, 0, 9236 + NPC_LID_LA, NPC_LT_NA, 9092 9237 0, 9093 9238 0, 0, 0, 0, 9094 9239 }, 9095 9240 { 9096 9241 NPC_ERRLEV_RE, NPC_EC_NOERR, 9097 9242 8, 12, 0, 0, 0, 9098 - NPC_S_KPU2_CTAG2, 102, 1, 9099 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9100 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9243 + NPC_S_KPU2_CTAG2, 12, 0, 9244 + NPC_LID_LA, NPC_LT_NA, 9245 + 0, 9101 9246 0, 0, 0, 0, 9102 9247 }, 9103 9248 { 9104 9249 NPC_ERRLEV_RE, NPC_EC_NOERR, 9105 9250 4, 8, 0, 0, 0, 9106 - NPC_S_KPU2_CTAG, 102, 1, 9107 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9108 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9251 + NPC_S_KPU2_CTAG, 12, 0, 9252 + NPC_LID_LA, NPC_LT_NA, 9253 + 0, 9109 9254 0, 0, 0, 0, 9110 9255 }, 9111 9256 { 9112 9257 NPC_ERRLEV_RE, NPC_EC_NOERR, 9113 9258 4, 8, 22, 0, 0, 9114 - NPC_S_KPU2_SBTAG, 102, 1, 9115 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9116 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9259 + NPC_S_KPU2_SBTAG, 12, 0, 9260 + NPC_LID_LA, NPC_LT_NA, 9261 + 0, 9117 9262 0, 0, 0, 0, 9118 9263 }, 9119 9264 { 9120 9265 NPC_ERRLEV_RE, NPC_EC_NOERR, 9121 9266 4, 8, 0, 0, 0, 9122 - NPC_S_KPU2_QINQ, 102, 1, 9123 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9124 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9267 + NPC_S_KPU2_QINQ, 12, 0, 9268 + NPC_LID_LA, NPC_LT_NA, 9269 + 0, 9125 9270 0, 0, 0, 0, 9126 9271 }, 9127 9272 { 9128 9273 NPC_ERRLEV_RE, NPC_EC_NOERR, 9129 9274 8, 12, 26, 0, 0, 9130 - NPC_S_KPU2_ETAG, 102, 1, 9131 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9132 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_ETAG, 9275 + NPC_S_KPU2_ETAG, 12, 0, 9276 + NPC_LID_LA, NPC_LT_NA, 9277 + 0, 9133 9278 0, 0, 0, 0, 9134 9279 }, 9135 9280 { 9136 9281 NPC_ERRLEV_RE, NPC_EC_NOERR, 9137 9282 2, 6, 10, 2, 0, 9138 - NPC_S_KPU4_MPLS, 104, 1, 9139 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9140 - NPC_F_LA_L_WITH_MPLS, 9283 + NPC_S_KPU4_MPLS, 14, 0, 9284 + NPC_LID_LA, NPC_LT_NA, 9285 + 0, 9141 9286 0, 0, 0, 0, 9142 9287 }, 9143 9288 { 9144 9289 NPC_ERRLEV_RE, NPC_EC_NOERR, 9145 9290 2, 6, 10, 2, 0, 9146 - NPC_S_KPU4_MPLS, 104, 1, 9147 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9148 - NPC_F_LA_L_WITH_MPLS, 9291 + NPC_S_KPU4_MPLS, 14, 0, 9292 + NPC_LID_LA, NPC_LT_NA, 9293 + 0, 9149 9294 0, 0, 0, 0, 9150 9295 }, 9151 9296 { 9152 9297 NPC_ERRLEV_RE, NPC_EC_NOERR, 9153 9298 2, 0, 0, 2, 0, 9154 - NPC_S_KPU4_NSH, 104, 1, 9155 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9156 - NPC_F_LA_L_WITH_NSH, 9299 + NPC_S_KPU4_NSH, 14, 0, 9300 + NPC_LID_LA, NPC_LT_NA, 9301 + 0, 9157 9302 0, 0, 0, 0, 9158 9303 }, 9159 9304 { 9160 9305 NPC_ERRLEV_RE, NPC_EC_NOERR, 9161 9306 0, 0, 0, 0, 1, 9162 - NPC_S_NA, 0, 1, 9163 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_90B_ETHER, 9164 - NPC_F_LA_L_UNK_ETYPE, 9307 + NPC_S_NA, 0, 0, 9308 + NPC_LID_LA, NPC_LT_NA, 9309 + 0, 9165 9310 0, 0, 0, 0, 9166 9311 }, 9167 9312 { ··· 9233 9378 0, 0, 0, 0, 1, 9234 9379 NPC_S_NA, 0, 1, 9235 9380 NPC_LID_LA, NPC_LT_LA_CPT_HDR, 9236 - NPC_F_LA_L_UNK_ETYPE, 9237 - 0, 0, 0, 0, 9238 - }, 9239 - { 9240 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9241 - 8, 0, 6, 3, 0, 9242 - NPC_S_KPU5_IP, 38, 1, 9243 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9244 - 0, 9245 - 0, 0, 0, 0, 9246 - }, 9247 - { 9248 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9249 - 6, 0, 0, 3, 0, 9250 - NPC_S_KPU5_IP6, 38, 1, 9251 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9252 - 0, 9253 - 0, 0, 0, 0, 9254 - }, 9255 - { 9256 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9257 - 0, 0, 0, 3, 0, 9258 - NPC_S_KPU5_ARP, 38, 1, 9259 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9260 - 0, 9261 - 0, 0, 0, 0, 9262 - }, 9263 - { 9264 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9265 - 0, 0, 0, 3, 0, 9266 - NPC_S_KPU5_RARP, 38, 1, 9267 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9268 - 0, 9269 - 0, 0, 0, 0, 9270 - }, 9271 - { 9272 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9273 - 0, 0, 0, 3, 0, 9274 - NPC_S_KPU5_PTP, 38, 1, 9275 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9276 - 0, 9277 - 0, 0, 0, 0, 9278 - }, 9279 - { 9280 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9281 - 0, 0, 0, 3, 0, 9282 - NPC_S_KPU5_FCOE, 38, 1, 9283 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9284 - 0, 9285 - 0, 0, 0, 0, 9286 - }, 9287 - { 9288 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9289 - 8, 12, 0, 0, 0, 9290 - NPC_S_KPU2_CTAG2, 36, 1, 9291 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9292 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9293 - 0, 0, 0, 0, 9294 - }, 9295 - { 9296 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9297 - 4, 8, 0, 0, 0, 9298 - NPC_S_KPU2_CTAG, 36, 1, 9299 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9300 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9301 - 0, 0, 0, 0, 9302 - }, 9303 - { 9304 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9305 - 4, 8, 22, 0, 0, 9306 - NPC_S_KPU2_SBTAG, 36, 1, 9307 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9308 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9309 - 0, 0, 0, 0, 9310 - }, 9311 - { 9312 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9313 - 4, 8, 0, 0, 0, 9314 - NPC_S_KPU2_QINQ, 36, 1, 9315 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9316 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_VLAN, 9317 - 0, 0, 0, 0, 9318 - }, 9319 - { 9320 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9321 - 8, 12, 26, 0, 0, 9322 - NPC_S_KPU2_ETAG, 36, 1, 9323 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9324 - NPC_F_LA_U_HAS_TAG | NPC_F_LA_L_WITH_ETAG, 9325 - 0, 0, 0, 0, 9326 - }, 9327 - { 9328 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9329 - 2, 6, 10, 2, 0, 9330 - NPC_S_KPU4_MPLS, 38, 1, 9331 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9332 - NPC_F_LA_L_WITH_MPLS, 9333 - 0, 0, 0, 0, 9334 - }, 9335 - { 9336 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9337 - 2, 6, 10, 2, 0, 9338 - NPC_S_KPU4_MPLS, 38, 1, 9339 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9340 - NPC_F_LA_L_WITH_MPLS, 9341 - 0, 0, 0, 0, 9342 - }, 9343 - { 9344 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9345 - 2, 0, 0, 2, 0, 9346 - NPC_S_KPU4_NSH, 38, 1, 9347 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9348 - NPC_F_LA_L_WITH_NSH, 9349 - 0, 0, 0, 0, 9350 - }, 9351 - { 9352 - NPC_ERRLEV_RE, NPC_EC_NOERR, 9353 - 0, 0, 0, 0, 1, 9354 - NPC_S_NA, 0, 1, 9355 - NPC_LID_LA, NPC_LT_LA_CUSTOM_L2_24B_ETHER, 9356 9381 NPC_F_LA_L_UNK_ETYPE, 9357 9382 0, 0, 0, 0, 9358 9383 }, ··· 14070 14335 }, 14071 14336 { 14072 14337 NPC_ERRLEV_RE, NPC_EC_NOERR, 14073 - 8, 0, 6, 2, 0, 14074 - NPC_S_KPU12_TU_IP, 8, 1, 14075 - NPC_LID_LE, NPC_LT_LE_GTPU, 14076 - NPC_F_LE_L_GTPU_G_PDU, 14077 - 0, 0, 0, 0, 14078 - }, 14079 - { 14080 - NPC_ERRLEV_RE, NPC_EC_NOERR, 14081 - 8, 0, 6, 2, 0, 14082 - NPC_S_KPU12_TU_IP, 8, 1, 14338 + 8, 0, 6, 2, 1, 14339 + NPC_S_NA, 0, 1, 14083 14340 NPC_LID_LE, NPC_LT_LE_GTPU, 14084 14341 0, 14085 14342 0, 0, 0, 0,
+5
drivers/net/ethernet/marvell/octeontx2/af/rvu.h
··· 237 237 bool cgx_in_use; /* this PF/VF using CGX? */ 238 238 int cgx_users; /* number of cgx users - used only by PFs */ 239 239 240 + int intf_mode; 240 241 u8 nix_blkaddr; /* BLKADDR_NIX0/1 assigned to this PF */ 241 242 u8 nix_rx_intf; /* NIX0_RX/NIX1_RX interface to NPC */ 242 243 u8 nix_tx_intf; /* NIX0_TX/NIX1_TX interface to NPC */ ··· 797 796 void npc_read_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, 798 797 int blkaddr, u16 src, struct mcam_entry *entry, 799 798 u8 *intf, u8 *ena); 799 + bool is_cgx_config_permitted(struct rvu *rvu, u16 pcifunc); 800 800 bool is_mac_feature_supported(struct rvu *rvu, int pf, int feature); 801 801 u32 rvu_cgx_get_fifolen(struct rvu *rvu); 802 802 void *rvu_first_cgx_pdata(struct rvu *rvu); ··· 831 829 void rvu_switch_disable(struct rvu *rvu); 832 830 void rvu_switch_update_rules(struct rvu *rvu, u16 pcifunc); 833 831 832 + int rvu_npc_set_parse_mode(struct rvu *rvu, u16 pcifunc, u64 mode, u8 dir, 833 + u64 pkind, u8 var_len_off, u8 var_len_off_mask, 834 + u8 shift_dir); 834 835 #endif /* RVU_H */
+1 -1
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
··· 411 411 * VF's of mapped PF and other PFs are not allowed. This fn() checks 412 412 * whether a PFFUNC is permitted to do the config or not. 413 413 */ 414 - static bool is_cgx_config_permitted(struct rvu *rvu, u16 pcifunc) 414 + inline bool is_cgx_config_permitted(struct rvu *rvu, u16 pcifunc) 415 415 { 416 416 if ((pcifunc & RVU_PFVF_FUNC_MASK) || 417 417 !is_pf_cgxmapped(rvu, rvu_get_pf(pcifunc)))
+4
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
··· 4552 4552 dev_err(rvu->dev, "CQ ctx disable failed\n"); 4553 4553 } 4554 4554 4555 + /* reset HW config done for Switch headers */ 4556 + rvu_npc_set_parse_mode(rvu, pcifunc, OTX2_PRIV_FLAGS_DEFAULT, 4557 + (PKIND_TX | PKIND_RX), 0, 0, 0, 0); 4558 + 4555 4559 nix_ctx_free(rvu, pfvf); 4556 4560 4557 4561 nix_free_all_bandprof(rvu, pcifunc);
+96
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c
··· 3167 3167 return 0; 3168 3168 } 3169 3169 3170 + int 3171 + npc_set_var_len_offset_pkind(struct rvu *rvu, u16 pcifunc, u64 pkind, 3172 + u8 var_len_off, u8 var_len_off_mask, u8 shift_dir) 3173 + { 3174 + struct npc_kpu_action0 *act0; 3175 + u8 shift_count = 0; 3176 + int blkaddr; 3177 + u64 val; 3178 + 3179 + if (!var_len_off_mask) 3180 + return -EINVAL; 3181 + 3182 + if (var_len_off_mask != 0xff) { 3183 + if (shift_dir) 3184 + shift_count = __ffs(var_len_off_mask); 3185 + else 3186 + shift_count = (8 - __fls(var_len_off_mask)); 3187 + } 3188 + blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, pcifunc); 3189 + if (blkaddr < 0) { 3190 + dev_err(rvu->dev, "%s: NPC block not implemented\n", __func__); 3191 + return -EINVAL; 3192 + } 3193 + val = rvu_read64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind)); 3194 + act0 = (struct npc_kpu_action0 *)&val; 3195 + act0->var_len_shift = shift_count; 3196 + act0->var_len_right = shift_dir; 3197 + act0->var_len_mask = var_len_off_mask; 3198 + act0->var_len_offset = var_len_off; 3199 + rvu_write64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind), val); 3200 + return 0; 3201 + } 3202 + 3203 + int rvu_npc_set_parse_mode(struct rvu *rvu, u16 pcifunc, u64 mode, u8 dir, 3204 + u64 pkind, u8 var_len_off, u8 var_len_off_mask, 3205 + u8 shift_dir) 3206 + 3207 + { 3208 + struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc); 3209 + int blkaddr, nixlf, rc, intf_mode; 3210 + int pf = rvu_get_pf(pcifunc); 3211 + u64 rxpkind, txpkind; 3212 + u8 cgx_id, lmac_id; 3213 + 3214 + /* use default pkind to disable edsa/higig */ 3215 + rxpkind = rvu_npc_get_pkind(rvu, pf); 3216 + txpkind = NPC_TX_DEF_PKIND; 3217 + intf_mode = NPC_INTF_MODE_DEF; 3218 + 3219 + if (mode & OTX2_PRIV_FLAGS_CUSTOM) { 3220 + if (pkind == NPC_RX_CUSTOM_PRE_L2_PKIND) { 3221 + rc = npc_set_var_len_offset_pkind(rvu, pcifunc, pkind, 3222 + var_len_off, 3223 + var_len_off_mask, 3224 + shift_dir); 3225 + if (rc) 3226 + return rc; 3227 + } 3228 + rxpkind = pkind; 3229 + txpkind = pkind; 3230 + } 3231 + 3232 + if (dir & PKIND_RX) { 3233 + /* rx pkind set req valid only for cgx mapped PFs */ 3234 + if (!is_cgx_config_permitted(rvu, pcifunc)) 3235 + return 0; 3236 + rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id); 3237 + 3238 + rc = cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, 3239 + rxpkind); 3240 + if (rc) 3241 + return rc; 3242 + } 3243 + 3244 + if (dir & PKIND_TX) { 3245 + /* Tx pkind set request valid if PCIFUNC has NIXLF attached */ 3246 + rc = nix_get_nixlf(rvu, pcifunc, &nixlf, &blkaddr); 3247 + if (rc) 3248 + return rc; 3249 + 3250 + rvu_write64(rvu, blkaddr, NIX_AF_LFX_TX_PARSE_CFG(nixlf), 3251 + txpkind); 3252 + } 3253 + 3254 + pfvf->intf_mode = intf_mode; 3255 + return 0; 3256 + } 3257 + 3258 + int rvu_mbox_handler_npc_set_pkind(struct rvu *rvu, struct npc_set_pkind *req, 3259 + struct msg_rsp *rsp) 3260 + { 3261 + return rvu_npc_set_parse_mode(rvu, req->hdr.pcifunc, req->mode, 3262 + req->dir, req->pkind, req->var_len_off, 3263 + req->var_len_off_mask, req->shift_dir); 3264 + } 3265 + 3170 3266 int rvu_mbox_handler_npc_read_base_steer_rule(struct rvu *rvu, 3171 3267 struct msg_req *req, 3172 3268 struct npc_mcam_read_base_rule_rsp *rsp)