blob: af01efb2d912fcab4d6c5bbb636285c1f60e7105 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 MediaTek Inc.
* Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
*/
#ifndef __MMSYS_REG_BASE_H__
#define __MMSYS_REG_BASE_H__
#ifndef CMDQ_ADDR_HIGH
#define CMDQ_ADDR_HIGH(addr) ((u32)(((addr) >> 16) & GENMASK(31, 0)))
#endif
#ifndef CMDQ_ADDR_LOW
#define CMDQ_ADDR_LOW(addr) ((u16)((addr) & 0xFFFF) | BIT(1))
#endif
#define UNUSED(x) (void)(x)
#define CMDQ_THR_SPR_0 (0)
#define CMDQ_THR_SPR_1 (1)
#define CMDQ_THR_SPR_2 (2)
#define CMDQ_THR_SPR_3 (3)
#define GCE_GPR_R11 (11)
/* CMDQ: P7: debug */
#define GCE_GPR_R14 0x0E
#define GCE_GPR_R15 0x0F
#define MM_REG_WRITE_MASK(cmd, id, base, ofst, val, mask, ...) \
cmdq_pkt_write_mask(cmd->pkt, id, \
(base) + (ofst), (val), (mask), ##__VA_ARGS__)
#define MM_REG_WRITE(cmd, id, base, ofst, val, mask, ...) \
MM_REG_WRITE_MASK(cmd, id, base, ofst, val, \
(((mask) & (ofst##_MASK)) == (ofst##_MASK)) ? \
(0xffffffff) : (mask), ##__VA_ARGS__)
#define MM_REG_WRITE_S(cmd, id, base, ofst, val, mask, ...) \
do{ \
UNUSED(id); \
cmdq_pkt_assign(cmd->pkt, CMDQ_THR_SPR_0, \
CMDQ_ADDR_HIGH(base+ofst)); \
cmdq_pkt_write_s_mask_value(cmd->pkt, CMDQ_THR_SPR_0, \
CMDQ_ADDR_LOW(base+ofst), (val), (mask), ##__VA_ARGS__); \
}while(0)
#define MM_REG_WAIT(cmd, evt) \
cmdq_pkt_wfe(cmd->pkt, cmd->event[(evt)])
#define MM_REG_WAIT_NO_CLEAR(cmd, evt) \
cmdq_pkt_wait_no_clear(cmd->pkt, cmd->event[(evt)])
#define MM_REG_CLEAR(cmd, evt) \
cmdq_pkt_clear_event(cmd->pkt, cmd->event[(evt)])
#define MM_REG_SET_EVENT(cmd, evt) \
cmdq_pkt_set_event(cmd->pkt, cmd->event[(evt)])
#define MM_REG_POLL_MASK(cmd, id, base, ofst, val, mask, ...) \
cmdq_pkt_poll_mask(cmd->pkt, id, \
(base) + (ofst), (val), (mask), ##__VA_ARGS__)
#define MM_REG_POLL(cmd, id, base, ofst, val, mask, ...) \
MM_REG_POLL_MASK(cmd, id, base, ofst, val, \
(((mask) & (ofst##_MASK)) == (ofst##_MASK)) ? \
(0xffffffff) : (mask), ##__VA_ARGS__)
#define MM_REG_POLL_S(cmd, id, base, ofst, val, mask, ...) \
do{ \
UNUSED(id); \
cmdq_pkt_poll_addr(cmd->pkt, val, ((base) + (ofst)), mask, GCE_GPR_R14); \
}while(0)
#endif // __MM_REG_BASE_H__