/** @file Differentiated System Description Table Fields (DSDT) Copyright (c) 2014, ARM Ltd. All rights reserved.
Copyright (c) 2016, Hisilicon Limited. All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ Scope(_SB) { Device (MDIO) { OperationRegion(CLKR, SystemMemory, 0x60000550, 8) Field(CLKR, DWordAcc, NoLock, Preserve) { CLKE, 1, // clock enable , 31, CLKD, 1, // clode disable , 31, } OperationRegion(RSTR, SystemMemory, 0x60000c40, 8) Field(RSTR, DWordAcc, NoLock, Preserve) { RSTE, 1, // reset , 31, RSTD, 1, // de-reset , 31, } Name(_HID, "HISI0141") Name(_CRS, ResourceTemplate() { Memory32Fixed (ReadWrite, 0x603c0000 , 0x10000) }) Method(_RST, 0, Serialized) { Store (0x1, RSTE) Sleep (10) Store (0x1, CLKD) Sleep (10) Store (0x1, RSTD) Sleep (10) Store (0x1, CLKE) Sleep (10) } } Device (DSF0) { OperationRegion(H3SR, SystemMemory, 0xC0000184, 4) Field(H3SR, DWordAcc, NoLock, Preserve) { H3ST, 1, , 31, //RESERVED } OperationRegion(H4SR, SystemMemory, 0xC0000194, 4) Field(H4SR, DWordAcc, NoLock, Preserve) { H4ST, 1, , 31, //RESERVED } // DSAF RESET OperationRegion(DRER, SystemMemory, 0xC0000A00, 8) Field(DRER, DWordAcc, NoLock, Preserve) { DRTE, 1, , 31, //RESERVED DRTD, 1, , 31, //RESERVED } // NT RESET OperationRegion(NRER, SystemMemory, 0xC0000A08, 8) Field(NRER, DWordAcc, NoLock, Preserve) { NRTE, 1, , 31, //RESERVED NRTD, 1, , 31, //RESERVED } // XGE RESET OperationRegion(XRER, SystemMemory, 0xC0000A10, 8) Field(XRER, DWordAcc, NoLock, Preserve) { XRTE, 31, , 1, //RESERVED XRTD, 31, , 1, //RESERVED } // GE RESET OperationRegion(GRTR, SystemMemory, 0xC0000A18, 16) Field(GRTR, DWordAcc, NoLock, Preserve) { GR0E, 30, , 2, //RESERVED GR0D, 30, , 2, //RESERVED GR1E, 18, , 14, //RESERVED GR1D, 18, , 14, //RESERVED } // PPE RESET OperationRegion(PRTR, SystemMemory, 0xC0000A48, 8) Field(PRTR, DWordAcc, NoLock, Preserve) { PRTE, 10, , 22, //RESERVED PRTD, 10, , 22, //RESERVED } // RCB PPE COM RESET OperationRegion(RRTR, SystemMemory, 0xC0000A88, 8) Field(RRTR, DWordAcc, NoLock, Preserve) { RRTE, 1, , 31, //RESERVED RRTD, 1, , 31, //RESERVED } // DSAF Channel RESET OperationRegion(DCRR, SystemMemory, 0xC0000AA8, 8) Field(DCRR, DWordAcc, NoLock, Preserve) { DCRE, 1, , 31, //RESERVED DCRD, 1, , 31, //RESERVED } // RoCE RESET OperationRegion(RKRR, SystemMemory, 0xC0000A50, 8) Field(RKRR, DWordAcc, NoLock, Preserve) { RKRE, 1, , 31, //RESERVED RKRD, 1, , 31, //RESERVED } // RoCE Clock enable/disable OperationRegion(RKCR, SystemMemory, 0xC0000328, 8) Field(RKCR, DWordAcc, NoLock, Preserve) { RCLE, 1, , 31, //RESERVED RCLD, 1, , 31, //RESERVED } // Hilink access sel cfg reg OperationRegion(HSER, SystemMemory, 0xC2240008, 0x4) Field(HSER, DWordAcc, NoLock, Preserve) { HSEL, 2, // hilink_access_sel & hilink_access_wr_pul , 30, // RESERVED } // Serdes OperationRegion(H4LR, SystemMemory, 0xC2208100, 0x1000) Field(H4LR, DWordAcc, NoLock, Preserve) { H4L0, 16, // port0 , 16, //RESERVED Offset (0x400), H4L1, 16, // port1 , 16, //RESERVED Offset (0x800), H4L2, 16, // port2 , 16, //RESERVED Offset (0xc00), H4L3, 16, // port3 , 16, //RESERVED } OperationRegion(H3LR, SystemMemory, 0xC2208900, 0x800) Field(H3LR, DWordAcc, NoLock, Preserve) { H3L2, 16, // port4 , 16, //RESERVED Offset (0x400), H3L3, 16, // port5 , 16, //RESERVED } OperationRegion(HSFP, SystemMemory, 0x78000010, 0x100) Field(HSFP, ByteAcc, NoLock, Preserve) { Offset (0x2), HSF0, 1, // port0 , 7, //RESERVED Offset (0x6), HSF1, 1, // port1 , 7, //RESERVED } Name (_HID, "HISI00B2") Name (_CCA, 1) // Cache-coherent controller Name (_CRS, ResourceTemplate (){ Memory32Fixed (ReadWrite, 0xc5000000 , 0x890000) Memory32Fixed (ReadWrite, 0xc7000000 , 0x60000) Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI1") { 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, } Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI1") { 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, } Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI1") { 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, } }) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"mode", "6port-16rss"}, Package () {"buf-size", 4096}, Package () {"desc-num", 1024}, } }) Method (_PXM, 0, NotSerialized) { Return(0x00) } Method (_STA, 0, NotSerialized) { Return(0x0F) } //reset XGE port //Arg0 : XGE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(XRST, 2, Serialized) { ShiftLeft (0x2082082, Arg0, Local0) Or (Local0, 0x1, Local0) If (LEqual (Arg1, 0)) { Store(Local0, XRTE) } Else { Store(Local0, XRTD) } } //reset XGE core //Arg0 : XGE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(XCRT, 2, Serialized) { ShiftLeft (0x2080, Arg0, Local0) If (LEqual (Arg1, 0)) { Store(Local0, XRTE) } Else { Store(Local0, XRTD) } } //reset GE port //Arg0 : GE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(GRST, 2, Serialized) { If (LLessEqual (Arg0, 5)) { //Service port ShiftLeft (0x2082082, Arg0, Local0) ShiftLeft (0x1, Arg0, Local1) If (LEqual (Arg1, 0)) { Store(Local1, GR1E) Store(Local0, GR0E) } Else { Store(Local0, GR0D) Store(Local1, GR1D) } } } //reset PPE port //Arg0 : PPE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(PRST, 2, Serialized) { ShiftLeft (0x1, Arg0, Local0) If (LEqual (Arg1, 0)) { Store(Local0, PRTE) } Else { Store(Local0, PRTD) } } //reset DSAF channels //Arg0 : mask //Arg1 : 0 reset, 1 de-reset Method(DCRT, 2, Serialized) { If (LEqual (Arg1, 0)) { Store(Arg0, DCRE) } Else { Store(Arg0, DCRD) } } //reset RoCE //Arg0 : 0 reset, 1 de-reset Method(RRST, 1, Serialized) { If (LEqual (Arg0, 0)) { Store(0x1, RKRE) } Else { Store(0x1, RCLD) Store(0x1, RKRD) sleep(20) Store(0x1, RCLE) } } // Set Serdes Loopback //Arg0 : port //Arg1 : 0 disable, 1 enable Method(SRLP, 2, Serialized) { ShiftLeft (Arg1, 10, Local0) Switch (ToInteger(Arg0)) { case (0x0){ Store (0, HSEL) Store (H4L0, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L0) } case (0x1){ Store (0, HSEL) Store (H4L1, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L1) } case (0x2){ Store (0, HSEL) Store (H4L2, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L2) } case (0x3){ Store (0, HSEL) Store (H4L3, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L3) } case (0x4){ Store (3, HSEL) Store (H3L2, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H3L2) } case (0x5){ Store (3, HSEL) Store (H3L3, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H3L3) } } } //Reset //Arg0 : reset type (1: dsaf; 2: ppe; 3:XGE core; 4:XGE; 5:ge; 6:dchan; 7:RoCE) //Arg1 : port //Arg2 : 0 disable, 1 enable Method(DRST, 3, Serialized) { Switch (ToInteger(Arg0)) { //DSAF reset case (0x1) { Store (Arg2, Local0) If (LEqual (Local0, 0)) { Store (0x1, DRTE) Store (0x1, NRTE) Sleep (10) Store (0x1, RRTE) } Else { Store (0x1, DRTD) Store (0x1, NRTD) Sleep (10) Store (0x1, RRTD) } } //Reset PPE port case (0x2) { Store (Arg1, Local0) Store (Arg2, Local1) PRST (Local0, Local1) } //Reset XGE core case (0x3) { Store (Arg1, Local0) Store (Arg2, Local1) XCRT (Local0, Local1) } //Reset XGE port case (0x4) { Store (Arg1, Local0) Store (Arg2, Local1) XRST (Local0, Local1) } //Reset GE port case (0x5) { Store (Arg1, Local0) Store (Arg2, Local1) GRST (Local0, Local1) } //Reset DSAF Channels case (0x6) { Store (Arg1, Local0) Store (Arg2, Local1) DCRT (Local0, Local1) } //Reset RoCE case (0x7) { // Discarding Arg1 as it is always 0 Store (Arg2, Local0) RRST (Local0) } } } // _DSM Device Specific Method // // Arg0: UUID Unique function identifier // Arg1: Integer Revision Level // Arg2: Integer Function Index // 0 : Return Supported Functions bit mask // 1 : Reset Sequence // Arg3[0] : reset type (1:dsaf; 2:ppe; 3:xge core; 4:xge; 5: ge; 6:dchan; 7:RoCE) // Arg3[1] : port index in dsaf // Arg3[2] : 0 reset, 1 cancle reset // 2 : Set Serdes Loopback // Arg3[0] : port // Arg3[1] : 0 disable, 1 enable // 3 : LED op set // Arg3[0] : op type // Arg3[1] : port // Arg3[2] : para // 4 : Get port type (GE or XGE) // Arg3[0] : port index in dsaf // Return : 0 GE, 1 XGE // 5 : Get sfp status // Arg3[0] : port index in dsaf // Return : 0 no sfp, 1 have sfp // Arg3: Package Parameters Method (_DSM, 4, Serialized) { If (LEqual(Arg0,ToUUID("1A85AA1A-E293-415E-8E28-8D690A0F820A"))) { If (LEqual (Arg1, 0x00)) { Switch (ToInteger(Arg2)) { case (0x0) { Return (Buffer () {0x3F}) } //Reset Sequence case (0x1) { Store (DeRefOf (Index (Arg3, 0)), Local0) Store (DeRefOf (Index (Arg3, 1)), Local1) Store (DeRefOf (Index (Arg3, 2)), Local2) DRST (Local0, Local1, Local2) } //Set Serdes Loopback case (0x2) { Store (DeRefOf (Index (Arg3, 0)), Local0) Store (DeRefOf (Index (Arg3, 1)), Local1) SRLP (Local0, Local1) } //LED op set case (0x3) { } // Get port type (GE or XGE) case (0x4) { Store (0, Local1) Store (DeRefOf (Index (Arg3, 0)), Local0) If (LLessEqual (Local0, 3)) { // mac0: Hilink4 Lane0 // mac1: Hilink4 Lane1 // mac2: Hilink4 Lane2 // mac3: Hilink4 Lane3 Store (H4ST, Local1) } ElseIf (LLessEqual (Local0, 5)) { // mac4: Hilink3 Lane2 // mac5: Hilink3 Lane3 Store (H3ST, Local1) } Return (Local1) } //Get sfp status case (0x5) { Store (1, Local1) //set no sfp default Store (DeRefOf (Index (Arg3, 0)), Local0) If (LEqual (Local0, 0)) { // port 0: Store (HSF0, Local1) } ElseIf (LEqual (Local0, 1)) { // port 1 Store (HSF1, Local1) } XOr (Local1, 1, local1) Return (Local1) } } } } Return (Buffer() {0x00}) } Device (PRT0) { Name (_ADR, 0x0) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 0}, Package () {"media-type", "fiber"}, } }) } Device (PRT1) { Name (_ADR, 0x1) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 1}, Package () {"media-type", "fiber"}, } }) } Device (PRT2) { Name (_ADR, 0x2) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 2}, Package () {"media-type", "fiber"}, } }) } Device (PRT3) { Name (_ADR, 0x3) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 3}, Package () {"media-type", "fiber"}, } }) } Device (PRT4) { Name (_ADR, 0x4) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 4}, Package () {"phy-mode", "sgmii"}, Package () {"phy-addr", 0}, Package () {"mdio-node", Package (){\_SB.MDIO}}, Package () {"media-type", "copper"}, } }) } Device (PRT5) { Name (_ADR, 0x5) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 5}, Package () {"phy-mode", "sgmii"}, Package () {"phy-addr", 1}, Package () {"mdio-node", Package (){\_SB.MDIO}}, Package () {"media-type", "copper"}, } }) } } Device (ETH4) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 4}, } }) } Device (ETH5) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 5}, } }) } Device (ETH0) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 0}, } }) } Device (ETH1) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 1}, } }) } Device (ETH2) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 2}, } }) Method (_STA, 0x0, NotSerialized) { Return (0) } } Device (ETH3) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF0}}, Package () {"port-idx-in-ae", 3}, } }) Method (_STA, 0x0, NotSerialized) { Return (0) } } Device (ROCE) { Name(_HID, "HISI00D1") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"eth-handle", Package () {\_SB.ETH0, \_SB.ETH1, 0, 0, \_SB.ETH4, \_SB.ETH5}}, Package () {"dsaf-handle", Package (){\_SB.DSF0}}, Package () {"node-guid", Package () { 0x00, 0x9A, 0xCD, 0x00, 0x00, 0x01, 0x02, 0x03 }}, // 8-bytes Package () {"interrupt-names", Package() {"hns-roce-comp-0", "hns-roce-comp-1", "hns-roce-comp-2", "hns-roce-comp-3", "hns-roce-comp-4", "hns-roce-comp-5", "hns-roce-comp-6", "hns-roce-comp-7", "hns-roce-comp-8", "hns-roce-comp-9", "hns-roce-comp-10", "hns-roce-comp-11", "hns-roce-comp-12", "hns-roce-comp-13", "hns-roce-comp-14", "hns-roce-comp-15", "hns-roce-comp-16", "hns-roce-comp-17", "hns-roce-comp-18", "hns-roce-comp-19", "hns-roce-comp-20", "hns-roce-comp-21", "hns-roce-comp-22", "hns-roce-comp-23", "hns-roce-comp-24", "hns-roce-comp-25", "hns-roce-comp-26", "hns-roce-comp-27", "hns-roce-comp-28", "hns-roce-comp-29", "hns-roce-comp-30", "hns-roce-comp-31", "hns-roce-async", "hns-roce-common"}}, } }) Name (_CRS, ResourceTemplate (){ Memory32Fixed (ReadWrite, 0xc4000000 , 0x100000) Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI9") { 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 785, 754, } }) } /* for p1 */ Device (DSF1) { OperationRegion(H3SR, SystemMemory, 0x400C0000184, 4) Field(H3SR, DWordAcc, NoLock, Preserve) { H3ST, 1, , 31, //RESERVED } OperationRegion(H4SR, SystemMemory, 0x400C0000194, 4) Field(H4SR, DWordAcc, NoLock, Preserve) { H4ST, 1, , 31, //RESERVED } // DSAF RESET OperationRegion(DRER, SystemMemory, 0x400C0000A00, 8) Field(DRER, DWordAcc, NoLock, Preserve) { DRTE, 1, , 31, //RESERVED DRTD, 1, , 31, //RESERVED } // NT RESET OperationRegion(NRER, SystemMemory, 0x400C0000A08, 8) Field(NRER, DWordAcc, NoLock, Preserve) { NRTE, 1, , 31, //RESERVED NRTD, 1, , 31, //RESERVED } // XGE RESET OperationRegion(XRER, SystemMemory, 0x400C0000A10, 8) Field(XRER, DWordAcc, NoLock, Preserve) { XRTE, 31, , 1, //RESERVED XRTD, 31, , 1, //RESERVED } // GE RESET OperationRegion(GRTR, SystemMemory, 0x400C0000A18, 16) Field(GRTR, DWordAcc, NoLock, Preserve) { GR0E, 30, , 2, //RESERVED GR0D, 30, , 2, //RESERVED GR1E, 18, , 14, //RESERVED GR1D, 18, , 14, //RESERVED } // PPE RESET OperationRegion(PRTR, SystemMemory, 0x400C0000A48, 8) Field(PRTR, DWordAcc, NoLock, Preserve) { PRTE, 10, , 22, //RESERVED PRTD, 10, , 22, //RESERVED } // RCB PPE COM RESET OperationRegion(RRTR, SystemMemory, 0x400C0000A88, 8) Field(RRTR, DWordAcc, NoLock, Preserve) { RRTE, 1, , 31, //RESERVED RRTD, 1, , 31, //RESERVED } // RCB_2X COM RESET OperationRegion(RBTR, SystemMemory, 0x400C0000AC0, 8) Field(RBTR, DWordAcc, NoLock, Preserve) { RBTE, 1, , 31, //RESERVED RBTD, 1, , 31, //RESERVED } // Hilink access sel cfg reg OperationRegion(HSER, SystemMemory, 0x400C2240008, 0x4) Field(HSER, DWordAcc, NoLock, Preserve) { HSEL, 2, // hilink_access_sel & hilink_access_wr_pul , 30, // RESERVED } // Serdes OperationRegion(H4LR, SystemMemory, 0x400C2208100, 0x1000) Field(H4LR, DWordAcc, NoLock, Preserve) { H4L0, 16, // port0 , 16, //RESERVED Offset (0x400), H4L1, 16, // port1 , 16, //RESERVED Offset (0x800), H4L2, 16, // port2 , 16, //RESERVED Offset (0xc00), H4L3, 16, // port3 , 16, //RESERVED } OperationRegion(H3LR, SystemMemory, 0x400C2208900, 0x800) Field(H3LR, DWordAcc, NoLock, Preserve) { H3L2, 16, // port4 , 16, //RESERVED Offset (0x400), H3L3, 16, // port5 , 16, //RESERVED } Name (_HID, "HISI00B2") Name (_CCA, 1) // Cache-coherent controller Name (_CRS, ResourceTemplate (){ QwordMemory ( ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, 0x0, // Granularity 0x400c5000000, // Min Base Address 0x400c588ffff, // Max Base Address 0x0, // Translate 0x890000 // Length ) QwordMemory ( ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, 0x0, // Granularity 0x400c7000000, // Min Base Address 0x400c705ffff, // Max Base Address 0x0, // Translate 0x60000 // Length ) Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI8") { 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, } Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI8") { 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, } Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, 0, "\\_SB.MBI8") { 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, } }) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"mode", "6port-16rss"}, Package () {"buf-size", 4096}, Package () {"desc-num", 1024}, } }) //reset XGE port //Arg0 : XGE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(XRST, 2, Serialized) { ShiftLeft (0x2082082, Arg0, Local0) Or (Local0, 0x1, Local0) If (LEqual (Arg1, 0)) { Store(Local0, XRTE) } Else { Store(Local0, XRTD) } } //reset XGE core //Arg0 : XGE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(XCRT, 2, Serialized) { ShiftLeft (0x2080, Arg0, Local0) If (LEqual (Arg1, 0)) { Store(Local0, XRTE) } Else { Store(Local0, XRTD) } } //reset GE port //Arg0 : GE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(GRST, 2, Serialized) { If (LLessEqual (Arg0, 5)) { //Service port ShiftLeft (0x2082082, Arg0, Local0) ShiftLeft (0x1, Arg0, Local1) If (LEqual (Arg1, 0)) { Store(Local1, GR1E) Store(Local0, GR0E) } Else { Store(Local0, GR0D) Store(Local1, GR1D) } } } //reset PPE port //Arg0 : PPE port index in dsaf //Arg1 : 0 reset, 1 cancle reset Method(PRST, 2, Serialized) { ShiftLeft (0x1, Arg0, Local0) If (LEqual (Arg1, 0)) { Store(Local0, PRTE) } Else { Store(Local0, PRTD) } } // Set Serdes Loopback //Arg0 : port //Arg1 : 0 disable, 1 enable Method(SRLP, 2, Serialized) { ShiftLeft (Arg1, 10, Local0) Switch (ToInteger(Arg0)) { case (0x0){ Store (0, HSEL) Store (H4L0, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L0) } case (0x1){ Store (0, HSEL) Store (H4L1, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L1) } case (0x2){ Store (0, HSEL) Store (H4L2, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L2) } case (0x3){ Store (0, HSEL) Store (H4L3, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H4L3) } case (0x4){ Store (3, HSEL) Store (H3L2, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H3L2) } case (0x5){ Store (3, HSEL) Store (H3L3, Local1) And (Local1, 0xfffffbff, Local1) Or (Local0, Local1, Local0) Store (Local0, H3L3) } } } //Reset //Arg0 : reset type (1: dsaf; 2: ppe; 3:XGE core; 4:XGE; 5:G3) //Arg1 : port //Arg2 : 0 disable, 1 enable Method(DRST, 3, Serialized) { Switch (ToInteger(Arg0)) { //DSAF reset case (0x1) { Store (Arg2, Local0) If (LEqual (Local0, 0)) { Store (0x1, DRTE) Store (0x1, NRTE) Sleep (10) Store (0x1, RRTE) Store (0x1, RBTE) } Else { Store (0x1, DRTD) Store (0x1, NRTD) Sleep (10) Store (0x1, RRTD) Store (0x1, RBTD) } } //Reset PPE port case (0x2) { Store (Arg1, Local0) Store (Arg2, Local1) PRST (Local0, Local1) } //Reset XGE core case (0x3) { Store (Arg1, Local0) Store (Arg2, Local1) XCRT (Local0, Local1) } //Reset XGE port case (0x4) { Store (Arg1, Local0) Store (Arg2, Local1) XRST (Local0, Local1) } //Reset GE port case (0x5) { Store (Arg1, Local0) Store (Arg2, Local1) GRST (Local0, Local1) } } } // _DSM Device Specific Method // // Arg0: UUID Unique function identifier // Arg1: Integer Revision Level // Arg2: Integer Function Index // 0 : Return Supported Functions bit mask // 1 : Reset Sequence // Arg3[0] : reset type (1:dsaf; 2:ppe; 3:xge core; 4:xge; 5: ge) // Arg3[1] : port index in dsaf // Arg3[2] : 0 reset, 1 cancle reset // 2 : Set Serdes Loopback // Arg3[0] : port // Arg3[1] : 0 disable, 1 enable // 3 : LED op set // Arg3[0] : op type // Arg3[1] : port // Arg3[2] : para // 4 : Get port type (GE or XGE) // Arg3[0] : port index in dsaf // Return : 0 GE, 1 XGE // 5 : Get sfp status // Arg3[0] : port index in dsaf // Return : 0 no sfp, 1 have sfp // Arg3: Package Parameters Method (_DSM, 4, Serialized) { If (LEqual(Arg0,ToUUID("1A85AA1A-E293-415E-8E28-8D690A0F820A"))) { If (LEqual (Arg1, 0x00)) { Switch (ToInteger(Arg2)) { case (0x0) { Return (Buffer () {0x3F}) } //Reset Sequence case (0x1) { Store (DeRefOf (Index (Arg3, 0)), Local0) Store (DeRefOf (Index (Arg3, 1)), Local1) Store (DeRefOf (Index (Arg3, 2)), Local2) DRST (Local0, Local1, Local2) } //Set Serdes Loopback case (0x2) { Store (DeRefOf (Index (Arg3, 0)), Local0) Store (DeRefOf (Index (Arg3, 1)), Local1) SRLP (Local0, Local1) } //LED op set case (0x3) { } // Get port type (GE or XGE) case (0x4) { Store (0, Local1) Store (DeRefOf (Index (Arg3, 0)), Local0) If (LLessEqual (Local0, 3)) { // mac0: Hilink4 Lane0 // mac1: Hilink4 Lane1 // mac2: Hilink4 Lane2 // mac3: Hilink4 Lane3 Store (H4ST, Local1) } ElseIf (LLessEqual (Local0, 5)) { // mac4: Hilink3 Lane2 // mac5: Hilink3 Lane3 Store (H3ST, Local1) } Return (Local1) } //Get sfp status case (0x5) { } } } } Return (Buffer() {0x00}) } Device (PRT6) { Name (_ADR, 0x6) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 0}, Package () {"media-type", "fiber"}, } }) } Device (PRT7) { Name (_ADR, 0x7) Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"reg", 1}, Package () {"media-type", "fiber"}, } }) } } Device (ETH6) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF1}}, Package () {"port-idx-in-ae", 0}, } }) Method (_STA, 0x0, NotSerialized) { Return (0) } } Device (ETH7) { Name(_HID, "HISI00C2") Name (_CCA, 1) // Cache-coherent controller Name (_DSD, Package () { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package () {"local-mac-address", Package () { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }}, // 6-bytes Package () {"ae-handle", Package (){\_SB.DSF1}}, Package () {"port-idx-in-ae", 1}, } }) Method (_STA, 0x0, NotSerialized) { Return (0) } } }