From patchwork Fri Feb 24 15:22:20 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: 61375 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp982309wrd; Fri, 24 Feb 2023 07:44:11 -0800 (PST) X-Google-Smtp-Source: AK7set9R7TT5yVy5a4PWp4WtOJ8ngfFWWa928YgnxxuWUZ4ArqfF7ZDuyrWrWAXEPFQhtzqEmjZy X-Received: by 2002:a17:902:b94c:b0:19c:a8e8:507d with SMTP id h12-20020a170902b94c00b0019ca8e8507dmr7863790pls.47.1677253450867; Fri, 24 Feb 2023 07:44:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677253450; cv=none; d=google.com; s=arc-20160816; b=cu1xNAqkNXpqn5KfyyYQqIlcruNNRDfFkAQpSWgb9tj+6YFG1eb/UW+LUQ764+57e6 qzHMZVE9cUCb+71ev9dBAaNlulFh2UucWxA/cmf+h+moCgr5vk7GEfakAd6zw4EG74HP 6QLM/MlZaVp9qfJs9sXGKnDpASvAUM5fV3vQnc9t+Zrg8j7Kt1fXvgJr1twnCExYjhoh KR8e9a7Zq6f4mQBJMSwkSSrGMIDv0EMiQHY4r/1bRivno6EYBpFyFM27lAzAMLlEFh/V GeRUh4KqIrIZTgeDCmmqWc4veYjL35K3NtwocLcQHGx0URZ6syY+XCBezJgMgnUN467X 5RkA== 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=8I53wAm0Lhx1Y1CRpTsp/SrqowkIL26beK+I0BreeKg=; b=lggRG9YIDzm8VGRsXAHHhpMv9YLN4A/qCWA6o5Bw2f9Lq46QwBNR9mhsyD4owqPH7j KDwtBofMKWxkcZq4b0bY/xW37EcVIKuDGFZejHGMUq1MdwBV2lB3M+lgHmlyevG21x0e vxlAlr6aEIDhG0bVfTSOdeXevme+jCV91RoFpcUYd8AgtvYrep+ehBCVupWyxEgDBeuA 8Za3/wCds10EFuiHDs8bwfq0ewO+ABseZdWJqcFDKsWFeDHtq6RDEZrIw/sBgiphUna0 SrUw05B1hMDaEM26CG7xwOF2qTIwKc57TEyhPUnQZbJ5KlKiuk1HD41i9xCwEP5Q/ksx +XGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cutebit.org header.s=mail header.b=KzjvnnBt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q18-20020a170902bd9200b0019ad22c40c7si4685515pls.132.2023.02.24.07.43.58; Fri, 24 Feb 2023 07:44:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cutebit.org header.s=mail header.b=KzjvnnBt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cutebit.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230318AbjBXPWj (ORCPT + 99 others); Fri, 24 Feb 2023 10:22:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46756 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229748AbjBXPWh (ORCPT ); Fri, 24 Feb 2023 10:22:37 -0500 Received: from hutie.ust.cz (unknown [IPv6:2a03:3b40:fe:f0::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ACEF66A9E6; Fri, 24 Feb 2023 07:22:30 -0800 (PST) From: =?utf-8?q?Martin_Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1677252145; bh=8I53wAm0Lhx1Y1CRpTsp/SrqowkIL26beK+I0BreeKg=; h=From:To:Cc:Subject:Date; b=KzjvnnBtPMLzkpne5ixV1R5vuvAuRq/riSQMn9JedY18pihL2mEdyY4AVhiv2dpX4 2jOIvqTVWjw8jMAAe4igDy0ErG5dXi8IdYScZWKLs1WURJu6IVVQGM4gAmerF6KtlL uzDbQyJTxoBgbh/cekLbEdEGeCEnorFmhJLgHseg= To: Hector Martin , Sven Peter , Vinod Koul Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] dmaengine: apple-admac: Handle 'global' interrupt flags Date: Fri, 24 Feb 2023 16:22:20 +0100 Message-Id: <20230224152222.26732-1-povik+lin@cutebit.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_FAIL,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758727714799147868?= X-GMAIL-MSGID: =?utf-8?q?1758727714799147868?= In addition to TX channel and RX channel interrupt flags there's another class of 'global' interrupt flags with unknown semantics. Those weren't being handled up to now, and they are the suspected cause of stuck IRQ states that have been sporadically occurring. Check the global flags and clear them if raised. Fixes: b127315d9a78 ("dmaengine: apple-admac: Add Apple ADMAC driver") Signed-off-by: Martin PoviĊĦer --- drivers/dma/apple-admac.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c index 90f28bda29c8..00cbfafe0ed9 100644 --- a/drivers/dma/apple-admac.c +++ b/drivers/dma/apple-admac.c @@ -75,6 +75,7 @@ #define REG_TX_INTSTATE(idx) (0x0030 + (idx) * 4) #define REG_RX_INTSTATE(idx) (0x0040 + (idx) * 4) +#define REG_GLOBAL_INTSTATE(idx) (0x0050 + (idx) * 4) #define REG_CHAN_INTSTATUS(ch, idx) (0x8010 + (ch) * 0x200 + (idx) * 4) #define REG_CHAN_INTMASK(ch, idx) (0x8020 + (ch) * 0x200 + (idx) * 4) @@ -672,13 +673,14 @@ static void admac_handle_chan_int(struct admac_data *ad, int no) static irqreturn_t admac_interrupt(int irq, void *devid) { struct admac_data *ad = devid; - u32 rx_intstate, tx_intstate; + u32 rx_intstate, tx_intstate, global_intstate; int i; rx_intstate = readl_relaxed(ad->base + REG_RX_INTSTATE(ad->irq_index)); tx_intstate = readl_relaxed(ad->base + REG_TX_INTSTATE(ad->irq_index)); + global_intstate = readl_relaxed(ad->base + REG_GLOBAL_INTSTATE(ad->irq_index)); - if (!tx_intstate && !rx_intstate) + if (!tx_intstate && !rx_intstate && !global_intstate) return IRQ_NONE; for (i = 0; i < ad->nchannels; i += 2) { @@ -693,6 +695,12 @@ static irqreturn_t admac_interrupt(int irq, void *devid) rx_intstate >>= 1; } + if (global_intstate) { + dev_warn(ad->dev, "clearing unknown global interrupt flag: %x\n", + global_intstate); + writel_relaxed(~(u32) 0, ad->base + REG_GLOBAL_INTSTATE(ad->irq_index)); + } + return IRQ_HANDLED; }