mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
MediaTek driver updates for v6.11
This adds the previously missed Tone Curve Conversion (TCC) MuteX bit to enable the same in MDP3 on the the MT8188 SoC, disables 9-bit Alpha for display HDR support in MT8195 and adds math operation support in the Global Command Engine for all MediaTek SoCs, which will be used in the near future in the ISP driver. -----BEGIN PGP SIGNATURE----- iJ4EABYKAEYWIQQn3Xxr56ypAcSHzXSaNgTPrZeEeAUCZn5/kygcYW5nZWxvZ2lv YWNjaGluby5kZWxyZWdub0Bjb2xsYWJvcmEuY29tAAoJEJo2BM+tl4R4ct0BAN+y Bf99G+Dz2bDJOZWV5waVqatekpHhsFO0+2xgzIjRAP9Ljhbp2OjiosfYHkJWMS54 2IKKuUz/IKqxJFWydLzsCw== =2Ckw -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmZ+55wACgkQYKtH/8kJ UifVvQ/9H0330C3V51NDSzU+HzxOGC8xaCI9CFhOcg1N46dTYId8UvPDb4VjHBc4 PL4uAQLAHSlrjNi0+KjMYVf00G+c7cTf8px2hvkAstiGc6tiACC/dHVHOeqBIeDb 5nMtEKEMWdDzmXVf4LAl0K+/jtjLWVsKHJ6vRnD0Zd8l8Y3pZYVPS6BJmQz0qrOG irb1pQ8lA2OL55StvvKr4z3H/vMonwFoxZZATR4FupK5wNthYQiaEJz1ZOwKuH3c W/XanCOgc15RnueXwCXriM2PN4ELUFH7LPBfCk5WVEsWdZ3IdUYOqZaDlimPqzJF KkynqNnwZkuB7x/3l33Y0i5crIJQVjXzs1ToJFc0CGzOJZE9D+6IbmTrD8F0VpVR ObXb2xalfgSv7gGwv4uIKB39t7alKSjhI3E4jFgSVohDmvpLGfNFyezXmsTc/faa 7wR+hMczhAP6g0UjbxMHMRy10AsChxIYwEuZf4Ysu205zPEjf3TLTBvJralgvtTB wlMNezrJqaBn+L5TKhlAiyZt0CC4wZMyLC724OALVJqVxX8m6+M01dPxMwPo8HmO naDbPArN3Rw9YpP2SUeN2748hA2b9s9okL/babRDE+chb3VeFEPyFUnuC4OUTSGo Bzrn1tJjeNXhqNJi6WiPzQ2Oc438zLPRt/IdbcXZ5RwO0wSE6Es= =Fo/W -----END PGP SIGNATURE----- Merge tag 'mtk-soc-for-v6.11' of https://git.kernel.org/pub/scm/linux/kernel/git/mediatek/linux into soc/drivers MediaTek driver updates for v6.11 This adds the previously missed Tone Curve Conversion (TCC) MuteX bit to enable the same in MDP3 on the the MT8188 SoC, disables 9-bit Alpha for display HDR support in MT8195 and adds math operation support in the Global Command Engine for all MediaTek SoCs, which will be used in the near future in the ISP driver. * tag 'mtk-soc-for-v6.11' of https://git.kernel.org/pub/scm/linux/kernel/git/mediatek/linux: soc: mtk-cmdq: Add cmdq_pkt_logic_command to support math operation soc: mediatek: Disable 9-bit alpha in ETHDR soc: mediatek: mtk-mutex: Add MDP_TCC0 mod to MT8188 mutex table Link: https://lore.kernel.org/r/20240628093801.126013-3-angelogioacchino.delregno@collabora.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
1392cb2649
@ -15,6 +15,7 @@
|
||||
/* dedicate the last GPR_R15 to assign the register address to be poll */
|
||||
#define CMDQ_POLL_ADDR_GPR (15)
|
||||
#define CMDQ_EOC_IRQ_EN BIT(0)
|
||||
#define CMDQ_IMMEDIATE_VALUE 0
|
||||
#define CMDQ_REG_TYPE 1
|
||||
#define CMDQ_JUMP_RELATIVE 0
|
||||
#define CMDQ_JUMP_ABSOLUTE 1
|
||||
@ -45,6 +46,16 @@ struct cmdq_instruction {
|
||||
u8 op;
|
||||
};
|
||||
|
||||
static inline u8 cmdq_operand_get_type(struct cmdq_operand *op)
|
||||
{
|
||||
return op->reg ? CMDQ_REG_TYPE : CMDQ_IMMEDIATE_VALUE;
|
||||
}
|
||||
|
||||
static inline u16 cmdq_operand_get_idx_value(struct cmdq_operand *op)
|
||||
{
|
||||
return op->reg ? op->idx : op->value;
|
||||
}
|
||||
|
||||
int cmdq_dev_get_client_reg(struct device *dev,
|
||||
struct cmdq_client_reg *client_reg, int idx)
|
||||
{
|
||||
@ -461,6 +472,29 @@ int cmdq_pkt_poll_addr(struct cmdq_pkt *pkt, dma_addr_t addr, u32 value, u32 mas
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_poll_addr);
|
||||
|
||||
int cmdq_pkt_logic_command(struct cmdq_pkt *pkt, u16 result_reg_idx,
|
||||
struct cmdq_operand *left_operand,
|
||||
enum cmdq_logic_op s_op,
|
||||
struct cmdq_operand *right_operand)
|
||||
{
|
||||
struct cmdq_instruction inst = { {0} };
|
||||
|
||||
if (!left_operand || !right_operand || s_op >= CMDQ_LOGIC_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
inst.op = CMDQ_CODE_LOGIC;
|
||||
inst.dst_t = CMDQ_REG_TYPE;
|
||||
inst.src_t = cmdq_operand_get_type(left_operand);
|
||||
inst.arg_c_t = cmdq_operand_get_type(right_operand);
|
||||
inst.sop = s_op;
|
||||
inst.reg_dst = result_reg_idx;
|
||||
inst.src_reg = cmdq_operand_get_idx_value(left_operand);
|
||||
inst.arg_c = cmdq_operand_get_idx_value(right_operand);
|
||||
|
||||
return cmdq_pkt_append_command(pkt, inst);
|
||||
}
|
||||
EXPORT_SYMBOL(cmdq_pkt_logic_command);
|
||||
|
||||
int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value)
|
||||
{
|
||||
struct cmdq_instruction inst = {};
|
||||
|
@ -236,6 +236,7 @@ void mtk_mmsys_mixer_in_config(struct device *dev, int idx, bool alpha_sel, u16
|
||||
|
||||
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_ALPHA + (idx - 1) * 4, ~0,
|
||||
alpha << 16 | alpha, cmdq_pkt);
|
||||
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(15 + idx), 0, cmdq_pkt);
|
||||
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_HDR_TOP_CFG, BIT(19 + idx),
|
||||
alpha_sel << (19 + idx), cmdq_pkt);
|
||||
mtk_mmsys_update_bits(mmsys, MT8195_VDO1_MIXER_IN1_PAD + (idx - 1) * 4,
|
||||
|
@ -524,6 +524,7 @@ static const unsigned int mt8188_mdp_mutex_table_mod[MUTEX_MOD_IDX_MAX] = {
|
||||
[MUTEX_MOD_IDX_MDP_PAD0] = MT8195_MUTEX_MOD_MDP_PAD0,
|
||||
[MUTEX_MOD_IDX_MDP_PAD2] = MT8195_MUTEX_MOD_MDP_PAD2,
|
||||
[MUTEX_MOD_IDX_MDP_PAD3] = MT8195_MUTEX_MOD_MDP_PAD3,
|
||||
[MUTEX_MOD_IDX_MDP_TCC0] = MT8195_MUTEX_MOD_MDP_TCC0,
|
||||
[MUTEX_MOD_IDX_MDP_WROT0] = MT8195_MUTEX_MOD_MDP_WROT0,
|
||||
[MUTEX_MOD_IDX_MDP_WROT2] = MT8195_MUTEX_MOD_MDP_WROT2,
|
||||
[MUTEX_MOD_IDX_MDP_WROT3] = MT8195_MUTEX_MOD_MDP_WROT3,
|
||||
|
@ -25,6 +25,31 @@
|
||||
|
||||
struct cmdq_pkt;
|
||||
|
||||
enum cmdq_logic_op {
|
||||
CMDQ_LOGIC_ASSIGN = 0,
|
||||
CMDQ_LOGIC_ADD = 1,
|
||||
CMDQ_LOGIC_SUBTRACT = 2,
|
||||
CMDQ_LOGIC_MULTIPLY = 3,
|
||||
CMDQ_LOGIC_XOR = 8,
|
||||
CMDQ_LOGIC_NOT = 9,
|
||||
CMDQ_LOGIC_OR = 10,
|
||||
CMDQ_LOGIC_AND = 11,
|
||||
CMDQ_LOGIC_LEFT_SHIFT = 12,
|
||||
CMDQ_LOGIC_RIGHT_SHIFT = 13,
|
||||
CMDQ_LOGIC_MAX,
|
||||
};
|
||||
|
||||
struct cmdq_operand {
|
||||
/* register type */
|
||||
bool reg;
|
||||
union {
|
||||
/* index */
|
||||
u16 idx;
|
||||
/* value */
|
||||
u16 value;
|
||||
};
|
||||
};
|
||||
|
||||
struct cmdq_client_reg {
|
||||
u8 subsys;
|
||||
u16 offset;
|
||||
@ -272,6 +297,23 @@ 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_logic_command() - Append logic command to the CMDQ packet, ask GCE to
|
||||
* execute an instruction that store the result of logic operation
|
||||
* with left and right operand into result_reg_idx.
|
||||
* @pkt: the CMDQ packet
|
||||
* @result_reg_idx: SPR index that store operation result of left_operand and right_operand
|
||||
* @left_operand: left operand
|
||||
* @s_op: the logic operator enum
|
||||
* @right_operand: right operand
|
||||
*
|
||||
* Return: 0 for success; else the error code is returned
|
||||
*/
|
||||
int cmdq_pkt_logic_command(struct cmdq_pkt *pkt, u16 result_reg_idx,
|
||||
struct cmdq_operand *left_operand,
|
||||
enum cmdq_logic_op s_op,
|
||||
struct cmdq_operand *right_operand);
|
||||
|
||||
/**
|
||||
* cmdq_pkt_assign() - Append logic assign command to the CMDQ packet, ask GCE
|
||||
* to execute an instruction that set a constant value into
|
||||
|
Loading…
Reference in New Issue
Block a user