- Timestamp:
- Mar 26, 2025 10:33:33 AM (3 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168176
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r108745 r108751 2033 2033 } 2034 2034 case GIC_DIST_REG_PIDR2_OFF: 2035 Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH _REV_GICV4);2036 *puValue = GIC_DIST_REG_PIDR2_ARCH _REV_SET(pGicDev->uArchRev);2035 Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4); 2036 *puValue = GIC_DIST_REG_PIDR2_ARCHREV_SET(pGicDev->uArchRev); 2037 2037 break; 2038 2038 case GIC_DIST_REG_IIDR_OFF: … … 2283 2283 break; 2284 2284 case GIC_REDIST_REG_PIDR2_OFF: 2285 Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH _REV_GICV4);2286 *puValue = GIC_REDIST_REG_PIDR2_ARCH _REV_SET(pGicDev->uArchRev);2285 Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4); 2286 *puValue = GIC_REDIST_REG_PIDR2_ARCHREV_SET(pGicDev->uArchRev); 2287 2287 break; 2288 2288 case GIC_REDIST_REG_CTLR_OFF: … … 3026 3026 LogFlowFunc(("\n")); 3027 3027 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 3028 PGITSDEV pGitsDev = &pGicDev->Gits;3029 3028 3030 3029 RT_ZERO(pGicDev->bmIntrGroup); … … 3041 3040 RT_ZERO(pGicDev->bmLpiPending); 3042 3041 RT_ZERO(pGicDev->abLpiConfig); 3042 3043 PGITSDEV pGitsDev = &pGicDev->Gits; 3043 3044 gitsInit(pGitsDev); 3044 3045 } … … 3242 3243 Assert(!(off & 0x3)); 3243 3244 Assert(cb == 4); RT_NOREF_PV(cb); 3244 3245 AssertReleaseFailed();3246 3245 3247 3246 PCGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PCGICDEV); -
trunk/src/VBox/VMM/VMMAll/GITSAll.cpp
r108743 r108751 34 34 35 35 #include <VBox/log.h> 36 #include <VBox/gic.h> 36 37 #include <iprt/errcore.h> /* VINF_SUCCESS */ 37 38 #include <iprt/string.h> /* RT_ZERO */ … … 104 105 *puValue = pGitsDev->fUnmappedMsiReporting; 105 106 break; 107 case GITS_CTRL_REG_PIDR2_OFF: 108 { 109 Assert(pGitsDev->uArchRev <= GITS_CTRL_REG_PIDR2_ARCHREV_GICV4); 110 uint8_t const uIdCodeDes1 = GIC_JEDEC_JEP10_DES_1(GIC_JEDEC_JEP106_IDENTIFICATION_CODE); 111 *puValue = RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_DES_1, uIdCodeDes1) 112 | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_JEDEC, 1) 113 | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_ARCHREV, pGitsDev->uArchRev); 114 break; 115 } 106 116 default: 107 AssertReleaseFailed(); 117 AssertReleaseMsgFailed(("offReg=%#x\n", offReg)); 118 break; 108 119 } 109 120 … … 115 126 { 116 127 RT_NOREF(pGitsDev, offReg, puValue); 128 AssertReleaseMsgFailed(("offReg=%#x\n", offReg)); 117 129 return VERR_NOT_IMPLEMENTED; 118 130 } … … 122 134 { 123 135 RT_NOREF(pGitsDev, offReg, uValue); 136 AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX32\n", offReg, uValue)); 124 137 return VERR_NOT_IMPLEMENTED; 125 138 } … … 129 142 { 130 143 RT_NOREF(pGitsDev, offReg, uValue); 144 AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX32\n", offReg, uValue)); 131 145 return VERR_NOT_IMPLEMENTED; 132 146 } -
trunk/src/VBox/VMM/VMMR3/GICR3.cpp
r108747 r108751 499 499 * Finally, perform sanity checks. 500 500 */ 501 if (pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH _REV_GICV4)501 if (pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4) 502 502 { /* likely */ } 503 503 else 504 504 return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Invalid uArchRev, got %u expected range [1,31]"), pGicDev->uArchRev, 505 GIC_DIST_REG_PIDR2_ARCH _REV_GICV1, GIC_DIST_REG_PIDR2_ARCH_REV_GICV4);505 GIC_DIST_REG_PIDR2_ARCHREV_GICV1, GIC_DIST_REG_PIDR2_ARCHREV_GICV4); 506 506 if (pGicDev->uMaxSpi - 1 < 31) 507 507 { /* likely */ } … … 611 611 612 612 /** @devcfgm{gic, ArchRev, uint8_t, 3} 613 * Configures the GIC architecture revision (GICD_PIDR2.ArchRev and614 * GICR_PIDR2.ArchRev).613 * Configures the GIC architecture revision (GICD_PIDR2.ArchRev, GICR_PIDR2.ArchRev 614 * and GITS_PIDR2.ArchRev). 615 615 * 616 * Currently we only support GICv3. */ 616 * Currently we only support GICv3 and the architecture revision reported is the 617 * same for both the GIC and the ITS. */ 617 618 int rc = pHlp->pfnCFGMQueryU8Def(pCfg, "ArchRev", &pGicDev->uArchRev, 3); 618 619 AssertLogRelRCReturn(rc, rc); 619 620 if (pGicDev->uArchRev == 3) 620 { /* likely */ }621 pGicDev->Gits.uArchRev = pGicDev->uArchRev; 621 622 else 622 623 return PDMDevHlpVMSetError(pDevIns, VERR_INVALID_PARAMETER, RT_SRC_POS, … … 696 697 * Configures whether non-maskable interrupts (NMIs) are supported 697 698 * (GICD_TYPER.NMI). */ 699 /** @todo NMIs are currently not implemented. */ 698 700 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Nmi", &pGicDev->fNmi, false); 699 701 AssertLogRelRCReturn(rc, rc); 700 702 701 /** @devcfgm{gic, Mbi, bool, true}703 /** @devcfgm{gic, Mbi, bool, false} 702 704 * Configures whether message-based interrupts (MBIs) are supported 703 * (GICD_TYPER.MBIS). */ 704 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Mbi", &pGicDev->fMbi, true); 705 * (GICD_TYPER.MBIS). 706 * 707 * Guests typically can't use MBIs without an ITS. */ 708 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Mbi", &pGicDev->fMbi, false); 705 709 AssertLogRelRCReturn(rc, rc); 706 710 … … 711 715 AssertLogRelRCReturn(rc, rc); 712 716 713 /** @devcfgm{gic, Lpi, bool, true}717 /** @devcfgm{gic, Lpi, bool, false} 714 718 * Configures whether physical LPIs are supported (GICD_TYPER.LPIS and 715 * GICR_TYPER.PLPIS). */ 716 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Lpi", &pGicDev->fLpi, true); 719 * GICR_TYPER.PLPIS). 720 * 721 * This currently requires an ITS as we do not support direction injection of 722 * LPIs as most guests do not use them anyway. */ 723 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Lpi", &pGicDev->fLpi, false); 717 724 AssertLogRelRCReturn(rc, rc); 718 725 -
trunk/src/VBox/VMM/include/GITSInternal.h
r108682 r108751 84 84 * @{ */ 85 85 /** @} */ 86 87 /** @name Configurables. 88 * @{ */ 89 /** The ITS architecture (GITS_PIDR2.ArchRev). */ 90 uint8_t uArchRev; 91 /** Padding. */ 92 uint8_t afPadding0[7]; 93 /** @} */ 86 94 } GITSDEV; 87 95 /** Pointer to a GITS device. */
Note:
See TracChangeset
for help on using the changeset viewer.