Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2175133ybh; Fri, 17 Jul 2020 11:05:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXtAkmGYxHDse7e3BK8juC3xO1mUTA18qM+j6fYESyx45Ftp/MLQI2w232/q1ye3Zslgcc X-Received: by 2002:a17:906:d217:: with SMTP id w23mr9952318ejz.292.1595009103904; Fri, 17 Jul 2020 11:05:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595009103; cv=none; d=google.com; s=arc-20160816; b=pyAmTdw6OUMpCEajID8pibHqJlCYJAjyKNdTk5oAlmFlT2LiT2NOpUTfQuRYgD2SqL sSn8lAp0tSqYKOvqA9hySm7MOeL8rEGd6I/hW/3oBsyRINSbW3lJpfLeVV8biBlVuX3L v3HGyV7aaIUjQf572Glw9HxR64snAHMjq4XTmwEt1Zr1ZH8nDqbopB1ClWap4+PfpBh9 zq7yPp777TtoQf/L++S69MZapvUOdOeseljc2mtKLLIDRiQ0VFKeaqVpcazAkSaCZJ+y qZETug2AD9Ih6anb5Q6BFH5OWzYp5tSwsCKwliWAt8pHtmjdue66RrX0Rn3yfALyGy8K +5yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=jT6rzpeEE5qo24AcCOcM6oByRnSEaKB4PNbeCotZ59c=; b=Nxp/5reeG8pDmSoeyjsQAdx/vimUb9xYfFlKv8nMLAdDCAgvbecEAbJb6M3RZpW7Ed Imgx7Cu3rtdKj7Lu3GgbnrwQF6l419VcHS1u7DNPaqNMGMRLpsx4au242ICSI0zjcWUU nQYT/NVfnMIXFlHx1TOQ6OiNGOl7ivLJ5oviAGzAb26UeyvKlkrR0TXUK3Q1BShw7hH4 nzgxaspZUrBFBCdWcekBsjwVuUYH7OmiQrx6zAjGHWoOgLAvYSdKnB+tJq/02j5LSaoY KKDX763V+nQCoZiZR7HNgDHwTWoQxEqFibqb5gf+pFzYQ3HGy3O6x4SNc5WNGKaLsgaF n0IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=MFEa1TXl; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w24si5190548ejv.691.2020.07.17.11.04.40; Fri, 17 Jul 2020 11:05:03 -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=@chromium.org header.s=google header.b=MFEa1TXl; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728071AbgGQSER (ORCPT + 99 others); Fri, 17 Jul 2020 14:04:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726429AbgGQSEQ (ORCPT ); Fri, 17 Jul 2020 14:04:16 -0400 Received: from mail-qk1-x734.google.com (mail-qk1-x734.google.com [IPv6:2607:f8b0:4864:20::734]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 97279C0619D2 for ; Fri, 17 Jul 2020 11:04:16 -0700 (PDT) Received: by mail-qk1-x734.google.com with SMTP id z15so2801735qki.10 for ; Fri, 17 Jul 2020 11:04:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=jT6rzpeEE5qo24AcCOcM6oByRnSEaKB4PNbeCotZ59c=; b=MFEa1TXlROSydlqaUMmmn0e/gd3aRzO9YSBdx2NQCmmwvqKJWI6nkXfoht3xmgAlkf Nu0ONqaQwg0qCmLsX9eqMzHGTcCu5gQZqHrDsvhupqCGleXrGeTNrLBLXv+BPtVg2WwX E2Y2EW/VUVDrQLzUZ8xpHftPsOdmwv1RBnwdU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=jT6rzpeEE5qo24AcCOcM6oByRnSEaKB4PNbeCotZ59c=; b=NsQKou+PAN5Tjh4G6yjGFiqm7qOQxxpLsY4iSNUiNLd2aBTY9M0wFFTyUgXj1DAOsf QfPELVIdj7ZyrRiSWI9Bb0iGxFLopQPNH7H9UB6+5XXh2tWbzL7VUsFCf6Yz33A+iAJa aTAudnSwyyfKI2bOKb+OZMSqPJRCTjsF4sF/5dGD8nq3vjIbD5w+Pko6F1WTf40PR8BK nKwOyPIVC23MVOMUeBjvej9zV5X/ddEOKg1z19AwmrNWxy1mjM0+p+zLgaZrPzhArMQB mgint3GWDdMjqm42apRdDtRDSAF8lzSiNo7yqCCx26AqBL5Iz086F1o9OOWpWFf0bZci jIkg== X-Gm-Message-State: AOAM5328yFTNm1s6+Zq7hWSUOdD94slwEJwn+zQqLWzjXyqm7GMSa93z tYPivqo/KJXJ1BuW8LSi2GQ6tPa8zqEx1frftesajg== X-Received: by 2002:a37:9682:: with SMTP id y124mr10089836qkd.442.1595009055606; Fri, 17 Jul 2020 11:04:15 -0700 (PDT) MIME-Version: 1.0 References: <20200511204635.GC136540@google.com> <20200512134154.GC2085641@kuha.fi.intel.com> <20200609235740.GA154315@google.com> <20200610153356.GC3213128@kuha.fi.intel.com> In-Reply-To: From: Prashant Malani Date: Fri, 17 Jul 2020 11:04:04 -0700 Message-ID: Subject: Re: [PATCH 1/2] dt-bindings: chrome: Add cros-ec-typec mux props To: Rob Herring Cc: Heikki Krogerus , "linux-kernel@vger.kernel.org" , Tim Wawrzynczak , Benson Leung , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Enric Balletbo i Serra , Guenter Roeck , Rajmohan Mani Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rob, Just checking in again to see if you have any thoughts about the proposal outlined in previous emails in this thread. Best regards, On Fri, Jul 10, 2020 at 1:51 AM Prashant Malani wrote: > > Hi Rob, > > Thought I'd check in again to see if you've had a chance to look at > this proposal. > > Since Type C connector class framework assumes the existing > "{mode,orientation,data-role}-switch" bindings for non-DT platforms > already, as I see it, we can either: > > 1. Implement a different handling for DT platforms which utilizes port > end-points and update the Type C connector class framework to parse > those accordingly; this is what the above proposal suggests. It > reserves some end-points for the "switches" that the Type C connector > class framework expects and just follows the OF graph till it finds > the various switches. Other schemas that use usb-connector.yaml schema > can add more end-points as their use case deems needed, as long as > they're not the reserved ones. > > > > 2. Let various schemas that use usb-connector.schema add their own > bindings according to their requirements (in the example of > cros-ec-typec, it is adding the "*-switch" nodes directly under each > connector instead of using OF graph so that Type C connector class > framework can detect the switches, but there other examples for other > use cases). > > I'm fine with either, but since this thread is now nearly 3 months > old, it would be nice to arrive at a decision. > > Best regards, > > On Mon, Jun 29, 2020 at 1:41 PM Prashant Malani wrote: > > > > Hi Rob, > > > > Just following up on this. Would the below example align better with > > OF graph requirements? > > > > Example begins at , but in summary: > > - port@1 (Superspeed) of usb-c-connector will have 3 endpoints (0 = > > goes to mode switch, 1 = goes to orientation switch, 2 = goes to data > > role switch) > > - port@2 (SBU) of usb-c-connector will have 2 endpoints (0 = goes to > > mode switch, 1 = goes to orientation switch) > > -These end points can go through arbitrarily long paths (including > > retimers) as long as they end up at the following devices: > > a. device with compatible string "typec-mode-switch" for endpoint 0. > > b. device with compatible string "typec-orientation-switch" for endpoint 1. > > c. device with compatible string "typec-data-role-switch" for endpoint 2. > > - Connector class framework will perform the traversal from > > usb-c-connector port endpoints to the "*-switch" devices. > > > > Best regards, > > > > On Fri, Jun 12, 2020 at 10:34 AM Prashant Malani wrote: > > > > > > Hi Rob, > > > > > > Thanks as always for your help in reviewing this proposal! > > > > > > Kindly see inline > > > > > > (Trimming text); > > > On Thu, Jun 11, 2020 at 02:00:47PM -0600, Rob Herring wrote: > > > > On Wed, Jun 10, 2020 at 11:49 AM Prashant Malani wrote: > > > > > > > > > > Hi Rob, > > > > > > > > > > On Wed, Jun 10, 2020 at 9:53 AM Rob Herring wrote: > > > > > > > > > > > > > On Tue, Jun 09, 2020 at 04:57:40PM -0700, Prashant Malani wrote: > > > > > > > > > > I think the updated example handles this grouping (port@1 going to a > > > > > "SS mux") although as you said it should probably be a group of muxes, > > > > > but I think the example illustrates the point. Is that assessment > > > > > correct? > > > > > > > > Yes, but let's stop calling it a mux. It's a "USB Type C signal routing blob". > > > > > > Ack. > > > > > > Let's go with "-switch" ? That's what the connector class uses and it > > > conveys the meaning (unless that is a reserved keyword in DT). > > > > > > > > > > > > Would this block the addition of the "*-switch" properties? IIUC the > > > > > two are related but not dependent on each other. > > > > > > > > > > The *-switch properties are phandles which the Type C connector class > > > > > framework expects (and uses to get handles to those switches). > > > > > These would point to the "mux" or "group of mux" abstractions as noted earlier. > > > > > > > > You don't need them though. Walk the graph. You get the connector > > > > port@1 remote endpoint and then get its parent. > > > > > > > > > > I see; would it be something along the lines of this? (DT example > > > follows; search for "example_end" to jump to bottom): > > > > > > > > > > > > connector@0 { > > > compatible = "usb-c-connector"; > > > reg = <0>; > > > power-role = "dual"; > > > data-role = "dual"; > > > try-power-role = "source"; > > > .... > > > ports { > > > #address-cells = <1>; > > > #size-cells = <0>; > > > > > > port@0 { > > > reg = <0>; > > > usb_con_hs: endpoint { > > > remote-endpoint = <&foo_usb_hs_controller>; > > > }; > > > }; > > > > > > port@1 { > > > reg = <1>; > > > #address-cells = <1>; > > > #size-cells = <0>; > > > > > > usb_con0_ss_mode: endpoint@0 { > > > reg = <0> > > > remote-endpoint = <&mode_switch_ss_in>; > > > }; > > > > > > usb_con0_ss_orientation: endpoint@1 { > > > reg = <1> > > > remote-endpoint = <&orientation_switch_ss_in>; > > > }; > > > > > > usb_con0_ss_data_role: endpoint@2 { > > > reg = <2> > > > remote-endpoint = <&data_role_switch_in>; > > > }; > > > }; > > > > > > port@2 { > > > reg = <2>; > > > #address-cells = <1>; > > > #size-cells = <0>; > > > usb_con0_sbu_mode: endpoint@0 { > > > reg = <0> > > > remote-endpoint = <&mode_switch_sbu_in>; > > > }; > > > usb_con0_sbu_orientation: endpoint@1 { > > > reg = <1> > > > remote-endpoint = <&orientation_switch_sbu_in>; > > > }; > > > }; > > > }; > > > }; > > > > > > mode_switch { > > > compatible = "typec-mode-switch"; > > > mux-controls = <&mode_mux_controller>; > > > mux-control-names = "mode"; > > > #address-cells = <1>; > > > #size-cells = <0>; > > > > > > port@0 { > > > reg = <0>; > > > mode_switch_ss_in: endpoint { > > > remote-endpoint = <&usb_con0_ss_mode> > > > }; > > > }; > > > > > > port@1 { > > > reg = <1>; > > > mode_switch_out_usb3: endpoint { > > > remote-endpoint = <&usb3_0_ep> > > > }; > > > }; > > > > > > port@2 { > > > reg = <2>; > > > mode_switch_out_dp: endpoint { > > > remote-endpoint = <&dp0_out_ep> > > > }; > > > }; > > > > > > port@3 { > > > reg = <3>; > > > mode_switch_sbu_in: endpoint { > > > remote-endpoint = <&usb_con0_sbu_mode> > > > }; > > > }; > > > // ... other ports similarly defined. > > > }; > > > > > > orientation_switch { > > > compatible = "typec-orientation-switch"; > > > mux-controls = <&orientation_mux_controller>; > > > mux-control-names = "orientation"; > > > #address-cells = <1>; > > > #size-cells = <0>; > > > > > > port@0 { > > > reg = <0>; > > > orientation_switch_ss_in: endpoint { > > > remote-endpoint = <&usb_con0_ss_orientation> > > > }; > > > }; > > > > > > port@1 > > > reg = <1>; > > > orientation_switch_sbu_in: endpoint { > > > remote-endpoint = <&usb_con0_sbu_orientation> > > > }; > > > }; > > > // ... other ports similarly defined. > > > }; > > > > > > data_role_switch { > > > compatible = "typec-data-role-switch"; > > > mux-controls = <&data_role_switch_controller>; > > > mux-control-names = "data_role"; > > > > > > port { > > > data_role_switch_in: endpoint { > > > remote-endpoint = <&usb_con0_ss_data_role> > > > }; > > > }; > > > }; > > > > > > > > > > > > Would this be conformant to OF graph and usb-connector bindings > > > requirements? We'll certainly send out a format PATCH/RFC series for > > > this, but I was hoping to gauge whether we're thinking along the right lines. > > > > > > So, in effect this would mean: > > > - New bindings(and compatible strings) to be added for: > > > typec-{orientation,data-role,mode}-switch. > > > - Handling in Type C connector class to parse switches from OF graph. > > > - Handling in Type C connector class for distinct switches for port@1 > > > (SS lines) and port@2 (SBU lines). > > > > > > The only thing I'm confused about is how we can define these switch > > > remote-endpoint bindings in usb-connector.yaml; the port can have an > > > remote-endpoint, but can we specify what the parent of the remote-endpoint > > > should have as a compatible string? Or do we not need to? > > > > > > Best regards, > > > > > > -Prashant > > >