1 // 2 // Copyright (c) 2010-2022 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System.Linq; 8 using Antmicro.Renode.Core; 9 using Antmicro.Renode.Core.Structure.Registers; 10 using Antmicro.Renode.Peripherals.Bus; 11 12 namespace Antmicro.Renode.Peripherals.Miscellaneous 13 { 14 [AllowedTranslations(AllowedTranslation.ByteToDoubleWord | AllowedTranslation.WordToDoubleWord)] 15 public class AmbiqApollo4_PowerController : BasicDoubleWordPeripheral, IKnownSize 16 { AmbiqApollo4_PowerController(IMachine machine)17 public AmbiqApollo4_PowerController(IMachine machine) : base(machine) 18 { 19 DefineRegisters(); 20 } 21 22 public long Size => 0x250; 23 DefineRegisters()24 private void DefineRegisters() 25 { 26 Registers.MCUPerformanceControl.Define(this, 0x00000009) 27 .WithTag("MCUPERFREQ", 0, 2) 28 .WithTaggedFlag("MCUPERFACK", 2) 29 .WithTag("MCUPERFSTATUS", 3, 2) 30 .WithReservedBits(5, 27) 31 ; 32 33 Registers.DevicePowerEnable.Define(this, 0x00100000) 34 .WithTaggedFlag("PWRENIOS", 0) 35 .WithFlags(1, 4, out powerEnableFlagsIOM0_3, name: "PWRENIOMx") 36 .WithFlags(5, 4, out powerEnableFlagsIOM4_7, name: "PWRENIOMx") 37 .WithFlags(9, 4, out powerEnableFlagsUart0_3, name: "PWRENUARTx") 38 .WithFlag(13, out powerEnableFlagADC, name: "PWRENADC") 39 .WithTaggedFlag("PWRENMSPI0", 14) 40 .WithTaggedFlag("PWRENMSPI1", 15) 41 .WithTaggedFlag("PWRENMSPI2", 16) 42 .WithTaggedFlag("PWRENGFX", 17) 43 .WithTaggedFlag("PWRENDISP", 18) 44 .WithTaggedFlag("PWRENDISPPHY", 19) 45 .WithFlag(20, out powerEnableFlagCrypto, name: "PWRENCRYPTO") 46 .WithTaggedFlag("PWRENSDIO", 21) 47 .WithTaggedFlag("PWRENUSB", 22) 48 .WithTaggedFlag("PWRENUSBPHY", 23) 49 .WithTaggedFlag("PWRENDBG", 24) 50 .WithReservedBits(25, 7) 51 ; 52 53 Registers.DevicePowerStatus.Define(this) 54 .WithTaggedFlag("PWRSTIOS", 0) 55 .WithFlags(1, 4, FieldMode.Read, name: "PWRSTIOMx", valueProviderCallback: (_, __) => PowerStatusIOM0_3) 56 .WithFlags(5, 4, FieldMode.Read, name: "PWRSTIOMx", valueProviderCallback: (_, __) => PowerStatusIOM4_7) 57 .WithFlags(9, 4, FieldMode.Read, name: "PWRSTUARTx", valueProviderCallback: (_, __) => PowerStatusUart0_3) 58 .WithFlag(13, FieldMode.Read, name: "PWRSTADC", valueProviderCallback: _ => powerEnableFlagADC.Value) 59 .WithTaggedFlag("PWRSTMSPI0", 14) 60 .WithTaggedFlag("PWRSTMSPI1", 15) 61 .WithTaggedFlag("PWRSTMSPI2", 16) 62 .WithTaggedFlag("PWRSTGFX", 17) 63 .WithTaggedFlag("PWRSTDISP", 18) 64 .WithTaggedFlag("PWRSTDISPPHY", 19) 65 .WithFlag(20, FieldMode.Read, name: "PWRSTCRYPTO", valueProviderCallback: _ => powerEnableFlagCrypto.Value) 66 .WithTaggedFlag("PWRSTSDIO", 21) 67 .WithTaggedFlag("PWRSTUSB", 22) 68 .WithTaggedFlag("PWRSTUSBPHY", 23) 69 .WithTaggedFlag("PWRSTDBG", 24) 70 .WithReservedBits(25, 7) 71 ; 72 73 Registers.AudioSubsystemPowerEnable.Define(this) 74 .WithTaggedFlag("PWRENAUDREC", 0) 75 .WithTaggedFlag("PWRENAUDPB", 1) 76 .WithTaggedFlag("PWRENPDM0", 2) 77 .WithTaggedFlag("PWRENPDM1", 3) 78 .WithTaggedFlag("PWRENPDM2", 4) 79 .WithTaggedFlag("PWRENPDM3", 5) 80 .WithTaggedFlag("PWRENI2S0", 6) 81 .WithTaggedFlag("PWRENI2S1", 7) 82 .WithReservedBits(8, 2) 83 .WithTaggedFlag("PWRENAUDADC", 10) 84 .WithTaggedFlag("PWRENDSPA", 11) 85 .WithReservedBits(12, 20) 86 ; 87 88 Registers.AudioSubsystemPowerStatus.Define(this) 89 .WithTaggedFlag("PWRSTAUDREC", 0) 90 .WithTaggedFlag("PWRSTAUDPB", 1) 91 .WithTaggedFlag("PWRSTPDM0", 2) 92 .WithTaggedFlag("PWRSTPDM1", 3) 93 .WithTaggedFlag("PWRSTPDM2", 4) 94 .WithTaggedFlag("PWRSTPDM3", 5) 95 .WithTaggedFlag("PWRSTI2S0", 6) 96 .WithTaggedFlag("PWRSTI2S1", 7) 97 .WithReservedBits(8, 2) 98 .WithTaggedFlag("PWRSTAUDADC", 10) 99 .WithTaggedFlag("PWRSTDSPA", 11) 100 .WithReservedBits(12, 20) 101 ; 102 103 Registers.MemoryPowerEnable.Define(this, 0x0000003F) 104 .WithTag("PWRENDTCM", 0, 3) 105 .WithTaggedFlag("PWRENNVM0", 3) 106 .WithTaggedFlag("PWRENCACHEB0", 4) 107 .WithTaggedFlag("PWRENCACHEB2", 5) 108 .WithReservedBits(6, 26) 109 ; 110 111 Registers.MemoryPowerStatus.Define(this, 0x0000003F) 112 .WithTag("PWRSTDTCM", 0, 3) 113 .WithTaggedFlag("PWRSTNVM0", 3) 114 .WithTaggedFlag("PWRSTCACHEB0", 4) 115 .WithTaggedFlag("PWRSTCACHEB2", 5) 116 .WithReservedBits(6, 26) 117 ; 118 119 Registers.MemoryRetConfiguration.Define(this, 0x00000008) 120 .WithTag("DTCMPWDSLP", 0, 3) 121 .WithTaggedFlag("NVM0PWDSLP", 3) 122 .WithTaggedFlag("CACHEPWDSLP", 4) 123 .WithReservedBits(5, 27) 124 ; 125 126 Registers.SystemPowerStatus.Define(this, 0x0000000F) 127 .WithTaggedFlag("PWRSTMCUL", 0) 128 .WithTaggedFlag("PWRSTMCUH", 1) 129 .WithTaggedFlag("PWRSTDSP0H", 2) 130 .WithTaggedFlag("PWRSTDSP1H", 3) 131 .WithReservedBits(4, 25) 132 .WithTaggedFlag("CORESLEEP", 29) 133 .WithTaggedFlag("COREDEEPSLEEP", 30) 134 .WithTaggedFlag("SYSDEEPSLEEP", 31) 135 ; 136 137 Registers.SharedSRAMPowerEnable.Define(this) 138 .WithTag("PWRENSSRAM", 0, 2) 139 .WithReservedBits(2, 30) 140 ; 141 142 Registers.SharedSRAMPowerStatus.Define(this, 0x00000003) 143 .WithTag("SSRAMPWRST", 0, 2) 144 .WithReservedBits(2, 30) 145 ; 146 147 Registers.SharedSRAMRetConfiguration.Define(this, 0x000003FC) 148 .WithTag("SSRAMPWDSLP", 0, 2) 149 .WithTag("SSRAMACTMCU", 2, 2) 150 .WithTag("SSRAMACTDSP", 4, 2) 151 .WithTag("SSRAMACTGFX", 6, 2) 152 .WithTag("SSRAMACTDISP", 8, 2) 153 .WithReservedBits(10, 22) 154 ; 155 156 Registers.DevicePowerEventEnable.Define(this) 157 .WithTaggedFlag("MCULEVEN", 0) 158 .WithTaggedFlag("MCUHEVEN", 1) 159 .WithTaggedFlag("HCPAEVEN", 2) 160 .WithTaggedFlag("HCPBEVEN", 3) 161 .WithTaggedFlag("HCPCEVEN", 4) 162 .WithTaggedFlag("ADCEVEN", 5) 163 .WithTaggedFlag("MSPIEVEN", 6) 164 .WithTaggedFlag("AUDEVEN", 7) 165 .WithReservedBits(8, 24) 166 ; 167 168 Registers.MemoryPowerEventEnable.Define(this) 169 .WithTag("DTCMEN", 0, 3) 170 .WithTaggedFlag("NVM0EN", 3) 171 .WithTaggedFlag("CACHEB0EN", 4) 172 .WithTaggedFlag("CACHEB2EN", 5) 173 .WithReservedBits(6, 26) 174 ; 175 176 Registers.MultimediaSystemOverride.Define(this, 0x00000FFC) 177 .WithTaggedFlag("MMSOVRMCULDISP", 0) 178 .WithTaggedFlag("MMSOVRMCULGFX", 1) 179 .WithTaggedFlag("MMSOVRSSRAMDISP", 2) 180 .WithTaggedFlag("MMSOVRSSRAMGFX", 3) 181 .WithTag("MMSOVRDSPRAMRETDISP", 4, 2) 182 .WithTag("MMSOVRDSPRAMRETGFX", 6, 2) 183 .WithTag("MMSOVRSSRAMRETDISP", 8, 2) 184 .WithTag("MMSOVRSSRAMRETGFX", 10, 2) 185 .WithReservedBits(12, 20) 186 ; 187 188 Registers.DSP0PowerAndResetControls.Define(this, 0x00000008) 189 .WithTag("DSP0PCMRSTDLY", 0, 4) 190 .WithTaggedFlag("DSP0PCMRSTOR", 4) 191 .WithReservedBits(5, 27) 192 ; 193 194 Registers.DSP0PerformanceControl.Define(this, 0x00000009) 195 .WithTag("DSP0PERFREQ", 0, 2) 196 .WithTaggedFlag("DSP0PERFACK", 2) 197 .WithTag("DSP0PERFSTATUS", 3, 2) 198 .WithReservedBits(5, 27) 199 ; 200 201 Registers.DSP0MemoryPowerEnable.Define(this) 202 .WithTaggedFlag("PWRENDSP0RAM", 0) 203 .WithTaggedFlag("PWRENDSP0ICACHE", 1) 204 .WithReservedBits(2, 30) 205 ; 206 207 Registers.DSP0MemoryPowerStatus.Define(this) 208 .WithTaggedFlag("PWRSTDSP0RAM", 0) 209 .WithTaggedFlag("PWRSTDSP0ICACHE", 1) 210 .WithReservedBits(2, 30) 211 ; 212 213 Registers.DSP0MemoryRetConfiguration.Define(this) 214 .WithTaggedFlag("RAMPWDDSP0OFF", 0) 215 .WithTaggedFlag("DSP0RAMACTMCU", 1) 216 .WithTaggedFlag("ICACHEPWDDSP0OFF", 2) 217 .WithTaggedFlag("DSP0RAMACTDISP", 3) 218 .WithTaggedFlag("DSP0RAMACTGFX", 4) 219 .WithReservedBits(5, 27) 220 ; 221 222 Registers.DSP1PowerAndResetControls.Define(this, 0x00000008) 223 .WithTag("DSP1PCMRSTDLY", 0, 4) 224 .WithTaggedFlag("DSP1PCMRSTOR", 4) 225 .WithReservedBits(5, 27) 226 ; 227 228 Registers.DSP1PerformanceControl.Define(this, 0x00000009) 229 .WithTag("DSP1PERFREQ", 0, 2) 230 .WithTaggedFlag("DSP1PERFACK", 2) 231 .WithTag("DSP1PERFSTATUS", 3, 2) 232 .WithReservedBits(5, 27) 233 ; 234 235 Registers.DSP1MemoryPowerEnable.Define(this) 236 .WithTaggedFlag("PWRENDSP1RAM", 0) 237 .WithTaggedFlag("PWRENDSP1ICACHE", 1) 238 .WithReservedBits(2, 30) 239 ; 240 241 Registers.DSP1MemoryPowerStatus.Define(this) 242 .WithTaggedFlag("PWRSTDSP1RAM", 0) 243 .WithTaggedFlag("PWRSTDSP1ICACHE", 1) 244 .WithReservedBits(2, 30) 245 ; 246 247 Registers.DSP1MemoryRetConfiguration.Define(this) 248 .WithTaggedFlag("RAMPWDDSP1OFF", 0) 249 .WithTaggedFlag("DSP1RAMACTMCU", 1) 250 .WithTaggedFlag("ICACHEPWDDSP1OFF", 2) 251 .WithTaggedFlag("DSP1RAMACTDISP", 3) 252 .WithTaggedFlag("DSP1RAMACTGFX", 4) 253 .WithReservedBits(5, 27) 254 ; 255 256 Registers.VoltageRegulatorsControl.Define(this) 257 .WithTaggedFlag("SIMOBUCKEN", 0) 258 .WithReservedBits(1, 31) 259 ; 260 261 Registers.VoltageRegulatorsLegacyLowPowerOverrides.Define(this) 262 .WithTaggedFlag("IGNOREIOS", 0) 263 .WithTaggedFlag("IGNOREHCPA", 1) 264 .WithTaggedFlag("IGNOREHCPB", 2) 265 .WithTaggedFlag("IGNOREHCPC", 3) 266 .WithTaggedFlag("IGNOREHCPD", 4) 267 .WithTaggedFlag("IGNOREHCPE", 5) 268 .WithTaggedFlag("IGNOREMSPI", 6) 269 .WithTaggedFlag("IGNOREGFX", 7) 270 .WithTaggedFlag("IGNOREDISP", 8) 271 .WithTaggedFlag("IGNOREDISPPHY", 9) 272 .WithTaggedFlag("IGNORECRYPTO", 10) 273 .WithTaggedFlag("IGNORESDIO", 11) 274 .WithTaggedFlag("IGNOREUSB", 12) 275 .WithTaggedFlag("IGNOREUSBPHY", 13) 276 .WithTaggedFlag("IGNOREAUD", 14) 277 .WithTaggedFlag("IGNOREDSPA", 15) 278 .WithTaggedFlag("IGNOREDSP0H", 16) 279 .WithTaggedFlag("IGNOREDSP1H", 17) 280 .WithTaggedFlag("IGNOREDBG", 18) 281 .WithReservedBits(19, 13) 282 ; 283 284 Registers.VoltageRegulatorsStatus.Define(this) 285 .WithTag("CORELDOST", 0, 2) 286 .WithTag("MEMLDOST", 2, 2) 287 .WithTag("SIMOBUCKST", 4, 2) 288 .WithReservedBits(6, 26) 289 ; 290 291 Registers.ULPLowPowerWeights0.Define(this) 292 .WithTag("WTULPMCU", 0, 4) 293 .WithTag("WTULPDSP0", 4, 4) 294 .WithTag("WTULPDSP1", 8, 4) 295 .WithTag("WTULPIOS", 12, 4) 296 .WithTag("WTULPUART0", 16, 4) 297 .WithTag("WTULPUART1", 20, 4) 298 .WithTag("WTULPUART2", 24, 4) 299 .WithTag("WTULPUART3", 28, 4) 300 ; 301 302 Registers.ULPLowPowerWeights1.Define(this) 303 .WithTag("WTULPIOM0", 0, 4) 304 .WithTag("WTULPIOM1", 4, 4) 305 .WithTag("WTULPIOM2", 8, 4) 306 .WithTag("WTULPIOM3", 12, 4) 307 .WithTag("WTULPIOM4", 16, 4) 308 .WithTag("WTULPIOM5", 20, 4) 309 .WithTag("WTULPIOM6", 24, 4) 310 .WithTag("WTULPIOM7", 28, 4) 311 ; 312 313 Registers.ULPLowPowerWeights2.Define(this) 314 .WithTag("WTULPADC", 0, 4) 315 .WithTag("WTULPMSPI0", 4, 4) 316 .WithTag("WTULPMSPI1", 8, 4) 317 .WithTag("WTULPGFX", 12, 4) 318 .WithTag("WTULPDISP", 16, 4) 319 .WithTag("WTULPCRYPTO", 20, 4) 320 .WithTag("WTULPSDIO", 24, 4) 321 .WithTag("WTULPUSB", 28, 4) 322 ; 323 324 Registers.ULPLowPowerWeights3.Define(this) 325 .WithTag("WTULPDSPA", 0, 4) 326 .WithTag("WTULPDBG", 4, 4) 327 .WithTag("WTULPAUDREC", 8, 4) 328 .WithTag("WTULPAUDPB", 12, 4) 329 .WithTag("WTULPAUDADC", 16, 4) 330 .WithReservedBits(20, 8) 331 .WithTag("WTULPMSPI2", 28, 4) 332 ; 333 334 Registers.ULPLowPowerWeights4.Define(this) 335 .WithTag("WTULPI2S0", 0, 4) 336 .WithTag("WTULPI2S1", 4, 4) 337 .WithReservedBits(8, 8) 338 .WithTag("WTULPPDM0", 16, 4) 339 .WithTag("WTULPPDM1", 20, 4) 340 .WithTag("WTULPPDM2", 24, 4) 341 .WithTag("WTULPPDM3", 28, 4) 342 ; 343 344 Registers.ULPLowPowerWeights5.Define(this) 345 .WithTag("WTULPDISPPHY", 0, 4) 346 .WithTag("WTULPUSBPHY", 4, 4) 347 .WithReservedBits(8, 24) 348 ; 349 350 Registers.LPLowPowerWeights0.Define(this) 351 .WithTag("WTLPMCU", 0, 4) 352 .WithTag("WTLPDSP0", 4, 4) 353 .WithTag("WTLPDSP1", 8, 4) 354 .WithTag("WTLPIOS", 12, 4) 355 .WithTag("WTLPUART0", 16, 4) 356 .WithTag("WTLPUART1", 20, 4) 357 .WithTag("WTLPUART2", 24, 4) 358 .WithTag("WTLPUART3", 28, 4) 359 ; 360 361 Registers.LPLowPowerWeights1.Define(this) 362 .WithTag("WTLPIOM0", 0, 4) 363 .WithTag("WTLPIOM1", 4, 4) 364 .WithTag("WTLPIOM2", 8, 4) 365 .WithTag("WTLPIOM3", 12, 4) 366 .WithTag("WTLPIOM4", 16, 4) 367 .WithTag("WTLPIOM5", 20, 4) 368 .WithTag("WTLPIOM6", 24, 4) 369 .WithTag("WTLPIOM7", 28, 4) 370 ; 371 372 Registers.LPLowPowerWeights2.Define(this) 373 .WithTag("WTLPADC", 0, 4) 374 .WithTag("WTLPMSPI0", 4, 4) 375 .WithTag("WTLPMSPI1", 8, 4) 376 .WithTag("WTLPGFX", 12, 4) 377 .WithTag("WTLPDISP", 16, 4) 378 .WithTag("WTLPCRYPTO", 20, 4) 379 .WithTag("WTLPSDIO", 24, 4) 380 .WithTag("WTLPUSB", 28, 4) 381 ; 382 383 Registers.LPLowPowerWeights3.Define(this) 384 .WithTag("WTLPDSPA", 0, 4) 385 .WithTag("WTLPDBG", 4, 4) 386 .WithTag("WTLPAUDREC", 8, 4) 387 .WithTag("WTLPAUDPB", 12, 4) 388 .WithTag("WTLPAUDADC", 16, 4) 389 .WithReservedBits(20, 8) 390 .WithTag("WTLPMSPI2", 28, 4) 391 ; 392 393 Registers.LPLowPowerWeights4.Define(this) 394 .WithTag("WTLPI2S0", 0, 4) 395 .WithTag("WTLPI2S1", 4, 4) 396 .WithReservedBits(8, 8) 397 .WithTag("WTLPPDM0", 16, 4) 398 .WithTag("WTLPPDM1", 20, 4) 399 .WithTag("WTLPPDM2", 24, 4) 400 .WithTag("WTLPPDM3", 28, 4) 401 ; 402 403 Registers.LPLowPowerWeights5.Define(this) 404 .WithTag("WTLPDISPPHY", 0, 4) 405 .WithTag("WTLPUSBPHY", 4, 4) 406 .WithReservedBits(8, 24) 407 ; 408 409 Registers.HPLowPowerWeights0.Define(this) 410 .WithTag("WTHPMCU", 0, 4) 411 .WithTag("WTHPDSP0", 4, 4) 412 .WithTag("WTHPDSP1", 8, 4) 413 .WithTag("WTHPIOS", 12, 4) 414 .WithTag("WTHPUART0", 16, 4) 415 .WithTag("WTHPUART1", 20, 4) 416 .WithTag("WTHPUART2", 24, 4) 417 .WithTag("WTHPUART3", 28, 4) 418 ; 419 420 Registers.HPLowPowerWeights1.Define(this) 421 .WithTag("WTHPIOM0", 0, 4) 422 .WithTag("WTHPIOM1", 4, 4) 423 .WithTag("WTHPIOM2", 8, 4) 424 .WithTag("WTHPIOM3", 12, 4) 425 .WithTag("WTHPIOM4", 16, 4) 426 .WithTag("WTHPIOM5", 20, 4) 427 .WithTag("WTHPIOM6", 24, 4) 428 .WithTag("WTHPIOM7", 28, 4) 429 ; 430 431 Registers.HPLowPowerWeights2.Define(this) 432 .WithTag("WTHPADC", 0, 4) 433 .WithTag("WTHPMSPI0", 4, 4) 434 .WithTag("WTHPMSPI1", 8, 4) 435 .WithTag("WTHPGFX", 12, 4) 436 .WithTag("WTHPDISP", 16, 4) 437 .WithTag("WTHPCRYPTO", 20, 4) 438 .WithTag("WTHPSDIO", 24, 4) 439 .WithTag("WTHPUSB", 28, 4) 440 ; 441 442 Registers.HPLowPowerWeights3.Define(this) 443 .WithTag("WTHPDSPA", 0, 4) 444 .WithTag("WTHPDBG", 4, 4) 445 .WithTag("WTHPAUDREC", 8, 4) 446 .WithTag("WTHPAUDPB", 12, 4) 447 .WithTag("WTHPAUDADC", 16, 4) 448 .WithReservedBits(20, 8) 449 .WithTag("WTHPMSPI2", 28, 4) 450 ; 451 452 Registers.HPLowPowerWeights4.Define(this) 453 .WithTag("WTHPI2S0", 0, 4) 454 .WithTag("WTHPI2S1", 4, 4) 455 .WithReservedBits(8, 8) 456 .WithTag("WTHPPDM0", 16, 4) 457 .WithTag("WTHPPDM1", 20, 4) 458 .WithTag("WTHPPDM2", 24, 4) 459 .WithTag("WTHPPDM3", 28, 4) 460 ; 461 462 Registers.HPLowPowerWeights5.Define(this) 463 .WithTag("WTHPDISPPHY", 0, 4) 464 .WithTag("WTHPUSBPHY", 4, 4) 465 .WithReservedBits(8, 24) 466 ; 467 468 Registers.SleepLowPowerWeights.Define(this) 469 .WithTag("WTDSMCU", 0, 4) 470 .WithReservedBits(4, 28) 471 ; 472 473 Registers.VoltageRegulatorsDemotionThreshold.Define(this) 474 .WithTag("VRDEMOTIONTHR", 0, 32) 475 ; 476 477 Registers.SRAMControl.Define(this) 478 .WithReservedBits(0, 1) 479 .WithTaggedFlag("SRAMCLKGATE", 1) 480 .WithTaggedFlag("SRAMMASTERCLKGATE", 2) 481 .WithReservedBits(3, 5) 482 .WithTag("SRAMLIGHTSLEEP", 8, 12) 483 .WithReservedBits(20, 12) 484 ; 485 486 Registers.ADCPowerStatus.Define(this, 0x0000003F) 487 .WithTaggedFlag("ADCPWD", 0) 488 .WithTaggedFlag("BGTPWD", 1) 489 .WithTaggedFlag("VPTATPWD", 2) 490 .WithTaggedFlag("VBATPWD", 3) 491 .WithTaggedFlag("REFKEEPPWD", 4) 492 .WithTaggedFlag("REFBUFPWD", 5) 493 .WithReservedBits(6, 26) 494 ; 495 496 Registers.AudioADCPowerStatus.Define(this, 0x0000003F) 497 .WithTaggedFlag("AUDADCPWD", 0) 498 .WithTaggedFlag("AUDBGTPWD", 1) 499 .WithTaggedFlag("AUDVPTATPWD", 2) 500 .WithTaggedFlag("AUDVBATPWD", 3) 501 .WithTaggedFlag("AUDREFKEEPPWD", 4) 502 .WithTaggedFlag("AUDREFBUFPWD", 5) 503 .WithReservedBits(6, 26) 504 ; 505 506 Registers.EnergyMonitorControl.Define(this, 0x000000FF) 507 .WithTag("FREEZE", 0, 8) 508 .WithTag("CLEAR", 8, 8) 509 .WithReservedBits(16, 16) 510 ; 511 512 Registers.EnergyMonitorModeSelect0.Define(this) 513 .WithTag("EMONSEL0", 0, 8) 514 .WithReservedBits(8, 24) 515 ; 516 517 Registers.EnergyMonitorModeSelect1.Define(this) 518 .WithTag("EMONSEL1", 0, 8) 519 .WithReservedBits(8, 24) 520 ; 521 522 Registers.EnergyMonitorModeSelect2.Define(this) 523 .WithTag("EMONSEL2", 0, 8) 524 .WithReservedBits(8, 24) 525 ; 526 527 Registers.EnergyMonitorModeSelect3.Define(this) 528 .WithTag("EMONSEL3", 0, 8) 529 .WithReservedBits(8, 24) 530 ; 531 532 Registers.EnergyMonitorModeSelect4.Define(this) 533 .WithTag("EMONSEL4", 0, 8) 534 .WithReservedBits(8, 24) 535 ; 536 537 Registers.EnergyMonitorModeSelect5.Define(this) 538 .WithTag("EMONSEL5", 0, 8) 539 .WithReservedBits(8, 24) 540 ; 541 542 Registers.EnergyMonitorModeSelect6.Define(this) 543 .WithTag("EMONSEL6", 0, 8) 544 .WithReservedBits(8, 24) 545 ; 546 547 Registers.EnergyMonitorModeSelect7.Define(this) 548 .WithTag("EMONSEL7", 0, 8) 549 .WithReservedBits(8, 24) 550 ; 551 552 Registers.EnergyMonitorCount0.Define(this) 553 .WithTag("EMONCOUNT0", 0, 32) 554 ; 555 556 Registers.EnergyMonitorCount1.Define(this) 557 .WithTag("EMONCOUNT1", 0, 32) 558 ; 559 560 Registers.EnergyMonitorCount2.Define(this) 561 .WithTag("EMONCOUNT2", 0, 32) 562 ; 563 564 Registers.EnergyMonitorCount3.Define(this) 565 .WithTag("EMONCOUNT3", 0, 32) 566 ; 567 568 Registers.EnergyMonitorCount4.Define(this) 569 .WithTag("EMONCOUNT4", 0, 32) 570 ; 571 572 Registers.EnergyMonitorCount5.Define(this) 573 .WithTag("EMONCOUNT5", 0, 32) 574 ; 575 576 Registers.EnergyMonitorCount6.Define(this) 577 .WithTag("EMONCOUNT6", 0, 32) 578 ; 579 580 Registers.EnergyMonitorCount7.Define(this) 581 .WithTag("EMONCOUNT7", 0, 32) 582 ; 583 584 Registers.EnergyMonitorStatus.Define(this) 585 .WithTaggedFlag("EMONOVERFLOW0", 0) 586 .WithTaggedFlag("EMONOVERFLOW1", 1) 587 .WithTaggedFlag("EMONOVERFLOW2", 2) 588 .WithTaggedFlag("EMONOVERFLOW3", 3) 589 .WithTaggedFlag("EMONOVERFLOW4", 4) 590 .WithTaggedFlag("EMONOVERFLOW5", 5) 591 .WithTaggedFlag("EMONOVERFLOW6", 6) 592 .WithTaggedFlag("EMONOVERFLOW7", 7) 593 .WithReservedBits(8, 24) 594 ; 595 } 596 597 // Some modules share a single power domain, e.g. enabling IOM1 powers on all IOM0..3 modules. 598 private bool PowerStatusIOM0_3 => powerEnableFlagsIOM0_3.Any(flag => flag.Value); 599 private bool PowerStatusIOM4_7 => powerEnableFlagsIOM4_7.Any(flag => flag.Value); 600 private bool PowerStatusUart0_3 => powerEnableFlagsUart0_3.Any(flag => flag.Value); 601 602 private IFlagRegisterField powerEnableFlagADC; 603 private IFlagRegisterField powerEnableFlagCrypto; 604 private IFlagRegisterField[] powerEnableFlagsIOM0_3; 605 private IFlagRegisterField[] powerEnableFlagsIOM4_7; 606 private IFlagRegisterField[] powerEnableFlagsUart0_3; 607 608 private enum Registers : long 609 { 610 MCUPerformanceControl = 0x0, 611 DevicePowerEnable = 0x4, 612 DevicePowerStatus = 0x8, 613 AudioSubsystemPowerEnable = 0xC, 614 AudioSubsystemPowerStatus = 0x10, 615 MemoryPowerEnable = 0x14, 616 MemoryPowerStatus = 0x18, 617 MemoryRetConfiguration = 0x1C, 618 SystemPowerStatus = 0x20, 619 SharedSRAMPowerEnable = 0x24, 620 SharedSRAMPowerStatus = 0x28, 621 SharedSRAMRetConfiguration = 0x2C, 622 DevicePowerEventEnable = 0x30, 623 MemoryPowerEventEnable = 0x34, 624 MultimediaSystemOverride = 0x40, 625 DSP0PowerAndResetControls = 0x50, 626 DSP0PerformanceControl = 0x54, 627 DSP0MemoryPowerEnable = 0x58, 628 DSP0MemoryPowerStatus = 0x5C, 629 DSP0MemoryRetConfiguration = 0x60, 630 DSP1PowerAndResetControls = 0x70, 631 DSP1PerformanceControl = 0x74, 632 DSP1MemoryPowerEnable = 0x78, 633 DSP1MemoryPowerStatus = 0x7C, 634 DSP1MemoryRetConfiguration = 0x80, 635 VoltageRegulatorsControl = 0x100, 636 VoltageRegulatorsLegacyLowPowerOverrides = 0x104, 637 VoltageRegulatorsStatus = 0x108, 638 ULPLowPowerWeights0 = 0x140, 639 ULPLowPowerWeights1 = 0x144, 640 ULPLowPowerWeights2 = 0x148, 641 ULPLowPowerWeights3 = 0x14C, 642 ULPLowPowerWeights4 = 0x150, 643 ULPLowPowerWeights5 = 0x154, 644 LPLowPowerWeights0 = 0x158, 645 LPLowPowerWeights1 = 0x15C, 646 LPLowPowerWeights2 = 0x160, 647 LPLowPowerWeights3 = 0x164, 648 LPLowPowerWeights4 = 0x168, 649 LPLowPowerWeights5 = 0x16C, 650 HPLowPowerWeights0 = 0x170, 651 HPLowPowerWeights1 = 0x174, 652 HPLowPowerWeights2 = 0x178, 653 HPLowPowerWeights3 = 0x17C, 654 HPLowPowerWeights4 = 0x180, 655 HPLowPowerWeights5 = 0x184, 656 SleepLowPowerWeights = 0x188, 657 VoltageRegulatorsDemotionThreshold = 0x18C, 658 SRAMControl = 0x190, 659 ADCPowerStatus = 0x194, 660 AudioADCPowerStatus = 0x198, 661 EnergyMonitorControl = 0x200, 662 EnergyMonitorModeSelect0 = 0x204, 663 EnergyMonitorModeSelect1 = 0x208, 664 EnergyMonitorModeSelect2 = 0x20C, 665 EnergyMonitorModeSelect3 = 0x210, 666 EnergyMonitorModeSelect4 = 0x214, 667 EnergyMonitorModeSelect5 = 0x218, 668 EnergyMonitorModeSelect6 = 0x21C, 669 EnergyMonitorModeSelect7 = 0x220, 670 EnergyMonitorCount0 = 0x228, 671 EnergyMonitorCount1 = 0x22C, 672 EnergyMonitorCount2 = 0x230, 673 EnergyMonitorCount3 = 0x234, 674 EnergyMonitorCount4 = 0x238, 675 EnergyMonitorCount5 = 0x23C, 676 EnergyMonitorCount6 = 0x240, 677 EnergyMonitorCount7 = 0x244, 678 EnergyMonitorStatus = 0x24C, 679 } 680 } 681 } 682