From patchwork Mon Jun 29 15:09:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Saenz Julienne X-Patchwork-Id: 11631181 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E88AB14B7 for ; Mon, 29 Jun 2020 15:32:11 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 94F91251E2 for ; Mon, 29 Jun 2020 15:32:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="euJckP5O"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="n7Bybq6N" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 94F91251E2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Kok/6ClrOGnluEm6LEVcq3zsd0XHI22uFHYOEAy5eiE=; b=euJckP5OsqZKdepFVxYzmJDC0 qu/xdkTwK2YcuzXHmZCQNzoaWueV8ja6TuDnNluF0FAcYWFFQJIwlSWpmR5nqc4JRruYbyK4qK/9z T0mOUxjfJwqP8shOKd6Qu0rshBa5IAefsFihgFvUkSty4ma3xvtjySVyVTrDYk3MrnBquIeOa6eUd 9wrx+0Xp6d7RLoIbdvk2sP+d3jPlOpvObR0FIcB66NBUPlQ99+kUVUrLX+pF8aNodA0+T76BpHCy3 6yvdhuwnm11uAWreCqqgOaOq29LrGaRru7h+dtGeAZ4v85L//BciHw8eDy0/Hzip+AyxYpCNt156+ E+LlZqaQg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpvjL-0003hl-UM; Mon, 29 Jun 2020 15:30:00 +0000 Received: from casper.infradead.org ([90.155.50.34]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpvQb-0002qj-8p; Mon, 29 Jun 2020 15:10:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=RFhlrPHCfzIrvYHhwnPFd7lucEsQ7iOu5YTpgq17Pf8=; b=n7Bybq6N0rzA7HBDn8Nid/KuGm jpVv4Z5TszTWNU6lFM+awpaPSDdUQyICZ1Hk7Ka/QuG003ep//FHAOwWFN1jJDt8x8hqcpegFDS4M aEwNkASzVOE1g4YOn1OdeRBBXGsV8JtH0qmHJUh2iP2a3t4AnyoHItWtMEAS0DQQrcWi9SngmE26b 9RYUAi3Fsi16YFLph9aJXfNEeNf62cIC5WRnlUfJp8PkXD3Oxh8bJGqErUcG82oN9FvK+NIcyZnhs vtJPVktCmo404fj+deGady9nmZ8N3RQG+/38Qb3YIE3HDEUS9QYG2uEW6vHvWbupBIX5y2Zv7rzem BbBR1BNw==; Received: from mx2.suse.de ([195.135.220.15]) by casper.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpvQD-0003SO-G9; Mon, 29 Jun 2020 15:10:34 +0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id E57ADB040; Mon, 29 Jun 2020 15:10:09 +0000 (UTC) From: Nicolas Saenz Julienne To: gregkh@linuxfoundation.org Subject: [PATCH v2 41/47] staging: vchi: Get rid of vchi_bulk_queue_transmit() Date: Mon, 29 Jun 2020 17:09:39 +0200 Message-Id: <20200629150945.10720-42-nsaenzjulienne@suse.de> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629150945.10720-1-nsaenzjulienne@suse.de> References: <20200629150945.10720-1-nsaenzjulienne@suse.de> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200629_161015_403816_09A742FD X-CRM114-Status: GOOD ( 19.23 ) X-Spam-Score: -4.2 (----) X-Spam-Report: SpamAssassin version 3.4.4 on casper.infradead.org summary: Content analysis details: (-4.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [195.135.220.15 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [195.135.220.15 listed in list.dnswl.org] -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, kernel-list@raspberrypi.com, linux-kernel@vger.kernel.org, Nicolas Saenz Julienne , laurent.pinchart@ideasonboard.com, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Its vchiq counterpart, vchiq_bulk_transmit() is only used by vchi. We can then merge both functions by moving vchi_bulk_queue_transmit()'s retry mechanism into vchiq_bulk_transmit() and let services call the later. Signed-off-by: Nicolas Saenz Julienne --- .../bcm2835-audio/bcm2835-vchiq.c | 7 +- .../vc04_services/interface/vchi/vchi.h | 11 ---- .../interface/vchiq_arm/vchiq_arm.c | 38 +++++++---- .../interface/vchiq_arm/vchiq_shim.c | 66 ++++--------------- 4 files changed, 41 insertions(+), 81 deletions(-) diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c index 55f1e684eef1..28d64bc895cd 100644 --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c @@ -343,10 +343,9 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream, count = size; if (!instance->max_packet) { /* Send the message to the videocore */ - status = vchi_bulk_queue_transmit(instance->service_handle, - src, count, - VCHIQ_BULK_MODE_BLOCKING, - NULL); + status = vchiq_bulk_transmit(instance->service_handle, src, + count, NULL, + VCHIQ_BULK_MODE_BLOCKING); } else { while (count > 0) { int bytes = min(instance->max_packet, count); diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h index ca20b99122f2..c800796f9986 100644 --- a/drivers/staging/vc04_services/interface/vchi/vchi.h +++ b/drivers/staging/vc04_services/interface/vchi/vchi.h @@ -54,17 +54,6 @@ struct vchiq_header *vchi_msg_hold(unsigned handle); // Routine to release a held message after it has been processed extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message); -/****************************************************************************** - * Global bulk API - *****************************************************************************/ - -// Routine to queue up data ready for transfer to the other (once they have signalled they are ready) -extern int32_t vchi_bulk_queue_transmit(unsigned handle, - const void *data_src, - uint32_t data_size, - enum vchiq_bulk_mode mode, - void *transfer_handle); - /****************************************************************************** * Configuration plumbing *****************************************************************************/ diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c index 1165824711a5..98d6fa84deab 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -355,19 +355,31 @@ vchiq_bulk_transmit(unsigned int handle, const void *data, { enum vchiq_status status; - switch (mode) { - case VCHIQ_BULK_MODE_NOCALLBACK: - case VCHIQ_BULK_MODE_CALLBACK: - status = vchiq_bulk_transfer(handle, (void *)data, size, - userdata, mode, - VCHIQ_BULK_TRANSMIT); - break; - case VCHIQ_BULK_MODE_BLOCKING: - status = vchiq_blocking_bulk_transfer(handle, - (void *)data, size, VCHIQ_BULK_TRANSMIT); - break; - default: - return VCHIQ_ERROR; + while (1) { + switch (mode) { + case VCHIQ_BULK_MODE_NOCALLBACK: + case VCHIQ_BULK_MODE_CALLBACK: + status = vchiq_bulk_transfer(handle, (void *)data, size, + userdata, mode, + VCHIQ_BULK_TRANSMIT); + break; + case VCHIQ_BULK_MODE_BLOCKING: + status = vchiq_blocking_bulk_transfer(handle, + (void *)data, size, VCHIQ_BULK_TRANSMIT); + break; + default: + return VCHIQ_ERROR; + } + + /* + * vchiq_*_bulk_transfer() may return VCHIQ_RETRY, so we need + * to implement a retry mechanism since this function is + * supposed to block until queued + */ + if (status != VCHIQ_RETRY) + break; + + msleep(1); } return status; diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c index f69936a9eb29..33493643b5f8 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c @@ -31,46 +31,6 @@ int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size) } EXPORT_SYMBOL(vchi_queue_kernel_message); -/*********************************************************** - * Name: vchi_bulk_queue_transmit - * - * Arguments: VCHI_BULK_HANDLE_T handle, - * const void *data_src, - * uint32_t data_size, - * enum vchi_flags flags, - * void *bulk_handle - * - * Description: Routine to transmit some data - * - * Returns: int32_t - success == 0 - * - ***********************************************************/ -int32_t vchi_bulk_queue_transmit(unsigned handle, const void *data_src, - uint32_t data_size, enum vchiq_bulk_mode mode, - void *bulk_handle) -{ - enum vchiq_status status; - - while (1) { - status = vchiq_bulk_transmit(handle, data_src, data_size, - bulk_handle, mode); - - /* - * vchiq_bulk_transmit() may return VCHIQ_RETRY, so we need to - * implement a retry mechanism since this function is supposed - * to block until queued - */ - if (status != VCHIQ_RETRY) - break; - - msleep(1); - } - - return status; -} -EXPORT_SYMBOL(vchi_bulk_queue_transmit); - - /*********************************************************** * Name: vchi_held_msg_release * @@ -80,10 +40,10 @@ EXPORT_SYMBOL(vchi_bulk_queue_transmit); * Description: Routine to release a held message (after it has been read with * vchi_msg_hold) * - * Returns: int32_t - success == 0 + * Returns: int - success == 0 * ***********************************************************/ -int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message) +int vchi_held_msg_release(unsigned handle, struct vchiq_header *message) { /* * Convert the service field pointer back to an @@ -104,7 +64,7 @@ EXPORT_SYMBOL(vchi_held_msg_release); * * Arguments: struct vchi_service *service, * void **data, - * uint32_t *msg_size, + * unsigned *msg_size, * struct vchiq_header **message * * Description: Routine to return a pointer to the current message (to allow @@ -112,7 +72,7 @@ EXPORT_SYMBOL(vchi_held_msg_release); * to release the message using vchi_held_msg_release when you're * finished. * - * Returns: int32_t - success == 0 + * Returns: int - success == 0 * ***********************************************************/ struct vchiq_header *vchi_msg_hold(unsigned handle) @@ -134,7 +94,7 @@ EXPORT_SYMBOL(vchi_msg_hold); * ***********************************************************/ -int32_t vchi_initialise(struct vchiq_instance **instance) +int vchi_initialise(struct vchiq_instance **instance) { return vchiq_initialise(instance); } @@ -151,7 +111,7 @@ EXPORT_SYMBOL(vchi_initialise); * Returns: 0 if successful, failure otherwise * ***********************************************************/ -int32_t vchi_connect(struct vchiq_instance *instance) +int vchi_connect(struct vchiq_instance *instance) { return vchiq_connect(instance); } @@ -168,7 +128,7 @@ EXPORT_SYMBOL(vchi_connect); * Returns: 0 if successful, failure otherwise * ***********************************************************/ -int32_t vchi_disconnect(struct vchiq_instance *instance) +int vchi_disconnect(struct vchiq_instance *instance) { return vchiq_shutdown(instance); } @@ -184,11 +144,11 @@ EXPORT_SYMBOL(vchi_disconnect); * * Description: Routine to open a service * - * Returns: int32_t - success == 0 + * Returns: int - success == 0 * ***********************************************************/ -int32_t vchi_service_open(struct vchiq_instance *instance, +int vchi_service_open(struct vchiq_instance *instance, struct vchiq_service_params *params, unsigned *handle) { @@ -196,13 +156,13 @@ int32_t vchi_service_open(struct vchiq_instance *instance, } EXPORT_SYMBOL(vchi_service_open); -int32_t vchi_service_close(unsigned handle) +int vchi_service_close(unsigned handle) { return vchiq_close_service(handle); } EXPORT_SYMBOL(vchi_service_close); -int32_t vchi_get_peer_version(unsigned handle, short *peer_version) +int vchi_get_peer_version(unsigned handle, short *peer_version) { return vchiq_get_peer_version(handle, peer_version); } @@ -218,7 +178,7 @@ EXPORT_SYMBOL(vchi_get_peer_version); * Returns: void * ***********************************************************/ -int32_t vchi_service_use(unsigned handle) +int vchi_service_use(unsigned handle) { return vchiq_use_service(handle); } @@ -234,7 +194,7 @@ EXPORT_SYMBOL(vchi_service_use); * Returns: void * ***********************************************************/ -int32_t vchi_service_release(unsigned handle) +int vchi_service_release(unsigned handle) { return vchiq_release_service(handle); }