soc: mediatek: mtk-cmdq: Add cmdq_pkt_mem_move() function
Add cmdq_pkt_mem_move() function to support CMDQ user making an instruction for moving a value from a source address to a destination address. Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Link: https://lore.kernel.org/r/20240307013458.23550-3-jason-jh.lin@mediatek.com Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
This commit is contained in:
parent
49ddaa495f
commit
263801f8e5
@ -290,6 +290,32 @@ int cmdq_pkt_write_s_mask_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_write_s_mask_value);
|
||||
|
||||
int cmdq_pkt_mem_move(struct cmdq_pkt *pkt, dma_addr_t src_addr, dma_addr_t dst_addr)
|
||||
{
|
||||
const u16 high_addr_reg_idx = CMDQ_THR_SPR_IDX0;
|
||||
const u16 value_reg_idx = CMDQ_THR_SPR_IDX1;
|
||||
int ret;
|
||||
|
||||
/* read the value of src_addr into high_addr_reg_idx */
|
||||
ret = cmdq_pkt_assign(pkt, high_addr_reg_idx, CMDQ_ADDR_HIGH(src_addr));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = cmdq_pkt_read_s(pkt, high_addr_reg_idx, CMDQ_ADDR_LOW(src_addr), value_reg_idx);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* write the value of value_reg_idx into dst_addr */
|
||||
ret = cmdq_pkt_assign(pkt, high_addr_reg_idx, CMDQ_ADDR_HIGH(dst_addr));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = cmdq_pkt_write_s(pkt, high_addr_reg_idx, CMDQ_ADDR_LOW(dst_addr), value_reg_idx);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_mem_move);
|
||||
|
||||
int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event, bool clear)
|
||||
{
|
||||
struct cmdq_instruction inst = { {0} };
|
||||
|
@ -184,6 +184,18 @@ int cmdq_pkt_write_s_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
|
||||
int cmdq_pkt_write_s_mask_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
|
||||
u16 addr_low, u32 value, u32 mask);
|
||||
|
||||
/**
|
||||
* cmdq_pkt_mem_move() - append memory move command to the CMDQ packet
|
||||
* @pkt: the CMDQ packet
|
||||
* @src_addr: source address
|
||||
* @dst_addr: destination address
|
||||
*
|
||||
* Appends a CMDQ command to copy the value found in `src_addr` to `dst_addr`.
|
||||
*
|
||||
* Return: 0 for success; else the error code is returned
|
||||
*/
|
||||
int cmdq_pkt_mem_move(struct cmdq_pkt *pkt, dma_addr_t src_addr, dma_addr_t dst_addr);
|
||||
|
||||
/**
|
||||
* cmdq_pkt_wfe() - append wait for event command to the CMDQ packet
|
||||
* @pkt: the CMDQ packet
|
||||
|
Loading…
x
Reference in New Issue
Block a user