From patchwork Mon Apr 2 18:24:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Scheller X-Patchwork-Id: 10320173 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0022360116 for ; Mon, 2 Apr 2018 18:25:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E3EB528A4C for ; Mon, 2 Apr 2018 18:25:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D882728A67; Mon, 2 Apr 2018 18:25:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7304428A4C for ; Mon, 2 Apr 2018 18:25:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754282AbeDBSY6 (ORCPT ); Mon, 2 Apr 2018 14:24:58 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:56049 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753463AbeDBSYo (ORCPT ); Mon, 2 Apr 2018 14:24:44 -0400 Received: by mail-wm0-f67.google.com with SMTP id b127so26677408wmf.5 for ; Mon, 02 Apr 2018 11:24:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=myxxu3qgXKkcebKT8+15RtHpNB3OpOkNku42PHXsQzY=; b=RzOuod4fP/9Ywn40UwH6seqMi/ifSZPq2+4Iy09APFEBi/SB3ad1P+9tGy4vnFzctn htUt8Myvwojcubjvm7zFeSx2L+xwV9zdqPWuXqdKopkmElOexIqK2dmqefzfKR7pTnyu VO/zVmGauy2cbb8Ru+e37dAdcu8H9/3A+Q0oqTGOOz5NJ70y33W7CXO2EAVyzjWDDqdh MRRtlW01oiQvnLA/lZiVURVG47jXIlVQb3pj4d1la27qKCUfpdkVps2/VctRe0dKDS98 yhdc878moExtNmKLHw+sSsXE6xH7e/NXQO6WCrkPuTFbjMkIcbTsFGxg8K4NZZojByX/ ehOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=myxxu3qgXKkcebKT8+15RtHpNB3OpOkNku42PHXsQzY=; b=XVIAC7SI9gX8hAjpmDmdzImjC0iJRs4htPeAnqDzsZSqxoaqADNYGW4eErlPrBcIEo 1CGORTfF1+GRTLDdOCVtJbgu/nIqfCd9h5czbJ3gclmB4Xy9A5qqyolzDhnWhZkL8GAQ tYW2ulYlfd/WhawAUuj0NUmsiy+q06O7YZZ8rg2EtqjTuPfqhyYvGmwXfKIbelXhmBH4 /00AB7R8gAVfdjkJkWr13pNMtfzPAXtiH9DHWPKaFBFk9C846nd2i7cvSsXGWDmyIhWt G8DAor5TWmGjdEn5GW7q8jVak14BElw1k7UuZZrKMQmryAh7vywdLrIKnzu9GGVrq8L+ dx9w== X-Gm-Message-State: AElRT7ENcgpJxqtPYsJl+47ELR+LSkO7dHKFFk01/LprZW0eocelzOei heOFIPIPLiWLyRoAmuAg7FFGhw== X-Google-Smtp-Source: AIpwx4/V1nxj3N8hU2axMrg+IKUroERc9Oehux1iwRY5/GTYyGEiyKuNXElVEvxY1btDJ/V6tBEk8w== X-Received: by 10.28.7.76 with SMTP id 73mr1832552wmh.128.1522693482931; Mon, 02 Apr 2018 11:24:42 -0700 (PDT) Received: from dvbdev.wuest.de (ip-84-118-193-200.unity-media.net. [84.118.193.200]) by smtp.gmail.com with ESMTPSA id x9sm2368273wrb.18.2018.04.02.11.24.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Apr 2018 11:24:42 -0700 (PDT) From: Daniel Scheller To: linux-media@vger.kernel.org, mchehab@kernel.org, mchehab@s-opensource.com Subject: [PATCH 14/20] [media] ddbridge: make DMA buffer count and size modparam-configurable Date: Mon, 2 Apr 2018 20:24:21 +0200 Message-Id: <20180402182427.20918-15-d.scheller.oss@gmail.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180402182427.20918-1-d.scheller.oss@gmail.com> References: <20180402182427.20918-1-d.scheller.oss@gmail.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Daniel Scheller Make the number of DMA buffers and their size configurable using module parameters. Being able to set these to a higher number might help on busy systems when handling overall high data rates without having to edit the driver sources and recompile things. Picked up from the upstream dddvb-0.9.33 release. Signed-off-by: Daniel Scheller --- drivers/media/pci/ddbridge/ddbridge-core.c | 30 ++++++++++++++++++++++++------ drivers/media/pci/ddbridge/ddbridge.h | 12 ------------ 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/drivers/media/pci/ddbridge/ddbridge-core.c b/drivers/media/pci/ddbridge/ddbridge-core.c index e9c2e3e5d64b..8907551b02e4 100644 --- a/drivers/media/pci/ddbridge/ddbridge-core.c +++ b/drivers/media/pci/ddbridge/ddbridge-core.c @@ -96,6 +96,15 @@ static int stv0910_single; module_param(stv0910_single, int, 0444); MODULE_PARM_DESC(stv0910_single, "use stv0910 cards as single demods"); +static int dma_buf_num = 8; +module_param(dma_buf_num, int, 0444); +MODULE_PARM_DESC(dma_buf_num, "Number of DMA buffers, possible values: 8-32"); + +static int dma_buf_size = 21; +module_param(dma_buf_size, int, 0444); +MODULE_PARM_DESC(dma_buf_size, + "DMA buffer size as multiple of 128*47, possible values: 1-43"); + /****************************************************************************/ static DEFINE_MUTEX(redirect_lock); @@ -2187,16 +2196,16 @@ static void ddb_dma_init(struct ddb_io *io, int nr, int out) INIT_WORK(&dma->work, output_work); dma->regs = rm->odma->base + rm->odma->size * nr; dma->bufregs = rm->odma_buf->base + rm->odma_buf->size * nr; - dma->num = OUTPUT_DMA_BUFS; - dma->size = OUTPUT_DMA_SIZE; - dma->div = OUTPUT_DMA_IRQ_DIV; + dma->num = dma_buf_num; + dma->size = dma_buf_size * 128 * 47; + dma->div = 1; } else { INIT_WORK(&dma->work, input_work); dma->regs = rm->idma->base + rm->idma->size * nr; dma->bufregs = rm->idma_buf->base + rm->idma_buf->size * nr; - dma->num = INPUT_DMA_BUFS; - dma->size = INPUT_DMA_SIZE; - dma->div = INPUT_DMA_IRQ_DIV; + dma->num = dma_buf_num; + dma->size = dma_buf_size * 128 * 47; + dma->div = 1; } ddbwritel(io->port->dev, 0, DMA_BUFFER_ACK(dma)); dev_dbg(io->port->dev->dev, "init link %u, io %u, dma %u, dmaregs %08x bufregs %08x\n", @@ -3353,6 +3362,15 @@ int ddb_exit_ddbridge(int stage, int error) int ddb_init_ddbridge(void) { + if (dma_buf_num < 8) + dma_buf_num = 8; + if (dma_buf_num > 32) + dma_buf_num = 32; + if (dma_buf_size < 1) + dma_buf_size = 1; + if (dma_buf_size > 43) + dma_buf_size = 43; + if (ddb_class_create() < 0) return -1; ddb_wq = alloc_workqueue("ddbridge", 0, 0); diff --git a/drivers/media/pci/ddbridge/ddbridge.h b/drivers/media/pci/ddbridge/ddbridge.h index de9ddf1068bf..86db6f19369a 100644 --- a/drivers/media/pci/ddbridge/ddbridge.h +++ b/drivers/media/pci/ddbridge/ddbridge.h @@ -136,20 +136,8 @@ struct ddb_info { const struct ddb_regmap *regmap; }; -/* DMA_SIZE MUST be smaller than 256k and - * MUST be divisible by 188 and 128 !!! - */ - #define DMA_MAX_BUFS 32 /* hardware table limit */ -#define INPUT_DMA_BUFS 8 -#define INPUT_DMA_SIZE (128 * 47 * 21) -#define INPUT_DMA_IRQ_DIV 1 - -#define OUTPUT_DMA_BUFS 8 -#define OUTPUT_DMA_SIZE (128 * 47 * 21) -#define OUTPUT_DMA_IRQ_DIV 1 - struct ddb; struct ddb_port;