From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C878C04AB3 for ; Mon, 27 May 2019 20:15:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 630D62133F for ; Mon, 27 May 2019 20:15:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hl6ikSA+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727406AbfE0UPb (ORCPT ); Mon, 27 May 2019 16:15:31 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36020 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727378AbfE0UPN (ORCPT ); Mon, 27 May 2019 16:15:13 -0400 Received: by mail-wm1-f65.google.com with SMTP id v22so541472wml.1; Mon, 27 May 2019 13:15:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=H03wKTI6oMmWjRMAo+KT8s6YBguBSsFMM/5UIe8GNQk=; b=Hl6ikSA+R3lwti8uhADhO/77kL0eVTaAYP6LjdD4o3KrmiplyaynXZCH5R0rbMlAYx Y9ttEr0HnviODlGKkF/MPeVO99bca7NnKdJ9WkRDWf9NvB5nlDTJ88Qlg1Kime2MYK6V OgZiD7EOEJ+QcLEupG6sFowIfjoreLG2FiXkQVeqZ9lcH/96vFHIkN/9OOCMMxkNI3/c 2zFr/+3TSs901nH/iWwuD6bKaRxW7PVSuTjJb5NaXghzv6V6yMb5G8lm+FtB3JfMRQWk VUUCKejJ6ol2sEsgqj43Q3cAEWJI5eu15tEPqaDvNcZKDnvLsepXPIKcU9/YjmK8bJhz WUlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H03wKTI6oMmWjRMAo+KT8s6YBguBSsFMM/5UIe8GNQk=; b=XAH3YrMLxGN6yvTzGjWv4VkcltcrSvsmmXmAxr8xiNW9pm+qJsE+SSyglsxtzSm2e0 PGYr1IMRNlQVWh6h6+vhYnZEyXl8zHe3D8P589PWj+aBE3s9O/Wsx7FXQwKKGeze5LkI 4i/32XrET3w4tInj7JugTi22nQB/mPDZI7lC9rjKzT+3LOnxfGFOCQ0wu+30qRUDtEzL wO1Ee4VFUfzUcRLQMFCtj1Ffoou4KvOpZYPu2AXIewGoLEiWsg3tR5J3xaty9cpvcLxH uCgAjClgkuSjJVp3GRdjq2wpPFk2f2D8dN8DAaIaNad+jOpbXWxSm593Gj4XgnUYxzj5 ej+w== X-Gm-Message-State: APjAAAU4PDSMUGFWW4M82wmU1VxXxQVf2XFId3Pul82L4+Vc/XyrdjtD oZ5IGxqjhnxW2DvRwhasLoQ= X-Google-Smtp-Source: APXvYqzt3ePDbCcr04ObNlYBFVyTQoOKHYS9DJIPccn0dXamsGIP082ocTbf4tAS3fko1GzOQQxGzQ== X-Received: by 2002:a1c:b4d4:: with SMTP id d203mr538259wmf.34.1558988110468; Mon, 27 May 2019 13:15:10 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0::4e2b:d7ca]) by smtp.gmail.com with ESMTPSA id i27sm347146wmb.16.2019.05.27.13.15.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 May 2019 13:15:09 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= To: Vinod Koul , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , Dan Williams Cc: dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jernej Skrabec , =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= Subject: [PATCH v3 4/7] dmaengine: sun6i: Add a quirk for setting mode fields Date: Mon, 27 May 2019 22:14:56 +0200 Message-Id: <20190527201459.20130-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190527201459.20130-1-peron.clem@gmail.com> References: <20190527201459.20130-1-peron.clem@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org From: Jernej Skrabec H6 DMA has mode fields in different position than any other currently supported DMA controller. Add a quirk for that. Signed-off-by: Jernej Skrabec Signed-off-by: Clément Péron --- drivers/dma/sun6i-dma.c | 46 ++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index f725b93fd21a..f5cb5e89bf7b 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -70,15 +70,13 @@ #define DMA_CHAN_CUR_CFG 0x0c #define DMA_CHAN_MAX_DRQ_A31 0x1f #define DMA_CHAN_CFG_SRC_DRQ_A31(x) ((x) & DMA_CHAN_MAX_DRQ_A31) -#define DMA_CHAN_CFG_SRC_IO_MODE BIT(5) -#define DMA_CHAN_CFG_SRC_LINEAR_MODE (0 << 5) +#define DMA_CHAN_CFG_SRC_MODE_A31(x) (((x) & 0x1) << 5) #define DMA_CHAN_CFG_SRC_BURST_A31(x) (((x) & 0x3) << 7) #define DMA_CHAN_CFG_SRC_BURST_H3(x) (((x) & 0x3) << 6) #define DMA_CHAN_CFG_SRC_WIDTH(x) (((x) & 0x3) << 9) #define DMA_CHAN_CFG_DST_DRQ_A31(x) (DMA_CHAN_CFG_SRC_DRQ_A31(x) << 16) -#define DMA_CHAN_CFG_DST_IO_MODE (DMA_CHAN_CFG_SRC_IO_MODE << 16) -#define DMA_CHAN_CFG_DST_LINEAR_MODE (DMA_CHAN_CFG_SRC_LINEAR_MODE << 16) +#define DMA_CHAN_CFG_DST_MODE_A31(x) (DMA_CHAN_CFG_SRC_MODE_A31(x) << 16) #define DMA_CHAN_CFG_DST_BURST_A31(x) (DMA_CHAN_CFG_SRC_BURST_A31(x) << 16) #define DMA_CHAN_CFG_DST_BURST_H3(x) (DMA_CHAN_CFG_SRC_BURST_H3(x) << 16) #define DMA_CHAN_CFG_DST_WIDTH(x) (DMA_CHAN_CFG_SRC_WIDTH(x) << 16) @@ -98,6 +96,8 @@ #define LLI_LAST_ITEM 0xfffff800 #define NORMAL_WAIT 8 #define DRQ_SDRAM 1 +#define LINEAR_MODE 0 +#define IO_MODE 1 /* forward declaration */ struct sun6i_dma_dev; @@ -126,6 +126,7 @@ struct sun6i_dma_config { void (*clock_autogate_enable)(struct sun6i_dma_dev *); void (*set_burst_length)(u32 *p_cfg, s8 src_burst, s8 dst_burst); void (*set_drq)(u32 *p_cfg, s8 src_drq, s8 dst_drq); + void (*set_mode)(u32 *p_cfg, s8 src_mode, s8 dst_mode); u32 src_burst_lengths; u32 dst_burst_lengths; u32 src_addr_widths; @@ -318,6 +319,12 @@ static void sun6i_set_drq_a31(u32 *p_cfg, s8 src_drq, s8 dst_drq) DMA_CHAN_CFG_DST_DRQ_A31(dst_drq); } +static void sun6i_set_mode_a31(u32 *p_cfg, s8 src_mode, s8 dst_mode) +{ + *p_cfg |= DMA_CHAN_CFG_SRC_MODE_A31(src_mode) | + DMA_CHAN_CFG_DST_MODE_A31(dst_mode); +} + static size_t sun6i_get_chan_size(struct sun6i_pchan *pchan) { struct sun6i_desc *txd = pchan->desc; @@ -641,13 +648,12 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_dma_memcpy( burst = convert_burst(8); width = convert_buswidth(DMA_SLAVE_BUSWIDTH_4_BYTES); - v_lli->cfg = DMA_CHAN_CFG_DST_LINEAR_MODE | - DMA_CHAN_CFG_SRC_LINEAR_MODE | - DMA_CHAN_CFG_SRC_WIDTH(width) | + v_lli->cfg = DMA_CHAN_CFG_SRC_WIDTH(width) | DMA_CHAN_CFG_DST_WIDTH(width); sdev->cfg->set_burst_length(&v_lli->cfg, burst, burst); sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, DRQ_SDRAM); + sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, LINEAR_MODE); sun6i_dma_lli_add(NULL, v_lli, p_lli, txd); @@ -699,10 +705,9 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_slave_sg( if (dir == DMA_MEM_TO_DEV) { v_lli->src = sg_dma_address(sg); v_lli->dst = sconfig->dst_addr; - v_lli->cfg = lli_cfg | - DMA_CHAN_CFG_DST_IO_MODE | - DMA_CHAN_CFG_SRC_LINEAR_MODE; + v_lli->cfg = lli_cfg; sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port); + sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE); dev_dbg(chan2dev(chan), "%s; chan: %d, dest: %pad, src: %pad, len: %u. flags: 0x%08lx\n", @@ -713,10 +718,9 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_slave_sg( } else { v_lli->src = sconfig->src_addr; v_lli->dst = sg_dma_address(sg); - v_lli->cfg = lli_cfg | - DMA_CHAN_CFG_DST_LINEAR_MODE | - DMA_CHAN_CFG_SRC_IO_MODE; + v_lli->cfg = lli_cfg; sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM); + sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE); dev_dbg(chan2dev(chan), "%s; chan: %d, dest: %pad, src: %pad, len: %u. flags: 0x%08lx\n", @@ -782,17 +786,15 @@ static struct dma_async_tx_descriptor *sun6i_dma_prep_dma_cyclic( if (dir == DMA_MEM_TO_DEV) { v_lli->src = buf_addr + period_len * i; v_lli->dst = sconfig->dst_addr; - v_lli->cfg = lli_cfg | - DMA_CHAN_CFG_DST_IO_MODE | - DMA_CHAN_CFG_SRC_LINEAR_MODE; + v_lli->cfg = lli_cfg; sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port); + sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE); } else { v_lli->src = sconfig->src_addr; v_lli->dst = buf_addr + period_len * i; - v_lli->cfg = lli_cfg | - DMA_CHAN_CFG_DST_LINEAR_MODE | - DMA_CHAN_CFG_SRC_IO_MODE; + v_lli->cfg = lli_cfg; sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM); + sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE); } prev = sun6i_dma_lli_add(prev, v_lli, p_lli, txd); @@ -1058,6 +1060,7 @@ static struct sun6i_dma_config sun6i_a31_dma_cfg = { .nr_max_vchans = 53, .set_burst_length = sun6i_set_burst_length_a31, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(8), .dst_burst_lengths = BIT(1) | BIT(8), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | @@ -1080,6 +1083,7 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = { .clock_autogate_enable = sun6i_enable_clock_autogate_a23, .set_burst_length = sun6i_set_burst_length_a31, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(8), .dst_burst_lengths = BIT(1) | BIT(8), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | @@ -1097,6 +1101,7 @@ static struct sun6i_dma_config sun8i_a83t_dma_cfg = { .clock_autogate_enable = sun6i_enable_clock_autogate_a23, .set_burst_length = sun6i_set_burst_length_a31, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(8), .dst_burst_lengths = BIT(1) | BIT(8), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | @@ -1121,6 +1126,7 @@ static struct sun6i_dma_config sun8i_h3_dma_cfg = { .clock_autogate_enable = sun6i_enable_clock_autogate_h3, .set_burst_length = sun6i_set_burst_length_h3, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(4) | BIT(8) | BIT(16), .dst_burst_lengths = BIT(1) | BIT(4) | BIT(8) | BIT(16), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | @@ -1141,6 +1147,7 @@ static struct sun6i_dma_config sun50i_a64_dma_cfg = { .clock_autogate_enable = sun6i_enable_clock_autogate_h3, .set_burst_length = sun6i_set_burst_length_h3, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(4) | BIT(8) | BIT(16), .dst_burst_lengths = BIT(1) | BIT(4) | BIT(8) | BIT(16), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | @@ -1165,6 +1172,7 @@ static struct sun6i_dma_config sun8i_v3s_dma_cfg = { .clock_autogate_enable = sun6i_enable_clock_autogate_a23, .set_burst_length = sun6i_set_burst_length_a31, .set_drq = sun6i_set_drq_a31, + .set_mode = sun6i_set_mode_a31, .src_burst_lengths = BIT(1) | BIT(8), .dst_burst_lengths = BIT(1) | BIT(8), .src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5212C04AB3 for ; Mon, 27 May 2019 20:15:57 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 76CF92133F for ; Mon, 27 May 2019 20:15:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Q90U618R"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hl6ikSA+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 76CF92133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.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=HshebKsnw+6fZ9Cdh/5InfKdLZ5MOP6sSCRUjOufM+o=; b=Q90U618RMBQbh9 3gTpUsmr1jKSO7boDDp13/Ynr5rx4hMAZSm9/Qn04HaMwVyBoZWXqsEOVjpQStHKOW/lK59fjRi88 Wau89XWQMZXZYkBrVeBqAUIk0ywhWWY16IHqxO6nkvhJFMvyzr2cWqD1PvNE9gMAxZ5fBdghNgwFi DFi+wIXBE8caY/Qbbtk8nO+oQ4zYykX+dAqwLB1GFhKOm17ygVc/U+oi7i27v7Nm4T3vFmW6i2LzA J6ZmmR5Nwnvunpe/yWaIcPXV6kkvsTC7B+H592HmicZ2dZ15YM4uHraKL82V59gsyH6cGYZWtoPyR 0xIBv9vZ67QWxi3S+DcQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hVM2D-0007IJ-AG; Mon, 27 May 2019 20:15:53 +0000 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hVM1Y-0006Ry-3z for linux-arm-kernel@lists.infradead.org; Mon, 27 May 2019 20:15:17 +0000 Received: by mail-wm1-x343.google.com with SMTP id z23so533293wma.4 for ; Mon, 27 May 2019 13:15:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=H03wKTI6oMmWjRMAo+KT8s6YBguBSsFMM/5UIe8GNQk=; b=Hl6ikSA+R3lwti8uhADhO/77kL0eVTaAYP6LjdD4o3KrmiplyaynXZCH5R0rbMlAYx Y9ttEr0HnviODlGKkF/MPeVO99bca7NnKdJ9WkRDWf9NvB5nlDTJ88Qlg1Kime2MYK6V OgZiD7EOEJ+QcLEupG6sFowIfjoreLG2FiXkQVeqZ9lcH/96vFHIkN/9OOCMMxkNI3/c 2zFr/+3TSs901nH/iWwuD6bKaRxW7PVSuTjJb5NaXghzv6V6yMb5G8lm+FtB3JfMRQWk VUUCKejJ6ol2sEsgqj43Q3cAEWJI5eu15tEPqaDvNcZKDnvLsepXPIKcU9/YjmK8bJhz WUlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H03wKTI6oMmWjRMAo+KT8s6YBguBSsFMM/5UIe8GNQk=; b=UI0TInPESju+d++osndUsRpdmaFGAad9JUKdShyDV3pXwyblMNK29k8LIK/yPG3Exe 6iEHBpAkE2wwi1QwkkUGG/K6huz6G3JMiHGisn7mM7x7dOj6KNEDiQWw5QXWIv2hN30b ewsq7XLh+AQL8j6fURyZic9EXfvhW6fDQefyY63JggxfhMzPRTTpgj4ynuVHsLr8XUco Lm7UbPxP3c+/Yi9u/cZ5qKn9HgXYNmlaB/3QMqBzOGG8xqCp6GJh6BdQ4OpFbbgWJr3+ 1BszjwfQydc5fr8iZZgsMLoRkFZBrMvhglJa+vQ3JT0q/bmIxNCpUIZTri+rLi1RL7WT bGPQ== X-Gm-Message-State: APjAAAU8uupFBrodv1KQSDFcfbvOR4DyF6F7NHZ426ElXjNq0p3m2x2C VeTh48CD02Pa7V/zyYVGS6s= X-Google-Smtp-Source: APXvYqzt3ePDbCcr04ObNlYBFVyTQoOKHYS9DJIPccn0dXamsGIP082ocTbf4tAS3fko1GzOQQxGzQ== X-Received: by 2002:a1c:b4d4:: with SMTP id d203mr538259wmf.34.1558988110468; Mon, 27 May 2019 13:15:10 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0::4e2b:d7ca]) by smtp.gmail.com with ESMTPSA id i27sm347146wmb.16.2019.05.27.13.15.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 May 2019 13:15:09 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= To: Vinod Koul , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , Dan Williams Subject: [PATCH v3 4/7] dmaengine: sun6i: Add a quirk for setting mode fields Date: Mon, 27 May 2019 22:14:56 +0200 Message-Id: <20190527201459.20130-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190527201459.20130-1-peron.clem@gmail.com> References: <20190527201459.20130-1-peron.clem@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190527_131512_606696_DE237E79 X-CRM114-Status: GOOD ( 15.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Jernej Skrabec , linux-kernel@vger.kernel.org, =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= , dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogSmVybmVqIFNrcmFiZWMgPGplcm5lai5za3JhYmVjQHNpb2wubmV0PgoKSDYgRE1BIGhh cyBtb2RlIGZpZWxkcyBpbiBkaWZmZXJlbnQgcG9zaXRpb24gdGhhbiBhbnkgb3RoZXIgY3VycmVu dGx5CnN1cHBvcnRlZCBETUEgY29udHJvbGxlci4KCkFkZCBhIHF1aXJrIGZvciB0aGF0LgoKU2ln bmVkLW9mZi1ieTogSmVybmVqIFNrcmFiZWMgPGplcm5lai5za3JhYmVjQHNpb2wubmV0PgpTaWdu ZWQtb2ZmLWJ5OiBDbMOpbWVudCBQw6lyb24gPHBlcm9uLmNsZW1AZ21haWwuY29tPgotLS0KIGRy aXZlcnMvZG1hL3N1bjZpLWRtYS5jIHwgNDYgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYyBiL2RyaXZlcnMvZG1h L3N1bjZpLWRtYS5jCmluZGV4IGY3MjViOTNmZDIxYS4uZjVjYjVlODliZjdiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYworKysgYi9kcml2ZXJzL2RtYS9zdW42aS1kbWEuYwpA QCAtNzAsMTUgKzcwLDEzIEBACiAjZGVmaW5lIERNQV9DSEFOX0NVUl9DRkcJMHgwYwogI2RlZmlu ZSBETUFfQ0hBTl9NQVhfRFJRX0EzMQkJMHgxZgogI2RlZmluZSBETUFfQ0hBTl9DRkdfU1JDX0RS UV9BMzEoeCkJKCh4KSAmIERNQV9DSEFOX01BWF9EUlFfQTMxKQotI2RlZmluZSBETUFfQ0hBTl9D RkdfU1JDX0lPX01PREUJQklUKDUpCi0jZGVmaW5lIERNQV9DSEFOX0NGR19TUkNfTElORUFSX01P REUJKDAgPDwgNSkKKyNkZWZpbmUgRE1BX0NIQU5fQ0ZHX1NSQ19NT0RFX0EzMSh4KQkoKCh4KSAm IDB4MSkgPDwgNSkKICNkZWZpbmUgRE1BX0NIQU5fQ0ZHX1NSQ19CVVJTVF9BMzEoeCkJKCgoeCkg JiAweDMpIDw8IDcpCiAjZGVmaW5lIERNQV9DSEFOX0NGR19TUkNfQlVSU1RfSDMoeCkJKCgoeCkg JiAweDMpIDw8IDYpCiAjZGVmaW5lIERNQV9DSEFOX0NGR19TUkNfV0lEVEgoeCkJKCgoeCkgJiAw eDMpIDw8IDkpCiAKICNkZWZpbmUgRE1BX0NIQU5fQ0ZHX0RTVF9EUlFfQTMxKHgpCShETUFfQ0hB Tl9DRkdfU1JDX0RSUV9BMzEoeCkgPDwgMTYpCi0jZGVmaW5lIERNQV9DSEFOX0NGR19EU1RfSU9f TU9ERQkoRE1BX0NIQU5fQ0ZHX1NSQ19JT19NT0RFIDw8IDE2KQotI2RlZmluZSBETUFfQ0hBTl9D RkdfRFNUX0xJTkVBUl9NT0RFCShETUFfQ0hBTl9DRkdfU1JDX0xJTkVBUl9NT0RFIDw8IDE2KQor I2RlZmluZSBETUFfQ0hBTl9DRkdfRFNUX01PREVfQTMxKHgpCShETUFfQ0hBTl9DRkdfU1JDX01P REVfQTMxKHgpIDw8IDE2KQogI2RlZmluZSBETUFfQ0hBTl9DRkdfRFNUX0JVUlNUX0EzMSh4KQko RE1BX0NIQU5fQ0ZHX1NSQ19CVVJTVF9BMzEoeCkgPDwgMTYpCiAjZGVmaW5lIERNQV9DSEFOX0NG R19EU1RfQlVSU1RfSDMoeCkJKERNQV9DSEFOX0NGR19TUkNfQlVSU1RfSDMoeCkgPDwgMTYpCiAj ZGVmaW5lIERNQV9DSEFOX0NGR19EU1RfV0lEVEgoeCkJKERNQV9DSEFOX0NGR19TUkNfV0lEVEgo eCkgPDwgMTYpCkBAIC05OCw2ICs5Niw4IEBACiAjZGVmaW5lIExMSV9MQVNUX0lURU0JMHhmZmZm ZjgwMAogI2RlZmluZSBOT1JNQUxfV0FJVAk4CiAjZGVmaW5lIERSUV9TRFJBTQkxCisjZGVmaW5l IExJTkVBUl9NT0RFICAgICAwCisjZGVmaW5lIElPX01PREUgICAgICAgICAxCiAKIC8qIGZvcndh cmQgZGVjbGFyYXRpb24gKi8KIHN0cnVjdCBzdW42aV9kbWFfZGV2OwpAQCAtMTI2LDYgKzEyNiw3 IEBAIHN0cnVjdCBzdW42aV9kbWFfY29uZmlnIHsKIAl2b2lkICgqY2xvY2tfYXV0b2dhdGVfZW5h YmxlKShzdHJ1Y3Qgc3VuNmlfZG1hX2RldiAqKTsKIAl2b2lkICgqc2V0X2J1cnN0X2xlbmd0aCko dTMyICpwX2NmZywgczggc3JjX2J1cnN0LCBzOCBkc3RfYnVyc3QpOwogCXZvaWQgKCpzZXRfZHJx KSh1MzIgKnBfY2ZnLCBzOCBzcmNfZHJxLCBzOCBkc3RfZHJxKTsKKwl2b2lkICgqc2V0X21vZGUp KHUzMiAqcF9jZmcsIHM4IHNyY19tb2RlLCBzOCBkc3RfbW9kZSk7CiAJdTMyIHNyY19idXJzdF9s ZW5ndGhzOwogCXUzMiBkc3RfYnVyc3RfbGVuZ3RoczsKIAl1MzIgc3JjX2FkZHJfd2lkdGhzOwpA QCAtMzE4LDYgKzMxOSwxMiBAQCBzdGF0aWMgdm9pZCBzdW42aV9zZXRfZHJxX2EzMSh1MzIgKnBf Y2ZnLCBzOCBzcmNfZHJxLCBzOCBkc3RfZHJxKQogCQkgIERNQV9DSEFOX0NGR19EU1RfRFJRX0Ez MShkc3RfZHJxKTsKIH0KIAorc3RhdGljIHZvaWQgc3VuNmlfc2V0X21vZGVfYTMxKHUzMiAqcF9j ZmcsIHM4IHNyY19tb2RlLCBzOCBkc3RfbW9kZSkKK3sKKwkqcF9jZmcgfD0gRE1BX0NIQU5fQ0ZH X1NSQ19NT0RFX0EzMShzcmNfbW9kZSkgfAorCQkgIERNQV9DSEFOX0NGR19EU1RfTU9ERV9BMzEo ZHN0X21vZGUpOworfQorCiBzdGF0aWMgc2l6ZV90IHN1bjZpX2dldF9jaGFuX3NpemUoc3RydWN0 IHN1bjZpX3BjaGFuICpwY2hhbikKIHsKIAlzdHJ1Y3Qgc3VuNmlfZGVzYyAqdHhkID0gcGNoYW4t PmRlc2M7CkBAIC02NDEsMTMgKzY0OCwxMiBAQCBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9k ZXNjcmlwdG9yICpzdW42aV9kbWFfcHJlcF9kbWFfbWVtY3B5KAogCiAJYnVyc3QgPSBjb252ZXJ0 X2J1cnN0KDgpOwogCXdpZHRoID0gY29udmVydF9idXN3aWR0aChETUFfU0xBVkVfQlVTV0lEVEhf NF9CWVRFUyk7Ci0Jdl9sbGktPmNmZyA9IERNQV9DSEFOX0NGR19EU1RfTElORUFSX01PREUgfAot CQlETUFfQ0hBTl9DRkdfU1JDX0xJTkVBUl9NT0RFIHwKLQkJRE1BX0NIQU5fQ0ZHX1NSQ19XSURU SCh3aWR0aCkgfAorCXZfbGxpLT5jZmcgPSBETUFfQ0hBTl9DRkdfU1JDX1dJRFRIKHdpZHRoKSB8 CiAJCURNQV9DSEFOX0NGR19EU1RfV0lEVEgod2lkdGgpOwogCiAJc2Rldi0+Y2ZnLT5zZXRfYnVy c3RfbGVuZ3RoKCZ2X2xsaS0+Y2ZnLCBidXJzdCwgYnVyc3QpOwogCXNkZXYtPmNmZy0+c2V0X2Ry cSgmdl9sbGktPmNmZywgRFJRX1NEUkFNLCBEUlFfU0RSQU0pOworCXNkZXYtPmNmZy0+c2V0X21v ZGUoJnZfbGxpLT5jZmcsIExJTkVBUl9NT0RFLCBMSU5FQVJfTU9ERSk7CiAKIAlzdW42aV9kbWFf bGxpX2FkZChOVUxMLCB2X2xsaSwgcF9sbGksIHR4ZCk7CiAKQEAgLTY5OSwxMCArNzA1LDkgQEAg c3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc3VuNmlfZG1hX3ByZXBfc2xh dmVfc2coCiAJCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKIAkJCXZfbGxpLT5zcmMgPSBz Z19kbWFfYWRkcmVzcyhzZyk7CiAJCQl2X2xsaS0+ZHN0ID0gc2NvbmZpZy0+ZHN0X2FkZHI7Ci0J CQl2X2xsaS0+Y2ZnID0gbGxpX2NmZyB8Ci0JCQkJRE1BX0NIQU5fQ0ZHX0RTVF9JT19NT0RFIHwK LQkJCQlETUFfQ0hBTl9DRkdfU1JDX0xJTkVBUl9NT0RFOworCQkJdl9sbGktPmNmZyA9IGxsaV9j Zmc7CiAJCQlzZGV2LT5jZmctPnNldF9kcnEoJnZfbGxpLT5jZmcsIERSUV9TRFJBTSwgdmNoYW4t PnBvcnQpOworCQkJc2Rldi0+Y2ZnLT5zZXRfbW9kZSgmdl9sbGktPmNmZywgTElORUFSX01PREUs IElPX01PREUpOwogCiAJCQlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLAogCQkJCSIlczsgY2hhbjog JWQsIGRlc3Q6ICVwYWQsIHNyYzogJXBhZCwgbGVuOiAldS4gZmxhZ3M6IDB4JTA4bHhcbiIsCkBA IC03MTMsMTAgKzcxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3Ig KnN1bjZpX2RtYV9wcmVwX3NsYXZlX3NnKAogCQl9IGVsc2UgewogCQkJdl9sbGktPnNyYyA9IHNj b25maWctPnNyY19hZGRyOwogCQkJdl9sbGktPmRzdCA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJ CXZfbGxpLT5jZmcgPSBsbGlfY2ZnIHwKLQkJCQlETUFfQ0hBTl9DRkdfRFNUX0xJTkVBUl9NT0RF IHwKLQkJCQlETUFfQ0hBTl9DRkdfU1JDX0lPX01PREU7CisJCQl2X2xsaS0+Y2ZnID0gbGxpX2Nm ZzsKIAkJCXNkZXYtPmNmZy0+c2V0X2RycSgmdl9sbGktPmNmZywgdmNoYW4tPnBvcnQsIERSUV9T RFJBTSk7CisJCQlzZGV2LT5jZmctPnNldF9tb2RlKCZ2X2xsaS0+Y2ZnLCBJT19NT0RFLCBMSU5F QVJfTU9ERSk7CiAKIAkJCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksCiAJCQkJIiVzOyBjaGFuOiAl ZCwgZGVzdDogJXBhZCwgc3JjOiAlcGFkLCBsZW46ICV1LiBmbGFnczogMHglMDhseFxuIiwKQEAg LTc4MiwxNyArNzg2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3Ig KnN1bjZpX2RtYV9wcmVwX2RtYV9jeWNsaWMoCiAJCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYp IHsKIAkJCXZfbGxpLT5zcmMgPSBidWZfYWRkciArIHBlcmlvZF9sZW4gKiBpOwogCQkJdl9sbGkt PmRzdCA9IHNjb25maWctPmRzdF9hZGRyOwotCQkJdl9sbGktPmNmZyA9IGxsaV9jZmcgfAotCQkJ CURNQV9DSEFOX0NGR19EU1RfSU9fTU9ERSB8Ci0JCQkJRE1BX0NIQU5fQ0ZHX1NSQ19MSU5FQVJf TU9ERTsKKwkJCXZfbGxpLT5jZmcgPSBsbGlfY2ZnOwogCQkJc2Rldi0+Y2ZnLT5zZXRfZHJxKCZ2 X2xsaS0+Y2ZnLCBEUlFfU0RSQU0sIHZjaGFuLT5wb3J0KTsKKwkJCXNkZXYtPmNmZy0+c2V0X21v ZGUoJnZfbGxpLT5jZmcsIExJTkVBUl9NT0RFLCBJT19NT0RFKTsKIAkJfSBlbHNlIHsKIAkJCXZf bGxpLT5zcmMgPSBzY29uZmlnLT5zcmNfYWRkcjsKIAkJCXZfbGxpLT5kc3QgPSBidWZfYWRkciAr IHBlcmlvZF9sZW4gKiBpOwotCQkJdl9sbGktPmNmZyA9IGxsaV9jZmcgfAotCQkJCURNQV9DSEFO X0NGR19EU1RfTElORUFSX01PREUgfAotCQkJCURNQV9DSEFOX0NGR19TUkNfSU9fTU9ERTsKKwkJ CXZfbGxpLT5jZmcgPSBsbGlfY2ZnOwogCQkJc2Rldi0+Y2ZnLT5zZXRfZHJxKCZ2X2xsaS0+Y2Zn LCB2Y2hhbi0+cG9ydCwgRFJRX1NEUkFNKTsKKwkJCXNkZXYtPmNmZy0+c2V0X21vZGUoJnZfbGxp LT5jZmcsIElPX01PREUsIExJTkVBUl9NT0RFKTsKIAkJfQogCiAJCXByZXYgPSBzdW42aV9kbWFf bGxpX2FkZChwcmV2LCB2X2xsaSwgcF9sbGksIHR4ZCk7CkBAIC0xMDU4LDYgKzEwNjAsNyBAQCBz dGF0aWMgc3RydWN0IHN1bjZpX2RtYV9jb25maWcgc3VuNmlfYTMxX2RtYV9jZmcgPSB7CiAJLm5y X21heF92Y2hhbnMgICA9IDUzLAogCS5zZXRfYnVyc3RfbGVuZ3RoID0gc3VuNmlfc2V0X2J1cnN0 X2xlbmd0aF9hMzEsCiAJLnNldF9kcnEgICAgICAgICAgPSBzdW42aV9zZXRfZHJxX2EzMSwKKwku c2V0X21vZGUgICAgICAgICA9IHN1bjZpX3NldF9tb2RlX2EzMSwKIAkuc3JjX2J1cnN0X2xlbmd0 aHMgPSBCSVQoMSkgfCBCSVQoOCksCiAJLmRzdF9idXJzdF9sZW5ndGhzID0gQklUKDEpIHwgQklU KDgpLAogCS5zcmNfYWRkcl93aWR0aHMgICA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRF KSB8CkBAIC0xMDgwLDYgKzEwODMsNyBAQCBzdGF0aWMgc3RydWN0IHN1bjZpX2RtYV9jb25maWcg c3VuOGlfYTIzX2RtYV9jZmcgPSB7CiAJLmNsb2NrX2F1dG9nYXRlX2VuYWJsZSA9IHN1bjZpX2Vu YWJsZV9jbG9ja19hdXRvZ2F0ZV9hMjMsCiAJLnNldF9idXJzdF9sZW5ndGggPSBzdW42aV9zZXRf YnVyc3RfbGVuZ3RoX2EzMSwKIAkuc2V0X2RycSAgICAgICAgICA9IHN1bjZpX3NldF9kcnFfYTMx LAorCS5zZXRfbW9kZSAgICAgICAgID0gc3VuNmlfc2V0X21vZGVfYTMxLAogCS5zcmNfYnVyc3Rf bGVuZ3RocyA9IEJJVCgxKSB8IEJJVCg4KSwKIAkuZHN0X2J1cnN0X2xlbmd0aHMgPSBCSVQoMSkg fCBCSVQoOCksCiAJLnNyY19hZGRyX3dpZHRocyAgID0gQklUKERNQV9TTEFWRV9CVVNXSURUSF8x X0JZVEUpIHwKQEAgLTEwOTcsNiArMTEwMSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VuNmlfZG1hX2Nv bmZpZyBzdW44aV9hODN0X2RtYV9jZmcgPSB7CiAJLmNsb2NrX2F1dG9nYXRlX2VuYWJsZSA9IHN1 bjZpX2VuYWJsZV9jbG9ja19hdXRvZ2F0ZV9hMjMsCiAJLnNldF9idXJzdF9sZW5ndGggPSBzdW42 aV9zZXRfYnVyc3RfbGVuZ3RoX2EzMSwKIAkuc2V0X2RycSAgICAgICAgICA9IHN1bjZpX3NldF9k cnFfYTMxLAorCS5zZXRfbW9kZSAgICAgICAgID0gc3VuNmlfc2V0X21vZGVfYTMxLAogCS5zcmNf YnVyc3RfbGVuZ3RocyA9IEJJVCgxKSB8IEJJVCg4KSwKIAkuZHN0X2J1cnN0X2xlbmd0aHMgPSBC SVQoMSkgfCBCSVQoOCksCiAJLnNyY19hZGRyX3dpZHRocyAgID0gQklUKERNQV9TTEFWRV9CVVNX SURUSF8xX0JZVEUpIHwKQEAgLTExMjEsNiArMTEyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VuNmlf ZG1hX2NvbmZpZyBzdW44aV9oM19kbWFfY2ZnID0gewogCS5jbG9ja19hdXRvZ2F0ZV9lbmFibGUg PSBzdW42aV9lbmFibGVfY2xvY2tfYXV0b2dhdGVfaDMsCiAJLnNldF9idXJzdF9sZW5ndGggPSBz dW42aV9zZXRfYnVyc3RfbGVuZ3RoX2gzLAogCS5zZXRfZHJxICAgICAgICAgID0gc3VuNmlfc2V0 X2RycV9hMzEsCisJLnNldF9tb2RlICAgICAgICAgPSBzdW42aV9zZXRfbW9kZV9hMzEsCiAJLnNy Y19idXJzdF9sZW5ndGhzID0gQklUKDEpIHwgQklUKDQpIHwgQklUKDgpIHwgQklUKDE2KSwKIAku ZHN0X2J1cnN0X2xlbmd0aHMgPSBCSVQoMSkgfCBCSVQoNCkgfCBCSVQoOCkgfCBCSVQoMTYpLAog CS5zcmNfYWRkcl93aWR0aHMgICA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8CkBA IC0xMTQxLDYgKzExNDcsNyBAQCBzdGF0aWMgc3RydWN0IHN1bjZpX2RtYV9jb25maWcgc3VuNTBp X2E2NF9kbWFfY2ZnID0gewogCS5jbG9ja19hdXRvZ2F0ZV9lbmFibGUgPSBzdW42aV9lbmFibGVf Y2xvY2tfYXV0b2dhdGVfaDMsCiAJLnNldF9idXJzdF9sZW5ndGggPSBzdW42aV9zZXRfYnVyc3Rf bGVuZ3RoX2gzLAogCS5zZXRfZHJxICAgICAgICAgID0gc3VuNmlfc2V0X2RycV9hMzEsCisJLnNl dF9tb2RlICAgICAgICAgPSBzdW42aV9zZXRfbW9kZV9hMzEsCiAJLnNyY19idXJzdF9sZW5ndGhz ID0gQklUKDEpIHwgQklUKDQpIHwgQklUKDgpIHwgQklUKDE2KSwKIAkuZHN0X2J1cnN0X2xlbmd0 aHMgPSBCSVQoMSkgfCBCSVQoNCkgfCBCSVQoOCkgfCBCSVQoMTYpLAogCS5zcmNfYWRkcl93aWR0 aHMgICA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8CkBAIC0xMTY1LDYgKzExNzIs NyBAQCBzdGF0aWMgc3RydWN0IHN1bjZpX2RtYV9jb25maWcgc3VuOGlfdjNzX2RtYV9jZmcgPSB7 CiAJLmNsb2NrX2F1dG9nYXRlX2VuYWJsZSA9IHN1bjZpX2VuYWJsZV9jbG9ja19hdXRvZ2F0ZV9h MjMsCiAJLnNldF9idXJzdF9sZW5ndGggPSBzdW42aV9zZXRfYnVyc3RfbGVuZ3RoX2EzMSwKIAku c2V0X2RycSAgICAgICAgICA9IHN1bjZpX3NldF9kcnFfYTMxLAorCS5zZXRfbW9kZSAgICAgICAg ID0gc3VuNmlfc2V0X21vZGVfYTMxLAogCS5zcmNfYnVyc3RfbGVuZ3RocyA9IEJJVCgxKSB8IEJJ VCg4KSwKIAkuZHN0X2J1cnN0X2xlbmd0aHMgPSBCSVQoMSkgfCBCSVQoOCksCiAJLnNyY19hZGRy X3dpZHRocyAgID0gQklUKERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpIHwKLS0gCjIuMjAuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK