mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 21:52:04 +00:00
soc: mediatek: cmdq: add assign function
Add assign function in cmdq helper which assign constant value into internal register by index. Signed-off-by: Dennis YC Hsieh <dennis-yc.hsieh@mediatek.com> Link: https://lore.kernel.org/r/1592749115-24158-3-git-send-email-dennis-yc.hsieh@mediatek.com Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
This commit is contained in:
parent
b3a9e3b962
commit
613c2e2c7e
@ -12,6 +12,7 @@
|
||||
#define CMDQ_WRITE_ENABLE_MASK BIT(0)
|
||||
#define CMDQ_POLL_ENABLE_MASK BIT(0)
|
||||
#define CMDQ_EOC_IRQ_EN BIT(0)
|
||||
#define CMDQ_REG_TYPE 1
|
||||
|
||||
struct cmdq_instruction {
|
||||
union {
|
||||
@ -21,8 +22,17 @@ struct cmdq_instruction {
|
||||
union {
|
||||
u16 offset;
|
||||
u16 event;
|
||||
u16 reg_dst;
|
||||
};
|
||||
union {
|
||||
u8 subsys;
|
||||
struct {
|
||||
u8 sop:5;
|
||||
u8 arg_c_t:1;
|
||||
u8 src_t:1;
|
||||
u8 dst_t:1;
|
||||
};
|
||||
};
|
||||
u8 subsys;
|
||||
u8 op;
|
||||
};
|
||||
|
||||
@ -278,6 +288,18 @@ int cmdq_pkt_poll_mask(struct cmdq_pkt *pkt, u8 subsys,
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_poll_mask);
|
||||
|
||||
int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value)
|
||||
{
|
||||
struct cmdq_instruction inst = {};
|
||||
|
||||
inst.op = CMDQ_CODE_LOGIC;
|
||||
inst.dst_t = CMDQ_REG_TYPE;
|
||||
inst.reg_dst = reg_idx;
|
||||
inst.value = value;
|
||||
return cmdq_pkt_append_command(pkt, inst);
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_assign);
|
||||
|
||||
static int cmdq_pkt_finalize(struct cmdq_pkt *pkt)
|
||||
{
|
||||
struct cmdq_instruction inst = { {0} };
|
||||
|
@ -59,6 +59,7 @@ enum cmdq_code {
|
||||
CMDQ_CODE_JUMP = 0x10,
|
||||
CMDQ_CODE_WFE = 0x20,
|
||||
CMDQ_CODE_EOC = 0x40,
|
||||
CMDQ_CODE_LOGIC = 0xa0,
|
||||
};
|
||||
|
||||
enum cmdq_cb_status {
|
||||
|
@ -152,6 +152,20 @@ int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys,
|
||||
*/
|
||||
int cmdq_pkt_poll_mask(struct cmdq_pkt *pkt, u8 subsys,
|
||||
u16 offset, u32 value, u32 mask);
|
||||
|
||||
/**
|
||||
* cmdq_pkt_assign() - Append logic assign command to the CMDQ packet, ask GCE
|
||||
* to execute an instruction that set a constant value into
|
||||
* internal register and use as value, mask or address in
|
||||
* read/write instruction.
|
||||
* @pkt: the CMDQ packet
|
||||
* @reg_idx: the CMDQ internal register ID
|
||||
* @value: the specified value
|
||||
*
|
||||
* Return: 0 for success; else the error code is returned
|
||||
*/
|
||||
int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value);
|
||||
|
||||
/**
|
||||
* cmdq_pkt_flush_async() - trigger CMDQ to asynchronously execute the CMDQ
|
||||
* packet and call back at the end of done packet
|
||||
|
Loading…
Reference in New Issue
Block a user