blob: e37747ae11b41fbce200ea9a6f4c388f9b35a7b1 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Chip-dependent configuration for mailbox.
*
* Copyright (C) 2020 Google, Inc.
*/
#ifndef __JANEIRO_CONFIG_MAILBOX_H__
#define __JANEIRO_CONFIG_MAILBOX_H__
#include <linux/types.h> /* u32 */
#define EDGETPU_NUM_VII_MAILBOXES 7
#define EDGETPU_NUM_P2P_MAILBOXES 0
#define EDGETPU_NUM_EXT_DSP_MAILBOXES 4
#define EDGETPU_NUM_EXT_AOC_MAILBOXES 1
#define EDGETPU_NUM_EXT_MAILBOXES (EDGETPU_NUM_EXT_DSP_MAILBOXES + EDGETPU_NUM_EXT_AOC_MAILBOXES)
#define EDGETPU_NUM_MAILBOXES (EDGETPU_NUM_VII_MAILBOXES + EDGETPU_NUM_EXT_MAILBOXES + 1)
/*
* Mailbox index layout in mailbox manager is like:
* ---------------------------------------------------------------
* | KCI X 1 | VII(s) X 7 | EXT_DSP(s) X 4 | EXT_AOC(s) X 1 |
* ---------------------------------------------------------------
* The TZ mailbox is not managed by the kernel, but we still need to tell firmware to enable it,
* so its index is placed after the kernel managed mailboxes.
*/
#define EDGETPU_TZ_MAILBOX_ID 13
#define JANEIRO_EXT_DSP_MAILBOX_START (EDGETPU_NUM_VII_MAILBOXES + 1)
#define JANEIRO_EXT_DSP_MAILBOX_END \
(EDGETPU_NUM_EXT_DSP_MAILBOXES + JANEIRO_EXT_DSP_MAILBOX_START - 1)
#define JANEIRO_EXT_AOC_MAILBOX_START (JANEIRO_EXT_DSP_MAILBOX_END + 1)
#define JANEIRO_EXT_AOC_MAILBOX_END \
(EDGETPU_NUM_EXT_AOC_MAILBOXES + JANEIRO_EXT_AOC_MAILBOX_START - 1)
#define JANEIRO_CSR_MBOX2_CONTEXT_ENABLE 0xa0000 /* starting kernel mb*/
#define JANEIRO_CSR_AOC_MBOX_CONTEXT_ENABLE 0xb0000 /* AOC mailbox */
#define JANEIRO_CSR_DSP_MBOX_CONTEXT_ENABLE 0xc0000 /* DSP mailbox */
#define EDGETPU_MBOX_CSRS_SIZE 0x2000 /* CSR size of each mailbox */
#define JANEIRO_CSR_MBOX_CMD_QUEUE_DOORBELL_SET_OFFSET 0x1000
#define JANEIRO_CSR_MBOX_RESP_QUEUE_DOORBELL_SET_OFFSET 0x1800
#define EDGETPU_MBOX_BASE JANEIRO_CSR_MBOX2_CONTEXT_ENABLE
static inline u32 edgetpu_mailbox_get_context_csr_base(u32 index)
{
u32 base;
if (index <= EDGETPU_NUM_VII_MAILBOXES) {
base = JANEIRO_CSR_MBOX2_CONTEXT_ENABLE;
return base + index * EDGETPU_MBOX_CSRS_SIZE;
} else if (index <= JANEIRO_EXT_DSP_MAILBOX_END) {
base = JANEIRO_CSR_DSP_MBOX_CONTEXT_ENABLE;
return base + (index - JANEIRO_EXT_DSP_MAILBOX_START) * EDGETPU_MBOX_CSRS_SIZE;
}
return JANEIRO_CSR_AOC_MBOX_CONTEXT_ENABLE;
}
static inline u32 edgetpu_mailbox_get_cmd_queue_csr_base(u32 index)
{
return edgetpu_mailbox_get_context_csr_base(index) +
JANEIRO_CSR_MBOX_CMD_QUEUE_DOORBELL_SET_OFFSET;
}
static inline u32 edgetpu_mailbox_get_resp_queue_csr_base(u32 index)
{
return edgetpu_mailbox_get_context_csr_base(index) +
JANEIRO_CSR_MBOX_RESP_QUEUE_DOORBELL_SET_OFFSET;
}
#endif /* __JANEIRO_CONFIG_MAILBOX_H__ */