forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-16 50a212ec906f7524620675f0c57357691c26c81f
kernel/arch/mips/cavium-octeon/executive/cvmx-helper.c
....@@ -30,6 +30,7 @@
3030 * Helper functions for common, but complicated tasks.
3131 *
3232 */
33
+#include <linux/bug.h>
3334 #include <asm/octeon/octeon.h>
3435
3536 #include <asm/octeon/cvmx-config.h>
....@@ -43,28 +44,7 @@
4344 #include <asm/octeon/cvmx-helper-board.h>
4445
4546 #include <asm/octeon/cvmx-pip-defs.h>
46
-#include <asm/octeon/cvmx-smix-defs.h>
4747 #include <asm/octeon/cvmx-asxx-defs.h>
48
-
49
-/**
50
- * cvmx_override_pko_queue_priority(int ipd_port, uint64_t
51
- * priorities[16]) is a function pointer. It is meant to allow
52
- * customization of the PKO queue priorities based on the port
53
- * number. Users should set this pointer to a function before
54
- * calling any cvmx-helper operations.
55
- */
56
-void (*cvmx_override_pko_queue_priority) (int pko_port,
57
- uint64_t priorities[16]);
58
-
59
-/**
60
- * cvmx_override_ipd_port_setup(int ipd_port) is a function
61
- * pointer. It is meant to allow customization of the IPD port
62
- * setup before packet input/output comes online. It is called
63
- * after cvmx-helper does the default IPD configuration, but
64
- * before IPD is enabled. Users should set this pointer to a
65
- * function before calling any cvmx-helper operations.
66
- */
67
-void (*cvmx_override_ipd_port_setup) (int ipd_port);
6848
6949 /* Port count per interface */
7050 static int interface_port_count[9];
....@@ -238,7 +218,7 @@
238218 mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
239219
240220 if (OCTEON_IS_MODEL(OCTEON_CN63XX)) {
241
- switch (mode.cn63xx.mode) {
221
+ switch (mode.cn61xx.mode) {
242222 case 0:
243223 return CVMX_HELPER_INTERFACE_MODE_SGMII;
244224 case 1:
....@@ -337,22 +317,6 @@
337317 return CVMX_HELPER_INTERFACE_MODE_DISABLED;
338318 }
339319
340
- if (interface == 0
341
- && cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CN3005_EVB_HS5
342
- && cvmx_sysinfo_get()->board_rev_major == 1) {
343
- /*
344
- * Lie about interface type of CN3005 board. This
345
- * board has a switch on port 1 like the other
346
- * evaluation boards, but it is connected over RGMII
347
- * instead of GMII. Report GMII mode so that the
348
- * speed is forced to 1 Gbit full duplex. Other than
349
- * some initial configuration (which does not use the
350
- * output of this function) there is no difference in
351
- * setup between GMII and RGMII modes.
352
- */
353
- return CVMX_HELPER_INTERFACE_MODE_GMII;
354
- }
355
-
356320 /* Interface 1 is always disabled on CN31XX and CN30XX */
357321 if ((interface == 1)
358322 && (OCTEON_IS_MODEL(OCTEON_CN31XX) || OCTEON_IS_MODEL(OCTEON_CN30XX)
....@@ -363,7 +327,7 @@
363327 mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
364328
365329 if (OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN52XX)) {
366
- switch (mode.cn56xx.mode) {
330
+ switch (mode.cn52xx.mode) {
367331 case 0:
368332 return CVMX_HELPER_INTERFACE_MODE_DISABLED;
369333 case 1:
....@@ -436,10 +400,6 @@
436400 tag_config.s.grp = 0;
437401
438402 cvmx_pip_config_port(ipd_port, port_config, tag_config);
439
-
440
- /* Give the user a chance to override our setting for each port */
441
- if (cvmx_override_ipd_port_setup)
442
- cvmx_override_ipd_port_setup(ipd_port);
443403
444404 return 0;
445405 }
....@@ -664,13 +624,6 @@
664624 int ipd_port = cvmx_helper_get_ipd_port(interface, 0);
665625 int num_ports = interface_port_count[interface];
666626 while (num_ports--) {
667
- /*
668
- * Give the user a chance to override the per queue
669
- * priorities.
670
- */
671
- if (cvmx_override_pko_queue_priority)
672
- cvmx_override_pko_queue_priority(ipd_port, priorities);
673
-
674627 cvmx_pko_config_port(ipd_port,
675628 cvmx_pko_get_base_queue_per_core(ipd_port,
676629 0),
....@@ -809,7 +762,6 @@
809762 result = __cvmx_helper_loop_enable(interface);
810763 break;
811764 }
812
- result |= __cvmx_helper_board_hardware_enable(interface);
813765 return result;
814766 }
815767
....@@ -819,7 +771,7 @@
819771 * Returns 0 on success
820772 * !0 on failure
821773 */
822
-int __cvmx_helper_errata_fix_ipd_ptr_alignment(void)
774
+static int __cvmx_helper_errata_fix_ipd_ptr_alignment(void)
823775 {
824776 #define FIX_IPD_FIRST_BUFF_PAYLOAD_BYTES \
825777 (CVMX_FPA_PACKET_POOL_SIZE-8-CVMX_HELPER_FIRST_MBUFF_SKIP)
....@@ -830,9 +782,9 @@
830782 #define INTERFACE(port) (port >> 4)
831783 #define INDEX(port) (port & 0xf)
832784 uint64_t *p64;
833
- cvmx_pko_command_word0_t pko_command;
785
+ union cvmx_pko_command_word0 pko_command;
834786 union cvmx_buf_ptr g_buffer, pkt_buffer;
835
- cvmx_wqe_t *work;
787
+ struct cvmx_wqe *work;
836788 int size, num_segs = 0, wqe_pcnt, pkt_pcnt;
837789 union cvmx_gmxx_prtx_cfg gmx_cfg;
838790 int retry_cnt;
....@@ -1057,7 +1009,6 @@
10571009 int result = 0;
10581010 int interface;
10591011 union cvmx_l2c_cfg l2c_cfg;
1060
- union cvmx_smix_en smix_en;
10611012 const int num_interfaces = cvmx_helper_get_number_of_interfaces();
10621013
10631014 /*
....@@ -1076,24 +1027,6 @@
10761027 l2c_cfg.s.lrf_arb_mode = 0;
10771028 l2c_cfg.s.rfb_arb_mode = 0;
10781029 cvmx_write_csr(CVMX_L2C_CFG, l2c_cfg.u64);
1079
-
1080
- /* Make sure SMI/MDIO is enabled so we can query PHYs */
1081
- smix_en.u64 = cvmx_read_csr(CVMX_SMIX_EN(0));
1082
- if (!smix_en.s.en) {
1083
- smix_en.s.en = 1;
1084
- cvmx_write_csr(CVMX_SMIX_EN(0), smix_en.u64);
1085
- }
1086
-
1087
- /* Newer chips actually have two SMI/MDIO interfaces */
1088
- if (!OCTEON_IS_MODEL(OCTEON_CN3XXX) &&
1089
- !OCTEON_IS_MODEL(OCTEON_CN58XX) &&
1090
- !OCTEON_IS_MODEL(OCTEON_CN50XX)) {
1091
- smix_en.u64 = cvmx_read_csr(CVMX_SMIX_EN(1));
1092
- if (!smix_en.s.en) {
1093
- smix_en.s.en = 1;
1094
- cvmx_write_csr(CVMX_SMIX_EN(1), smix_en.u64);
1095
- }
1096
- }
10971030
10981031 cvmx_pko_initialize_global();
10991032 for (interface = 0; interface < num_interfaces; interface++) {
....@@ -1142,9 +1075,9 @@
11421075 *
11431076 * Returns Link state
11441077 */
1145
-cvmx_helper_link_info_t cvmx_helper_link_get(int ipd_port)
1078
+union cvmx_helper_link_info cvmx_helper_link_get(int ipd_port)
11461079 {
1147
- cvmx_helper_link_info_t result;
1080
+ union cvmx_helper_link_info result;
11481081 int interface = cvmx_helper_get_interface_num(ipd_port);
11491082 int index = cvmx_helper_get_interface_index_num(ipd_port);
11501083
....@@ -1167,6 +1100,7 @@
11671100 if (index == 0)
11681101 result = __cvmx_helper_rgmii_link_get(ipd_port);
11691102 else {
1103
+ WARN_ONCE(1, "Using deprecated link status - please update your DT");
11701104 result.s.full_duplex = 1;
11711105 result.s.link_up = 1;
11721106 result.s.speed = 1000;
....@@ -1202,7 +1136,7 @@
12021136 *
12031137 * Returns Zero on success, negative on failure
12041138 */
1205
-int cvmx_helper_link_set(int ipd_port, cvmx_helper_link_info_t link_info)
1139
+int cvmx_helper_link_set(int ipd_port, union cvmx_helper_link_info link_info)
12061140 {
12071141 int result = -1;
12081142 int interface = cvmx_helper_get_interface_num(ipd_port);
....@@ -1240,57 +1174,3 @@
12401174 return result;
12411175 }
12421176 EXPORT_SYMBOL_GPL(cvmx_helper_link_set);
1243
-
1244
-/**
1245
- * Configure a port for internal and/or external loopback. Internal loopback
1246
- * causes packets sent by the port to be received by Octeon. External loopback
1247
- * causes packets received from the wire to sent out again.
1248
- *
1249
- * @ipd_port: IPD/PKO port to loopback.
1250
- * @enable_internal:
1251
- * Non zero if you want internal loopback
1252
- * @enable_external:
1253
- * Non zero if you want external loopback
1254
- *
1255
- * Returns Zero on success, negative on failure.
1256
- */
1257
-int cvmx_helper_configure_loopback(int ipd_port, int enable_internal,
1258
- int enable_external)
1259
-{
1260
- int result = -1;
1261
- int interface = cvmx_helper_get_interface_num(ipd_port);
1262
- int index = cvmx_helper_get_interface_index_num(ipd_port);
1263
-
1264
- if (index >= cvmx_helper_ports_on_interface(interface))
1265
- return -1;
1266
-
1267
- switch (cvmx_helper_interface_get_mode(interface)) {
1268
- case CVMX_HELPER_INTERFACE_MODE_DISABLED:
1269
- case CVMX_HELPER_INTERFACE_MODE_PCIE:
1270
- case CVMX_HELPER_INTERFACE_MODE_SPI:
1271
- case CVMX_HELPER_INTERFACE_MODE_NPI:
1272
- case CVMX_HELPER_INTERFACE_MODE_LOOP:
1273
- break;
1274
- case CVMX_HELPER_INTERFACE_MODE_XAUI:
1275
- result =
1276
- __cvmx_helper_xaui_configure_loopback(ipd_port,
1277
- enable_internal,
1278
- enable_external);
1279
- break;
1280
- case CVMX_HELPER_INTERFACE_MODE_RGMII:
1281
- case CVMX_HELPER_INTERFACE_MODE_GMII:
1282
- result =
1283
- __cvmx_helper_rgmii_configure_loopback(ipd_port,
1284
- enable_internal,
1285
- enable_external);
1286
- break;
1287
- case CVMX_HELPER_INTERFACE_MODE_SGMII:
1288
- case CVMX_HELPER_INTERFACE_MODE_PICMG:
1289
- result =
1290
- __cvmx_helper_sgmii_configure_loopback(ipd_port,
1291
- enable_internal,
1292
- enable_external);
1293
- break;
1294
- }
1295
- return result;
1296
-}