1c02697cbSDavid Zhang // SPDX-License-Identifier: GPL-2.0 2c02697cbSDavid Zhang /* 3c02697cbSDavid Zhang * Copyright (C) 2026, Advanced Micro Devices, Inc. 4c02697cbSDavid Zhang */ 5c02697cbSDavid Zhang 6c02697cbSDavid Zhang #include <drm/amdxdna_accel.h> 7c02697cbSDavid Zhang #include <drm/drm_print.h> 8c02697cbSDavid Zhang #include <linux/mutex.h> 9c02697cbSDavid Zhang 10c02697cbSDavid Zhang #include "aie.h" 11c02697cbSDavid Zhang #include "aie4_msg_priv.h" 12c02697cbSDavid Zhang #include "aie4_pci.h" 13c02697cbSDavid Zhang #include "amdxdna_mailbox.h" 14c02697cbSDavid Zhang #include "amdxdna_mailbox_helper.h" 15c02697cbSDavid Zhang #include "amdxdna_pci_drv.h" 16c02697cbSDavid Zhang 17c02697cbSDavid Zhang int aie4_suspend_fw(struct amdxdna_dev_hdl *ndev) 18c02697cbSDavid Zhang { 19c02697cbSDavid Zhang DECLARE_AIE_MSG(aie4_msg_suspend, AIE4_MSG_OP_SUSPEND); 20c02697cbSDavid Zhang int ret; 21c02697cbSDavid Zhang 22c02697cbSDavid Zhang ret = aie_send_mgmt_msg_wait(&ndev->aie, &msg); 23c02697cbSDavid Zhang if (ret) 24c02697cbSDavid Zhang XDNA_ERR(ndev->aie.xdna, "Failed to suspend fw, ret %d", ret); 25c02697cbSDavid Zhang 26c02697cbSDavid Zhang return ret; 27c02697cbSDavid Zhang } 280b087e06SDavid Zhang 290b087e06SDavid Zhang int aie4_query_aie_metadata(struct amdxdna_dev_hdl *ndev, 300b087e06SDavid Zhang struct amdxdna_drm_query_aie_metadata *metadata) 310b087e06SDavid Zhang { 320b087e06SDavid Zhang DECLARE_AIE_MSG(aie4_msg_aie4_tile_info, AIE4_MSG_OP_AIE_TILE_INFO); 330b087e06SDavid Zhang int ret; 340b087e06SDavid Zhang 350b087e06SDavid Zhang ret = aie_send_mgmt_msg_wait(&ndev->aie, &msg); 360b087e06SDavid Zhang if (ret) 370b087e06SDavid Zhang return ret; 380b087e06SDavid Zhang 390b087e06SDavid Zhang metadata->col_size = resp.info.size; 400b087e06SDavid Zhang metadata->cols = resp.info.cols; 410b087e06SDavid Zhang metadata->rows = resp.info.rows; 420b087e06SDavid Zhang 430b087e06SDavid Zhang metadata->version.major = resp.info.major; 440b087e06SDavid Zhang metadata->version.minor = resp.info.minor; 450b087e06SDavid Zhang 460b087e06SDavid Zhang metadata->core.row_count = resp.info.core_rows; 470b087e06SDavid Zhang metadata->core.row_start = resp.info.core_row_start; 480b087e06SDavid Zhang metadata->core.dma_channel_count = resp.info.core_dma_channels; 490b087e06SDavid Zhang metadata->core.lock_count = resp.info.core_locks; 500b087e06SDavid Zhang metadata->core.event_reg_count = resp.info.core_events; 510b087e06SDavid Zhang 520b087e06SDavid Zhang metadata->mem.row_count = resp.info.mem_rows; 530b087e06SDavid Zhang metadata->mem.row_start = resp.info.mem_row_start; 540b087e06SDavid Zhang metadata->mem.dma_channel_count = resp.info.mem_dma_channels; 550b087e06SDavid Zhang metadata->mem.lock_count = resp.info.mem_locks; 560b087e06SDavid Zhang metadata->mem.event_reg_count = resp.info.mem_events; 570b087e06SDavid Zhang 580b087e06SDavid Zhang metadata->shim.row_count = resp.info.shim_rows; 590b087e06SDavid Zhang metadata->shim.row_start = resp.info.shim_row_start; 600b087e06SDavid Zhang metadata->shim.dma_channel_count = resp.info.shim_dma_channels; 610b087e06SDavid Zhang metadata->shim.lock_count = resp.info.shim_locks; 620b087e06SDavid Zhang metadata->shim.event_reg_count = resp.info.shim_events; 630b087e06SDavid Zhang 640b087e06SDavid Zhang return 0; 650b087e06SDavid Zhang } 66*c0069781SNishad Saraf 67*c0069781SNishad Saraf int aie4_attach_work_buffer(struct amdxdna_dev_hdl *ndev) 68*c0069781SNishad Saraf { 69*c0069781SNishad Saraf DECLARE_AIE_MSG(aie4_msg_attach_work_buffer, AIE4_MSG_OP_ATTACH_WORK_BUFFER); 70*c0069781SNishad Saraf struct amdxdna_dev *xdna = ndev->aie.xdna; 71*c0069781SNishad Saraf int ret; 72*c0069781SNishad Saraf 73*c0069781SNishad Saraf req.buff_addr = ndev->work_buf_addr; 74*c0069781SNishad Saraf req.buff_size = AIE4_WORK_BUFFER_MIN_SIZE; 75*c0069781SNishad Saraf 76*c0069781SNishad Saraf ret = aie_send_mgmt_msg_wait(&ndev->aie, &msg); 77*c0069781SNishad Saraf if (ret) 78*c0069781SNishad Saraf XDNA_ERR(xdna, "Failed to attach work buffer, ret %d", ret); 79*c0069781SNishad Saraf else 80*c0069781SNishad Saraf XDNA_DBG(xdna, "Attached work buffer"); 81*c0069781SNishad Saraf 82*c0069781SNishad Saraf return ret; 83*c0069781SNishad Saraf } 84