habanalabs: Read upper bits of trace buffer from RWPHI
authorTomer Tayar <ttayar@habana.ai>
Tue, 4 Jun 2019 11:35:30 +0000 (11:35 +0000)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 4 Jun 2019 12:13:09 +0000 (15:13 +0300)
The trace buffer address is 40 bits wide.
The end of the buffer is set in the RWP register (lower 32 bits), and in
the RWPHI register (upper 8 bits).
Currently only the lower 32 bits are read, and this patch fixes it and
concatenates the upper 8 bits to the output address.

Signed-off-by: Tomer Tayar <ttayar@habana.ai>
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/misc/habanalabs/goya/goya_coresight.c

index 39f62ce72660922128e54ec084fcefd59d9bb697..d7ec7ad84cc688342544f5aa4ba031d8d9424d7f 100644 (file)
@@ -425,8 +425,18 @@ static int goya_config_etr(struct hl_device *hdev,
                WREG32(base_reg + 0x28, 0);
                WREG32(base_reg + 0x304, 0);
 
-               if (params->output_size >= sizeof(u32))
-                       *(u32 *) params->output = RREG32(base_reg + 0x18);
+               if (params->output_size >= sizeof(u64)) {
+                       u32 rwp, rwphi;
+
+                       /*
+                        * The trace buffer address is 40 bits wide. The end of
+                        * the buffer is set in the RWP register (lower 32
+                        * bits), and in the RWPHI register (upper 8 bits).
+                        */
+                       rwp = RREG32(base_reg + 0x18);
+                       rwphi = RREG32(base_reg + 0x3c) & 0xff;
+                       *(u64 *) params->output = ((u64) rwphi << 32) | rwp;
+               }
        }
 
        return 0;