Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp2795749iog; Mon, 20 Jun 2022 05:06:32 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uRQWa1EXT/eIIv1Savm+VTdVI3hC+FN5MGzKjAWaUZJGCPJIU2jrhjXLIk/Rq/lqLNyxzb X-Received: by 2002:a17:907:6e9f:b0:711:d2cb:63d8 with SMTP id sh31-20020a1709076e9f00b00711d2cb63d8mr20521165ejc.232.1655726791902; Mon, 20 Jun 2022 05:06:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655726791; cv=none; d=google.com; s=arc-20160816; b=Z1FAXpwH6KwDRvk708oj0NpTO4v5+d6cW8szI1HwXmTy9cQP/UTP6rJtw2PgjtcSTa +NAbkyCvY6HxntrKINrzxL7k+qCb/ZdYxfzUNbufR+XFnxelW4GxpJQNgTJjuRv7WFak PN2rqPueORfsAT2PKEg+BHYYIMh6U8GsVwBiczh19xnJaoh89SQnwrx1mewfZocFY9Kc +QB760e3VeUkdW0sM/WZcGh7MLAszJLWRH8zbl4MhAumv6H+Kg8Ekfqmrc+EeV/KSuMJ 5t8VCY/nXAJxMhn86bUF1+7FYqHRnTyo1yqjFbgLWQws6nO951MTjNVar7PqJl6JABTb yAFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from :dkim-signature; bh=Avmquxpsdy37y3f8i8OasPFMefTW8vQc6D5/Uze/TcQ=; b=ff+U+eHyEq9dbbIKYUbxIns6+ej2l0WDvE+D43G1BfqjiS/JQkxaA3PArsDKF6mEUr LmETsmZYsrkGoACBuIsr2f2OvCyok7vMQ/FFcAqrCB83uy6V4luPUcyPuZliP9OjhZUy TbhScZYZQGZqAhLQ+f6xwEnB+STMO/E6USI5W70Slo/NJpdJ7Rc9oMnIr2czwPEFnP/V buMAkBzI+00Dj410p/gJlkzvF1NduL91ONRcY58Z4GHVJyBz6urQrBAVFr3r9hEx5lN+ PrzomGNB2tCunXeum97MIm5x1nTUITLhA+tERiGtx636O21HBPkJA2zYR0aDPIOxMwWp haHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infineon.com header.s=IFXMAIL header.b=Z7UDaHXg; 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=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n8-20020a50cc48000000b0042bcd41832fsi10424054edi.400.2022.06.20.05.06.05; Mon, 20 Jun 2022 05:06:31 -0700 (PDT) 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=fail header.i=@infineon.com header.s=IFXMAIL header.b=Z7UDaHXg; 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=fail (p=NONE sp=NONE dis=NONE) header.from=infineon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240896AbiFTMDM (ORCPT + 99 others); Mon, 20 Jun 2022 08:03:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242089AbiFTMCl (ORCPT ); Mon, 20 Jun 2022 08:02:41 -0400 Received: from smtp2.infineon.com (smtp2.infineon.com [IPv6:2a00:18f0:1e00:4::4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A72D18380; Mon, 20 Jun 2022 05:02:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infineon.com; i=@infineon.com; q=dns/txt; s=IFXMAIL; t=1655726560; x=1687262560; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mcU2zd605tdGXObukOV2l4wgt38ac82d1qr3NR5XZ4s=; b=Z7UDaHXgELPH/zR4+23dq3dPylvSdCLLvZULsOjkrxhe1drLZhXtgCm4 yu65OeCcCVnrKDw8xDL93w7rwBDsRV+0G6jE/xSoUXdqzyGswgIggptlk nm+Bs6eHXga0f/K9FgTIsNxWQTAfc5FH4NlxYu6Wf/9K5TfeDhmxK5gRF k=; X-SBRS: None X-IronPort-AV: E=McAfee;i="6400,9594,10380"; a="184450176" X-IronPort-AV: E=Sophos;i="5.92,306,1650924000"; d="scan'208";a="184450176" Received: from unknown (HELO mucxv002.muc.infineon.com) ([172.23.11.17]) by smtp2.infineon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jun 2022 14:02:35 +0200 Received: from MUCSE819.infineon.com (MUCSE819.infineon.com [172.23.29.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mucxv002.muc.infineon.com (Postfix) with ESMTPS; Mon, 20 Jun 2022 14:02:35 +0200 (CEST) Received: from MUCSE807.infineon.com (172.23.29.33) by MUCSE819.infineon.com (172.23.29.45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Mon, 20 Jun 2022 14:02:35 +0200 Received: from ISCNPF0RJXQS.infineon.com (172.23.8.247) by MUCSE807.infineon.com (172.23.29.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Mon, 20 Jun 2022 14:02:34 +0200 From: Hakan Jansson CC: Hakan Jansson , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Linus Walleij , , , , Marcel Holtmann , Johan Hedberg , "Luiz Augusto von Dentz" , Subject: [PATCH 4/4] Bluetooth: hci_bcm: Increase host baudrate for CYW55572 in autobaud mode Date: Mon, 20 Jun 2022 14:01:29 +0200 Message-ID: <386b205422099c795272ad8b792091b692def3cd.1655723462.git.hakan.jansson@infineon.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.23.8.247] X-ClientProxiedBy: MUCSE805.infineon.com (172.23.29.31) To MUCSE807.infineon.com (172.23.29.33) X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add device specific data for max baudrate in autobaud mode. This allows the host to use a baudrate higher than "init speed" when loading FW in autobaud mode. Signed-off-by: Hakan Jansson --- drivers/bluetooth/hci_bcm.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c index 0ae627c293c5..d7e0b75db8a6 100644 --- a/drivers/bluetooth/hci_bcm.c +++ b/drivers/bluetooth/hci_bcm.c @@ -53,10 +53,12 @@ * struct bcm_device_data - device specific data * @no_early_set_baudrate: Disallow set baudrate before driver setup() * @drive_rts_on_open: drive RTS signal on ->open() when platform requires it + * @max_autobaud_speed: max baudrate supported by device in autobaud mode */ struct bcm_device_data { bool no_early_set_baudrate; bool drive_rts_on_open; + u32 max_autobaud_speed; }; /** @@ -100,6 +102,7 @@ struct bcm_device_data { * @drive_rts_on_open: drive RTS signal on ->open() when platform requires it * @pcm_int_params: keep the initial PCM configuration * @use_autobaud_mode: start Bluetooth device in autobaud mode + * @max_autobaud_speed: max baudrate supported by device in autobaud mode */ struct bcm_device { /* Must be the first member, hci_serdev.c expects this. */ @@ -139,6 +142,7 @@ struct bcm_device { bool drive_rts_on_open; bool use_autobaud_mode; u8 pcm_int_params[5]; + u32 max_autobaud_speed; }; /* generic bcm uart resources */ @@ -479,7 +483,10 @@ static int bcm_open(struct hci_uart *hu) else if (bcm->dev->drive_rts_on_open) hci_uart_set_flow_control(hu, true); - hu->init_speed = bcm->dev->init_speed; + if (bcm->dev->use_autobaud_mode && bcm->dev->max_autobaud_speed) + hu->init_speed = min(bcm->dev->oper_speed, bcm->dev->max_autobaud_speed); + else + hu->init_speed = bcm->dev->init_speed; /* If oper_speed is set, ldisc/serdev will set the baudrate * before calling setup() @@ -585,8 +592,8 @@ static int bcm_setup(struct hci_uart *hu) return 0; /* Init speed if any */ - if (hu->init_speed) - speed = hu->init_speed; + if (bcm->dev && bcm->dev->init_speed) + speed = bcm->dev->init_speed; else if (hu->proto->init_speed) speed = hu->proto->init_speed; else @@ -1519,6 +1526,7 @@ static int bcm_serdev_probe(struct serdev_device *serdev) data = device_get_match_data(bcmdev->dev); if (data) { + bcmdev->max_autobaud_speed = data->max_autobaud_speed; bcmdev->no_early_set_baudrate = data->no_early_set_baudrate; bcmdev->drive_rts_on_open = data->drive_rts_on_open; } @@ -1542,6 +1550,10 @@ static struct bcm_device_data bcm43438_device_data = { .drive_rts_on_open = true, }; +static struct bcm_device_data cyw55572_device_data = { + .max_autobaud_speed = 921600, +}; + static const struct of_device_id bcm_bluetooth_of_match[] = { { .compatible = "brcm,bcm20702a1" }, { .compatible = "brcm,bcm4329-bt" }, @@ -1554,7 +1566,7 @@ static const struct of_device_id bcm_bluetooth_of_match[] = { { .compatible = "brcm,bcm4349-bt", .data = &bcm43438_device_data }, { .compatible = "brcm,bcm43540-bt", .data = &bcm4354_device_data }, { .compatible = "brcm,bcm4335a0" }, - { .compatible = "infineon,cyw55572-bt" }, + { .compatible = "infineon,cyw55572-bt", .data = &cyw55572_device_data }, { }, }; MODULE_DEVICE_TABLE(of, bcm_bluetooth_of_match); -- 2.25.1