xref: /linux/drivers/accel/amdxdna/aie4_message.c (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
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