From patchwork Fri May 2 15:44:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislaw Gruszka X-Patchwork-Id: 886850 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99A972580F4 for ; Fri, 2 May 2025 15:44:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200695; cv=none; b=GBlDRAjHpC/ac9mBhq40ZGlM0JsIIqslt848JNS1GMQYrSV4KPWsjjK/+W3gtcwjGvT0w5XlG+4VrGHLG9Tyrzop9b4/OdlwBgtawswEc5e0uV7l96PXx0C8Gar7IyQs31RqToyFNK2GLzpsKGKr8DQWWmjySG/YVKqlPhaScTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200695; c=relaxed/simple; bh=DRUxhlBp8oVdMU+66E3k8oMJwnV8bCvCfN5hDeS6tqs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RmK0bU85bzp73yQS/WT1QW5z8WYnLMC8aD1Xw2aNL/ZsXWbf8EumjZgNrYyhPMthJOsTngYQidj54ChzWfzg5Sne9BqKAgyXPjVAXkR879sJCez1hz6uBOhiFLktp+noM4+oIkA8xYwef1uB9m6UZcWMD5EAMhtnH6yiK9FwFwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=b8VZFhhS; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="b8VZFhhS" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746200693; x=1777736693; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DRUxhlBp8oVdMU+66E3k8oMJwnV8bCvCfN5hDeS6tqs=; b=b8VZFhhSuGfUE63HLrQUC8br5cWDvuRaDXxKnSr0mmGDv/EDHcpxmIC6 v2uFD8cmiY29CEqqe982gndHYXcNY7PNFfxGyF8YZ+qhcG0D2aY3ECzbA jGCzYAsITqNgR21wSrjqXd1LvmvmA5MhqtRJVuWt59r6sWwDhmA5IEHQS XafDDnB2i4hQhnxgQU6TjMLOH3u98xuW9i+hO80M6MqcVhh0BJ0cvNKex MfUy+CafRj+4Egs8fGXkY8ZW52EFVK2Qg7IZpIRQrm1KZE4nyWv6HM46k r0cNKKOgJCQBJrcZCER8YNWXzWuckLBhqmMnVs19zXd3Zt1PP7/ezpgTT A==; X-CSE-ConnectionGUID: Un6f36jBQvOrLD/GsWN+Mw== X-CSE-MsgGUID: sEojFeUoQXK4OZnV/oV3/g== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="58551565" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="58551565" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:44:53 -0700 X-CSE-ConnectionGUID: VR37C8g8RLiEv9G6xe53Rw== X-CSE-MsgGUID: 3VuHx+QLQx+6mKuehHih2w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="134626220" Received: from csteflea-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.252.84]) by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:44:52 -0700 From: Stanislaw Gruszka To: linux-media@vger.kernel.org Cc: Sakari Ailus , Bingbu Cao Subject: [PATCH v3 1/5] media: intel/ipu6: Remove pin_ready function pointer Date: Fri, 2 May 2025 17:44:42 +0200 Message-Id: <20250502154446.88965-2-stanislaw.gruszka@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> References: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We can call ipu6_isys_queue_buf_ready() directly. The only current usage is pin_ready pointer is to check if pin was prepared before IPU6_FW_ISYS_RESP_TYPE_PIN_DATA_READY interrupt, we can use queue pointer for that purpose. Signed-off-by: Stanislaw Gruszka --- drivers/media/pci/intel/ipu6/ipu6-isys-queue.c | 2 +- drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 3 +-- drivers/media/pci/intel/ipu6/ipu6-isys-video.h | 8 +------- drivers/media/pci/intel/ipu6/ipu6-isys.c | 7 +++---- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c index 12b42b46ebab..3998b0087da3 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c @@ -738,7 +738,7 @@ static void ipu6_stream_buf_ready(struct ipu6_isys_stream *stream, u8 pin_id, u32 pin_addr, u64 time, bool error_check) { - struct ipu6_isys_queue *aq = stream->output_pins[pin_id].aq; + struct ipu6_isys_queue *aq = stream->output_pins_queue[pin_id]; struct ipu6_isys *isys = stream->isys; struct device *dev = &isys->adev->auxdev.dev; struct ipu6_isys_buffer *ib; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c index e9705bb077b6..46b76cdae408 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c @@ -485,8 +485,7 @@ static int ipu6_isys_fw_pin_cfg(struct ipu6_isys_video *av, output_pins = cfg->nof_output_pins++; aq->fw_output = output_pins; - stream->output_pins[output_pins].pin_ready = ipu6_isys_queue_buf_ready; - stream->output_pins[output_pins].aq = aq; + stream->output_pins_queue[output_pins] = aq; output_pin = &cfg->output_pins[output_pins]; output_pin->input_pin_id = input_pins; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h index 78cf6b8d5211..7b347c99d907 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h @@ -37,12 +37,6 @@ struct sequence_info { u64 timestamp; }; -struct output_pin_data { - void (*pin_ready)(struct ipu6_isys_stream *stream, - struct ipu6_fw_isys_resp_info_abi *info); - struct ipu6_isys_queue *aq; -}; - /* * Align with firmware stream. Each stream represents a CSI virtual channel. * May map to multiple video devices @@ -68,7 +62,7 @@ struct ipu6_isys_stream { struct completion stream_stop_completion; struct ipu6_isys *isys; - struct output_pin_data output_pins[IPU6_ISYS_OUTPUT_PINS]; + struct ipu6_isys_queue *output_pins_queue[IPU6_ISYS_OUTPUT_PINS]; int error; u8 vc; }; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c b/drivers/media/pci/intel/ipu6/ipu6-isys.c index 9b7ff5c440de..4d2ca6aae328 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c @@ -1294,12 +1294,11 @@ static int isys_isr_one(struct ipu6_bus_device *adev) */ ipu6_put_fw_msg_buf(ipu6_bus_get_drvdata(adev), resp->buf_id); if (resp->pin_id < IPU6_ISYS_OUTPUT_PINS && - stream->output_pins[resp->pin_id].pin_ready) - stream->output_pins[resp->pin_id].pin_ready(stream, - resp); + stream->output_pins_queue[resp->pin_id]) + ipu6_isys_queue_buf_ready(stream, resp); else dev_warn(&adev->auxdev.dev, - "%d:No data pin ready handler for pin id %d\n", + "%d:No queue for pin id %d\n", resp->stream_handle, resp->pin_id); if (csi2) ipu6_isys_csi2_error(csi2); From patchwork Fri May 2 15:44:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislaw Gruszka X-Patchwork-Id: 887064 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8967819004A for ; Fri, 2 May 2025 15:44:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200701; cv=none; b=czOM3y4iGGZgl5Cdp0n+PDKQwvQQg19elyo4EF1zdi+ldt9E8UwI1e9fby/HNIonHQSe+ATpONrzIRg+vN6wjaG0l4IwRVGjy9LjO1VQS4Ct/61xH9GJGeEIPTQdz0pPvmSdmWvLH3hWoDs6TKL4uaDYV5HqvchyPZTY59JgWSs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200701; c=relaxed/simple; bh=H8ECYKskylgxEYcdWQEFj2niyiSEn3nWH+xmEdIf+Vg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XvVCcCSAXAIHDDLoFUd7jqA2hnDf099K/NuHg73QKA3Wifz7dOmwwBjCIcMqvPgVaH+dY4c8IcHk3ZVXOex5oQtFfBEPyRM1KlWVopqkpCU5OMb2ZToQf7FCwflqK/8FPCI69kpRnKaZEKf5qwh1dGSE8bLNNHe4MM77bxK8Ce4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=iiHJ8NwD; arc=none smtp.client-ip=192.198.163.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="iiHJ8NwD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746200700; x=1777736700; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=H8ECYKskylgxEYcdWQEFj2niyiSEn3nWH+xmEdIf+Vg=; b=iiHJ8NwDnJ3gdKMGzjLpWjfRa5zmpJdJCD1C6rgSGB0Qqq5opWuzNVb/ bSXPNFBzUVkuJ0A36LDOrIWh6jzv7buSo+EFpSvQd9iccvCWgQZCwSBQQ B/IY9LxZzkzykNlVaPQ2sW4yO5+LW7ntIOzcX4GP6XtFqGZsDQPx8P4BV rcWlZcF7BRpb1Q87NyCF/1aTjqICqNghCDtDRcdF5vEzdTknaFKnleC/L 4kPi1ehQ5egLLBQ66cEDL68vGOq7dpu/FyHjH6yQN7vZk4QMBqEOOIh5y UHZnssSdSNVJhFXiTbGqNABlr6wfrIH8LvN0lgUamWG5hBctED2zt5C6p Q==; X-CSE-ConnectionGUID: MCYf0Pl3SpOV9WAVE20U3g== X-CSE-MsgGUID: f/5E2iEgSridB2rB74gPwA== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="50540748" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="50540748" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:44:59 -0700 X-CSE-ConnectionGUID: ucFGZoIERw2ZndxKIiX/ug== X-CSE-MsgGUID: i0YozFE8SVG6ybyIbBAT/w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="135178513" Received: from csteflea-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.252.84]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:44:57 -0700 From: Stanislaw Gruszka To: linux-media@vger.kernel.org Cc: Sakari Ailus , Bingbu Cao Subject: [PATCH v3 2/5] media: intel/ipu6: Remove line_align Date: Fri, 2 May 2025 17:44:43 +0200 Message-Id: <20250502154446.88965-3-stanislaw.gruszka@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> References: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 isys->line_align value is only used in one place and we can just use the proper value directly there. Signed-off-by: Stanislaw Gruszka --- drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 2 +- drivers/media/pci/intel/ipu6/ipu6-isys.c | 1 - drivers/media/pci/intel/ipu6/ipu6-isys.h | 4 ---- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c index 46b76cdae408..44b88b546f68 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c @@ -241,7 +241,7 @@ static void ipu6_isys_try_fmt_cap(struct ipu6_isys_video *av, u32 type, else *bytesperline = DIV_ROUND_UP(*width * pfmt->bpp, BITS_PER_BYTE); - *bytesperline = ALIGN(*bytesperline, av->isys->line_align); + *bytesperline = ALIGN(*bytesperline, 64); /* * (height + 1) * bytesperline due to a hardware issue: the DMA unit diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c b/drivers/media/pci/intel/ipu6/ipu6-isys.c index 4d2ca6aae328..8286dea681fb 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c @@ -1089,7 +1089,6 @@ static int isys_probe(struct auxiliary_device *auxdev, INIT_LIST_HEAD(&isys->framebuflist); INIT_LIST_HEAD(&isys->framebuflist_fw); - isys->line_align = IPU6_ISYS_2600_MEM_LINE_ALIGN; isys->icache_prefetch = 0; dev_set_drvdata(&auxdev->dev, isys); diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h b/drivers/media/pci/intel/ipu6/ipu6-isys.h index 610b60e69152..f488e782c26e 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h @@ -29,8 +29,6 @@ struct ipu6_bus_device; IPU6_ISYS_UNISPART_IRQ_CSI0 | \ IPU6_ISYS_UNISPART_IRQ_CSI1) -#define IPU6_ISYS_2600_MEM_LINE_ALIGN 64 - /* * Current message queue configuration. These must be big enough * so that they never gets full. Queues are located in system memory @@ -118,7 +116,6 @@ struct sensor_async_sd { * @streams: streams per firmware stream ID * @fwcom: fw communication layer private pointer * or optional external library private pointer - * @line_align: line alignment in memory * @phy_termcal_val: the termination calibration value, only used for DWC PHY * @need_reset: Isys requires d0i0->i3 transition * @ref_count: total number of callers fw open @@ -140,7 +137,6 @@ struct ipu6_isys { struct ipu6_isys_stream streams[IPU6_ISYS_MAX_STREAMS]; int streams_ref_count[IPU6_ISYS_MAX_STREAMS]; void *fwcom; - unsigned int line_align; u32 phy_termcal_val; bool need_reset; bool icache_prefetch; From patchwork Fri May 2 15:44:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislaw Gruszka X-Patchwork-Id: 886849 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63C872586C3 for ; Fri, 2 May 2025 15:45:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200703; cv=none; b=UroxJh6Tit/0JMk2R33WHzzN1MnYdvPS08xQ9BNrJZcsFeWtmIyXnxPdEnorpNfZk5Pt2Ffa49xb6HM3hxfW1pWc/d7urU/lLdMr9MM5DDzfXUMFT/UfwyxA+wla+sUzfiBJpuWL9xlLzWwGx216ESSg98+erNT/rJyyX183pJg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200703; c=relaxed/simple; bh=DdChOKnkUSHLNyR/IOEcgZSRasst5rYXPuKDtQ1ow88=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QlozPrgsIHjc54XIkhixQIVbpoYZ/UZI7M/7YoQtiiGOOuHEW/G3t6vpEkYaqyp9q72n9vX8O/tEIkd5pc5Z9ViFn13iBUbWIXIM0OetolxBuzs50n/rNHgjT6dMd4sUGSvkLHz0pSMosBcZi+bs6W91ZYaQsn4EHkPSFz0ATkc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=VR7qwKrp; arc=none smtp.client-ip=192.198.163.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="VR7qwKrp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746200702; x=1777736702; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=DdChOKnkUSHLNyR/IOEcgZSRasst5rYXPuKDtQ1ow88=; b=VR7qwKrpUq3sye31Ev1EVa+cUEdg2MOcRasUhUn2X5bmC518xI/dmZIt PPZggZb9+xQL5deBNyi97LMpdIH6jOyKnQj3ULUAcapONUhYc+0drYJYy q4mUA5KERQd/InKgoAPGdmAAoTnioa3Sa9J6fm4HN9k1VXJZRo7h24o/A EFMdBza3uQlF0YIyIwWOqu1pNNcAWpn7q69YOJqWJapsCmvwf5mE8Ood8 l2pS4OGFrVAebwcZ3LJ3JNZOmyb29HqFdWus5BGuDMz0COB8q/iqprhId NOvTO+nDC3hkEsvEIEQ50sUuISw7Z+SdyhNMskRxO47vcRbJ4o2NPFcKN Q==; X-CSE-ConnectionGUID: vpL2kI+zRaG5zgISyweXog== X-CSE-MsgGUID: YeKaoslzQz6cUgaGTxNdUA== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="50540751" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="50540751" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:02 -0700 X-CSE-ConnectionGUID: as25tWUeR+64+nuSggcRKw== X-CSE-MsgGUID: APNKh0dQTBK5tBeqpPyChw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="135178522" Received: from csteflea-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.252.84]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:01 -0700 From: Stanislaw Gruszka To: linux-media@vger.kernel.org Cc: Sakari Ailus , Bingbu Cao Subject: [PATCH v3 3/5] media: intel/ipu6: Change deprecated lock comment Date: Fri, 2 May 2025 17:44:44 +0200 Message-Id: <20250502154446.88965-4-stanislaw.gruszka@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> References: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 pre_streamon_queued is no longer used. The lock now is protecting active and incoming lists. Signed-off-by: Stanislaw Gruszka --- drivers/media/pci/intel/ipu6/ipu6-isys-queue.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h index b865428a0fce..844dfda15ab6 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h @@ -20,10 +20,7 @@ struct ipu6_isys_stream; struct ipu6_isys_queue { struct vb2_queue vbq; struct list_head node; - /* - * @lock: serialise access to queued and pre_streamon_queued - */ - spinlock_t lock; + spinlock_t lock; /* Protects active and incoming lists */ struct list_head active; struct list_head incoming; unsigned int fw_output; From patchwork Fri May 2 15:44:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislaw Gruszka X-Patchwork-Id: 887063 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F81019004A for ; Fri, 2 May 2025 15:45:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200708; cv=none; b=thV421Ess30rDg5m/bar9FJG2Ov281l2paBoRuJj4WngB6nE8+tHEkrKoK90Gs91Fz3zoAOyYNi8zA/Ed+edb5Oyn4MtHqZbnKKQgxNkBU8q0+Y1IRnuzTb7IwrBZQ9y03VQTOAqRM+zfOaqizVNfONWdwgONJNWxQtaqkOeBEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200708; c=relaxed/simple; bh=im74MGMavQwj5I031m7PspeFpzo9OVxmW6+/AeKhduw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=a95Lo/QMwLPZVBT0b6Imawd9j2PgcLTrWJtUdYGrWKt34l5Ks4r8LKjFmIh6ne+zIav+cLdDgvB1iL7cJ5toff6QVJ7khE8nn1q+gvddBEYxfSDysrY5Mb0m1uEEIieGubPl8Mg6qm8Y2TSTG/goH+7VVCyWFMy/zYKvx6rq1YY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=ekC8rm1N; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="ekC8rm1N" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746200706; x=1777736706; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=im74MGMavQwj5I031m7PspeFpzo9OVxmW6+/AeKhduw=; b=ekC8rm1NIn8exSeDuqCVYvfOLMABHp0QbA2SIPH1L0qo8C8Du/Uf0iDr uhikou+Bdr+Rv4ZV6S8eQJBgYGZQ14bRimG6c30BypX16HAtRIz7V98zb fc2a53rjn3M/m9ngpmzLiiw0XeIQA3hRlXInMxYzypLiHv3Zh1qKc/sb9 NT0xixrT5JC4m0SUudMycx1MqNjXubtVuP3szsj64HVuCQIa24CcYpvyr CtwPQeua7kD5qECGveYgAMZ7AreNRRNgP37w56p+0LtUUJIjTazSwfvmp CJ9dLkiyZSrXzdRKGBJGs0pbJ7AIj7o6SXO6t4PpTGnour4Abz5XUtta+ Q==; X-CSE-ConnectionGUID: syXwxmXcR5e97qm/JaVrGg== X-CSE-MsgGUID: jWtMPJhgRg6Ow0A8tiR+rw== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="58551585" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="58551585" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:06 -0700 X-CSE-ConnectionGUID: 0DHSf4qoQfSto5kmaXAZuA== X-CSE-MsgGUID: 11xTKnjIQkCWQh8/MSdFsg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="134626239" Received: from csteflea-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.252.84]) by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:04 -0700 From: Stanislaw Gruszka To: linux-media@vger.kernel.org Cc: Sakari Ailus , Bingbu Cao Subject: [PATCH v3 4/5] media: intel/ipu6: Move common structures definitions to ipu-isys.h Date: Fri, 2 May 2025 17:44:45 +0200 Message-Id: <20250502154446.88965-5-stanislaw.gruszka@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> References: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Move some structures that will be reused in ipu7 to ipu-isys.h file. Use one header file instead of multiple, since we frequently include most of ipu6-*.h headers in c files anyways. Signed-off-by: Stanislaw Gruszka --- drivers/media/pci/intel/ipu6/ipu-isys.h | 92 +++++++++++++++++++ .../media/pci/intel/ipu6/ipu6-isys-queue.c | 2 +- .../media/pci/intel/ipu6/ipu6-isys-queue.h | 53 +---------- .../media/pci/intel/ipu6/ipu6-isys-video.h | 54 +---------- drivers/media/pci/intel/ipu6/ipu6-isys.c | 1 + 5 files changed, 96 insertions(+), 106 deletions(-) diff --git a/drivers/media/pci/intel/ipu6/ipu-isys.h b/drivers/media/pci/intel/ipu6/ipu-isys.h index d39dbb11a4a7..69a790695856 100644 --- a/drivers/media/pci/intel/ipu6/ipu-isys.h +++ b/drivers/media/pci/intel/ipu6/ipu-isys.h @@ -4,10 +4,14 @@ #ifndef IPU_ISYS_H #define IPU_ISYS_H +#include #include +#include +#include #include #include +#include struct ipu_isys_subdev { struct v4l2_subdev sd; @@ -20,6 +24,94 @@ struct ipu_isys_subdev { #define to_ipu_isys_subdev(__sd) container_of(__sd, struct ipu_isys_subdev, sd) +struct ipu6_isys_queue { + struct vb2_queue vbq; + struct list_head node; + spinlock_t lock; /* Protects active and incoming lists */ + struct list_head active; + struct list_head incoming; + unsigned int fw_output; +}; + +struct ipu6_isys_buffer { + struct list_head head; + atomic_t str2mmio_flag; +}; + +struct ipu6_isys_video_buffer { + struct vb2_v4l2_buffer vb_v4l2; + struct ipu6_isys_buffer ib; + dma_addr_t dma_addr; +}; + +struct ipu6_isys_buffer_list { + struct list_head head; + unsigned int nbufs; +}; + +#define vb2_queue_to_isys_queue(__vb2) \ + container_of(__vb2, struct ipu6_isys_queue, vbq) + +#define ipu6_isys_to_isys_video_buffer(__ib) \ + container_of(__ib, struct ipu6_isys_video_buffer, ib) + +#define vb2_buffer_to_ipu6_isys_video_buffer(__vvb) \ + container_of(__vvb, struct ipu6_isys_video_buffer, vb_v4l2) + +#define ipu6_isys_buffer_to_vb2_buffer(__ib) \ + (&ipu6_isys_to_isys_video_buffer(__ib)->vb_v4l2.vb2_buf) + +#define IPU6_ISYS_BUFFER_LIST_FL_INCOMING BIT(0) +#define IPU6_ISYS_BUFFER_LIST_FL_ACTIVE BIT(1) +#define IPU6_ISYS_BUFFER_LIST_FL_SET_STATE BIT(2) + +#define IPU6_ISYS_OUTPUT_PINS 11 +#define IPU6_ISYS_MAX_PARALLEL_SOF 2 + +struct ipu6_isys_pixelformat { + u32 pixelformat; + u32 bpp; + u32 bpp_packed; + u32 code; + u32 css_pixelformat; + bool is_meta; +}; + +struct ipu_isys_sequence_info { + unsigned int sequence; + u64 timestamp; +}; + +/* + * Align with firmware stream. Each stream represents a CSI virtual channel. + * May map to multiple video devices + */ +struct ipu6_isys_stream { + struct mutex mutex; + struct media_entity *source_entity; + atomic_t sequence; + unsigned int seq_index; + struct ipu_isys_sequence_info seq[IPU6_ISYS_MAX_PARALLEL_SOF]; + int stream_source; + int stream_handle; + unsigned int nr_output_pins; + struct ipu_isys_subdev *asd; + + int nr_queues; /* Number of capture queues */ + int nr_streaming; + int streaming; /* Has streaming been really started? */ + struct list_head queues; + struct completion stream_open_completion; + struct completion stream_close_completion; + struct completion stream_start_completion; + struct completion stream_stop_completion; + struct ipu6_isys *isys; + + struct ipu6_isys_queue *output_pins_queue[IPU6_ISYS_OUTPUT_PINS]; + int error; + u8 vc; +}; + int ipu_isys_get_stream_pad_fmt(struct v4l2_subdev *sd, u32 pad, u32 stream, struct v4l2_mbus_framefmt *format); int ipu_isys_get_stream_pad_crop(struct v4l2_subdev *sd, u32 pad, u32 stream, diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c index 3998b0087da3..ad813323e62b 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c @@ -20,7 +20,7 @@ #include "ipu6-dma.h" #include "ipu6-fw-isys.h" #include "ipu6-isys.h" -#include "ipu6-isys-video.h" +#include "ipu6-isys-queue.h" static int ipu6_isys_buf_init(struct vb2_buffer *vb) { diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h index 844dfda15ab6..b4b14e0ef044 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h @@ -4,59 +4,8 @@ #ifndef IPU6_ISYS_QUEUE_H #define IPU6_ISYS_QUEUE_H -#include -#include -#include -#include -#include - -#include - +#include "ipu-isys.h" #include "ipu6-fw-isys.h" -#include "ipu6-isys-video.h" - -struct ipu6_isys_stream; - -struct ipu6_isys_queue { - struct vb2_queue vbq; - struct list_head node; - spinlock_t lock; /* Protects active and incoming lists */ - struct list_head active; - struct list_head incoming; - unsigned int fw_output; -}; - -struct ipu6_isys_buffer { - struct list_head head; - atomic_t str2mmio_flag; -}; - -struct ipu6_isys_video_buffer { - struct vb2_v4l2_buffer vb_v4l2; - struct ipu6_isys_buffer ib; - dma_addr_t dma_addr; -}; - -#define IPU6_ISYS_BUFFER_LIST_FL_INCOMING BIT(0) -#define IPU6_ISYS_BUFFER_LIST_FL_ACTIVE BIT(1) -#define IPU6_ISYS_BUFFER_LIST_FL_SET_STATE BIT(2) - -struct ipu6_isys_buffer_list { - struct list_head head; - unsigned int nbufs; -}; - -#define vb2_queue_to_isys_queue(__vb2) \ - container_of(__vb2, struct ipu6_isys_queue, vbq) - -#define ipu6_isys_to_isys_video_buffer(__ib) \ - container_of(__ib, struct ipu6_isys_video_buffer, ib) - -#define vb2_buffer_to_ipu6_isys_video_buffer(__vvb) \ - container_of(__vvb, struct ipu6_isys_video_buffer, vb_v4l2) - -#define ipu6_isys_buffer_to_vb2_buffer(__ib) \ - (&ipu6_isys_to_isys_video_buffer(__ib)->vb_v4l2.vb2_buf) void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, unsigned long op_flags, diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h index 7b347c99d907..0b80d73173ff 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h @@ -13,59 +13,7 @@ #include #include -#include "ipu6-isys-queue.h" - -#define IPU6_ISYS_OUTPUT_PINS 11 -#define IPU6_ISYS_MAX_PARALLEL_SOF 2 - -struct file; -struct ipu6_isys; -struct ipu6_isys_csi2; -struct ipu_isys_subdev; - -struct ipu6_isys_pixelformat { - u32 pixelformat; - u32 bpp; - u32 bpp_packed; - u32 code; - u32 css_pixelformat; - bool is_meta; -}; - -struct sequence_info { - unsigned int sequence; - u64 timestamp; -}; - -/* - * Align with firmware stream. Each stream represents a CSI virtual channel. - * May map to multiple video devices - */ -struct ipu6_isys_stream { - struct mutex mutex; - struct media_entity *source_entity; - atomic_t sequence; - unsigned int seq_index; - struct sequence_info seq[IPU6_ISYS_MAX_PARALLEL_SOF]; - int stream_source; - int stream_handle; - unsigned int nr_output_pins; - struct ipu_isys_subdev *asd; - - int nr_queues; /* Number of capture queues */ - int nr_streaming; - int streaming; /* Has streaming been really started? */ - struct list_head queues; - struct completion stream_open_completion; - struct completion stream_close_completion; - struct completion stream_start_completion; - struct completion stream_stop_completion; - struct ipu6_isys *isys; - - struct ipu6_isys_queue *output_pins_queue[IPU6_ISYS_OUTPUT_PINS]; - int error; - u8 vc; -}; +#include "ipu-isys.h" struct video_stream_watermark { u32 width; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c b/drivers/media/pci/intel/ipu6/ipu6-isys.c index 8286dea681fb..7fc529b5a9f5 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c @@ -37,6 +37,7 @@ #include "ipu6-dma.h" #include "ipu6-isys.h" #include "ipu6-isys-csi2.h" +#include "ipu6-isys-queue.h" #include "ipu6-mmu.h" #include "ipu6-platform-buttress-regs.h" #include "ipu6-platform-isys-csi2-reg.h" From patchwork Fri May 2 15:44:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislaw Gruszka X-Patchwork-Id: 886848 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC48B19F464 for ; Fri, 2 May 2025 15:45:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200712; cv=none; b=Uc0aUxF8Cbp63hjPrBNI1Cm9JSYcx7oHQySS56dY4qlt0US1x/vcj9WWuXk1FbGy9xOthw5gxbaKXKYHOfCxOrMtn6SoB7fxGUxw/bw6FB5ST0SIFtVKdbiIQaZqWkw3DBjTkajb3zvb1F2y5Pmdq/yvoAbmsa4UQSEqGtmgwRA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746200712; c=relaxed/simple; bh=cqKVf4CcfchfhdQJR7kxhGXH7WcJ++HzU/PYNWVepD4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IxPoY7/VRsAl8Cz4S24uJs/FnEWooWRcAjq8sP0hBBADPplFlL/hfDQIKb3qZbBoDa3yN9vREG+xD6idOnwSw9YNxgAgsSPTNdrcLntwwt0iC8uWRwp1f1XHqmaK2XaXo82x3MsFdcRJcWTX6mHWzNWjcewyszmW9r2KXMQ169c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QluOJiMz; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QluOJiMz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746200710; x=1777736710; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cqKVf4CcfchfhdQJR7kxhGXH7WcJ++HzU/PYNWVepD4=; b=QluOJiMzRHlEVR1nA8GK1E8qtQs2e8Q9oZg/WE12dZMjvUdcLpRnZKkE /xEguEm76phitwsi2kCl6pxr8qWgyWHk2JprNW2IaCGCTewYYA1I8APvY IcUe5gu2ADUFN/oB2tQjko+L88/iCV/tzCPw+SgRw2UcUy7dpNf6HlSvB 7aU5UHpUX/RlSGy+2A1PUnnaM8nQKtvzp+WSmQpQaoMkIVw8VYH4fTmVl A3OJeM1b4cNSPKeDIwO/XB+l6Wmxkfav9uX3ofVOoCHeWzHXh1LZQ09Oy jDXTT0x0K6XIB7ifUIztr03MrqwZyDFP/FFxVKjOKsN+LVSCJcT9jyjIA A==; X-CSE-ConnectionGUID: 7OGViS8FTCeZus5nftCPlw== X-CSE-MsgGUID: JkNP7DC2REGwgM6yxjBBCQ== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="58551599" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="58551599" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:09 -0700 X-CSE-ConnectionGUID: l+9XiO/fRqekFhUEm0RZ+A== X-CSE-MsgGUID: KnQz7oPDSGK+m0c5kafFkA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="134626265" Received: from csteflea-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.252.84]) by fmviesa007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 08:45:08 -0700 From: Stanislaw Gruszka To: linux-media@vger.kernel.org Cc: Sakari Ailus , Bingbu Cao Subject: [PATCH v3 5/5] media: intel/ipu6: Rename common structures Date: Fri, 2 May 2025 17:44:46 +0200 Message-Id: <20250502154446.88965-6-stanislaw.gruszka@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> References: <20250502154446.88965-1-stanislaw.gruszka@linux.intel.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Rename common structures and defines with ipu_isys_ prefix, to make clean distinction between ipu common layer and hw generation specific structures. Signed-off-by: Stanislaw Gruszka --- drivers/media/pci/intel/ipu6/ipu-isys.h | 42 ++--- drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 4 +- drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h | 6 +- .../media/pci/intel/ipu6/ipu6-isys-queue.c | 176 +++++++++--------- .../media/pci/intel/ipu6/ipu6-isys-queue.h | 13 +- .../media/pci/intel/ipu6/ipu6-isys-video.c | 53 +++--- .../media/pci/intel/ipu6/ipu6-isys-video.h | 18 +- drivers/media/pci/intel/ipu6/ipu6-isys.c | 14 +- drivers/media/pci/intel/ipu6/ipu6-isys.h | 4 +- 9 files changed, 162 insertions(+), 168 deletions(-) diff --git a/drivers/media/pci/intel/ipu6/ipu-isys.h b/drivers/media/pci/intel/ipu6/ipu-isys.h index 69a790695856..42d7be93a876 100644 --- a/drivers/media/pci/intel/ipu6/ipu-isys.h +++ b/drivers/media/pci/intel/ipu6/ipu-isys.h @@ -24,7 +24,7 @@ struct ipu_isys_subdev { #define to_ipu_isys_subdev(__sd) container_of(__sd, struct ipu_isys_subdev, sd) -struct ipu6_isys_queue { +struct ipu_isys_queue { struct vb2_queue vbq; struct list_head node; spinlock_t lock; /* Protects active and incoming lists */ @@ -33,42 +33,42 @@ struct ipu6_isys_queue { unsigned int fw_output; }; -struct ipu6_isys_buffer { +struct ipu_isys_buffer { struct list_head head; atomic_t str2mmio_flag; }; -struct ipu6_isys_video_buffer { +struct ipu_isys_video_buffer { struct vb2_v4l2_buffer vb_v4l2; - struct ipu6_isys_buffer ib; + struct ipu_isys_buffer ib; dma_addr_t dma_addr; }; -struct ipu6_isys_buffer_list { +struct ipu_isys_buffer_list { struct list_head head; unsigned int nbufs; }; #define vb2_queue_to_isys_queue(__vb2) \ - container_of(__vb2, struct ipu6_isys_queue, vbq) + container_of(__vb2, struct ipu_isys_queue, vbq) -#define ipu6_isys_to_isys_video_buffer(__ib) \ - container_of(__ib, struct ipu6_isys_video_buffer, ib) +#define vb2_buffer_to_isys_video_buffer(__vvb) \ + container_of(__vvb, struct ipu_isys_video_buffer, vb_v4l2) -#define vb2_buffer_to_ipu6_isys_video_buffer(__vvb) \ - container_of(__vvb, struct ipu6_isys_video_buffer, vb_v4l2) +#define ipu_isys_buffer_to_isys_video_buffer(__ib) \ + container_of(__ib, struct ipu_isys_video_buffer, ib) -#define ipu6_isys_buffer_to_vb2_buffer(__ib) \ - (&ipu6_isys_to_isys_video_buffer(__ib)->vb_v4l2.vb2_buf) +#define ipu_isys_buffer_to_vb2_buffer(__ib) \ + (&ipu_isys_buffer_to_isys_video_buffer(__ib)->vb_v4l2.vb2_buf) -#define IPU6_ISYS_BUFFER_LIST_FL_INCOMING BIT(0) -#define IPU6_ISYS_BUFFER_LIST_FL_ACTIVE BIT(1) -#define IPU6_ISYS_BUFFER_LIST_FL_SET_STATE BIT(2) +#define IPU_ISYS_BUFFER_LIST_INCOMING BIT(0) +#define IPU_ISYS_BUFFER_LIST_ACTIVE BIT(1) +#define IPU_ISYS_BUFFER_LIST_SET_STATE BIT(2) -#define IPU6_ISYS_OUTPUT_PINS 11 -#define IPU6_ISYS_MAX_PARALLEL_SOF 2 +#define IPU_ISYS_OUTPUT_PINS 11U +#define IPU_ISYS_MAX_PARALLEL_SOF 2U -struct ipu6_isys_pixelformat { +struct ipu_isys_pixelformat { u32 pixelformat; u32 bpp; u32 bpp_packed; @@ -86,12 +86,12 @@ struct ipu_isys_sequence_info { * Align with firmware stream. Each stream represents a CSI virtual channel. * May map to multiple video devices */ -struct ipu6_isys_stream { +struct ipu_isys_stream { struct mutex mutex; struct media_entity *source_entity; atomic_t sequence; unsigned int seq_index; - struct ipu_isys_sequence_info seq[IPU6_ISYS_MAX_PARALLEL_SOF]; + struct ipu_isys_sequence_info seq[IPU_ISYS_MAX_PARALLEL_SOF]; int stream_source; int stream_handle; unsigned int nr_output_pins; @@ -107,7 +107,7 @@ struct ipu6_isys_stream { struct completion stream_stop_completion; struct ipu6_isys *isys; - struct ipu6_isys_queue *output_pins_queue[IPU6_ISYS_OUTPUT_PINS]; + struct ipu_isys_queue *output_pins_queue[IPU_ISYS_OUTPUT_PINS]; int error; u8 vc; }; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c index 74bbacad67c5..d4a2923f1f63 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c @@ -556,7 +556,7 @@ int ipu6_isys_csi2_init(struct ipu6_isys_csi2 *csi2, return ret; } -void ipu6_isys_csi2_sof_event_by_stream(struct ipu6_isys_stream *stream) +void ipu6_isys_csi2_sof_event_by_stream(struct ipu_isys_stream *stream) { struct video_device *vdev = stream->asd->sd.devnode; struct device *dev = &stream->isys->adev->auxdev.dev; @@ -572,7 +572,7 @@ void ipu6_isys_csi2_sof_event_by_stream(struct ipu6_isys_stream *stream) csi2->port, ev.u.frame_sync.frame_sequence, stream->vc); } -void ipu6_isys_csi2_eof_event_by_stream(struct ipu6_isys_stream *stream) +void ipu6_isys_csi2_eof_event_by_stream(struct ipu_isys_stream *stream) { struct device *dev = &stream->isys->adev->auxdev.dev; struct ipu6_isys_csi2 *csi2 = to_ipu6_isys_csi2(stream->asd); diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h index 24f01eed7e93..9fb9ae1cc608 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h @@ -16,7 +16,7 @@ struct v4l2_mbus_frame_desc_entry; struct ipu6_isys_video; struct ipu6_isys; -struct ipu6_isys_stream; +struct ipu_isys_stream; #define NR_OF_CSI2_VC 16 #define INVALID_VC_ID -1 @@ -65,8 +65,8 @@ s64 ipu6_isys_csi2_get_link_freq(struct ipu6_isys_csi2 *csi2); int ipu6_isys_csi2_init(struct ipu6_isys_csi2 *csi2, struct ipu6_isys *isys, void __iomem *base, unsigned int index); void ipu6_isys_csi2_cleanup(struct ipu6_isys_csi2 *csi2); -void ipu6_isys_csi2_sof_event_by_stream(struct ipu6_isys_stream *stream); -void ipu6_isys_csi2_eof_event_by_stream(struct ipu6_isys_stream *stream); +void ipu6_isys_csi2_sof_event_by_stream(struct ipu_isys_stream *stream); +void ipu6_isys_csi2_eof_event_by_stream(struct ipu_isys_stream *stream); void ipu6_isys_register_errors(struct ipu6_isys_csi2 *csi2); void ipu6_isys_csi2_error(struct ipu6_isys_csi2 *csi2); int ipu6_isys_csi2_get_remote_desc(u32 source_stream, diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c index ad813323e62b..bd53c51a28a0 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.c @@ -27,8 +27,8 @@ static int ipu6_isys_buf_init(struct vb2_buffer *vb) struct ipu6_isys *isys = vb2_get_drv_priv(vb->vb2_queue); struct sg_table *sg = vb2_dma_sg_plane_desc(vb, 0); struct vb2_v4l2_buffer *vvb = to_vb2_v4l2_buffer(vb); - struct ipu6_isys_video_buffer *ivb = - vb2_buffer_to_ipu6_isys_video_buffer(vvb); + struct ipu_isys_video_buffer *ivb = + vb2_buffer_to_isys_video_buffer(vvb); int ret; ret = ipu6_dma_map_sgtable(isys->adev, sg, DMA_TO_DEVICE, 0); @@ -45,8 +45,8 @@ static void ipu6_isys_buf_cleanup(struct vb2_buffer *vb) struct ipu6_isys *isys = vb2_get_drv_priv(vb->vb2_queue); struct sg_table *sg = vb2_dma_sg_plane_desc(vb, 0); struct vb2_v4l2_buffer *vvb = to_vb2_v4l2_buffer(vb); - struct ipu6_isys_video_buffer *ivb = - vb2_buffer_to_ipu6_isys_video_buffer(vvb); + struct ipu_isys_video_buffer *ivb = + vb2_buffer_to_isys_video_buffer(vvb); ivb->dma_addr = 0; ipu6_dma_unmap_sgtable(isys->adev, sg, DMA_TO_DEVICE, 0); @@ -56,7 +56,7 @@ static int ipu6_isys_queue_setup(struct vb2_queue *q, unsigned int *num_buffers, unsigned int *num_planes, unsigned int sizes[], struct device *alloc_devs[]) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(q); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(q); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); struct device *dev = &av->isys->adev->auxdev.dev; u32 size = ipu6_isys_get_data_size(av); @@ -77,7 +77,7 @@ static int ipu6_isys_queue_setup(struct vb2_queue *q, unsigned int *num_buffers, static int ipu6_isys_buf_prepare(struct vb2_buffer *vb) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); struct device *dev = &av->isys->adev->auxdev.dev; u32 bytesperline = ipu6_isys_get_bytes_per_line(av); @@ -99,11 +99,11 @@ static int ipu6_isys_buf_prepare(struct vb2_buffer *vb) * Queue a buffer list back to incoming or active queues. The buffers * are removed from the buffer list. */ -void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, +void ipu6_isys_buffer_list_queue(struct ipu_isys_buffer_list *bl, unsigned long op_flags, enum vb2_buffer_state state) { - struct ipu6_isys_buffer *ib, *ib_safe; + struct ipu_isys_buffer *ib, *ib_safe; unsigned long flags; bool first = true; @@ -111,13 +111,13 @@ void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, return; WARN_ON_ONCE(!bl->nbufs); - WARN_ON_ONCE(op_flags & IPU6_ISYS_BUFFER_LIST_FL_ACTIVE && - op_flags & IPU6_ISYS_BUFFER_LIST_FL_INCOMING); + WARN_ON_ONCE(op_flags & IPU_ISYS_BUFFER_LIST_ACTIVE && + op_flags & IPU_ISYS_BUFFER_LIST_INCOMING); list_for_each_entry_safe(ib, ib_safe, &bl->head, head) { struct ipu6_isys_video *av; - struct vb2_buffer *vb = ipu6_isys_buffer_to_vb2_buffer(ib); - struct ipu6_isys_queue *aq = + struct vb2_buffer *vb = ipu_isys_buffer_to_vb2_buffer(ib); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); struct device *dev; @@ -125,13 +125,13 @@ void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, dev = &av->isys->adev->auxdev.dev; spin_lock_irqsave(&aq->lock, flags); list_del(&ib->head); - if (op_flags & IPU6_ISYS_BUFFER_LIST_FL_ACTIVE) + if (op_flags & IPU_ISYS_BUFFER_LIST_ACTIVE) list_add(&ib->head, &aq->active); - else if (op_flags & IPU6_ISYS_BUFFER_LIST_FL_INCOMING) + else if (op_flags & IPU_ISYS_BUFFER_LIST_INCOMING) list_add_tail(&ib->head, &aq->incoming); spin_unlock_irqrestore(&aq->lock, flags); - if (op_flags & IPU6_ISYS_BUFFER_LIST_FL_SET_STATE) + if (op_flags & IPU_ISYS_BUFFER_LIST_SET_STATE) vb2_buffer_done(vb, state); if (first) { @@ -152,22 +152,22 @@ void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, * have been queued to firmware and the *firmware streamon fails for a * reason or another. */ -static void flush_firmware_streamon_fail(struct ipu6_isys_stream *stream) +static void flush_firmware_streamon_fail(struct ipu_isys_stream *stream) { struct device *dev = &stream->isys->adev->auxdev.dev; - struct ipu6_isys_queue *aq; + struct ipu_isys_queue *aq; unsigned long flags; lockdep_assert_held(&stream->mutex); list_for_each_entry(aq, &stream->queues, node) { struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); - struct ipu6_isys_buffer *ib, *ib_safe; + struct ipu_isys_buffer *ib, *ib_safe; spin_lock_irqsave(&aq->lock, flags); list_for_each_entry_safe(ib, ib_safe, &aq->active, head) { struct vb2_buffer *vb = - ipu6_isys_buffer_to_vb2_buffer(ib); + ipu_isys_buffer_to_vb2_buffer(ib); list_del(&ib->head); if (av->streaming) { @@ -181,7 +181,7 @@ static void flush_firmware_streamon_fail(struct ipu6_isys_stream *stream) /* Queue not yet streaming, return to user. */ dev_dbg(dev, "%s: return %u back to videobuf2\n", av->vdev.name, vb->index); - vb2_buffer_done(ipu6_isys_buffer_to_vb2_buffer(ib), + vb2_buffer_done(ipu_isys_buffer_to_vb2_buffer(ib), VB2_BUF_STATE_QUEUED); } spin_unlock_irqrestore(&aq->lock, flags); @@ -193,19 +193,19 @@ static void flush_firmware_streamon_fail(struct ipu6_isys_stream *stream) * that contains one entry from each video buffer queue. If a buffer can't be * obtained from every queue, the buffers are returned back to the queue. */ -static int buffer_list_get(struct ipu6_isys_stream *stream, - struct ipu6_isys_buffer_list *bl) +static int buffer_list_get(struct ipu_isys_stream *stream, + struct ipu_isys_buffer_list *bl) { struct device *dev = &stream->isys->adev->auxdev.dev; - struct ipu6_isys_queue *aq; + struct ipu_isys_queue *aq; unsigned long flags; - unsigned long buf_flag = IPU6_ISYS_BUFFER_LIST_FL_INCOMING; + unsigned long buf_flag = IPU_ISYS_BUFFER_LIST_INCOMING; bl->nbufs = 0; INIT_LIST_HEAD(&bl->head); list_for_each_entry(aq, &stream->queues, node) { - struct ipu6_isys_buffer *ib; + struct ipu_isys_buffer *ib; spin_lock_irqsave(&aq->lock, flags); if (list_empty(&aq->incoming)) { @@ -215,12 +215,12 @@ static int buffer_list_get(struct ipu6_isys_stream *stream, return -ENODATA; } - ib = list_last_entry(&aq->incoming, - struct ipu6_isys_buffer, head); + ib = list_last_entry(&aq->incoming, struct ipu_isys_buffer, + head); dev_dbg(dev, "buffer: %s: buffer %u\n", ipu6_isys_queue_to_video(aq)->vdev.name, - ipu6_isys_buffer_to_vb2_buffer(ib)->index); + ipu_isys_buffer_to_vb2_buffer(ib)->index); list_del(&ib->head); list_add(&ib->head, &bl->head); spin_unlock_irqrestore(&aq->lock, flags); @@ -237,10 +237,10 @@ static void ipu6_isys_buf_to_fw_frame_buf_pin(struct vb2_buffer *vb, struct ipu6_fw_isys_frame_buff_set_abi *set) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); struct vb2_v4l2_buffer *vvb = to_vb2_v4l2_buffer(vb); - struct ipu6_isys_video_buffer *ivb = - vb2_buffer_to_ipu6_isys_video_buffer(vvb); + struct ipu_isys_video_buffer *ivb = + vb2_buffer_to_isys_video_buffer(vvb); set->output_pins[aq->fw_output].addr = ivb->dma_addr; set->output_pins[aq->fw_output].out_buf_id = vb->index + 1; @@ -251,12 +251,11 @@ ipu6_isys_buf_to_fw_frame_buf_pin(struct vb2_buffer *vb, * buffer list is not modified. */ #define IPU6_ISYS_FRAME_NUM_THRESHOLD (30) -void -ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, - struct ipu6_isys_stream *stream, - struct ipu6_isys_buffer_list *bl) +void ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, + struct ipu_isys_stream *stream, + struct ipu_isys_buffer_list *bl) { - struct ipu6_isys_buffer *ib; + struct ipu_isys_buffer *ib; WARN_ON(!bl->nbufs); @@ -279,7 +278,7 @@ ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, } list_for_each_entry(ib, &bl->head, head) { - struct vb2_buffer *vb = ipu6_isys_buffer_to_vb2_buffer(ib); + struct vb2_buffer *vb = ipu_isys_buffer_to_vb2_buffer(ib); ipu6_isys_buf_to_fw_frame_buf_pin(vb, set); } @@ -287,11 +286,11 @@ ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, /* Start streaming for real. The buffer list must be available. */ static int ipu6_isys_stream_start(struct ipu6_isys_video *av, - struct ipu6_isys_buffer_list *bl, bool error) + struct ipu_isys_buffer_list *bl, bool error) { - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; struct device *dev = &stream->isys->adev->auxdev.dev; - struct ipu6_isys_buffer_list __bl; + struct ipu_isys_buffer_list __bl; int ret; mutex_lock(&stream->isys->stream_mutex); @@ -321,8 +320,7 @@ static int ipu6_isys_stream_start(struct ipu6_isys_video *av, ipu6_isys_buf_to_fw_frame_buf(buf, stream, bl); ipu6_fw_isys_dump_frame_buff_set(dev, buf, stream->nr_output_pins); - ipu6_isys_buffer_list_queue(bl, IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, - 0); + ipu6_isys_buffer_list_queue(bl, IPU_ISYS_BUFFER_LIST_ACTIVE, 0); ret = ipu6_fw_isys_complex_cmd(stream->isys, stream->stream_handle, buf, msg->dma_addr, sizeof(*buf), @@ -333,12 +331,11 @@ static int ipu6_isys_stream_start(struct ipu6_isys_video *av, out_requeue: if (bl && bl->nbufs) - ipu6_isys_buffer_list_queue(bl, - IPU6_ISYS_BUFFER_LIST_FL_INCOMING | - (error ? - IPU6_ISYS_BUFFER_LIST_FL_SET_STATE : - 0), error ? VB2_BUF_STATE_ERROR : - VB2_BUF_STATE_QUEUED); + ipu6_isys_buffer_list_queue( + bl, + IPU_ISYS_BUFFER_LIST_INCOMING | + (error ? IPU_ISYS_BUFFER_LIST_SET_STATE : 0), + error ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_QUEUED); flush_firmware_streamon_fail(stream); return ret; @@ -346,18 +343,18 @@ static int ipu6_isys_stream_start(struct ipu6_isys_video *av, static void buf_queue(struct vb2_buffer *vb) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); struct vb2_v4l2_buffer *vvb = to_vb2_v4l2_buffer(vb); - struct ipu6_isys_video_buffer *ivb = - vb2_buffer_to_ipu6_isys_video_buffer(vvb); - struct ipu6_isys_buffer *ib = &ivb->ib; + struct ipu_isys_video_buffer *ivb = + vb2_buffer_to_isys_video_buffer(vvb); + struct ipu_isys_buffer *ib = &ivb->ib; struct device *dev = &av->isys->adev->auxdev.dev; struct media_pipeline *media_pipe = media_entity_pipeline(&av->vdev.entity); struct ipu6_fw_isys_frame_buff_set_abi *buf = NULL; - struct ipu6_isys_stream *stream = av->stream; - struct ipu6_isys_buffer_list bl; + struct ipu_isys_stream *stream = av->stream; + struct ipu_isys_buffer_list bl; struct isys_fw_msgs *msg; unsigned long flags; dma_addr_t dma; @@ -419,10 +416,10 @@ static void buf_queue(struct vb2_buffer *vb) * firmware since we could get a buffer event back before we * have queued them ourselves to the active queue. */ - ipu6_isys_buffer_list_queue(&bl, IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, 0); + ipu6_isys_buffer_list_queue(&bl, IPU_ISYS_BUFFER_LIST_ACTIVE, 0); - ret = ipu6_fw_isys_complex_cmd(stream->isys, stream->stream_handle, - buf, msg->dma_addr, sizeof(*buf), + ret = ipu6_fw_isys_complex_cmd(stream->isys, stream->stream_handle, buf, + msg->dma_addr, sizeof(*buf), IPU6_FW_ISYS_SEND_TYPE_STREAM_CAPTURE); if (ret < 0) dev_err(dev, "send stream capture failed\n"); @@ -431,7 +428,7 @@ static void buf_queue(struct vb2_buffer *vb) mutex_unlock(&stream->mutex); } -static int ipu6_isys_link_fmt_validate(struct ipu6_isys_queue *aq) +static int ipu6_isys_link_fmt_validate(struct ipu_isys_queue *aq) { struct v4l2_mbus_framefmt format; struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); @@ -476,11 +473,11 @@ static int ipu6_isys_link_fmt_validate(struct ipu6_isys_queue *aq) return 0; } -static void return_buffers(struct ipu6_isys_queue *aq, +static void return_buffers(struct ipu_isys_queue *aq, enum vb2_buffer_state state) { struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); - struct ipu6_isys_buffer *ib; + struct ipu_isys_buffer *ib; bool need_reset = false; unsigned long flags; @@ -488,9 +485,9 @@ static void return_buffers(struct ipu6_isys_queue *aq, while (!list_empty(&aq->incoming)) { struct vb2_buffer *vb; - ib = list_first_entry(&aq->incoming, struct ipu6_isys_buffer, + ib = list_first_entry(&aq->incoming, struct ipu_isys_buffer, head); - vb = ipu6_isys_buffer_to_vb2_buffer(ib); + vb = ipu_isys_buffer_to_vb2_buffer(ib); list_del(&ib->head); spin_unlock_irqrestore(&aq->lock, flags); @@ -507,9 +504,9 @@ static void return_buffers(struct ipu6_isys_queue *aq, while (!list_empty(&aq->active)) { struct vb2_buffer *vb; - ib = list_first_entry(&aq->active, struct ipu6_isys_buffer, + ib = list_first_entry(&aq->active, struct ipu_isys_buffer, head); - vb = ipu6_isys_buffer_to_vb2_buffer(ib); + vb = ipu_isys_buffer_to_vb2_buffer(ib); list_del(&ib->head); spin_unlock_irqrestore(&aq->lock, flags); @@ -538,13 +535,13 @@ static void ipu6_isys_stream_cleanup(struct ipu6_isys_video *av) static int start_streaming(struct vb2_queue *q, unsigned int count) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(q); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(q); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); struct device *dev = &av->isys->adev->auxdev.dev; - const struct ipu6_isys_pixelformat *pfmt = + const struct ipu_isys_pixelformat *pfmt = ipu6_isys_get_isys_format(ipu6_isys_get_format(av), 0); - struct ipu6_isys_buffer_list __bl, *bl = NULL; - struct ipu6_isys_stream *stream; + struct ipu_isys_buffer_list __bl, *bl = NULL; + struct ipu_isys_stream *stream; struct media_entity *source_entity = NULL; int nr_queues, ret; @@ -626,9 +623,9 @@ static int start_streaming(struct vb2_queue *q, unsigned int count) static void stop_streaming(struct vb2_queue *q) { - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(q); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(q); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; mutex_lock(&stream->mutex); @@ -652,7 +649,7 @@ static void stop_streaming(struct vb2_queue *q) } static unsigned int -get_sof_sequence_by_timestamp(struct ipu6_isys_stream *stream, u64 time) +get_sof_sequence_by_timestamp(struct ipu_isys_stream *stream, u64 time) { struct ipu6_isys *isys = stream->isys; struct device *dev = &isys->adev->auxdev.dev; @@ -665,14 +662,14 @@ get_sof_sequence_by_timestamp(struct ipu6_isys_stream *stream, u64 time) if (time == 0) return atomic_read(&stream->sequence) - 1; - for (i = 0; i < IPU6_ISYS_MAX_PARALLEL_SOF; i++) + for (i = 0; i < IPU_ISYS_MAX_PARALLEL_SOF; i++) if (time == stream->seq[i].timestamp) { dev_dbg(dev, "sof: using seq nr %u for ts %llu\n", stream->seq[i].sequence, time); return stream->seq[i].sequence; } - for (i = 0; i < IPU6_ISYS_MAX_PARALLEL_SOF; i++) + for (i = 0; i < IPU_ISYS_MAX_PARALLEL_SOF; i++) dev_dbg(dev, "sof: sequence %u, timestamp value %llu\n", stream->seq[i].sequence, stream->seq[i].timestamp); @@ -694,15 +691,15 @@ static u64 get_sof_ns_delta(struct ipu6_isys_video *av, u64 timestamp) return ipu6_buttress_tsc_ticks_to_ns(delta, isp); } -static void -ipu6_isys_buf_calc_sequence_time(struct ipu6_isys_buffer *ib, u64 time) +static void ipu6_isys_buf_calc_sequence_time(struct ipu_isys_buffer *ib, + u64 time) { - struct vb2_buffer *vb = ipu6_isys_buffer_to_vb2_buffer(ib); + struct vb2_buffer *vb = ipu_isys_buffer_to_vb2_buffer(ib); struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); - struct ipu6_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); + struct ipu_isys_queue *aq = vb2_queue_to_isys_queue(vb->vb2_queue); struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); struct device *dev = &av->isys->adev->auxdev.dev; - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; u64 ns; u32 sequence; @@ -718,9 +715,9 @@ ipu6_isys_buf_calc_sequence_time(struct ipu6_isys_buffer *ib, u64 time) vbuf->vb2_buf.timestamp); } -static void ipu6_isys_queue_buf_done(struct ipu6_isys_buffer *ib) +static void ipu6_isys_queue_buf_done(struct ipu_isys_buffer *ib) { - struct vb2_buffer *vb = ipu6_isys_buffer_to_vb2_buffer(ib); + struct vb2_buffer *vb = ipu_isys_buffer_to_vb2_buffer(ib); if (atomic_read(&ib->str2mmio_flag)) { vb2_buffer_done(vb, VB2_BUF_STATE_ERROR); @@ -734,14 +731,13 @@ static void ipu6_isys_queue_buf_done(struct ipu6_isys_buffer *ib) } } -static void -ipu6_stream_buf_ready(struct ipu6_isys_stream *stream, u8 pin_id, u32 pin_addr, - u64 time, bool error_check) +static void ipu6_stream_buf_ready(struct ipu_isys_stream *stream, u8 pin_id, + u32 pin_addr, u64 time, bool error_check) { - struct ipu6_isys_queue *aq = stream->output_pins_queue[pin_id]; + struct ipu_isys_queue *aq = stream->output_pins_queue[pin_id]; struct ipu6_isys *isys = stream->isys; struct device *dev = &isys->adev->auxdev.dev; - struct ipu6_isys_buffer *ib; + struct ipu_isys_buffer *ib; struct vb2_buffer *vb; unsigned long flags; bool first = true; @@ -755,13 +751,13 @@ ipu6_stream_buf_ready(struct ipu6_isys_stream *stream, u8 pin_id, u32 pin_addr, } list_for_each_entry_reverse(ib, &aq->active, head) { - struct ipu6_isys_video_buffer *ivb; + struct ipu_isys_video_buffer *ivb; struct vb2_v4l2_buffer *vvb; dma_addr_t addr; - vb = ipu6_isys_buffer_to_vb2_buffer(ib); + vb = ipu_isys_buffer_to_vb2_buffer(ib); vvb = to_vb2_v4l2_buffer(vb); - ivb = vb2_buffer_to_ipu6_isys_video_buffer(vvb); + ivb = vb2_buffer_to_isys_video_buffer(vvb); addr = ivb->dma_addr; if (pin_addr != addr) { @@ -799,7 +795,7 @@ ipu6_stream_buf_ready(struct ipu6_isys_stream *stream, u8 pin_id, u32 pin_addr, spin_unlock_irqrestore(&aq->lock, flags); } -void ipu6_isys_queue_buf_ready(struct ipu6_isys_stream *stream, +void ipu6_isys_queue_buf_ready(struct ipu_isys_stream *stream, struct ipu6_fw_isys_resp_info_abi *info) { u64 time = (u64)info->timestamp[1] << 32 | info->timestamp[0]; @@ -818,7 +814,7 @@ static const struct vb2_ops ipu6_isys_queue_ops = { .buf_queue = buf_queue, }; -int ipu6_isys_queue_init(struct ipu6_isys_queue *aq) +int ipu6_isys_queue_init(struct ipu_isys_queue *aq) { struct ipu6_isys *isys = ipu6_isys_queue_to_video(aq)->isys; struct ipu6_isys_video *av = ipu6_isys_queue_to_video(aq); diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h index b4b14e0ef044..0554578689d5 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-queue.h @@ -7,14 +7,13 @@ #include "ipu-isys.h" #include "ipu6-fw-isys.h" -void ipu6_isys_buffer_list_queue(struct ipu6_isys_buffer_list *bl, +void ipu6_isys_buffer_list_queue(struct ipu_isys_buffer_list *bl, unsigned long op_flags, enum vb2_buffer_state state); -void -ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, - struct ipu6_isys_stream *stream, - struct ipu6_isys_buffer_list *bl); -void ipu6_isys_queue_buf_ready(struct ipu6_isys_stream *stream, +void ipu6_isys_buf_to_fw_frame_buf(struct ipu6_fw_isys_frame_buff_set_abi *set, + struct ipu_isys_stream *stream, + struct ipu_isys_buffer_list *bl); +void ipu6_isys_queue_buf_ready(struct ipu_isys_stream *stream, struct ipu6_fw_isys_resp_info_abi *info); -int ipu6_isys_queue_init(struct ipu6_isys_queue *aq); +int ipu6_isys_queue_init(struct ipu_isys_queue *aq); #endif /* IPU6_ISYS_QUEUE_H */ diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c index 44b88b546f68..d9b433521ba7 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c @@ -36,7 +36,7 @@ #include "ipu6-isys-video.h" #include "ipu6-platform-regs.h" -const struct ipu6_isys_pixelformat ipu6_isys_pfmts[] = { +const struct ipu_isys_pixelformat ipu6_isys_pfmts[] = { { V4L2_PIX_FMT_SBGGR12, 16, 12, MEDIA_BUS_FMT_SBGGR12_1X12, IPU6_FW_ISYS_FRAME_FORMAT_RAW16 }, { V4L2_PIX_FMT_SGBRG12, 16, 12, MEDIA_BUS_FMT_SGBRG12_1X12, @@ -112,14 +112,14 @@ static int video_open(struct file *file) return v4l2_fh_open(file); } -const struct ipu6_isys_pixelformat * +const struct ipu_isys_pixelformat * ipu6_isys_get_isys_format(u32 pixelformat, u32 type) { - const struct ipu6_isys_pixelformat *default_pfmt = NULL; + const struct ipu_isys_pixelformat *default_pfmt = NULL; unsigned int i; for (i = 0; i < ARRAY_SIZE(ipu6_isys_pfmts); i++) { - const struct ipu6_isys_pixelformat *pfmt = &ipu6_isys_pfmts[i]; + const struct ipu_isys_pixelformat *pfmt = &ipu6_isys_pfmts[i]; if (type && ((!pfmt->is_meta && type != V4L2_BUF_TYPE_VIDEO_CAPTURE) || @@ -229,7 +229,7 @@ static void ipu6_isys_try_fmt_cap(struct ipu6_isys_video *av, u32 type, u32 *format, u32 *width, u32 *height, u32 *bytesperline, u32 *sizeimage) { - const struct ipu6_isys_pixelformat *pfmt = + const struct ipu_isys_pixelformat *pfmt = ipu6_isys_get_isys_format(*format, type); *format = pfmt->pixelformat; @@ -443,10 +443,10 @@ static int ipu6_isys_fw_pin_cfg(struct ipu6_isys_video *av, struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(src_pad->entity); struct ipu6_fw_isys_input_pin_info_abi *input_pin; struct ipu6_fw_isys_output_pin_info_abi *output_pin; - struct ipu6_isys_stream *stream = av->stream; - struct ipu6_isys_queue *aq = &av->aq; + struct ipu_isys_stream *stream = av->stream; + struct ipu_isys_queue *aq = &av->aq; struct v4l2_mbus_framefmt fmt; - const struct ipu6_isys_pixelformat *pfmt = + const struct ipu_isys_pixelformat *pfmt = ipu6_isys_get_isys_format(ipu6_isys_get_format(av), 0); struct v4l2_rect v4l2_crop; struct ipu6_isys *isys = av->isys; @@ -515,14 +515,14 @@ static int ipu6_isys_fw_pin_cfg(struct ipu6_isys_video *av, } static int start_stream_firmware(struct ipu6_isys_video *av, - struct ipu6_isys_buffer_list *bl) + struct ipu_isys_buffer_list *bl) { struct ipu6_fw_isys_stream_cfg_data_abi *stream_cfg; struct ipu6_fw_isys_frame_buff_set_abi *buf = NULL; - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; struct device *dev = &av->isys->adev->auxdev.dev; struct isys_fw_msgs *msg = NULL; - struct ipu6_isys_queue *aq; + struct ipu_isys_queue *aq; int ret, retout, tout; u16 send_type; @@ -589,8 +589,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av, } buf = &msg->fw_msg.frame; ipu6_isys_buf_to_fw_frame_buf(buf, stream, bl); - ipu6_isys_buffer_list_queue(bl, - IPU6_ISYS_BUFFER_LIST_FL_ACTIVE, 0); + ipu6_isys_buffer_list_queue(bl, IPU_ISYS_BUFFER_LIST_ACTIVE, 0); } reinit_completion(&stream->stream_start_completion); @@ -658,7 +657,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av, static void stop_streaming_firmware(struct ipu6_isys_video *av) { struct device *dev = &av->isys->adev->auxdev.dev; - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; int ret, tout; reinit_completion(&stream->stream_stop_completion); @@ -683,7 +682,7 @@ static void stop_streaming_firmware(struct ipu6_isys_video *av) static void close_streaming_firmware(struct ipu6_isys_video *av) { - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; struct device *dev = &av->isys->adev->auxdev.dev; int ret, tout; @@ -712,7 +711,7 @@ int ipu6_isys_video_prepare_stream(struct ipu6_isys_video *av, struct media_entity *source_entity, int nr_queues) { - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; struct ipu6_isys_csi2 *csi2; if (WARN_ON(stream->nr_streaming)) @@ -796,7 +795,7 @@ void ipu6_isys_configure_stream_watermark(struct ipu6_isys_video *av, static void calculate_stream_datarate(struct ipu6_isys_video *av) { struct video_stream_watermark *watermark = &av->watermark; - const struct ipu6_isys_pixelformat *pfmt = + const struct ipu_isys_pixelformat *pfmt = ipu6_isys_get_isys_format(ipu6_isys_get_format(av), 0); u32 pages_per_line, pb_bytes_per_line, pixels_per_line, bytes_per_line; u64 line_time_ns, stream_data_rate; @@ -840,7 +839,7 @@ void ipu6_isys_update_stream_watermark(struct ipu6_isys_video *av, bool state) update_watermark_setting(av->isys); } -void ipu6_isys_put_stream(struct ipu6_isys_stream *stream) +void ipu6_isys_put_stream(struct ipu_isys_stream *stream) { struct device *dev; unsigned int i; @@ -867,10 +866,10 @@ void ipu6_isys_put_stream(struct ipu6_isys_stream *stream) spin_unlock_irqrestore(&stream->isys->streams_lock, flags); } -static struct ipu6_isys_stream * +static struct ipu_isys_stream * ipu6_isys_get_stream(struct ipu6_isys_video *av, struct ipu_isys_subdev *asd) { - struct ipu6_isys_stream *stream = NULL; + struct ipu_isys_stream *stream = NULL; struct ipu6_isys *isys = av->isys; unsigned long flags; unsigned int i; @@ -905,11 +904,11 @@ ipu6_isys_get_stream(struct ipu6_isys_video *av, struct ipu_isys_subdev *asd) return stream; } -struct ipu6_isys_stream * +struct ipu_isys_stream * ipu6_isys_query_stream_by_handle(struct ipu6_isys *isys, u8 stream_handle) { unsigned long flags; - struct ipu6_isys_stream *stream = NULL; + struct ipu_isys_stream *stream = NULL; if (!isys) return NULL; @@ -930,10 +929,10 @@ ipu6_isys_query_stream_by_handle(struct ipu6_isys *isys, u8 stream_handle) return stream; } -struct ipu6_isys_stream * +struct ipu_isys_stream * ipu6_isys_query_stream_by_source(struct ipu6_isys *isys, int source, u8 vc) { - struct ipu6_isys_stream *stream = NULL; + struct ipu_isys_stream *stream = NULL; unsigned long flags; unsigned int i; @@ -981,10 +980,10 @@ static u64 get_stream_mask_by_pipeline(struct ipu6_isys_video *__av) } int ipu6_isys_video_set_streaming(struct ipu6_isys_video *av, int state, - struct ipu6_isys_buffer_list *bl) + struct ipu_isys_buffer_list *bl) { struct v4l2_subdev_krouting *routing; - struct ipu6_isys_stream *stream = av->stream; + struct ipu_isys_stream *stream = av->stream; struct v4l2_subdev_state *subdev_state; struct device *dev = &av->isys->adev->auxdev.dev; struct v4l2_subdev *sd; @@ -1166,7 +1165,7 @@ void ipu6_isys_fw_close(struct ipu6_isys *isys) int ipu6_isys_setup_video(struct ipu6_isys_video *av, struct media_entity **source_entity, int *nr_queues) { - const struct ipu6_isys_pixelformat *pfmt = + const struct ipu_isys_pixelformat *pfmt = ipu6_isys_get_isys_format(ipu6_isys_get_format(av), 0); struct device *dev = &av->isys->adev->auxdev.dev; struct v4l2_mbus_frame_desc_entry entry; diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h index 0b80d73173ff..086354f1b254 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.h @@ -28,7 +28,7 @@ struct video_stream_watermark { }; struct ipu6_isys_video { - struct ipu6_isys_queue aq; + struct ipu_isys_queue aq; /* Serialise access to other fields in the struct. */ struct mutex mutex; struct media_pad pad; @@ -37,7 +37,7 @@ struct ipu6_isys_video { struct v4l2_meta_format meta_fmt; struct ipu6_isys *isys; struct ipu6_isys_csi2 *csi2; - struct ipu6_isys_stream *stream; + struct ipu_isys_stream *stream; unsigned int streaming; struct video_stream_watermark watermark; u32 source_stream; @@ -48,26 +48,26 @@ struct ipu6_isys_video { #define ipu6_isys_queue_to_video(__aq) \ container_of(__aq, struct ipu6_isys_video, aq) -extern const struct ipu6_isys_pixelformat ipu6_isys_pfmts[]; -extern const struct ipu6_isys_pixelformat ipu6_isys_pfmts_packed[]; +extern const struct ipu_isys_pixelformat ipu6_isys_pfmts[]; +extern const struct ipu_isys_pixelformat ipu6_isys_pfmts_packed[]; -const struct ipu6_isys_pixelformat * +const struct ipu_isys_pixelformat * ipu6_isys_get_isys_format(u32 pixelformat, u32 code); int ipu6_isys_video_prepare_stream(struct ipu6_isys_video *av, struct media_entity *source_entity, int nr_queues); int ipu6_isys_video_set_streaming(struct ipu6_isys_video *av, int state, - struct ipu6_isys_buffer_list *bl); + struct ipu_isys_buffer_list *bl); int ipu6_isys_fw_open(struct ipu6_isys *isys); void ipu6_isys_fw_close(struct ipu6_isys *isys); int ipu6_isys_setup_video(struct ipu6_isys_video *av, struct media_entity **source_entity, int *nr_queues); int ipu6_isys_video_init(struct ipu6_isys_video *av); void ipu6_isys_video_cleanup(struct ipu6_isys_video *av); -void ipu6_isys_put_stream(struct ipu6_isys_stream *stream); -struct ipu6_isys_stream * +void ipu6_isys_put_stream(struct ipu_isys_stream *stream); +struct ipu_isys_stream * ipu6_isys_query_stream_by_handle(struct ipu6_isys *isys, u8 stream_handle); -struct ipu6_isys_stream * +struct ipu_isys_stream * ipu6_isys_query_stream_by_source(struct ipu6_isys *isys, int source, u8 vc); void ipu6_isys_configure_stream_watermark(struct ipu6_isys_video *av, diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c b/drivers/media/pci/intel/ipu6/ipu6-isys.c index 7fc529b5a9f5..ed0784fc8a4b 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.c +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c @@ -250,7 +250,7 @@ static int isys_register_video_devices(struct ipu6_isys *isys) i * NR_OF_CSI2_SRC_PADS + j); av->isys = isys; av->aq.vbq.buf_struct_size = - sizeof(struct ipu6_isys_video_buffer); + sizeof(struct ipu_isys_video_buffer); ret = ipu6_isys_video_init(av); if (ret) @@ -307,7 +307,7 @@ void isys_setup_hw(struct ipu6_isys *isys) static void ipu6_isys_csi2_isr(struct ipu6_isys_csi2 *csi2) { - struct ipu6_isys_stream *stream; + struct ipu_isys_stream *stream; unsigned int i; u32 status; int source; @@ -983,7 +983,7 @@ static int alloc_fw_msg_bufs(struct ipu6_isys *isys, int amount) return -ENOMEM; } -struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu6_isys_stream *stream) +struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu_isys_stream *stream) { struct ipu6_isys *isys = stream->isys; struct device *dev = &isys->adev->auxdev.dev; @@ -1222,7 +1222,7 @@ static int isys_isr_one(struct ipu6_bus_device *adev) { struct ipu6_isys *isys = ipu6_bus_get_drvdata(adev); struct ipu6_fw_isys_resp_info_abi *resp; - struct ipu6_isys_stream *stream; + struct ipu_isys_stream *stream; struct ipu6_isys_csi2 *csi2 = NULL; u32 index; u64 ts; @@ -1293,7 +1293,7 @@ static int isys_isr_one(struct ipu6_bus_device *adev) * get pin_data_ready event */ ipu6_put_fw_msg_buf(ipu6_bus_get_drvdata(adev), resp->buf_id); - if (resp->pin_id < IPU6_ISYS_OUTPUT_PINS && + if (resp->pin_id < IPU_ISYS_OUTPUT_PINS && stream->output_pins_queue[resp->pin_id]) ipu6_isys_queue_buf_ready(stream, resp); else @@ -1319,8 +1319,8 @@ static int isys_isr_one(struct ipu6_bus_device *adev) "sof: handle %d: (index %u), timestamp 0x%16.16llx\n", resp->stream_handle, stream->seq[stream->seq_index].sequence, ts); - stream->seq_index = (stream->seq_index + 1) - % IPU6_ISYS_MAX_PARALLEL_SOF; + stream->seq_index = + (stream->seq_index + 1) % IPU_ISYS_MAX_PARALLEL_SOF; break; case IPU6_FW_ISYS_RESP_TYPE_FRAME_EOF: ipu6_isys_csi2_eof_event_by_stream(stream); diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h b/drivers/media/pci/intel/ipu6/ipu6-isys.h index f488e782c26e..1e90d0e64967 100644 --- a/drivers/media/pci/intel/ipu6/ipu6-isys.h +++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h @@ -134,7 +134,7 @@ struct ipu6_isys { u32 isr_csi2_bits; u32 csi2_rx_ctrl_cached; spinlock_t streams_lock; - struct ipu6_isys_stream streams[IPU6_ISYS_MAX_STREAMS]; + struct ipu_isys_stream streams[IPU6_ISYS_MAX_STREAMS]; int streams_ref_count[IPU6_ISYS_MAX_STREAMS]; void *fwcom; u32 phy_termcal_val; @@ -175,7 +175,7 @@ struct isys_fw_msgs { dma_addr_t dma_addr; }; -struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu6_isys_stream *stream); +struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu_isys_stream *stream); void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, uintptr_t data); void ipu6_cleanup_fw_msg_bufs(struct ipu6_isys *isys);