From patchwork Wed Dec 2 05:16:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Wang X-Patchwork-Id: 11944725 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=-18.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,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 9DA17C64E7C for ; Wed, 2 Dec 2020 05:18:13 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 1DA6220872 for ; Wed, 2 Dec 2020 05:18:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1DA6220872 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bytedance.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version: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:In-Reply-To:References:List-Owner; bh=4M1hcgbvNSTgo3zMcb935+v32XhIKKodTA7Sa/9zZMU=; b=jW1dTej3amFA1ro91Wlimz1OER Blo5gPxB+hdFxbBrw5c4OAjAwE0diE1htKVC13n899yNQzbuEefI2V7W6v9Y6ipX/gxi5MDWODehM SOMEa2VdEpmTuIlsfEhY6BCyhJZq4zHa14mzKoYXsfhXFZNewcBJ+neqtZVOGoLRysXq69Ub9/i8B 93zpMISUFO4uruQApYmVOyASDac9BPXn8hStN8ssWQndloi6pzlQxMnkvjaUHMP5B8eiCG/eJQIED Ie1MU6wbdk6KJS/0asHJQgzDcvxrmMfv7jI30Fh+WTHnpr0GXXpOJZj0USHAwp7xg1IO0TZ/uq/aF /QrMWR4g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkKVT-0008MW-Ai; Wed, 02 Dec 2020 05:16:47 +0000 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkKVP-0008Lg-Vn for linux-arm-kernel@lists.infradead.org; Wed, 02 Dec 2020 05:16:45 +0000 Received: by mail-pg1-x543.google.com with SMTP id k11so384346pgq.2 for ; Tue, 01 Dec 2020 21:16:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=GtGtPbg6S6XKVKh82wVhGzyfNnkNiglHRZS762Gp8h4=; b=yTpjg/5vPTATnfoFO0GOcxyy/yiYUUXJjKNzERHukSH6utLlTGRfyx+S6UzT+cjg/w dMsSOI1zz34tfE41k1LH54QkIrFch4/QcoSX9q8OjO+ZB2v6IYNlm9h/vZWTmSGwdsT9 faB/m05s9Qd7W6/Yj19PbFZ6zjGW7M8YZf/uUg2moJK7CqACQcttFkT+sLX/R31RYMhF 2AKsgEtIVsziuT7sP8wXy2wwhhBYQBCQ+noQ9hamWAQ5DWXuXxg9N/B2EZa4nuJbUQrE oqtAK+AplMNwesTPNluXQQQ4Ql03xXST8AI4a8pGLOWaS637KyHNBmddECETWDuxIrnO 74Ww== 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:mime-version :content-transfer-encoding; bh=GtGtPbg6S6XKVKh82wVhGzyfNnkNiglHRZS762Gp8h4=; b=pD40USX6FJEVyKdCB/W5lSDMR5r/VG2HaWCFG+dvdpzWPQW79wtTbWEjz6uUqnh95A vYImk0bxAMHebj7Wb0GLVQgdbTF/CU+anwpjDfY37wPwe/h2wzp2CVaFdqe6gGO2Qgim zkU+2/IE3SfMjcg1DeUGBruGOKW0qWlaaZ1czicuWUzMUtzRAU3jWMSwQ/vSxmdXj/ak LKaS1LpbymrzLDoowv+USfV/CyZRQqwCHL0+f3zqnkF0nqFO9QI0OESy67osvvVALbnK 0gDK8LzLzXn+Cw32hgF3VemnmTHxwqZ8NQgD9r3nnjNyXB81hel3qvzHme5PPTbVBb7S nCaw== X-Gm-Message-State: AOAM533ErdqxOmTmlpxYnvNAfUd7T4hD+ahJFW2TWOyj8F0x27pb0NxW gj/A4MHINip2aulYhTzJoUV61g== X-Google-Smtp-Source: ABdhPJyH6g/iSiIYweoziem2Du7RUZljIo6zCrG1kBxujGXUB4xR1hWqzfOw+ZznapK4sq/NdHd3bw== X-Received: by 2002:a63:d45:: with SMTP id 5mr1154561pgn.0.1606886198037; Tue, 01 Dec 2020 21:16:38 -0800 (PST) Received: from localhost ([61.120.150.72]) by smtp.gmail.com with ESMTPSA id d4sm457523pjz.28.2020.12.01.21.16.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Dec 2020 21:16:37 -0800 (PST) From: John Wang To: xuxiaohan@bytedance.com, yulei.sh@bytedance.com Subject: [PATCH 1/2] misc: Add clock control logic into Aspeed LPC SNOOP driver Date: Wed, 2 Dec 2020 13:16:33 +0800 Message-Id: <20201202051634.490-1-wangzhiqiang.bj@bytedance.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201202_001644_143070_FDEEA193 X-CRM114-Status: GOOD ( 18.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "moderated list:ARM/ASPEED MACHINE SUPPORT" , Andrew Jeffery , Vernon Mauery , open list , Jae Hyun Yoo , Joel Stanley , "moderated list:ARM/ASPEED MACHINE SUPPORT" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Jae Hyun Yoo If LPC SNOOP driver is registered ahead of lpc-ctrl module, LPC SNOOP block will be enabled without heart beating of LCLK until lpc-ctrl enables the LCLK. This issue causes improper handling on host interrupts when the host sends interrupt in that time frame. Then kernel eventually forcibly disables the interrupt with dumping stack and printing a 'nobody cared this irq' message out. To prevent this issue, all LPC sub-nodes should enable LCLK individually so this patch adds clock control logic into the LPC SNOOP driver. Signed-off-by: Jae Hyun Yoo Signed-off-by: Vernon Mauery Signed-off-by: John Wang Reviewed-by: Joel Stanley --- drivers/soc/aspeed/aspeed-lpc-snoop.c | 30 ++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c index 682ba0eb4eba..20acac6342ef 100644 --- a/drivers/soc/aspeed/aspeed-lpc-snoop.c +++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c @@ -11,6 +11,7 @@ */ #include +#include #include #include #include @@ -67,6 +68,7 @@ struct aspeed_lpc_snoop_channel { struct aspeed_lpc_snoop { struct regmap *regmap; int irq; + struct clk *clk; struct aspeed_lpc_snoop_channel chan[NUM_SNOOP_CHANNELS]; }; @@ -282,22 +284,42 @@ static int aspeed_lpc_snoop_probe(struct platform_device *pdev) return -ENODEV; } + lpc_snoop->clk = devm_clk_get(dev, NULL); + if (IS_ERR(lpc_snoop->clk)) { + rc = PTR_ERR(lpc_snoop->clk); + if (rc != -EPROBE_DEFER) + dev_err(dev, "couldn't get clock\n"); + return rc; + } + rc = clk_prepare_enable(lpc_snoop->clk); + if (rc) { + dev_err(dev, "couldn't enable clock\n"); + return rc; + } + rc = aspeed_lpc_snoop_config_irq(lpc_snoop, pdev); if (rc) - return rc; + goto err; rc = aspeed_lpc_enable_snoop(lpc_snoop, dev, 0, port); if (rc) - return rc; + goto err; /* Configuration of 2nd snoop channel port is optional */ if (of_property_read_u32_index(dev->of_node, "snoop-ports", 1, &port) == 0) { rc = aspeed_lpc_enable_snoop(lpc_snoop, dev, 1, port); - if (rc) + if (rc) { aspeed_lpc_disable_snoop(lpc_snoop, 0); + goto err; + } } + return 0; + +err: + clk_disable_unprepare(lpc_snoop->clk); + return rc; } @@ -309,6 +331,8 @@ static int aspeed_lpc_snoop_remove(struct platform_device *pdev) aspeed_lpc_disable_snoop(lpc_snoop, 0); aspeed_lpc_disable_snoop(lpc_snoop, 1); + clk_disable_unprepare(lpc_snoop->clk); + return 0; }