Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9bd42e2
FROMGIT: soc: qcom: ubwc: add helper to get min_acc length
lumag Jan 25, 2026
bfc78e3
FROMGIT: soc: qcom: ubwc: add helpers to get programmable values
lumag Jan 25, 2026
fca8b70
FROMGIT: media: iris: retrieve UBWC platform configuration
lumag Jan 25, 2026
30a21cb
FROMGIT: media: iris: don't specify min_acc_length in the source code
lumag Jan 25, 2026
bd6a4e6
FROMGIT: media: iris: don't specify highest_bank_bit in the source code
lumag Jan 25, 2026
94d7df9
FROMGIT: media: iris: don't specify ubwc_swizzle in the source code
lumag Jan 25, 2026
72b1f94
FROMGIT: media: iris: don't specify bank_spreading in the source code
lumag Jan 25, 2026
2dc0d85
FROMGIT: media: iris: don't specify max_channels in the source code
lumag Jan 25, 2026
3f96531
FROMGIT: media: iris: drop remnants of UBWC configuration
lumag Jan 25, 2026
d6bb489
FROMGIT: media: qcom: iris: drop pas_id from the iris_platform_data s…
lumag Mar 29, 2026
e692dd8
FROMGIT: media: qcom: iris: use common set_preset_registers function
lumag Mar 29, 2026
8aa7471
FROMGIT: media: qcom: iris: don't use function indirection in gen2-sp…
lumag Mar 29, 2026
a59840f
FROMGIT: media: qcom: iris: split HFI session ops from core ops
lumag Mar 29, 2026
13647f3
FROMGIT: media: qcom: iris: merge hfi_response_ops and hfi_command_ops
lumag Mar 29, 2026
2e02fc4
FROMGIT: media: qcom: iris: move get_instance to iris_hfi_sys_ops
lumag Mar 29, 2026
471f573
FROMGIT: media: qcom: iris: drop hw_response_timeout_val from platfor…
lumag Mar 29, 2026
07a60bb
FROMGIT: media: qcom: iris: split firmware_data from raw platform data
lumag Mar 29, 2026
45b156b
FROMGIT: media: qcom: iris: split platform data from firmware data
lumag Mar 29, 2026
24e1695
FROMGIT: media: qcom: iris: use new firmware name for SM8250
lumag Mar 29, 2026
084b4f2
FROMGIT: media: qcom: iris: extract firmware description data
lumag Mar 29, 2026
4dcb6d1
FROMLIST: media: iris: Initialize HFI ops after firmware load in core…
dikshita-agarwal May 12, 2026
9a064b8
FROMLIST: media: iris: Add Gen2 firmware autodetect and fallback
dikshita-agarwal May 12, 2026
8d9f545
FROMLIST: media: iris: optimize COMV buffer allocation for VPU3x and …
May 13, 2026
d98d7db
FROMLIST: media: iris: switch to hardware mode after firmware boot
Mar 13, 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
1 change: 1 addition & 0 deletions drivers/media/platform/qcom/iris/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ config VIDEO_QCOM_IRIS
select V4L2_MEM2MEM_DEV
select QCOM_MDT_LOADER if ARCH_QCOM
select QCOM_SCM
select QCOM_UBWC_CONFIG
select VIDEOBUF2_DMA_CONTIG
help
This is a V4L2 driver for Qualcomm iris video accelerator
Expand Down
6 changes: 4 additions & 2 deletions drivers/media/platform/qcom/iris/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ 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_gen1.o \
iris_platform_gen2.o \
iris_platform_vpu2.o \
iris_platform_vpu3x.o \
iris_power.o \
iris_probe.o \
iris_resources.o \
Expand Down
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
9 changes: 7 additions & 2 deletions drivers/media/platform/qcom/iris/iris_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,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 Down Expand Up @@ -80,6 +79,12 @@ int iris_core_init(struct iris_core *core)
if (ret)
goto error_unload_fw;

core->iris_firmware_data->init_hfi_ops(core);

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

ret = iris_hfi_core_init(core);
if (ret)
goto error_unload_fw;
Expand Down
14 changes: 10 additions & 4 deletions drivers/media/platform/qcom/iris/iris_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ enum domain_type {
DECODER = BIT(1),
};

struct qcom_ubwc_cfg_data;

/**
* struct iris_core - holds core parameters valid for all instances
*
Expand All @@ -55,6 +57,9 @@ 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
* @ubwc_cfg: UBWC configuration for the platform
* @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 @@ -68,8 +73,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 @@ -106,6 +110,9 @@ 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;
const struct qcom_ubwc_cfg_data *ubwc_cfg;
enum iris_core_state state;
dma_addr_t iface_q_table_daddr;
dma_addr_t sfr_daddr;
Expand All @@ -119,8 +126,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