From patchwork Sun Oct 29 17:07:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Martin_Povi=C5=A1er?= X-Patchwork-Id: 159382 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1778861vqb; Sun, 29 Oct 2023 10:08:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHUMiXgKm2aj8bCjtnUsj3g9i3pX+oid/6vagVjo0BPxt1H4eJ7JJobY/CJvEt7LELvLCud X-Received: by 2002:a17:902:ee89:b0:1ca:731a:23e4 with SMTP id a9-20020a170902ee8900b001ca731a23e4mr8244786pld.40.1698599289662; Sun, 29 Oct 2023 10:08:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698599289; cv=none; d=google.com; s=arc-20160816; b=Vw/4bFNmyBdAD818pvN8VyxiUCRlBW4zLUINb+ZuHNJGmPPU8druPKJCntxEyxK5oC Og60fdX6jQBxTXL+arzNwktQ25G603cl6CuA+InefNhdPgSBn2E7CZNt5LzM+rlBrj0m WsHDM3D2qz/SqBpQiR0b9ktszP2kMFWXIxQopABeS41lD4yjwJjh7DtL0uBSBUd9rX9X Qp9uwmDthkt7Lm/XrVqh5j0slqJe9nSm1vAOgc0meONgddHYRgHjS3j61SsOmThPkNgh HY/Osojw3OABY1x+W9eH9niNh3OBd/PtVMhFEWSSz3VU+FDy4b4y5gCyd76qE9VHOUdV 91jQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:dkim-signature:from; bh=ks4YNEeD+10vbFjJV7lXcOdJALOf9YJioNyXbYuueZ4=; fh=K286Wsh0hKL6slkpvrnVVc0v6+dGGW7X7/3v9cF2isE=; b=aCsPBK7JO0S7BRZe1kE3AbAivePR+YdrBDRwfqVzKE3CSTY1fa+qbExbnA59J7f+yk vgR21Ue+OnFDwMfR7+5PaR9+3oUkiEi2USatyRT5BDs8BrcsrEx9/9jcaSd89rFBV5wd GtOr8rJjMPWjocrkOMz5dGh7pIc2UBKxIqN6MxJpXWgWcAzjcoH2OTaTK8hVViA+jgSo LoWlRdoTGLUKRNoujYMxToGNTSsw67Mm2NJHqsfsbowp/L5Hi7ARX972nIB5xED6YYRu 5rycrMdENkFDvqY0XbznQb5kHfIqq9giEizyPSKODwczFgXEK83xe5kH6eh0zEHtxJ+A 9HPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cutebit.org header.s=mail header.b=WhNR04b0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cutebit.org Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id d6-20020a170902654600b001c724f997ffsi3948797pln.131.2023.10.29.10.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 10:08:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@cutebit.org header.s=mail header.b=WhNR04b0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cutebit.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 3207C8067B5F; Sun, 29 Oct 2023 10:08:07 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230032AbjJ2RHk (ORCPT + 30 others); Sun, 29 Oct 2023 13:07:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230202AbjJ2RHj (ORCPT ); Sun, 29 Oct 2023 13:07:39 -0400 Received: from hutie.ust.cz (hutie.ust.cz [IPv6:2a03:3b40:fe:f0::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA79DAF; Sun, 29 Oct 2023 10:07:37 -0700 (PDT) From: =?utf-8?q?Martin_Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1698599255; bh=ks4YNEeD+10vbFjJV7lXcOdJALOf9YJioNyXbYuueZ4=; h=From:To:Cc:Subject:Date; b=WhNR04b0rix8q+fydz8QLE8l0Jbg9vV0oQmSEQPk3WQDkG90trynJCdKo6ZO1P9kF mWIuTT0iOqMEGjftybZIoAwKvoS71TxwNuzHQUVP3K+/H+RxksYhmcaaftRFlyyy9u /Q1wcgc4Uv3cK0NVPqE8Fx8Dxe0BKa/1jCEKR4+4= To: Hector Martin , Sven Peter , Vinod Koul Cc: Alyssa Rosenzweig , asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Martin_Povi=C5=A1er?= Subject: [PATCH v2] dmaengine: apple-admac: Keep upper bits of REG_BUS_WIDTH Date: Sun, 29 Oct 2023 18:07:04 +0100 Message-Id: <20231029170704.82238-1-povik+lin@cutebit.org> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Sun, 29 Oct 2023 10:08:07 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781110054198633490 X-GMAIL-MSGID: 1781110448717425890 From: Hector Martin For RX channels, REG_BUS_WIDTH seems to default to a value of 0xf00, and macOS preserves the upper bits when setting the configuration in the lower ones. If we reset the upper bits to 0, this causes framing errors on suspend/resume (the data stream "tears" and channels get swapped around). Keeping the upper bits untouched, like the macOS driver does, fixes this issue. Signed-off-by: Hector Martin Reviewed-by: Martin Povišer Signed-off-by: Martin Povišer --- Change in v2: fixed my (Martin's) address drivers/dma/apple-admac.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c index 5b63996640d9..9588773dd2eb 100644 --- a/drivers/dma/apple-admac.c +++ b/drivers/dma/apple-admac.c @@ -57,6 +57,8 @@ #define REG_BUS_WIDTH(ch) (0x8040 + (ch) * 0x200) +#define BUS_WIDTH_WORD_SIZE GENMASK(3, 0) +#define BUS_WIDTH_FRAME_SIZE GENMASK(7, 4) #define BUS_WIDTH_8BIT 0x00 #define BUS_WIDTH_16BIT 0x01 #define BUS_WIDTH_32BIT 0x02 @@ -740,7 +742,8 @@ static int admac_device_config(struct dma_chan *chan, struct admac_data *ad = adchan->host; bool is_tx = admac_chan_direction(adchan->no) == DMA_MEM_TO_DEV; int wordsize = 0; - u32 bus_width = 0; + u32 bus_width = readl_relaxed(ad->base + REG_BUS_WIDTH(adchan->no)) & + ~(BUS_WIDTH_WORD_SIZE | BUS_WIDTH_FRAME_SIZE); switch (is_tx ? config->dst_addr_width : config->src_addr_width) { case DMA_SLAVE_BUSWIDTH_1_BYTE: