1 /* 2 * Copyright (c) 2026, Qualcomm Technologies, Inc. and/or its subsidiaries. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <stdbool.h> 8 9 #include <lib/utils_def.h> 10 #include <vmidmt.h> 11 #include <vmidmt_internal.h> 12 13 /* Configuration/options for each VMIDMT. */ 14 const struct vmidmt_cfg g_vmidmt_cfg[] = { 15 { HAL_VMIDMT_IPA, VMIDMT_ERR_OPT, NULL, 0, 1 }, 16 /* Rennell.QUPV3 0 VMIDMT SMR 48 SSD6 SID6 MA48 SP48 36 */ 17 { HAL_VMIDMT_QUPV3_0, VMIDMT_ERR_OPT, NULL, 0, 1 }, 18 /* Rennell.QUPV3 1 VMIDMT SMR 48 SSD6 SID6 MA48 SP48 36 */ 19 { HAL_VMIDMT_QUPV3_1, VMIDMT_ERR_OPT, NULL, 0, 1 }, 20 }; 21 22 const uint32_t g_vmidmt_cfg_count = ARRAY_SIZE(g_vmidmt_cfg); 23 24 /* Mapping from master indices to VMIDs. */ 25 const struct vmidmt_map g_vmid_map[] = { 26 { HAL_VMIDMT_IPA, 27 0, 28 { 0 }, 29 1, 30 ACC_VMID_IPA_GP, 31 1, 32 ACC_VMIDMT_MEMTYPE_DEFAULT }, 33 { HAL_VMIDMT_IPA, 34 1, 35 { 1 }, 36 1, 37 ACC_VMID_IPA_GP, 38 1, 39 ACC_VMIDMT_MEMTYPE_DEFAULT }, 40 { HAL_VMIDMT_IPA, 41 2, 42 { 2 }, 43 1, 44 ACC_VMID_IPA_GP, 45 1, 46 ACC_VMIDMT_MEMTYPE_DEFAULT }, 47 { HAL_VMIDMT_IPA, 48 3, 49 { 3 }, 50 1, 51 ACC_VMID_IPA_PERIPH_1, 52 1, 53 ACC_VMIDMT_MEMTYPE_DEFAULT }, 54 { HAL_VMIDMT_IPA, 55 4, 56 { 4 }, 57 1, 58 ACC_VMID_IPA_GP, 59 1, 60 ACC_VMIDMT_MEMTYPE_DEFAULT }, 61 { HAL_VMIDMT_IPA, 62 5, 63 { 5 }, 64 1, 65 ACC_VMID_NOACCESS, 66 1, 67 ACC_VMIDMT_MEMTYPE_DEFAULT }, 68 { HAL_VMIDMT_IPA, 69 6, 70 { 6 }, 71 1, 72 ACC_VMID_NOACCESS, 73 1, 74 ACC_VMIDMT_MEMTYPE_DEFAULT }, 75 { HAL_VMIDMT_IPA, 76 7, 77 { 7 }, 78 1, 79 ACC_VMID_IPA_GP, 80 1, 81 ACC_VMIDMT_MEMTYPE_DEFAULT }, 82 { HAL_VMIDMT_IPA, 83 8, 84 { 8 }, 85 1, 86 ACC_VMID_NOACCESS, 87 1, 88 ACC_VMIDMT_MEMTYPE_DEFAULT }, 89 { HAL_VMIDMT_IPA, 90 9, 91 { 9 }, 92 1, 93 ACC_VMID_IPA_GP, 94 1, 95 ACC_VMIDMT_MEMTYPE_DEFAULT }, 96 { HAL_VMIDMT_IPA, 97 10, 98 { 10 }, 99 1, 100 ACC_VMID_NOACCESS, 101 1, 102 ACC_VMIDMT_MEMTYPE_DEFAULT }, 103 { HAL_VMIDMT_IPA, 104 11, 105 { 11 }, 106 1, 107 ACC_VMID_NOACCESS, 108 1, 109 ACC_VMIDMT_MEMTYPE_DEFAULT }, 110 { HAL_VMIDMT_IPA, 111 12, 112 { 12 }, 113 1, 114 ACC_VMID_NOACCESS, 115 1, 116 ACC_VMIDMT_MEMTYPE_DEFAULT }, 117 { HAL_VMIDMT_IPA, 118 13, 119 { 13 }, 120 1, 121 ACC_VMID_NOACCESS, 122 1, 123 ACC_VMIDMT_MEMTYPE_DEFAULT }, 124 { HAL_VMIDMT_IPA, 125 14, 126 { 14 }, 127 1, 128 ACC_VMID_NOACCESS, 129 1, 130 ACC_VMIDMT_MEMTYPE_DEFAULT }, 131 { HAL_VMIDMT_IPA, 132 15, 133 { 15 }, 134 1, 135 ACC_VMID_IPA_GP, 136 1, 137 ACC_VMIDMT_MEMTYPE_DEFAULT }, 138 { HAL_VMIDMT_IPA, 139 16, 140 { 16 }, 141 1, 142 ACC_VMID_IPA_GP, 143 1, 144 ACC_VMIDMT_MEMTYPE_DEFAULT }, 145 { HAL_VMIDMT_IPA, 146 17, 147 { 17 }, 148 1, 149 ACC_VMID_IPA_GP, 150 1, 151 ACC_VMIDMT_MEMTYPE_DEFAULT }, 152 { HAL_VMIDMT_IPA, 153 18, 154 { 18 }, 155 1, 156 ACC_VMID_IPA_PERIPH_1, 157 1, 158 ACC_VMIDMT_MEMTYPE_DEFAULT }, 159 { HAL_VMIDMT_IPA, 160 19, 161 { 19 }, 162 1, 163 ACC_VMID_IPA_GP, 164 1, 165 ACC_VMIDMT_MEMTYPE_DEFAULT }, 166 { HAL_VMIDMT_IPA, 167 20, 168 { 20 }, 169 1, 170 ACC_VMID_IPA_GP, 171 1, 172 ACC_VMIDMT_MEMTYPE_DEFAULT }, 173 { HAL_VMIDMT_IPA, 174 21, 175 { 21 }, 176 1, 177 ACC_VMID_IPA_GP, 178 1, 179 ACC_VMIDMT_MEMTYPE_DEFAULT }, 180 { HAL_VMIDMT_IPA, 181 22, 182 { 22 }, 183 1, 184 ACC_VMID_IPA_GP, 185 1, 186 ACC_VMIDMT_MEMTYPE_DEFAULT }, 187 { HAL_VMIDMT_IPA, 188 32, 189 { 32 }, 190 1, 191 ACC_VMID_IPA_GP, 192 1, 193 ACC_VMIDMT_MEMTYPE_DEFAULT }, 194 { HAL_VMIDMT_IPA, 195 33, 196 { 33 }, 197 1, 198 ACC_VMID_NOACCESS, 199 1, 200 ACC_VMIDMT_MEMTYPE_DEFAULT }, 201 { HAL_VMIDMT_IPA, 202 34, 203 { 34 }, 204 1, 205 ACC_VMID_NOACCESS, 206 1, 207 ACC_VMIDMT_MEMTYPE_DEFAULT }, 208 { HAL_VMIDMT_IPA, 209 40, 210 { 40 }, 211 1, 212 ACC_VMID_IPA_FW, 213 1, 214 ACC_VMIDMT_MEMTYPE_DEFAULT }, 215 { HAL_VMIDMT_IPA, 216 41, 217 { 41 }, 218 1, 219 ACC_VMID_NOACCESS, 220 1, 221 ACC_VMIDMT_MEMTYPE_DEFAULT }, 222 { HAL_VMIDMT_IPA, 223 48, 224 { 48 }, 225 1, 226 ACC_VMID_NOACCESS, 227 1, 228 ACC_VMIDMT_MEMTYPE_DEFAULT }, 229 /* 3_0 */ 230 { HAL_VMIDMT_QUPV3_0, 231 0, 232 { 0 }, 233 1, 234 ACC_VMID_AP, 235 1, 236 ACC_VMIDMT_MEMTYPE_DEFAULT }, 237 { HAL_VMIDMT_QUPV3_0, 238 1, 239 { 1 }, 240 1, 241 ACC_VMID_AP, 242 1, 243 ACC_VMIDMT_MEMTYPE_DEFAULT }, 244 { HAL_VMIDMT_QUPV3_0, 245 2, 246 { 2 }, 247 1, 248 ACC_VMID_AP, 249 1, 250 ACC_VMIDMT_MEMTYPE_DEFAULT }, 251 { HAL_VMIDMT_QUPV3_0, 252 3, 253 { 3 }, 254 1, 255 ACC_VMID_AP, 256 1, 257 ACC_VMIDMT_MEMTYPE_DEFAULT }, 258 { HAL_VMIDMT_QUPV3_0, 259 4, 260 { 4 }, 261 1, 262 ACC_VMID_AP, 263 1, 264 ACC_VMIDMT_MEMTYPE_DEFAULT }, 265 { HAL_VMIDMT_QUPV3_0, 266 5, 267 { 5 }, 268 1, 269 ACC_VMID_AP, 270 1, 271 ACC_VMIDMT_MEMTYPE_DEFAULT }, 272 { HAL_VMIDMT_QUPV3_0, 273 6, 274 { 6 }, 275 1, 276 ACC_VMID_AP, 277 1, 278 ACC_VMIDMT_MEMTYPE_DEFAULT }, 279 { HAL_VMIDMT_QUPV3_0, 280 7, 281 { 7 }, 282 1, 283 ACC_VMID_LPASS, 284 1, 285 ACC_VMIDMT_MEMTYPE_DEFAULT }, 286 { HAL_VMIDMT_QUPV3_0, 287 8, 288 { 8 }, 289 1, 290 ACC_VMID_LPASS, 291 1, 292 ACC_VMIDMT_MEMTYPE_DEFAULT }, 293 { HAL_VMIDMT_QUPV3_0, 294 11, 295 { 11 }, 296 1, 297 ACC_VMID_MSS, 298 1, 299 ACC_VMIDMT_MEMTYPE_DEFAULT }, 300 { HAL_VMIDMT_QUPV3_0, 301 16, 302 { 16 }, 303 1, 304 ACC_VMID_AP, 305 1, 306 ACC_VMIDMT_MEMTYPE_DEFAULT }, 307 { HAL_VMIDMT_QUPV3_0, 308 17, 309 { 17 }, 310 1, 311 ACC_VMID_AP, 312 1, 313 ACC_VMIDMT_MEMTYPE_DEFAULT }, 314 { HAL_VMIDMT_QUPV3_0, 315 18, 316 { 18 }, 317 1, 318 ACC_VMID_AP, 319 1, 320 ACC_VMIDMT_MEMTYPE_DEFAULT }, 321 { HAL_VMIDMT_QUPV3_0, 322 19, 323 { 19 }, 324 1, 325 ACC_VMID_AP, 326 1, 327 ACC_VMIDMT_MEMTYPE_DEFAULT }, 328 { HAL_VMIDMT_QUPV3_0, 329 20, 330 { 20 }, 331 1, 332 ACC_VMID_AP, 333 1, 334 ACC_VMIDMT_MEMTYPE_DEFAULT }, 335 { HAL_VMIDMT_QUPV3_0, 336 21, 337 { 21 }, 338 1, 339 ACC_VMID_AP, 340 1, 341 ACC_VMIDMT_MEMTYPE_DEFAULT }, 342 { HAL_VMIDMT_QUPV3_0, 343 22, 344 { 22 }, 345 1, 346 ACC_VMID_AP, 347 1, 348 ACC_VMIDMT_MEMTYPE_DEFAULT }, 349 { HAL_VMIDMT_QUPV3_0, 350 23, 351 { 23 }, 352 1, 353 ACC_VMID_AP, 354 1, 355 ACC_VMIDMT_MEMTYPE_DEFAULT }, 356 { HAL_VMIDMT_QUPV3_0, 357 32, 358 { 32 }, 359 1, 360 ACC_VMID_AP_GSI, 361 1, 362 ACC_VMIDMT_MEMTYPE_DEFAULT }, 363 { HAL_VMIDMT_QUPV3_0, 364 33, 365 { 33 }, 366 1, 367 ACC_VMID_AP_GSI, 368 1, 369 ACC_VMIDMT_MEMTYPE_DEFAULT }, 370 { HAL_VMIDMT_QUPV3_0, 371 34, 372 { 34 }, 373 1, 374 ACC_VMID_AP_GSI, 375 1, 376 ACC_VMIDMT_MEMTYPE_DEFAULT }, 377 { HAL_VMIDMT_QUPV3_0, 378 35, 379 { 35 }, 380 1, 381 ACC_VMID_AP_GSI, 382 1, 383 ACC_VMIDMT_MEMTYPE_DEFAULT }, 384 { HAL_VMIDMT_QUPV3_0, 385 36, 386 { 36 }, 387 1, 388 ACC_VMID_AP_GSI, 389 1, 390 ACC_VMIDMT_MEMTYPE_DEFAULT }, 391 { HAL_VMIDMT_QUPV3_0, 392 37, 393 { 37 }, 394 1, 395 ACC_VMID_AP_GSI, 396 1, 397 ACC_VMIDMT_MEMTYPE_DEFAULT }, 398 { HAL_VMIDMT_QUPV3_0, 399 38, 400 { 38 }, 401 1, 402 ACC_VMID_AP_GSI, 403 1, 404 ACC_VMIDMT_MEMTYPE_DEFAULT }, 405 /* 3_1 */ 406 { HAL_VMIDMT_QUPV3_1, 407 0, 408 { 0 }, 409 1, 410 ACC_VMID_AP, 411 1, 412 ACC_VMIDMT_MEMTYPE_DEFAULT }, 413 { HAL_VMIDMT_QUPV3_1, 414 1, 415 { 1 }, 416 1, 417 ACC_VMID_AP, 418 1, 419 ACC_VMIDMT_MEMTYPE_DEFAULT }, 420 { HAL_VMIDMT_QUPV3_1, 421 2, 422 { 2 }, 423 1, 424 ACC_VMID_AP, 425 1, 426 ACC_VMIDMT_MEMTYPE_DEFAULT }, 427 { HAL_VMIDMT_QUPV3_1, 428 3, 429 { 3 }, 430 1, 431 ACC_VMID_AP, 432 1, 433 ACC_VMIDMT_MEMTYPE_DEFAULT }, 434 { HAL_VMIDMT_QUPV3_1, 435 4, 436 { 4 }, 437 1, 438 ACC_VMID_AP, 439 1, 440 ACC_VMIDMT_MEMTYPE_DEFAULT }, 441 { HAL_VMIDMT_QUPV3_1, 442 5, 443 { 5 }, 444 1, 445 ACC_VMID_AP, 446 1, 447 ACC_VMIDMT_MEMTYPE_DEFAULT }, 448 { HAL_VMIDMT_QUPV3_1, 449 6, 450 { 6 }, 451 1, 452 ACC_VMID_AP, 453 1, 454 ACC_VMIDMT_MEMTYPE_DEFAULT }, 455 { HAL_VMIDMT_QUPV3_1, 456 7, 457 { 7 }, 458 1, 459 ACC_VMID_LPASS, 460 1, 461 ACC_VMIDMT_MEMTYPE_DEFAULT }, 462 { HAL_VMIDMT_QUPV3_1, 463 8, 464 { 8 }, 465 1, 466 ACC_VMID_LPASS, 467 1, 468 ACC_VMIDMT_MEMTYPE_DEFAULT }, 469 { HAL_VMIDMT_QUPV3_1, 470 11, 471 { 11 }, 472 1, 473 ACC_VMID_MSS, 474 1, 475 ACC_VMIDMT_MEMTYPE_DEFAULT }, 476 { HAL_VMIDMT_QUPV3_1, 477 16, 478 { 16 }, 479 1, 480 ACC_VMID_AP, 481 1, 482 ACC_VMIDMT_MEMTYPE_DEFAULT }, 483 { HAL_VMIDMT_QUPV3_1, 484 17, 485 { 17 }, 486 1, 487 ACC_VMID_AP, 488 1, 489 ACC_VMIDMT_MEMTYPE_DEFAULT }, 490 { HAL_VMIDMT_QUPV3_1, 491 18, 492 { 18 }, 493 1, 494 ACC_VMID_AP, 495 1, 496 ACC_VMIDMT_MEMTYPE_DEFAULT }, 497 { HAL_VMIDMT_QUPV3_1, 498 19, 499 { 19 }, 500 1, 501 ACC_VMID_AP, 502 1, 503 ACC_VMIDMT_MEMTYPE_DEFAULT }, 504 { HAL_VMIDMT_QUPV3_1, 505 20, 506 { 20 }, 507 1, 508 ACC_VMID_AP, 509 1, 510 ACC_VMIDMT_MEMTYPE_DEFAULT }, 511 { HAL_VMIDMT_QUPV3_1, 512 21, 513 { 21 }, 514 1, 515 ACC_VMID_AP, 516 1, 517 ACC_VMIDMT_MEMTYPE_DEFAULT }, 518 { HAL_VMIDMT_QUPV3_1, 519 22, 520 { 22 }, 521 1, 522 ACC_VMID_AP, 523 1, 524 ACC_VMIDMT_MEMTYPE_DEFAULT }, 525 { HAL_VMIDMT_QUPV3_1, 526 23, 527 { 23 }, 528 1, 529 ACC_VMID_AP, 530 1, 531 ACC_VMIDMT_MEMTYPE_DEFAULT }, 532 { HAL_VMIDMT_QUPV3_1, 533 32, 534 { 32 }, 535 1, 536 ACC_VMID_AP_GSI, 537 1, 538 ACC_VMIDMT_MEMTYPE_DEFAULT }, 539 { HAL_VMIDMT_QUPV3_1, 540 33, 541 { 33 }, 542 1, 543 ACC_VMID_AP_GSI, 544 1, 545 ACC_VMIDMT_MEMTYPE_DEFAULT }, 546 { HAL_VMIDMT_QUPV3_1, 547 34, 548 { 34 }, 549 1, 550 ACC_VMID_AP_GSI, 551 1, 552 ACC_VMIDMT_MEMTYPE_DEFAULT }, 553 { HAL_VMIDMT_QUPV3_1, 554 35, 555 { 35 }, 556 1, 557 ACC_VMID_AP_GSI, 558 1, 559 ACC_VMIDMT_MEMTYPE_DEFAULT }, 560 { HAL_VMIDMT_QUPV3_1, 561 36, 562 { 36 }, 563 1, 564 ACC_VMID_AP_GSI, 565 1, 566 ACC_VMIDMT_MEMTYPE_DEFAULT }, 567 { HAL_VMIDMT_QUPV3_1, 568 37, 569 { 37 }, 570 1, 571 ACC_VMID_AP_GSI, 572 1, 573 ACC_VMIDMT_MEMTYPE_DEFAULT }, 574 { HAL_VMIDMT_QUPV3_1, 575 38, 576 { 38 }, 577 1, 578 ACC_VMID_AP_GSI, 579 1, 580 ACC_VMIDMT_MEMTYPE_DEFAULT }, 581 }; 582 583 const uint32_t g_vmid_map_count = ARRAY_SIZE(g_vmid_map); 584 585 #define IPA_0_IPA_VMIDMT_SCR0_ADDR (0x01E30000) 586 #define QUPV3_0_VMIDMT_SCR0_ADDR (0x009C6000) 587 #define QUPV3_1_VMIDMT_SCR0_ADDR (0x00AC6000) 588 #define SSC_QUPV3_VMIDMT_SCR0_ADDR (0x037C6000) 589 590 struct hal_vmidmt_port_map g_vmidmt_info_cfg[] = { 591 { HAL_VMIDMT_IPA, 592 { IPA_0_IPA_VMIDMT_SCR0_ADDR, { 40, 0, 0, 0, 0, false } } }, 593 { HAL_VMIDMT_QUPV3_0, 594 { QUPV3_0_VMIDMT_SCR0_ADDR, { 48, 0, 0, 0, 0, false } } }, 595 { HAL_VMIDMT_QUPV3_1, 596 { QUPV3_1_VMIDMT_SCR0_ADDR, { 48, 0, 0, 0, 0, false } } }, 597 }; 598 599 const uint8_t g_vmidmt_info_cfg_count = ARRAY_SIZE(g_vmidmt_info_cfg); 600 601 /* 602 * Mapping of VMIDMT position in VMIDMT Error interrupt status register 603 * to corresponding HAL VMIDMT index 604 */ 605 struct vmidmt_err_pos_to_hal_map vmidmt_err_pos_to_hal_map 606 [ACC_VMIDMT_ERR_INT_STATUS_REG_NUM][ACC_VMIDMT_ERR_NUM_PER_REG] = { 607 { 608 { 0, HAL_VMIDMT_CRYPTO0_BAM }, 609 { 1, HAL_VMIDMT_AOP }, 610 { 2, HAL_VMIDMT_QUPV3_0 }, 611 { 3, HAL_VMIDMT_SSC_SDC }, 612 { 4, HAL_VMIDMT_QUPV3_1 }, 613 { 5, HAL_VMIDMT_QUPV3_2 }, 614 { 6, HAL_VMIDMT_SSC_QUPV3 }, 615 { 7, HAL_VMIDMT_LPASS_RXTX }, /* lpass_0_vmidmt_girpt */ 616 { 8, HAL_VMIDMT_LPASS_VA }, /* lpass_1_vmidmt_girpt */ 617 { 9, HAL_VMIDMT_IPA }, 618 { 10, HAL_VMIDMT_QDSS_VMIDETR }, 619 { 11, HAL_VMIDMT_QDSS_VMIDDAP }, 620 { 12, HAL_VMIDMT_COUNT }, /* spdm_vmidmt_girpt */ 621 { 13, HAL_VMIDMT_QSPI }, /* qspi_vmidmt_girpt */ 622 { 14, HAL_VMIDMT_LPASS_WSA }, /* lpass_2_vmidmt_girpt */ 623 { 15, HAL_VMIDMT_COUNT }, /* reserved */ 624 { 16, HAL_VMIDMT_COUNT }, /* reserved */ 625 { 17, HAL_VMIDMT_COUNT }, /* reserved */ 626 }, 627 }; 628