Received: by 10.192.165.148 with SMTP id m20csp3983071imm; Tue, 8 May 2018 00:28:25 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq/BP3Uy1BJ0XaBMDdhGft/EY31Q03GCZTTInAlRoyu6cGAXk/NkbpNxM4G8Rhx6x6a0z8o X-Received: by 2002:a65:6498:: with SMTP id e24-v6mr13000670pgv.360.1525764505558; Tue, 08 May 2018 00:28:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525764505; cv=none; d=google.com; s=arc-20160816; b=y5g+ne2jVHdFJJSQ0g0qFBFrjvxOSCYVJ4y4VGk+JWGRnr2DhlE9wcu+6vx5arOpIv 5e+Fb2+3RencdxiBKP5cbPHADLL7Edxl5gPfrv4CIJd35/gg8zr3qh5lo4Tu+5tScVZ9 F8RylbVEP/b3srsWVagU0tCxyfCIbWSoUKcchfB1JAVpcmXDRXjB3BMqPT6gJ4VqetAM ZLUTuUxNaLcFio5cSFHThdj3pwDKKOMB+R8Qu/dTm/05NpxGUiTQZ7VN/A0TT4ZocdcQ hvK+tCx4AAwI+6GEUnoyQiUzvznIEWqBWs5/hHRUNZ4/rNGf4Qjgi2HEeF6WzGNBGY8Y LTcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version:arc-authentication-results; bh=omkZ8E8thH3fWlRQZk8ovQQ/0DN+vYg+H5VyQjIYr74=; b=sfKhWtHl4QFr7TSEFSPnVn3q5pgoGpdfpc6KI21FGOmktaUKD5qbgsq0N2o5AcNuyZ 8PUlqsaXOM2kcGQZpkkPqZA4YjN7I4XmEmsZc9h08fi5nXIkfD+FtHq4YauAubKNXQs8 rWYsHHahCrcresjtyJyHgVYeqpunIImI5RY6K8bWinlVvqNLtLiBLf5CKK7spo+jhiy2 QuXKyzHHJckA4uSn1DkThKs3/zyxjKUts4rNbX8eci2/k16bcuG9fkJVLXwDPwQaBx3p MJD8oZV8aRlXtUcgla44oC5Uuu/z07sXnuPCA7WQ4Ed0TUXFZTd9D/Ksw7wlUivnGFWL 3eUw== ARC-Authentication-Results: i=1; mx.google.com; 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 n15-v6si919906pgu.118.2018.05.08.00.28.10; Tue, 08 May 2018 00:28:25 -0700 (PDT) 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; 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 S1754700AbeEHH1x convert rfc822-to-8bit (ORCPT + 99 others); Tue, 8 May 2018 03:27:53 -0400 Received: from coyote.holtmann.net ([212.227.132.17]:42619 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753419AbeEHH1v (ORCPT ); Tue, 8 May 2018 03:27:51 -0400 Received: from marcel-macpro.fritz.box (p5B3D2CDF.dip0.t-ipconnect.de [91.61.44.223]) by mail.holtmann.org (Postfix) with ESMTPSA id 8B058CEE9C; Tue, 8 May 2018 09:34:18 +0200 (CEST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 11.3 \(3445.6.18\)) Subject: Re: [PATCH v1 6/7] Bluetooth: hci_mediatek: Add protocol support for MediaTek serial devices From: Marcel Holtmann In-Reply-To: <1525762084.14468.20.camel@mtkswgap22> Date: Tue, 8 May 2018 09:27:48 +0200 Cc: Rob Herring , Mark Rutland , Johan Hedberg , devicetree , BlueZ development , linux-arm-kernel , linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8BIT Message-Id: References: <1525762084.14468.20.camel@mtkswgap22> To: Sean Wang X-Mailer: Apple Mail (2.3445.6.18) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sean, >>> + >>> +static int mtk_wmt_cmd_sync(struct hci_uart *hu, u8 opcode, u8 flag, u16 plen, >>> + const void *param) >>> +{ >>> + struct mtk_bt_dev *btdev = hu->priv; >>> + struct hci_command_hdr *hhdr; >>> + struct hci_acl_hdr *ahdr; >>> + struct mtk_wmt_hdr *whdr; >>> + struct sk_buff *skb; >>> + int ret = 0; >>> + >>> + init_completion(&btdev->wmt_cmd); >>> + >>> + skb = bt_skb_alloc(plen + MTK_WMT_CMD_SIZE, GFP_KERNEL); >>> + if (!skb) >>> + return -ENOMEM; >>> + >>> + /* >>> + * WMT data is carried in either ACL or HCI format with op code as >>> + * 0xfc6f and followed by a WMT header and its actual payload. >>> + */ >> >> Please use net subsystem comment style. >> >>> + switch (opcode) { >>> + case MTK_WMT_PATCH_DWNLD: >>> + ahdr = skb_put(skb, HCI_ACL_HDR_SIZE); >>> + ahdr->handle = cpu_to_le16(0xfc6f); >>> + ahdr->dlen = cpu_to_le16(plen + MTK_WMT_HDR_SIZE); >>> + break; >>> + default: >>> + hhdr = skb_put(skb, HCI_COMMAND_HDR_SIZE); >>> + hhdr->opcode = cpu_to_le16(0xfc6f); >>> + hhdr->plen = plen + MTK_WMT_HDR_SIZE; >>> + break; >>> + } >>> + >>> + hci_skb_pkt_type(skb) = opcode == MTK_WMT_PATCH_DWNLD ? >>> + HCI_ACLDATA_PKT : HCI_COMMAND_PKT; >> >> Why not move that into the switch statement above. >> >>> + >>> + /* Start to build a WMT header and its actual payload. */ >>> + whdr = skb_put(skb, MTK_WMT_HDR_SIZE); >>> + whdr->dir = 1; >>> + whdr->op = opcode; >>> + whdr->dlen = cpu_to_le16(plen + 1); >>> + whdr->flag = flag; >>> + skb_put_data(skb, param, plen); >>> + >>> + mtk_enqueue(hu, skb); >>> + hci_uart_tx_wakeup(hu); >>> + >>> + /* >>> + * Waiting a WMT event response, while we must take care in case of >>> + * failures for the wait. >>> + */ >>> + ret = wait_for_completion_interruptible_timeout(&btdev->wmt_cmd, HZ); >>> + >>> + return ret > 0 ? 0 : ret < 0 ? ret : -ETIMEDOUT; >>> +} >> >> All in all I am not convinced that this is super clean. I get that we need something special for having this in the ACL data packets, but for the standard HCI command I prefer that __hci_cmd_sync is used. I addition, it seems that patch download is the only special case and that happens before at the setup stage. So we could make things special for that. I need to understand this a bit better. Can I get a btmon -w trace.log file from the whole init procedure. >> > > While i was trying to rewrite the driver based on btuart.c. you posted > on RFC, I used __hci_cmd_sync_ev to replace such kinds of SoC specific > hci command sending which I've done previously with mtk_wmt_cmd_sync. > > However, eventually, I got a cmd_timer timeout whose message printed > on console as "Bluetooth: hci0: command 0xfc6f tx timeout". > > The mtk soc specific cmd/event I posted below, I dumped directly in > driver, always uses cmd as opcode 0xfc6f, and its event id as 0xe4. > > It appears to the event id is not standard and thus it cannot cancel the > cmd timer when the special hci event is being handled. This way can we > can still use __hci_cmd_sync api ? > > [ 4.896200] hci tx: 00000000: 01 6f fc 05 01 07 01 00 04 > [ 4.904671] hci rx: 00000000: e4 05 02 07 01 00 > 00 > [ 4.912859] Bluetooth: hci0 event 0xe4 > > > buildroot login: [ 6.914509] Bluetooth: hci0: command 0xfc6f tx > timeout > [ 6.919831] hci tx: 00000000: 01 6f fc 06 01 06 02 00 00 > 01 .o........ > [ 7.006631] hci rx: 00000000: e4 05 02 06 01 00 > 00 ....... > [ 7.014821] Bluetooth: hci0 event 0xe4 can you just start btmon before loading the module / driver? It makes it a lot easier since it will actually decode the basics for us. If there is a bug within __hci_cmd_sync_ev, then we are going to fix it. So all the MTK vendor commands respond with a vendor event? Or are there some that do the standard command status/complete handling? Regards Marcel