From mboxrd@z Thu Jan 1 00:00:00 1970 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=-13.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 67F89C433DF for ; Wed, 14 Oct 2020 11:46:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E415B20878 for ; Wed, 14 Oct 2020 11:46:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="AZnz3a2W" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388300AbgJNLqa (ORCPT ); Wed, 14 Oct 2020 07:46:30 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:54770 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388297AbgJNLqX (ORCPT ); Wed, 14 Oct 2020 07:46:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602675981; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uEDK7/7RMO6nFppF5Zz6mCQ8vlISpjjomzueu9EoT78=; b=AZnz3a2W/wqE73nDwSdf/muP9LSL3WCazc4XAq1JHDhHGg9onYApbqvD+93ct6EZk03kQC VcaC0pNN8X4iGlcuX74i5u0XQQ0xhSoiUyvy9ZlMVBQ7/tEcljuNyAokWqVwt3V3c0EEax LTahUOXny6YJmxAJJM3JZQxa9KvtPWo= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-536-fcfnoE67MzG8SYg4fG3pgA-1; Wed, 14 Oct 2020 07:46:18 -0400 X-MC-Unique: fcfnoE67MzG8SYg4fG3pgA-1 Received: by mail-ed1-f72.google.com with SMTP id dn20so1081750edb.14 for ; Wed, 14 Oct 2020 04:46:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=uEDK7/7RMO6nFppF5Zz6mCQ8vlISpjjomzueu9EoT78=; b=IOSUHClX2o3oWtE1DPsUdvnJ1RjZ/YwE5XLe1HKEGEhlG1rpjccgCyiXmgZ9WiUBAL ATwNpHDht70joNb16SH+KU8O641Vldna+4S4mKMF3CtuLiPVvY1qfcVcZtHzrkkoNydz fWXK2DbojyvhKoAwIKMpMbYE73tKbC3Ph4v5R9smmLKMEepCVoVPQQTDThJkONVapXbr CHZS1t0fD+KKjCYAfpcBMVR3PdCaMQMmH4k0Pob2pfM0VC0z/oLKoxPg9Ib1h8vEymkm q66xiSmzTCpIWa6v5qPSbzS7s3kr1xVQo+tOcjQ8qDe/sbmumukmu/uPHIkYAkf8Ixs0 6Rwg== X-Gm-Message-State: AOAM531GEOZQK7d9luyE8CyNYcDOyMu4puAatms3pqchNEUuhVI3LfQA AWCAiCx4uqxHiBGzm4vfBmYpsWqlqPeJ94J6p4FpqpSg6ryTqEh8Z0sjbNvX/sEui3jMJzw0oR4 s/Lm7aIgiZmEmG+CT7w7QDQ== X-Received: by 2002:a17:906:c444:: with SMTP id ck4mr4604006ejb.398.1602675976610; Wed, 14 Oct 2020 04:46:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxm3Aaxa+GfGQMwzAwaBECIMhx9C5qLcxcYWdqgmFt6Q09cieVZKb6cyF5Mqzh+wSABOll9yw== X-Received: by 2002:a17:906:c444:: with SMTP id ck4mr4603978ejb.398.1602675976266; Wed, 14 Oct 2020 04:46:16 -0700 (PDT) Received: from x1.localdomain (2001-1c00-0c0c-fe00-d2ea-f29d-118b-24dc.cable.dynamic.v6.ziggo.nl. [2001:1c00:c0c:fe00:d2ea:f29d:118b:24dc]) by smtp.gmail.com with ESMTPSA id dm3sm1515705ejc.75.2020.10.14.04.46.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Oct 2020 04:46:15 -0700 (PDT) Subject: Re: Any other ways to debug GPIO interrupt controller (pinctrl-amd) for broken touchpads of a new laptop model? To: Coiby Xu Cc: Linus Walleij , "open list:GPIO SUBSYSTEM" , wang jun , Nehal Shah , Shyam Sundar S K , linux-kernel-mentees@lists.linuxfoundation.org References: <20201002224502.vn3ooodrxrblwauu@Rk> <34cecd8e-ffa7-c2bc-8ce3-575db47ff455@redhat.com> <20201003230340.42mtl35n4ka4d5qw@Rk> <20201004051644.f3fg2oavbobrwhf6@Rk> <20201006044941.fdjsp346kc5thyzy@Rk> <20201006083157.3pg6zvju5buxspns@Rk> <69853d2b-239c-79d5-bf6f-7dc0eec65602@redhat.com> <4f02cbdf-e1dd-b138-4975-118dd4f86089@redhat.com> <20201014042420.fkkyabmrkiekpmfw@Rk> From: Hans de Goede Message-ID: Date: Wed, 14 Oct 2020 13:46:14 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201014042420.fkkyabmrkiekpmfw@Rk> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Hi, On 10/14/20 6:24 AM, Coiby Xu wrote: > On Tue, Oct 06, 2020 at 11:29:40AM +0200, Hans de Goede wrote: >> >> >> On 10/6/20 11:28 AM, Hans de Goede wrote: >>> Hi, >>> >>> On 10/6/20 10:55 AM, Hans de Goede wrote: >>>> Hi, >>>> >>>> On 10/6/20 10:31 AM, Coiby Xu wrote: >>>>> On Tue, Oct 06, 2020 at 08:28:40AM +0200, Hans de Goede wrote: >>>>>> Hi, >>>>>> >>>>>> On 10/6/20 6:49 AM, Coiby Xu wrote: >>>>>>> Hi Hans and Linus, >>>>>>> >>>>>>> I've found the direct evidence proving the GPIO interrupt controller is >>>>>>> malfunctioning. >>>>>>> >>>>>>> I've found a way to let the GPIO chip trigger an interrupt by accident >>>>>>> when playing with the GPIO sysfs interface, >>>>>>> >>>>>>>  - export pin130 which is used by the touchad >>>>>>>  - set the direction to be "out" >>>>>>>  - `echo 0 > value` will trigger the GPIO controller's parent irq and >>>>>>>    "echo 1 > value" will make it stop firing >>>>>>> >>>>>>> (I'm not sure if this is yet another bug of the GPIO chip. Anyway I can >>>>>>> manually trigger an interrupt now.) >>>>>>> >>>>>>> I wrote a C program is to let GPIO controller quickly generate some >>>>>>> interrupts then disable the firing of interrupts by toggling pin#130's >>>>>>> value with an specified time interval, i.e., set the value to 0 first >>>>>>> and then after some time, re-set the value to 1. There is no interrupt >>>>>>> firing unless time internal > 120ms (~7Hz). This explains why we can >>>>>>> only see 7 interrupts for the GPIO controller's parent irq. >>>>>> >>>>>> That is a great find, well done. >>>>>> >>>>>>> My hypothesis is the GPIO doesn't have proper power setting so it stays >>>>>>> in an idle state or its clock frequency is too low by default thus not >>>>>>> quick enough to read interrupt input. Then pinctrl-amd must miss some >>>>>>> code to configure the chip and I need a hardware reference manual of this >>>>>>> GPIO chip (HID: AMDI0030) or reverse-engineer the driver for Windows >>>>>>> since I couldn't find a copy of reference manual online? What would you >>>>>>> suggest? >>>>>> >>>>>> This sounds like it might have something to do with the glitch filter. >>>>>> The code in pinctrl-amd.c to setup the trigger-type also configures >>>>>> the glitch filter, you could try changing that code to disable the >>>>>> glitch-filter. The defines for setting the glitch-filter bits to >>>>>> disabled are already there. >>>>>> >>>>> >>>>> Disabling the glitch filter works like a charm! Other enthusiastic >>>>> Linux users who have been troubled by this issue for months would >>>>> also feel great to know this small tweaking could bring their >>>>> touchpad back to life:) Thank you! >>>> >>>> That is good to hear, I'm glad that we have finally found a solution. >>>> >>>>> $ git diff >>>>> diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c >>>>> index 9a760f5cd7ed..e786d779d6c8 100644 >>>>> --- a/drivers/pinctrl/pinctrl-amd.c >>>>> +++ b/drivers/pinctrl/pinctrl-amd.c >>>>> @@ -463,7 +463,7 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) >>>>>                  pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); >>>>>                  pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF; >>>>>                  pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF); >>>>> -               pin_reg |= DB_TYPE_PRESERVE_HIGH_GLITCH << DB_CNTRL_OFF; >>>>> +               /** pin_reg |= DB_TYPE_PRESERVE_HIGH_GLITCH << DB_CNTRL_OFF; */ >>>>>                  irq_set_handler_locked(d, handle_level_irq); >>>>>                  break; >>>>> >>>>> I will learn more about the glitch filter and the implementation of >>>>> pinctrl and see if I can disable glitch filter only for this touchpad. >>>> >>>> The glitch filter likely also has settings for how long a glitch >>>> lasts, which apparently goes all the way up to 120ms. If it would >>>> only delay reporting by say 0.1ms and consider any pulse longer >>>> then 0.1s not a glitch, then having it enabled would be fine. >>>> >>>> I don't think we want some sort of quirk here to only disable the >>>> glitch filter for some touchpads. One approach might be to simply >>>> disable it completely for level type irqs. >>>> >>>> What we really need here is some input from AMD engineers with how >>>> this is all supposed to work. >>>> >>>> E.g. maybe the glitch-filter is setup by the BIOS and we should not >>>> touch it all ? >>>> >>>> Or maybe instead of DB_TYPE_PRESERVE_HIGH_GLITCH low level interrupts >>>> should use DB_TYPE_PRESERVE_LOW_GLITCH ?   Some docs for the hw >>>> would really help here ... >>> >>> So I've been digging through the history of the pinctrl-amd.c driver >>> and once upon a time it used to set a default debounce time of >>> 2.75 ms. >>> >>> See the patch generated by doing: >>> >>> git format-patch 8cf4345575a416e6856a6856ac6eaa31ad883126~..8cf4345575a416e6856a6856ac6eaa31ad883126 >>> >>> In a linux kernel checkout. >>> >>> So it would be interesting to add a debugging printk to see >>> what the value of pin_reg & DB_TMR_OUT_MASK is for the troublesome >>> GPIO. >>> >>> I guess that it might be all 1s (0xfffffffff) or some such which >>> might be a way to check that we should disable the glitch-filter >>> for this pin? >> >> p.s. >> >> Or maybe we should simply stop touching all the glitch-filter >> related bits, in the same way as that old commit has already >> removed the code setting the timing of the filter ? >> >> At least is seems that forcing the filter to be on without >> sanitizing the de-bounce time is not a good idea. >> > Today I find an inconsistency in drivers/pinctrl/pinctrl-amd.c > so there must be a bug. As far as I can understand pinctrl-amd, > "pin_reg & ~DB_CNTRl_MASK" is used to mask out the debouncing > feature, > > static int amd_gpio_set_debounce(struct gpio_chip *gc, unsigned offset, >         unsigned debounce) > { >     ... >     if (debounce) { >         ... >         if (debounce < 61) { >             pin_reg |= 1; >             pin_reg &= ~BIT(DB_TMR_OUT_UNIT_OFF); >             pin_reg &= ~BIT(DB_TMR_LARGE_OFF); >         ... >         } else if (debounce < 1000000) { >             time = debounce / 62500; >             pin_reg |= time & DB_TMR_OUT_MASK; >             pin_reg |= BIT(DB_TMR_OUT_UNIT_OFF); >             pin_reg |= BIT(DB_TMR_LARGE_OFF); >         } else { >             pin_reg &= ~DB_CNTRl_MASK; >             ret = -EINVAL; >         } > >     } else { >         ... >         pin_reg &= ~DB_CNTRl_MASK; >     } >     ... > } > > However in amd_gpio_irq_set_type, "ping_reg & ~(DB_CNTRl_MASK << DB_CNTRL_OFF)" > is used, > > static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) > { > >     ... >     case IRQ_TYPE_LEVEL_LOW: >         pin_reg |= LEVEL_TRIGGER << LEVEL_TRIG_OFF; >         pin_reg &= ~(ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF); >         pin_reg |= ACTIVE_LOW << ACTIVE_LEVEL_OFF; >         pin_reg &= ~(DB_CNTRl_MASK << DB_CNTRL_OFF); >         pin_reg |= DB_TYPE_PRESERVE_HIGH_GLITCH << DB_CNTRL_OFF; >         irq_set_handler_locked(d, handle_level_irq); >         break; >     ... > } > > If "pin_reg & ~DB_CNTRl_MASK" is used instead, the touchpad will work > flawlessly. So I believe "pin_reg & ~DB_CNTRl_MASK" is the correct way > to mask out the debouncing filter and the bug lies in amd_gpio_set_type. I'm afraid that that is not the case, the current code is correct, it clears bit 5 and 6 of the register which are the bits which control the debounce type. You mentioned in an earlier mail that the value of the register is 0x500e8 before this function runs. If you drop the "<< DB_CNTRL_OFF" part then instead you are masking out bits 0 and 1 which are already 0, so the mask becomes a no-op. > Btw, can you explain what's the difference between glitch filter and > debouncing filter? There is no difference the driver mixes the terms, but they both refer to the same thing this is most clear in the defines for the DB_CNTRL bits (bits 5 and 6 of the register): #define DB_TYPE_NO_DEBOUNCE 0x0UL #define DB_TYPE_PRESERVE_LOW_GLITCH 0x1UL #define DB_TYPE_PRESERVE_HIGH_GLITCH 0x2UL #define DB_TYPE_REMOVE_GLITCH 0x3UL Which is interesting because bits 5 and 6 are both 1 as set by the BIOS, so with your little hack to dro the "<< DB_CNTRL_OFF" you are in essence keeping bits 5 and 6 as DB_TYPE_REMOVE_GLITCH. So it seems that the problem is that the irq_set_type code changes the glitch filter type from DB_TYPE_REMOVE_GLITCH (filter out all glitches) to DB_TYPE_PRESERVE_HIGH_GLITCH, which apperently breaks things. To test this you could replace the: DB_TYPE_PRESERVE_HIGH_GLITCH bit in the case IRQ_TYPE_LEVEL_LOW path with: DB_TYPE_REMOVE_GLITCH Which I would expect to also fix your touchpad. If that is the case an interesting experiment would be to replace DB_TYPE_PRESERVE_HIGH_GLITCH with DB_TYPE_PRESERVE_LOW_GLITCH instead. I've never seen this kinda glitch/debounce filter where you can filter out only one type of level before, so I wonder if the code maybe simply got it wrong, also for a level type irq I really see no objection to just use DB_TYPE_REMOVE_GLITCH instead of the weird "half" filters. So I just ran a git blame and the DB_TYPE_PRESERVE_HIGH_GLITCH has been there from the very first commit of this driver, I wonder if it has been wrong all this time and should be inverted (so DB_TYPE_PRESERVE_LOW_GLITCH instead). I think we may want to just play it safe though and simply switch to DB_TYPE_REMOVE_GLITCH as we already do for all edge types and when amd_gpio_set_config() gets called! Linus, what do you think about just switching to DB_TYPE_REMOVE_GLITCH for level type irqs (unifying them with all the other modes) and not mucking with this weird, undocumented "half" filter modes ? > Or can you point to some references? I've gain some > experience about how to configure the GPIO controller by studying the > code of pinctrl-amd and pinctrl-baytrail (I can't find the hardware > reference manual for baytrail either). I also tweaked the configuration > in pinctrl-amd, for example, setting the debounce timeout to 976 usec > and 3.9 msec without disabling the glitch filter could also save the > touchpad. But I need some knowledge to understand why this touchpad [1] > which also uses the buggy pinctrl-amd isn't affected. > > [1] https://github.com/Syniurge/i2c-amd-mp2/issues/11#issuecomment-707427095 My guess would be that it uses edge types interrupts instead ? I have seen that quite a few times, even though it is weird to do that for i2c devices. Regards, Hans From mboxrd@z Thu Jan 1 00:00:00 1970 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=-13.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham 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 3E23DC433DF for ; Wed, 14 Oct 2020 11:46:28 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 AAF2F20BED for ; Wed, 14 Oct 2020 11:46:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="AZnz3a2W" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AAF2F20BED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-kernel-mentees-bounces@lists.linuxfoundation.org Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 0FA4487FE4; Wed, 14 Oct 2020 11:46:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T1ED5n5DmbgH; Wed, 14 Oct 2020 11:46:25 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id D587287FCC; Wed, 14 Oct 2020 11:46:25 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id C7BEFC07FF; Wed, 14 Oct 2020 11:46:25 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 965E4C0051 for ; Wed, 14 Oct 2020 11:46:24 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 832088767C for ; Wed, 14 Oct 2020 11:46:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W7NigxpJn9ut for ; Wed, 14 Oct 2020 11:46:23 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by hemlock.osuosl.org (Postfix) with ESMTPS id C7E8B87674 for ; Wed, 14 Oct 2020 11:46:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602675981; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uEDK7/7RMO6nFppF5Zz6mCQ8vlISpjjomzueu9EoT78=; b=AZnz3a2W/wqE73nDwSdf/muP9LSL3WCazc4XAq1JHDhHGg9onYApbqvD+93ct6EZk03kQC VcaC0pNN8X4iGlcuX74i5u0XQQ0xhSoiUyvy9ZlMVBQ7/tEcljuNyAokWqVwt3V3c0EEax LTahUOXny6YJmxAJJM3JZQxa9KvtPWo= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-540-GsVlnF--Mi-9dVoR0mxYbA-1; Wed, 14 Oct 2020 07:46:19 -0400 X-MC-Unique: GsVlnF--Mi-9dVoR0mxYbA-1 Received: by mail-ej1-f69.google.com with SMTP id i21so1082827ejb.5 for ; Wed, 14 Oct 2020 04:46:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=uEDK7/7RMO6nFppF5Zz6mCQ8vlISpjjomzueu9EoT78=; b=ahmczcE7gviutG+tMUzcPtA19NMlmq+KHhZveJH0AgjcWlzWE+YpTaHptEsL40YzA6 mebdB2EdgSrqnVL5jk9Pc3PQlvmLx2Ej+0y5VKt3T/RrDpG5kuH2JxAiAnfLWpJxm/5F 5WjkHi529LlX3IJ67p+cMgR4JSUeup8o5hYbanLyu9QUneaJhfFh+0gJdNx5KzDGHyua 6U1i9V6GM5D4A1ZObchzwncAyJgm8yc/53P0NuyFZDvXN8AutOi0IizaiYpNfoYVNmhi +Dd8Oq5WfYtiu/FoCP5Kl8s2xD1qqu5mUr6Yz0Efrj8HIJuedr8P57BPLVKdT//dlBhV XEmg== X-Gm-Message-State: AOAM532sgO5FZGPE89TKSOQ/u20wRbXrRwlo6NYqNIOQg2MI9oCV05ah PBS8ov88X6d9VLbFcdpNDwcppp2UdIUTLNMzlfEacqRbHgkXHr4bgYujStAEGEXLKjOdzlju65c nrXmk/pNHs5JsOPGZE/UJdGARfFMIqwBN+Cn/gE1f0+pvgm+Z X-Received: by 2002:a17:906:c444:: with SMTP id ck4mr4604007ejb.398.1602675976610; Wed, 14 Oct 2020 04:46:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxm3Aaxa+GfGQMwzAwaBECIMhx9C5qLcxcYWdqgmFt6Q09cieVZKb6cyF5Mqzh+wSABOll9yw== X-Received: by 2002:a17:906:c444:: with SMTP id ck4mr4603978ejb.398.1602675976266; Wed, 14 Oct 2020 04:46:16 -0700 (PDT) Received: from x1.localdomain (2001-1c00-0c0c-fe00-d2ea-f29d-118b-24dc.cable.dynamic.v6.ziggo.nl. [2001:1c00:c0c:fe00:d2ea:f29d:118b:24dc]) by smtp.gmail.com with ESMTPSA id dm3sm1515705ejc.75.2020.10.14.04.46.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Oct 2020 04:46:15 -0700 (PDT) To: Coiby Xu References: <20201002224502.vn3ooodrxrblwauu@Rk> <34cecd8e-ffa7-c2bc-8ce3-575db47ff455@redhat.com> <20201003230340.42mtl35n4ka4d5qw@Rk> <20201004051644.f3fg2oavbobrwhf6@Rk> <20201006044941.fdjsp346kc5thyzy@Rk> <20201006083157.3pg6zvju5buxspns@Rk> <69853d2b-239c-79d5-bf6f-7dc0eec65602@redhat.com> <4f02cbdf-e1dd-b138-4975-118dd4f86089@redhat.com> <20201014042420.fkkyabmrkiekpmfw@Rk> From: Hans de Goede Message-ID: Date: Wed, 14 Oct 2020 13:46:14 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201014042420.fkkyabmrkiekpmfw@Rk> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=hdegoede@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: Shyam Sundar S K , Linus Walleij , wang jun , "open list:GPIO SUBSYSTEM" , linux-kernel-mentees@lists.linuxfoundation.org, Nehal Shah Subject: Re: [Linux-kernel-mentees] Any other ways to debug GPIO interrupt controller (pinctrl-amd) for broken touchpads of a new laptop model? X-BeenThere: linux-kernel-mentees@lists.linuxfoundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-kernel-mentees-bounces@lists.linuxfoundation.org Sender: "Linux-kernel-mentees" SGksCgpPbiAxMC8xNC8yMCA2OjI0IEFNLCBDb2lieSBYdSB3cm90ZToKPiBPbiBUdWUsIE9jdCAw NiwgMjAyMCBhdCAxMToyOTo0MEFNICswMjAwLCBIYW5zIGRlIEdvZWRlIHdyb3RlOgo+Pgo+Pgo+ PiBPbiAxMC82LzIwIDExOjI4IEFNLCBIYW5zIGRlIEdvZWRlIHdyb3RlOgo+Pj4gSGksCj4+Pgo+ Pj4gT24gMTAvNi8yMCAxMDo1NSBBTSwgSGFucyBkZSBHb2VkZSB3cm90ZToKPj4+PiBIaSwKPj4+ Pgo+Pj4+IE9uIDEwLzYvMjAgMTA6MzEgQU0sIENvaWJ5IFh1IHdyb3RlOgo+Pj4+PiBPbiBUdWUs IE9jdCAwNiwgMjAyMCBhdCAwODoyODo0MEFNICswMjAwLCBIYW5zIGRlIEdvZWRlIHdyb3RlOgo+ Pj4+Pj4gSGksCj4+Pj4+Pgo+Pj4+Pj4gT24gMTAvNi8yMCA2OjQ5IEFNLCBDb2lieSBYdSB3cm90 ZToKPj4+Pj4+PiBIaSBIYW5zIGFuZCBMaW51cywKPj4+Pj4+Pgo+Pj4+Pj4+IEkndmUgZm91bmQg dGhlIGRpcmVjdCBldmlkZW5jZSBwcm92aW5nIHRoZSBHUElPIGludGVycnVwdCBjb250cm9sbGVy IGlzCj4+Pj4+Pj4gbWFsZnVuY3Rpb25pbmcuCj4+Pj4+Pj4KPj4+Pj4+PiBJJ3ZlIGZvdW5kIGEg d2F5IHRvIGxldCB0aGUgR1BJTyBjaGlwIHRyaWdnZXIgYW4gaW50ZXJydXB0IGJ5IGFjY2lkZW50 Cj4+Pj4+Pj4gd2hlbiBwbGF5aW5nIHdpdGggdGhlIEdQSU8gc3lzZnMgaW50ZXJmYWNlLAo+Pj4+ Pj4+Cj4+Pj4+Pj4gw4PigJrDgsKgLSBleHBvcnQgcGluMTMwIHdoaWNoIGlzIHVzZWQgYnkgdGhl IHRvdWNoYWQKPj4+Pj4+PiDDg+KAmsOCwqAtIHNldCB0aGUgZGlyZWN0aW9uIHRvIGJlICJvdXQi Cj4+Pj4+Pj4gw4PigJrDgsKgLSBgZWNobyAwID4gdmFsdWVgIHdpbGwgdHJpZ2dlciB0aGUgR1BJ TyBjb250cm9sbGVyJ3MgcGFyZW50IGlycSBhbmQKPj4+Pj4+PiDDg+KAmsOCwqDDg+KAmsOCwqAg ImVjaG8gMSA+IHZhbHVlIiB3aWxsIG1ha2UgaXQgc3RvcCBmaXJpbmcKPj4+Pj4+Pgo+Pj4+Pj4+ IChJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyB5ZXQgYW5vdGhlciBidWcgb2YgdGhlIEdQSU8gY2hp cC4gQW55d2F5IEkgY2FuCj4+Pj4+Pj4gbWFudWFsbHkgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgbm93 LikKPj4+Pj4+Pgo+Pj4+Pj4+IEkgd3JvdGUgYSBDIHByb2dyYW0gaXMgdG8gbGV0IEdQSU8gY29u dHJvbGxlciBxdWlja2x5IGdlbmVyYXRlIHNvbWUKPj4+Pj4+PiBpbnRlcnJ1cHRzIHRoZW4gZGlz YWJsZSB0aGUgZmlyaW5nIG9mIGludGVycnVwdHMgYnkgdG9nZ2xpbmcgcGluIzEzMCdzCj4+Pj4+ Pj4gdmFsdWUgd2l0aCBhbiBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbCwgaS5lLiwgc2V0IHRoZSB2 YWx1ZSB0byAwIGZpcnN0Cj4+Pj4+Pj4gYW5kIHRoZW4gYWZ0ZXIgc29tZSB0aW1lLCByZS1zZXQg dGhlIHZhbHVlIHRvIDEuIFRoZXJlIGlzIG5vIGludGVycnVwdAo+Pj4+Pj4+IGZpcmluZyB1bmxl c3MgdGltZSBpbnRlcm5hbCA+IDEyMG1zICh+N0h6KS4gVGhpcyBleHBsYWlucyB3aHkgd2UgY2Fu Cj4+Pj4+Pj4gb25seSBzZWUgNyBpbnRlcnJ1cHRzIGZvciB0aGUgR1BJTyBjb250cm9sbGVyJ3Mg cGFyZW50IGlycS4KPj4+Pj4+Cj4+Pj4+PiBUaGF0IGlzIGEgZ3JlYXQgZmluZCwgd2VsbCBkb25l Lgo+Pj4+Pj4KPj4+Pj4+PiBNeSBoeXBvdGhlc2lzIGlzIHRoZSBHUElPIGRvZXNuJ3QgaGF2ZSBw cm9wZXIgcG93ZXIgc2V0dGluZyBzbyBpdCBzdGF5cwo+Pj4+Pj4+IGluIGFuIGlkbGUgc3RhdGUg b3IgaXRzIGNsb2NrIGZyZXF1ZW5jeSBpcyB0b28gbG93IGJ5IGRlZmF1bHQgdGh1cyBub3QKPj4+ Pj4+PiBxdWljayBlbm91Z2ggdG8gcmVhZCBpbnRlcnJ1cHQgaW5wdXQuIFRoZW4gcGluY3RybC1h bWQgbXVzdCBtaXNzIHNvbWUKPj4+Pj4+PiBjb2RlIHRvIGNvbmZpZ3VyZSB0aGUgY2hpcCBhbmQg SSBuZWVkIGEgaGFyZHdhcmUgcmVmZXJlbmNlIG1hbnVhbCBvZiB0aGlzCj4+Pj4+Pj4gR1BJTyBj aGlwIChISUQ6IEFNREkwMDMwKSBvciByZXZlcnNlLWVuZ2luZWVyIHRoZSBkcml2ZXIgZm9yIFdp bmRvd3MKPj4+Pj4+PiBzaW5jZSBJIGNvdWxkbid0IGZpbmQgYSBjb3B5IG9mIHJlZmVyZW5jZSBt YW51YWwgb25saW5lPyBXaGF0IHdvdWxkIHlvdQo+Pj4+Pj4+IHN1Z2dlc3Q/Cj4+Pj4+Pgo+Pj4+ Pj4gVGhpcyBzb3VuZHMgbGlrZSBpdCBtaWdodCBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHRo ZSBnbGl0Y2ggZmlsdGVyLgo+Pj4+Pj4gVGhlIGNvZGUgaW4gcGluY3RybC1hbWQuYyB0byBzZXR1 cCB0aGUgdHJpZ2dlci10eXBlIGFsc28gY29uZmlndXJlcwo+Pj4+Pj4gdGhlIGdsaXRjaCBmaWx0 ZXIsIHlvdSBjb3VsZCB0cnkgY2hhbmdpbmcgdGhhdCBjb2RlIHRvIGRpc2FibGUgdGhlCj4+Pj4+ PiBnbGl0Y2gtZmlsdGVyLiBUaGUgZGVmaW5lcyBmb3Igc2V0dGluZyB0aGUgZ2xpdGNoLWZpbHRl ciBiaXRzIHRvCj4+Pj4+PiBkaXNhYmxlZCBhcmUgYWxyZWFkeSB0aGVyZS4KPj4+Pj4+Cj4+Pj4+ Cj4+Pj4+IERpc2FibGluZyB0aGUgZ2xpdGNoIGZpbHRlciB3b3JrcyBsaWtlIGEgY2hhcm0hIE90 aGVyIGVudGh1c2lhc3RpYwo+Pj4+PiBMaW51eCB1c2VycyB3aG8gaGF2ZSBiZWVuIHRyb3VibGVk IGJ5IHRoaXMgaXNzdWUgZm9yIG1vbnRocyB3b3VsZAo+Pj4+PiBhbHNvIGZlZWwgZ3JlYXQgdG8g a25vdyB0aGlzIHNtYWxsIHR3ZWFraW5nIGNvdWxkIGJyaW5nIHRoZWlyCj4+Pj4+IHRvdWNocGFk IGJhY2sgdG8gbGlmZTopIFRoYW5rIHlvdSEKPj4+Pgo+Pj4+IFRoYXQgaXMgZ29vZCB0byBoZWFy LCBJJ20gZ2xhZCB0aGF0IHdlIGhhdmUgZmluYWxseSBmb3VuZCBhIHNvbHV0aW9uLgo+Pj4+Cj4+ Pj4+ICQgZ2l0IGRpZmYKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJs LWFtZC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYW1kLmMKPj4+Pj4gaW5kZXggOWE3NjBm NWNkN2VkLi5lNzg2ZDc3OWQ2YzggMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvcGluY3RybC9w aW5jdHJsLWFtZC5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWFtZC5jCj4+ Pj4+IEBAIC00NjMsNyArNDYzLDcgQEAgc3RhdGljIGludCBhbWRfZ3Bpb19pcnFfc2V0X3R5cGUo c3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKPj4+Pj4gw4PigJrDgsKgw4Pi gJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrD gsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKg w4PigJrDgsKgw4PigJrDgsKgIHBpbl9yZWcgJj0gfihBQ1RJVkVfTEVWRUxfTUFTSyA8PCBBQ1RJ VkVfTEVWRUxfT0ZGKTsKPj4+Pj4gw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKg w4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4Pi gJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgIHBpbl9y ZWcgfD0gQUNUSVZFX0xPVyA8PCBBQ1RJVkVfTEVWRUxfT0ZGOwo+Pj4+PiDDg+KAmsOCwqDDg+KA msOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOC wqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDD g+KAmsOCwqDDg+KAmsOCwqAgcGluX3JlZyAmPSB+KERCX0NOVFJsX01BU0sgPDwgREJfQ05UUkxf T0ZGKTsKPj4+Pj4gLcOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LC oMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoMOD 4oCaw4LCoMOD4oCaw4LCoMOD4oCaw4LCoCBwaW5fcmVnIHw9IERCX1RZUEVfUFJFU0VSVkVfSElH SF9HTElUQ0ggPDwgREJfQ05UUkxfT0ZGOwo+Pj4+PiArw4PigJrDgsKgw4PigJrDgsKgw4PigJrD gsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKg w4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgIC8qKiBwaW5fcmVn IHw9IERCX1RZUEVfUFJFU0VSVkVfSElHSF9HTElUQ0ggPDwgREJfQ05UUkxfT0ZGOyAqLwo+Pj4+ PiDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDD g+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KA msOCwqDDg+KAmsOCwqDDg+KAmsOCwqDDg+KAmsOCwqAgaXJxX3NldF9oYW5kbGVyX2xvY2tlZChk LCBoYW5kbGVfbGV2ZWxfaXJxKTsKPj4+Pj4gw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4Pi gJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrD gsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKgw4PigJrDgsKg IGJyZWFrOwo+Pj4+Pgo+Pj4+PiBJIHdpbGwgbGVhcm4gbW9yZSBhYm91dCB0aGUgZ2xpdGNoIGZp bHRlciBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mCj4+Pj4+IHBpbmN0cmwgYW5kIHNlZSBpZiBJ IGNhbiBkaXNhYmxlIGdsaXRjaCBmaWx0ZXIgb25seSBmb3IgdGhpcyB0b3VjaHBhZC4KPj4+Pgo+ Pj4+IFRoZSBnbGl0Y2ggZmlsdGVyIGxpa2VseSBhbHNvIGhhcyBzZXR0aW5ncyBmb3IgaG93IGxv bmcgYSBnbGl0Y2gKPj4+PiBsYXN0cywgd2hpY2ggYXBwYXJlbnRseSBnb2VzIGFsbCB0aGUgd2F5 IHVwIHRvIDEyMG1zLiBJZiBpdCB3b3VsZAo+Pj4+IG9ubHkgZGVsYXkgcmVwb3J0aW5nIGJ5IHNh eSAwLjFtcyBhbmQgY29uc2lkZXIgYW55IHB1bHNlIGxvbmdlcgo+Pj4+IHRoZW4gMC4xcyBub3Qg YSBnbGl0Y2gsIHRoZW4gaGF2aW5nIGl0IGVuYWJsZWQgd291bGQgYmUgZmluZS4KPj4+Pgo+Pj4+ IEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCBzb21lIHNvcnQgb2YgcXVpcmsgaGVyZSB0byBvbmx5IGRp c2FibGUgdGhlCj4+Pj4gZ2xpdGNoIGZpbHRlciBmb3Igc29tZSB0b3VjaHBhZHMuIE9uZSBhcHBy b2FjaCBtaWdodCBiZSB0byBzaW1wbHkKPj4+PiBkaXNhYmxlIGl0IGNvbXBsZXRlbHkgZm9yIGxl dmVsIHR5cGUgaXJxcy4KPj4+Pgo+Pj4+IFdoYXQgd2UgcmVhbGx5IG5lZWQgaGVyZSBpcyBzb21l IGlucHV0IGZyb20gQU1EIGVuZ2luZWVycyB3aXRoIGhvdwo+Pj4+IHRoaXMgaXMgYWxsIHN1cHBv c2VkIHRvIHdvcmsuCj4+Pj4KPj4+PiBFLmcuIG1heWJlIHRoZSBnbGl0Y2gtZmlsdGVyIGlzIHNl dHVwIGJ5IHRoZSBCSU9TIGFuZCB3ZSBzaG91bGQgbm90Cj4+Pj4gdG91Y2ggaXQgYWxsID8KPj4+ Pgo+Pj4+IE9yIG1heWJlIGluc3RlYWQgb2YgREJfVFlQRV9QUkVTRVJWRV9ISUdIX0dMSVRDSCBs b3cgbGV2ZWwgaW50ZXJydXB0cwo+Pj4+IHNob3VsZCB1c2UgREJfVFlQRV9QUkVTRVJWRV9MT1df R0xJVENIID/Dg+KAmsOCwqDDg+KAmsOCwqAgU29tZSBkb2NzIGZvciB0aGUgaHcKPj4+PiB3b3Vs ZCByZWFsbHkgaGVscCBoZXJlIC4uLgo+Pj4KPj4+IFNvIEkndmUgYmVlbiBkaWdnaW5nIHRocm91 Z2ggdGhlIGhpc3Rvcnkgb2YgdGhlIHBpbmN0cmwtYW1kLmMgZHJpdmVyCj4+PiBhbmQgb25jZSB1 cG9uIGEgdGltZSBpdCB1c2VkIHRvIHNldCBhIGRlZmF1bHQgZGVib3VuY2UgdGltZSBvZgo+Pj4g Mi43NSBtcy4KPj4+Cj4+PiBTZWUgdGhlIHBhdGNoIGdlbmVyYXRlZCBieSBkb2luZzoKPj4+Cj4+ PiBnaXQgZm9ybWF0LXBhdGNoIDhjZjQzNDU1NzVhNDE2ZTY4NTZhNjg1NmFjNmVhYTMxYWQ4ODMx MjZ+Li44Y2Y0MzQ1NTc1YTQxNmU2ODU2YTY4NTZhYzZlYWEzMWFkODgzMTI2Cj4+Pgo+Pj4gSW4g YSBsaW51eCBrZXJuZWwgY2hlY2tvdXQuCj4+Pgo+Pj4gU28gaXQgd291bGQgYmUgaW50ZXJlc3Rp bmcgdG8gYWRkIGEgZGVidWdnaW5nIHByaW50ayB0byBzZWUKPj4+IHdoYXQgdGhlIHZhbHVlIG9m IHBpbl9yZWcgJiBEQl9UTVJfT1VUX01BU0sgaXMgZm9yIHRoZSB0cm91Ymxlc29tZQo+Pj4gR1BJ Ty4KPj4+Cj4+PiBJIGd1ZXNzIHRoYXQgaXQgbWlnaHQgYmUgYWxsIDFzICgweGZmZmZmZmZmZikg b3Igc29tZSBzdWNoIHdoaWNoCj4+PiBtaWdodCBiZSBhIHdheSB0byBjaGVjayB0aGF0IHdlIHNo b3VsZCBkaXNhYmxlIHRoZSBnbGl0Y2gtZmlsdGVyCj4+PiBmb3IgdGhpcyBwaW4/Cj4+Cj4+IHAu cy4KPj4KPj4gT3IgbWF5YmUgd2Ugc2hvdWxkIHNpbXBseSBzdG9wIHRvdWNoaW5nIGFsbCB0aGUg Z2xpdGNoLWZpbHRlcgo+PiByZWxhdGVkIGJpdHMsIGluIHRoZSBzYW1lIHdheSBhcyB0aGF0IG9s ZCBjb21taXQgaGFzIGFscmVhZHkKPj4gcmVtb3ZlZCB0aGUgY29kZSBzZXR0aW5nIHRoZSB0aW1p bmcgb2YgdGhlIGZpbHRlciA/Cj4+Cj4+IEF0IGxlYXN0IGlzIHNlZW1zIHRoYXQgZm9yY2luZyB0 aGUgZmlsdGVyIHRvIGJlIG9uIHdpdGhvdXQKPj4gc2FuaXRpemluZyB0aGUgZGUtYm91bmNlIHRp bWUgaXMgbm90IGEgZ29vZCBpZGVhLgo+Pgo+IFRvZGF5IEkgZmluZCBhbiBpbmNvbnNpc3RlbmN5 IGluIGRyaXZlcnMvcGluY3RybC9waW5jdHJsLWFtZC5jCj4gc28gdGhlcmUgbXVzdCBiZSBhIGJ1 Zy4gQXMgZmFyIGFzIEkgY2FuIHVuZGVyc3RhbmQgcGluY3RybC1hbWQsCj4gInBpbl9yZWcgJiB+ REJfQ05UUmxfTUFTSyIgaXMgdXNlZCB0byBtYXNrIG91dCB0aGUgZGVib3VuY2luZwo+IGZlYXR1 cmUsCj4gCj4gc3RhdGljIGludCBhbWRfZ3Bpb19zZXRfZGVib3VuY2Uoc3RydWN0IGdwaW9fY2hp cCAqZ2MsIHVuc2lnbmVkIG9mZnNldCwKPiAgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgZGVib3Vu Y2UpCj4gewo+ICDCoMKgwqAgLi4uCj4gIMKgwqDCoMKgaWYgKGRlYm91bmNlKSB7Cj4gIMKgwqDC oMKgwqDCoMKgIC4uLgo+ICDCoMKgwqDCoMKgwqDCoCBpZiAoZGVib3VuY2UgPCA2MSkgewo+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBpbl9yZWcgfD0gMTsKPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaW5fcmVnICY9IH5CSVQoREJfVE1SX09VVF9VTklUX09GRik7Cj4gIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGluX3JlZyAmPSB+QklUKERCX1RNUl9MQVJHRV9PRkYpOwo+ICDCoMKgwqDC oMKgwqDCoCAuLi4KPiAgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChkZWJvdW5jZSA8IDEwMDAw MDApIHsKPiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aW1lID0gZGVib3VuY2UgLyA2MjUwMDsK PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaW5fcmVnIHw9IHRpbWUgJiBEQl9UTVJfT1VUX01B U0s7Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGluX3JlZyB8PSBCSVQoREJfVE1SX09VVF9V TklUX09GRik7Cj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGluX3JlZyB8PSBCSVQoREJfVE1S X0xBUkdFX09GRik7Cj4gIMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGluX3JlZyAmPSB+REJfQ05UUmxfTUFTSzsKPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQgPSAtRUlOVkFMOwo+ICDCoMKgwqDCoMKgwqDCoCB9Cj4gCj4gIMKgwqDCoMKgfSBl bHNlIHsKPiAgwqDCoMKgwqDCoMKgwqAgLi4uCj4gIMKgwqDCoMKgwqDCoMKgIHBpbl9yZWcgJj0g fkRCX0NOVFJsX01BU0s7Cj4gIMKgwqDCoMKgfQo+ICDCoMKgwqAgLi4uCj4gfQo+IAo+IEhvd2V2 ZXIgaW4gYW1kX2dwaW9faXJxX3NldF90eXBlLCAicGluZ19yZWcgJiB+KERCX0NOVFJsX01BU0sg PDwgREJfQ05UUkxfT0ZGKSIKPiBpcyB1c2VkLAo+IAo+IHN0YXRpYyBpbnQgYW1kX2dwaW9faXJx X3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpCj4gewo+IAo+ ICDCoMKgwqAgLi4uCj4gIMKgwqDCoMKgY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Cj4gIMKgwqDC oMKgwqDCoMKgIHBpbl9yZWcgfD0gTEVWRUxfVFJJR0dFUiA8PCBMRVZFTF9UUklHX09GRjsKPiAg wqDCoMKgwqDCoMKgwqAgcGluX3JlZyAmPSB+KEFDVElWRV9MRVZFTF9NQVNLIDw8IEFDVElWRV9M RVZFTF9PRkYpOwo+ICDCoMKgwqDCoMKgwqDCoCBwaW5fcmVnIHw9IEFDVElWRV9MT1cgPDwgQUNU SVZFX0xFVkVMX09GRjsKPiAgwqDCoMKgwqDCoMKgwqAgcGluX3JlZyAmPSB+KERCX0NOVFJsX01B U0sgPDwgREJfQ05UUkxfT0ZGKTsKPiAgwqDCoMKgwqDCoMKgwqAgcGluX3JlZyB8PSBEQl9UWVBF X1BSRVNFUlZFX0hJR0hfR0xJVENIIDw8IERCX0NOVFJMX09GRjsKPiAgwqDCoMKgwqDCoMKgwqAg aXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLCBoYW5kbGVfbGV2ZWxfaXJxKTsKPiAgwqDCoMKgwqDC oMKgwqAgYnJlYWs7Cj4gIMKgwqDCoCAuLi4KPiB9Cj4gCj4gSWYgInBpbl9yZWcgJiB+REJfQ05U UmxfTUFTSyIgaXMgdXNlZCBpbnN0ZWFkLCB0aGUgdG91Y2hwYWQgd2lsbCB3b3JrCj4gZmxhd2xl c3NseS4gU28gSSBiZWxpZXZlICJwaW5fcmVnICYgfkRCX0NOVFJsX01BU0siIGlzIHRoZSBjb3Jy ZWN0IHdheQo+IHRvIG1hc2sgb3V0IHRoZSBkZWJvdW5jaW5nIGZpbHRlciBhbmQgdGhlIGJ1ZyBs aWVzIGluIGFtZF9ncGlvX3NldF90eXBlLgoKSSdtIGFmcmFpZCB0aGF0IHRoYXQgaXMgbm90IHRo ZSBjYXNlLCB0aGUgY3VycmVudCBjb2RlIGlzIGNvcnJlY3QsCml0IGNsZWFycyBiaXQgNSBhbmQg NiBvZiB0aGUgcmVnaXN0ZXIgd2hpY2ggYXJlIHRoZSBiaXRzIHdoaWNoIGNvbnRyb2wKdGhlIGRl Ym91bmNlIHR5cGUuCgpZb3UgbWVudGlvbmVkIGluIGFuIGVhcmxpZXIgbWFpbCB0aGF0IHRoZSB2 YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgaXMKMHg1MDBlOCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBydW5z LgoKSWYgeW91IGRyb3AgdGhlICI8PCBEQl9DTlRSTF9PRkYiIHBhcnQgdGhlbiBpbnN0ZWFkIHlv dSBhcmUgbWFza2luZyBvdXQKYml0cyAwIGFuZCAxIHdoaWNoIGFyZSBhbHJlYWR5IDAsIHNvIHRo ZSBtYXNrIGJlY29tZXMgYSBuby1vcC4KCj4gQnR3LCBjYW4geW91IGV4cGxhaW4gd2hhdCdzIHRo ZSBkaWZmZXJlbmNlIGJldHdlZW4gZ2xpdGNoIGZpbHRlciBhbmQKPiBkZWJvdW5jaW5nIGZpbHRl cj8KClRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgdGhlIGRyaXZlciBtaXhlcyB0aGUgdGVybXMsIGJ1 dCB0aGV5IGJvdGggcmVmZXIKdG8gdGhlIHNhbWUgdGhpbmcgdGhpcyBpcyBtb3N0IGNsZWFyIGlu IHRoZSBkZWZpbmVzIGZvciB0aGUgREJfQ05UUkwgYml0cwooYml0cyA1IGFuZCA2IG9mIHRoZSBy ZWdpc3Rlcik6CgojZGVmaW5lIERCX1RZUEVfTk9fREVCT1VOQ0UgICAgICAgICAgICAgICAweDBV TAojZGVmaW5lIERCX1RZUEVfUFJFU0VSVkVfTE9XX0dMSVRDSCAgICAgICAweDFVTAojZGVmaW5l IERCX1RZUEVfUFJFU0VSVkVfSElHSF9HTElUQ0ggICAgICAweDJVTAojZGVmaW5lIERCX1RZUEVf UkVNT1ZFX0dMSVRDSCAgICAgICAgICAgICAweDNVTAoKV2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVj YXVzZSBiaXRzIDUgYW5kIDYgYXJlIGJvdGggMSBhcyBzZXQgYnkgdGhlIEJJT1MsCnNvIHdpdGgg eW91ciBsaXR0bGUgaGFjayB0byBkcm8gdGhlICI8PCBEQl9DTlRSTF9PRkYiIHlvdSBhcmUgaW4g ZXNzZW5jZQprZWVwaW5nIGJpdHMgNSBhbmQgNiBhcyBEQl9UWVBFX1JFTU9WRV9HTElUQ0guCgpT byBpdCBzZWVtcyB0aGF0IHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGlycV9zZXRfdHlwZSBjb2Rl IGNoYW5nZXMKdGhlIGdsaXRjaCBmaWx0ZXIgdHlwZSBmcm9tIERCX1RZUEVfUkVNT1ZFX0dMSVRD SCAoZmlsdGVyIG91dCBhbGwKZ2xpdGNoZXMpIHRvIERCX1RZUEVfUFJFU0VSVkVfSElHSF9HTElU Q0gsIHdoaWNoIGFwcGVyZW50bHkgYnJlYWtzCnRoaW5ncy4KClRvIHRlc3QgdGhpcyB5b3UgY291 bGQgcmVwbGFjZSB0aGU6CgpEQl9UWVBFX1BSRVNFUlZFX0hJR0hfR0xJVENICgpiaXQgaW4gdGhl IGNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XIHBhdGggd2l0aDoKCkRCX1RZUEVfUkVNT1ZFX0dMSVRD SAoKV2hpY2ggSSB3b3VsZCBleHBlY3QgdG8gYWxzbyBmaXggeW91ciB0b3VjaHBhZC4KCklmIHRo YXQgaXMgdGhlIGNhc2UgYW4gaW50ZXJlc3RpbmcgZXhwZXJpbWVudCB3b3VsZCBiZSB0bwpyZXBs YWNlIERCX1RZUEVfUFJFU0VSVkVfSElHSF9HTElUQ0ggd2l0aApEQl9UWVBFX1BSRVNFUlZFX0xP V19HTElUQ0ggaW5zdGVhZC4KCkkndmUgbmV2ZXIgc2VlbiB0aGlzIGtpbmRhIGdsaXRjaC9kZWJv dW5jZSBmaWx0ZXIgd2hlcmUKeW91IGNhbiBmaWx0ZXIgb3V0IG9ubHkgb25lIHR5cGUgb2YgbGV2 ZWwgYmVmb3JlLCBzbwpJIHdvbmRlciBpZiB0aGUgY29kZSBtYXliZSBzaW1wbHkgZ290IGl0IHdy b25nLCBhbHNvIGZvcgphIGxldmVsIHR5cGUgaXJxIEkgcmVhbGx5IHNlZSBubyBvYmplY3Rpb24g dG8ganVzdAp1c2UgREJfVFlQRV9SRU1PVkVfR0xJVENIIGluc3RlYWQgb2YgdGhlIHdlaXJkICJo YWxmIgpmaWx0ZXJzLgoKU28gSSBqdXN0IHJhbiBhIGdpdCBibGFtZSBhbmQgdGhlIERCX1RZUEVf UFJFU0VSVkVfSElHSF9HTElUQ0gKaGFzIGJlZW4gdGhlcmUgZnJvbSB0aGUgdmVyeSBmaXJzdCBj b21taXQgb2YgdGhpcyBkcml2ZXIsCkkgd29uZGVyIGlmIGl0IGhhcyBiZWVuIHdyb25nIGFsbCB0 aGlzIHRpbWUgYW5kIHNob3VsZCBiZQppbnZlcnRlZCAoc28gREJfVFlQRV9QUkVTRVJWRV9MT1df R0xJVENIIGluc3RlYWQpLgoKSSB0aGluayB3ZSBtYXkgd2FudCB0byBqdXN0IHBsYXkgaXQgc2Fm ZSB0aG91Z2ggYW5kIHNpbXBseQpzd2l0Y2ggdG8gREJfVFlQRV9SRU1PVkVfR0xJVENIIGFzIHdl IGFscmVhZHkgZG8gZm9yIGFsbAplZGdlIHR5cGVzIGFuZCB3aGVuIGFtZF9ncGlvX3NldF9jb25m aWcoKSBnZXRzIGNhbGxlZCEKCkxpbnVzLCB3aGF0IGRvIHlvdSB0aGluayBhYm91dCBqdXN0IHN3 aXRjaGluZyB0bwpEQl9UWVBFX1JFTU9WRV9HTElUQ0ggZm9yIGxldmVsIHR5cGUgaXJxcyAodW5p ZnlpbmcgdGhlbQp3aXRoIGFsbCB0aGUgb3RoZXIgbW9kZXMpIGFuZCBub3QgbXVja2luZyB3aXRo IHRoaXMgd2VpcmQsCnVuZG9jdW1lbnRlZCAiaGFsZiIgZmlsdGVyIG1vZGVzID8KCj4gT3IgY2Fu IHlvdSBwb2ludCB0byBzb21lIHJlZmVyZW5jZXM/IEkndmUgZ2FpbiBzb21lCj4gZXhwZXJpZW5j ZSBhYm91dCBob3cgdG8gY29uZmlndXJlIHRoZSBHUElPIGNvbnRyb2xsZXIgYnkgc3R1ZHlpbmcg dGhlCj4gY29kZSBvZiBwaW5jdHJsLWFtZCBhbmQgcGluY3RybC1iYXl0cmFpbCAoSSBjYW4ndCBm aW5kIHRoZSBoYXJkd2FyZQo+IHJlZmVyZW5jZSBtYW51YWwgZm9yIGJheXRyYWlsIGVpdGhlciku IEkgYWxzbyB0d2Vha2VkIHRoZSBjb25maWd1cmF0aW9uCj4gaW4gcGluY3RybC1hbWQsIGZvciBl eGFtcGxlLCBzZXR0aW5nIHRoZSBkZWJvdW5jZSB0aW1lb3V0IHRvIDk3NiB1c2VjCj4gYW5kIDMu OSBtc2VjIHdpdGhvdXQgZGlzYWJsaW5nIHRoZSBnbGl0Y2ggZmlsdGVyIGNvdWxkIGFsc28gc2F2 ZSB0aGUKPiB0b3VjaHBhZC4gQnV0IEkgbmVlZCBzb21lIGtub3dsZWRnZSB0byB1bmRlcnN0YW5k IHdoeSB0aGlzIHRvdWNocGFkIFsxXQo+IHdoaWNoIGFsc28gdXNlcyB0aGUgYnVnZ3kgcGluY3Ry bC1hbWQgaXNuJ3QgYWZmZWN0ZWQuCj4gCj4gWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9TeW5pdXJn ZS9pMmMtYW1kLW1wMi9pc3N1ZXMvMTEjaXNzdWVjb21tZW50LTcwNzQyNzA5NQoKTXkgZ3Vlc3Mg d291bGQgYmUgdGhhdCBpdCB1c2VzIGVkZ2UgdHlwZXMgaW50ZXJydXB0cyBpbnN0ZWFkID8KSSBo YXZlIHNlZW4gdGhhdCBxdWl0ZSBhIGZldyB0aW1lcywgZXZlbiB0aG91Z2ggaXQgaXMgd2VpcmQK dG8gZG8gdGhhdCBmb3IgaTJjIGRldmljZXMuCgpSZWdhcmRzLAoKSGFucwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgta2VybmVsLW1lbnRlZXMg bWFpbGluZyBsaXN0CkxpbnV4LWtlcm5lbC1tZW50ZWVzQGxpc3RzLmxpbnV4Zm91bmRhdGlvbi5v cmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgta2VybmVsLW1lbnRlZXMK