Lines Matching full:snapshot
690 * xe_hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
696 * Returns: a Xe HW Engine snapshot object that must be freed by the
702 struct xe_hw_engine_snapshot *snapshot; in xe_hw_engine_snapshot_capture() local
708 snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC); in xe_hw_engine_snapshot_capture()
710 if (!snapshot) in xe_hw_engine_snapshot_capture()
714 snapshot->name = kzalloc(len, GFP_ATOMIC); in xe_hw_engine_snapshot_capture()
715 if (snapshot->name) in xe_hw_engine_snapshot_capture()
716 strscpy(snapshot->name, hwe->name, len); in xe_hw_engine_snapshot_capture()
718 snapshot->class = hwe->class; in xe_hw_engine_snapshot_capture()
719 snapshot->logical_instance = hwe->logical_instance; in xe_hw_engine_snapshot_capture()
720 snapshot->forcewake.domain = hwe->domain; in xe_hw_engine_snapshot_capture()
721 snapshot->forcewake.ref = xe_force_wake_ref(gt_to_fw(hwe->gt), in xe_hw_engine_snapshot_capture()
723 snapshot->mmio_base = hwe->mmio_base; in xe_hw_engine_snapshot_capture()
725 snapshot->reg.ring_hwstam = hw_engine_mmio_read32(hwe, RING_HWSTAM(0)); in xe_hw_engine_snapshot_capture()
726 snapshot->reg.ring_hws_pga = hw_engine_mmio_read32(hwe, in xe_hw_engine_snapshot_capture()
728 snapshot->reg.ring_execlist_status_lo = in xe_hw_engine_snapshot_capture()
730 snapshot->reg.ring_execlist_status_hi = in xe_hw_engine_snapshot_capture()
732 snapshot->reg.ring_execlist_sq_contents_lo = in xe_hw_engine_snapshot_capture()
735 snapshot->reg.ring_execlist_sq_contents_hi = in xe_hw_engine_snapshot_capture()
738 snapshot->reg.ring_start = hw_engine_mmio_read32(hwe, RING_START(0)); in xe_hw_engine_snapshot_capture()
739 snapshot->reg.ring_head = in xe_hw_engine_snapshot_capture()
741 snapshot->reg.ring_tail = in xe_hw_engine_snapshot_capture()
743 snapshot->reg.ring_ctl = hw_engine_mmio_read32(hwe, RING_CTL(0)); in xe_hw_engine_snapshot_capture()
744 snapshot->reg.ring_mi_mode = in xe_hw_engine_snapshot_capture()
746 snapshot->reg.ring_mode = hw_engine_mmio_read32(hwe, RING_MODE(0)); in xe_hw_engine_snapshot_capture()
747 snapshot->reg.ring_imr = hw_engine_mmio_read32(hwe, RING_IMR(0)); in xe_hw_engine_snapshot_capture()
748 snapshot->reg.ring_esr = hw_engine_mmio_read32(hwe, RING_ESR(0)); in xe_hw_engine_snapshot_capture()
749 snapshot->reg.ring_emr = hw_engine_mmio_read32(hwe, RING_EMR(0)); in xe_hw_engine_snapshot_capture()
750 snapshot->reg.ring_eir = hw_engine_mmio_read32(hwe, RING_EIR(0)); in xe_hw_engine_snapshot_capture()
751 snapshot->reg.ring_acthd_udw = in xe_hw_engine_snapshot_capture()
753 snapshot->reg.ring_acthd = hw_engine_mmio_read32(hwe, RING_ACTHD(0)); in xe_hw_engine_snapshot_capture()
754 snapshot->reg.ring_bbaddr_udw = in xe_hw_engine_snapshot_capture()
756 snapshot->reg.ring_bbaddr = hw_engine_mmio_read32(hwe, RING_BBADDR(0)); in xe_hw_engine_snapshot_capture()
757 snapshot->reg.ring_dma_fadd_udw = in xe_hw_engine_snapshot_capture()
759 snapshot->reg.ring_dma_fadd = in xe_hw_engine_snapshot_capture()
761 snapshot->reg.ipehr = hw_engine_mmio_read32(hwe, RING_IPEHR(0)); in xe_hw_engine_snapshot_capture()
763 if (snapshot->class == XE_ENGINE_CLASS_COMPUTE) in xe_hw_engine_snapshot_capture()
764 snapshot->reg.rcu_mode = xe_mmio_read32(hwe->gt, RCU_MODE); in xe_hw_engine_snapshot_capture()
766 return snapshot; in xe_hw_engine_snapshot_capture()
770 * xe_hw_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
771 * @snapshot: Xe HW Engine snapshot object.
774 * This function prints out a given Xe HW Engine snapshot object.
776 void xe_hw_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, in xe_hw_engine_snapshot_print() argument
779 if (!snapshot) in xe_hw_engine_snapshot_print()
783 snapshot->name ? snapshot->name : "", in xe_hw_engine_snapshot_print()
784 snapshot->logical_instance); in xe_hw_engine_snapshot_print()
786 snapshot->forcewake.domain, snapshot->forcewake.ref); in xe_hw_engine_snapshot_print()
787 drm_printf(p, "\tHWSTAM: 0x%08x\n", snapshot->reg.ring_hwstam); in xe_hw_engine_snapshot_print()
788 drm_printf(p, "\tRING_HWS_PGA: 0x%08x\n", snapshot->reg.ring_hws_pga); in xe_hw_engine_snapshot_print()
790 snapshot->reg.ring_execlist_status_lo); in xe_hw_engine_snapshot_print()
792 snapshot->reg.ring_execlist_status_hi); in xe_hw_engine_snapshot_print()
794 snapshot->reg.ring_execlist_sq_contents_lo); in xe_hw_engine_snapshot_print()
796 snapshot->reg.ring_execlist_sq_contents_hi); in xe_hw_engine_snapshot_print()
797 drm_printf(p, "\tRING_START: 0x%08x\n", snapshot->reg.ring_start); in xe_hw_engine_snapshot_print()
798 drm_printf(p, "\tRING_HEAD: 0x%08x\n", snapshot->reg.ring_head); in xe_hw_engine_snapshot_print()
799 drm_printf(p, "\tRING_TAIL: 0x%08x\n", snapshot->reg.ring_tail); in xe_hw_engine_snapshot_print()
800 drm_printf(p, "\tRING_CTL: 0x%08x\n", snapshot->reg.ring_ctl); in xe_hw_engine_snapshot_print()
801 drm_printf(p, "\tRING_MI_MODE: 0x%08x\n", snapshot->reg.ring_mi_mode); in xe_hw_engine_snapshot_print()
803 snapshot->reg.ring_mode); in xe_hw_engine_snapshot_print()
804 drm_printf(p, "\tRING_IMR: 0x%08x\n", snapshot->reg.ring_imr); in xe_hw_engine_snapshot_print()
805 drm_printf(p, "\tRING_ESR: 0x%08x\n", snapshot->reg.ring_esr); in xe_hw_engine_snapshot_print()
806 drm_printf(p, "\tRING_EMR: 0x%08x\n", snapshot->reg.ring_emr); in xe_hw_engine_snapshot_print()
807 drm_printf(p, "\tRING_EIR: 0x%08x\n", snapshot->reg.ring_eir); in xe_hw_engine_snapshot_print()
808 drm_printf(p, "\tACTHD: 0x%08x_%08x\n", snapshot->reg.ring_acthd_udw, in xe_hw_engine_snapshot_print()
809 snapshot->reg.ring_acthd); in xe_hw_engine_snapshot_print()
810 drm_printf(p, "\tBBADDR: 0x%08x_%08x\n", snapshot->reg.ring_bbaddr_udw, in xe_hw_engine_snapshot_print()
811 snapshot->reg.ring_bbaddr); in xe_hw_engine_snapshot_print()
813 snapshot->reg.ring_dma_fadd_udw, in xe_hw_engine_snapshot_print()
814 snapshot->reg.ring_dma_fadd); in xe_hw_engine_snapshot_print()
815 drm_printf(p, "\tIPEHR: 0x%08x\n\n", snapshot->reg.ipehr); in xe_hw_engine_snapshot_print()
816 if (snapshot->class == XE_ENGINE_CLASS_COMPUTE) in xe_hw_engine_snapshot_print()
818 snapshot->reg.rcu_mode); in xe_hw_engine_snapshot_print()
822 * xe_hw_engine_snapshot_free - Free all allocated objects for a given snapshot.
823 * @snapshot: Xe HW Engine snapshot object.
828 void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot) in xe_hw_engine_snapshot_free() argument
830 if (!snapshot) in xe_hw_engine_snapshot_free()
833 kfree(snapshot->name); in xe_hw_engine_snapshot_free()
834 kfree(snapshot); in xe_hw_engine_snapshot_free()
842 * This function quickly capture a snapshot and immediately print it out.
846 struct xe_hw_engine_snapshot *snapshot; in xe_hw_engine_print() local
848 snapshot = xe_hw_engine_snapshot_capture(hwe); in xe_hw_engine_print()
849 xe_hw_engine_snapshot_print(snapshot, p); in xe_hw_engine_print()
850 xe_hw_engine_snapshot_free(snapshot); in xe_hw_engine_print()