mailbox: add Microchip IPC support

Add a mailbox controller driver for the Microchip Inter-processor
Communication (IPC), which is used to send and receive data between
processors.

The driver uses the RISC-V Supervisor Binary Interface (SBI) to
communicate with software running in machine mode (M-mode) to access
the IPC hardware block.

Additional details on the Microchip vendor extension and the IPC
function IDs described in the driver can be found in the following
documentation:

https://github.com/linux4microchip/microchip-sbi-ecall-extension

This SBI interface in this driver is compatible with the Mi-V Inter-hart
Communication (IHC) IP.

Transmitting and receiving data through the mailbox framework is done
through struct mchp_ipc_msg.

Signed-off-by: Valentina Fernandez <valentina.fernandezalanis@microchip.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
This commit is contained in:
Valentina Fernandez
2025-01-18 16:09:48 -06:00
committed by Jassi Brar
parent af33bd58c2
commit e4b1d67e71
4 changed files with 552 additions and 0 deletions
+13
View File
@@ -178,6 +178,19 @@ config POLARFIRE_SOC_MAILBOX
If unsure, say N.
config MCHP_SBI_IPC_MBOX
tristate "Microchip Inter-processor Communication (IPC) SBI driver"
depends on RISCV_SBI || COMPILE_TEST
depends on ARCH_MICROCHIP
help
Mailbox implementation for Microchip devices with an
Inter-process communication (IPC) controller.
To compile this driver as a module, choose M here. the
module will be called mailbox-mchp-ipc-sbi.
If unsure, say N.
config QCOM_APCS_IPC
tristate "Qualcomm APCS IPC driver"
depends on ARCH_QCOM || COMPILE_TEST
+2
View File
@@ -45,6 +45,8 @@ obj-$(CONFIG_BCM_FLEXRM_MBOX) += bcm-flexrm-mailbox.o
obj-$(CONFIG_POLARFIRE_SOC_MAILBOX) += mailbox-mpfs.o
obj-$(CONFIG_MCHP_SBI_IPC_MBOX) += mailbox-mchp-ipc-sbi.o
obj-$(CONFIG_QCOM_APCS_IPC) += qcom-apcs-ipc-mailbox.o
obj-$(CONFIG_TEGRA_HSP_MBOX) += tegra-hsp.o
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
*Copyright (c) 2024 Microchip Technology Inc. All rights reserved.
*/
#ifndef _LINUX_MCHP_IPC_H_
#define _LINUX_MCHP_IPC_H_
#include <linux/mailbox_controller.h>
#include <linux/types.h>
struct mchp_ipc_msg {
u32 *buf;
u16 size;
};
struct mchp_ipc_sbi_chan {
void *buf_base_tx;
void *buf_base_rx;
void *msg_buf_tx;
void *msg_buf_rx;
phys_addr_t buf_base_tx_addr;
phys_addr_t buf_base_rx_addr;
phys_addr_t msg_buf_tx_addr;
phys_addr_t msg_buf_rx_addr;
int chan_aggregated_irq;
int mp_irq;
int mc_irq;
u32 id;
u32 max_msg_size;
};
#endif /* _LINUX_MCHP_IPC_H_ */