Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp53812pxm; Tue, 22 Feb 2022 06:15:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwfykBsr5GT2bn92AbpDZWBNNTdZhGFuyTtZhSWMOP21tx+7vn3cuBjQHaL4zM41vnllM/E X-Received: by 2002:a17:906:eb03:b0:6cd:7cc2:a677 with SMTP id mb3-20020a170906eb0300b006cd7cc2a677mr19540239ejb.208.1645539349656; Tue, 22 Feb 2022 06:15:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645539349; cv=none; d=google.com; s=arc-20160816; b=Ka/qE47BKJaU/xmuk4gyP9o2mPItHAIHKBzjJhQ9SHbKoQrsy7K+BvQ/EFGL1Gf0DV MTXl601w5VRIZ4LvqMSfsDUOnWXWGEeZvMxeNiDfrg9P6xfWHHklmrImsucR15TEw/h2 sogxXeDmqnpfDYZKqT1FEZFlZW38fAf/CdCgM9oA9i4Soq3nQwhDC6TZ509H/QhYmz76 599rio9gDWa9WYAAePmrZoggT7NiaL5RgJ6qocEzg3eu52fixAoVFOVnsxOSvI1Ehfrv uS55uhmjVxaK/tfRf6xFlvk1RIx0xiuSx/cBCfi1NZzlWd4LJrrejm9gs7SDX2xbGvv8 0/NA== 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=rqvvnvokXkoku3Es5PfYdus6e0X0eMIUBESKSyd+1kg=; b=utPjfMb9TiGAVJ3fKAC4gCe2VSkXlttZBU5QuYjIUZpQ/hbJRp1bcq5H4opg2u/Xp3 +m/trgNx9R3Vv98YmYQlN43IktlP7J0erjDDpechqt1sl3lsSeVR3vX+OAselAYNPPwN s5z6njLFWgbOasxDh/qpq8xpKE5NsEEA2BqTXnzIMYcTNrUerluqwM3iJABrMDSxsHWD ZmDFf//XWMYX8H8AFfg3HwBaD6IQE8j1+P2fWik/Ap5+OPidQhCdZ1O8oGSQh0mayvS8 uqP9Q2DnxFOCD6u0je4xBD0Ldo6QDVKZOnsXNfcxgLc13/hK0NNNqh7oUFTlorYQEGlo B3bQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=smwgEOHr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l1si14124777ejo.949.2022.02.22.06.15.26; Tue, 22 Feb 2022 06:15:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=smwgEOHr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232501AbiBVNm1 (ORCPT + 99 others); Tue, 22 Feb 2022 08:42:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232444AbiBVNmV (ORCPT ); Tue, 22 Feb 2022 08:42:21 -0500 Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20DC68BE16 for ; Tue, 22 Feb 2022 05:41:55 -0800 (PST) Received: by mail-io1-xd31.google.com with SMTP id t11so14334722ioi.7 for ; Tue, 22 Feb 2022 05:41:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=rqvvnvokXkoku3Es5PfYdus6e0X0eMIUBESKSyd+1kg=; b=smwgEOHrMzHvWEqQZpCYnR1qnmPv0h05cUoWdwwjXgT8rgeVVQ0m07fclL3Ojk0j0d ES/mFVmFimqCDzAMrxJcnV1gIuCyNHkLDqZro3f27LIQOYbDJyUBhc7kUHQkNsQTCaBG B4hDSNeoz2GWyDQ5FzWLlWjAk0/ubs0J4wHZqifWx5nyn15pIwbmfk71PqwwkmbV9MYv KnRpviNhcntmnIl6lzorZ+jJPw5lHSvpkWQdGb7h/J4EER4SvGwFPVOFFAO2LVqE9x/U u3GrAVFPjbtTJoXSFaev58sEjOgsydjikhcw52U9KgagY+bTrFLSOXUt3e/dHLHeyTMq Xehw== 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=rqvvnvokXkoku3Es5PfYdus6e0X0eMIUBESKSyd+1kg=; b=6tJQvTSeABPtvjVjRXyLuc8LR3qI4BcWt5oMtTNlJjZ5DvFj22Xbx1Vd6Tum0zuG/2 oEraPbhBPzdtrYKwGbfcghk66ti5C5grPOdARkfUfYpqwWu8J/fg6g+M7ZUcmJk99ApE +TfWBsRoE7YW5ZDOMi943t4xFwmXBVZXIQN+IfxBXFLrIEDcQkZvLOczV4kl/J6uc3fX RJEGzeB35sKhzkXXHI9lEeSt0FTqdckSo6Rgki3O8XJR3bWwIyoMH+eLoKMAYw/B0Vtr Dz+cmtlKJAWgbxtSM4b+VPv/5UNbQWM1WO2Ydg9Vpi3C1FL95aY8j/xkVtURP973dcss 9h1Q== X-Gm-Message-State: AOAM530rRrJw1u6ilqNTorAkwuCBquwIJL+w7TrJdXLGHynEE19dWMlu K+IOrOgvOsZ70XogQkR2ANaufQ== X-Received: by 2002:a02:c551:0:b0:314:ac09:428d with SMTP id g17-20020a02c551000000b00314ac09428dmr16309457jaj.0.1645537313552; Tue, 22 Feb 2022 05:41:53 -0800 (PST) Received: from [172.22.22.26] (c-73-185-129-58.hsd1.mn.comcast.net. [73.185.129.58]) by smtp.googlemail.com with ESMTPSA id x11sm840461ilg.22.2022.02.22.05.41.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 22 Feb 2022 05:41:52 -0800 (PST) Message-ID: <0fa2922e-ad3c-6ca3-f6c2-b8838d0cafcf@linaro.org> Date: Tue, 22 Feb 2022 07:41:51 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v3 13/25] bus: mhi: ep: Add support for sending events to the host Content-Language: en-US To: Manivannan Sadhasivam Cc: mhi@lists.linux.dev, quic_hemantk@quicinc.com, quic_bbhatt@quicinc.com, quic_jhugo@quicinc.com, vinod.koul@linaro.org, bjorn.andersson@linaro.org, dmitry.baryshkov@linaro.org, quic_vbadigan@quicinc.com, quic_cang@quicinc.com, quic_skananth@quicinc.com, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20220212182117.49438-1-manivannan.sadhasivam@linaro.org> <20220212182117.49438-14-manivannan.sadhasivam@linaro.org> <3396cc98-8640-8f5a-fad3-c7a913faaa58@linaro.org> <20220222060623.GA5029@thinkpad> From: Alex Elder In-Reply-To: <20220222060623.GA5029@thinkpad> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,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 2/22/22 12:06 AM, Manivannan Sadhasivam wrote: > On Tue, Feb 15, 2022 at 04:39:17PM -0600, Alex Elder wrote: >> On 2/12/22 12:21 PM, Manivannan Sadhasivam wrote: >>> Add support for sending the events to the host over MHI bus from the >>> endpoint. Following events are supported: >>> >>> 1. Transfer completion event >>> 2. Command completion event >>> 3. State change event >>> 4. Execution Environment (EE) change event >>> >>> An event is sent whenever an operation has been completed in the MHI EP >>> device. Event is sent using the MHI event ring and additionally the host >>> is notified using an IRQ if required. >>> >>> Signed-off-by: Manivannan Sadhasivam >> >> A few things can be simplified here. >> >> -Alex >> >>> --- >>> drivers/bus/mhi/common.h | 15 ++++ >>> drivers/bus/mhi/ep/internal.h | 8 ++- >>> drivers/bus/mhi/ep/main.c | 126 ++++++++++++++++++++++++++++++++++ >>> include/linux/mhi_ep.h | 8 +++ >>> 4 files changed, 155 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/bus/mhi/common.h b/drivers/bus/mhi/common.h >>> index 728c82928d8d..26d94ed52b34 100644 >>> --- a/drivers/bus/mhi/common.h >>> +++ b/drivers/bus/mhi/common.h >>> @@ -176,6 +176,21 @@ >>> #define MHI_TRE_GET_EV_LINKSPEED(tre) ((MHI_TRE_GET_DWORD(tre, 1) >> 24) & 0xFF) >>> #define MHI_TRE_GET_EV_LINKWIDTH(tre) (MHI_TRE_GET_DWORD(tre, 0) & 0xFF) >>> +/* State change event */ >>> +#define MHI_SC_EV_PTR 0 >>> +#define MHI_SC_EV_DWORD0(state) cpu_to_le32(state << 24) >>> +#define MHI_SC_EV_DWORD1(type) cpu_to_le32(type << 16) >>> + >>> +/* EE event */ >>> +#define MHI_EE_EV_PTR 0 >>> +#define MHI_EE_EV_DWORD0(ee) cpu_to_le32(ee << 24) >>> +#define MHI_EE_EV_DWORD1(type) cpu_to_le32(type << 16) >>> + >>> +/* Command Completion event */ >>> +#define MHI_CC_EV_PTR(ptr) cpu_to_le64(ptr) >>> +#define MHI_CC_EV_DWORD0(code) cpu_to_le32(code << 24) >>> +#define MHI_CC_EV_DWORD1(type) cpu_to_le32(type << 16) >>> + >>> /* Transfer descriptor macros */ >>> #define MHI_TRE_DATA_PTR(ptr) cpu_to_le64(ptr) >>> #define MHI_TRE_DATA_DWORD0(len) cpu_to_le32(len & MHI_MAX_MTU) >>> diff --git a/drivers/bus/mhi/ep/internal.h b/drivers/bus/mhi/ep/internal.h >>> index 48d6e9667d55..fd63f79c6aec 100644 >>> --- a/drivers/bus/mhi/ep/internal.h >>> +++ b/drivers/bus/mhi/ep/internal.h >>> @@ -131,8 +131,8 @@ enum mhi_ep_ring_type { >>> }; >>> struct mhi_ep_ring_element { >>> - u64 ptr; >>> - u32 dword[2]; >>> + __le64 ptr; >>> + __le32 dword[2]; >> >> Yay! >> >>> }; >>> /* Ring element */ >>> @@ -227,4 +227,8 @@ void mhi_ep_mmio_get_mhi_state(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_state *s >>> void mhi_ep_mmio_init(struct mhi_ep_cntrl *mhi_cntrl); >>> void mhi_ep_mmio_update_ner(struct mhi_ep_cntrl *mhi_cntrl); >>> +/* MHI EP core functions */ >>> +int mhi_ep_send_state_change_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_state state); >>> +int mhi_ep_send_ee_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ep_execenv exec_env); >>> + >>> #endif >>> diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c >>> index 2c8045766292..61f066c6286b 100644 >>> --- a/drivers/bus/mhi/ep/main.c >>> +++ b/drivers/bus/mhi/ep/main.c > > [...] > >>> +static int mhi_ep_send_completion_event(struct mhi_ep_cntrl *mhi_cntrl, >>> + struct mhi_ep_ring *ring, u32 len, >>> + enum mhi_ev_ccs code) >>> +{ >>> + struct mhi_ep_ring_element event = {}; >>> + __le32 tmp; >>> + >>> + event.ptr = le64_to_cpu(ring->ring_ctx->generic.rbase) + >>> + ring->rd_offset * sizeof(struct mhi_ep_ring_element); >> >> I'm not sure at the moment where this will be called. But >> it might be easier to pass in the transfer channel pointer >> rather than compute its address here. As I recall, I made this comment thinking that in the context of the caller, the ring element address might be known; but I didn't look at those calling locations to see. In any case, what you do here looks correct, so that's fine. -Alex > Passing the ring element to these functions won't help. Because, the ring > element only has the address of the buffer it points to. But what we need here > is the address of the ring element itself and that can only be found in ring > context. > > Thanks, > Mani