HW:AGX - asfdrwe/asahi-linux-translations GitHub Wiki
2022/6/19æç¹ã®HW:AGXã®ç¿»èš³
ãªãæ°ã®AGXããŒã
èªè 泚æãããã«ãã©ãŽã³(dragon)ãããŸãããã€ã³ã¿ãŒåã®ãã©ãŽã³ãããããããŸã (蚳泚:ãããããã©ãŽã³ãšã¯éåžžã«åä»ãªãã®ãæå³ããŠããã®ããšæããŸã)ã
ãã®ææžã¯ã«ãŒãã«ãã©ã€ãã®èгç¹ããAGXã¢ãŒããã¯ãã£ã«çŠç¹ãåœãŠãŠããŸããã·ã§ãŒãããã¯ã¹ãã£ãµã³ããªã³ã°ã ãã€ãã©ã€ã³ã³ãã³ããšã³ã³ãŒããªã©ãçŽç²ã«ãŠãŒã¶ç©ºéã®é¢å¿äºã§ããåŽé¢ã«ã€ããŠã¯èª¬æããŸããã
æŠèŠ
AGX 㯠PowerVR ã«åŒ·ãã€ã³ã¹ãã€ã¢ãããïŒããã倧éšåã¯ãªãŒããŒã¡ã€ãã®ïŒ GPU ãã¶ã€ã³ã§ããOSã€ã³ã¿ãŒãã§ãŒã¹ã¯ã Appleãã¡ãŒã ãŠã§ã¢ãå®è¡ããASCïŒARM64ïŒã³ããã»ããµãŒãä»ããŠãã»ãŒæä»çã«ä»²ä»ãããŠããŸãããã¹ãŠã®éä¿¡ã¯ã å ±æã¡ã¢ãªãšããã€ãã®mailboxã®doorbellã¡ãã»ãŒãžãä»ããŠè¡ãããŸãããã¹ãŠã®ã¡ã¢ãªã¯ãç§ãã¡ãç¥ãéã ã³ããŒã¬ã³ãã§ãïŒç§ãã¡ã¯ãŸã ãã£ãã·ã¥ç®¡çåœä»€ã1ã€ã䜿ã£ãŠããŸãããããã¹ãŠããŸã æ©èœããŠããŸãïŒã
ç»é¢ã«äžè§åœ¢ã衚瀺ããããã«å¿ èŠãªã¬ã€ã€ãŒã¯ãããããæ¬¡ã®éãã§ã:
- UAT (MMU)
- ãã¡ãŒã ãŠã§ã¢åæå
- GPU ãã£ãã«
- GPU ã³ã³ãã¯ã¹ã
- ã¯ãŒã¯ãã¥ãŒ
- ã¯ãŒã¯ã¢ã€ãã
- ãã€ã¯ãã·ãŒã±ã³ã¹
- Tilerãããã¡ç®¡ç
- ã€ãã³ã管ç
- (ãã¹ãŠã®ãŠãŒã¶ç©ºéã®ãã®ããã)
UAT (Unified Address Translator, çµ±åã¢ãã¬ã¹å€æåš)
UATã¯AGXã®MMUã§ããåºæ¬çã«ã¯ARM64ã®MMUã§ãåäžã®ããŒãžããŒãã«ã䜿çšããŸããå®éãAGX ASCã¯æåéãUATã® ããŒãžããŒãã«ããŒã¹ãTTBR0/1ã¬ãžã¹ã¿ãšããŠæ§æããŠããŸããGPU ãããŒãžããŒããã·ã§ã³ããã®ä»ã®å±æ§ã ã©ã®ããã«è§£éãããã«ã€ããŠã¯ãCPU ã®è§£éãšç°ãªãç¹ããããããããŸããããããã¯ãŸã ã»ãšãã©æªè§£æã§ãã
GPUã®VA(蚳泚:Virtual Address,ä»®æ³ã¢ãã¬ã¹ã®ããšããš)ã¯40ãããã§ãæäžäœãããã¯ç¬Šå·æ¡åŒµãããŠ64ãããã«ãªããŸãã ARM64ãšåæ§ã«ãã«ãŒãã«/ãŠãŒã¶ãŒã¢ãã¬ã¹ç©ºéãåå²ãããŠããŸããããŒãžã¯åžžã«16Kã§ãã
GPUã³ã³ããã¹ãããŒãžããŒãã«ã®ããŒã¹ã¢ãã¬ã¹ãå«ããã°ããŒãã«ã§åºå®ãããã¡ã¢ãªããŒãžãååšããŸããæå€§16ã® ã³ã³ããã¹ããããïŒTODO: ãã®å¶éãæ¬ç©ã§ãã©ã€ãå¶åŸ¡ã§ãªããšå確èªïŒãããããã«ã«ãŒãã«/ãŠãŒã¶ããŒãžããŒãã«ã® ããã®2ã€ã®ããŒã¹ã¬ãžã¹ã¿ããããŸãã
macOS ã¯åžžã«ã³ã³ããã¹ã 0 ãã«ãŒãã«ã«ã®ã¿äœ¿çšãïŒã³ã³ããã¹ã 0 ã«ã¯ãŠãŒã¶ããŒãžã¯ãããŸããïŒããã¹ãŠã® ã³ã³ããã¹ãã§ããŒãžããŒãã«ã®ã«ãŒãã«åŽååãå ±æããŸãããŠãŒã¶ãŒVA空éã¯ãã³ã³ããã¹ãããšã«ãŠããŒã¯ã§ãã
ã«ãŒãã«ã®ã¢ãã¬ã¹ç©ºéã¯æåéã ASC ãã¡ãŒã ãŠã§ã¢ããããããŸãããã㯠ASC ã® CPU ããŒãžããŒãã«ã§ ããããã§ããããã¯ãã¡ãŒã ãŠã§ã¢ãããèªèº«ã§å¶åŸ¡ããåæåäžã«èšå®ããVAç¯å²ã«ãããŸãããã¹ãOSã¯ã¢ãã¬ã¹ç©ºéã® ãã®ååã®ããŒãžããŒãã«ã®æ®ãã«è²¬ä»»ãæã¡ãããã«ãã¹ãŠã®GPUå¶åŸ¡æ§é ãè¡ããŸãã
泚ïŒãã¡ãŒã ãŠã§ã¢ã¯ããŒãããŒãã«ãã£ãŠããŒããããæžã蟌ã¿ä¿è·ãããŸããããŒãžããŒãã«ããã€ãžã£ãã¯ã㊠AGXãã¡ãŒã ãŠã§ã¢ãå®å šã«ä¹ã£åãããšã¯ãçŸåšã®èšèšã§ãå¯èœã§ãããæããã«Appleã®æå³ãšæ¹åæ§ã¯ ASCãã¡ãŒã ãŠã§ã¢ãä¹ã£åãã«å¯ŸããŠåŒ·åãããããšãªã®ã§ãçŸæç¹ã§ã¯ç§ãã¡èªèº«ã®ãã¡ãŒã ãŠã§ã¢ã䜿ãããšã¯ èããŠããŸããããã®GPUãåäœãããããã«Appleã®ãã¡ãŒã ãŠã§ã¢ãšå¯Ÿè©±ããããšã¯ãé¿ããããªããšèããããŠããŸãã
TODO: UATã®TLBç¡å¹åãå ±æã¡ã¢ãªé¢ä¿ãšãã¡ãŒã ãŠã§ã¢ãçªããªã©
ãã¡ãŒã ãŠã§ã¢åæå
ãã¡ãŒã ãŠã§ã¢ãšã®éä¿¡ã¯ãä»ã®ASCãšå ±éã®RTKitãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããããã§ã¯ã«ããŒããŸãããã¡ã¢ãª/ãããã¡ç®¡çã ãã ç°ãªããŸãïŒä»ã®ASCã¯DART IOMMUãSARTã¢ãã¬ã¹ãã£ã«ã¿ã䜿çšããããå°çšSRAMã«ã®ã¿ã¢ã¯ã»ã¹å¯èœã§ãïŒã
GPUãåæåããããã«ãåæåããŒã¿æ§é ãžã®ãã€ã³ã¿ãå«ã1ã€ã®ã¡ãã»ãŒãžãéä¿¡ãããŸããããã¯ããå€ãã®ãã€ã³ã¿ãŒãæã€ è€éãªãã¹ããããããŒã¿æ§é ã§ã次ã®ãã®ãå«ãã§ããŸã:
- ãã£ãã«ãªã³ã°ãããã¡å¶åŸ¡é åãšãªã³ã°ãããã¡é åãžã®ãã€ã³ã¿
- DVFSç¶æ ãå«ã黿ºç®¡çããŒã¿
- æ§ã ãªïŒäž»ã«æªç¥ã®ïŒããŒã¿ãå«ãå ±æã¡ã¢ãªé å
- è²ç©ºéå€æä¿æ°
- MMIOãããã³ã°ãªã¹ãïŒASCãã¢ã¯ã»ã¹ããå¿ èŠã®ããMMIOé åããããã³ã°ããã®ã¯OSã®åœ¹å²ïŒ
- UATã¬ã€ã¢ãŠãæ å ±
- æ§ã ãªæªç¥ã®ãããã¡
ããŒã¿æ§é : initdata.pyãåç §
ãã£ã³ãã«
ãã¡ãŒã ãŠã§ã¢ãšã®éä¿¡ã¯ããã£ãã«ãªã³ã°ãããã¡ãä»ããŠè¡ãããŸãããã£ãã«ã¯ããªã³ã°ãããã¡ã®äžã«ã€ã³ã©ã€ã³ã§é ä¿¡ããã å°ããªåºå®ãµã€ãºã®ã¡ãã»ãŒãžãä¿æããŸããå¶åŸ¡æ§é äœã¯èªã¿èŸŒã¿/æžã蟌ã¿ãããã¡ã®ãã€ã³ã¿ãšãµã€ãºãæã¡ãGPU/CPU ãåžžã« ããŠã³ã¹ããªãããã«ãã£ãã·ã¥ã©ã€ã³ã«æŽåãããŸãããã£ãã«ã¯äž¡æ¹åã«ãããŸãã
ããŒã¿æ§é : channels.pyãåç §
CPU->GPU ãã£ã³ãã«
-
ã¯ãŒã¯ãã£ã³ãã«: 4ã€ã®ã°ã«ãŒã(0-3)ããããã3ã€ã®ãã£ã³ãã«ãGPUã¯ãŒã¯ã¿ã€ãããšã«1ã€
- TA (Tile Accelatorãé ç¹åŠç)
- 3D (3Dããã¯ã»ã«åŠç)
- CP (Compute)
TODO: ç°ãªããã£ã³ãã«ã«éãããã¯ãŒã¯ã«ã¯ããããäœããã®åªå é äœã¹ããŒã ãããã¯ã
-
ããã€ã¹å¶åŸ¡ãã£ãã«ãããã€ã¹å šäœã®ã¡ãã»ãŒãžçš (äŸ: GPU init ãšãããã黿ºç®¡çé¢é£ã®ãã®)
GPU->CPU ãã£ã³ãã«
- ã€ãã³ãïŒäœæ¥é¢é£ã®ã€ãã³ãéç¥
- äœæ¥å®äºãã©ã°ã€ãã³ã
- ãããã¯ã©ã®ã€ãã³ãã€ã³ããã¯ã¹ãçºç«ããŠãããã瀺ã128ãããã®é åãæã€
- ãã©ãŒã«ãéç¥
- GPUã®ãã©ãŒã«ãã¯Stop-the-Worldã®åŠçãšããŠã¯ããªã貧匱ã«èŠãããmacOS ã¯å®éã« GPU MMIO ã¬ãžã¹ã¿ãçŽæ¥ãã³ãããããã«ãªãããã¡ãŒã ãŠã§ã¢ã¯äœããã¹ããã«ã€ããŠãšãŠãç¡ç¥ã§ããããã«æããã
- äœæ¥å®äºãã©ã°ã€ãã³ã
- çµ±èšã¡ãã»ãŒãž
- ç§ãã¡ã¯ããããç¡èŠããããã¡ããªãŒããŒãããŒããå Žåããã¡ãŒã ãŠã§ã¢ã¯äžåºŠã ãæå¥ãèšãããç¡å®³
- ãã¡ãŒã ãŠã§ã¢ã®syslog
- ããã¯ãäœããã®çç±ã§è€æ°ã®ãµããã£ã³ãã«ãååšããå¶åŸ¡æ§é ãé£ç¶çã«ã¬ã€ã¢ãŠããããŠãããšããç¹ã§å¥åŠ
- æªç¥ã®ãã£ãã«(ãã¬ãŒã¹?)
GPU ã³ã³ããã¹ã
GPU ã³ã³ããã¹ãã¯ããã€ãã®å°ããªå ±ææ§é äœã«ãããã³ã°ãããããã€ã㯠ASC ã«ãã£ãŠçæãããŸããããã¯ã»ãšãã©ãŸã æªå®ã§ãã
ã¯ãŒã¯ãã¥ãŒ
ã¯ãŒã¯ãã¥ãŒã¯ç¹å®ã®ã¿ã€ãã®ã¯ãŒã¯ã¢ã€ãã ãä¿æããŸããéåžžãã³ã³ããã¹ãããšã«è€æ°ã®ã¯ãŒã¯ãã¥ãŒããããŸã (äŸãã°ã3D ã¬ã³ããªã³ã°ã«ã¯å°ãªããšã 3D ãš TA ãååš)ãã¯ãŒã¯ãã¥ãŒã¯ããã€ãã®æ§é äœã§è¡šçŸããã䞻㫠CPU ãåæåã GPU ã管çããã¡ã€ã³æ§é äœãšãã³ã³ããã¹ãæ§é äœãžã®ãã€ã³ã¿ããªã³ã°ãããã¡ããªã³ã°ãããã¡ ãã€ã³ã¿ãããã¯ãªã©ã§æ§æãããŠããŸãããªã³ã°ãããã¡ã¯åã ã®ã¢ã€ãã ãžã®ãã€ã³ã¿ã®é åã§ãïŒã€ã³ã©ã€ã³ã§ã¯ãªãïŒã
ã¯ãŒã¯ãã¥ãŒãåŠçããããã«ãOSã¯ã¯ãŒã¯ãã¥ãŒç®¡çæ§é äœãžã®ãã€ã³ã¿ãšææ°ã®ãªã³ã°ãããã¡æžã蟌ã¿ãã€ã³ã¿ãã¯ãŒã¯ ãã£ã³ãã«ã«éä¿¡ããŸããå ããŠäœæ¥å®äºãç¥ãããã€ãã³ãã€ã³ããã¯ã¹ãæ°ããã¯ãŒã¯ãã¥ãŒããã®æåã®éä¿¡ãã©ããã 瀺ããã©ã°ãæã€ã¡ãã»ãŒãžãéä¿¡ããŸãã
ããŒã¿æ§é : cmdqueue.py ãåç §
ã¯ãŒã¯ã¢ã€ãã
ã¯ãŒã¯ã¢ã€ãã 㯠GPU äœæ¥ãŸãã¯é¢é£ããæäœã衚ããŸãããããã¯ãç¹å®ã®ã¬ã€ã¢ãŠãã§åã蟌ãŸãããµãæ§é ãå«ã ããªã倧ããªãããã¡ã§ãïŒãããã®ãµãæ§é ã®ããã€ããžã®ãã€ã³ã¿ã¯ååšããŸããããã¡ãŒã ãŠã§ã¢ã¯ç¹å®ã®æ¹æ³ã§åã蟌ãããšã æ³å®ããŠããã®ã§ãã¬ã€ã¢ãŠãã¯å°éãããªããã°ãªããŸããïŒã
ããŒã¿æ§é : cmdqueue.py ãåç §
ãã€ã¯ãã·ãŒã±ã³ãµãŒ
ASCãã¡ãŒã ãŠã§ã¢ã¯ãäœæ¥ã³ãã³ãã®äžéšãšããŠããªãè€éãªãã¹ã¯ãªããããå®è¡ã§ããã³ãã³ãã·ãŒã±ã³ãµãŒãå«ãã§ããŸããã éåžžã¯æããã«åºæ¬çãªæ¹æ³ã§äœ¿çšãããŸãããããã®ã·ãŒã±ã³ã¹ã¯ãã¯ãŒã¯ã¢ã€ãã ã®äžéšãšããŠå®è¡ãããã³ãã³ãã®ãããã¡ã ããã¯ãããã®ã§ããå žåçãªã·ãŒã±ã³ã¹ã¯:
- éå§(3D/TA/CP)
- ã¿ã€ã ã¹ã¿ã³ãã®æžã蟌ã¿
- ã¢ã€ãã«åŸ ã¡
- ã¿ã€ã ã¹ã¿ã³ãã®æžã蟌ã¿
- çµäº(3D/TA/CP)
ããŒã¿æ§é : microsequence.py ãåç §
Tilerãããã¡ã®ç®¡ç
GPU Tiler ã¯é ç¹å±æ§ãšããªããã£ãããŒã¿ãæ ŒçŽãããããã¡ãå¿ èŠãšããŸããããã¯ãã©ã€ããæäŸããããã€ãã®åºå®ãµã€ãºã®ãããã¡ãšã GPU ãã¡ãŒã ãŠã§ã¢ãä»»æã«å²ãåœãŠãããŒãã«ãã£ãŠè¡ãããŸããããŒãã¯ãããã¡ãããŒãžã£ãªããžã§ã¯ããšããããæã ããã€ãã®ãããã¡ãä»ããŠç®¡çãããCPUã¯ãããã¯ïŒ4ããŒãžïŒãšããŒãžïŒå32Kã§VA空éïŒïŒïŒå ã§ã¢ã©ã€ã³ïŒã®ãªã¹ããæäŸããŸãã
Tilerãããã¡ãªãŒããŒãããŒ/äžéšä¿å/åããŒãåŠçã¯ãASCãã¡ãŒã ãŠã§ã¢ã«ãã£ãŠå®å šã«ç®¡çãããŠããŸãã
ããŒã¿æ§é : microsequence.py ã® BufferManager* ãåç §
ã€ãã³ã管ç
ã¯ãŒã¯å®äºã¯ãRAMäžã®32ãããã¯ãŒãã§ããã¹ã¿ã³ããªããžã§ã¯ããžã®å€ã®æžã蟌ã¿ã«ãã£ãŠéç¥ãããŸããéåžž0ã«åæåããã ã¯ãŒã¯ã¢ã€ãã ãåŠçããããã³ã«0x100ãã€å¢å ããŸããåã¯ãŒã¯ã¢ã€ãã ã¯ãã€ãã³ãIDïŒ0ã127ïŒãšã€ãã³ãç®¡çæ§é äœã«ã é¢é£ä»ããããŸãããã®æ§é äœã¯ã1人ã®ãŠãŒã¶ãŒã«å¯ŸããŠ3D/TAéã§å ±æãããããŒã¹ããªã¢å€ãšïŒïŒïŒã€ãã³ãæ°éŸå€ãå«ãã§ããŸãã éŸå€ã«éãããšã察å¿ããã€ãã³ãIDãCPUãžã®ã€ãã³ãã¡ãã»ãŒãžã§ã¢ãµãŒããããŸãããããã©ã®ããã«åäœãã«ãŠã³ããããã㯠ãŸã äžæã§ããšããã®ããåãæ§é ãããã¯ã¹ãããã§å¢å ããç°ãªãããªã¢ãªããžã§ã¯ãã䜿çšããç°ãªããã¥ãŒéã§å ±æãããŠããŸããã äž¡æ¹ã®ã€ãã³ããååŸããããã«éŸå€ã¯2ã§ãªããã°ãªããªãã®ã«ããããã1ãã€å¢å ããã ãã ããã§ã... æªç¢ºå®
3D ãã¬ãŒã ã®æç»
ãã¬ãŒã ãæç»ããã«ã¯ããŸã以äžã®ãã®ãå¿ èŠã§ãã
- 䜿çšããäžå¯Ÿã® 3D/TA ãã£ã³ãã«
- å®äºéç¥ã®ããã®ã€ãã³ãã€ã³ããã¯ã¹ã®ãã¢
- WorkQueueã®ãã¢
- UATã®ã³ã³ããã¹ãID
- å ±æã³ã³ããã¹ãæ§é äœ
- Tilerã®éçãããã¡
- Tiler ããŒããããŒãžã£ãšé¢é£ãããããã¡/ãªã¹ã
- 4ã€ã®ã¹ã¿ã³ããªããžã§ã¯ã
Tilerãããã¡
- (U) TVB ã¿ã€ã«é å (ã¿ã€ã«æ°ã«äŸå)
- (U) TVB ãªã¹ãé å (ã¿ã€ã«æ°ã«äŸå?)
- (U) TVB ããŒãã¡ã¿ããŒã¿ããã㯠(åºå®ãµã€ãº?)
- (K) TVB ããŒããããŒãžã£ & (U) ããŒã (ä»»æã®ãµã€ãº >= 3 128K ãããã¯ãCPU ã¯å°æ¥ã®ãã¬ãŒã ã«å¯ŸãããªãŒããŒãããŒã«å¯Ÿå¿ããŠåçã«èª¿æŽå¯èœ)
macOSã¯ããããã«ãŒãã«ã§å²ãåœãŠãŠããŸããã«ãŒãã«ã§ããããã§ããïŒãŠãŒã¶ãŒã¹ããŒã¹ã§ããããã§ããïŒãŠãŒã¶ãŒã¹ããŒã¹ã¯ å°ãªããšããµã€ãžã³ã°ãå¶åŸ¡ããå¿ èŠãããã®ã§ã¯ãªãã§ããããïŒã«ãŒãã«ã«æ±ºå®ããããããŸãã¯ããŠãŒã¶ã¹ããŒã¹ããããã¡ãããŒãžã£ã«ããŒãžã æäŸããããã«ããããšãã§ããŸããã«ãŒãã«ã¯å°ãªããšãããŒããããŒãžã£ã®æ§é ãæ±ãå¿ èŠããããŸãã
ã¹ã¿ã³ããªããžã§ã¯ããšã€ãã³ã管ç
128 åã®ã€ãã³ãã€ã³ããã¯ã¹ããããŸããã¬ã³ããŒã¯ 4 ã€ã®ã¹ã¿ã³ããªããžã§ã¯ããå¿ èŠãšããTA/3D ã®ããã«ãããã 2 ã€å¿ èŠã§ãã çŸåšã®çè«ã§ã¯ã1ã€ã®ã¹ã¿ã³ãã¯äœæ¥ã®å®äºã瀺ãããã1ã€ã¯å®äºã€ãã³ããCPUã«é ä¿¡ãããããšã瀺ããŸãïŒã¯ãŒã¯ãåãåãããïŒïŒ
TAã¯ãŒã¯
TAã¯ãŒã¯ã¯éåžžãã®ãããªæãã§ã:
ããŒããããŒãžã£ã®åæå
ååãŸãã¯ããŒããµã€ãºã倿Žããããšãã«å¿ èŠã§ããCPUã管çã¹ãã©ã¯ã¿ãååæåããããšãGPUã«äŒããŸãã
æªç¥ã®ã³ã³ããã¹ãé¢é£IDãå«ãŸããŸããããã¯ããŒããããŒãžã£ã®IDããïŒæ°ããïŒTAã¹ã¿ã³ãã®å€ãæž¡ãããŸãã
TAãå®è¡
泚ïŒããã¯ãã¹ãŠèŠçŽã§ããã倧éã®æªç¥/åºå®/ããžãã¯ãã³ããŒãç¡èŠ
- ãã®ãžã§ãã®UATã³ã³ããã¹ãID
- ã€ãã³ãç®¡çæ§é äœãã€ã³ã¿
- ããŒããããŒãžã£æ§é äœãã€ã³ã¿
- ããçš®ã®é¢é£ãããããã¡èšè¿°åãžã®ãã€ã³ã¿(?)
- æªç¥ã®ãããã¡ãžã®ãã€ã³ã¿(空)
- ã¿ã€ã ã¹ã¿ã³ã 1 ptr
- ã¿ã€ã ã¹ã¿ã³ã 2 ptr
- ã¿ã€ã ã¹ã¿ã³ã 3 ptr
- æªç¥ã®ãããã¡ 2 (空)
- çµã¿èŸŒã¿ã®æ§é äœ:
- Tilerãã©ã¡ãŒã¿(ã¿ã€ã«æ°ãªã©)
- TAã¯ãŒã¯æ§é äœ2
- TVB ã¿ã€ã«ããã ptr
- TVB ãªã¹ã ptr
- ãŠãŒã¶ãŒã¹ããŒã¹ããæž¡ããã3ã€ã®å°ããªãããã¡ïŒaryssaæ°ã¯ãããããdeflakeããšåŒã¶ïŒ
- ã³ãã³ããšã³ã³ãŒããŒptr (ã€ãŸããŠãŒã¶ãŒç©ºéããå®éã«å®è¡ãããgfxãã€ãã©ã€ã³)
- ãã€ãã©ã€ã³ãŠã£ã³ããŠã®ããŒã¹ïŒ32ãããã·ã§ãŒãã®ãã€ã³ã¿ã«äœ¿çšãããVAãžã®4GiBãŠã£ã³ããŠïŒ
- TAã¯ãŒã¯æ§é äœ3
- deflake ptrã®1ã€
- ãšã³ã³ãŒããŒIDïŒãŠããŒã¯ãªIDãGPUã¯ããããè§ŠããªãïŒ
- ãæªç¥ã®ãããã¡ãïŒãŠãŒã¶ãŒã¹ããŒã¹ããã®æ°åãå¢å ïŒ
- TAããªã¢1ã2ãžã®ãã€ã³ã¿
- å®äºæã«æžã蟌ãã¹ã¿ã³ãã®å€
- ããã€ãã®UUID
- ãã€ã¯ãã·ãŒã±ã³ã¹ãã€ã³ã¿
- å床å®äºã¹ã¿ã³ãå€(Completion stamp value again)
- 3Dã«å²ãåœãŠãããã€ãã³ãçªå·(TVBãªãŒããŒãããŒæã®TA/3D飿ºã®ãã?)
- TVBã¿ã€ã«é åã®åäœæãšãµã€ãº
TAãã€ã¯ãã·ãŒã±ã³ã¹
ãã€ã¯ãã·ãŒã±ã³ã¹ã¯TAã¯ãŒã¯ã«ãã£ãŠæã瀺ããã以äžã®ã³ãã³ããæã€ã
TAãéå§
- ã¿ã€ãªã³ã°ãã©ã¡ãŒã¿ ptr
- TAã¯ãŒã¯æ§é äœ2 ptr
- ããŒããããŒãžã£ ptr
- ãããã¡èšè¿°åãžã®ãã€ã³ã¿
- å ±æGPUã®initdataã®é åãžã®äœããã®ãã€ã³ã¿ïŒïŒïŒ
- ã¯ãŒã¯ãã¥ãŒå¶åŸ¡æ§é äœãžã®ãã€ã³ã¿
- UATã³ã³ããã¹ãID
- ãã®ä»ã®ã³ã³ããã¹ãé¢é£IDïŒããŒãmgr IDïŒïŒ
- TAã¯ãŒã¯æ§é äœ3 ptr
- Execute TAã®æªç¥ãããã¡ã®1ã€ãžã®ãã€ã³ã¿
- UUID
ã¿ã€ã ã¹ã¿ã³ã
- Flag=1
- å®è¡TAå ã®3ã€ã®ã¿ã€ã ã¹ã¿ã³ããã€ã³ã¿ãžã®ãã€ã³ã¿ã#1, #2, #2
- UUID
ã¢ã€ãã«ãåŸ ã€
- Args: 1, 0, 0
ã¿ã€ã ã¹ã¿ã³ã
- ãã©ã°=0
- å®è¡TAã§3ã€ã®ã¿ã€ã ã¹ã¿ã³ããã€ã³ã¿ãæãã#1, #2, #3 (éãã«æ³šæ)
- UUID
TAãçµäº
- ãã®ãããã¡ã®ãã®ãžã®ãã€ã³ã¿(Pointer to that buffer thing)
- ããŒããããŒãžã£ãžã®ãã€ã³ã¿
- TAéå§æãšåãinitdataãã€ã³ã¿
- äœæ¥ãã¥ãŒãžã®ãã€ã³ã¿
- UATã³ã³ããã¹ãID
- TAæ§é äœ3ãžã®ãã€ã³ã¿
- UUID
- TAã¹ã¿ã³ã2ãžã®ãã€ã³ã¿
- æžã蟌ãã¹ã¿ã³ãã®å€
- Start TA micro ã³ãã³ããŸã§ã®ãªãã»ããïŒããããéšåã¬ã³ããªã³ã°çšã«åéããããïŒïŒ
3Dã¯ãŒã¯
ããªã¢(ã¹ã¿ã³ãåŸ ã¡)
TA ãçµäºãããŸã§ 3D ããããã¯ããŸããéšåã¬ã³ããªã³ã°ãåäœãããé»éè¡ãäœãªã®ãã¯äžæã§ãã
- TAã¹ã¿ã³ããžã®ãã€ã³ã¿ #2
- åŸ æ©ããå€
- åã³åŸ æ©ããå€ïŒç¯å²ïŒïŒ
- TAã€ãã³ãã®ã€ã³ããã¯ã¹ïŒããããããã¯å®éã®ããŒã«ãéç¥ããŸããïŒ
- UUID
3Dãå®è¡
- ã€ãã³ãç®¡çæ§é äœãã€ã³ã¿
- ã¿ã€ã©ãŒããŒããããŒãžã£ãŒãã€ã³ã¿
- ãããã¡ãã£ã¹ã¯ãªãã¿ãŒãžã®ãã€ã³ã¿ãŒ
- æªç¥ã®ç©ºãããã¡
- TVBã¿ã€ã«é åãã€ã³ã¿
- ãã®ä»ã®æªç¥ã®ç©ºã®ãããã¡
- ã¿ã€ã ã¹ã¿ã³ã 1 ptr
- ã¿ã€ã ã¹ã¿ã³ã 2 ptr
- ã¿ã€ã ã¹ã¿ã³ã 3 ptr
- çµã¿èŸŒã¿ã®æ§é äœ
- 3Dã¯ãŒã¯æ§é äœ1
- ããã€ãã®ãããŒãïŒ
- ããã¹ã¯ãªã¢å€
- ã¹ãã³ã·ã«ã¯ãªã¢å€
- ããã¹ãã€ã¢ã¹é å ptr
- ã·ã¶ãŒé å ptr
- 3Dã¯ãŒã¯æ§é äœ1
(æªå®æ)
phireã®M1x GPU infodump
phire-gpu-infodump.md
ããããã«ç§»å
å šãŠã®äœæ¥ã¯MacOS 12.2æèŒã®T6000 14ã€ã³ãM1 Maxã§è¡ãããŸããã
ä»ã®ãšãããããã¯å€§éæã«ãã£ãŠGPUã«ã©ã®ããã«ã¯ãŒã¯ãéã蟌ãããèŠã€ããããã®ææŠã§ãã
UAT iommu (å¥å: Unified Address Translatorãçµ±åã¢ãã¬ã¹å€æåš)
m1n1/hw/uat.py ã«ååã«å®æããUATã®å®è£ ããããŸãã
4ã¬ãã«ã®ããŒãžããŒãã«ã§ã:
- L0: 2ãšã³ããª
- L1: 8ãšã³ããª
- L2: 2048ãšã³ããª
- L3: 2048ãšã³ããª
ããŒãžã¯16KBåºå®ãµã€ãºã§ãã
(å°ãå¥åŠãª) ã¬ã€ã¢ãŠãã«ãããå
±æ VM é å (0xf80_00000000
以äž) 㯠L0[1] ã«ã
ã³ã³ããã¹ãããšã®å²ãåœãŠã¯ãã¹ãŠ L0[0] ã«é
眮ãããæ°ããã³ã³ããã¹ãçšã« L0 ããŒãã«ãç°¡åã«æ§ç¯ã§ããŸãã
TTBRã¬ãžã¹ã¿ã¯èŠåœãããŸãããã¬ãžã¹ã¿ããããŸãããgfx-ascããã® iommu ãå®å šã«å¶åŸ¡ããŠããããã§ãã ãã©ã€ããŒã IO é åã®ããã«èªèº«ã®ããŒãžããŒãã«ãã»ããã¢ããããŸãã
ããã¯ã»ãã¥ãªãã£ã®æå³åãããããgfx-asc ã¯ãã¹ãŠã®ç©çããŒãžãšã(ãã¹ãŠã§ã¯ãªãã«ããŠã) ããã€ãã® MMIOã¬ãžã¹ã¿ã«ã¢ã¯ã»ã¹ã§ããŸããmacOSã«ãŒãã«ããã®ãããã¯ã¡ãã»ãŒãžã¯"microPPL"ãgfx-ascã³ããäžã§ åäœããŠããå¯èœæ§ã瀺åããŠãããmacOSã§ã®PPLãšé¡äŒŒããŠãããããã¯ããããããŒãžããŒãã«ã倿Žã§ããå¯äžã® éšåã§ãããã
macOS ã®ã«ãŒãã«ã«ã¯äŸ¿å©ãªã«ãŒãã«ãªãã·ã§ã³ãiouat_debug=1
ãããããã®ã¢ãã¬ã¹ç©ºéã®ãã¹ãŠã®å²ãåœãŠãšè§£æŸã
èšé²ããŸãã
PTEã®åœ¢åŒã®è©³çްã«ã€ããŠã¯ m1n1.hw.PTE ãåç §ããŠãã ããã
GPU ä»®æ³ã¢ãã¬ã¹ç©ºé
macOS ã¯(å°ãªããšãç§ã®ãã·ã³ã§ã¯)以äžã®ç¯å²ã® GPU VA ã䜿çšããŸã:
0x015_00000000
: ã»ãšãã©ã®ãŠãŒã¶ç©ºéå²ãåœãŠ
0x011_00000000
: ããã€ãã®è¿œå ã®ãŠãŒã¶ç©ºéå²ãåœãŠ
0x06f_ffff8000
: äžæãåäžããŒãžã®ã¿
0xf80_00000000
: ASC ã®ãã©ã€ããŒã VM é åãASC ã®ãã©ã€ããŒã VM é åã§ãèªåèªèº«ã§å²ãåœãŠãäž»ã«ASCãã¡ãŒã ãŠã§ã¢ãå«ãŸãã
ãã®é å㯠/arm-io/sgx/rtkit-private-vm-region-base
ãšåãäœçœ®
0xf80_10000000
: ASC ãã¡ãŒã ãŠã§ã¢ã«ãã£ãŠãããããã IO é åãASCã¡ãŒã«ããã¯ã¹ã¬ãžã¹ã¿ã®ã¿ãå«ãŸãã
0xfa0_00000000
: macos ã«ãŒãã«ãç©ãå²ãåœãŠãé å
0xfa0_10000000
: macOS ã«ãã£ãŠãããããã IO é åã
ASC é åãPMRG ã¬ãžã¹ã¿ãMCC ã¬ãžã¹ã¿ãžã®ãã€ã³ã¿ (ä»ã«ã?)
ãã€ã³ã¿ã¯ç¬Šå·æ¡åŒµãããããšãããã®ã§ã以äžã®ãããªç¯å²ã®ãã€ã³ã¿ãèŠãããããšããããŸãã
0xffffff80_00000000
ã 0xffffffa0_00000000
ãšãã£ãç¯å²ã®ãã€ã³ã¿ãèŠãããããšããããŸãããå®éã«ã¯40ããããããããŸããã
ããããå®éã«ã¯40ãããã®ã¢ãã¬ã¹ç©ºéãããããŸãããã«ãŒãã«ããã®ãã°ã¯éåžž44ããããå ±åããŠããã®ã§ã0xfa_000000
ãšããã¢ãã¬ã¹ã«ãªããŸãã
UATã¯ãã®ã¢ãã¬ã¹ç©ºéãå¶åŸ¡ããŠããŸãã
gfx-asc
ASC ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã¯ãŒã¯ãéã蟌ãããã®èªç¶ãªã€ã³ã¿ãŒãã§ãŒã¹ã®ããã«æãããŸãã
ããã©ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯è¡æçãªã»ã©å°ãªããã©ãã£ãã¯ãããããŸãããç¹ã«ç§ãèŠãŠããDCPãšæ¯ã¹ããšã
ãšã³ããã€ã³ã
0x0: æšæºçãªç®¡çãç¹ã«ããããªãšããã¯ãªã 0x1: æšæºçãªã¯ã©ãã·ã¥ãã°ã®ãšã³ããã€ã³ã 0x20ïŒãããPongãšåŒã¶ãéåžžã® "pongs"ãåä¿¡ 0x21ïŒãããKickãšåŒã¶
ã¯ã©ãã·ã¥ãã° ãšã³ããã€ã³ã
å šäœã®ãã©ãã£ãã¯:
RX 0x00120000000000
TX 0x00104fa00c388000
ãããŠãåæåçŽåŸã«çºç
0xfa00c388000 㯠GPU VA ã§ãåäžããŒãžã®ã¢ãã±ãŒã·ã§ã³ãæããŠããŸãã åæåäžã«ç¹°ãè¿ããããã¿ãŒã³ïŒ16KBã®0xefãã€ãã®ç¹°ãè¿ãïŒã§åãããããã®åŸäºåºŠãšè§ŠããŸããã
Pongãšã³ããã€ã³ã
ã¯ã©ãã·ã¥ãã°ã¯ãã®ãšã³ããã€ã³ãã "User01 "ãšåŒãã§ããŸãã
Pongã¡ãã»ãŒãžã®æ°ãããã¯ãšäžèŽããªãã®ã§ãããããååãééããã®ã§ãããããã£ãšå€ããããããªãã ãããã¯ãGFX ãã¡ãŒã ãŠã§ã¢ã CPU ã«ããŒãžããŒãã«ã«è§ŠããããšãäŒããŠããã®ãããããŸããã
ãŸãããã®ãšã³ããã€ã³ãã§ã¯ãInitãšã³ããã€ã³ãã®åŸã«ãããã«ããã€ãã®åæåãè¡ãããŸãã
ã¡ãã»ãŒãž
RX 0x00420000000000
: pongã§ããäžäœãããã0以å€ã«èšå®ããããšã¯ãªã
TX 0x00810fa0000b0000
: åæåãäžåºŠã ãéä¿¡
åæåããŒã¿ãšããŠãã«ãã€ã³ã¿ãéããšãã¯ã©ãã·ã¥ãã°äžã§æ¬¡ã®ãããªã¯ã©ãã·ã¥ãçºçããŸã:
GFX PANIC - Unable to grab init data from host - agx_background(2)
painclogã«ã¯æ¬¡ã®ã¢ã¯ãã£ããªã¿ã¹ã¯ã衚瀺ãããŸã:
- rtk_ep_work
- power
- agx_background
ãããŠããããã¯ã¯ agx_background ã§çºçããŸãã* ãã®ãšã³ããã€ã³ãã¯agx_backgroundã«å±ããŠãããšããããšã§ããããïŒ*
åæåããŒã¿ãæäŸãããåŸããã®ãšã³ããã€ã³ãã«ã¡ãã»ãŒãžãéã£ãŠã¯ã©ãã·ã¥ãããããšãã§ããŸããã§ããã
Pongåæå
ããã«ã¯GPU VAãå«ãŸããŠãããCPUã«ãã£ãŠäºåã«åããããããŒã¿æ§é ãæããŠããŸã:
>> chexdump32(gfx.uat.ioread(0, 0xfa0000b0000, 0x4000))
00000000 000b8000 ffffffa0 00000000 00000000 0c338000 ffffffa0 00020000 ffffffa0
00000020 000c0000 ffffffa0 030e4000 240e0e08 40000008 00000001 00000000 ffffc000
00000040 000003ff 00000000 00000070 190e0e08 40000800 00000001 00000000 ffffc000
00000060 000003ff fe000000 0000000f 0e0e0e08 40000800 00000001 00000000 ffffc000
00000080 000003ff 01ffc000 00000000 00000000 00000000 00000000 00000000 00000000
000000a0 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
000000c0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ãã®ControlStructãm1n1/trace/agx.pyã®ã³ãŒãã§åŒã³åºããŠã¿ãŸããã
åæååŸãCPUã¯ããã«è§Šããããšã¯ãããŸããã
unkptr_18 㯠asc-firmware ã䜿ãããŒããã¹ã¿ãã¯ã®ããã§ãïŒ
Kick
ã¯ã©ãã·ã¥ãã°ã¯ãã®ãšã³ããã€ã³ãã ãUser02ããšåŒãã§ããŸãã
ã¡ãã»ãŒãž:
0x83000000000000
: TAãã£ã³ãã«ãéä¿¡
0x83000000000001
: 3Dãã£ã³ãã«ãéä¿¡
0x83000000000002
: CLãã£ã³ãã«ãéä¿¡
0x83000000000010
: ãã¡ãŒã ãŠã§ã¢ã®kick
0x83000000000011
: æ©åšå¶åŸ¡
ãããã®Kickã¯ã¯ãŒã¯ã®éã蟌ã¿ãããªã¬ãŒããŠãããããããŸãããã5ãããã®ãšã³ããããŒãããªããããå®éã®æ å ±ã¯å ±æã¡ã¢ãªã®ã©ããã«ããã¯ãã§ãã ããããçŸæç¹ã§ã¯ãããã¯éã§å€æŽãããå ±æã¡ã¢ãªã¯èŠã€ãã£ãŠããŸããããŸããç§ã¯ãããééã£ãŠè¡šç€ºããå¯èœæ§ããããkickã¯å®éã«ã¯TLBã®ç¡å¹åã§ãã
ç¯å²å€ã®kickã§ 0x008300000000
ã¡ãã»ãŒãžãéã£ãŠãã¡ãã»ãŒãžã¿ã€ã 0x84 ãš 0x85ã®ã¯ã©ãã·ã¥ã¯èµ·ãããŸããã
ãã£ã³ãã«
ãã£ã³ãã« 0
0x8300000000
ã§äœ¿çš: TA ãã£ã³ãã«ãéä¿¡
00000000 0c000000 ffffffa0 00000002 00000000 00000001 00000000 0C3A8000 FFFFFA0 00000002 00000002 00000001 00000000 0C000000 FFFFFA0 00000003 00000000 00000000 00000000 0C3A8000 FFFFFA0 00000003 00000002 00000000 00000000 0C3A8000 FFFFFA0 00000004 00000002 00000000 00000000 0C3A8000 FFFFFA0 00000005 00000002 00000000
ãã£ã³ãã«1
0x83000000000001
ã§äœ¿çš: 3D ãã£ã³ãã«ãéã蟌ã¿
00000001 0C002CC0 FFFFFA0 00000002 00000001 00000001 00000001 0C3AACC0 FFFFFA0 00000002 00000003 00000001 00000001 0C002CC0 FFFFFA0 00000004 00000001 00000000 00000001 0C3AACC0 FFFFFA0 00000004 00000003 00000000 00000001 0C3AACC0 FFFFFA0 00000006 00000003 00000000 00000001 0C3AACC0 FFFFFA0 00000008 00000003 00000000 00000001 0C002CC0 FFFFFA0 00000006 00000001 00000000 00000001 0C3AACC0 FFFFFA0 0000000A 00000003 00000000
ãã£ã³ãã«12
æ©åšå¶åŸ¡ã§äœ¿çš - 0x83000000000011
ã«ãŒãã«ã¯ gfx-asc ãåæåããåã«ããã£ã³ãã« 12 ã«ã¡ãã»ãŒãžãå ¥ããŸãã
ã¡ãã»ãŒãžã¿ã€ã 0x19
次ã«
ã¡ãã»ãŒãžã¿ã€ã 0x23
ã¡ãã»ãŒãž 0x17:
ã¡ã¿ã«ãã¹ããèµ·åãããšãã«è¡šç€º
ãã£ã³ãã«13
GPU ãã¡ãŒã ãŠã§ã¢ããïŒ
転éã¯éåžžã® 0x30 ã§ã¯ãªããå®éã«ã¯ 0x38 ãã€ãã®é·ãã§ãã
# chan[13]->ptrB (0xffffffa000031f00..0xffffffa0000350af)
ffffffa000031f00 00000001 00000000 00000000 00000000 4b430000 534b5452 4b434154 | .................... CKRTKSTACK
ffffffa000031f20 534b5452 4b434154 534b5452 4b434154 534b5452 4b434154 00000001 00000002 | RTKSTACKRTKSTACKRTKSTACK...............FFFFFFA000031f40 534B5452 4B534154 534BRKSTACK......FFFFFFA000031f40
ffffa000031f40 00000000 00000000 ffff0000 00000080 00000000 000040e8 00000000 | .........................@.
FFFFFFA000031F60 00001180 00021300 000040E0 00000000 00000000 00000000 00000000 | ......@...............................................@........@....@....@...
ãã£ã³ãã«14
ãã£ã³ãã«12ãžã®è¿ä¿¡ïŒ
ã¡ãã»ãŒãžã¿ã€ã 0x4
ãã£ã³ãã«16
ã¿ã€ã ã¹ã¿ã³ããã£ã³ãã«ã
ããã¯gpu ãã¡ãŒã ãŠã§ã¢ (ãŸã㯠gpu èªäœ) ãæã£ãŠãããã¹ãŠã®æ©èœãŸãã¯ã¢ãŒãã®ã¿ã€ã ã¹ã¿ã³ãã衚瀺ããå¯èœæ§ããããŸãã
Type 0xc - äœãèµ·ãã£ãŠããªã
ã¿ã¹ã¯
crashlogsã«ãããšãgfx-ascã¯ä»¥äžã®ã¿ã¹ã¯ãå®è¡ããŠããŸãã
- rtk_ep_work
- power
- agx_background
- agx_recovery
- agx_interrupt
- agx_power
- agx_sample
/arm-io/sgx ã®æ§ã ãªå ±æã¡ã¢ãªç¯å²
å ±æã¡ã¢ãªã«é¢ããŠããããã¯æç¢ºãªãã®ã§ããibootã«ãã£ãŠå²ãåœãŠãããADTã«ãªã¹ãã¢ãããããŠããŸãã
gpu-region-base:
UATã®L0ããŒãã«ãå«ãåäžããŒãžãCPUã«ãã£ãŠå¶åŸ¡ãããŸãã
äžããããã³ã³ããã¹ãã® L0 㯠gpu-region-base + context * 0x10
ã§èŠã€ããããŸãã
gfx-shared-region-base:
åæåäžã«gfx-ascãèªãå²ãåœãŠãããã¹ãŠã®ãã©ã€ããŒããªããŒãžããŒãã«ãå«ãŸããŸãã
ã»ãšãã©ã¯gfx-ascã«ãã£ãŠå¶åŸ¡ãããããCPUã¯PPE L0[1][2]
ãå¶åŸ¡ããèªèº«ã®ã¡ã¢ãªå
ã®L2ããŒãã«ã«ãããæã瀺ããŸãã
L0[1]
ã®PTEã¯ãã®é åã®éå§ãæã瀺ãããã§ãã
gfx-handoff-base:
0x10ffb4000
: u64 - microPPL ããžãã¯å€ 0x4b1d000000000002
0x10ffb4008
: u64 - microPPL ããžãã¯å€ 0x4b1d000000000002
ãã®å€ãç Žå£ãããšã以äžã®ãããªãããã¯ãçºçããŸã:
panic(cpu 4 caller 0xfffffe0013c5d848): UAT PPL 0xfffffdf030af4160 (IOUAT):
Invalid microPPL magic value found in the handoff region.
Expected: 0x4b1d000000000002, Actual: 0x0
0x10ffb4018
: u32 - äžè¬ã« u8 ãšããŠèªã¿èŸŒã¿ - 0xffffff ã«åæå
0x10ffb4038
: u32 - ãã©ãã·ã¥ç¶æ
(äžè¬ã« 0 ã 2 ã«èšå®ããã)
CPUã¯ããã2ã«ã»ãããã以äžã®å€ãããã€ã倿ŽããåŸã0ã«æ»ããšãããã¿ãŒã³ãæã£ãŠããŸãã ããã¯ãã¥ãŒããã¯ã¹(mutex)ã§ã¯ãªãã§ããããïŒ
CPUãæ³å®ããŠããªããšãã«ããã2ã«å€æŽãããšã次ã®ããã«ãããã¯ãèµ·ãããŸãã
panic(cpu 0 caller 0xfffffe0013b6d8c4): UAT PPL 0xfffffdf0429d0160 (IOUAT):
Attempted to call prepareFWUnmap() before completing previous cache flush.
flush_state: 2 | start_addr: 0x150e540000 | size: 0x730000 | context_id: 1
0x10ffb4040
: u64 - CPU ã GPU ã® VA ãããã«ãšãã©ãæžã蟌ã
0x10ffb4048
: u64 - ãµã€ãºã¯ 0x28000 ã 0x8000 ã®ãããªäžžããããæ°åã«èšå®
0x10ffb4050
: u64 - CPU ã GPU ã® VA ãããã«ãšãã©ãæžã蟌ã
0x10ffb4058
: u64 - å¥ã®ãµã€ãºã
0x10ffb4098
: u64 - 4038 ãšåãããã«æ±ããããã40a0 ã«è§Šããå Žå
0x10ffb40a0
: u64 - CPU ã¯æã
ããã« GPU VA ãæžã蟌ããç§ã¯ã¡ã¿ã«ã¢ããªãå®è¡ããŠããæã«ããèŠãããšããªã
0x10ffb40a8
: u64 - ãµã€ãºïŒ
0x10ffb4620
: u32 - ?
0x10ffb4638
: u8 - 0x4038 ã倿Žãããåã«åžžã«ãã§ãã¯
CPUã¯ãã®ç¯å²ã«è峿·±ãGPU VAãã€ã³ã¿ãæžã蟌ã¿ãŸããç§ã¯é·ãéããããGPUãžã®ã¯ãŒã¯ã®éãèŸŒã¿æ¹æ³ã«éããªããšèããŠããŸããã ããããkickãpongãšã¯é¢ä¿ãªãããã§ããæã ã«ãŒãã«ã¯ãã€ã³ã¿ãäœåºŠãäžæžãããŠããã®éã«kickãpongããŒãã«ãªãããšããããŸãã ãŸãããã®é åã§äœã倿Žããã«äœçŸåãã®kickãè¡ãããšããããŸãã
ç§ã®çŸåšã®ä»®èª¬ã§ã¯ããã®é åã¯ããŒãžããŒãã«ã®æŽæ°ç¶æ³ã远跡ããããã«æä»çã«äœ¿çšãããŠããŸãã MacOSãšgfx-ascã®äž¡æ¹ããã¢ã¯ã»ã¹å¯èœã§ãããŒãžããŒãã«ã®æŽæ°ã®ããã«ã¢ã¯ã»ã¹ãåæãããããšãã§ããŸãã
次ã®ãããã¯ã¡ãã»ãŒãž `GFX PANIC - Host-mapped FW allocations are disabled, but FW only supports enabled``
(initdataã®0xa0ãã€ãã0ã«èšå®ãããšãã«è¡šç€º) ã¯ããã®ããã¡ãŒã ãŠã§ã¢ã«ããããŒãžããŒãã«ã®å¶åŸ¡ããæ©èœçã«æå¹ã§ãªãããšã瀺åããŠããŸãã
æ©èœçã«ãã®ãã¡ãŒã ãŠã§ã¢ã®ããŒãžã§ã³ã§å®éã«æå¹ã«ãªã£ãŠããªãããšã瀺åããŠããŸãã
éãè¯ããã°ããã®ãã³ããªãé åã«ã¯äœãæžã蟌ãŸãªãããã«ã§ãããããããŸããã
sgx ã¬ãžã¹ã¿
CPU ã¯ãããã®ã¬ãžã¹ã¿ã«æžã蟌ãŸããèªã¿èŸŒãã ãã§ãã
ãããã®ã¬ãžã¹ã¿ã¯åæåæã«äžåºŠã ãèªã¿èŸŒãŸããŸã:
0x4000 : u32 - ããŒãžã§ã³çªå·? 0x4042000
0x4010 : u32 - ããŒãžã§ã³çªå·? 0x30808
0x4014 : u32 - ããŒãžã§ã³çªå·? 0x40404
0x4018 : u32 - äžæ 0x1320200
0x401c : u32 - 0x204311
0x4008 : u32 - 0x40a06
0x1500 : u32 - 0xffffffff
0x1514 : u32 - 0x0
0x8024 : u32 = 0x43ffffe - (ããã¯ADTã®sgx/ttbat-phys-addr-baseã«é©å)
ãããã®ã¹ããŒã¿ã¹ã»ã¬ãžã¹ã¿ã¯ãCPUäžã®somethingã«ãã£ãŠç¶ç¶çã«ãã§ãã¯ãããŸãã
0x11008 : u32 - äœæ¥ãè¡ããããã³ã«åžžã«ã«ãŠã³ãã¢ãããããŸãã
0x1100c : u32 - éåžžã¯0ã§ãã
0x11010 : u32 - å¥ã®äœæ¥ã«ãŠã³ã¿ïŒ
0x11014 : u32 - 䜿çšé »åºŠ0
ASCã®PongãšKicksã«æ¯ã¹ããšããããã®ã¹ããŒã¿ã¹ã»ã¬ãžã¹ã¿ãèªãŸããã¿ã€ãã³ã°ã«å€ãã®é¢ä¿ã¯ãªãããã§ãã