mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

The mailbox payload pointer is void __iomem *. Casting it to u32 * is
incorrect and causes sparse warning.
cast removes address space '__iomem' of expression
Fixes: b87f920b93
("accel/amdxdna: Support hardware mailbox")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202501130921.ktqwsMLH-lkp@intel.com/
Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250113182617.1256094-1-lizhi.hou@amd.com
124 lines
3.5 KiB
C
124 lines
3.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2022-2024, Advanced Micro Devices, Inc.
|
|
*/
|
|
|
|
#ifndef _AIE2_MAILBOX_H_
|
|
#define _AIE2_MAILBOX_H_
|
|
|
|
struct mailbox;
|
|
struct mailbox_channel;
|
|
|
|
/*
|
|
* xdna_mailbox_msg - message struct
|
|
*
|
|
* @opcode: opcode for firmware
|
|
* @handle: handle used for the notify callback
|
|
* @notify_cb: callback function to notify the sender when there is response
|
|
* @send_data: pointing to sending data
|
|
* @send_size: size of the sending data
|
|
*
|
|
* The mailbox will split the sending data in to multiple firmware message if
|
|
* the size of the data is too big. This is transparent to the sender. The
|
|
* sender will receive one notification.
|
|
*/
|
|
struct xdna_mailbox_msg {
|
|
u32 opcode;
|
|
void *handle;
|
|
int (*notify_cb)(void *handle, void __iomem *data, size_t size);
|
|
u8 *send_data;
|
|
size_t send_size;
|
|
};
|
|
|
|
/*
|
|
* xdna_mailbox_res - mailbox hardware resource
|
|
*
|
|
* @ringbuf_base: ring buffer base address
|
|
* @ringbuf_size: ring buffer size
|
|
* @mbox_base: mailbox base address
|
|
* @mbox_size: mailbox size
|
|
*/
|
|
struct xdna_mailbox_res {
|
|
void __iomem *ringbuf_base;
|
|
size_t ringbuf_size;
|
|
void __iomem *mbox_base;
|
|
size_t mbox_size;
|
|
const char *name;
|
|
};
|
|
|
|
/*
|
|
* xdna_mailbox_chann_res - resources
|
|
*
|
|
* @rb_start_addr: ring buffer start address
|
|
* @rb_size: ring buffer size
|
|
* @mb_head_ptr_reg: mailbox head pointer register
|
|
* @mb_tail_ptr_reg: mailbox tail pointer register
|
|
*/
|
|
struct xdna_mailbox_chann_res {
|
|
u32 rb_start_addr;
|
|
u32 rb_size;
|
|
u32 mb_head_ptr_reg;
|
|
u32 mb_tail_ptr_reg;
|
|
};
|
|
|
|
/*
|
|
* xdna_mailbox_create() -- create mailbox subsystem and initialize
|
|
*
|
|
* @ddev: device pointer
|
|
* @res: SRAM and mailbox resources
|
|
*
|
|
* Return: If success, return a handle of mailbox subsystem.
|
|
* Otherwise, return NULL pointer.
|
|
*/
|
|
struct mailbox *xdnam_mailbox_create(struct drm_device *ddev,
|
|
const struct xdna_mailbox_res *res);
|
|
|
|
/*
|
|
* xdna_mailbox_create_channel() -- Create a mailbox channel instance
|
|
*
|
|
* @mailbox: the handle return from xdna_mailbox_create()
|
|
* @x2i: host to firmware mailbox resources
|
|
* @i2x: firmware to host mailbox resources
|
|
* @xdna_mailbox_intr_reg: register addr of MSI-X interrupt
|
|
* @mb_irq: Linux IRQ number associated with mailbox MSI-X interrupt vector index
|
|
*
|
|
* Return: If success, return a handle of mailbox channel. Otherwise, return NULL.
|
|
*/
|
|
struct mailbox_channel *
|
|
xdna_mailbox_create_channel(struct mailbox *mailbox,
|
|
const struct xdna_mailbox_chann_res *x2i,
|
|
const struct xdna_mailbox_chann_res *i2x,
|
|
u32 xdna_mailbox_intr_reg,
|
|
int mb_irq);
|
|
|
|
/*
|
|
* xdna_mailbox_destroy_channel() -- destroy mailbox channel
|
|
*
|
|
* @mailbox_chann: the handle return from xdna_mailbox_create_channel()
|
|
*
|
|
* Return: if success, return 0. otherwise return error code
|
|
*/
|
|
int xdna_mailbox_destroy_channel(struct mailbox_channel *mailbox_chann);
|
|
|
|
/*
|
|
* xdna_mailbox_stop_channel() -- stop mailbox channel
|
|
*
|
|
* @mailbox_chann: the handle return from xdna_mailbox_create_channel()
|
|
*
|
|
* Return: if success, return 0. otherwise return error code
|
|
*/
|
|
void xdna_mailbox_stop_channel(struct mailbox_channel *mailbox_chann);
|
|
|
|
/*
|
|
* xdna_mailbox_send_msg() -- Send a message
|
|
*
|
|
* @mailbox_chann: Mailbox channel handle
|
|
* @msg: message struct for message information
|
|
* @tx_timeout: the timeout value for sending the message in ms.
|
|
*
|
|
* Return: If success return 0, otherwise, return error code
|
|
*/
|
|
int xdna_mailbox_send_msg(struct mailbox_channel *mailbox_chann,
|
|
const struct xdna_mailbox_msg *msg, u64 tx_timeout);
|
|
|
|
#endif /* _AIE2_MAILBOX_ */
|