- Timestamp:
- Mar 27, 2025 1:08:29 PM (3 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168194
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r108764 r108767 187 187 static const char *gicReDistGetRegDescription(uint16_t offReg) 188 188 { 189 switch (offReg) 190 { 191 case GIC_REDIST_REG_CTLR_OFF: return "GICR_CTLR"; 192 case GIC_REDIST_REG_IIDR_OFF: return "GICR_IIDR"; 193 case GIC_REDIST_REG_TYPER_OFF: return "GICR_TYPER"; 194 case GIC_REDIST_REG_TYPER_AFFINITY_OFF: return "GICR_TYPER_AFF"; 195 case GIC_REDIST_REG_STATUSR_OFF: return "GICR_STATUSR"; 196 case GIC_REDIST_REG_WAKER_OFF: return "GICR_WAKER"; 197 case GIC_REDIST_REG_MPAMIDR_OFF: return "GICR_MPAMIDR"; 198 case GIC_REDIST_REG_PARTIDR_OFF: return "GICR_PARTIDR"; 199 case GIC_REDIST_REG_SETLPIR_OFF: return "GICR_SETLPIR"; 200 case GIC_REDIST_REG_CLRLPIR_OFF: return "GICR_CLRLPIR"; 201 case GIC_REDIST_REG_PROPBASER_OFF: return "GICR_PROPBASER"; 202 case GIC_REDIST_REG_PENDBASER_OFF: return "GICR_PENDBASER"; 203 case GIC_REDIST_REG_INVLPIR_OFF: return "GICR_INVLPIR"; 204 case GIC_REDIST_REG_INVALLR_OFF: return "GICR_INVALLR"; 205 case GIC_REDIST_REG_SYNCR_OFF: return "GICR_SYNCR"; 206 case GIC_REDIST_REG_PIDR2_OFF: return "GICR_PIDR2"; 207 default: 208 return "<UNKNOWN>"; 209 } 210 } 211 212 213 /** 214 * Gets the description of an SGI/PPI redistributor register given it's register 215 * offset. 216 * 217 * @returns The register description. 218 * @param offReg The redistributor register offset. 219 */ 220 static const char *gicReDistGetSgiPpiRegDescription(uint16_t offReg) 221 { 189 222 if (GIC_IS_REG_IN_RANGE(offReg, GIC_REDIST_SGI_PPI_REG_IGROUPR0_OFF, GIC_REDIST_SGI_PPI_REG_IGROUPRnE_RANGE_SIZE)) return "GICR_IGROUPn"; 190 223 if (GIC_IS_REG_IN_RANGE(offReg, GIC_REDIST_SGI_PPI_REG_ISENABLER0_OFF, GIC_REDIST_SGI_PPI_REG_ISENABLERnE_RANGE_SIZE)) return "GICR_ISENABLERn"; … … 196 229 if (GIC_IS_REG_IN_RANGE(offReg, GIC_REDIST_SGI_PPI_REG_IPRIORITYRn_OFF_START, GIC_REDIST_SGI_PPI_REG_IPRIORITYRnE_RANGE_SIZE)) return "GICR_IPREIORITYn"; 197 230 if (GIC_IS_REG_IN_RANGE(offReg, GIC_REDIST_SGI_PPI_REG_ICFGR0_OFF, GIC_REDIST_SGI_PPI_REG_ICFGRnE_RANGE_SIZE)) return "GICR_ICFGRn"; 231 if (GIC_IS_REG_IN_RANGE(offReg, GIC_REDIST_SGI_PPI_REG_INMIR0_OFF, GIC_REDIST_SGI_PPI_REG_INMIRnE_RANGE_SIZE)) return "GICR_INMIRn"; 198 232 switch (offReg) 199 233 { 200 case GIC_REDIST_REG_CTLR_OFF: return "GICR_CTLR"; 201 case GIC_REDIST_REG_IIDR_OFF: return "GICR_IIDR"; 202 case GIC_REDIST_REG_TYPER_OFF: return "GICR_TYPER"; 203 case GIC_REDIST_REG_TYPER_AFFINITY_OFF: return "GICR_TYPER_AFF"; 204 case GIC_REDIST_REG_STATUSR_OFF: return "GICR_STATUSR"; 205 case GIC_REDIST_REG_PIDR2_OFF: return "GICR_PIDR2"; 234 case GIC_REDIST_SGI_PPI_REG_NSACR_OFF: return "GICR_NSACR"; 235 case GIC_REDIST_SGI_PPI_REG_IGRPMODR0_OFF: return "GICR_IGRPMODR0"; 236 case GIC_REDIST_SGI_PPI_REG_IGRPMODR1E_OFF: return "GICR_IGRPMODR1E"; 237 case GIC_REDIST_SGI_PPI_REG_IGRPMODR2E_OFF: return "GICR_IGRPMODR2E"; 206 238 default: 207 239 return "<UNKNOWN>"; 208 240 } 209 241 } 210 #endif 242 #endif /* LOG_ENABLED */ 211 243 212 244 … … 2388 2420 } 2389 2421 2390 AssertReleaseMsgFailed(("offReg=%#x \n", offReg));2422 AssertReleaseMsgFailed(("offReg=%#x (%s)\n", offReg, gicReDistGetSgiPpiRegDescription(offReg))); 2391 2423 *puValue = 0; 2392 2424 return VINF_SUCCESS; … … 2415 2447 break; 2416 2448 default: 2417 AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX32\n", offReg, uValue));2449 AssertReleaseMsgFailed(("offReg=%#x (%s) uValue=%#RX32\n", offReg, gicReDistGetRegDescription(offReg), uValue)); 2418 2450 break; 2419 2451 } … … 2510 2542 } 2511 2543 2512 AssertReleaseMsgFailed(("offReg=%#RX16 \n", offReg));2544 AssertReleaseMsgFailed(("offReg=%#RX16 (%s)\n", offReg, gicReDistGetSgiPpiRegDescription(offReg))); 2513 2545 return VERR_INTERNAL_ERROR_2; 2514 2546 } … … 3021 3053 * 3022 3054 * @param pDevIns The device instance. 3055 * @remarks This is also called during VM reset, so do NOT remove values that are 3056 * cleared to zero! 3023 3057 */ 3024 3058 static void gicInit(PPDMDEVINS pDevIns) … … 3051 3085 * @param pDevIns The device instance. 3052 3086 * @param pVCpu The cross context virtual CPU structure. 3087 * @remarks This is also called during VM reset, so do NOT remove values that are 3088 * cleared to zero! 3053 3089 */ 3054 3090 static void gicInitCpu(PPDMDEVINS pDevIns, PVMCPUCC pVCpu) -
trunk/src/VBox/VMM/VMMAll/GITSAll.cpp
r108765 r108767 178 178 } 179 179 180 case GITS_CTRL_REG_CBASER_OFF: 181 *puValue = pGitsDev->uCmdBaseReg.s.Lo; 182 break; 183 184 case GITS_CTRL_REG_CBASER_OFF + 4: 185 *puValue = pGitsDev->uCmdBaseReg.s.Hi; 186 break; 187 180 188 default: 181 189 AssertReleaseMsgFailed(("offReg=%#x (%s)\n", offReg, gitsGetCtrlRegDescription(offReg))); … … 219 227 break; 220 228 229 case GITS_CTRL_REG_CBASER_OFF: 230 pGitsDev->uCmdBaseReg.s.Lo = uValue & RT_LO_U32(GITS_CTRL_REG_CBASER_RW_MASK); 231 break; 232 233 case GITS_CTRL_REG_CBASER_OFF + 4: 234 pGitsDev->uCmdBaseReg.s.Hi = uValue & RT_HI_U32(GITS_CTRL_REG_CBASER_RW_MASK); 235 break; 236 237 case GITS_CTRL_REG_CWRITER_OFF: 238 pGitsDev->uCmdWriteReg = uValue & RT_LO_U32(GITS_CTRL_REG_CWRITER_RW_MASK); 239 break; 240 241 case GITS_CTRL_REG_CWRITER_OFF + 4: 242 /* Upper 32-bits are all reserved, ignore write. Fedora 40 arm64 writes does this and probably other guests. */ 243 Assert(uValue == 0); 244 break; 245 221 246 default: 222 247 AssertReleaseMsgFailed(("offReg=%#x (%s) uValue=%#RX32\n", offReg, gitsGetCtrlRegDescription(offReg), uValue)); … … 244 269 pGitsDev->fQuiescent = true; 245 270 RT_ZERO(pGitsDev->aItsTableRegs); 271 pGitsDev->uCmdBaseReg.u = 0; 246 272 } 247 273 -
trunk/src/VBox/VMM/include/GITSInternal.h
r108762 r108767 88 88 /** The ITS table descriptor registers. */ 89 89 RTUINT64U aItsTableRegs[8]; 90 /** The ITS command queue base registers. */ 91 RTUINT64U uCmdBaseReg; 92 /** The ITS command write register. */ 93 uint32_t uCmdWriteReg; 94 /** The ITS command read register. */ 95 uint32_t uCmdReadReg; 90 96 /** @} */ 91 97 … … 107 113 typedef GITSDEV const *PCGITSDEV; 108 114 AssertCompileSizeAlignment(GITSDEV, 8); 115 AssertCompileMemberAlignment(GITSDEV, uArchRev, 8); 109 116 110 117 DECL_HIDDEN_CALLBACK(void) gitsInit(PGITSDEV pGitsDev);
Note:
See TracChangeset
for help on using the changeset viewer.