Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PW_SID:838554] [next] Bluetooth: L2CAP: Avoid -Wflex-array-member-not-at-end warnings #1506

Closed
wants to merge 14 commits into from

Commits on Mar 11, 2024

  1. Bluetooth: btintel: Define macros for image types

    Use macro for image type instead of using hard code number.
    
    Signed-off-by: Kiran K <kiran.k@intel.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    kirankrishnappa-intel authored and Vudentz committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    cf53bd7 View commit details
    Browse the repository at this point in the history
  2. Bluetooth: btintel: Add support to download intermediate loader

    Some variants of Intel controllers like BlazarI supports downloading of
    Intermediate bootloader (IML) image. IML gives flexibility to fix issues as its
    not possible to fix issue in Primary bootloader once flashed to ROM. This patch
    adds the support to download IML before downloading operational firmware image.
    
    dmesg logs:
    [13.399003] Bluetooth: Core ver 2.22
    [13.399006] Bluetooth: Starting self testing
    [13.401194] Bluetooth: ECDH test passed in 2135 usecs
    [13.421175] Bluetooth: SMP test passed in 597 usecs
    [13.421184] Bluetooth: Finished self testing
    [13.422919] Bluetooth: HCI device and connection manager initialized
    [13.422923] Bluetooth: HCI socket layer initialized
    [13.422925] Bluetooth: L2CAP socket layer initialized
    [13.422930] Bluetooth: SCO socket layer initialized
    [13.458065] Bluetooth: hci0: Device revision is 0
    [13.458071] Bluetooth: hci0: Secure boot is disabled
    [13.458072] Bluetooth: hci0: OTP lock is disabled
    [13.458072] Bluetooth: hci0: API lock is enabled
    [13.458073] Bluetooth: hci0: Debug lock is disabled
    [13.458073] Bluetooth: hci0: Minimum firmware build 1 week 10 2014
    [13.458075] Bluetooth: hci0: Bootloader timestamp 2022.46 buildtype 1 build 26590
    [13.458324] Bluetooth: hci0: DSM reset method type: 0x00
    [13.460678] Bluetooth: hci0: Found device firmware: intel/ibt-0090-0291-iml.sfi
    [13.460684] Bluetooth: hci0: Boot Address: 0x30099000
    [13.460685] Bluetooth: hci0: Firmware Version: 227-11.24
    [13.562554] Bluetooth: hci0: Waiting for firmware download to complete
    [13.563023] Bluetooth: hci0: Firmware loaded in 99941 usecs
    [13.563057] Bluetooth: hci0: Waiting for device to boot
    [13.565029] Bluetooth: hci0: Malformed MSFT vendor event: 0x02
    [13.565148] Bluetooth: hci0: Device booted in 2064 usecs
    [13.567065] Bluetooth: hci0: No device address configured
    [13.569010] Bluetooth: hci0: Found device firmware: intel/ibt-0090-0291.sfi
    [13.569061] Bluetooth: hci0: Boot Address: 0x10000800
    [13.569062] Bluetooth: hci0: Firmware Version: 227-11.24
    [13.788891] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [13.788897] Bluetooth: BNEP filters: protocol multicast
    [13.788902] Bluetooth: BNEP socket layer initialized
    [15.435905] Bluetooth: hci0: Waiting for firmware download to complete
    [15.436016] Bluetooth: hci0: Firmware loaded in 1823233 usecs
    [15.436258] Bluetooth: hci0: Waiting for device to boot
    [15.471140] Bluetooth: hci0: Device booted in 34277 usecs
    [15.471201] Bluetooth: hci0: Malformed MSFT vendor event: 0x02
    [15.471487] Bluetooth: hci0: Found Intel DDC parameters: intel/ibt-0090-0291.ddc
    [15.474353] Bluetooth: hci0: Applying Intel DDC parameters completed
    [15.474486] Bluetooth: hci0: Found Intel DDC parameters: intel/bdaddress.cfg
    [15.475299] Bluetooth: hci0: Applying Intel DDC parameters completed
    [15.479381] Bluetooth: hci0: Firmware timestamp 2024.10 buildtype 3 build 58595
    [15.479385] Bluetooth: hci0: Firmware SHA1: 0xb4f3cc46
    [15.483243] Bluetooth: hci0: Fseq status: Success (0x00)
    [15.483246] Bluetooth: hci0: Fseq executed: 00.00.00.00
    [15.483247] Bluetooth: hci0: Fseq BT Top: 00.00.00.00
    [15.578712] Bluetooth: MGMT ver 1.22
    [15.822682] Bluetooth: RFCOMM TTY layer initialized
    [15.822690] Bluetooth: RFCOMM socket layer initialized
    [15.822695] Bluetooth: RFCOMM ver 1.11
    
    Signed-off-by: Kiran K <kiran.k@intel.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    kirankrishnappa-intel authored and Vudentz committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    32652c5 View commit details
    Browse the repository at this point in the history

Commits on Mar 16, 2024

  1. Bluetooth: Add support for MediaTek MT7922 device

    This patch adds support for the MediaTek MT7922 Bluetooth device.
    
    The information in /sys/kernel/debug/usb/devices about the MT7922
    is as follows:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=13d3 ProdID=3585 Rev= 1.00
    S:  Manufacturer=MediaTek Inc.
    S:  Product=Wireless_Device
    S:  SerialNumber=000000000
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
    A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
    I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
    
    Signed-off-by: Ian W MORRISON <ianwmorrison@live.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Ian W MORRISON authored and Vudentz committed Mar 16, 2024
    Configuration menu
    Copy the full SHA
    f4a0fc6 View commit details
    Browse the repository at this point in the history

Commits on Mar 20, 2024

  1. Bluetooth: ISO: Don't reject BT_ISO_QOS if parameters are unset

    Consider certain values (0x00) as unset and load proper default if
    an application has not set them properly.
    
    Fixes: 0fe8c8d ("Bluetooth: Split bt_iso_qos into dedicated structures")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Vudentz committed Mar 20, 2024
    Configuration menu
    Copy the full SHA
    60482ab View commit details
    Browse the repository at this point in the history

Commits on Mar 25, 2024

  1. Bluetooth: btqcomsmd: Convert to platform remove callback returning void

    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Uwe Kleine-König authored and Vudentz committed Mar 25, 2024
    Configuration menu
    Copy the full SHA
    5bffd66 View commit details
    Browse the repository at this point in the history
  2. Bluetooth: hci_bcm: Convert to platform remove callback returning void

    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Uwe Kleine-König authored and Vudentz committed Mar 25, 2024
    Configuration menu
    Copy the full SHA
    526f6c3 View commit details
    Browse the repository at this point in the history
  3. Bluetooth: hci_intel: Convert to platform remove callback returning void

    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Uwe Kleine-König authored and Vudentz committed Mar 25, 2024
    Configuration menu
    Copy the full SHA
    0dc3ce6 View commit details
    Browse the repository at this point in the history

Commits on Mar 26, 2024

  1. Revert "Bluetooth: hci_qca: Set BDA quirk bit if fwnode exists in DT"

    This reverts commit 7dcd3e0.
    
    Qualcomm Bluetooth controllers like WCN6855 do not have persistent
    storage for the Bluetooth address and must therefore start as
    unconfigured to allow the user to set a valid address unless one has
    been provided by the boot firmware in the devicetree.
    
    A recent change snuck into v6.8-rc7 and incorrectly started marking the
    default (non-unique) address as valid. This specifically also breaks the
    Bluetooth setup for some user of the Lenovo ThinkPad X13s.
    
    Note that this is the second time Qualcomm breaks the driver this way
    and that this was fixed last year by commit 6945795 ("Bluetooth:
    fix use-bdaddr-property quirk"), which also has some further details.
    
    Fixes: 7dcd3e0 ("Bluetooth: hci_qca: Set BDA quirk bit if fwnode exists in DT")
    Cc: stable@vger.kernel.org      # 6.8
    Cc: Janaki Ramaiah Thota <quic_janathot@quicinc.com>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Reported-by: Clayton Craft <clayton@craftyguy.net>
    Tested-by: Clayton Craft <clayton@craftyguy.net>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    jhovold authored and Vudentz committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    ac0cf35 View commit details
    Browse the repository at this point in the history
  2. dt-bindings: bluetooth: add 'qcom,local-bd-address-broken'

    Several Qualcomm Bluetooth controllers lack persistent storage for the
    device address and instead one can be provided by the boot firmware
    using the 'local-bd-address' devicetree property.
    
    The Bluetooth bindings clearly states that the address should be
    specified in little-endian order, but due to a long-standing bug in the
    Qualcomm driver which reversed the address some boot firmware has been
    providing the address in big-endian order instead.
    
    The only device out there that should be affected by this is the WCN3991
    used in some Chromebooks.
    
    Add a 'qcom,local-bd-address-broken' property which can be set on these
    platforms to indicate that the boot firmware is using the wrong byte
    order.
    
    Note that ChromeOS always updates the kernel and devicetree in lockstep
    so that there is no need to handle backwards compatibility with older
    devicetrees.
    
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    jhovold authored and Vudentz committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    ea56aab View commit details
    Browse the repository at this point in the history
  3. arm64: dts: qcom: sc7180-trogdor: mark bluetooth address as broken

    Several Qualcomm Bluetooth controllers lack persistent storage for the
    device address and instead one can be provided by the boot firmware
    using the 'local-bd-address' devicetree property.
    
    The Bluetooth bindings clearly states that the address should be
    specified in little-endian order, but due to a long-standing bug in the
    Qualcomm driver which reversed the address some boot firmware has been
    providing the address in big-endian order instead.
    
    The boot firmware in SC7180 Trogdor Chromebooks is known to be affected
    so mark the 'local-bd-address' property as broken to maintain backwards
    compatibility with older firmware when fixing the underlying driver bug.
    
    Note that ChromeOS always updates the kernel and devicetree in lockstep
    so that there is no need to handle backwards compatibility with older
    devicetrees.
    
    Fixes: 7ec3e67 ("arm64: dts: qcom: sc7180-trogdor: add initial trogdor and lazor dt")
    Cc: stable@vger.kernel.org      # 5.10
    Cc: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Acked-by: Bjorn Andersson <andersson@kernel.org>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    jhovold authored and Vudentz committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    c4406d9 View commit details
    Browse the repository at this point in the history
  4. Bluetooth: add quirk for broken address properties

    Some Bluetooth controllers lack persistent storage for the device
    address and instead one can be provided by the boot firmware using the
    'local-bd-address' devicetree property.
    
    The Bluetooth devicetree bindings clearly states that the address should
    be specified in little-endian order, but due to a long-standing bug in
    the Qualcomm driver which reversed the address some boot firmware has
    been providing the address in big-endian order instead.
    
    Add a new quirk that can be set on platforms with broken firmware and
    use it to reverse the address when parsing the property so that the
    underlying driver bug can be fixed.
    
    Fixes: 5c0a100 ("Bluetooth: hci_qca: Add helper to set device address")
    Cc: stable@vger.kernel.org      # 5.1
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    jhovold authored and Vudentz committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    ddaa064 View commit details
    Browse the repository at this point in the history
  5. Bluetooth: qca: fix device-address endianness

    The WCN6855 firmware on the Lenovo ThinkPad X13s expects the Bluetooth
    device address in big-endian order when setting it using the
    EDL_WRITE_BD_ADDR_OPCODE command.
    
    Presumably, this is the case for all non-ROME devices which all use the
    EDL_WRITE_BD_ADDR_OPCODE command for this (unlike the ROME devices which
    use a different command and expect the address in little-endian order).
    
    Reverse the little-endian address before setting it to make sure that
    the address can be configured using tools like btmgmt or using the
    'local-bd-address' devicetree property.
    
    Note that this can potentially break systems with boot firmware which
    has started relying on the broken behaviour and is incorrectly passing
    the address via devicetree in big-endian order.
    
    The only device affected by this should be the WCN3991 used in some
    Chromebooks. As ChromeOS updates the kernel and devicetree in lockstep,
    the new 'qcom,local-bd-address-broken' property can be used to determine
    if the firmware is buggy so that the underlying driver bug can be fixed
    without breaking backwards compatibility.
    
    Set the HCI_QUIRK_BDADDR_PROPERTY_BROKEN quirk for such platforms so
    that the address is reversed when parsing the address property.
    
    Fixes: 5c0a100 ("Bluetooth: hci_qca: Add helper to set device address")
    Cc: stable@vger.kernel.org      # 5.1
    Cc: Balakrishna Godavarthi <quic_bgodavar@quicinc.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Tested-by: Nikita Travkin <nikita@trvn.ru> # sc7180
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    jhovold authored and Vudentz committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    ff2ed85 View commit details
    Browse the repository at this point in the history
  6. workflow: Add workflow files for ci

    This patch adds workflow files for ci:
    
    [schedule_work.yml]
     - The workflow file for scheduled work
     - Sync the repo with upstream repo and rebase the workflow branch
     - Review the patches in the patchwork and creates the PR if needed
    
    [ci.yml]
     - The workflow file for CI tasks
     - Run CI tests when PR is created
    tedd-an committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    c6e0076 View commit details
    Browse the repository at this point in the history
  7. Bluetooth: L2CAP: Avoid -Wflex-array-member-not-at-end warnings

    -Wflex-array-member-not-at-end is coming in GCC-14, and we are getting
    ready to enable it globally.
    
    There are currently a couple of objects (`req` and `rsp`), in a couple
    of structures, that contain flexible structures (`struct l2cap_ecred_conn_req`
    and `struct l2cap_ecred_conn_rsp`), for example:
    
    struct l2cap_ecred_rsp_data {
            struct {
                    struct l2cap_ecred_conn_rsp rsp;
                    __le16 scid[L2CAP_ECRED_MAX_CID];
            } __packed pdu;
            int count;
    };
    
    in the struct above, `struct l2cap_ecred_conn_rsp` is a flexible
    structure:
    
    struct l2cap_ecred_conn_rsp {
            __le16 mtu;
            __le16 mps;
            __le16 credits;
            __le16 result;
            __le16 dcid[];
    };
    
    So, in order to avoid ending up with a flexible-array member in the
    middle of another structure, we use the `struct_group_tagged()` (and
    `__struct_group()` when the flexible structure is `__packed`) helper
    to separate the flexible array from the rest of the members in the
    flexible structure:
    
    struct l2cap_ecred_conn_rsp {
            struct_group_tagged(l2cap_ecred_conn_rsp_hdr, hdr,
    
    	... the rest of members
    
            );
            __le16 dcid[];
    };
    
    With the change described above, we now declare objects of the type of
    the tagged struct, in this example `struct l2cap_ecred_conn_rsp_hdr`,
    without embedding flexible arrays in the middle of other structures:
    
    struct l2cap_ecred_rsp_data {
            struct {
                    struct l2cap_ecred_conn_rsp_hdr rsp;
                    __le16 scid[L2CAP_ECRED_MAX_CID];
            } __packed pdu;
            int count;
    };
    
    Also, when the flexible-array member needs to be accessed, we use
    `container_of()` to retrieve a pointer to the flexible structure.
    
    We also use the `DEFINE_RAW_FLEX()` helper for a couple of on-stack
    definitions of a flexible structure where the size of the flexible-array
    member is known at compile-time.
    
    So, with these changes, fix the following warnings:
    net/bluetooth/l2cap_core.c:1260:45: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    net/bluetooth/l2cap_core.c:3740:45: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    net/bluetooth/l2cap_core.c:4999:45: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    net/bluetooth/l2cap_core.c:7116:47: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    
    Link: KSPP/linux#202
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    GustavoARSilva authored and tedd-an committed Mar 26, 2024
    Configuration menu
    Copy the full SHA
    b1f3967 View commit details
    Browse the repository at this point in the history