Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2381176pxa; Mon, 17 Aug 2020 08:15:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyuDkjWd71K4sP8yWlzQODt9wTO4kvuloaqUccIEuT/7kI4hzYpdhKj67H4aBGP2zTx41oh X-Received: by 2002:a50:ee92:: with SMTP id f18mr15435041edr.80.1597677334107; Mon, 17 Aug 2020 08:15:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597677334; cv=none; d=google.com; s=arc-20160816; b=Q2Mr7RL0qDgQZRgDVi7FWi3eNL2pYC912Ax6uv4GF9PULbjBzZ8rPcyXrRXxXIX7ZA ZnjOX/QafJkesZ1wBiAf++hw+QhoJDjrN1sv5aCJTC0h5KUCx/CA/DrygNeGojheufKe /BJx29mp8nrV+kk/n5aE4yBma0oLKX8bezGAU4yc0E6QjTTYMG2XE+JvaZaWGZj0X88b S5eDJdfxG3csVnuQ7l+bpNoQjtIMzr4ggnPtl7PtC9XN6BXeMe5PN2CmFDP9oew7cNYs PaCrl03IoGniBd54RPop+pC8/19v1RDKb18x+/lUwpwkaQS6HxKyNv+g716xlD2ET487 kcIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=QSoQkWBYdIid0LOIhzNBLuUvfF+J/jn+MG3TnZhdtZQ=; b=03YtbGAivCcOniXztgXWFvh5I8yLrlYw08htoTJ7jF2MRQ2R6VxKE7Ae935vV7aYVO r3W9mQYzhblTPRAvnhgTWRoY0Z+4rNyRugKjENasKiWlDI9iBqDCI/qpqMBPXgs0Rhlo JVPhShpNtA1TRFxE8ETgr8I0ljZcjvBBHDcfOlShb6D/4MsQ05ys833vjaJ/Nqi67SOY hsXi00rMcyNqcEQYu5/ItKALyHf9vncBFaOMgNm0iccGzrPqsk63wugZBBq1QkTc365Q q7BLZC2yBBXWTGVXQkAagXhLbLvn/Vw9qFWWLUzZJ4z+GzgjzNTOQ9+Z/0ma5u94Z+LI RhdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Sj4XnJIE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y25si11840699eje.178.2020.08.17.08.15.10; Mon, 17 Aug 2020 08:15:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Sj4XnJIE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729107AbgHQPON (ORCPT + 99 others); Mon, 17 Aug 2020 11:14:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:37804 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726630AbgHQPOL (ORCPT ); Mon, 17 Aug 2020 11:14:11 -0400 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1274A206FA; Mon, 17 Aug 2020 15:14:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1597677250; bh=hqEMfNYoKv2H/A9NzWzm3pq6Ot1n4/y/J+WGuaOxqMY=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=Sj4XnJIEDsVqpYNelJN42gpLdtuvPyZFo+ro80ps5X1fNlN/EEWNnpxGm92khy4Lx maruxkU2rTx7p++FLm8BfGzV8SdWIqHqPg3QRh0+IMhm1z9xBygMGnywg8GxrBQgC+ JPiQrofIkFExUoSg+dk7StvMEvdHJ0n3Dwi/NZ7o= Received: by mail-ej1-f50.google.com with SMTP id bo3so18126248ejb.11; Mon, 17 Aug 2020 08:14:09 -0700 (PDT) X-Gm-Message-State: AOAM533ZI6LdQ9NKY2jaUFUXDNSxeIBTsKW3Yg3X9XmVr+/85tyjyjE3 s2Pl7OuRXbVSQgw7QN1zPg9kZf03zXDD1/k91g== X-Received: by 2002:a17:906:2356:: with SMTP id m22mr15233703eja.124.1597677248601; Mon, 17 Aug 2020 08:14:08 -0700 (PDT) MIME-Version: 1.0 References: <1597289564-17030-1-git-send-email-neal.liu@mediatek.com> <1597289564-17030-3-git-send-email-neal.liu@mediatek.com> <1597636953.3394.7.camel@mtkswgap22> In-Reply-To: <1597636953.3394.7.camel@mtkswgap22> From: Chun-Kuang Hu Date: Mon, 17 Aug 2020 23:13:56 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v6 2/2] soc: mediatek: add mt6779 devapc driver To: Neal Liu Cc: Chun-Kuang Hu , Rob Herring , Matthias Brugger , devicetree@vger.kernel.org, wsd_upstream , lkml , "moderated list:ARM/Mediatek SoC support" , Linux ARM Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Neal: Neal Liu =E6=96=BC 2020=E5=B9=B48=E6=9C=8817=E6=97= =A5 =E9=80=B1=E4=B8=80 =E4=B8=8B=E5=8D=8812:02=E5=AF=AB=E9=81=93=EF=BC=9A > > Hi Chun-Kuang, > > On Sat, 2020-08-15 at 11:03 +0800, Chun-Kuang Hu wrote: > > Hi, Neal: > > > > Neal Liu =E6=96=BC 2020=E5=B9=B48=E6=9C=8813=E6= =97=A5 =E9=80=B1=E5=9B=9B =E4=B8=8A=E5=8D=8811:33=E5=AF=AB=E9=81=93=EF=BC= =9A > > > > > > MediaTek bus fabric provides TrustZone security support and data > > > protection to prevent slaves from being accessed by unexpected > > > masters. > > > The security violation is logged and sent to the processor for > > > further analysis or countermeasures. > > > > > > Any occurrence of security violation would raise an interrupt, and > > > it will be handled by mtk-devapc driver. The violation > > > information is printed in order to find the murderer. > > > > > > Signed-off-by: Neal Liu > > > --- > > > > [snip] > > > > > +/* > > > + * devapc_violation_irq - the devapc Interrupt Service Routine (ISR)= will dump > > > + * violation information including which mast= er violates > > > + * access slave. > > > + */ > > > +static irqreturn_t devapc_violation_irq(int irq_number, > > > + struct mtk_devapc_context *ct= x) > > > +{ > > > + /* > > > + * Mask slave's irq before clearing vio status. > > > + * Must do it to avoid nested interrupt and prevent > > > + * unexpected behavior. > > > + */ > > > + mask_module_irq(ctx, true); > > > > I still don't understand why nested interrupt happen. If two CPU > > process different devapc interrupt at the same time, mask interrupt > > could not prevent these two CPU to sync vio dbg at the same time. As I > > know, in ARM CPU, only CPU0 process irq handler, and all devapc > > interrupt has the same priority, so why nested interrupt happen? Could > > you explain more detail about how nested interrupt happen? > > If there is another violation happened before previous violation is > fully handled, nested interrupt would happen. > > Let's me take an example: > vio A happen > enter A ISR > ... vio B happen > finish A ISR enter B ISR > ... > finish B ISR > > We mask all module's irq to avoid nested interrupt. This is not 'nested' interrupt. After A ISR is finished, B ISR happen. So A ISR and B ISR are consecutive interrupt, not nested interrupt. To compare mask irq and no mask irq, Let's consider this situation: 1. 1000 consecutive violation happen, the time period between two violation is 0.01 ms, so the total time is 10ms. (In 10ms, 1000 violation happen) 2. One ISR handle time is 1 ms, so in one ISR handler, 100 violation happen= . For mask irq solution, 10 ISR handler is trigger. For no mask irq solution, 11 ISR handler is trigger. I think these two solution have similar result, and no mask irq solution print more information (If these 1000 violation is trigger by 20 different driver, no mask solution may show one more driver than mask solution) So I think it's not necessary to mask irq in irq handler. > > > > > > + > > > + while (devapc_sync_vio_dbg(ctx)) > > > + devapc_extract_vio_dbg(ctx); > > > + > > > + /* > > > + * Ensure that violation info are written > > > + * before further operations > > > + */ > > > + smp_mb(); > > > + > > > + clear_vio_status(ctx); > > > + mask_module_irq(ctx, false); > > > + > > > + return IRQ_HANDLED; > > > +} > > > + > > > > [snip] > > > > > + > > > +static int mtk_devapc_remove(struct platform_device *pdev) > > > +{ > > > + struct mtk_devapc_context *ctx =3D platform_get_drvdata(pdev)= ; > > > + > > > + stop_devapc(ctx); > > > + > > > + if (ctx->infra_clk) > > > > This always true. > > Does it mean that remove function would be called only if probe function > is returned successfully? Yes. > Is there any chance this function would be called directly? No. Regards, Chun-Kuang. > > > > > Regards, > > Chun-Kuang. > > > > > + clk_disable_unprepare(ctx->infra_clk); > > > + > > > + return 0; > > > +} > > > + > > > +static struct platform_driver mtk_devapc_driver =3D { > > > + .probe =3D mtk_devapc_probe, > > > + .remove =3D mtk_devapc_remove, > > > + .driver =3D { > > > + .name =3D KBUILD_MODNAME, > > > + .of_match_table =3D mtk_devapc_dt_match, > > > + }, > > > +}; > > > + > > > +module_platform_driver(mtk_devapc_driver); > > > + > > > +MODULE_DESCRIPTION("Mediatek Device APC Driver"); > > > +MODULE_AUTHOR("Neal Liu "); > > > +MODULE_LICENSE("GPL"); > > > -- > > > 1.7.9.5 > > > _______________________________________________ > > > Linux-mediatek mailing list > > > Linux-mediatek@lists.infradead.org > > > http://lists.infradead.org/mailman/listinfo/linux-mediatek >