accel/habanalabs: expose rotator mask to userspace
authorOfir Bitton <obitton@habana.ai>
Mon, 13 Mar 2023 20:30:23 +0000 (22:30 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 20 Mar 2023 15:35:34 +0000 (17:35 +0200)
All engine masks are exposed to user, make sure user gets the
correct rotator enabled mask in gaudi2.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/accel/habanalabs/common/habanalabs.h
drivers/accel/habanalabs/common/habanalabs_ioctl.c
drivers/accel/habanalabs/gaudi2/gaudi2.c
include/uapi/drm/habanalabs_accel.h

index 98e6d98..c01677e 100644 (file)
@@ -609,8 +609,8 @@ struct hl_hints_range {
  * @cb_pool_cb_cnt: number of CBs in the CB pool.
  * @cb_pool_cb_size: size of each CB in the CB pool.
  * @decoder_enabled_mask: which decoders are enabled.
- * @decoder_binning_mask: which decoders are binned, 0 means usable and 1
- *                        means binned (at most one binned decoder per dcore).
+ * @decoder_binning_mask: which decoders are binned, 0 means usable and 1 means binned.
+ * @rotator_enabled_mask: which rotators are enabled.
  * @edma_enabled_mask: which EDMAs are enabled.
  * @edma_binning_mask: which EDMAs are binned, 0 means usable and 1 means
  *                     binned (at most one binned DMA).
@@ -760,6 +760,7 @@ struct asic_fixed_properties {
        u32                             cb_pool_cb_size;
        u32                             decoder_enabled_mask;
        u32                             decoder_binning_mask;
+       u32                             rotator_enabled_mask;
        u32                             edma_enabled_mask;
        u32                             edma_binning_mask;
        u32                             max_pending_cs;
index 81e0260..203ee85 100644 (file)
@@ -108,6 +108,7 @@ static int hw_ip_info(struct hl_device *hdev, struct hl_info_args *args)
        hw_ip.server_type = prop->server_type;
        hw_ip.security_enabled = prop->fw_security_enabled;
        hw_ip.revision_id = hdev->pdev->revision;
+       hw_ip.rotator_enabled_mask = prop->rotator_enabled_mask;
        hw_ip.engine_core_interrupt_reg_addr = prop->engine_core_interrupt_reg_addr;
        hw_ip.reserved_dram_size = dram_kmd_size;
 
index 57c94f9..9f6dbc0 100644 (file)
@@ -2315,6 +2315,8 @@ static int gaudi2_set_fixed_properties(struct hl_device *hdev)
 
        prop->hints_range_reservation = true;
 
+       prop->rotator_enabled_mask = BIT(NUM_OF_ROT) - 1;
+
        if (hdev->pldm)
                prop->mmu_pgt_size = 0x800000; /* 8MB */
        else
index e43688d..c139aab 100644 (file)
@@ -886,6 +886,8 @@ enum hl_server_type {
  * @device_mem_alloc_default_page_size: default page size used in device memory allocation.
  * @revision_id: PCI revision ID of the ASIC.
  * @tpc_interrupt_id: interrupt id for TPC to use in order to raise events towards the host.
+ * @rotator_enabled_mask: Bit-mask that represents which rotators are enabled.
+ *                        Relevant for Gaudi3 and later.
  * @engine_core_interrupt_reg_addr: interrupt register address for engine core to use
  *                                  in order to raise events toward FW.
  * @reserved_dram_size: DRAM size reserved for driver and firmware.
@@ -926,7 +928,7 @@ struct hl_info_hw_ip_info {
        __u8 reserved7;
        __u8 revision_id;
        __u16 tpc_interrupt_id;
-       __u32 reserved8;
+       __u32 rotator_enabled_mask;
        __u32 reserved9;
        __u64 engine_core_interrupt_reg_addr;
        __u64 reserved_dram_size;