Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp149433ybc; Mon, 18 Nov 2019 22:13:48 -0800 (PST) X-Google-Smtp-Source: APXvYqy7IBKcf4MUpl9pZLckQ7qse520tsnmVpBEob1oslF1e9Q4YvBB2vMNqzkg5QYeXbMK1+C4 X-Received: by 2002:a17:906:5211:: with SMTP id g17mr33116426ejm.60.1574144027900; Mon, 18 Nov 2019 22:13:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574144027; cv=none; d=google.com; s=arc-20160816; b=xw2/LuZ/Z9bEgGpXTOSk6oFqPTzj7HFSkBvvVUoXR4psbfbLADLpoCj8RSo+sU/CS0 0EQ05S82dQKDDWXyurTrUDjbIBtqW2wpCz9spsqjK1OTUUU8efiTrCh/YAZ+2zC0yxsI 8DGpyQwjMTu8KmlyyAMpqNho4y76huN9aFI+d9p+pYw16KwVkzpsNpr60DzXSG1lmKVL DN4oEyjtVxYj/RG9rO/cMpPBEEJ7bvFpmahbvoGgqtS6aHl5pMRsz+5wd+oN5kdiU+sw YiRs/MA8V9s0kr4YRGlDdalMn1igL1QqW90X/UFV+zlZ8ELuqw4bEDnYYD4dKwmgJEev TqXw== 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; bh=BxmcXb2iYeKjfhmWiGncukdAjzMV9uDQWOXYvXvpP6g=; b=wEibDG/MNn0sugCa34Be8xuKLYLsUlb3Yl8YnuN0ve5UWzyBFTlMYk8TD0F8qrE8bO 0cy1EwcKg9Kya8CLxw5asbVlgoVsE5tAxTui7/CDfBajMYZIUPSqWzBqM1nFTldUumG6 Sgxy2CCIgImUuqKNeDXH5gp+0eJDsTUDgywSRS4HXmhTGEp49t2yeqU+7WUBGH9vk8UP LFopmeSd35lQ4btBsgBQgXNnteIfbdTPdbbUkwTazhnPE22lYvJk503xmLKXmmtvHgFV rkilffFaDtOOQb/8Jkotnl7Hnh7ruo+5IKyKSsOkDhY+EsBoF+ZQq1i1ScYeAHCnFgKW TsVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-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 rv12si12908312ejb.372.2019.11.18.22.13.21; Mon, 18 Nov 2019 22:13:47 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-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-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728462AbfKSFZx convert rfc822-to-8bit (ORCPT + 99 others); Tue, 19 Nov 2019 00:25:53 -0500 Received: from coyote.holtmann.net ([212.227.132.17]:58369 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728444AbfKSFZw (ORCPT ); Tue, 19 Nov 2019 00:25:52 -0500 Received: from marcel-macbook.holtmann.net (p4FF9F0D1.dip0.t-ipconnect.de [79.249.240.209]) by mail.holtmann.org (Postfix) with ESMTPSA id A7DE8CECED; Tue, 19 Nov 2019 06:34:57 +0100 (CET) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3601.0.10\)) Subject: Re: [PATCH v6 1/4] Bluetooth: hci_bcm: Disallow set_baudrate for BCM4354 From: Marcel Holtmann In-Reply-To: <20191118110335.v6.1.I8ed714e23fdf42fa35588cfee2877b53d781df12@changeid> Date: Tue, 19 Nov 2019 06:25:50 +0100 Cc: Johan Hedberg , Rob Herring , linux-bluetooth@vger.kernel.org, dianders@chromium.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8BIT Message-Id: <5C8B480B-E8DE-4A90-B33C-0A8AF8BD4FF8@holtmann.org> References: <20191118192123.82430-1-abhishekpandit@chromium.org> <20191118110335.v6.1.I8ed714e23fdf42fa35588cfee2877b53d781df12@changeid> To: Abhishek Pandit-Subedi X-Mailer: Apple Mail (2.3601.0.10) Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Abhishek, > Without updating the patchram, the BCM4354 does not support a higher > operating speed. The normal bcm_setup follows the correct order > (init_speed, patchram and then oper_speed) but the serdev driver will > set the operating speed before calling the hu->setup function. Thus, > for the BCM4354, don't set the operating speed before patchram. > > Signed-off-by: Abhishek Pandit-Subedi > --- > > Changes in v6: None > Changes in v5: None > Changes in v4: None > Changes in v3: None > Changes in v2: None > > drivers/bluetooth/hci_bcm.c | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c > index 0f851c0dde7f..ee40003008d8 100644 > --- a/drivers/bluetooth/hci_bcm.c > +++ b/drivers/bluetooth/hci_bcm.c > @@ -47,6 +47,14 @@ > > #define BCM_NUM_SUPPLIES 2 > > +/** > + * struct bcm_device_data - device specific data > + * @no_early_set_baudrate: Disallow set baudrate before driver setup() > + */ > +struct bcm_device_data { > + bool no_early_set_baudrate; > +}; > + > /** > * struct bcm_device - device driver resources > * @serdev_hu: HCI UART controller struct > @@ -79,6 +87,7 @@ > * @hu: pointer to HCI UART controller struct, > * used to disable flow control during runtime suspend and system sleep > * @is_suspended: whether flow control is currently disabled > + * @no_early_set_baudrate: don't set_baudrate before setup() > */ > struct bcm_device { > /* Must be the first member, hci_serdev.c expects this. */ > @@ -112,6 +121,7 @@ struct bcm_device { > struct hci_uart *hu; > bool is_suspended; > #endif > + bool no_early_set_baudrate; > }; > > /* generic bcm uart resources */ > @@ -447,7 +457,13 @@ static int bcm_open(struct hci_uart *hu) > if (bcm->dev) { > hci_uart_set_flow_control(hu, true); > hu->init_speed = bcm->dev->init_speed; > - hu->oper_speed = bcm->dev->oper_speed; > + > + /* If oper_speed is set, ldisc/serdev will set the baudrate > + * before calling setup() > + */ > + if (!bcm->dev->no_early_set_baudrate) > + hu->oper_speed = bcm->dev->oper_speed; > + > err = bcm_gpio_set_power(bcm->dev, true); > hci_uart_set_flow_control(hu, false); > if (err) > @@ -565,6 +581,8 @@ static int bcm_setup(struct hci_uart *hu) > /* Operational speed if any */ > if (hu->oper_speed) > speed = hu->oper_speed; > + else if (bcm->dev && bcm->dev->oper_speed) > + speed = bcm->dev->oper_speed; > else if (hu->proto->oper_speed) > speed = hu->proto->oper_speed; > else > @@ -1374,6 +1392,7 @@ static struct platform_driver bcm_driver = { > static int bcm_serdev_probe(struct serdev_device *serdev) > { > struct bcm_device *bcmdev; > + const struct bcm_device_data *data; > int err; > > bcmdev = devm_kzalloc(&serdev->dev, sizeof(*bcmdev), GFP_KERNEL); > @@ -1408,6 +1427,10 @@ static int bcm_serdev_probe(struct serdev_device *serdev) > if (err) > dev_err(&serdev->dev, "Failed to power down\n"); > > + data = device_get_match_data(bcmdev->dev); > + if (data) > + bcmdev->no_early_set_baudrate = data->no_early_set_baudrate; > + > return hci_uart_register_device(&bcmdev->serdev_hu, &bcm_proto); > } > > @@ -1419,12 +1442,16 @@ static void bcm_serdev_remove(struct serdev_device *serdev) > } > > #ifdef CONFIG_OF > +struct bcm_device_data bcm4354_device_data = { > + .no_early_set_baudrate = true, > +}; > + > static const struct of_device_id bcm_bluetooth_of_match[] = { > { .compatible = "brcm,bcm20702a1" }, > { .compatible = "brcm,bcm4345c5" }, > { .compatible = "brcm,bcm4330-bt" }, > { .compatible = "brcm,bcm43438-bt" }, > - { .compatible = "brcm,bcm43540-bt" }, > + { .compatible = "brcm,bcm43540-bt", .data = &bcm4354_device_data }, > { }, > }; > MODULE_DEVICE_TABLE(of, bcm_bluetooth_of_match); this patch looks good to me. I just like to get a few Tested-By lines from people using the other devices where we can change the baud rate early on. Regards Marcel