| 669 | |
| 670 | @dataclass |
| 671 | class AMDQueueDesc: |
| 672 | ring: MMIOInterface |
| 673 | read_ptr: MMIOInterface |
| 674 | write_ptr: MMIOInterface |
| 675 | doorbell: MMIOInterface |
| 676 | put_value: int = 0 |
| 677 | params: tuple|None = None # setup_ring params for recovery |
| 678 | |
| 679 | def signal_doorbell(self, dev, doorbell_value:int|None=None): |
| 680 | try: |
| 681 | self.write_ptr[0] = self.put_value |
| 682 | |
| 683 | # Ensure all prior writes are visible to the GPU. |
| 684 | System.memory_barrier() |
| 685 | |
| 686 | # Flush hdp if queue is in dev mem. |
| 687 | if dev.is_am() and not dev.is_usb(): dev.iface.dev_impl.gmc.flush_hdp() |
| 688 | self.doorbell[0] = self.put_value if doorbell_value is None else doorbell_value |
| 689 | except Exception as e: |
| 690 | dev.error_state = e |
| 691 | raise |
| 692 | |
| 693 | class KFDIface: |
| 694 | kfd:FileIOInterface|None = None |
no outgoing calls
no test coverage detected
searching dependent graphs…