This adds core support for BACO on pre-vega asics.

Signed-off-by: Alex Deucher <[email protected]>
---
 .../gpu/drm/amd/powerplay/hwmgr/common_baco.c | 19 +++++++++++++++++++
 .../gpu/drm/amd/powerplay/hwmgr/common_baco.h | 13 +++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c 
b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c
index 9c57c1f67749..1c73776bd606 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.c
@@ -79,6 +79,25 @@ static bool baco_cmd_handler(struct pp_hwmgr *hwmgr, u32 
command, u32 reg, u32 m
        return ret;
 }
 
+bool baco_program_registers(struct pp_hwmgr *hwmgr,
+                           const struct baco_cmd_entry *entry,
+                           const u32 array_size)
+{
+       u32 i, reg = 0;
+
+       for (i = 0; i < array_size; i++) {
+               if ((entry[i].cmd == CMD_WRITE) ||
+                   (entry[i].cmd == CMD_READMODIFYWRITE) ||
+                   (entry[i].cmd == CMD_WAITFOR))
+                       reg = entry[i].reg_offset;
+               if (!baco_cmd_handler(hwmgr, entry[i].cmd, reg, entry[i].mask,
+                                    entry[i].shift, entry[i].val, 
entry[i].timeout))
+                       return false;
+       }
+
+       return true;
+}
+
 bool soc15_baco_program_registers(struct pp_hwmgr *hwmgr,
                                 const struct soc15_baco_cmd_entry *entry,
                                 const u32 array_size)
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h 
b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h
index 95296c916f4e..8393eb62706d 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/common_baco.h
@@ -33,6 +33,15 @@ enum baco_cmd_type {
        CMD_DELAY_US,
 };
 
+struct baco_cmd_entry {
+       enum baco_cmd_type cmd;
+       uint32_t        reg_offset;
+       uint32_t        mask;
+       uint32_t        shift;
+       uint32_t        timeout;
+       uint32_t        val;
+};
+
 struct soc15_baco_cmd_entry {
        enum baco_cmd_type cmd;
        uint32_t        hwip;
@@ -44,6 +53,10 @@ struct soc15_baco_cmd_entry {
        uint32_t        timeout;
        uint32_t        val;
 };
+
+extern bool baco_program_registers(struct pp_hwmgr *hwmgr,
+                                  const struct baco_cmd_entry *entry,
+                                  const u32 array_size);
 extern bool soc15_baco_program_registers(struct pp_hwmgr *hwmgr,
                                        const struct soc15_baco_cmd_entry 
*entry,
                                        const u32 array_size);
-- 
2.20.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to