Received: by 10.223.185.116 with SMTP id b49csp6621321wrg; Thu, 8 Mar 2018 10:20:08 -0800 (PST) X-Google-Smtp-Source: AG47ELus6fQ8lK/89fbDYIeYu5GxD73fmism+ZNoFzbxT5tXRHwVdvalu/Sn4zyEj4xtyfzwYxkG X-Received: by 2002:a17:902:1e4:: with SMTP id b91-v6mr24503844plb.438.1520533208587; Thu, 08 Mar 2018 10:20:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520533208; cv=none; d=google.com; s=arc-20160816; b=N477NfXgRua/lhxbXoMTxsDO8B6v3cX+VuHQZQw3/d7djEWL3Ao3ztfSbPqCH0kLLp VxSixooVfcMZcroLE708lA3PlLnMwfGWmxn5NHmuK04tcJ9GW089qPzi/NU06G+N4iAh 8iEqA1PvjxclHCzpYZ1caDKV5Z3X05CN15Ycqn5mZdX5Vs9V+lljZgrxj6p4uRvvEK6H jfb111BPfb47VKlldlJVKoOsnRVSJqydaHDvj/mhRUHLFUARGEJw2gjKmgaJasYYddo4 12XUA7XD3pfI3VlsiytGGikqc4jk9Vfe75uuUFJpnX6i7V9dywKTiSk3M7IFqP4NJDjq /7hg== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dmarc-filter :dkim-signature:dkim-signature:arc-authentication-results; bh=xQllP7Hw6N7H7JHGS086dLJpWMMV/TcctGW90mpKHeI=; b=rniu14Oep5oexaPLa3a6PjhYs8Ja4C13HTXysj8EL5pzYBHKfWy+3I+fncluMK52aI odhXTSqe4iiV2fPr+GU7mKOUEehcKlitIJR9y2zyOHuu83nXhMS9Ty/w6E45jItJFiAG yRZBzT3cgE4OqvYByRFGoBrGw2+MlZiSLTNkb45squaJ8PDWai2DJ35Q78Lxp40OySdw tJ4+rhLBVFWC6+wmtRWpK2DXhgcOrdLGjPAgUqlMyadCBMVoo+yHpgNjwHYA3YFUH2aP qjh4ySoC9VIIbxk502q3GJnXQoMbQX91TkGwJHigm68RmyLbxzMM20BaAdr2O6dvf52K 0rxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=Uwid81q7; dkim=pass header.i=@codeaurora.org header.s=default header.b=Uwid81q7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l59-v6si15136566plb.77.2018.03.08.10.19.53; Thu, 08 Mar 2018 10:20:08 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=Uwid81q7; dkim=pass header.i=@codeaurora.org header.s=default header.b=Uwid81q7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754687AbeCHSSp (ORCPT + 99 others); Thu, 8 Mar 2018 13:18:45 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:41884 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751642AbeCHSSo (ORCPT ); Thu, 8 Mar 2018 13:18:44 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id AFC906070A; Thu, 8 Mar 2018 18:18:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1520533123; bh=0nlWldRpwN1W/kFcBvF/NIqyi+IX3p2zp08ZdvgyGS4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=Uwid81q7KFpSiaaCbJjduIU4V/fNh9MYP9RE6P1xEIqInBPqaqtaa/7jkWDhpq3sV C0WjHJujcaVpWT27iuHUDMQb9rf9Ikv9MEfEsRiS7VvDG6bBAzYD7lFjlGKNV1jNwX q8X3NupJzHPWd4xNriuSVqoPD1Wb0Zb+pl77Jfqk= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from [10.222.143.176] (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: anjiandi@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id AC93D60386; Thu, 8 Mar 2018 18:18:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1520533123; bh=0nlWldRpwN1W/kFcBvF/NIqyi+IX3p2zp08ZdvgyGS4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=Uwid81q7KFpSiaaCbJjduIU4V/fNh9MYP9RE6P1xEIqInBPqaqtaa/7jkWDhpq3sV C0WjHJujcaVpWT27iuHUDMQb9rf9Ikv9MEfEsRiS7VvDG6bBAzYD7lFjlGKNV1jNwX q8X3NupJzHPWd4xNriuSVqoPD1Wb0Zb+pl77Jfqk= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org AC93D60386 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=anjiandi@codeaurora.org Subject: Re: [PATCH] ipmi:ssif: Fix double probe from tryacpi and trydmi To: minyard@acm.org, arnd@arndb.de, gregkh@linuxfoundation.org Cc: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org References: <1520401742-29371-1-git-send-email-anjiandi@codeaurora.org> <1bc40690-c46f-e7fd-1beb-37e362cd8146@codeaurora.org> <7814a839-a718-7437-3f69-8b4f090ccbcf@acm.org> From: Jiandi An Message-ID: Date: Thu, 8 Mar 2018 12:18:41 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <7814a839-a718-7437-3f69-8b4f090ccbcf@acm.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/08/2018 08:10 AM, Corey Minyard wrote: > On 03/07/2018 05:59 PM, Jiandi An wrote: >> >> >> On 03/07/2018 07:34 AM, Corey Minyard wrote: >>> On 03/06/2018 11:49 PM, Jiandi An wrote: >>>> IPMI SSIF driver's parameter tryacpi and trydmi both >>>> are set to true.  The addition of IPMI DMI driver to >>>> create platform device for each IPMI device causes >>>> SSIF probe to be done twice on the same SMB I2C address >>>> for BMC.  Fix is to not call trydmi if tryacpi is able >>>> to find I2C address for BMC from SPMI ACPI table and >>>> probe successfully. >>> >>> Why are you trying to do this?  Is something bad happening? >>> >>> SPMI is not the preferred mechanism for detecting a device, >>> the preferred mechanism should be the acpi match table or >>> OF, followed by DMI, followed by SPMI.  In fact, it might be >>> best to just remove SPMI. >>> >>> -corey >> >> >> On our ARM64 platform, SSIF is the IPMI interface for host to >> BMC communication and it is described in ACPI SPMI table including >> the I2C address.  The driver would get the SSIF device from >> IPI0001 ssif_acpi_match[] and probe.  It worked fine with no issues. >> >> Then it was reported dmidecode does not show the correct SSIF >> device information including correct I2C address.  So SSIF device >> description is also added in SMBIOS table.  It worked fine with no >> issues until this patch. >> >> 0944d88 ipmi: Convert DMI handling over to a platform device >> >> We would see error message indicating trydmi via >> platform_driver_register fails with -EEXIST during boot. >> >> [    9.385758] ipmi_ssif: probe of dmi-ipmi-ssif.0 failed with error -17 >> >> This is because tryacpi ran first and successfully completed >> new_ssif_client() (which adds address to ssif_info) and eventually >> ssif_probe() >> >> ssif_tryacpi >>     spmi_find_bmc() >>         try_init_spmi() >>             new_ssif_client() >> >> Since both tryacpi and trydmi are set to true as module parameter >> with no permission and not exposed to /sys/module/ipmi_ssif/parameters, >> it triggers the following path down to dmi_ipmi_probe() and >> new_ssif_client() which fails ssif_info_find() finds the address >> added to ssif_info already in the ssif_tryacpi path. >> >> ssif_trydmi >>     platform_driver_register(&ipmi_driver) >>         __platform_driver_register() >>             driver_register() >>                 bus_add_driver() >>                     driver_attach() >>                         bus_for_each_dev() >>                             __driver_attach() >>                                 driver_probe_device() >>                                     ssif_platform_probe() >>                                         dmi_ipmi_probe() >>                                             new_ssif_client() >> >> Are you suggesting to not do tryacpi at all and just rely on >> trydmi? > > Basically, yes.  SPMI is really designed for early detection of interfaces > before ACPI proper comes up.  You should have the IPMI device in your > ACPI tree. You meant to say I should have the IPMI SSIF device in my SMBIOS table? Or do you mean to say I should have the IPMI SSIF device in my ACPI SPMI table but you will remove SPMI support from the IPMI driver? Do you want me to remove the ssif_tryacpi logic and tryacpi module parameter all together in that patch? Thanks -Jiandi > > My inclination is to remove SPMI support from the IPMI driver. > > -corey > >> >> I was looking at the following patch to understand more about >> the added ipmi_dmi driver. >> >> 9f88145 ipmi: Create a platform device for a DMI-specified IPMI interface >> >> It's creating a platform device for each IPMI device in the DMI >> table including SSIF device, for auto-loading IPMI devices from >> SMBIOS tables. >> >> Are you suggesting removing SSIF device description from ACPI >> SPMI table and remove ssif_tryacpi logic all together? >> >> But the commit description mentions ... >> >> "This also adds the ability to extract the slave address from >> the SMBIOS tables, so that when the driver uses ACPI-specified >> interfaces, it can still extract the slave address from SMBIOS." >> >> This made me think SSIF driver can still use ACPI-specified >> interface.  It made me think it implies SSIF device can be >> described in ACPI SPMI table and SMBIOS table.  Both spec >> did not say they cannot. >> >> What's your recommended way of fixing this double probing? >> >> Thanks >> >> >>> >>>> Signed-off-by: Jiandi An >>>> --- >>>>   drivers/char/ipmi/ipmi_ssif.c | 35 >>>> ++++++++++++++++++++++++----------- >>>>   1 file changed, 24 insertions(+), 11 deletions(-) >>>> >>>> diff --git a/drivers/char/ipmi/ipmi_ssif.c >>>> b/drivers/char/ipmi/ipmi_ssif.c >>>> index 9d3b0fa..5c57363 100644 >>>> --- a/drivers/char/ipmi/ipmi_ssif.c >>>> +++ b/drivers/char/ipmi/ipmi_ssif.c >>>> @@ -1981,29 +1981,41 @@ static int try_init_spmi(struct SPMITable >>>> *spmi) >>>>       return new_ssif_client(myaddr, NULL, 0, 0, SI_SPMI, NULL); >>>>   } >>>> -static void spmi_find_bmc(void) >>>> +static int spmi_find_bmc(void) >>>>   { >>>>       acpi_status      status; >>>>       struct SPMITable *spmi; >>>>       int              i; >>>> +    int              rc = 0; >>>>       if (acpi_disabled) >>>> -        return; >>>> +        return -EPERM; >>>>       if (acpi_failure) >>>> -        return; >>>> +        return -ENODEV; >>>>       for (i = 0; ; i++) { >>>>           status = acpi_get_table(ACPI_SIG_SPMI, i+1, >>>>                       (struct acpi_table_header **)&spmi); >>>> -        if (status != AE_OK) >>>> -            return; >>>> +        if (status != AE_OK) { >>>> +            if (i == 0) >>>> +                return -ENODEV; >>>> +            else >>>> +                return 0; >>>> +        } >>>> -        try_init_spmi(spmi); >>>> +        rc = try_init_spmi(spmi); >>>> +        if (rc) >>>> +            return rc; >>>>       } >>>> + >>>> +    return 0; >>>>   } >>>>   #else >>>> -static void spmi_find_bmc(void) { } >>>> +static int spmi_find_bmc(void) >>>> +{ >>>> +    return -ENODEV; >>>> +} >>>>   #endif >>>>   #ifdef CONFIG_DMI >>>> @@ -2104,12 +2116,13 @@ static int init_ipmi_ssif(void) >>>>                      addr[i]); >>>>       } >>>> -    if (ssif_tryacpi) >>>> +    if (ssif_tryacpi) { >>>>           ssif_i2c_driver.driver.acpi_match_table    = >>>>               ACPI_PTR(ssif_acpi_match); >>>> - >>>> -    if (ssif_tryacpi) >>>> -        spmi_find_bmc(); >>>> +        rv = spmi_find_bmc(); >>>> +        if (!rv) >>>> +            ssif_trydmi = false; >>>> +    } >>>>       if (ssif_trydmi) { >>>>           rv = platform_driver_register(&ipmi_driver); >>> >>> >> > -- Jiandi An Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.