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 4E6CFC07542 for ; Sat, 25 May 2019 16:38:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1CA2A21872 for ; Sat, 25 May 2019 16:38:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Iddrw4kW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727386AbfEYQiv (ORCPT ); Sat, 25 May 2019 12:38:51 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:35040 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727308AbfEYQid (ORCPT ); Sat, 25 May 2019 12:38:33 -0400 Received: by mail-wr1-f68.google.com with SMTP id m3so12833869wrv.2; Sat, 25 May 2019 09:38:30 -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=Iddrw4kWou21k/kiAmXABQ84cser+X5MUpZAa9hVL91V9F615spMPNd2RQsulxU9Lk aIsy7ssyPs2REq7+/lkqC5OWSzaAWgYGIRtWwnkEuueh6ugMCk9RjzluRZNYdp91qY5L lMmCbPCXooM2KGphQxGnbJros4Of31LdliwtPAGBuVK/yCpMEPjSQHqneHJa9qCkwyqT 39IbYsx8C1/weS7Ge8gN1kxWPJyNyvkn5g+gDAtKZ6CsL6lEsDyrGCC6T11c7IKN1EHl qpZPmtFGcGbsPHDM1w1nVfDlXHT4rDNX/tCM4az/J0lYCSmRL4caqdhAMql5Jp6rGd+A OkXA== 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=qYIYmEDgPNjz0Uc97vPcdSBulRfuN/F832x9sfJhLHoEOrUTgbOguIIg0P9i7VHc1N wB3jrvNvdpUljG+V4UR7BggTwZrZMGBrplzJ2+6idFTa062yKc8ZUuVKO7YmRkqlpMRg 2wnYbXKJMJ81o67Kfd/QKMgnqVqi4WUkg6vrtyWOOMbAa0J7xvJ715Zl9Y9tNZLNtnbk FiIEC0hSboo8hN+Ka90Tv0Eh14iROIlbAg341KsYNHCRn74YwF/v41sM6AEUoLoDFGDO 1gM8DcuA9Obw33Gq5hkaUYn5nmOSRpLrC0b68aeu+17YgPiTFve1sSr+jbt11F3vLKkU GF+g== X-Gm-Message-State: APjAAAVuIyg7W9I3bk3LfbrZE9445e9g8BqmxSJxbgSVoykCO+z48ZsO 1IEIe09ige+J6R7hrA+8Jjs= X-Google-Smtp-Source: APXvYqw5sFDjRtDp0iNaPs2KQNMhDcL2yGJeY6KQpk7jesSctB6oJfyHxfP2zRbHceh6y467XZDpRg== X-Received: by 2002:adf:f6ce:: with SMTP id y14mr12786156wrp.113.1558802310197; Sat, 25 May 2019 09:38:30 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0::4e2b:d7ca]) by smtp.gmail.com with ESMTPSA id f65sm9306498wmg.45.2019.05.25.09.38.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 25 May 2019 09:38:29 -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 v2 4/7] dmaengine: sun6i: Add a quirk for setting mode fields Date: Sat, 25 May 2019 18:38:16 +0200 Message-Id: <20190525163819.21055-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190525163819.21055-1-peron.clem@gmail.com> References: <20190525163819.21055-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 6BA6AC07542 for ; Sat, 25 May 2019 16:39:36 +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 3A5C2216E3 for ; Sat, 25 May 2019 16:39:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="HUlBOR21"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Iddrw4kW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3A5C2216E3 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=HUlBOR21jesvcS mQn1MpTNXCY0BwzsaCYKFPSgcvJdIglVSOFw5ousC6u0kGZGoxAe2C8K1ygaXLBoq9PeBbn/Zq3dm 6YdOQIIdTsfRvxhlxAAH1zLUfDYB4heO9tC66k2sXZ/I/Tj6xLM9cMW5yTwE9HymadK/ig0GpEh7w wqQibj+fIRmMK6bvcPWHQoJeE08OyJ7/ZynW+9DcKdi2TRkWkzaG/DWULFVA4Wlajk1q5gpAHErmW kWCtCvjR+s834d/bJ0f3sLWvY4qELfvvSWKBXap6suNGnHehrA+OvX/9tgaTrOvPV6xFTJBM4N5CV 6DWcWk7K2vMXaR3ZRzBA==; 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 1hUZhf-0004l8-C0; Sat, 25 May 2019 16:39:27 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hUZgl-0003bY-Ov for linux-arm-kernel@lists.infradead.org; Sat, 25 May 2019 16:38:36 +0000 Received: by mail-wr1-x444.google.com with SMTP id f8so12848450wrt.1 for ; Sat, 25 May 2019 09:38:31 -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=Iddrw4kWou21k/kiAmXABQ84cser+X5MUpZAa9hVL91V9F615spMPNd2RQsulxU9Lk aIsy7ssyPs2REq7+/lkqC5OWSzaAWgYGIRtWwnkEuueh6ugMCk9RjzluRZNYdp91qY5L lMmCbPCXooM2KGphQxGnbJros4Of31LdliwtPAGBuVK/yCpMEPjSQHqneHJa9qCkwyqT 39IbYsx8C1/weS7Ge8gN1kxWPJyNyvkn5g+gDAtKZ6CsL6lEsDyrGCC6T11c7IKN1EHl qpZPmtFGcGbsPHDM1w1nVfDlXHT4rDNX/tCM4az/J0lYCSmRL4caqdhAMql5Jp6rGd+A OkXA== 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=N5Up6WKf0bPJWzUSn+3EINV5c+xFs43GUwFpbaDIi39fuAO46AI4h7NfFcfq50jGjg Z1nRGLs3JxFx1eJvLb30SDE2JjPSajpi8N2Ks0/QXs0+SYWM/z3RiRiG8flupjtdM86e bV9qXhoenDgRgoizi7K+LIy9qvFj9WqGEagbPpfQ90n4KWqP18UwXEoHxmZE1a0EiigL EN+RwhfI90LvKbFQ55YwtArzZI+/hTa0W0BH6EquLbHgQrrK5ec7SEAPHMUYKIXx723t +x5y+1I0ueKyHG8D54jgRCqF8GRIsvMJ4bnavui5DdXam02kpvpxsFhgA/0NSmgRBMyN I5Xg== X-Gm-Message-State: APjAAAX7Tj2GBDtsGVfESd4Phv3ACazrRn4u05QGAQmM1urnJBpeEc56 LN71Nb6H/bMDoHH4eqg7mG950eTSMvpltw== X-Google-Smtp-Source: APXvYqw5sFDjRtDp0iNaPs2KQNMhDcL2yGJeY6KQpk7jesSctB6oJfyHxfP2zRbHceh6y467XZDpRg== X-Received: by 2002:adf:f6ce:: with SMTP id y14mr12786156wrp.113.1558802310197; Sat, 25 May 2019 09:38:30 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:1f1:d0f0::4e2b:d7ca]) by smtp.gmail.com with ESMTPSA id f65sm9306498wmg.45.2019.05.25.09.38.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 25 May 2019 09:38:29 -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 v2 4/7] dmaengine: sun6i: Add a quirk for setting mode fields Date: Sat, 25 May 2019 18:38:16 +0200 Message-Id: <20190525163819.21055-5-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190525163819.21055-1-peron.clem@gmail.com> References: <20190525163819.21055-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-20190525_093831_973523_5B7A1DC5 X-CRM114-Status: GOOD ( 15.21 ) 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