ism.c (20147B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * The part of PCID that simulates the ism 8 * 9 * Requires: 10 * 11 * Provides: 12 */ 13 14 #include <shared/bsl.h> 15 16 #include <unistd.h> 17 #include <stdlib.h> 18 #include <soc/drv.h> 19 #include <sys/types.h> 20 #include <sys/time.h> 21 #include <soc/mem.h> 22 #include <soc/hash.h> 23 #include <soc/ism.h> 24 #include <soc/ism_hash.h> 25 #include <soc/cmic.h> 26 #include <soc/debug.h> 27 #include <sal/appl/io.h> 28 #include <soc/mcm/driver.h> 29 #include <bde/pli/verinet.h> 30 31 #include "pcid.h" 32 #include "mem.h" 33 #include "ism.h" 34 #include "cmicsim.h" 35 #include "dma.h" 36 37 #ifdef BCM_ISM_SUPPORT 38 39 uint8 ism_init = 0; 40 41 extern uint32 soc_crc32b(uint8 *data, int data_nbits); 42 extern uint16 soc_crc16b(uint8 *data, int data_nbits); 43 extern soc_field_t _ism_table_bank_cfg_fld[]; 44 extern soc_reg_t _ism_stage_hash_cfg_reg[]; 45 extern soc_field_t _ism_stage_hash_cfg_fld[]; 46 47 extern _soc_ism_t _soc_ism_info[SOC_MAX_NUM_DEVICES]; 48 extern _soc_ism_hash_t _soc_ism_hash_info[SOC_MAX_NUM_DEVICES]; 49 extern uint32 _soc_ism_bank_raw_sizes[]; 50 /* 51 * Macro used by memory accessor functions to fix order 52 */ 53 #define FIX_MEM_ORDER_E(v,m) (((m)->flags & SOC_MEM_FLAG_BE) ? \ 54 BYTES2WORDS((m)->bytes)-1-(v) : \ 55 (v)) 56 57 static soc_reg_t _ism_table_bank_cfg_reg[] = { 58 TABLE0_BANK_CONFIGr, TABLE1_BANK_CONFIGr, 59 TABLE2_BANK_CONFIGr, TABLE3_BANK_CONFIGr, 60 TABLE4_BANK_CONFIGr 61 }; 62 63 void 64 soc_internal_init_hash_state(pcid_info_t *pcid_info) 65 { 66 int t, s, b; 67 uint32 rval, banks; 68 uint32 data[SOC_MAX_MEM_WORDS]; 69 soc_block_t blk; 70 uint8 at; 71 72 /* Assign everything to ESM to begin with */ 73 for (b = 0; b < _SOC_ISM_MAX_BANKS; b++) { 74 _soc_ism_bank_avail[pcid_info->unit][b] = SOC_ISM_MEM_ESM_L2; 75 } 76 for (t = 0; t < _SOC_ISM_MAX_TABLES; t++) { 77 soc_internal_extended_read_reg(pcid_info, blk, at, 78 soc_reg_addr_get(pcid_info->unit, _ism_table_bank_cfg_reg[t], 79 REG_PORT_ANY, 0, 80 SOC_REG_ADDR_OPTION_NONE, &blk, &at), data); 81 rval = data[0]; 82 LOG_VERBOSE(BSL_LS_SOC_COMMON, 83 (BSL_META("Table: %d = %x\n"), t, rval)); 84 for (s = 0; s < _SOC_ISM_MAX_STAGES; s++) { 85 banks = soc_reg_field_get(pcid_info->unit, _ism_table_bank_cfg_reg[t], 86 rval, _ism_table_bank_cfg_fld[s]); 87 for (b = 0; b < _SOC_ISM_BANKS_PER_STAGE; b++) { 88 if (banks & (1 << b)) { 89 LOG_VERBOSE(BSL_LS_SOC_COMMON, 90 (BSL_META("Bank[%d] = mem[%d]\n"), (s * _SOC_ISM_BANKS_PER_STAGE) + b, t+1)); 91 _soc_ism_bank_avail[pcid_info->unit][(s * _SOC_ISM_BANKS_PER_STAGE) + b] = t+1; 92 } 93 } 94 } 95 } 96 } 97 98 STATIC void 99 soc_internal_generic_hash_init(pcid_info_t *pcid_info) 100 { 101 int chip, unit = pcid_info->unit; 102 uint16 dev_id; 103 104 SOC_ISM_INFO(unit) = &_soc_ism_info[unit]; 105 SOC_ISM_HASH_INFO(unit) = &_soc_ism_hash_info[unit]; 106 107 chip = soc_chip_type_to_index(pcid_info->opt_chip); 108 if (pcid_info->opt_override_devid) { 109 dev_id = pcid_info->opt_override_devid; 110 } else { 111 dev_id = soc_base_driver_table[chip]->pci_device; 112 } 113 114 switch (dev_id) { 115 case BCM56648_DEVICE_ID: 116 case BCM56649_DEVICE_ID: 117 case BCM56540_DEVICE_ID: 118 case BCM56541_DEVICE_ID: 119 case BCM56542_DEVICE_ID: 120 case BCM56544_DEVICE_ID: 121 case BCM56545_DEVICE_ID: 122 case BCM56546_DEVICE_ID: 123 SOC_ISM_INFO(unit)->ism_mode = _ISM_SIZE_MODE_176; 124 break; 125 case BCM56543_DEVICE_ID: 126 SOC_ISM_INFO(unit)->ism_mode = _ISM_SIZE_MODE_256; 127 break; 128 case BCM56548_DEVICE_ID: 129 case BCM56547_DEVICE_ID: 130 case BCM56346_DEVICE_ID: 131 case BCM56345_DEVICE_ID: 132 case BCM56344_DEVICE_ID: 133 case BCM56342_DEVICE_ID: 134 case BCM56340_DEVICE_ID: 135 case BCM56049_DEVICE_ID: 136 case BCM56048_DEVICE_ID: 137 case BCM56047_DEVICE_ID: 138 case BCM56042_DEVICE_ID: 139 case BCM56041_DEVICE_ID: 140 case BCM56040_DEVICE_ID: 141 SOC_ISM_INFO(unit)->ism_mode = _ISM_SIZE_MODE_96; 142 break; 143 case BCM56640_DEVICE_ID: 144 case BCM56643_DEVICE_ID: 145 case BCM56644_DEVICE_ID: 146 default: 147 SOC_ISM_INFO(unit)->ism_mode = _ISM_SIZE_MODE_512; 148 break; 149 } 150 151 switch (SOC_ISM_INFO(unit)->ism_mode) { 152 case _ISM_SIZE_MODE_256: 153 SOC_ISM_INFO(unit)->bank_raw_sizes = _soc_ism_bank_raw_sizes_256; 154 SOC_ISM_INFO(unit)->banks_per_stage = _SOC_ISM_BANKS_PER_STAGE; 155 SOC_ISM_INFO(unit)->max_banks = _SOC_ISM_MAX_BANKS; 156 SOC_ISM_INFO(unit)->total_banks = _SOC_ISM_TOTAL_BANKS; 157 SOC_ISM_INFO(unit)->total_entries = _SOC_ISM_ENTRIES_PER_BKT * 158 _soc_ism_bank_total(unit); 159 SOC_ISM_INFO(unit)->max_raw_banks = _SOC_ISM_MAX_RAW_BANKS; 160 SOC_ISM_INFO(unit)->real_bank_map = _soc_ism_real_bank_map; 161 break; 162 case _ISM_SIZE_MODE_176: 163 SOC_ISM_INFO(unit)->bank_raw_sizes = _soc_ism_bank_raw_sizes_256_176; 164 SOC_ISM_INFO(unit)->banks_per_stage = _SOC_ISM_BANKS_PER_STAGE_176; 165 SOC_ISM_INFO(unit)->max_banks = _SOC_ISM_MAX_BANKS_176; 166 SOC_ISM_INFO(unit)->total_banks = _SOC_ISM_TOTAL_BANKS_176; 167 SOC_ISM_INFO(unit)->total_entries = _SOC_ISM_ENTRIES_PER_BKT * 168 _soc_ism_bank_total(unit); 169 SOC_ISM_INFO(unit)->max_raw_banks = _SOC_ISM_MAX_RAW_BANKS; 170 SOC_ISM_INFO(unit)->real_bank_map = _soc_ism_real_bank_map_176; 171 break; 172 case _ISM_SIZE_MODE_96: 173 SOC_ISM_INFO(unit)->bank_raw_sizes = _soc_ism_bank_raw_sizes_256_96; 174 SOC_ISM_INFO(unit)->banks_per_stage = _SOC_ISM_BANKS_PER_STAGE_96; 175 SOC_ISM_INFO(unit)->max_banks = _SOC_ISM_MAX_BANKS_96; 176 SOC_ISM_INFO(unit)->total_banks = _SOC_ISM_TOTAL_BANKS_96; 177 SOC_ISM_INFO(unit)->total_entries = _SOC_ISM_ENTRIES_PER_BKT * 178 _soc_ism_bank_total(unit); 179 SOC_ISM_INFO(unit)->max_raw_banks = _SOC_ISM_MAX_RAW_BANKS; 180 SOC_ISM_INFO(unit)->real_bank_map = _soc_ism_real_bank_map_96; 181 break; 182 case _ISM_SIZE_MODE_512: 183 default: 184 SOC_ISM_INFO(unit)->bank_raw_sizes = _soc_ism_bank_raw_sizes; 185 SOC_ISM_INFO(unit)->banks_per_stage = _SOC_ISM_BANKS_PER_STAGE; 186 SOC_ISM_INFO(unit)->max_banks = _SOC_ISM_MAX_BANKS; 187 SOC_ISM_INFO(unit)->total_banks = _SOC_ISM_TOTAL_BANKS; 188 SOC_ISM_INFO(unit)->total_entries = _SOC_ISM_ENTRIES_PER_BKT * 189 _soc_ism_bank_total(unit); 190 SOC_ISM_INFO(unit)->max_raw_banks = _SOC_ISM_MAX_RAW_BANKS; 191 SOC_ISM_INFO(unit)->real_bank_map = _soc_ism_real_bank_map; 192 break; 193 } 194 195 196 /* Attach the hash info structures based upon chip type */ 197 _SOC_ISM_BANKS(unit) = _soc_ism_shb[unit]; 198 _SOC_ISM_SETS(unit) = _soc_ism_shms; 199 _SOC_ISM_MEMS(unit) = _soc_ism_shm; 200 _SOC_ISM_VIEWS(unit) = _soc_ism_shmv; 201 _SOC_ISM_KEYS(unit) = _soc_ism_shk; 202 203 soc_internal_init_hash_state(pcid_info); 204 soc_ism_hash_init(unit); 205 ism_init = 1; 206 } 207 208 static int 209 soc_internal_generic_hash(pcid_info_t *pcid_info, soc_mem_t mem, void *entry, 210 int banks, uint8 op, uint32 *index, uint32 *result) 211 { 212 int blk, unit = pcid_info->unit; 213 uint8 found = 0, key[32], tmp_key[32], crc_key[32]; 214 uint8 at, idxinc = 1, num_flds, num_banks = 0; 215 uint16 lsb, midx, num_bits; 216 int32 bits, memidx, bucket = 0; 217 uint32 tmp_hs[SOC_MAX_MEM_WORDS]; 218 uint32 idx, bidx = 0, zero_lsb, offset, mask; 219 soc_block_t sblk; 220 soc_hash_bank_t *shbank; 221 _soc_ism_sbo_t sbo[_SOC_ISM_MAX_BANKS]; /* Dynamically created bank info based upon 222 requested banks used for final 223 bucket/index calculation */ 224 soc_field_t keyflds[MAX_FIELDS], lsbfld, vf = VALIDf; 225 226 if (!ism_init) { 227 soc_internal_generic_hash_init(pcid_info); 228 } 229 230 memidx = soc_ism_get_hash_mem_idx(unit, mem); 231 if ((mem == INVALIDm) || (memidx < 0)) { 232 LOG_ERROR(BSL_LS_SOC_COMMON, 233 (BSL_META("Invalid hash memory !!\n"))); 234 return SOC_E_PARAM; 235 } 236 if (!_SOC_ISM_MEMS(unit)[memidx].shms->num_banks) { 237 return SOC_E_PARAM; 238 } 239 if (soc_generic_get_hash_key(unit, mem, entry, keyflds, &lsbfld, 240 &num_flds) == SOC_E_NONE) { 241 LOG_VERBOSE(BSL_LS_SOC_COMMON, 242 (BSL_META("Key field(s): "))); 243 for (idx = 0; idx < num_flds; idx++) { 244 LOG_VERBOSE(BSL_LS_SOC_COMMON, 245 (BSL_META("%d, "), keyflds[idx])); 246 } 247 LOG_VERBOSE(BSL_LS_SOC_COMMON, 248 (BSL_META("\nLsb field: %d\n"), lsbfld)); 249 sal_memset(key, 0, sizeof(key)); 250 sal_memset(crc_key, 0, sizeof(crc_key)); 251 soc_ism_gen_key_from_keyfields(unit, mem, entry, keyflds, key, num_flds); 252 num_bits = _SOC_ISM_MEMS(unit)[memidx].shms->max_key_bits; 253 soc_ism_gen_crc_key_from_keyfields(unit, mem, entry, keyflds, crc_key, 254 num_flds, &num_bits); 255 lsb = soc_mem_field32_get(unit, mem, entry, lsbfld); 256 } else { 257 LOG_CLI((BSL_META("Key field not found !!\n"))); 258 return -1; 259 } 260 blk = SOC_MEM_BLOCK_ANY(unit, mem); 261 sblk = SOC_BLOCK2SCH(unit, blk); 262 shbank = _SOC_ISM_MEMS(unit)[memidx].shms->shb; 263 bits = soc_mem_entry_bits(unit, mem); 264 if (bits > (_SOC_ISM_ENTRY_BITS * 2)) { 265 idxinc = 4; 266 } else if (bits > _SOC_ISM_ENTRY_BITS) { 267 idxinc = 2; 268 } 269 270 soc_internal_extended_read_reg(pcid_info, sblk, at, soc_reg_addr_get(unit, 271 _ism_table_bank_cfg_reg[0], REG_PORT_ANY, 0, 272 SOC_REG_ADDR_OPTION_NONE, &sblk, &at), 273 tmp_hs); 274 zero_lsb = soc_reg_field_get(unit, _ism_table_bank_cfg_reg[0], 275 tmp_hs[0], HASH_ZERO_OR_LSBf); 276 sal_memset(sbo, 0, sizeof(sbo)); 277 for (idx = 0; idx < _SOC_ISM_MEMS(unit)[memidx].shms->num_banks; idx++) { 278 if (banks != -1) { 279 /* only use the indicated bank */ 280 if (!((((int32)1) << shbank[idx].my_id) & banks)) { 281 continue; 282 } 283 num_banks++; 284 } else { 285 num_banks++; 286 } 287 sbo[bidx].mode = -1; 288 sbo[bidx].bidx = bidx; 289 mask = soc_ism_get_hash_bucket_mask(shbank[idx].num_bkts); 290 soc_internal_extended_read_reg(pcid_info, sblk, at, 291 soc_reg_addr_get(unit, 292 _ism_stage_hash_cfg_reg[shbank[idx].my_id/_SOC_ISM_BANKS_PER_STAGE], 293 REG_PORT_ANY, 0, 294 SOC_REG_ADDR_OPTION_NONE, &sblk, &at), 295 tmp_hs); 296 offset = soc_reg_field_get(unit, _ism_stage_hash_cfg_reg[0], 297 tmp_hs[0], 298 _ism_stage_hash_cfg_fld[shbank[idx].my_id%_SOC_ISM_BANKS_PER_STAGE]); 299 bucket = soc_generic_gen_hash(unit, zero_lsb, num_bits, offset, 300 mask, crc_key, lsb); 301 sbo[bidx].index = bucket; 302 LOG_VERBOSE(BSL_LS_SOC_COMMON, 303 (BSL_META("Bank[%d]: bucket:%d\n"), bidx, bucket)); 304 sbo[bidx].index = (shbank[idx].base_entry/idxinc) + 305 (sbo[bidx].index * (shbank[idx].bkt_size/idxinc)); 306 for (midx = 0; midx < shbank[idx].bkt_size/idxinc; midx++) { 307 soc_internal_extended_read_mem(pcid_info, sblk, at, 308 soc_mem_addr_get(unit, mem, 0, blk, 309 sbo[idx].index+midx, &at), tmp_hs); 310 if (!soc_mem_field_valid(unit, mem, VALIDf)) { 311 vf = VALID_0f; 312 } 313 if (soc_mem_field32_get(unit, mem, tmp_hs, vf)) { 314 sal_memset(tmp_key, 0, sizeof(tmp_key)); 315 /* compare key */ 316 soc_ism_gen_key_from_keyfields(unit, mem, tmp_hs, keyflds, tmp_key, num_flds); 317 if (!sal_memcmp(key, tmp_key, sizeof(key))) { 318 found++; 319 sbo[bidx].entry = midx; 320 sbo[bidx].stage = shbank[idx].my_id / _SOC_ISM_BANKS_PER_STAGE; 321 sbo[bidx].bank = shbank[idx].my_id % _SOC_ISM_BANKS_PER_STAGE; 322 sbo[bidx].mode = 1; 323 LOG_VERBOSE(BSL_LS_SOC_COMMON, 324 (BSL_META("Existing mem index: %d\n"), sbo[bidx].index+sbo[bidx].entry)); 325 if (op != TABLE_INSERT_CMD_MSG) { 326 *index = sbo[bidx].index + midx; 327 if (op == TABLE_LOOKUP_CMD_MSG) { 328 *result = SCHAN_GEN_RESP_TYPE_FOUND; 329 } else { 330 *result = SCHAN_GEN_RESP_TYPE_DELETED; 331 } 332 return SOC_E_NONE; 333 } 334 break; 335 } 336 } else if (op == TABLE_INSERT_CMD_MSG) { 337 found++; 338 sbo[bidx].entry = midx; 339 sbo[bidx].stage = shbank[idx].my_id / _SOC_ISM_BANKS_PER_STAGE; 340 sbo[bidx].bank = shbank[idx].my_id % _SOC_ISM_BANKS_PER_STAGE; 341 sbo[bidx].mode = 0; 342 LOG_VERBOSE(BSL_LS_SOC_COMMON, 343 (BSL_META("New mem index: %d\n"), sbo[bidx].index+sbo[bidx].entry)); 344 break; 345 } 346 } 347 bidx++; 348 } 349 if (!found) { 350 if (op == TABLE_INSERT_CMD_MSG) { 351 *result = SCHAN_GEN_RESP_TYPE_FULL; 352 } else { 353 *result = SCHAN_GEN_RESP_TYPE_NOT_FOUND; 354 return SOC_E_NONE; 355 } 356 } 357 /* Get the lowest valid/empty index of the lowest bank-id of the lowest stage-id */ 358 if (found > 1) { 359 soc_ism_resolve_entry_index(sbo, num_banks); 360 } 361 for (idx = 0; idx < num_banks; idx++) { 362 if (sbo[idx].mode >= 0) { 363 *index = sbo[idx].index + sbo[idx].entry; 364 if (sbo[idx].mode) { 365 *result = SCHAN_GEN_RESP_TYPE_REPLACED; 366 } else { 367 *result = SCHAN_GEN_RESP_TYPE_INSERTED; 368 } 369 break; 370 } 371 } 372 return SOC_E_NONE; 373 } 374 375 int 376 soc_internal_generic_hash_insert(pcid_info_t *pcid_info, soc_mem_t mem, int32 banks, 377 void *entry, uint32 *result) 378 { 379 int rc, blk; 380 soc_block_t sblk; 381 uint8 at; 382 uint32 index, opres; 383 int unit = pcid_info->unit; 384 schan_genresp_v2_t *genresp = (schan_genresp_v2_t *) result; 385 386 LOG_VERBOSE(BSL_LS_SOC_COMMON, 387 (BSL_META_U(unit, 388 "Mem: %d\n"), mem)); 389 rc = soc_internal_generic_hash(pcid_info, mem, entry, banks, TABLE_INSERT_CMD_MSG, 390 &index, &opres); 391 392 genresp->err_info = 0; 393 if (rc) { 394 genresp->type = SCHAN_GEN_RESP_TYPE_ERROR; 395 genresp->index = -1; 396 } else { 397 genresp->type = opres; 398 if (opres == SCHAN_GEN_RESP_TYPE_FULL) { 399 genresp->index = -1; 400 LOG_VERBOSE(BSL_LS_SOC_COMMON, 401 (BSL_META_U(unit, 402 "Full\n"))); 403 } else { 404 blk = SOC_MEM_BLOCK_ANY(unit, mem); 405 sblk = SOC_BLOCK2SCH(unit, blk); 406 genresp->index = index; 407 soc_internal_extended_write_mem(pcid_info, sblk, at, 408 soc_mem_addr_get(unit, mem, 0, 409 blk, index, &at), (uint32 *)entry); 410 if (opres == SCHAN_GEN_RESP_TYPE_REPLACED) { 411 LOG_VERBOSE(BSL_LS_SOC_COMMON, 412 (BSL_META_U(unit, 413 "Replace "))); 414 } else { 415 LOG_VERBOSE(BSL_LS_SOC_COMMON, 416 (BSL_META_U(unit, 417 "Insert "))); 418 } 419 LOG_VERBOSE(BSL_LS_SOC_COMMON, 420 (BSL_META_U(unit, 421 "Index: %d\n"), index)); 422 } 423 } 424 return SOC_E_NONE; 425 } 426 427 int 428 soc_internal_generic_hash_lookup(pcid_info_t *pcid_info, soc_mem_t mem, int banks, 429 void *entry, uint32 *result) 430 { 431 int rc; 432 uint32 index; 433 schan_genresp_v2_t *genresp = (schan_genresp_v2_t *) result; 434 uint32 opres; 435 436 LOG_VERBOSE(BSL_LS_SOC_COMMON, 437 (BSL_META("Mem: %d\n"), mem)); 438 rc = soc_internal_generic_hash(pcid_info, mem, entry, banks, TABLE_LOOKUP_CMD_MSG, 439 &index, &opres); 440 441 genresp->err_info = 0; 442 if (rc) { 443 genresp->type = SCHAN_GEN_RESP_TYPE_ERROR; 444 genresp->index = -1; 445 } else if (opres == SCHAN_GEN_RESP_TYPE_NOT_FOUND) { 446 genresp->type = opres; 447 genresp->index = -1; 448 LOG_VERBOSE(BSL_LS_SOC_COMMON, 449 (BSL_META("Not found\n"))); 450 } else { 451 genresp->type = opres; 452 genresp->index = index; 453 LOG_VERBOSE(BSL_LS_SOC_COMMON, 454 (BSL_META("Found Index: %d\n"), index)); 455 } 456 return SOC_E_NONE; 457 } 458 459 int 460 soc_internal_generic_hash_delete(pcid_info_t *pcid_info, soc_mem_t mem, int banks, 461 void *entry, uint32 *result) 462 { 463 int rc, blk; 464 soc_block_t sblk; 465 uint8 at; 466 uint32 index, opres, tmp[SOC_MAX_MEM_WORDS]; 467 int unit = pcid_info->unit; 468 schan_genresp_v2_t *genresp = (schan_genresp_v2_t *) result; 469 470 LOG_VERBOSE(BSL_LS_SOC_COMMON, 471 (BSL_META_U(unit, 472 "Mem: %d\n"), mem)); 473 rc = soc_internal_generic_hash(pcid_info, mem, entry, banks, TABLE_DELETE_CMD_MSG, 474 &index, &opres); 475 476 genresp->err_info = 0; 477 if (rc) { 478 genresp->type = SCHAN_GEN_RESP_TYPE_ERROR; 479 genresp->index = -1; 480 } else if (opres == SCHAN_GEN_RESP_TYPE_NOT_FOUND) { 481 genresp->type = opres; 482 genresp->index = -1; 483 LOG_VERBOSE(BSL_LS_SOC_COMMON, 484 (BSL_META_U(unit, 485 "Not found\n"))); 486 } else { 487 genresp->type = opres; 488 genresp->index = index; 489 blk = SOC_MEM_BLOCK_ANY(unit, mem); 490 sblk = SOC_BLOCK2SCH(unit, blk); 491 soc_internal_extended_read_mem(pcid_info, sblk, at, 492 soc_mem_addr_get(unit, mem, 0, 493 blk, index, &at), (uint32 *)entry); 494 if (soc_mem_field_valid(unit, mem, VALIDf)) { 495 soc_mem_field32_set(unit, mem, tmp, VALIDf, 0); 496 } else { 497 soc_mem_field32_set(unit, mem, tmp, VALID_0f, 0); 498 if (soc_mem_field_valid(unit, mem, VALID_1f)) { 499 soc_mem_field32_set(unit, mem, tmp, VALID_1f, 0); 500 } 501 if (soc_mem_field_valid(unit, mem, VALID_2f)) { 502 soc_mem_field32_set(unit, mem, tmp, VALID_2f, 0); 503 } 504 if (soc_mem_field_valid(unit, mem, VALID_3f)) { 505 soc_mem_field32_set(unit, mem, tmp, VALID_3f, 0); 506 } 507 } 508 soc_internal_extended_write_mem(pcid_info, sblk, at, 509 soc_mem_addr_get(unit, mem, 0, 510 blk, index, &at), (uint32 *)tmp); 511 LOG_VERBOSE(BSL_LS_SOC_COMMON, 512 (BSL_META_U(unit, 513 "Deleted Index: %d\n"), index)); 514 } 515 return SOC_E_NONE; 516 } 517 518 #endif 519