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=-2.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FSL_HELO_FAKE,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no 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 15533C4338F for ; Thu, 5 Aug 2021 07:57:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E38306044F for ; Thu, 5 Aug 2021 07:57:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239073AbhHEH5g (ORCPT ); Thu, 5 Aug 2021 03:57:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239065AbhHEH5c (ORCPT ); Thu, 5 Aug 2021 03:57:32 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7A934C061765 for ; Thu, 5 Aug 2021 00:57:17 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id l4-20020a05600c1d04b02902506f89ad2dso5014537wms.1 for ; Thu, 05 Aug 2021 00:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=8f5irXTOZ+x1gqeO+/tRlTIZs9mBkkMUf4VKbD7vsag=; b=Cjclz8AMLNKZ/ixpsGLo+HKLOR46pfRb386vdXb2uBUOFefb6AEr/JxCkmjY/3ja44 E4vQHrVP0gOphI/lf35gPhbAlms+8PIy8RPMX0zrs35OfswTfsfJh1gCVqNxAsLp+r3f CEcIT/9vNxJSIU30ExwwJELU6CIhKMQLpuOOUhKrCrkH8zcm6+vJkBEg05IHQLXoxpNr zVpETORHtLOpC5Q9VkIaj/MQ9SmzWBi/i60zfJg0ENdfCoIhwQIoM2FjFB12nRThk+Ek qJevUFuVOyOxBgJIIp36POaxE0lSD6uaiQHR6YH9+M4CB6OHUiGgjb/oalS7dnpDhLJd skXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=8f5irXTOZ+x1gqeO+/tRlTIZs9mBkkMUf4VKbD7vsag=; b=Nf+/53XZ7JsKd5Zz3z+Rs7+bKoYvOm2Zx6gKv1ocBeRnEJ1SF2IfOro8WogFvse0HS uoWQD4m0e7A/p0zjj/Q+0Sxk381ccFTT/W8IWCaAZCcCWUtM+Tv5MoekjWg33VFSUuV4 cMsRNunrzaOgU57EE0/Qd8Bmb5355b8/yQsWiDsxyg6JK/dedPGHc80vz7e1jjVYzs3+ jIZxYrUEcfZVIowx8kFEJesC58N6mu1Uw7h/QtmRMKn6PHw7ueftHHAvlF0lOpqpG1ej llsQaZhfn4i20oM3jtnohludz/rBMcWHPqaPFIRt47erVHPY1+5OpieAMtksoCP+aXYM m80g== X-Gm-Message-State: AOAM530f1qtKl7PtTKVHJW/EDwbvGuIxz7BZtKmSNU+AGyjUnfcZv3ai lbDKCq0Qgth5vE3y8SlsCwQQ0A== X-Google-Smtp-Source: ABdhPJwhLLopAA/dTEvx/HThhsTVbzLYE3o0/re8+AVTzlEJn7scdP89e0g2se26WnCV5dLwJZ3FQg== X-Received: by 2002:a05:600c:4101:: with SMTP id j1mr3576009wmi.110.1628150236118; Thu, 05 Aug 2021 00:57:16 -0700 (PDT) Received: from google.com ([109.180.115.228]) by smtp.gmail.com with ESMTPSA id f26sm5233182wrd.41.2021.08.05.00.57.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Aug 2021 00:57:15 -0700 (PDT) Date: Thu, 5 Aug 2021 08:57:13 +0100 From: Lee Jones To: Saravana Kannan Cc: Marc Zyngier , Andrew Lunn , Kevin Hilman , Neil Armstrong , Jerome Brunet , linux-amlogic@lists.infradead.org, linux-arm-kernel , open list , netdev , Android Kernel Team Subject: Re: [PATCH 1/2] irqchip: irq-meson-gpio: make it possible to build as a module Message-ID: References: <20201020072532.949137-2-narmstrong@baylibre.com> <7hsga8kb8z.fsf@baylibre.com> <87r1hwwier.wl-maz@kernel.org> <7h7diwgjup.fsf@baylibre.com> <87im0m277h.wl-maz@kernel.org> <87sfzpwq4f.wl-maz@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 04 Aug 2021, Saravana Kannan wrote: > On Wed, Aug 4, 2021 at 11:20 AM Saravana Kannan wrote: > > > > On Wed, Aug 4, 2021 at 1:50 AM Marc Zyngier wrote: > > > > > > On Wed, 04 Aug 2021 02:36:45 +0100, > > > Saravana Kannan wrote: > > > > > > Hi Saravana, > > > > > > Thanks for looking into this. > > > > You are welcome. I just don't want people to think fw_devlink is broken :) > > > > > > > > [...] > > > > > > > > Saravana, could you please have a look from a fw_devlink perspective? > > > > > > > > Sigh... I spent several hours looking at this and wrote up an analysis > > > > and then realized I might be looking at the wrong DT files. > > > > > > > > Marc, can you point me to the board file in upstream that corresponds > > > > to the platform in which you see this issue? I'm not asking for [1], > > > > but the actual final .dts (not .dtsi) file that corresponds to the > > > > platform/board/system. > > > > > > The platform I can reproduce this on is described in > > > arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts. It is an > > > intricate maze of inclusion, node merge and other DT subtleties. I > > > suggest you look at the decompiled version to get a view of the > > > result. > > > > Thanks. After decompiling it, it looks something like (stripped a > > bunch of reg and address properties and added the labels back): > > > > eth_phy: mdio-multiplexer@4c000 { > > compatible = "amlogic,g12a-mdio-mux"; > > clocks = <0x02 0x13 0x1e 0x02 0xb1>; > > clock-names = "pclk\0clkin0\0clkin1"; > > mdio-parent-bus = <0x22>; > > > > ext_mdio: mdio@0 { > > reg = <0x00>; > > > > ethernet-phy@0 { > > max-speed = <0x3e8>; > > interrupt-parent = <0x23>; > > interrupts = <0x1a 0x08>; > > phandle = <0x16>; > > }; > > }; > > > > int_mdio: mdio@1 { > > ... > > } > > } > > > > And phandle 0x23 refers to the gpio_intc interrupt controller with the > > modular driver. > > > > > > Based on your error messages, it's failing for mdio@0 which > > > > corresponds to ext_mdio. But none of the board dts files in upstream > > > > have a compatible property for "ext_mdio". Which means fw_devlink > > > > _should_ propagate the gpio_intc IRQ dependency all the way up to > > > > eth_phy. > > > > > > > > Also, in the failing case, can you run: > > > > ls -ld supplier:* > > > > > > > > in the /sys/devices/..../ folder that corresponds to the > > > > "eth_phy: mdio-multiplexer@4c000" DT node and tell me what it shows? > > > > > > Here you go: > > > > > > root@tiger-roach:~# find /sys/devices/ -name 'supplier*'|grep -i mdio | xargs ls -ld > > > lrwxrwxrwx 1 root root 0 Aug 4 09:47 /sys/devices/platform/soc/ff600000.bus/ff64c000.mdio-multiplexer/supplier:platform:ff63c000.system-controller:clock-controller -> ../../../../virtual/devlink/platform:ff63c000.system-controller:clock-controller--platform:ff64c000.mdio-multiplexer > > > > As we discussed over chat, this was taken after the mdio-multiplexer > > driver "successfully" probes this device. This will cause > > SYNC_STATE_ONLY device links created by fw_devlink to be deleted > > (because they are useless after a device probes). So, this doesn't > > show the info I was hoping to demonstrate. > > > > In any case, one can see that fw_devlink properly created the device > > link for the clocks dependency. So fw_devlink is parsing this node > > properly. But it doesn't create a similar probe order enforcing device > > link between the mdio-multiplexer and the gpio_intc because the > > dependency is only present in a grand child DT node (ethernet-phy@0 > > under ext_mdio). So fw_devlink is working as intended. > > > > I spent several hours squinting at the code/DT yesterday. Here's what > > is going on and causing the problem: > > > > The failing driver in this case is > > drivers/net/mdio/mdio-mux-meson-g12a.c. And the only DT node it's > > handling is what I pasted above in this email. In the failure case, > > the call flow is something like this: > > > > g12a_mdio_mux_probe() > > -> mdio_mux_init() > > -> of_mdiobus_register(ext_mdio DT node) > > -> of_mdiobus_register_phy(ext_mdio DT node) > > -> several calls deep fwnode_mdiobus_phy_device_register(ethernet_phy DT node) > > -> Tried to get the IRQ listed in ethernet_phy and fails with > > -EPROBE_DEFER because the IRQ driver isn't loaded yet. > > > > The error is propagated correctly all the way up to of_mdiobus_register(), but > > mdio_mux_init() ignores the -EPROBE_DEFER from of_mdiobus_register() and just > > continues on with the rest of the stuff and returns success as long as > > one of the child nodes (in this case int_mdio) succeeds. > > > > Since the probe returns 0 without really succeeding, networking stuff > > just fails badly after this. So, IMO, the real problem is with > > mdio_mux_init() not propagating up the -EPROBE_DEFER. I gave Marc a > > quick hack (pasted at the end of this email) to test my theory and he > > confirmed that it fixes the issue (a few deferred probes later, things > > work properly). > > > > Andrew, I don't see any good reason for mdio_mux_init() not > > propagating the errors up correctly (at least for EPROBE_DEFER). I'll > > send a patch to fix this. Please let me know if there's a reason it > > has to stay as-is. > > I sent out the proper fix as a series: > https://lore.kernel.org/lkml/20210804214333.927985-1-saravanak@google.com/T/#t > > Marc, can you give it a shot please? > > -Saravana Superstar! Thanks for taking the time to rectify this for all of us. -- Lee Jones [李琼斯] Senior Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog