Path: blob/master/drivers/accel/amdxdna/amdxdna_mailbox_helper.c
26427 views
// SPDX-License-Identifier: GPL-2.01/*2* Copyright (C) 2024, Advanced Micro Devices, Inc.3*/45#include <drm/amdxdna_accel.h>6#include <drm/drm_device.h>7#include <drm/drm_print.h>8#include <drm/drm_gem.h>9#include <drm/drm_gem_shmem_helper.h>10#include <drm/gpu_scheduler.h>11#include <linux/completion.h>1213#include "amdxdna_gem.h"14#include "amdxdna_mailbox.h"15#include "amdxdna_mailbox_helper.h"16#include "amdxdna_pci_drv.h"1718int xdna_msg_cb(void *handle, void __iomem *data, size_t size)19{20struct xdna_notify *cb_arg = handle;21int ret;2223if (unlikely(!data))24goto out;2526if (unlikely(cb_arg->size != size)) {27cb_arg->error = -EINVAL;28goto out;29}3031memcpy_fromio(cb_arg->data, data, cb_arg->size);32print_hex_dump_debug("resp data: ", DUMP_PREFIX_OFFSET,3316, 4, cb_arg->data, cb_arg->size, true);34out:35ret = cb_arg->error;36complete(&cb_arg->comp);37return ret;38}3940int xdna_send_msg_wait(struct amdxdna_dev *xdna, struct mailbox_channel *chann,41struct xdna_mailbox_msg *msg)42{43struct xdna_notify *hdl = msg->handle;44int ret;4546ret = xdna_mailbox_send_msg(chann, msg, TX_TIMEOUT);47if (ret) {48XDNA_ERR(xdna, "Send message failed, ret %d", ret);49return ret;50}5152ret = wait_for_completion_timeout(&hdl->comp,53msecs_to_jiffies(RX_TIMEOUT));54if (!ret) {55XDNA_ERR(xdna, "Wait for completion timeout");56return -ETIME;57}5859return hdl->error;60}616263