Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a2ab473
media: qcom: iris: increase H265D_MAX_SLICE to fix H.265 decoding on …
lumag Mar 27, 2026
37b5f66
media: iris: Switch to hardware mode after firmware boot
Jan 26, 2026
17ef699
media: qcom: iris: drop pas_id from the iris_platform_data struct
lumag Mar 29, 2026
41e5f60
media: qcom: iris: use common set_preset_registers function
lumag Mar 29, 2026
1d57996
media: qcom: iris: don't use function indirection in gen2-specific code
lumag Mar 29, 2026
1bd16c6
media: qcom: iris: split HFI session ops from core ops
lumag Mar 29, 2026
b9f4799
media: qcom: iris: merge hfi_response_ops and hfi_command_ops
lumag Mar 29, 2026
02e2366
media: qcom: iris: move get_instance to iris_hfi_sys_ops
lumag Mar 29, 2026
cf6760e
media: qcom: iris: drop hw_response_timeout_val from platform data
lumag Mar 29, 2026
2f33c6f
media: qcom: iris: split firmware_data from raw platform data
lumag Mar 29, 2026
3ad2bd8
media: qcom: iris: split platform data from firmware data
lumag Mar 29, 2026
23584d4
media: qcom: iris: use new firmware name for SM8250
lumag Mar 29, 2026
ccccf14
media: qcom: iris: extract firmware description data
lumag Mar 29, 2026
138e42b
media: iris: Skip UBWC configuration when not supported
dikshita-agarwal Apr 7, 2026
b92636a
media: iris: Filter UBWC raw formats based on hardware capabilities
dikshita-agarwal Apr 7, 2026
6361fbb
media: iris: Introduce set_preset_register as a vpu_op
dikshita-agarwal Mar 17, 2026
068ddb8
media: iris: Introduce interrupt_init as a vpu_op
dikshita-agarwal Mar 17, 2026
534f4ae
media: iris: add vpu op hook to disable ARP buffer
dikshita-agarwal Apr 1, 2026
08f0c24
media: iris: Add platform data field for watchdog interrupt mask
dikshita-agarwal Apr 6, 2026
bfc7d05
media: iris: Add platform flag for instantaneous bandwidth voting
dikshita-agarwal Apr 6, 2026
569acae
media: iris: Add framework support for AR50_LITE video core
dikshita-agarwal Mar 17, 2026
4a50a4f
media: iris: Introduce buffer size calculations for AR50LT
dikshita-agarwal Mar 17, 2026
8bf028e
media: iris: Add qcm2290 DT compatible and platform data
dikshita-agarwal Mar 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions drivers/media/platform/qcom/iris/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@ qcom-iris-objs += iris_buffer.o \
iris_ctrls.o \
iris_firmware.o \
iris_hfi_common.o \
iris_hfi_gen1.o \
iris_hfi_gen1_command.o \
iris_hfi_gen1_response.o \
iris_hfi_gen2.o \
iris_hfi_gen2_command.o \
iris_hfi_gen2_packet.o \
iris_hfi_gen2_response.o \
iris_hfi_queue.o \
iris_platform_gen2.o \
iris_platform_vpu2.o \
iris_platform_vpu3x.o \
iris_platform_vpu_ar50lt.o \
iris_power.o \
iris_probe.o \
iris_resources.o \
Expand All @@ -23,11 +27,8 @@ qcom-iris-objs += iris_buffer.o \
iris_vpu2.o \
iris_vpu3x.o \
iris_vpu4x.o \
iris_vpu_ar50lt.o \
iris_vpu_buffer.o \
iris_vpu_common.o \

ifeq ($(CONFIG_VIDEO_QCOM_VENUS),)
qcom-iris-objs += iris_platform_gen1.o
endif

obj-$(CONFIG_VIDEO_QCOM_IRIS) += qcom-iris.o
88 changes: 44 additions & 44 deletions drivers/media/platform/qcom/iris/iris_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,37 +295,37 @@ static void iris_fill_internal_buf_info(struct iris_inst *inst,
{
struct iris_buffers *buffers = &inst->buffers[buffer_type];

buffers->size = inst->core->iris_platform_data->get_vpu_buffer_size(inst, buffer_type);
buffers->size = inst->core->iris_firmware_desc->get_vpu_buffer_size(inst, buffer_type);
buffers->min_count = iris_vpu_buf_count(inst, buffer_type);
}

void iris_get_internal_buffers(struct iris_inst *inst, u32 plane)
{
const struct iris_platform_data *platform_data = inst->core->iris_platform_data;
const struct iris_firmware_data *firmware_data = inst->core->iris_firmware_data;
const u32 *internal_buf_type;
u32 internal_buffer_count, i;

if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->dec_ip_int_buf_tbl;
internal_buffer_count = platform_data->dec_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_ip_int_buf_tbl;
internal_buffer_count = firmware_data->dec_ip_int_buf_tbl_size;
for (i = 0; i < internal_buffer_count; i++)
iris_fill_internal_buf_info(inst, internal_buf_type[i]);
} else {
internal_buf_type = platform_data->dec_op_int_buf_tbl;
internal_buffer_count = platform_data->dec_op_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_op_int_buf_tbl;
internal_buffer_count = firmware_data->dec_op_int_buf_tbl_size;
for (i = 0; i < internal_buffer_count; i++)
iris_fill_internal_buf_info(inst, internal_buf_type[i]);
}
} else {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->enc_ip_int_buf_tbl;
internal_buffer_count = platform_data->enc_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_ip_int_buf_tbl;
internal_buffer_count = firmware_data->enc_ip_int_buf_tbl_size;
for (i = 0; i < internal_buffer_count; i++)
iris_fill_internal_buf_info(inst, internal_buf_type[i]);
} else {
internal_buf_type = platform_data->enc_op_int_buf_tbl;
internal_buffer_count = platform_data->enc_op_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_op_int_buf_tbl;
internal_buffer_count = firmware_data->enc_op_int_buf_tbl_size;
for (i = 0; i < internal_buffer_count; i++)
iris_fill_internal_buf_info(inst, internal_buf_type[i]);
}
Expand Down Expand Up @@ -366,27 +366,27 @@ static int iris_create_internal_buffer(struct iris_inst *inst,

int iris_create_internal_buffers(struct iris_inst *inst, u32 plane)
{
const struct iris_platform_data *platform_data = inst->core->iris_platform_data;
const struct iris_firmware_data *firmware_data = inst->core->iris_firmware_data;
u32 internal_buffer_count, i, j;
struct iris_buffers *buffers;
const u32 *internal_buf_type;
int ret;

if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->dec_ip_int_buf_tbl;
internal_buffer_count = platform_data->dec_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_ip_int_buf_tbl;
internal_buffer_count = firmware_data->dec_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->dec_op_int_buf_tbl;
internal_buffer_count = platform_data->dec_op_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_op_int_buf_tbl;
internal_buffer_count = firmware_data->dec_op_int_buf_tbl_size;
}
} else {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->enc_ip_int_buf_tbl;
internal_buffer_count = platform_data->enc_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_ip_int_buf_tbl;
internal_buffer_count = firmware_data->enc_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->enc_op_int_buf_tbl;
internal_buffer_count = platform_data->enc_op_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_op_int_buf_tbl;
internal_buffer_count = firmware_data->enc_op_int_buf_tbl_size;
}
}

Expand All @@ -404,7 +404,7 @@ int iris_create_internal_buffers(struct iris_inst *inst, u32 plane)

int iris_queue_buffer(struct iris_inst *inst, struct iris_buffer *buf)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
int ret;

ret = hfi_ops->session_queue_buf(inst, buf);
Expand Down Expand Up @@ -442,7 +442,7 @@ int iris_queue_internal_deferred_buffers(struct iris_inst *inst, enum iris_buffe

int iris_queue_internal_buffers(struct iris_inst *inst, u32 plane)
{
const struct iris_platform_data *platform_data = inst->core->iris_platform_data;
const struct iris_firmware_data *firmware_data = inst->core->iris_firmware_data;
struct iris_buffer *buffer, *next;
struct iris_buffers *buffers;
const u32 *internal_buf_type;
Expand All @@ -451,19 +451,19 @@ int iris_queue_internal_buffers(struct iris_inst *inst, u32 plane)

if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->dec_ip_int_buf_tbl;
internal_buffer_count = platform_data->dec_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_ip_int_buf_tbl;
internal_buffer_count = firmware_data->dec_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->dec_op_int_buf_tbl;
internal_buffer_count = platform_data->dec_op_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_op_int_buf_tbl;
internal_buffer_count = firmware_data->dec_op_int_buf_tbl_size;
}
} else {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->enc_ip_int_buf_tbl;
internal_buffer_count = platform_data->enc_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_ip_int_buf_tbl;
internal_buffer_count = firmware_data->enc_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->enc_op_int_buf_tbl;
internal_buffer_count = platform_data->enc_op_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_op_int_buf_tbl;
internal_buffer_count = firmware_data->enc_op_int_buf_tbl_size;
}
}

Expand Down Expand Up @@ -501,7 +501,7 @@ int iris_destroy_internal_buffer(struct iris_inst *inst, struct iris_buffer *buf

static int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane, bool force)
{
const struct iris_platform_data *platform_data = inst->core->iris_platform_data;
const struct iris_firmware_data *firmware_data = inst->core->iris_firmware_data;
struct iris_buffer *buf, *next;
struct iris_buffers *buffers;
const u32 *internal_buf_type;
Expand All @@ -510,19 +510,19 @@ static int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane, bool

if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->dec_ip_int_buf_tbl;
len = platform_data->dec_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_ip_int_buf_tbl;
len = firmware_data->dec_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->dec_op_int_buf_tbl;
len = platform_data->dec_op_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_op_int_buf_tbl;
len = firmware_data->dec_op_int_buf_tbl_size;
}
} else {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
internal_buf_type = platform_data->enc_ip_int_buf_tbl;
len = platform_data->enc_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_ip_int_buf_tbl;
len = firmware_data->enc_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->enc_op_int_buf_tbl;
len = platform_data->enc_op_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_op_int_buf_tbl;
len = firmware_data->enc_op_int_buf_tbl_size;
}
}

Expand Down Expand Up @@ -572,7 +572,7 @@ int iris_destroy_dequeued_internal_buffers(struct iris_inst *inst, u32 plane)
static int iris_release_internal_buffers(struct iris_inst *inst,
enum iris_buffer_type buffer_type)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
struct iris_buffers *buffers = &inst->buffers[buffer_type];
struct iris_buffer *buffer, *next;
int ret;
Expand All @@ -593,17 +593,17 @@ static int iris_release_internal_buffers(struct iris_inst *inst,

static int iris_release_input_internal_buffers(struct iris_inst *inst)
{
const struct iris_platform_data *platform_data = inst->core->iris_platform_data;
const struct iris_firmware_data *firmware_data = inst->core->iris_firmware_data;
const u32 *internal_buf_type;
u32 internal_buffer_count, i;
int ret;

if (inst->domain == DECODER) {
internal_buf_type = platform_data->dec_ip_int_buf_tbl;
internal_buffer_count = platform_data->dec_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->dec_ip_int_buf_tbl;
internal_buffer_count = firmware_data->dec_ip_int_buf_tbl_size;
} else {
internal_buf_type = platform_data->enc_ip_int_buf_tbl;
internal_buffer_count = platform_data->enc_ip_int_buf_tbl_size;
internal_buf_type = firmware_data->enc_ip_int_buf_tbl;
internal_buffer_count = firmware_data->enc_ip_int_buf_tbl_size;
}

for (i = 0; i < internal_buffer_count; i++) {
Expand Down
8 changes: 4 additions & 4 deletions drivers/media/platform/qcom/iris/iris_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ void iris_set_ts_metadata(struct iris_inst *inst, struct vb2_v4l2_buffer *vbuf)

int iris_process_streamon_input(struct iris_inst *inst)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
enum iris_inst_sub_state set_sub_state = 0;
int ret;

Expand Down Expand Up @@ -90,7 +90,7 @@ int iris_process_streamon_input(struct iris_inst *inst)

int iris_process_streamon_output(struct iris_inst *inst)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
enum iris_inst_sub_state clear_sub_state = 0;
bool drain_active, drc_active, first_ipsc;
int ret = 0;
Expand Down Expand Up @@ -189,7 +189,7 @@ static void iris_flush_deferred_buffers(struct iris_inst *inst,

static void iris_kill_session(struct iris_inst *inst)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;

if (!inst->session_id)
return;
Expand All @@ -200,7 +200,7 @@ static void iris_kill_session(struct iris_inst *inst)

int iris_session_streamoff(struct iris_inst *inst, u32 plane)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
enum iris_buffer_type buffer_type;
int ret;

Expand Down
11 changes: 9 additions & 2 deletions drivers/media/platform/qcom/iris/iris_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,13 @@ void iris_core_deinit(struct iris_core *core)

static int iris_wait_for_system_response(struct iris_core *core)
{
u32 hw_response_timeout_val = core->iris_platform_data->hw_response_timeout;
int ret;

if (core->state == IRIS_CORE_ERROR)
return -EIO;

ret = wait_for_completion_timeout(&core->core_init_done,
msecs_to_jiffies(hw_response_timeout_val));
msecs_to_jiffies(HW_RESPONSE_TIMEOUT_VALUE));
if (!ret) {
core->state = IRIS_CORE_ERROR;
return -ETIMEDOUT;
Expand All @@ -46,6 +45,7 @@ static int iris_wait_for_system_response(struct iris_core *core)

int iris_core_init(struct iris_core *core)
{
const struct vpu_ops *vpu_ops = core->iris_platform_data->vpu_ops;
int ret;

mutex_lock(&core->lock);
Expand Down Expand Up @@ -75,6 +75,13 @@ int iris_core_init(struct iris_core *core)
if (ret)
goto error_unload_fw;

ret = iris_vpu_switch_to_hwmode(core);
if (ret)
goto error_unload_fw;

if (vpu_ops->disable_arp)
vpu_ops->disable_arp(core);

ret = iris_hfi_core_init(core);
if (ret)
goto error_unload_fw;
Expand Down
10 changes: 6 additions & 4 deletions drivers/media/platform/qcom/iris/iris_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ enum domain_type {
* @resets: table of iris reset clocks
* @controller_resets: table of controller reset clocks
* @iris_platform_data: a structure for platform data
* @iris_firmware_data: a pointer to the firmware (or HFI) specific data
* @iris_firmware_desc: a pointer to the firmware-specific descriptive data
* @state: current state of core
* @iface_q_table_daddr: device address for interface queue table memory
* @sfr_daddr: device address for SFR (Sub System Failure Reason) register memory
Expand All @@ -65,8 +67,7 @@ enum domain_type {
* @header_id: id of packet header
* @packet_id: id of packet
* @power: a structure for clock and bw information
* @hfi_ops: iris hfi command ops
* @hfi_response_ops: iris hfi response ops
* @hfi_sys_ops: iris HFI system ops
* @core_init_done: structure of signal completion for system response
* @intr_status: interrupt status
* @sys_error_handler: a delayed work for handling system fatal error
Expand Down Expand Up @@ -95,6 +96,8 @@ struct iris_core {
struct reset_control_bulk_data *resets;
struct reset_control_bulk_data *controller_resets;
const struct iris_platform_data *iris_platform_data;
const struct iris_firmware_data *iris_firmware_data;
const struct iris_firmware_desc *iris_firmware_desc;
enum iris_core_state state;
dma_addr_t iface_q_table_daddr;
dma_addr_t sfr_daddr;
Expand All @@ -108,8 +111,7 @@ struct iris_core {
u32 header_id;
u32 packet_id;
struct iris_core_power power;
const struct iris_hfi_command_ops *hfi_ops;
const struct iris_hfi_response_ops *hfi_response_ops;
const struct iris_hfi_sys_ops *hfi_sys_ops;
struct completion core_init_done;
u32 intr_status;
struct delayed_work sys_error_handler;
Expand Down
Loading