Received: by 2002:a05:6358:5282:b0:b5:90e7:25cb with SMTP id g2csp2955367rwa; Mon, 22 Aug 2022 17:47:54 -0700 (PDT) X-Google-Smtp-Source: AA6agR73AbAwpeYjY6YxZYXB6kquFOYXqQDo+AiGvmjRWELSbBkyZZnqrhykUtPv6tpgvae8GKeA X-Received: by 2002:a17:90a:cc01:b0:1fa:cfad:dfe0 with SMTP id b1-20020a17090acc0100b001facfaddfe0mr886724pju.244.1661215674716; Mon, 22 Aug 2022 17:47:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661215674; cv=none; d=google.com; s=arc-20160816; b=xK/xth4CNcNUSjLy6qDFZWMuDNwyX/YhOMOBRUHWuPdCnjeD7atR9I5Eyg8PfZLhIv Lq11eAKuclGjiXx0BVbumAF0DDGQp4e8v0cM4ROvYEV9BnlGd3wywip8DmFOWBL7IXw0 giFu/SZGFPD7iVhLAolh4iJXjBYVXUc5/ADcKus9+p3QTykC6vZL7wDy3nCtImM4D2da P/2l09zdKaONsGwcer6Aj13oMN8S4aWbZxTbprDnw7KI4oBouBEw/QZogwoydUHoQTlP fpAmIK2/GK0wvKW8jm+4I5/awDpDpbreMzHj8456fzrP0Ljgk31M99Q12HUsPFOpzSF7 cwog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=UUy7pFiuNHxxZ+gAKVDwyFup/IAsLQHlSSFpnTX7fgM=; b=TaDQfIOFanNigUwuTcj74hC4XHYhxOAeiiASLqou8Ah1A5SysvNO+6laN/NyExeHn7 ZyeD/kWtauhjcd4ZFI7G1q64vrkpQzRb6YsiZ8+ZQUkD1xFIYhbzzW+PqdrtIfcv7id5 kAy4ssRMJI7Y7vLVLesQaTx1sWXV0rPijJvcdwwGdbVCRwmiddDffIgwMhuupmAOgN1E qIk/1VawipQPW8BhA29bo0U0JiPGrrciwEwVQs0qZZn7wRQbXhxs9rHLToteDQ2lx4Qh N1aSqD91vrznjoYB8SQhx3WrrUANOwMPycd2zuP1YiLzlp+A8eIHRZCBYlrwQJABFQ7q RzyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@jms.id.au header.s=google header.b=fPUcRTa3; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bw11-20020a056a00408b00b00536542c9c23si8389751pfb.67.2022.08.22.17.47.43; Mon, 22 Aug 2022 17:47:54 -0700 (PDT) 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=@jms.id.au header.s=google header.b=fPUcRTa3; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239126AbiHWAar (ORCPT + 99 others); Mon, 22 Aug 2022 20:30:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234268AbiHWAap (ORCPT ); Mon, 22 Aug 2022 20:30:45 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6E074B483 for ; Mon, 22 Aug 2022 17:30:43 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id n23-20020a7bc5d7000000b003a62f19b453so5601386wmk.3 for ; Mon, 22 Aug 2022 17:30:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jms.id.au; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=UUy7pFiuNHxxZ+gAKVDwyFup/IAsLQHlSSFpnTX7fgM=; b=fPUcRTa30JuAaTDPsCNaPlBbMh4qBfIqEwARHGAmw260OXHFvZm5IlNlItlySOO9BC zlh3BfXL+8F2Tq+l9UUvf3iX3+YLOXG1fRbz5FjhjUHxIQIXQsuonv/ijkCAgj+iCL2a Hwq00HLFPLhDIuxCVUN4lddoVrotvJTzUcarw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=UUy7pFiuNHxxZ+gAKVDwyFup/IAsLQHlSSFpnTX7fgM=; b=scPxAo/6cwCprjRHrDdLETXbzPFCYbLG48hphk2lyqOun+s45mcWoplQ7Cko7AJ+0j kIU2RJLmc53Eqz2SxmqDdWWH12gOsQs04fQR/iHTU8Ajeq/GOmfzJECEfplyj4r/wRKN iAYz8rrc8RZp5SMwkuUhHmtVbxF95idnIGIOwqihVMkoHF4oFonvBDP6D6buSGihqXUb 6ZD82DSYyoZK/33Bqf5ROx4nuA0iTOg+0s1H4KaiZgQ5223S0a8u2GPi/48BRo7W45f3 Y2AGSgHMd5NxOWt+jPmJIy70I88OcPXXFfQH6GaUuw2xxbjBArR9coW7PwnaMfMQIgSs LYZw== X-Gm-Message-State: ACgBeo3+XmaE/28J1/l8Dyh4Tgjkhm4mX89VKE3kyH0tzIzhUwaNeQdp JdPon/KRV/hUD9aB0X8h81WyqfMAeE89jJuK7Gg= X-Received: by 2002:a05:600c:1990:b0:3a6:2a00:3ddb with SMTP id t16-20020a05600c199000b003a62a003ddbmr458666wmq.72.1661214642422; Mon, 22 Aug 2022 17:30:42 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Joel Stanley Date: Tue, 23 Aug 2022 00:30:30 +0000 Message-ID: Subject: Re: [PATCH 2/3] drivers/misc: (aspeed-lpc-snoop): Add regmap cleanup on a shutdown. To: Igor Kononenko Cc: Andrew Jeffery , openbmc@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE 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 On Sun, 21 Aug 2022 at 15:54, Igor Kononenko wrote: > > The bmc might be rebooted while the host is still reachable and the host > might send requests through configured lpc-kcs channels in same time. > That leads to raise lpc-snoop interrupts that haven't adjusted IRQ > handlers on next early kernel boot, because on the aspeed-chip reboot > might keep registers on a unclean state that is configured on the last > boot. > > The patch brings an way to masking lpc-snoop interrupts all through > a bmc-rebooting time. > > Tested on a YADRO VEGMAN N110 stand. > > Signed-off-by: Igor Kononenko > --- > drivers/soc/aspeed/aspeed-lpc-snoop.c | 44 +++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c > index eceeaf8dfbeb..6ec47bf1dc6b 100644 > --- a/drivers/soc/aspeed/aspeed-lpc-snoop.c > +++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c > @@ -235,6 +235,41 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop, > return rc; > } > > +static void aspeed_lpc_reset_regmap(struct aspeed_lpc_snoop *lpc_snoop) > +{ > + u8 index; > + struct lpc_regman_cleanup { > + u32 offset; > + u32 mask; > + u8 val; > + }; > + static struct lpc_regman_cleanup cleanup_list[] = { > + // Prevent handling ENINIT_SNPxW > + { .offset = HICR5, > + .mask = HICR5_EN_SNP0W | HICR5_ENINT_SNP0W, > + .val = 0 }, > + { .offset = HICR5, > + .mask = HICR5_EN_SNP1W | HICR5_ENINT_SNP1W, > + .val = 0 }, > + { .offset = HICRB, > + .mask = HICRB_ENSNP0D | HICRB_ENSNP1D, > + .val = 0 }, > + // Reset SNOOP channel IRQ status > + { .offset = HICR6, > + .mask = HICR6_STR_SNP0W | HICR6_STR_SNP1W, > + .val = 1 }, > + }; > + for (index = 0; index < ARRAY_SIZE(cleanup_list); index++) { Did you consider open coding the various updates instead of using a for loop? I don't think the for loop help us here. You could instead make these three updates: /* Prevent handling ENINIT_SNPxW */ regmap_clear_bits(lpc_snoop->regmap, HICR5, HICR5_EN_SNP0W | HICR5_ENINT_SNP0W | HICR5_EN_SNP1W | HICR5_ENINT_SNP1W); regmap_clear_bits(lpc_snoop->regmap, HICRB, HICRB_ENSNP0D | HICRB_ENSNP1D); /* Reset SNOOP channel IRQ status */ regmap_set_bits(lpc_snoop->regmap, HICR6, HICR6_STR_SNP0W | HICR6_STR_SNP1W); > + u32 val = 0; > + > + if (cleanup_list[index].val) > + val = cleanup_list[index].mask; > + regmap_update_bits(lpc_snoop->regmap, > + cleanup_list[index].offset, > + cleanup_list[index].mask, val); > + } > +} > + > static void aspeed_lpc_disable_snoop(struct aspeed_lpc_snoop *lpc_snoop, > int channel) > { > @@ -285,6 +320,7 @@ static int aspeed_lpc_snoop_probe(struct platform_device *pdev) > return -ENODEV; > } > > + aspeed_lpc_reset_regmap(lpc_snoop); > dev_set_drvdata(&pdev->dev, lpc_snoop); > > rc = of_property_read_u32_index(dev->of_node, "snoop-ports", 0, &port); > @@ -345,6 +381,13 @@ static int aspeed_lpc_snoop_remove(struct platform_device *pdev) > return 0; > } > > +static void aspeed_lpc_snoop_shutdown(struct platform_device *pdev) > +{ > + struct aspeed_lpc_snoop *lpc_snoop = dev_get_drvdata(&pdev->dev); > + > + aspeed_lpc_reset_regmap(lpc_snoop); > +} > + > static const struct aspeed_lpc_snoop_model_data ast2400_model_data = { > .has_hicrb_ensnp = 0, > }; > @@ -370,6 +413,7 @@ static struct platform_driver aspeed_lpc_snoop_driver = { > }, > .probe = aspeed_lpc_snoop_probe, > .remove = aspeed_lpc_snoop_remove, > + .shutdown = aspeed_lpc_snoop_shutdown, > }; > > module_platform_driver(aspeed_lpc_snoop_driver); > -- > 2.25.1 >