Received: by 2002:a05:6a10:83d0:0:0:0:0 with SMTP id o16csp20578pxh; Thu, 7 Apr 2022 12:43:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybqxWhbPsCiY64gERiWhdrDNv7tTUDtC87QweCxFNwbJeIbGAtOcxgW9JABDrym1VPt4NM X-Received: by 2002:a05:6a00:1741:b0:4fa:f5bc:30bd with SMTP id j1-20020a056a00174100b004faf5bc30bdmr15678672pfc.0.1649360605700; Thu, 07 Apr 2022 12:43:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649360605; cv=none; d=google.com; s=arc-20160816; b=A+rPMzPHs3MCR9F38lo+i8ilxq/9MWFg8mObL14ORhMqDZ8s1rspixOzfrDVnU6eWM RO73OpvNk/hzs5wlx4Pi4z+o3drxRdEwq96CJDHZXRso5F4BPmH4f/ZokbPmkSsu26iy c0en+Z/DQ+cJ9RQ9NCmiQIVn6nDOaqTZdAfPsdmujIVqJwA95KeNYbK4Wq/Wb3JQowYu rDNL1zbetgrz3npv8NEdnK4YzY7YJkLUzrD6f2ybLAMfpwsgDxuhy2+iLpkf50ILYz/B qP9qTr+4dH2fI9tF/NPcWKsL1A+NjEHGRg10g2EfzXMMY5J3FGFGt7saRujSZeV7v+C1 gm8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=o7DSjU/xqsy5AN43adD8t3WIGQh58clKwf1/MSjnezU=; b=dUIV0jMFJuLfgwW74a/L+1rOtUQ1L3++ucdxOu40LoRx5iwCiI+TO2JCLehDmpjo/p LavnWFECqGwr/0OG9kJ0SJ2PXk52SprHJpR9/hb7yPJBmn5zEpClUiG/YpngCBPzntUX nceDTSvD6EXIG8rEgNJBorkNGhqGewtvKFphEUWct8jYbJxbltW439N7p8pyu/3oXmFP X35GFnSnT0JXE/1XTaLn0E0U1aiZMDWeP4rOacbzPQWfxhP8phmG54acmL/U2IjDXxb0 ZcDSW4oJnv27NPBhXvwDjftLiuywgvGAb6hNRCb2wJ0j1jDixBdD0KAMgz5Cagm5qHdR jclA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=NNzy7KBE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id r23-20020a6560d7000000b00398bf7acf66si18019977pgv.449.2022.04.07.12.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Apr 2022 12:43:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=NNzy7KBE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id A1421251F03; Thu, 7 Apr 2022 12:19:33 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240630AbiDGRGD (ORCPT + 99 others); Thu, 7 Apr 2022 13:06:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229655AbiDGRGC (ORCPT ); Thu, 7 Apr 2022 13:06:02 -0400 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E596E6E for ; Thu, 7 Apr 2022 10:03:57 -0700 (PDT) Received: by mail-pf1-x435.google.com with SMTP id 7so5966647pfu.13 for ; Thu, 07 Apr 2022 10:03:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=o7DSjU/xqsy5AN43adD8t3WIGQh58clKwf1/MSjnezU=; b=NNzy7KBEDqTeDpfORIJWKVxVgYlxgXab9P2GUoqXJaO+iclNG3I0IQewNcIaXqn3sb X8JT7yXdiwed/rH+gUtGXXIGyVz3PWGY2FsiltlfKQMGQJ+achwjKMEdX7/jfKK+szwt n4Y63fpbVOOFn36A2QKJcS8NW1yFKENg2hDiz0fVfbP9FRWp7DoyTZZLu9YSQ/jpEUaK gQeOyisl1FZ9sj0ahUQ8KhpJi58JbsCVvbtgg+BL/V7Z5xlMmF85eDwRafnMaLifLGQc n7S88/96zfIYHXrTwD/BgskKB3VEeRw+NU30fpav1XUXDt+52+/C9pEpBwqunqfRu9ZN Hing== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=o7DSjU/xqsy5AN43adD8t3WIGQh58clKwf1/MSjnezU=; b=eQH2acjxr0GqrtJ4wbPZ3U5oPipUZ2ssgK+ideLnRq9L0Trss41SI9V2Xre8pM4PK+ 1FEGsAZNmj5Ov325bgWC4eetCNVDLlIVKhnIt/LxGMJAvER9W+yjjY5n2dvfpUroq9eB fCO/lC78ruEbKVlc47A75+e1teorBaZXCnJWFt37u2Nuo4Owrfk/Dt2YAyXiyjipObFC 8GwL/bam1piiz6MxxYmZMHbUhHR5jg1NUfisscG10CKZrXVG5I0KCP8w6SgL0/wIxfkP Ks4PjU38ex4I6JOEFyZSnPDjS9t52+QTC7pD6HZvCQjybXYrOQQykMkLA0P7kMvd/4J3 gJTA== X-Gm-Message-State: AOAM533VkBvfDhLCR0159yIn+3ZcqjsTaQ/oZ8+x+Wqw2n0qupgZ7rH3 r2Yhn2RdMIbSxMEY1qE10kZyOhtbxhI= X-Received: by 2002:a05:6a00:a8b:b0:4e1:52db:9e5c with SMTP id b11-20020a056a000a8b00b004e152db9e5cmr15182922pfl.38.1649351036931; Thu, 07 Apr 2022 10:03:56 -0700 (PDT) Received: from [192.168.66.3] (p912131-ipoe.ipoe.ocn.ne.jp. [153.243.13.130]) by smtp.gmail.com with ESMTPSA id g3-20020a17090a708300b001c7e8ae7637sm9360090pjk.8.2022.04.07.10.03.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 Apr 2022 10:03:56 -0700 (PDT) Message-ID: <0fdba110-8743-3b2d-cb30-3a89b7cfa592@gmail.com> Date: Fri, 8 Apr 2022 02:03:52 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH] platform/chrome: cros_ec_typec: Check for EC driver Content-Language: en-US To: Guenter Roeck Cc: Prashant Malani , linux-kernel , chrome-platform@lists.linux.dev, Benson Leung , Guenter Roeck References: <20220404041101.6276-1-akihiko.odaki@gmail.com> <033c1ec4-4bee-a689-140c-9694dfee435b@gmail.com> From: Akihiko Odaki In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 2022/04/08 1:28, Guenter Roeck wrote: > On Wed, Apr 6, 2022 at 6:16 PM Akihiko Odaki wrote: > [ ... ] >>>>> ec_dev = dev_get_drvdata(&typec->ec->ec->dev); > > I completely missed the part that this is not on the parent. > >>>>> + if (!ec_dev) >>>>> + return -EPROBE_DEFER; > [ ... ] >> >> 1. The parent exists and dev_get_drvdata(pdev->dev.parent) returns >> non-NULL value. However, dev_get_drvdata(&typec->ec->ec->dev) returns >> NULL. (Yes, that is confusing.) I'm wondering > > I am actually surprised that typec->ec->ec is not NULL. Underlying > problem (or, one underlying problem) is that it is set in > cros_ec_register(): > > /* Register a platform device for the main EC instance */ > ec_dev->ec = platform_device_register_data(ec_dev->dev, "cros-ec-dev", > PLATFORM_DEVID_AUTO, &ec_p, > sizeof(struct cros_ec_platform)); > > "cros-ec-dev" is the mfd device which instantiates the character > device. On devicetree (arm64) systems, the typec device is registered > as child of google,cros-ec-spi and thus should be instantiated only > after the spi device has been instantiated. The same should happen on > ACPI systems, but I don't know if that is really correct. > > I don't know what exactly is happening, but apparently typec > registration happens in parallel with cros-ec-dev registration, which > is delayed because the character device is not loaded. As mentioned, I > don't understand why typec->ec->ec is not NULL. Can you check what it > points to ? If I read the code correctly, the registration itself happens synchronously and platform_device_register_data() always returns a non-NULL value unless it returns -ENOMEM. The driver, however, can be asynchronously bound and dev_get_drvdata(&typec->ec->ec->dev) can return NULL as the consequence. It would have a call trace like the following when scheduling asynchronous driver binding: platform_device_register_data() platform_device_register_resndata() platform_device_register_full() - This always creates and returns platform_device. platform_device_add() - This adds the created platform_device. device_add() bus_probe_device() device_initial_probe() __device_attach() - This schedules asynchronous probing. typec->ec->ec should be pointing to the correct platform_device as the patched driver works without Oops on my computer. It is not NULL at least. Regards, Akihiko Odaki > > Thanks, > Guenter > >> dev_get_drvdata(pdev->dev.parent) returned NULL in the following crash >> log but it would be a problem distinct from what is handled with my patch: >> https://lore.kernel.org/lkml/CABXOdTe9u_DW=NZM1-J120Gu1gibDy8SsgHP3bJwwLsE_iuLAQ@mail.gmail.com/ >> >> 2. My patch returns -EPROBE_DEFER instead of -ENODEV and I confirmed it >> will eventually be instantiated. >> >> Regards, >> Akihiko Odaki >> >>> >>> Guenter >>> >>>> Thanks, >>>> >>>> [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/platform/chrome?id=ffebd90532728086007038986900426544e3df4e >>