From patchwork Mon Jun 9 19:23:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895152 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A7F419258E for ; Mon, 9 Jun 2025 19:23:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497021; cv=none; b=m2oMh1MnOPIcF7NOFmRZ7DWqknPrAW9g/VPs7/zraT27zFoF8xI2iNTL/vDNKtd+EjhMgeGLpQnGxzQYQFPL4MhyFmAFLQTzBxs/Ls6MbpiZUCxCtQpunJfQy5WqbOJzzac7CQWh0Y8kVKqqeYHVPcsh6jWSwr4Uz9IsM6ylS68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497021; c=relaxed/simple; bh=63L3UDL8J5DhCte3GLcbbTBSkUON6N3FFFt3wsHHT4Q=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=KkgnroAH6Gh7JxOrZSIMqbgKFyoEwfaRnWgOekRxoso1SD2X0ueBkmlPoRwwUCJLv9+XKNP7wB3vjFA106DT3k3Llg1Mg/3XZeOdkKO4rtKiLfzqTOk6PhVL5yPmeFfOPh0VEE34peQG1QTNLzNreIlRbDxaip9tz3/4TrhntEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Dx7ttCWp; arc=none smtp.client-ip=209.85.208.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Dx7ttCWp" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-601dfef6a8dso8209825a12.1 for ; Mon, 09 Jun 2025 12:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497018; x=1750101818; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=2iICtur6g1oo5eiKkTXGu8IeImTt4JuqjKviwIqNIxY=; b=Dx7ttCWp4vVTUT5+4M24sNlwEDlmH0lmueoFx+Kc//jpL8KghWcbPtteg04MUZN8oG ZD1POWLdmXmeGpSu3dU+EmacZIBDyv5f/U1BT1ylTiRnTohGaFP7Ir02OTsqc6HAu0Zk ZnKKKCr508FP/zNsjdiZk9L8h4KjN0Y2ASaGIn3G2lwDgrZPwWvV1moDzK60mqZ4kWti G/MuFXwUPZeNq7PFk2hwwVCrMKmBSDvN2jX5ncRrll4y6/7KVRJESBUnzBQdJsvJkkux 9SOHLCSS042sWftoj1YY44CVT8nzGmFp3G7zNlynWElvVRIOCU2Udi4F8ytOiKmzpT8w BMEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497018; x=1750101818; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2iICtur6g1oo5eiKkTXGu8IeImTt4JuqjKviwIqNIxY=; b=qSesLeS4kJO7LQ2L6En7K2MDuQOsFvydlIM2eCQdWFPClOqWbWNaCJ6+LqHt5BkpOP siCLfyKzUJXpjOZxBBRZgIsW/Vaok0CAdqpy3GJhYtlds4oIDu4+sNOcNQ7OqCZqkV1g yWBmBvUlA/qkfSOmHBPyVE3N1qTs6wXEraQEpaZ/lOUTGgdlM04LbDFvpxS+7dWYbcCv a8HdzEpmb3zCC2vZMfMSK45MaHzxcwCJ6VVru6sGOwlCAzeKdG9hEXmkkfpzQlFQaTP5 j8n123j1UZ7n83bVV02e2cePQkID7cIVRaHLRCyDJJN4m2NGQlGRFNtQ444gF2Aqruj7 Hbmg== X-Gm-Message-State: AOJu0YwJft2OIqDvoPRDumrNHlI3077vrYHqhqnkcS5UnN32Ps7x+SVG BMIi9GUdXVOTbYwICC6eZWoUKAlyjgaSDTYsRvIwZ52m0cNAynzEPAMBl7qybQ== X-Gm-Gg: ASbGncsJfe0YMJ+wSCnG+ztGPJLcaU5fbLJfEiwdJGJJ+1xo/Emq0IwUHw2XsHP+Ath cEzQlqvWm4zwVc4prIQJNM1Uj5TH1pSI0tz2Pt0qZyewcsaMdTaCnuaIyZOyKys0+vTCV81/cyd srcGfP6OWjTC9qHvcjFSPhwjXwJ8bqdAwUAevIutKhw6cJ054FnypKJFtNmsRrDsgL5wHvRRRys DxHk912Mw7OZRjnbWXNDacBudV3TBn3sKZ3+7ohNFuw8pHZYwAc0ajS9IRo9qapGZ4xDa6OOTWl DglR0CGjkbkQrtF+/wC/S2fCWNB+6DZt4JzHjU3bbXVWHGJd1EJMqUSrDZb6g+vnVwgIRA== X-Google-Smtp-Source: AGHT+IF85RLTmbtVcyCubBnm724EB2xDl5dQbVV6o5GOXp2KattINeq19klkymVUSQJEPxQD5Kai+Q== X-Received: by 2002:a05:6402:274a:b0:606:ef9e:c711 with SMTP id 4fb4d7f45d1cf-60774b7f794mr13621389a12.30.1749497018220; Mon, 09 Jun 2025 12:23:38 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6077836fe51sm5030876a12.13.2025.06.09.12.23.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:23:37 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:23:36 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 01/14] wifi: rtw89: 8851b: Accept USB devices and load their MAC address From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Make rtw8851b_read_efuse() accept USB devices and load the MAC address from the correct offset. Signed-off-by: Bitterblue Smith Acked-by: Ping-Ke Shih --- v2: - Add Acked-by. --- drivers/net/wireless/realtek/rtw89/rtw8851b.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index fafa200a9c8d..c9fdf7e8e53c 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -461,14 +461,6 @@ static int rtw8851b_pwr_off_func(struct rtw89_dev *rtwdev) return 0; } -static void rtw8851b_efuse_parsing(struct rtw89_efuse *efuse, - struct rtw8851b_efuse *map) -{ - ether_addr_copy(efuse->addr, map->e.mac_addr); - efuse->rfe_type = map->rfe_type; - efuse->xtal_cap = map->xtal_k; -} - static void rtw8851b_efuse_parsing_tssi(struct rtw89_dev *rtwdev, struct rtw8851b_efuse *map) { @@ -549,12 +541,18 @@ static int rtw8851b_read_efuse(struct rtw89_dev *rtwdev, u8 *log_map, switch (rtwdev->hci.type) { case RTW89_HCI_TYPE_PCIE: - rtw8851b_efuse_parsing(efuse, map); + ether_addr_copy(efuse->addr, map->e.mac_addr); + break; + case RTW89_HCI_TYPE_USB: + ether_addr_copy(efuse->addr, map->u.mac_addr); break; default: return -EOPNOTSUPP; } + efuse->rfe_type = map->rfe_type; + efuse->xtal_cap = map->xtal_k; + rtw89_info(rtwdev, "chip rfe_type is %d\n", efuse->rfe_type); return 0; From patchwork Mon Jun 9 19:24:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895968 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BD0419258E for ; Mon, 9 Jun 2025 19:24:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497071; cv=none; b=VqNv1WqlzFQGbYv6FVnv6itCyOXBdIj2UnByGdeLxqCcAjU9XIwpiM7L7UXvhHbbSK8VwBj0cnfUKut0vr/sU3GOV1X8R6TfF3a1SAHI0/zqS57uKA/3njhWjOwpc11oZ45Eem3ygc9WpNrR5x9SAcahNUcc/Um0RcsQycHZidY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497071; c=relaxed/simple; bh=KeUlxThdDPFoAUHzXoAlw2RVzovoB0y0Co7OwKfL5pw=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=D+OvJTyjQiQwEhVA2fljVi9Nxxu9wKsTNkBbw0AH8tILUnz+c/on3O6JY8/0xxQLIEjzwFgrq2/OPiPPMHqEH2VDLyyl6+6RCGYewGk9JRhkFnN2Nkg1QJEfuVYZ/voCBPw2Ay8EFuh9umcn9KmgB5j7X0OkBJDcUMXnl3zfAcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JtHcSgXI; arc=none smtp.client-ip=209.85.208.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JtHcSgXI" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-607ec30df2bso2740328a12.1 for ; Mon, 09 Jun 2025 12:24:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497068; x=1750101868; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=bJD0ShiKOFZd30x3smIXbCCfXQODHuqHjVs7p/ulQ8A=; b=JtHcSgXIPp993edQxoVJtPR9bbz/CdHJK7b03NNL0GXCb7Okj8VfXLDNeG/VMM4ObZ PkImMISevTJgQg+VlYK9Rh7PLuvGF59EqvWMCKpp+13lV6uxwxGGxXmjZ83qYxvew2Cz 7NXRPNNaH9Yocly+1sU3w59bdqVUAH1qODFfrQk70GhXvFgGLmUDkjezsQaGlMKypFa7 Cm1LWRdzaT3JHXOD3wH4nckyex8KR89WEwZj9UEOjZsKB7pBbnG2007KpAxlZ5uCcFhI GzXSju+Od+WGR/kgsfNTootlin747nLjmnwm65Ryu6EA0Y2bUNcpgKwm+L4YsIenHSOp kMZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497068; x=1750101868; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bJD0ShiKOFZd30x3smIXbCCfXQODHuqHjVs7p/ulQ8A=; b=sXOVGykzaAtqzLNfAo+8kLGynwGcy8Wi+3cNY7f738Fop+wqhOYsx4WzqcugdmAQ4w 2PB9Jvpwxkk1g2hDFRQH09xp+amN7z06fHKHKHZK1uwMwqyGR+6aRJhPSQHan+slJNsI x+m95briWLrkOVjfDneeurXsVcItWcMh/x/W9i0EZL4NW1pTzzSGaPCi6DMJ+8lsYOwx PEbu79Lydo5UWlbngWx0Y+cLUua3D5zMeR35xpSJ9Al+tNY2ic+9azdEkw+0cGETEuM7 J+4/xtOFNfY5/7rVWIgivAQRG7ZSJSW+gI05cnLIkZRnNOaCm6WJyWMCdh99szFfggAZ /pTg== X-Gm-Message-State: AOJu0YwSwp6r26zFHqWRWS0rzv9fBqvEplvCtzTx0VQOr2ap24tXx1lx 4BCjkuXBcyrCoQXQWwQBiufy71ff8SYc/XTjH8sUWEDcp6gknbwM893jbaU0Zw== X-Gm-Gg: ASbGnct6nk+mMn7xcnkfe5SGcUORNZZxetCxM6z2s5QhO1nUJWX78hPkp6KVkUkb5f4 qI87VB94Eac9pUONkVti5ww/nfOda16KABsF8yiULiB+/WL/z1jhBPNwnwJcKXABwbxCUeSHXTP n+TNj8/E2k5PTv+FSLZqUeva7ECLqfGK0mHANQU6BDls4+aVGACsyhxUvuYKFKPy1Im5faKjG9j cL5Rzvtu3vOl4yYgabJXuIrDPfPTnaoK8OvPzNMHlDKUZTC8hzJGPOxxVF3P/6LcIwY3zfK4ypw d6Gu1yfFqodwbRjXCQCA1fSyW1jnH+hZ08sNsGqjCWNQrmy9Ns2lksaGKTA= X-Google-Smtp-Source: AGHT+IFRLcSjFZHBDcFtZ9/JHEjoKAVnvNi4HzEtQlPpGlqJ0wxICwtHQzIvHQdKIeKhAEv8jjYHwA== X-Received: by 2002:a17:907:6d22:b0:ad5:78ca:2126 with SMTP id a640c23a62f3a-ade1aa109c2mr1346270066b.59.1749497068168; Mon, 09 Jun 2025 12:24:28 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1dc1c4c9sm600661666b.108.2025.06.09.12.24.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:24:27 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:24:26 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 02/14] wifi: rtw89: Make dle_mem in rtw89_chip_info an array From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> USB 2, USB 3, and SDIO will need different sets of values. Add a new dle_type member in struct rtw89_hci_info and make dle_mem in struct rtw89_chip_info an array to hold the four different sets of values. Signed-off-by: Bitterblue Smith --- v2: - Make dle_mem an array instead of having (eventually) four different dle_mem_* members. --- drivers/net/wireless/realtek/rtw89/core.h | 12 +++++++++++- drivers/net/wireless/realtek/rtw89/mac.c | 2 +- drivers/net/wireless/realtek/rtw89/pci.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8851b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852a.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852bt.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852c.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8922a.c | 2 +- 9 files changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h index 1c8f3b9b7c4c..12d5727abfe9 100644 --- a/drivers/net/wireless/realtek/rtw89/core.h +++ b/drivers/net/wireless/realtek/rtw89/core.h @@ -132,6 +132,15 @@ enum rtw89_hci_type { RTW89_HCI_TYPE_SDIO, }; +enum rtw89_hci_dle_type { + RTW89_HCI_DLE_TYPE_PCIE, + RTW89_HCI_DLE_TYPE_USB2, + RTW89_HCI_DLE_TYPE_USB3, + RTW89_HCI_DLE_TYPE_SDIO, + + RTW89_HCI_DLE_TYPE_NUM, +}; + enum rtw89_core_chip_id { RTL8852A, RTL8852B, @@ -3596,6 +3605,7 @@ struct rtw89_hci_ops { struct rtw89_hci_info { const struct rtw89_hci_ops *ops; enum rtw89_hci_type type; + enum rtw89_hci_dle_type dle_type; u32 rpwm_addr; u32 cpwm_addr; bool paused; @@ -4293,7 +4303,7 @@ struct rtw89_chip_info { bool dis_2g_40m_ul_ofdma; u32 rsvd_ple_ofst; const struct rtw89_hfc_param_ini *hfc_param_ini; - const struct rtw89_dle_mem *dle_mem; + const struct rtw89_dle_mem *dle_mem[RTW89_HCI_DLE_TYPE_NUM]; u8 wde_qempty_acq_grpnum; u8 wde_qempty_mgq_grpsel; u32 rf_base_addr[2]; diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 9f0e30e75009..2ee766e37322 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -1719,7 +1719,7 @@ static const struct rtw89_dle_mem *get_dle_mem_cfg(struct rtw89_dev *rtwdev, struct rtw89_mac_info *mac = &rtwdev->mac; const struct rtw89_dle_mem *cfg; - cfg = &rtwdev->chip->dle_mem[mode]; + cfg = &rtwdev->chip->dle_mem[rtwdev->hci.dle_type][mode]; if (!cfg) return NULL; diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c index 064f6a940107..928cf82d3b36 100644 --- a/drivers/net/wireless/realtek/rtw89/pci.c +++ b/drivers/net/wireless/realtek/rtw89/pci.c @@ -4449,6 +4449,7 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) rtwdev->pci_info = info->bus.pci; rtwdev->hci.ops = &rtw89_pci_ops; rtwdev->hci.type = RTW89_HCI_TYPE_PCIE; + rtwdev->hci.dle_type = RTW89_HCI_DLE_TYPE_PCIE; rtwdev->hci.rpwm_addr = pci_info->rpwm_addr; rtwdev->hci.cpwm_addr = pci_info->cpwm_addr; diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index c9fdf7e8e53c..f0755afb1fdc 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -2465,7 +2465,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, .hfc_param_ini = rtw8851b_hfc_param_ini_pcie, - .dle_mem = rtw8851b_dle_mem_pcie, + .dle_mem = {rtw8851b_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, .rf_base_addr = {0xe000}, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852a.c b/drivers/net/wireless/realtek/rtw89/rtw8852a.c index cd5987fc52d7..7c631ccee8fc 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852a.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.c @@ -2184,7 +2184,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = { .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x6f800, .hfc_param_ini = rtw8852a_hfc_param_ini_pcie, - .dle_mem = rtw8852a_dle_mem_pcie, + .dle_mem = {rtw8852a_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 16, .wde_qempty_mgq_grpsel = 16, .rf_base_addr = {0xc000, 0xd000}, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b.c b/drivers/net/wireless/realtek/rtw89/rtw8852b.c index dacdb384de2c..a2dfdc541ce6 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852b.c @@ -820,7 +820,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = { .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, .hfc_param_ini = rtw8852b_hfc_param_ini_pcie, - .dle_mem = rtw8852b_dle_mem_pcie, + .dle_mem = {rtw8852b_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, .rf_base_addr = {0xe000, 0xf000}, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c index 289dce688d72..96800ccdedc6 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c @@ -754,7 +754,7 @@ const struct rtw89_chip_info rtw8852bt_chip_info = { .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x6f800, .hfc_param_ini = rtw8852bt_hfc_param_ini_pcie, - .dle_mem = rtw8852bt_dle_mem_pcie, + .dle_mem = {rtw8852bt_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, .rf_base_addr = {0xe000, 0xf000}, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c index 2a6143a8d256..5210f2f9124b 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c @@ -3004,7 +3004,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = { .dis_2g_40m_ul_ofdma = false, .rsvd_ple_ofst = 0x6f800, .hfc_param_ini = rtw8852c_hfc_param_ini_pcie, - .dle_mem = rtw8852c_dle_mem_pcie, + .dle_mem = {rtw8852c_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 16, .wde_qempty_mgq_grpsel = 16, .rf_base_addr = {0xe000, 0xf000}, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.c b/drivers/net/wireless/realtek/rtw89/rtw8922a.c index 1d0f6e7df497..0517f0d27a5c 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8922a.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.c @@ -2817,7 +2817,7 @@ const struct rtw89_chip_info rtw8922a_chip_info = { .dis_2g_40m_ul_ofdma = false, .rsvd_ple_ofst = 0x8f800, .hfc_param_ini = rtw8922a_hfc_param_ini_pcie, - .dle_mem = rtw8922a_dle_mem_pcie, + .dle_mem = {rtw8922a_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, .rf_base_addr = {0xe000, 0xf000}, From patchwork Mon Jun 9 19:25:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895151 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 357B519258E for ; Mon, 9 Jun 2025 19:25:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497140; cv=none; b=mm6xh4m9zpa5RxXRqvZjMPgcrZEpCGqt0hnfwmQRZPJqaSEFnGy3ZqVjHoI1hI2HiiBgUs5Q5aRwqO4ABo6tk0mVSQFLh4ecDeA/SLKhCML8rCKFv4IVDX3qFcq3rWya1J3ESrSaVVPzkMWBNLHFDZyAekMKqXyodXoBuEA56G4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497140; c=relaxed/simple; bh=PBBKomSB0JM8VcMg+/7xoxo12Bd5Rw2ngawstZF5BdQ=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=i1szmmXWp99U33k+mrJB3CLrOv9VApBlSGOX9xDUAJ5qVNU1HRV5La+/DpDNCkQ2j3BxtG6YnrcC96nfnEovI2NmzBsp3OW/QDvUjnGTiUxeHkszV5sojRyUvuOYoxGKhWHGXpKsZqaZGi/w0uC5qQTjlPs/YafwnsLwLUl4nsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A6ldm5Yq; arc=none smtp.client-ip=209.85.208.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A6ldm5Yq" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-604bff84741so9071085a12.2 for ; Mon, 09 Jun 2025 12:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497136; x=1750101936; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=V+2TTKvfqQHpJ9haiPqd4pFvaJd/g5ULfGevsQbQgHg=; b=A6ldm5YqiZflz5CzZcUpC+m/xxfqYRpvdETv+e34FYXUCaNBlbrIOA9aQOW1vgEg/M zRJSqTk024VALK7s1ll5/mFdMScNLpCo2ApvD2AWJ6YhMsE3wBE4God2FsG7mfx5UNWx aB6kkGeA6BU1wjS3H1lBoNEH8R3TMDGVWGKlNjomoBDNDuAak5QN0c3oRhI6ojWCE1LU lmr7bLpmCFpRLtK3FptwWSU+Rs8jCFLeap5H3InvpNlF+P36+FUeilZFze6HX5BWwo8p BbTXsTys25HQCOeCQGh57tpI5JwDSDXqk+FUXy0OYL64QEbL2kxPvT4hgu89R1BPyM6d Ns1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497136; x=1750101936; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=V+2TTKvfqQHpJ9haiPqd4pFvaJd/g5ULfGevsQbQgHg=; b=V9KyCtjHz7UWSgOo/7CW9HIQEThAJ8cxwsvErUF/M8j8I7/6MfaqsTA+0ze8PqdKoa rI3RrXRrk2QVigyuUILSVSEchZkWdO6ppKehbYQIX2mlGs33tAKYuuTILgqiq6bREflm VZVm6B7FXBegkrhxDSZQv44gY5nvUXcdL7UEgE9zK/aBuqvbvqnNDFDONyxaQOvuKtzp eKneyXKjbbtu62oE/d2bAHmx2fxZRldwPAdIh3lLygLdrk84FGpdBDUiLQ8v8NHmpVfI MjfU7OjJCp1x2Wgswf2r5aATppEmoLXcqWT9gBbmgiFpmaZF078rieJ43Nw/fgVXvB8Q eepg== X-Gm-Message-State: AOJu0YxS5td/e6epmqXdEUojAq0mC8DMndOnhqkfQrJzFR0vAstnfqQ9 859zzeY4YuZAELGlg2KB/2lV4okpZpt3heOhakwcGxAfPruqQGgdy3u2xlNW+A== X-Gm-Gg: ASbGncu25YsDSX5wnTg2QrWsXvOI0oYxy3elCapM2p/K6SB4yzMhaHg6/UNEq9LnUR7 j13yIVzlruBWt3PGLuWug14i07L7JiFlXxegYSY2mPViCmCgib/Oqdiw8taoyzYh0W/1WXj6WbR PeKXD6AwWBCz5A9icsa3H5GY+7coppPuRPXnVMFF9zIMtasldcerj+BEH5FgYN1odbrm5fVXaAg wmmY5+/Gx3w458NKjk1QT+os3+fTdKOlwM3iW1d8RZLSpgX891g0Uo0mf37EfIozSl0GjJ/pCBH /ZD1q7ZxlgmaGBX3rrjYxyzMeRv5+MZbfQgwace0+3vW09aSgj/l5SEpA24= X-Google-Smtp-Source: AGHT+IH8PyU/iw3sqSrUH2VIH+uKWj0YonXxVWsvVZ+l2p7xP73zHPtGZ/sHyYaM8ikQDxkZAdeT6Q== X-Received: by 2002:a05:6402:280f:b0:607:fbf8:669c with SMTP id 4fb4d7f45d1cf-607fbf86ee5mr3495131a12.0.1749497136145; Mon, 09 Jun 2025 12:25:36 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-607783e66e6sm4992168a12.81.2025.06.09.12.25.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:25:35 -0700 (PDT) Message-ID: <7e05e8a7-d7cd-4cc2-87c5-143ba30e8c54@gmail.com> Date: Mon, 9 Jun 2025 22:25:34 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 03/14] wifi: rtw89: Make hfc_param_ini in rtw89_chip_info an array From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> USB and SDIO will need different sets of values, so make hfc_param_ini in struct rtw89_chip_info an array. Signed-off-by: Bitterblue Smith --- v2: - Make hfc_param_ini an array instead of having (eventually) three different hfc_param_ini_* members. --- drivers/net/wireless/realtek/rtw89/core.h | 4 +++- drivers/net/wireless/realtek/rtw89/mac.c | 5 +++-- drivers/net/wireless/realtek/rtw89/rtw8851b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852a.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852b.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852bt.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8852c.c | 2 +- drivers/net/wireless/realtek/rtw89/rtw8922a.c | 2 +- 8 files changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h index 12d5727abfe9..d4c7b47c3ba6 100644 --- a/drivers/net/wireless/realtek/rtw89/core.h +++ b/drivers/net/wireless/realtek/rtw89/core.h @@ -130,6 +130,8 @@ enum rtw89_hci_type { RTW89_HCI_TYPE_PCIE, RTW89_HCI_TYPE_USB, RTW89_HCI_TYPE_SDIO, + + RTW89_HCI_TYPE_NUM, }; enum rtw89_hci_dle_type { @@ -4302,7 +4304,7 @@ struct rtw89_chip_info { u16 max_amsdu_limit; bool dis_2g_40m_ul_ofdma; u32 rsvd_ple_ofst; - const struct rtw89_hfc_param_ini *hfc_param_ini; + const struct rtw89_hfc_param_ini *hfc_param_ini[RTW89_HCI_TYPE_NUM]; const struct rtw89_dle_mem *dle_mem[RTW89_HCI_DLE_TYPE_NUM]; u8 wde_qempty_acq_grpnum; u8 wde_qempty_mgq_grpsel; diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 2ee766e37322..0a3603f2e6bf 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -881,13 +881,14 @@ static int hfc_reset_param(struct rtw89_dev *rtwdev) switch (rtwdev->hci.type) { case RTW89_HCI_TYPE_PCIE: - param_ini = rtwdev->chip->hfc_param_ini[qta_mode]; - param->en = 0; break; default: return -EINVAL; } + param_ini = rtwdev->chip->hfc_param_ini[rtwdev->hci.type][qta_mode]; + param->en = 0; + if (param_ini.pub_cfg) param->pub_cfg = *param_ini.pub_cfg; diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index f0755afb1fdc..b825b1b4ad9f 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -2464,7 +2464,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .max_amsdu_limit = 3500, .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, - .hfc_param_ini = rtw8851b_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8851b_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8851b_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852a.c b/drivers/net/wireless/realtek/rtw89/rtw8852a.c index 7c631ccee8fc..4285af5c9ad4 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852a.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.c @@ -2183,7 +2183,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = { .max_amsdu_limit = 3500, .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x6f800, - .hfc_param_ini = rtw8852a_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8852a_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8852a_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 16, .wde_qempty_mgq_grpsel = 16, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b.c b/drivers/net/wireless/realtek/rtw89/rtw8852b.c index a2dfdc541ce6..aff87cc9bffe 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852b.c @@ -819,7 +819,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = { .max_amsdu_limit = 5000, .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, - .hfc_param_ini = rtw8852b_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8852b_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8852b_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c index 96800ccdedc6..e13d6beb9aa3 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c @@ -753,7 +753,7 @@ const struct rtw89_chip_info rtw8852bt_chip_info = { .max_amsdu_limit = 5000, .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x6f800, - .hfc_param_ini = rtw8852bt_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8852bt_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8852bt_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c index 5210f2f9124b..f419e6ace39d 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c @@ -3003,7 +3003,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = { .max_amsdu_limit = 8000, .dis_2g_40m_ul_ofdma = false, .rsvd_ple_ofst = 0x6f800, - .hfc_param_ini = rtw8852c_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8852c_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8852c_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 16, .wde_qempty_mgq_grpsel = 16, diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.c b/drivers/net/wireless/realtek/rtw89/rtw8922a.c index 0517f0d27a5c..780d449a2140 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8922a.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.c @@ -2816,7 +2816,7 @@ const struct rtw89_chip_info rtw8922a_chip_info = { .max_amsdu_limit = 8000, .dis_2g_40m_ul_ofdma = false, .rsvd_ple_ofst = 0x8f800, - .hfc_param_ini = rtw8922a_hfc_param_ini_pcie, + .hfc_param_ini = {rtw8922a_hfc_param_ini_pcie, NULL, NULL}, .dle_mem = {rtw8922a_dle_mem_pcie, NULL, NULL, NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, From patchwork Mon Jun 9 19:26:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895967 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B368F20C480 for ; Mon, 9 Jun 2025 19:26:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497190; cv=none; b=e2Vk3dw8n53c4CPBJZSYz2NzjwChaeidazcYN3GkSoSqmejm3sOeCltW5VTj5PuyfbF4OfhwssbPJxZHxvSRytp1IeR8nR6g8G5UDq0oclf4LvHb/zN3Q/vcvTZRHfYi1Ww64yZSnPx6D/d+Re62n91gKWXH2cXsEJ+ZOzp4jeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497190; c=relaxed/simple; bh=mfnHIozESxHIQiE3eq8y2aIFH/uLN4eDSrs0OwxTbCk=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=a7OVMvgc14MOl3XlIuWyy/ah3IhT6pXLxvqW3ZrmWjTkodb8Po90ijr+YVSOwyR4UyKhqOxl4uDz+CQCVYHSgVq1ghCt6ALQoF/QtEZrk0kFG3RiwjzrFaJm2nP4lqU2BkjDUuigRRqOHcFABO0czMGBYh95gbwn+PcrYoEUHoo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gg/N2wdm; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gg/N2wdm" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-ad56cbc7b07so672761066b.0 for ; Mon, 09 Jun 2025 12:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497187; x=1750101987; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=zUq+r7ef+v2QkzFYgSwjq5w0l+Bf32YG8AOBYcjTTeg=; b=gg/N2wdmGDLfsILkIzHdprVy+yZ12JXhHQe0ao/PqJa7DpNjxouqGwNQvNK34YH5r+ CXShuI8flSD6iAGm2j9eX2W9YSAz5zSJLX1BwAkbj9esQHPzxxe3EOf+0VyqaBchxQRo btx8r0oZoAJYeuZMf/f4aS5CjHrjGsnsID/df/rCyfOJIEXfU8qw2LzfwwaEWEARuTk/ +MdQFB1fvwkgcSpNKl/pM+7Cfmu+yIYE7En9ZTxQrCIEdh0sY+f+d7Qp7O94uEg6cIFi euevF6lUTnTz2b2Kc5JmFrGsaK/i/7tFC157AIeku76OgED2E6TEUOCPn3LR2k+O8pkz h53Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497187; x=1750101987; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zUq+r7ef+v2QkzFYgSwjq5w0l+Bf32YG8AOBYcjTTeg=; b=uEzFtfK+Fu1hda+VojModP45TZGZ1Yuxf7TTw2VGJeNsVOE7SoZLB35NvOFFrDOUzo KetqTwAQSa0HuMk8+KzTBGV4gQ3ItH+PRzROuYrF6PXEi9fXmLbpXRbIqJCYAGntq0TR DpH3aLH3H0zzFGiiyggpQEmAxPPcl5i+MOZBKyCRkQI1K9+EvKR7Y777xE0zT48b+wQO P+mz2khjiF2wEmhkiQqYzlpOZIYbA4GvrckvjRFzz8OZ0i3dElCuYn9upg3Ep/WuXdv5 li5uBwEBRqBc9A4fjK+D8Xav+Dzify/zpzVjwV+uaFrcAtlHwy+PU9CrmSskExcb7fvt 6NjQ== X-Gm-Message-State: AOJu0YwkN47D4Xc7dzw32GUP4nfxndBbHKK3zpW0YcMWc9xD6N1s3C99 SCSbWNqmttvYUIJpY7A+im7y+ac8gVByv/sxmCU/4Y3zpLRe329wl7ufro5Hyw== X-Gm-Gg: ASbGncsNw+j0NvH5yhvN/aR3Tg9FUXy9khCH0m5YtGT7VKJXs6KuVTiW32kObMOCs6G RFPpAVdQPJC0vbspMW/o8ZOwBAnXFnoqm+qVjK2qxuUkW65KCsuG17UB+g6TLlqWY5BSO4Ds/ha VhkIs3HI017MJ+8H72iPnpnCdiHd9zDSOKM8T8nO3PvWIQMEuEBI5ZheLxk8T5GzYGtO+SOIcuM zya4FEPnYa26vXi8pynO2gF6uRve5m8fnnYyo5ogvtwvw3qwDxRTybgVNZbbD6re3VhDCTDVp8v hb1CGatxIVQHYQYcskWLXppUyG+dP+2y0rp2hZ38u/44pZ9Q1L1o/K2itGzEzsY8MxJZgQ== X-Google-Smtp-Source: AGHT+IFgGewMzh+9uCgGBY+Kn1tsLeFhryWUvGjeGUgcXtTdmQ4VqmEEhmd2vcP4Oml8wVbMTCXHRA== X-Received: by 2002:a17:907:1c0b:b0:ad8:9257:571b with SMTP id a640c23a62f3a-ade1a9057b3mr1473741966b.16.1749497186850; Mon, 09 Jun 2025 12:26:26 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1db54c3esm593430966b.39.2025.06.09.12.26.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:26:26 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:26:25 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 04/14] wifi: rtw89: Add rtw8851b_dle_mem_usb{2,3} From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Add rtw8851b_dle_mem_usb2 and rtw8851b_dle_mem_usb3 and their various quotas and sizes in struct rtw89_mac_size_set. "dle" could be "Data Link Engine" or "Double Link Engine". These are some parameters needed for RTL8851BU. Signed-off-by: Bitterblue Smith --- v2: - Add space in comments before */ - Add more information in the commit message. - Adapt to the changes in patch 2. --- drivers/net/wireless/realtek/rtw89/mac.c | 15 +++++++++ drivers/net/wireless/realtek/rtw89/mac.h | 8 +++++ drivers/net/wireless/realtek/rtw89/rtw8851b.c | 31 ++++++++++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 0a3603f2e6bf..9ca88a293f99 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -1647,6 +1647,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = { /* 8852C PCIE SCC */ .wde_size19 = {RTW89_WDE_PG_64, 3328, 0,}, .wde_size23 = {RTW89_WDE_PG_64, 1022, 2,}, + /* 8852B USB2.0/USB3.0 SCC */ + .wde_size25 = {RTW89_WDE_PG_64, 162, 94,}, /* PCIE */ .ple_size0 = {RTW89_PLE_PG_128, 1520, 16,}, .ple_size0_v1 = {RTW89_PLE_PG_128, 2688, 240, 212992,}, @@ -1662,6 +1664,10 @@ const struct rtw89_mac_size_set rtw89_mac_size = { .ple_size18 = {RTW89_PLE_PG_128, 2544, 16,}, /* 8852C PCIE SCC */ .ple_size19 = {RTW89_PLE_PG_128, 1904, 16,}, + /* 8852B USB2.0 SCC */ + .ple_size32 = {RTW89_PLE_PG_128, 620, 20,}, + /* 8852B USB3.0 SCC */ + .ple_size33 = {RTW89_PLE_PG_128, 632, 8,}, /* PCIE 64 */ .wde_qt0 = {3792, 196, 0, 107,}, .wde_qt0_v1 = {3302, 6, 0, 20,}, @@ -1676,6 +1682,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = { /* 8852C PCIE SCC */ .wde_qt18 = {3228, 60, 0, 40,}, .wde_qt23 = {958, 48, 0, 16,}, + /* 8852B USB2.0/USB3.0 SCC */ + .wde_qt25 = {152, 2, 0, 8,}, .ple_qt0 = {320, 320, 32, 16, 13, 13, 292, 292, 64, 18, 1, 4, 0,}, .ple_qt1 = {320, 320, 32, 16, 1316, 1316, 1595, 1595, 1367, 1321, 1, 1307, 0,}, /* PCIE SCC */ @@ -1699,6 +1707,13 @@ const struct rtw89_mac_size_set rtw89_mac_size = { /* PCIE 64 */ .ple_qt58 = {147, 0, 16, 20, 157, 13, 229, 0, 172, 14, 24, 0,}, .ple_qt59 = {147, 0, 32, 20, 1860, 13, 2025, 0, 1879, 14, 24, 0,}, + /* USB2.0 52B SCC */ + .ple_qt72 = {130, 0, 16, 48, 4, 13, 322, 0, 32, 14, 8, 0, 0,}, + /* USB2.0 52B 92K */ + .ple_qt73 = {130, 0, 32, 48, 37, 13, 355, 0, 65, 14, 24, 0, 0,}, + /* USB3.0 52B 92K */ + .ple_qt74 = {286, 0, 16, 48, 4, 13, 178, 0, 32, 14, 8, 0, 0,}, + .ple_qt75 = {286, 0, 32, 48, 37, 13, 211, 0, 65, 14, 24, 0, 0,}, /* 8852A PCIE WOW */ .ple_qt_52a_wow = {264, 0, 32, 20, 64, 13, 1005, 0, 64, 128, 120,}, /* 8852B PCIE WOW */ diff --git a/drivers/net/wireless/realtek/rtw89/mac.h b/drivers/net/wireless/realtek/rtw89/mac.h index 8013c852d5be..8e771afb6e5c 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.h +++ b/drivers/net/wireless/realtek/rtw89/mac.h @@ -921,6 +921,7 @@ struct rtw89_mac_size_set { const struct rtw89_dle_size wde_size18; const struct rtw89_dle_size wde_size19; const struct rtw89_dle_size wde_size23; + const struct rtw89_dle_size wde_size25; const struct rtw89_dle_size ple_size0; const struct rtw89_dle_size ple_size0_v1; const struct rtw89_dle_size ple_size3_v1; @@ -930,6 +931,8 @@ struct rtw89_mac_size_set { const struct rtw89_dle_size ple_size9; const struct rtw89_dle_size ple_size18; const struct rtw89_dle_size ple_size19; + const struct rtw89_dle_size ple_size32; + const struct rtw89_dle_size ple_size33; const struct rtw89_wde_quota wde_qt0; const struct rtw89_wde_quota wde_qt0_v1; const struct rtw89_wde_quota wde_qt4; @@ -938,6 +941,7 @@ struct rtw89_mac_size_set { const struct rtw89_wde_quota wde_qt17; const struct rtw89_wde_quota wde_qt18; const struct rtw89_wde_quota wde_qt23; + const struct rtw89_wde_quota wde_qt25; const struct rtw89_ple_quota ple_qt0; const struct rtw89_ple_quota ple_qt1; const struct rtw89_ple_quota ple_qt4; @@ -952,6 +956,10 @@ struct rtw89_mac_size_set { const struct rtw89_ple_quota ple_qt57; const struct rtw89_ple_quota ple_qt58; const struct rtw89_ple_quota ple_qt59; + const struct rtw89_ple_quota ple_qt72; + const struct rtw89_ple_quota ple_qt73; + const struct rtw89_ple_quota ple_qt74; + const struct rtw89_ple_quota ple_qt75; const struct rtw89_ple_quota ple_qt_52a_wow; const struct rtw89_ple_quota ple_qt_52b_wow; const struct rtw89_ple_quota ple_qt_52bt_wow; diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index b825b1b4ad9f..cd5039e1294c 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -68,6 +68,32 @@ static const struct rtw89_dle_mem rtw8851b_dle_mem_pcie[] = { NULL}, }; +static const struct rtw89_dle_mem rtw8851b_dle_mem_usb2[] = { + [RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size25, + &rtw89_mac_size.ple_size32, &rtw89_mac_size.wde_qt25, + &rtw89_mac_size.wde_qt25, &rtw89_mac_size.ple_qt72, + &rtw89_mac_size.ple_qt73}, + [RTW89_QTA_DLFW] = {RTW89_QTA_DLFW, &rtw89_mac_size.wde_size9, + &rtw89_mac_size.ple_size8, &rtw89_mac_size.wde_qt4, + &rtw89_mac_size.wde_qt4, &rtw89_mac_size.ple_qt13, + &rtw89_mac_size.ple_qt13}, + [RTW89_QTA_INVALID] = {RTW89_QTA_INVALID, NULL, NULL, NULL, NULL, NULL, + NULL}, +}; + +static const struct rtw89_dle_mem rtw8851b_dle_mem_usb3[] = { + [RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size25, + &rtw89_mac_size.ple_size33, &rtw89_mac_size.wde_qt25, + &rtw89_mac_size.wde_qt25, &rtw89_mac_size.ple_qt74, + &rtw89_mac_size.ple_qt75}, + [RTW89_QTA_DLFW] = {RTW89_QTA_DLFW, &rtw89_mac_size.wde_size9, + &rtw89_mac_size.ple_size8, &rtw89_mac_size.wde_qt4, + &rtw89_mac_size.wde_qt4, &rtw89_mac_size.ple_qt13, + &rtw89_mac_size.ple_qt13}, + [RTW89_QTA_INVALID] = {RTW89_QTA_INVALID, NULL, NULL, NULL, NULL, NULL, + NULL}, +}; + static const struct rtw89_reg3_def rtw8851b_btc_preagc_en_defs[] = { {0x46D0, GENMASK(1, 0), 0x3}, {0x4AD4, GENMASK(31, 0), 0xf}, @@ -2465,7 +2491,10 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, .hfc_param_ini = {rtw8851b_hfc_param_ini_pcie, NULL, NULL}, - .dle_mem = {rtw8851b_dle_mem_pcie, NULL, NULL, NULL}, + .dle_mem = {rtw8851b_dle_mem_pcie, + rtw8851b_dle_mem_usb2, + rtw8851b_dle_mem_usb3, + NULL}, .wde_qempty_acq_grpnum = 4, .wde_qempty_mgq_grpsel = 4, .rf_base_addr = {0xe000}, From patchwork Mon Jun 9 19:27:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895150 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6614E145B25 for ; Mon, 9 Jun 2025 19:27:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497260; cv=none; b=RQSM6flypaZPNLj+tvUpVScj5zS3VXbuUZ7Cq5yXnhyXzsYb7oGR/hQlgj5JSWtX8YzeHoA6+ZsKGU8M2L9qMmVozFqo7oBqmQdfa6cXcx+aSUh8IcjEBCAcYWFsxFWswL+AZh3NhccTBwi3aO57j0v/urobN5fmMZ7oqova7y8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497260; c=relaxed/simple; bh=7p5CbvrkN+3zfriFescKoWzZqb6H09+xAkqYXYw5XA4=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=faeJl69r7pDuU3nAM0I0Uq5gsiaNovizrOMcuc9R3myX3cMJAcmcpgCGKr1X5Tp1ooifK95i+m96yLwl2emmJAbWdDkKgEdCD7xqnRXJpYKiM44mxn5G4Uijt8tZPdo6xberFenahTPi+UEkq+2olD6ZAAPwVG+Qj8eEMVEn/uk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bjQDATn4; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bjQDATn4" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-6077d0b9bbeso5506863a12.3 for ; Mon, 09 Jun 2025 12:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497257; x=1750102057; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=N4pB9NAvcYQukC55NC2RiOm0Y3hDCYj32ioujV7S5kk=; b=bjQDATn42dhtbr5b/xkM3ig0JNKwqttBwJzQrAOIn95SwOU3UQXdRqjLqeOt5vrfNg SfwKZX12HZG2TuK3BmTDaF4sXeCC0zQM0KONHJ4Z3yM/wScdvtl5yobG5658CXK48te/ j4D1TKyL3JrE9kh+Rm1dRb+eEwPmiFRe12HzhRfaTY2zycHTtLI4gJE/aB0uW6GYwAkM kbGbrN34Pg1RoGl5cZu81zIdn4SqBCtVNPh9ave9Jc2+e89+7vj0roZIvG83wzb9Pyug IcyDZg5gCQfIXAzOPp1+6ts5PtNvAZiJ+Z8BUMv6Rr/Q47uZzLeQQ6gqDS3R8ynFhQPs KMxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497257; x=1750102057; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=N4pB9NAvcYQukC55NC2RiOm0Y3hDCYj32ioujV7S5kk=; b=ikfb1f6mxxDn7JBh0GGaQh5/mtI7bXbF2CCScLc6TqStOrK7RzDrlx2mSL7ektvef2 da1tP+OLd09iE+eZ2FRwp9Ph8HLkbhSO6j5hgC9abUw6zS9UOu9cvItH0Xb00Qy8tAz0 9YPnWZBRT856p2dYsSiDQIWeL0tpqGV8c2OgFG5WKjrH4tevG9FjgZq3gWQu6x0DEbNh wlVuoEl40x+T0wpp64g87Bolwv8W4TNWKQbM0t/9uKMV0ZN5Nu8WjU9NpgRq5JADhBod ZncsVnDiyhlzL4fe3shEDiTFaDSsNqUOdolyZ5+kVtYfDTXMCy1LYhWahOE8btLxoX9K gVfw== X-Gm-Message-State: AOJu0YyPSapQ/EbGN/yNcCU/BROJ6mXOf3p+qcTxnG8tcH4hYm50wtua 4jhDYJT6/bcMHVt9PbQ01TiC9V7haiD6jxu2awzIoD9J+Pw3vD0oyMJS1w4F7A== X-Gm-Gg: ASbGncuEi4+R8VGGFJkBvWkZmMvpvFSk8W+yRMWLvtPVFLgDo2A4tTHtu1M7Fy8+wA9 wBHYs0ZeekpGwxy6tJh8gyBJPCaKCQDgzY85yWkBm8WER8C02dX6a1nV3wf6gtWJtV/LLmCHreB AevGEsbbh1T0/jOxFyyqJ+JDde6foxnBOPiIZKqQTBbZjRVRFM5fZeGAVEPjHrg9PHCtotQBNya atEWXsbMGhpCJDO+04cnBggeMZd81NecDwqrqMoZWA5hNRu0HkJmXY4m/QzNx8E+MPsBUKwgNJX 1OyBRp2TOveCO5A0qQm+psurCViSr+PwPJAgnU/7ffc9v0+BYf3c81a6n1w= X-Google-Smtp-Source: AGHT+IFpKm3Up7Pfl9xHzCq3W250N5gjm+v2IdObc8/Sxj7b1gC5xfU2bvLZHwx7a01bW452BJmpxQ== X-Received: by 2002:a05:6402:d0b:b0:607:2469:68bb with SMTP id 4fb4d7f45d1cf-6077498ed5cmr12635126a12.33.1749497256712; Mon, 09 Jun 2025 12:27:36 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-607783dccbdsm4952357a12.54.2025.06.09.12.27.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:27:36 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:27:34 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 05/14] wifi: rtw89: Add rtw8851b_hfc_param_ini_usb From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> "hfc" seems to mean "hci fc" which may be "Host Control Interface Flow Control". These are some parameters needed for RTL8851BU. Signed-off-by: Bitterblue Smith --- v2: - Adapt to the changes in patch 3. - Add more information in the commit message. --- drivers/net/wireless/realtek/rtw89/mac.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8851b.c | 46 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 9ca88a293f99..7f3c816d4704 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -881,6 +881,7 @@ static int hfc_reset_param(struct rtw89_dev *rtwdev) switch (rtwdev->hci.type) { case RTW89_HCI_TYPE_PCIE: + case RTW89_HCI_TYPE_USB: break; default: return -EINVAL; diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index cd5039e1294c..048e64fa1d51 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -51,6 +51,48 @@ static const struct rtw89_hfc_param_ini rtw8851b_hfc_param_ini_pcie[] = { [RTW89_QTA_INVALID] = {NULL}, }; +static const struct rtw89_hfc_ch_cfg rtw8851b_hfc_chcfg_usb[] = { + {18, 152, grp_0}, /* ACH 0 */ + {18, 152, grp_0}, /* ACH 1 */ + {18, 152, grp_0}, /* ACH 2 */ + {18, 152, grp_0}, /* ACH 3 */ + {0, 0, grp_0}, /* ACH 4 */ + {0, 0, grp_0}, /* ACH 5 */ + {0, 0, grp_0}, /* ACH 6 */ + {0, 0, grp_0}, /* ACH 7 */ + {18, 152, grp_0}, /* B0MGQ */ + {18, 152, grp_0}, /* B0HIQ */ + {0, 0, grp_0}, /* B1MGQ */ + {0, 0, grp_0}, /* B1HIQ */ + {0, 0, 0} /* FWCMDQ */ +}; + +static const struct rtw89_hfc_pub_cfg rtw8851b_hfc_pubcfg_usb = { + 152, /* Group 0 */ + 0, /* Group 1 */ + 152, /* Public Max */ + 0 /* WP threshold */ +}; + +static const struct rtw89_hfc_prec_cfg rtw8851b_hfc_preccfg_usb = { + 9, /* CH 0-11 pre-cost */ + 32, /* H2C pre-cost */ + 64, /* WP CH 0-7 pre-cost */ + 24, /* WP CH 8-11 pre-cost */ + 1, /* CH 0-11 full condition */ + 1, /* H2C full condition */ + 1, /* WP CH 0-7 full condition */ + 1, /* WP CH 8-11 full condition */ +}; + +static const struct rtw89_hfc_param_ini rtw8851b_hfc_param_ini_usb[] = { + [RTW89_QTA_SCC] = {rtw8851b_hfc_chcfg_usb, &rtw8851b_hfc_pubcfg_usb, + &rtw8851b_hfc_preccfg_usb, RTW89_HCIFC_STF}, + [RTW89_QTA_DLFW] = {NULL, NULL, + &rtw8851b_hfc_preccfg_usb, RTW89_HCIFC_STF}, + [RTW89_QTA_INVALID] = {NULL}, +}; + static const struct rtw89_dle_mem rtw8851b_dle_mem_pcie[] = { [RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size6, &rtw89_mac_size.ple_size6, &rtw89_mac_size.wde_qt6, @@ -2490,7 +2532,9 @@ const struct rtw89_chip_info rtw8851b_chip_info = { .max_amsdu_limit = 3500, .dis_2g_40m_ul_ofdma = true, .rsvd_ple_ofst = 0x2f800, - .hfc_param_ini = {rtw8851b_hfc_param_ini_pcie, NULL, NULL}, + .hfc_param_ini = {rtw8851b_hfc_param_ini_pcie, + rtw8851b_hfc_param_ini_usb, + NULL}, .dle_mem = {rtw8851b_dle_mem_pcie, rtw8851b_dle_mem_usb2, rtw8851b_dle_mem_usb3, From patchwork Mon Jun 9 19:28:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895966 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 477B2145B25 for ; Mon, 9 Jun 2025 19:28:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497295; cv=none; b=gJZ5EQBq2USPG8tKkfQIeUaLLpkA3IFJQ/qTlnxCoRKhG9fffh+GcuOE/Y/CGdAf3HmNE20yUZjF+t44iZn6FHFHE9rCl6d/wk4AvSMrXLO7554KCR3RXy9BTCd50lWUaBRM+WyHsFGRYp7xLifMedO3n6FlEWqsh1Q6+W5hviQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497295; c=relaxed/simple; bh=+pV+fOMoKXaHlkNvd0jFMeNmRohR8UZzkYzqzF4tF+U=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=J2Jzl1gYvViOOG8mz8MwMh5cvHNJ9O+RAcbajTfMEl7firjbA6IcsnFsXRp+p+1OIMzmwIfKt1762D61RPSBRHuK7oasYutE7ToPMnTcOWQsF5qSPak644/ZU1X64vyyQWlArNBs5bRgm+/FrU7GvtTfo1r4svVsHixlLKwGeTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DyCXs45z; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DyCXs45z" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-adb2e9fd208so858921966b.3 for ; Mon, 09 Jun 2025 12:28:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497292; x=1750102092; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=R/HV1lLF6yRpN9qJmbyYwGYq6JfXVSAXhBu/MEYCDsA=; b=DyCXs45z3nsJ5Ci2Wm69X4cjHAjsLrk6dgkkeargdXT7Zn5FUq3bl7flaLwr33vNWp dUFCyPGvolKbJYTqKNiaL1u1rTHS1KINrjhkSIAYl7hblsCgYEWsuqDhy0cROnJirsLZ cXq+umRIYpouit/Xotfyz8+Ji3iFQcM6Qx3wm7cTjf8TV1oWdOhEeI63276uUxcMb7kW LGU4l3rbj8vvQpJRvWFFKd0us5tCMYtNnbYQxquiI015kOvFv9yS+2ouW1fg4ma3vzf0 GEp0C7UhyPY5gahlaztWThZ1d9b0J8cIxV8aWi9kdWgyGbI7SfW4z1+oEd7UjOGUd30w Fjjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497292; x=1750102092; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=R/HV1lLF6yRpN9qJmbyYwGYq6JfXVSAXhBu/MEYCDsA=; b=EEZ3wL60voNDRXGUUOgp4EnRzvIiGNjdkBMLt4GcpZ3au4qex2Nm8zrfep7d7tjbq4 t5uLhVVmlc8b1suW5ddJrWjRjY5MdLKfxVJfIh5shRJTpLaYlhjKsLvEeBHeDRwKDzT1 JmHEM4ow9dWM4nYOhknewxF7Q/S3+xjz8nXjdxMaYhzUByxeFwTIG6zyxXzO6IOpEDeX sY1bJqUv4K/zGSbx2AWLMa0p+QhCGcB/rrWztPNvqRF2df4EK816TSm6IrAC24kj8Jb4 I/L6HKeejm0VN8IzQ2jGCPL2XdMJXISsSRmo1MFPwLogZmE8oayGyDV3E3VtedxijJEP RXZw== X-Gm-Message-State: AOJu0Yz8gpTum3eNMREQIbBl0QCzlbLFfJvNP2zbo7EbBWOPYD6rkTAY fwqPdO29VZBiWHCv61BZfKgrH2NA1yjoIztwRD/eDRAk0usqvXXvH+Un+ZKdaw== X-Gm-Gg: ASbGncsSdq+oIGeXnANG7FSNhWPelpf0XSomVAvs7qbeBT6WhvJFqWTmquKrR9HbfAt elKQLQ1cbR7Q5go2MaDLThsWhM90j6v9AAWth0JfVjjpexmdlXztOhpcXN8pFPIM/W2eyUna+y8 scpt08YmXnlMgciSIbIeTDrMZEiTAXQjBGlqop0yUOTnJ4ax6svScsu+5QwB1qSyXHY+AsVkKEF yP70ngQS8ivv7v+PurfDgD70GkLGWk+iuOqHCkTrcdt+8Os2w49LPiBIu8nLuxAiL7T338KdXZG pQJxlUyitGbs/ZggTptcmMdoRwK6PwoRwvI1o1c1xpA14iBLAq7vt2b3bgFpnEbMUqLolA== X-Google-Smtp-Source: AGHT+IGPYCHR7IijoPevwmVzDVreZLPkaoky/isLXSaMpSvj6td40f1vxfRNLoAQJXnueVgaawpK2Q== X-Received: by 2002:a17:906:7315:b0:ad8:9645:797a with SMTP id a640c23a62f3a-ade1aa4d67cmr1368509166b.15.1749497292472; Mon, 09 Jun 2025 12:28:12 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1dc1c1d8sm596484066b.83.2025.06.09.12.28.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:28:12 -0700 (PDT) Message-ID: <1e25d8b6-fb5c-4733-81ec-b9ae9bbd8f92@gmail.com> Date: Mon, 9 Jun 2025 22:28:11 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 06/14] wifi: rtw89: Disable deep power saving for USB/SDIO From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Disable rtw89_mac_send_rpwm() for USB and SDIO because it is called in atomic context and accessing hardware registers results in "scheduling while atomic" errors. Disable rtw89_mac_power_mode_change() because it prints an error message when rtw89_mac_send_rpwm() is disabled. Modify rtw89_ps_power_mode_change() to call rtw89_ps_power_mode_change_with_hci() only for PCI because the latter is probably relevant only for PCI and also because it calls napi_schedule(), which results in dereferencing a null pointer with USB. For USB and SDIO rtw89_ps_power_mode_change() probably needs to call rtw89_mac_power_mode_change() instead, in case deep power saving is ever enabled for USB or SDIO. Signed-off-by: Bitterblue Smith --- v2: - Disable deep power saving for SDIO also. - Don't disable rtw89_ps_power_mode_change() for USB/SDIO. - Disable rtw89_mac_power_mode_change() for USB/SDIO. - Call rtw89_ps_power_mode_change_with_hci() only for PCI and call rtw89_mac_power_mode_change() for USB/SDIO. - Update the commit message. --- drivers/net/wireless/realtek/rtw89/mac.c | 6 ++++++ drivers/net/wireless/realtek/rtw89/ps.c | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 7f3c816d4704..2cebde9e9229 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -1336,6 +1336,9 @@ static void rtw89_mac_send_rpwm(struct rtw89_dev *rtwdev, { u16 request; + if (rtwdev->hci.type != RTW89_HCI_TYPE_PCIE) + return; + spin_lock_bh(&rtwdev->rpwm_lock); request = rtw89_read16(rtwdev, R_AX_RPWM); @@ -1412,6 +1415,9 @@ void rtw89_mac_power_mode_change(struct rtw89_dev *rtwdev, bool enter) int ret; int i; + if (rtwdev->hci.type != RTW89_HCI_TYPE_PCIE) + return; + if (enter) state = rtw89_mac_get_req_pwr_state(rtwdev); else diff --git a/drivers/net/wireless/realtek/rtw89/ps.c b/drivers/net/wireless/realtek/rtw89/ps.c index 8e4fe73e7d77..9f63655b7568 100644 --- a/drivers/net/wireless/realtek/rtw89/ps.c +++ b/drivers/net/wireless/realtek/rtw89/ps.c @@ -57,7 +57,8 @@ static void rtw89_ps_power_mode_change_with_hci(struct rtw89_dev *rtwdev, static void rtw89_ps_power_mode_change(struct rtw89_dev *rtwdev, bool enter) { if (rtwdev->chip->low_power_hci_modes & BIT(rtwdev->ps_mode) && - !test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags)) + !test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags) && + rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) rtw89_ps_power_mode_change_with_hci(rtwdev, enter); else rtw89_mac_power_mode_change(rtwdev, enter); From patchwork Mon Jun 9 19:28:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895149 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6815A145B25 for ; Mon, 9 Jun 2025 19:28:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497321; cv=none; b=dwVgMkpnXAp3kFrPNmvAX/zXlrAGqh+IvZTLr1z8IvkNy7fYUMEen/W34SkTRc5RznQZeuu1mMNjTWEPwhiSX0dpl4T4E74a1F3t7baY1/DOEun+IIfXcpV33i61h4F5lmwFt2/4Md9qr8fJ8EYK5iAS7HogrPLdDfDqVCtK3x0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497321; c=relaxed/simple; bh=Zfgr0Z296aQfbpOah8WrjUUQbS8pWj91tIUZjzhX61w=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=mFBI7gCDATR6Jrdx3HQvhupwrv+lpJlMgpUOyihVuqyr2vARDp3PjjQ65/3LYU1rF15J3/8BUVFy5oaoUnk79E+T6zsEQbtv7WrKKY6JkM/1k8hpa8O+IhLaU9aAF6cNynG27qW/mERDIDjynHUzxwdyQR8VBvlpn05fmA7cSvo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cXJMSY1o; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cXJMSY1o" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-adb2bb25105so743582266b.0 for ; Mon, 09 Jun 2025 12:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497319; x=1750102119; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=h6CFJ/B8tsyJkolJjYXN4fyoaWrWjgfH6qkJZE2W6s8=; b=cXJMSY1oVR9wVfs+10633renxp8+VxTGbzxrwiUv+MN9PdnB4/7M20N0efMnykP9+G Oo3i8hiv7tXU8tysSO8yUq3bAlVDo/6fRAYnZ95H/lIqPFvkupNb2VgQoRgI8vCQw9Sn BtJ9qPvTbBoVBTZCVs2H2LH96rPVPPgag4uQpyGgxBxfhW4FnPPuocSK/x1+xros/CHB at8PCg5uLbLII8/Fc8PP3g7bRiJ0Yjec5DxW0N05dcwzY6CSo5nsUJuX5VxG6ywSywsa xUEV5kwTLcJaGdOaqxB7x3fZmzQZgj/GGyeH59ujXgigamjN6n5ZG670aJz550HTwoi9 VNwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497319; x=1750102119; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=h6CFJ/B8tsyJkolJjYXN4fyoaWrWjgfH6qkJZE2W6s8=; b=rV6UI8XqfpQA4kE9GxfY2rIGW8MOxNoqScd2movdgvCxPk3HgZZYJqPOmuS+OB+Vkr TRZzkT5TEA1xeM6Ezi95qCLO/e5/sZGi4Q2+o9Iw4KfssrGxlhF0O8nGDcBtAkDqywQL Eg5jnRJHszDJ3BEpBlIhDngrRPdEX0hyLDLoH0/Kz7XaB/sWASkDLGZc0sEbgtiHzSQ+ DXhlyFb6bM+BnK+NlVNW/9a4/e8oF6B0N39wdrGuaDG8lAHRu7fCIhaKnFkK0nbkH0F8 jzGXrUi+dDvD2piuQ4ylM3IJPXyqbEsNXZnev1QaswD8PFGqlq6DiUpT6rN1xjM65t12 ATVg== X-Gm-Message-State: AOJu0YxF6h3xIWrtscTbd3YvlkMQb5sJlWANp4B+A7JcaVBGCpjpZK8p Ln0r71pv+sCUT0uw5LFYfWTKxqQU9xyNw4hPgevRh98B4qx+PY1ogiyr3zh+2A== X-Gm-Gg: ASbGncvJ3wQBJQgHpM13bcfOH7Q10bVPfxuqulXWu9+Rao/rXpTYnkXjNzwNNLZgdNU WCsHKBUeWTfmNx94s2fD7hnMOx9lxgT+r55jYAlL5Qf2GeLVf7JSNypG4MF3U6JE8zH81WMtWz8 j3ozfn6FP49DPq8DSy3jyp8CoMRquQhIjezkwupkFtIG5iybemWQ36KwqWXpnrD427IQG1jzpIO xXx60AWLRWYohWbcPMPELo9MGU/yPnl1aReWs3NtEsd3mSJLNEajhRkzp8vkG2r+e6g4znihWQx 3T8EgHllOgWATKUpe2hNLXhw6pLvgYVCOpYLj5661FeFoUouVUVQnUNlcoQF51Gn2eEy7soKVuX 5h119 X-Google-Smtp-Source: AGHT+IGIhed4n07kk4QPt7OY4njF0LS/F6KILZLrQgO6ja4RV4sLN7ZqzoMaAToemApT0OSjJTHfUg== X-Received: by 2002:a17:906:a409:b0:ade:7512:d9ba with SMTP id a640c23a62f3a-ade7512db89mr69661966b.26.1749497318702; Mon, 09 Jun 2025 12:28:38 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1d754653sm592538566b.20.2025.06.09.12.28.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:28:38 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:28:37 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 07/14] wifi: rtw89: Add extra TX headroom for USB From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> In the case of USB the TX descriptor is transmitted in the same buffer as the 802.11 frame, so add the required headroom. Signed-off-by: Bitterblue Smith Acked-by: Ping-Ke Shih --- v2: - Add Acked-by. --- drivers/net/wireless/realtek/rtw89/core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c index 49447668cbf3..ce5c96eea769 100644 --- a/drivers/net/wireless/realtek/rtw89/core.c +++ b/drivers/net/wireless/realtek/rtw89/core.c @@ -5473,6 +5473,9 @@ static int rtw89_core_register_hw(struct rtw89_dev *rtwdev) int ret; int tx_headroom = IEEE80211_HT_CTL_LEN; + if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) + tx_headroom += chip->txwd_body_size + chip->txwd_info_size; + hw->vif_data_size = struct_size_t(struct rtw89_vif, links_inst, n); hw->sta_data_size = struct_size_t(struct rtw89_sta, links_inst, n); hw->txq_data_size = sizeof(struct rtw89_txq); From patchwork Mon Jun 9 19:29:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895965 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D7E9145B25 for ; Mon, 9 Jun 2025 19:29:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497372; cv=none; b=jYK2pzR2lehiaQ2c3CC9rWYppvY6izljc3LsYz7WVs3a5113AQcudRdztfxfRntdxha1m5wG1L3M9K89HjxSWrHVlO21slUOwYP/0anmOJ8R5bXX4D+HzoLYCHn94AyxDSJsRby1IdJLjKYOtxD0g1WtGxOUwWKq+IiJbV0J8yU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497372; c=relaxed/simple; bh=WsJ62ab6FlciHrU9PObjSVCQj9lmy8ZeO1TBjfKIOH8=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=jYvSOhDBBC05Sap225eYNBbNd+j2ZDzzQHtkUQoojttSgnyACm01CgMi7jzMaAkI8I4d6IH6+x6r+135cO09PXGFIE14GdrOvF/IH7LSJZlB7Mq0IWOlWkMYUc1uDvWPyEjm4sxI+G5p2IZppZDI0BQgkAaQYUoOROvH8o7RIGw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LXIt/KN0; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LXIt/KN0" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-60727e46168so8033142a12.0 for ; Mon, 09 Jun 2025 12:29:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497370; x=1750102170; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=UhUB7RftpmwHWGfjyASjgengEyioY0Z4TfCTEFo+R3I=; b=LXIt/KN0/uAl/6Pn/wJJAZcubSIe0Pk2YkNi5le6VMmBbrGETWymaNxR/0iU0rEv+V Qhepc2pyfp2oweCUPQho+1NZzCYQ0Qigf818OFBTFMnaHZcS2kTNbYLf24JOzKOhu535 Dq76b5DaVhrqQbdWslfR+zxqVFdf1TenWMidh5WULslcpJuILjhk6i+Qy3OssKnmG+tF H49itbWAydOa3glwqErl1jC9lCjAa/TaFR/+eZXcK5smgNxHyAdt85+WjnaZuhtoq6lg 8U7OjOvno7jqcwPK8RLfm6oIEpbZJicICqt3aRsD65NEfKxYVgDJY4Z1kj+pg/FBH7xQ 6vgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497370; x=1750102170; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UhUB7RftpmwHWGfjyASjgengEyioY0Z4TfCTEFo+R3I=; b=ek2OU1Xv77ob/d5IDGRMHg4MmvHEhQQ2kLfzybN1OM4/zsIOwzmiAxwm5ZGkHCMraj Uv0jsumkgsUXHsLN68RWJmSWYMtlvNnFoB9y46esEClVJ8Dbz1er4BO8j3QHROM7LgSI gjlTKyuwK29lq9jDH0k74sE30pQ5dKma0mvWgjS2bH4Tj6I29AUEPLB0G7SNhYnfxcjs WKuSG6oFaky+57Eb3wVp/USbsSqgJEOFavkJ80L1ML+ypFZ3n4RDIzeybQebLpyRM2IG yGbYo4wHJPE1LWFLbr85NBWnBrArXyYEHcmTh2i2ic4hJDYkrwWBpruwVDtRF8Btdqmz nPJA== X-Gm-Message-State: AOJu0Yz0G9xQiH87fvteGZX+bMLS8fhw9p9yUXeUR62MohLJvpAqQvvG 9N0yyAx1NGodLZYJAjLTemAZ9eHoA1NXsNV62jgkf2gb/ot3X0IkcN8yz9laHw== X-Gm-Gg: ASbGnct20QdPpfOuyoGncsy2peFXEa15+v4NIEQ5lWq5k1jWMRs43KtxxOgYLvugkIQ 20HOHMluIhJYw0RJLbhXNendboSRY1WxzIyR/kkLRFxN1IDqNAYJHrmWnRj7D7D7zl59nDsXwkl Id9ACo/2/gwhMSOKpdDnlC/cX3+7/dsiuUZDy7B7wjfUoPZFb1lxmjUWv2HJZSsqbKuATC5Ky21 T/cQV1V6wQWXKZa5yMbh4NflUl8wBD2dCqXyVR3PWrQFte0MDDh6kDiKs0X11EFoVJL3Y6JboIK /LA8QiditgAHQN5lINdXOeXO+SExmlqBjbrrnYR7tDKYmgchnqSuZdkZXTQGHAzfw3+D/g== X-Google-Smtp-Source: AGHT+IE0unOzn3aF4/nXqna15HdvDBk8JzUIT0HiBdimGD8fBnber+U7VjKwV7Bkk4dJ0AbH5lpfmg== X-Received: by 2002:a17:907:da3:b0:ad8:9909:20aa with SMTP id a640c23a62f3a-ade1ab0872emr1402648066b.40.1749497369573; Mon, 09 Jun 2025 12:29:29 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1dc7b25dsm588265666b.156.2025.06.09.12.29.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:29:29 -0700 (PDT) Message-ID: <9f307332-928c-475e-9545-8dddcb33aa08@gmail.com> Date: Mon, 9 Jun 2025 22:29:28 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 08/14] wifi: rtw89: Hide some errors when the device is unplugged From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> A few unnecessary error messages are printed when the device is unplugged. "read swsi busy" in particular can appear ~1000 times when RTL8851BU is unplugged. Add a new flag RTW89_FLAG_UNPLUGGED and print some error messages only when this flag is not set. The new USB driver will set the flag when the device is unplugged. Signed-off-by: Bitterblue Smith Acked-by: Ping-Ke Shih --- v2: - Add Acked-by. --- drivers/net/wireless/realtek/rtw89/core.h | 1 + drivers/net/wireless/realtek/rtw89/mac.c | 13 ++++++++----- drivers/net/wireless/realtek/rtw89/phy.c | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h index d4c7b47c3ba6..3f0ca65431ef 100644 --- a/drivers/net/wireless/realtek/rtw89/core.h +++ b/drivers/net/wireless/realtek/rtw89/core.h @@ -4927,6 +4927,7 @@ enum rtw89_flags { RTW89_FLAG_FORBIDDEN_TRACK_WROK, RTW89_FLAG_CHANGING_INTERFACE, RTW89_FLAG_HW_RFKILL_STATE, + RTW89_FLAG_UNPLUGGED, NUM_OF_RTW89_FLAGS, }; diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 2cebde9e9229..875c1a3c5ca8 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -88,7 +88,7 @@ int rtw89_mac_write_lte(struct rtw89_dev *rtwdev, const u32 offset, u32 val) ret = read_poll_timeout(rtw89_read8, lte_ctrl, (lte_ctrl & BIT(5)) != 0, 50, 50000, false, rtwdev, R_AX_LTE_CTRL + 3); - if (ret) + if (ret && !test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) rtw89_err(rtwdev, "[ERR]lte not ready(W)\n"); rtw89_write32(rtwdev, R_AX_LTE_WDATA, val); @@ -104,7 +104,7 @@ int rtw89_mac_read_lte(struct rtw89_dev *rtwdev, const u32 offset, u32 *val) ret = read_poll_timeout(rtw89_read8, lte_ctrl, (lte_ctrl & BIT(5)) != 0, 50, 50000, false, rtwdev, R_AX_LTE_CTRL + 3); - if (ret) + if (ret && !test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) rtw89_err(rtwdev, "[ERR]lte not ready(W)\n"); rtw89_write32(rtwdev, R_AX_LTE_CTRL, 0x800F0000 | offset); @@ -5885,13 +5885,15 @@ int rtw89_mac_coex_init(struct rtw89_dev *rtwdev, const struct rtw89_mac_ax_coex ret = rtw89_mac_read_lte(rtwdev, R_AX_LTE_SW_CFG_2, &val32); if (ret) { - rtw89_err(rtwdev, "Read R_AX_LTE_SW_CFG_2 fail!\n"); + if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + rtw89_err(rtwdev, "Read R_AX_LTE_SW_CFG_2 fail!\n"); return ret; } val32 = val32 & B_AX_WL_RX_CTRL; ret = rtw89_mac_write_lte(rtwdev, R_AX_LTE_SW_CFG_2, val32); if (ret) { - rtw89_err(rtwdev, "Write R_AX_LTE_SW_CFG_2 fail!\n"); + if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + rtw89_err(rtwdev, "Write R_AX_LTE_SW_CFG_2 fail!\n"); return ret; } @@ -6015,7 +6017,8 @@ int rtw89_mac_cfg_gnt(struct rtw89_dev *rtwdev, ret = rtw89_mac_write_lte(rtwdev, R_AX_LTE_SW_CFG_1, val); if (ret) { - rtw89_err(rtwdev, "Write LTE fail!\n"); + if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + rtw89_err(rtwdev, "Write LTE fail!\n"); return ret; } diff --git a/drivers/net/wireless/realtek/rtw89/phy.c b/drivers/net/wireless/realtek/rtw89/phy.c index 76a2e26d4a10..87dc88ea38c4 100644 --- a/drivers/net/wireless/realtek/rtw89/phy.c +++ b/drivers/net/wireless/realtek/rtw89/phy.c @@ -895,7 +895,8 @@ static u32 rtw89_phy_read_rf_a(struct rtw89_dev *rtwdev, 30, false, rtwdev, R_SWSI_V1, B_SWSI_R_DATA_DONE_V1); if (ret) { - rtw89_err(rtwdev, "read swsi busy\n"); + if (!test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + rtw89_err(rtwdev, "read swsi busy\n"); return INV_RF_DATA; } From patchwork Mon Jun 9 19:30:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895148 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C914F38DF9 for ; Mon, 9 Jun 2025 19:30:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497408; cv=none; b=ULgIJ/4aEEmQ4DQbdfkOTV+08rcJefUKs/nu5ewkzWkzPRHWuCUGk0A1WhA1ST7SqjxH6ZtPZqgvOJrGxJaq/PKwv0+oSELv16QQuyyUbE29q71SRGdjk98PIwUJ8Ny4Ag0rXqmaUwXUAQOXLXXIZ+8QUzadT3KPX8nSSkm+3tE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497408; c=relaxed/simple; bh=CS2fAuG0A+bpOrLLie2QhLogYfgoDvdojPJQ1F9crfU=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=VHPS8M6dnEtQC+aBuxmytYdxu9d0ROv+z13stjiwr9HlxQPdF3eJINwOAHMB5hqQuZn69h0vybtevT+8tFtM47o86k4KAm/3zrIACrOoMWd7CntN41vc5E1aWlym50gOVlBqsY/5b3PXrWyqxI+Oj7C8feLmJYbEeiWu/R+dYUk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JdFSD1PU; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JdFSD1PU" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-60780d74c8cso5477898a12.2 for ; Mon, 09 Jun 2025 12:30:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497405; x=1750102205; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=/5qbHu4E+JFmWHgDmTelQjxvod01GN5J3P8cps/tIhk=; b=JdFSD1PUqtbIWhO6w4oIB8BHOAnLbuRug6os1YhuKJaB4dgg4XXV+d/UkgjB/D9CLP 67jcvRLaQh3IAd19NbBfVkBEz99zleZgvShP026h4L4VvU744+vOJSHZwjAMe3KqL2y/ E3Uf4apwbbM+H2A1jQ9vLjvyV3NxUGbCMeL685/CY7daCNSbLnIGlYErjnAO1dAptrbV olSin7sy+UUKr6jWjdS0I3znLqOXb0f8zZpoYjKQPE7QbtH8hOXEt8M7Yly4wlagRlbv 2BxL4EuVumh8ulJEblQL8O+jG/hJfw8XJ8W4Z3IOnCfavh4G1/gwYTgmWEqQIowRNGp3 amNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497405; x=1750102205; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/5qbHu4E+JFmWHgDmTelQjxvod01GN5J3P8cps/tIhk=; b=Z2eDeype2bknvD8rof8WiyE7bWixgwf8RP8LXdQy/5iIUTsiN3qvfaK3tXGAW1lEpn 5MDI7Aay7fMfjSBV1YIMG82jhIkNlMydE05u+vc5RgN4Ki2qE338+Yw2ttOicbk4jL5B c7zUqs3hPOuDplYsNEzEJm4m90aWbcRCnVQroHc7EN+DB6HKAs2j756TPYeKIGFAY3Do rUe2QEiTDcyIwI8RpgefplIlvlKeFZroGYGceVbF2is2qASZs1jF8KDn4t9tM5sosMY7 kaGzPAivGmLXIu2hkbglfqloJuwbs8AZ9QK1vzTLhCB3H2aZRL1Z9DHmj2vMylZevXzE WpnA== X-Gm-Message-State: AOJu0YwzuG5BBv1XKBZPqJnzlGKqugo9DRFlyKRz7zl1frX4oK0cxLiD gmyBoZB1ROwpqXAi5QY6TJt80MYqp+zHe21U0VNLgfcWdIPA0MPYzMvfCuBHZQ== X-Gm-Gg: ASbGnctKAsun/BNkvwhvyf6SgCFWJaHCfL/JMDKscLWFKIqFOYCah8Ir4L/rlnHbMhf NdBQTCKtJvBesG+bN3P6tt9IAKc7ZOKvG1q/Q+pgi41vdHOV4tlxwauCl5O8p4oZK3RrsX/hD9K 6zCtzVRUCEgQvp5gQMzj4YeTu8vHKAWrL5LDRSozZgtahAhK3/2pa4JShAt2f0Dzt5JU7UlNicP TbgeZXff9E4xWc3CGMhtD+Fr7Nhdd9Tv7vPlN7ryM8juSw+uZJ3LCjxiHhEyP/h8wlXbApPwWXJ 4qO3Om1tkezZ1q9AwHURtwSvEwXQv8rM5doKVU2BQqt/TIKx5c+d+oglQxM= X-Google-Smtp-Source: AGHT+IEYxkwxSv94AXBjt4/RCd8Sk/wLH2zrD2yPwOWzQSPYTP0+BEdCAkiUBys4wL2toqD8RQRF1g== X-Received: by 2002:a17:906:c145:b0:adb:23e0:9297 with SMTP id a640c23a62f3a-ade1a905877mr1440656466b.17.1749497404957; Mon, 09 Jun 2025 12:30:04 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1db55ccdsm587446166b.44.2025.06.09.12.30.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:30:04 -0700 (PDT) Message-ID: Date: Mon, 9 Jun 2025 22:30:03 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 09/14] wifi: rtw89: 8851b: Modify rtw8851b_pwr_{on,off}_func() for USB From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> There are a few differences in the power on/off functions between PCIE and USB. While the RTL8851BU appears to work without these changes, it's probably best to implement them, in case they are needed in some situations. Signed-off-by: Bitterblue Smith --- v2: - Patch is new in v2. --- drivers/net/wireless/realtek/rtw89/rtw8851b.c | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c index 048e64fa1d51..febe9b7afe59 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c @@ -385,7 +385,8 @@ static int rtw8851b_pwr_on_func(struct rtw89_dev *rtwdev) rtw89_write8_clr(rtwdev, R_AX_PLATFORM_ENABLE, B_AX_PLATFORM_EN); rtw89_write8_set(rtwdev, R_AX_PLATFORM_ENABLE, B_AX_PLATFORM_EN); - rtw89_write32_clr(rtwdev, R_AX_SYS_SDIO_CTRL, B_AX_PCIE_CALIB_EN_V1); + if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) + rtw89_write32_clr(rtwdev, R_AX_SYS_SDIO_CTRL, B_AX_PCIE_CALIB_EN_V1); ret = rtw89_mac_write_xtal_si(rtwdev, XTAL_SI_ANAPAR_WL, XTAL_SI_OFF_WEI, XTAL_SI_OFF_WEI); @@ -430,8 +431,9 @@ static int rtw8851b_pwr_on_func(struct rtw89_dev *rtwdev) rtw89_write32_clr(rtwdev, R_AX_SYS_ISO_CTRL, B_AX_PWC_EV2EF_B14); rtw89_write32_clr(rtwdev, R_AX_PMC_DBG_CTRL2, B_AX_SYSON_DIS_PMCR_AX_WRMSK); - rtw89_write32_set(rtwdev, R_AX_GPIO0_16_EECS_EESK_LED1_PULL_LOW_EN, - B_AX_GPIO10_PULL_LOW_EN | B_AX_GPIO16_PULL_LOW_EN_V1); + if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) + rtw89_write32_set(rtwdev, R_AX_GPIO0_16_EECS_EESK_LED1_PULL_LOW_EN, + B_AX_GPIO10_PULL_LOW_EN | B_AX_GPIO16_PULL_LOW_EN_V1); if (rtwdev->hal.cv == CHIP_CAV) { ret = rtw89_read_efuse_ver(rtwdev, &val8); @@ -515,7 +517,10 @@ static int rtw8851b_pwr_off_func(struct rtw89_dev *rtwdev) if (ret) return ret; - rtw89_write32(rtwdev, R_AX_WLLPS_CTRL, SW_LPS_OPTION); + if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) + rtw89_write32(rtwdev, R_AX_WLLPS_CTRL, SW_LPS_OPTION); + else if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) + rtw89_write32_clr(rtwdev, R_AX_SYS_PW_CTRL, B_AX_SOP_EDSWR); if (rtwdev->hal.cv == CHIP_CAV) { rtw8851b_patch_swr_pfm2pwm(rtwdev); @@ -524,7 +529,14 @@ static int rtw8851b_pwr_off_func(struct rtw89_dev *rtwdev) rtw89_write32_set(rtwdev, R_AX_SPSANA_ON_CTRL1, B_AX_FPWMDELAY); } - rtw89_write32_set(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFM_SWLPS); + if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) { + rtw89_write32_set(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFM_SWLPS); + } else if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) { + val32 = rtw89_read32(rtwdev, R_AX_SYS_PW_CTRL); + val32 &= ~B_AX_AFSM_PCIE_SUS_EN; + val32 |= B_AX_AFSM_WLSUS_EN; + rtw89_write32(rtwdev, R_AX_SYS_PW_CTRL, val32); + } return 0; } From patchwork Mon Jun 9 19:30:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895964 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 290101922DE for ; Mon, 9 Jun 2025 19:30:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497461; cv=none; b=mppsKsAxH/jg84jDoD7As4SpMgSg+kmHycUK0f+AmE4ruHqoNjuM1Hp7KTWQzrgQ7fdy2tDnkSemSsj9C0rCpx00Xf/QM2Lg2M7sdHkVIbMI/RriIoSnfXKqdDV/aqhQH//WJuw5wTZa8a2hInP4OqHLDrN2asd/ti+Xbp06dMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497461; c=relaxed/simple; bh=sjOS9BvWK4Ff1PVy3tWbKqqFcpv4Yg/MaSTsalGwT4g=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=P4CsebjPdL5X1de68uMb4/CEWiP1CFuL7EgB5N0lwA0BVZW9efyeGt03WNVd2g3b3+yVZxs787PxX5P3v+gGE0OvCxirVTGmR3ehJj0c1YquVFjOnx0aQdUnzQe+g1lsPkQy24aFwqwni9LkbbrHNPEEd1+YU5zOxKKzfQILp64= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WkqvpSEB; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WkqvpSEB" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-606c5c9438fso8854458a12.2 for ; Mon, 09 Jun 2025 12:30:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497458; x=1750102258; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=gpgMDw7+UB0ghKc7XG8oNg+m14V6ExUUFK39B4WKBjY=; b=WkqvpSEBebElpqGM6UwmQp5wSgZWAOUt8TfMOQ5IIjksY9d1D/PBZu6uij+v+dqnmB AD1nv8IjrwouVuvWPLTRKq787cHHiVg9su/9ATUleBmwpoWrmvt4cwYqRPSi2NKwVcSA +Iar+dhTqJINVt/X+8ICwx86zgpLw0+2XfW/rzm2i6nYg7CUy2SMGaiobKcCuU7in4Dm lqXxonY6thy+bq4nOzRQf9pY7F+1tdH95iVtsYPEutfBuM3HJvq4+F35gg/7B2B6Twu8 O9gdiOxL6oH2TwNjhz6LeDhECJlxG6EZnT4vcv7aQpLipoBrLou0yOBmpyJBlzUiTgpa 6RSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497458; x=1750102258; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gpgMDw7+UB0ghKc7XG8oNg+m14V6ExUUFK39B4WKBjY=; b=wVyi6y1oUdp89/2zJExlE2Nr33J/+IBFXrvHPn10BltZQcmLN+vh0F8HBvpyCfY6HP RsU3CxLIQG+4rjBC3RtQ5MmQ4IWry/Tvp3xINL7DG1Jwld79bzdq2g87RmCjsNWDpafk WxWDKe6ixHcIAWFEYJ4n/uG9+R9hABSK1ObukvAjMMvgWzYZDamA3+i9ryq9kW756RdC XNqouPQJy88jdsVZfNrRZFtOg6pyCENd1fo3LaF0TZMGSDm9+UJFnUm0TOY2VMF4FG0F 76eF/xAucz5jCclv6wLdvWi1sVyIW6Xl2CqldWdVZHe13YQ3bMVpkEl+lFEh5Q/MFVR2 Y+Wg== X-Gm-Message-State: AOJu0YyyIu9gR45KBSX+HZdbPaI8esw/5Sz3dPqkYvDCvjPFGfA8NIx5 LiIqL5cNFZmV3Fl1mzZM+Jw8SuGLI5cRtAwhh0CTnLlTzTCKOC0hTbbZld/rcA== X-Gm-Gg: ASbGncssFEbGmkZ53d643resvTPMHbQL9tTZ65Op+rTGIUxkU1nloTrCKlW5DtQ8r9t SMXsv4rnMoRE+QLABHIOerkKGDXOFRnmQa9A4uSMONcPtd8ySC7OJ2aJeFhNtVJIRqShb/Czju4 F3MssCHU0ELYFLm8eKJDncA4N9buMVlWH0/Qk/kBlyKhTXCp9wjcM2x0txhODTYV64fqv6czlx7 EG1TlXEbL5qiz4Ubg2/qPOY+/7uvGt9/YE5UejV0GguQP8eVI8LFCjdA3my1JapFeiWCp4mTQVu nY58Q+CCb/IE5NCr/JNlJr1e4ZNIoo2LGhXgkJuzK6NXP8+zAIHZsWIZZ53P+rl2kZ30MSmDGQQ xgaqU X-Google-Smtp-Source: AGHT+IEscXBndvsKaCefDWCba9ziIegmFGLeBgnnKHteJwEKYLk9MvaIkHNzX41MFrwbDwO816Fryg== X-Received: by 2002:a05:6402:3590:b0:602:1b8b:2925 with SMTP id 4fb4d7f45d1cf-60774895d94mr11720716a12.29.1749497458321; Mon, 09 Jun 2025 12:30:58 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-607ed78b8cesm1864848a12.75.2025.06.09.12.30.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:30:57 -0700 (PDT) Message-ID: <1faf699e-b40c-4408-8655-b5bc8a6776e1@gmail.com> Date: Mon, 9 Jun 2025 22:30:56 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 10/14] wifi: rtw89: Fix rtw89_mac_power_switch() for USB From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Clear some bits in some registers in order to allow RTL8851BU to power on. Also tested with RTL8832BU and RTL8832CU. Signed-off-by: Bitterblue Smith --- v2: - Put the new code in a function. --- drivers/net/wireless/realtek/rtw89/mac.c | 20 ++++++++++++++++++++ drivers/net/wireless/realtek/rtw89/reg.h | 1 + 2 files changed, 21 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c index 875c1a3c5ca8..bccb504915f4 100644 --- a/drivers/net/wireless/realtek/rtw89/mac.c +++ b/drivers/net/wireless/realtek/rtw89/mac.c @@ -1449,6 +1449,24 @@ void rtw89_mac_notify_wake(struct rtw89_dev *rtwdev) rtw89_mac_send_rpwm(rtwdev, state, true); } +static void rtw89_mac_power_switch_boot_mode(struct rtw89_dev *rtwdev) +{ + u32 boot_mode; + + if (rtwdev->hci.type != RTW89_HCI_TYPE_USB) + return; + + boot_mode = rtw89_read32_mask(rtwdev, R_AX_GPIO_MUXCFG, B_AX_BOOT_MODE); + + if (!boot_mode) + return; + + rtw89_write32_clr(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFN_ONMAC); + rtw89_write32_clr(rtwdev, R_AX_SYS_STATUS1, B_AX_AUTO_WLPON); + rtw89_write32_clr(rtwdev, R_AX_GPIO_MUXCFG, B_AX_BOOT_MODE); + rtw89_write32_clr(rtwdev, R_AX_RSV_CTRL, B_AX_R_DIS_PRST); +} + static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on) { #define PWR_ACT 1 @@ -1459,6 +1477,8 @@ static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on) int ret; u8 val; + rtw89_mac_power_switch_boot_mode(rtwdev); + if (on) { cfg_seq = chip->pwr_on_seq; cfg_func = chip->ops->pwr_on_func; diff --git a/drivers/net/wireless/realtek/rtw89/reg.h b/drivers/net/wireless/realtek/rtw89/reg.h index f05c81ae5869..9d9e1b02bfc7 100644 --- a/drivers/net/wireless/realtek/rtw89/reg.h +++ b/drivers/net/wireless/realtek/rtw89/reg.h @@ -182,6 +182,7 @@ #define R_AX_SYS_STATUS1 0x00F4 #define B_AX_SEL_0XC0_MASK GENMASK(17, 16) +#define B_AX_AUTO_WLPON BIT(10) #define B_AX_PAD_HCI_SEL_V2_MASK GENMASK(5, 3) #define MAC_AX_HCI_SEL_SDIO_UART 0 #define MAC_AX_HCI_SEL_MULTI_USB 1 From patchwork Mon Jun 9 19:31:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895147 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AEF2838DF9 for ; Mon, 9 Jun 2025 19:31:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497489; cv=none; b=HnBUK2t4/C5odsZEl9L8iwzp+xMgbIGQ0W9pit1cFH5ELi7lE10BXL9VJRKfSiKBu0ZOQ22OlyklG3dnNsPlA0mkoVwVkTmltktk3uJ//7QFEIu0k2L5Ax3H+h3EZO6UXPuNokYtye03bvRu5ysHeVK7mv3O8xfWLUhJVVtJC+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497489; c=relaxed/simple; bh=ybHHz0dRKJzSoK8u8oTEVVOMDkPokb2cMeRgICf44jM=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=mtDY437jta2Q8OMlLkY1Ur7eXEf99Zhk5u4snTpimJmuBdx3i0vfvqcAkk8NZF7lvUPwDXy5sJGj73zRdRQqKy2T4iPYRlRdoPXeAEyg4M8KWmIKhexINCdMj1pyk1zu6TdmbTOwpdK3JtXH9OX24MNWEc+DoCH1+GPEF7ZlKb8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Js1/8SEG; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Js1/8SEG" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-ade5b8aab41so261419566b.0 for ; Mon, 09 Jun 2025 12:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497486; x=1750102286; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=woIF5jOmIIhi+EBoujXRolNx2+s2+Qr80kYQjs459V4=; b=Js1/8SEG+SwK1Ar/yvqWfFtdIZmAoEe5fnKj8K8g5+Bx2Ke3cYxPgMf5kqopae2akD 60SdUWrWhTX/h6XH1Bwu+G425j/ZhxmTVZo7ccHADOcGodZPDj1NtJ2abpA4JgqJwRnv x5iqGXcQ0ckR3MeK+j24Nm22t6emql8qaqA1lhX188kCoRRIWxn7AoFActrarnlYFu7A Knt+FLLgXAG+juCVSM6klP8Nt9Bevh5rxWZM7JU3p+txds+VSOAoZE3EbhGwmNMtd4KH cZY+xwMiT58zJ5kAPnPrQjCkeXxVhCj+VClo78F54Hr88Fm6X//kMcvY4Vc1jo/S55C2 hD4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497486; x=1750102286; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=woIF5jOmIIhi+EBoujXRolNx2+s2+Qr80kYQjs459V4=; b=dW45ebj0IWCfVGX9+jXmQpj2yj3orf/hSv++dFxOHNI8Ryv7QNmCl7P4fOkMxdnxn5 FCfZ0insPGUMLjMBJGPDsZvpKSsK2nP0zX/wEoygPTPIBzSrp4Gv7a2VVjVTpObdJhOK 5EbwjCCVu6Itw5DASGTUXeYxm4Q0FTHVt5oAqZqB98e9Hi+2Ua8q3EYG2VAuQDWYnwv7 auyXh7gmMqIAIXdy3xdshfTxwFwfot4a0O21q+LAU8pKiprKEdWrpuieXFZPGAYEwmxn 1vSaoM1DkYZgxvgfH87yAc3uewxtdzqKfLpeOKeKnRAMShJ0JiUmJb/peUuhgQHEsG6D dnWQ== X-Gm-Message-State: AOJu0YzQR4Fc5/omFDH879rYYbV3mO4vDWVmeQk38ZE8rw93AoFKi8F0 fIaSWSZnf2ll7hU+yCeoZWsWRLbO9wkAalxUsWzQQXikNIOtTdwgkpnCfkEJOA== X-Gm-Gg: ASbGncv0nHYMldTlcsMymsxJ99Ice4+zhtewK9aU5M4ZeRno/GISgfsHjvud5NaOGVi /cyc6QYTwX+zGLfKlilDIys9h6/yeylpYZTwK2hlgK8VDafLh8Bx9KMV2VlGWGLmVv8QgLZCUWe 4H4U20BwJz5v2kvsMbGRyY5LQ8gID+GUSB48qPKBfCny5BKcWXzdcRFxxZ0k06AelqnIad5zaJA ZJN+fL427vbgNqEWaDZM5bKHnddgm00E6p/JfThKp6vXlF5FAo+Oa57gtVwMa+XZ87KTguVk/Mf I9iR6H38bRVyB7s0rt4ocih/BOjsnPbFhDe0IJKN9blcfRJ5DlyqWWhhHJY= X-Google-Smtp-Source: AGHT+IFojehHx9NmW0lsYZtojzG7Wpsa2p6ZZqO45Cje2tweHcliKD1wt3dVTqNd5wl5seN2YW19mQ== X-Received: by 2002:a17:907:fdca:b0:ad2:549b:4c8d with SMTP id a640c23a62f3a-ade1aa46a4bmr1462587666b.51.1749497485874; Mon, 09 Jun 2025 12:31:25 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1dc7b202sm587746966b.161.2025.06.09.12.31.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:31:25 -0700 (PDT) Message-ID: <28ee9b9e-639d-41bd-b233-a45b1fbb8c68@gmail.com> Date: Mon, 9 Jun 2025 22:31:24 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 11/14] wifi: rtw89: Add some definitions for USB From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Add various register and bit definitions which will be used by the new USB driver. Signed-off-by: Bitterblue Smith Acked-by: Ping-Ke Shih --- v2: - Add Acked-by. --- drivers/net/wireless/realtek/rtw89/reg.h | 29 +++++++++++++++++++++++ drivers/net/wireless/realtek/rtw89/txrx.h | 1 + 2 files changed, 30 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/reg.h b/drivers/net/wireless/realtek/rtw89/reg.h index 9d9e1b02bfc7..a3b83b1a92eb 100644 --- a/drivers/net/wireless/realtek/rtw89/reg.h +++ b/drivers/net/wireless/realtek/rtw89/reg.h @@ -381,6 +381,18 @@ #define B_AX_ACH1_BUSY BIT(9) #define B_AX_ACH0_BUSY BIT(8) +#define R_AX_USB_ENDPOINT_0 0x1060 +#define B_AX_EP_IDX GENMASK(3, 0) +#define R_AX_USB_ENDPOINT_2 0x1068 +#define NUMP 0x1 +#define R_AX_USB_HOST_REQUEST_2 0x1078 +#define B_AX_R_USBIO_MODE BIT(4) +#define R_AX_USB3_MAC_NPI_CONFIG_INTF_0 0x1114 +#define B_AX_SSPHY_LFPS_FILTER BIT(31) +#define R_AX_USB_WLAN0_1 0x1174 +#define B_AX_USBRX_RST BIT(9) +#define B_AX_USBTX_RST BIT(8) + #define R_AX_PCIE_DBG_CTRL 0x11C0 #define B_AX_DBG_DUMMY_MASK GENMASK(23, 16) #define B_AX_PCIE_DBG_SEL_MASK GENMASK(15, 13) @@ -460,6 +472,17 @@ #define R_AX_WP_PAGE_CTRL2_V1 0x17A4 #define R_AX_WP_PAGE_INFO1_V1 0x17A8 +#define R_AX_USB_ENDPOINT_0_V1 0x5060 +#define B_AX_EP_IDX_V1 GENMASK(3, 0) +#define R_AX_USB_ENDPOINT_2_V1 0x5068 +#define R_AX_USB_HOST_REQUEST_2_V1 0x5078 +#define B_AX_R_USBIO_MODE_V1 BIT(4) +#define R_AX_USB3_MAC_NPI_CONFIG_INTF_0_V1 0x5114 +#define B_AX_SSPHY_LFPS_FILTER_V1 BIT(31) +#define R_AX_USB_WLAN0_1_V1 0x5174 +#define B_AX_USBRX_RST_V1 BIT(9) +#define B_AX_USBTX_RST_V1 BIT(8) + #define R_AX_H2CREG_DATA0_V1 0x7140 #define R_AX_H2CREG_DATA1_V1 0x7144 #define R_AX_H2CREG_DATA2_V1 0x7148 @@ -1026,6 +1049,12 @@ #define B_AX_DISPATCHER_INTN_SEL_MASK GENMASK(7, 4) #define B_AX_DISPATCHER_CH_SEL_MASK GENMASK(3, 0) +#define R_AX_RXDMA_SETTING 0x8908 +#define B_AX_BULK_SIZE GENMASK(1, 0) +#define USB11_BULKSIZE 0x2 +#define USB2_BULKSIZE 0x1 +#define USB3_BULKSIZE 0x0 + #define R_AX_RX_FUNCTION_STOP 0x8920 #define B_AX_HDR_RX_STOP BIT(0) diff --git a/drivers/net/wireless/realtek/rtw89/txrx.h b/drivers/net/wireless/realtek/rtw89/txrx.h index 94f27a9ee9f7..ec01bfc363da 100644 --- a/drivers/net/wireless/realtek/rtw89/txrx.h +++ b/drivers/net/wireless/realtek/rtw89/txrx.h @@ -73,6 +73,7 @@ static inline u8 rtw89_get_data_nss(struct rtw89_dev *rtwdev, u16 hw_rate) #define RTW89_TXWD_BODY0_FW_DL BIT(20) #define RTW89_TXWD_BODY0_CHANNEL_DMA GENMASK(19, 16) #define RTW89_TXWD_BODY0_HDR_LLC_LEN GENMASK(15, 11) +#define RTW89_TXWD_BODY0_STF_MODE BIT(10) #define RTW89_TXWD_BODY0_WD_PAGE BIT(7) #define RTW89_TXWD_BODY0_HW_AMSDU BIT(5) #define RTW89_TXWD_BODY0_HW_SSN_SEL GENMASK(3, 2) From patchwork Mon Jun 9 19:32:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895963 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8B5F21A931 for ; Mon, 9 Jun 2025 19:32:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497549; cv=none; b=OcISGbI2fB3x3p1vF/mUzYioq8dr9Apzx4DE4abCNXJ0msYhFDM2OVM/s6yoWekuSlrItgV3WJXfkk/uxniVns7TF0DrHrcatA5VFr7X+KhQL3WLEu3V/EsV3nEbEM1VF50KEdi8kT4lL5HeSaxVjbAacz5YiRIg3T4WoJiBFgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497549; c=relaxed/simple; bh=hJE03Vg3Pws8mCJnNc46AX8Nw0Z32OYj/efvmdifnaQ=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=Ru0E8WKXKH0yxccpqVyCaSPM7frF/blMV3+NK76bDoxJrO4i06ya4EbjHGStP9YNEWxN7R5DNLb6BrHiDxTzXNbdguz6+ntkcTQolBz4YB+zDtqyzHo5UOH04Rzz+VsbCrxXCsMUr46EjO892rj7KZkqYILdqv9SdpC0lx2pcLg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bVoB/Uv7; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bVoB/Uv7" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-ad88d77314bso875916566b.1 for ; Mon, 09 Jun 2025 12:32:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497545; x=1750102345; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=g0gCEjj5Td0DNE9TW57aULEqeSjIbMucfd5+pJKimOc=; b=bVoB/Uv7z/8UbOgUx3gc39t+kSUu3BUUjYA3N6GDXv412uspDLptZb2B68CdEs42h3 5+4S7Nxs4zWK7i4Uz7ObzmL+81HZj7gfKiJ5UmY9xSugYVdDxt+Ix6910XnouuEBoB/r 4U9ph2a2V1xUemXyLjIgur6wotZrQvJSt9Ht+ZxsZuWn3+kx38J5UfasZ4ngkGd9ljc/ w42hKO6BCHqModN1I0Y4euFoJl0FUJuheb2giGk12OKva7K/2+gQj7iq41Kye/uXBkQB N0WuT/NMllelDOM24/eLtXPoD+6iJLoC1c9ANEoBV6Ev1XLt0OV2iGaVO3rAVej2pq3p UgBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497545; x=1750102345; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=g0gCEjj5Td0DNE9TW57aULEqeSjIbMucfd5+pJKimOc=; b=dLxilkMs7MwDkw/IiLrG9Mcj1UZPhqmks25hvPaCVdfCGqx1FPokRdj3OZCoOURyvC 3x0+UNdNZHkDKH5/ajafz5n3FMcgtr+n1W6tHkw8lhup4Y0mHTlB7qhj5+9gtAdd6/qF /QaQ/z+dsMdDxv1o0gnp5Kz4XEHWfpVbOp08SJ2S7Tvn3LYmKoBsr5lupQA2nR8gmvl/ nOQtiK1mMV/jm49u/2gsnKPwYRQ49x4a0dPOFcZUDdfdpMG5Nad9aRYgseAEQ++lm7vI 89RrOzSlWA24Gz+GZyKGUsi3q/gej9FLsX5645DLS7Qm8MgV3Z81HDCWB943R10Dg5BE msNQ== X-Gm-Message-State: AOJu0YwpygLI9CWiRpp3PJLjealCErhSq4/9swD/QLWOYS1RVl0Sgb9n gk8yv5fWtXFebjPbRkDgsliqUBMHxtEVj8NUGH1nLMEaoYGmYecZNIVhqiGB6Q== X-Gm-Gg: ASbGnctTuRRFJVA7nk3oBQZrx75i+3aSwktCA242XpspsYfUnJoNShO5Jszo5wA/AGJ rjdJFFmIzap7dhJ1A877/UxUDSngWLNQO/2kLDqq9pccA6jA6oe7j6SQrPc+wk+NfmtWLem2LCS +vlWjeXK/5w7Ca1YNOAGt1c19sheJjY3HL16M+xWZcbG55L9nWRGxWJmtAS73uWe1UTH8qQn72y NQU2rBslV7/AtIQDoMBJ2jed6gHHZa6yxLfWMbw+gumPfwiuolFi3hijntpRSh+fNJRI3YlAXqA BF3wVBnU6QeKIzqARYqBfOGwMEQnmOMy1dmMsT/ZSY1lxu4bqnRbvDlqole7M5ZPiar2Ag== X-Google-Smtp-Source: AGHT+IEDkxwwMIDcPNJwuJ01ntosvom0Ak/pHOWfaAWNGh9Kc09HGjuFLCZsGPv5r9JDlMsLxwbolg== X-Received: by 2002:a17:906:c14f:b0:ad5:7bc4:84b5 with SMTP id a640c23a62f3a-ade1aa108f7mr1371649866b.57.1749497545006; Mon, 09 Jun 2025 12:32:25 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1dc39c29sm590735066b.138.2025.06.09.12.32.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:32:24 -0700 (PDT) Message-ID: <3bde86a3-0aa3-4a36-8d26-f87cc0bf73cb@gmail.com> Date: Mon, 9 Jun 2025 22:32:23 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 12/14] wifi: rtw89: Add usb.{c,h} From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Add very basic USB support. No TX/RX aggregation, no TX queues, no switching to USB 3 mode. RTL8851BU and RTL8832BU work. Signed-off-by: Bitterblue Smith --- v2: - Don't do vendor requests when unplugged. - Rename rtw89_get_usb_priv() to rtw89_usb_priv(). - Move rtw89_usb_read_port_complete() forward declaration to the top of usb.c. - Remove unnecessary empty lines. - Rename "error" variable to "ret". - Don't call usb_kill_urb() in rtw89_usb_free_rx_bufs(). - Use u32_get_bits() in rtw89_usb_vendorreq(). - Initialise rtwdev->hci.dle_type. - Delete vendor_req_mutex. --- drivers/net/wireless/realtek/rtw89/usb.c | 1011 ++++++++++++++++++++++ drivers/net/wireless/realtek/rtw89/usb.h | 59 ++ 2 files changed, 1070 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtw89/usb.c create mode 100644 drivers/net/wireless/realtek/rtw89/usb.h diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c new file mode 100644 index 000000000000..004c1252620b --- /dev/null +++ b/drivers/net/wireless/realtek/rtw89/usb.c @@ -0,0 +1,1011 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* Copyright(c) 2025 Realtek Corporation + */ + +#include +#include "debug.h" +#include "mac.h" +#include "reg.h" +#include "txrx.h" +#include "usb.h" + +static void rtw89_usb_read_port_complete(struct urb *urb); + +static void rtw89_usb_vendorreq(struct rtw89_dev *rtwdev, u32 addr, + void *data, u16 len, u8 reqtype) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + struct usb_device *udev = rtwusb->udev; + unsigned int pipe; + u16 value, index; + int attempt, ret; + + if (test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + return; + + value = u32_get_bits(addr, GENMASK(15, 0)); + index = u32_get_bits(addr, GENMASK(23, 16)); + + for (attempt = 0; attempt < 10; attempt++) { + *rtwusb->vendor_req_buf = 0; + + if (reqtype == RTW89_USB_VENQT_READ) { + pipe = usb_rcvctrlpipe(udev, 0); + } else { /* RTW89_USB_VENQT_WRITE */ + pipe = usb_sndctrlpipe(udev, 0); + + memcpy(rtwusb->vendor_req_buf, data, len); + } + + ret = usb_control_msg(udev, pipe, RTW89_USB_VENQT, reqtype, + value, index, rtwusb->vendor_req_buf, + len, 500); + + if (ret == len) { /* Success */ + atomic_set(&rtwusb->continual_io_error, 0); + + if (reqtype == RTW89_USB_VENQT_READ) + memcpy(data, rtwusb->vendor_req_buf, len); + + break; + } + + if (ret == -ESHUTDOWN || ret == -ENODEV) + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + else if (ret < 0) + rtw89_warn(rtwdev, + "usb %s%u 0x%x fail ret=%d value=0x%x attempt=%d\n", + reqtype == RTW89_USB_VENQT_READ ? "read" : "write", + len * 8, addr, ret, + le32_to_cpup(rtwusb->vendor_req_buf), + attempt); + else if (ret > 0 && reqtype == RTW89_USB_VENQT_READ) + memcpy(data, rtwusb->vendor_req_buf, len); + + if (atomic_inc_return(&rtwusb->continual_io_error) > 4) { + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + break; + } + } +} + +static u32 rtw89_usb_read_cmac(struct rtw89_dev *rtwdev, u32 addr) +{ + u32 addr32, val32, shift; + __le32 data = 0; + int count; + + addr32 = addr & ~0x3; + shift = (addr & 0x3) * 8; + + for (count = 0; ; count++) { + rtw89_usb_vendorreq(rtwdev, addr32, &data, 4, + RTW89_USB_VENQT_READ); + + val32 = le32_to_cpu(data); + if (val32 != RTW89_R32_DEAD) + break; + + if (count >= MAC_REG_POOL_COUNT) { + rtw89_warn(rtwdev, "%s: addr %#x = %#x\n", + __func__, addr32, val32); + val32 = RTW89_R32_DEAD; + break; + } + + rtw89_write32(rtwdev, R_AX_CK_EN, B_AX_CMAC_ALLCKEN); + } + + return val32 >> shift; +} + +static u8 rtw89_usb_ops_read8(struct rtw89_dev *rtwdev, u32 addr) +{ + u8 data = 0; + + if (ACCESS_CMAC(addr)) + return rtw89_usb_read_cmac(rtwdev, addr); + + rtw89_usb_vendorreq(rtwdev, addr, &data, 1, RTW89_USB_VENQT_READ); + + return data; +} + +static u16 rtw89_usb_ops_read16(struct rtw89_dev *rtwdev, u32 addr) +{ + __le16 data = 0; + + if (ACCESS_CMAC(addr)) + return rtw89_usb_read_cmac(rtwdev, addr); + + rtw89_usb_vendorreq(rtwdev, addr, &data, 2, RTW89_USB_VENQT_READ); + + return le16_to_cpu(data); +} + +static u32 rtw89_usb_ops_read32(struct rtw89_dev *rtwdev, u32 addr) +{ + __le32 data = 0; + + if (ACCESS_CMAC(addr)) + return rtw89_usb_read_cmac(rtwdev, addr); + + rtw89_usb_vendorreq(rtwdev, addr, &data, 4, + RTW89_USB_VENQT_READ); + + return le32_to_cpu(data); +} + +static void rtw89_usb_ops_write8(struct rtw89_dev *rtwdev, u32 addr, u8 val) +{ + u8 data = val; + + rtw89_usb_vendorreq(rtwdev, addr, &data, 1, RTW89_USB_VENQT_WRITE); +} + +static void rtw89_usb_ops_write16(struct rtw89_dev *rtwdev, u32 addr, u16 val) +{ + __le16 data = cpu_to_le16(val); + + rtw89_usb_vendorreq(rtwdev, addr, &data, 2, RTW89_USB_VENQT_WRITE); +} + +static void rtw89_usb_ops_write32(struct rtw89_dev *rtwdev, u32 addr, u32 val) +{ + __le32 data = cpu_to_le32(val); + + rtw89_usb_vendorreq(rtwdev, addr, &data, 4, RTW89_USB_VENQT_WRITE); +} + +static u32 +rtw89_usb_ops_check_and_reclaim_tx_resource(struct rtw89_dev *rtwdev, + u8 txch) +{ + if (txch == RTW89_TXCH_CH12) + return 1; + + return 42; /* TODO some kind of calculation? */ +} + +static void rtw89_usb_ops_tx_kick_off(struct rtw89_dev *rtwdev, u8 txch) +{ + /* TODO later. for now transmit every frame right away in + * rtw89_usb_ops_tx_write + */ +} + +static u8 rtw89_usb_get_bulkout_id(u8 ch_dma) +{ + switch (ch_dma) { + case RTW89_DMA_ACH0: + return 3; + case RTW89_DMA_ACH1: + return 4; + case RTW89_DMA_ACH2: + return 5; + case RTW89_DMA_ACH3: + return 6; + default: + case RTW89_DMA_B0MG: + return 0; + case RTW89_DMA_B0HI: + return 1; + case RTW89_DMA_H2C: + return 2; + } +} + +static int rtw89_usb_write_port(struct rtw89_dev *rtwdev, u8 ch_dma, + void *data, int len, usb_complete_t cb, + void *context) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + struct usb_device *usbd = rtwusb->udev; + struct urb *urb; + u8 bulkout_id = rtw89_usb_get_bulkout_id(ch_dma); + unsigned int pipe; + int ret; + + if (test_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags)) + return 0; + + urb = usb_alloc_urb(0, GFP_ATOMIC); + if (!urb) + return -ENOMEM; + + pipe = usb_sndbulkpipe(usbd, rtwusb->out_pipe[bulkout_id]); + + usb_fill_bulk_urb(urb, usbd, pipe, data, len, cb, context); + urb->transfer_flags |= URB_ZERO_PACKET; + ret = usb_submit_urb(urb, GFP_ATOMIC); + + if (ret) + usb_free_urb(urb); + + if (ret == -ENODEV) + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + + return ret; +} + +static void rtw89_usb_write_port_complete_fwcmd(struct urb *urb) +{ + struct rtw89_usb_tx_ctrl_block *txcb = urb->context; + struct rtw89_dev *rtwdev = txcb->rtwdev; + + switch (urb->status) { + case 0: + case -EPIPE: + case -EPROTO: + case -EINPROGRESS: + case -ENOENT: + case -ECONNRESET: + break; + default: + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + break; + } + + skb_queue_purge(&txcb->tx_ack_queue); + kfree(txcb); + usb_free_urb(urb); +} + +static int rtw89_usb_fwcmd_submit(struct rtw89_dev *rtwdev, + struct rtw89_core_tx_request *tx_req) +{ + struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info; + struct rtw89_usb_tx_ctrl_block *txcb; + struct sk_buff *skb = tx_req->skb; + int txdesc_size = rtwdev->chip->h2c_desc_size; + void *txdesc; + int ret; + + if (((desc_info->pkt_size + txdesc_size) % 512) == 0) { + rtw89_info(rtwdev, "avoiding multiple of 512\n"); + desc_info->pkt_size += 4; + skb_put(skb, 4); + } + + txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC); + if (!txcb) + return -ENOMEM; + + txdesc = skb_push(skb, txdesc_size); + memset(txdesc, 0, txdesc_size); + rtw89_chip_fill_txdesc_fwcmd(rtwdev, desc_info, txdesc); + + txcb->rtwdev = rtwdev; + skb_queue_head_init(&txcb->tx_ack_queue); + + skb_queue_tail(&txcb->tx_ack_queue, skb); + + ret = rtw89_usb_write_port(rtwdev, RTW89_DMA_H2C, skb->data, skb->len, + rtw89_usb_write_port_complete_fwcmd, txcb); + + if (ret) { + rtw89_err(rtwdev, "%s failed: %d\n", __func__, ret); + + skb_dequeue(&txcb->tx_ack_queue); + kfree(txcb); + } + + return ret; +} + +static void rtw89_usb_write_port_complete(struct urb *urb) +{ + struct rtw89_usb_tx_ctrl_block *txcb = urb->context; + struct rtw89_dev *rtwdev = txcb->rtwdev; + struct ieee80211_tx_info *info; + struct sk_buff *skb; + + while (true) { + skb = skb_dequeue(&txcb->tx_ack_queue); + if (!skb) + break; + + info = IEEE80211_SKB_CB(skb); + ieee80211_tx_info_clear_status(info); + + if (urb->status == 0) { + if (info->flags & IEEE80211_TX_CTL_NO_ACK) + info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED; + else + info->flags |= IEEE80211_TX_STAT_ACK; + } + + ieee80211_tx_status_irqsafe(rtwdev->hw, skb); + } + + switch (urb->status) { + case 0: + case -EPIPE: + case -EPROTO: + case -EINPROGRESS: + case -ENOENT: + case -ECONNRESET: + break; + default: + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + break; + } + + kfree(txcb); + usb_free_urb(urb); +} + +static int rtw89_usb_ops_tx_write(struct rtw89_dev *rtwdev, + struct rtw89_core_tx_request *tx_req) +{ + struct rtw89_tx_desc_info *desc_info = &tx_req->desc_info; + const struct rtw89_chip_info *chip = rtwdev->chip; + struct rtw89_usb_tx_ctrl_block *txcb; + struct sk_buff *skb = tx_req->skb; + struct rtw89_txwd_body *txdesc; + u32 txdesc_size; + int ret, len; + + if ((desc_info->ch_dma == RTW89_TXCH_CH12 || + tx_req->tx_type == RTW89_CORE_TX_TYPE_FWCMD) && + (desc_info->ch_dma != RTW89_TXCH_CH12 || + tx_req->tx_type != RTW89_CORE_TX_TYPE_FWCMD)) { + rtw89_err(rtwdev, "dma channel %d/TX type %d mismatch\n", + desc_info->ch_dma, tx_req->tx_type); + return -EINVAL; + } + + if (desc_info->ch_dma == RTW89_TXCH_CH12) + return rtw89_usb_fwcmd_submit(rtwdev, tx_req); + + txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC); + if (!txcb) + return -ENOMEM; + + txdesc_size = chip->txwd_body_size; + if (desc_info->en_wd_info) + txdesc_size += chip->txwd_info_size; + + txdesc = (struct rtw89_txwd_body *)(skb->data - txdesc_size); + len = skb->len + txdesc_size; + memset(txdesc, 0, txdesc_size); + rtw89_chip_fill_txdesc(rtwdev, desc_info, txdesc); + + le32p_replace_bits(&txdesc->dword0, 1, RTW89_TXWD_BODY0_STF_MODE); + + txcb->rtwdev = rtwdev; + skb_queue_head_init(&txcb->tx_ack_queue); + + skb_queue_tail(&txcb->tx_ack_queue, skb); + + ret = rtw89_usb_write_port(rtwdev, desc_info->ch_dma, txdesc, len, + rtw89_usb_write_port_complete, txcb); + if (ret) { + rtw89_err(rtwdev, "%s failed: %d\n", __func__, ret); + + skb_dequeue(&txcb->tx_ack_queue); + kfree(txcb); + } + + return ret; +} + +static void rtw89_usb_rx_handler(struct work_struct *work) +{ + struct rtw89_usb *rtwusb = container_of(work, struct rtw89_usb, rx_work); + struct rtw89_dev *rtwdev = rtwusb->rtwdev; + struct rtw89_rx_desc_info desc_info; + struct sk_buff *rx_skb; + struct sk_buff *skb; + u32 pkt_offset; + int limit; + + for (limit = 0; limit < 200; limit++) { + rx_skb = skb_dequeue(&rtwusb->rx_queue); + if (!rx_skb) + break; + + if (skb_queue_len(&rtwusb->rx_queue) >= RTW89_USB_MAX_RXQ_LEN) { + rtw89_warn(rtwdev, "rx_queue overflow\n"); + dev_kfree_skb_any(rx_skb); + continue; + } + + memset(&desc_info, 0, sizeof(desc_info)); + rtw89_chip_query_rxdesc(rtwdev, &desc_info, rx_skb->data, 0); + + skb = rtw89_alloc_skb_for_rx(rtwdev, desc_info.pkt_size); + if (!skb) { + rtw89_debug(rtwdev, RTW89_DBG_HCI, + "failed to allocate RX skb of size %u\n", + desc_info.pkt_size); + continue; + } + + pkt_offset = desc_info.offset + desc_info.rxd_len; + + skb_put_data(skb, rx_skb->data + pkt_offset, + desc_info.pkt_size); + + rtw89_core_rx(rtwdev, &desc_info, skb); + + if (skb_queue_len(&rtwusb->rx_free_queue) >= RTW89_USB_RX_SKB_NUM) + dev_kfree_skb_any(rx_skb); + else + skb_queue_tail(&rtwusb->rx_free_queue, rx_skb); + } + + if (limit == 200) + rtw89_debug(rtwdev, RTW89_DBG_HCI, + "left %d rx skbs in the queue for later\n", + skb_queue_len(&rtwusb->rx_queue)); +} + +static void rtw89_usb_rx_resubmit(struct rtw89_usb *rtwusb, + struct rtw89_usb_rx_ctrl_block *rxcb, + gfp_t gfp) +{ + struct rtw89_dev *rtwdev = rtwusb->rtwdev; + struct sk_buff *rx_skb; + int ret; + + rx_skb = skb_dequeue(&rtwusb->rx_free_queue); + if (!rx_skb) + rx_skb = alloc_skb(RTW89_USB_RECVBUF_SZ, gfp); + + if (!rx_skb) + goto try_later; + + skb_reset_tail_pointer(rx_skb); + rx_skb->len = 0; + + rxcb->rx_skb = rx_skb; + + usb_fill_bulk_urb(rxcb->rx_urb, rtwusb->udev, + usb_rcvbulkpipe(rtwusb->udev, rtwusb->in_pipe), + rxcb->rx_skb->data, RTW89_USB_RECVBUF_SZ, + rtw89_usb_read_port_complete, rxcb); + + ret = usb_submit_urb(rxcb->rx_urb, gfp); + if (ret) { + skb_queue_tail(&rtwusb->rx_free_queue, rxcb->rx_skb); + + if (ret == -ENODEV) + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + else + rtw89_err(rtwdev, "Err sending rx data urb %d\n", ret); + + if (ret == -ENOMEM) + goto try_later; + } + + return; + +try_later: + rxcb->rx_skb = NULL; + queue_work(rtwusb->rxwq, &rtwusb->rx_urb_work); +} + +static void rtw89_usb_rx_resubmit_work(struct work_struct *work) +{ + struct rtw89_usb *rtwusb = container_of(work, struct rtw89_usb, rx_urb_work); + struct rtw89_usb_rx_ctrl_block *rxcb; + int i; + + for (i = 0; i < RTW89_USB_RXCB_NUM; i++) { + rxcb = &rtwusb->rx_cb[i]; + + if (!rxcb->rx_skb) + rtw89_usb_rx_resubmit(rtwusb, rxcb, GFP_ATOMIC); + } +} + +static void rtw89_usb_read_port_complete(struct urb *urb) +{ + struct rtw89_usb_rx_ctrl_block *rxcb = urb->context; + struct rtw89_dev *rtwdev = rxcb->rtwdev; + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + struct sk_buff *skb = rxcb->rx_skb; + + if (urb->status == 0) { + if (urb->actual_length > urb->transfer_buffer_length || + urb->actual_length < sizeof(struct rtw89_rxdesc_short)) { + rtw89_err(rtwdev, "failed to get urb length: %d\n", + urb->actual_length); + skb_queue_tail(&rtwusb->rx_free_queue, skb); + } else { + skb_put(skb, urb->actual_length); + skb_queue_tail(&rtwusb->rx_queue, skb); + queue_work(rtwusb->rxwq, &rtwusb->rx_work); + } + + rtw89_usb_rx_resubmit(rtwusb, rxcb, GFP_ATOMIC); + } else { + skb_queue_tail(&rtwusb->rx_free_queue, skb); + + if (atomic_inc_return(&rtwusb->continual_io_error) > 4) + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + + switch (urb->status) { + case -EINVAL: + case -EPIPE: + case -ENODEV: + case -ESHUTDOWN: + set_bit(RTW89_FLAG_UNPLUGGED, rtwdev->flags); + break; + case -EPROTO: + case -EILSEQ: + case -ETIME: + case -ECOMM: + case -EOVERFLOW: + case -ENOENT: + break; + case -EINPROGRESS: + rtw89_info(rtwdev, "URB is in progress\n"); + break; + default: + rtw89_err(rtwdev, "%s status %d\n", + __func__, urb->status); + break; + } + } +} + +static void rtw89_usb_cancel_rx_bufs(struct rtw89_usb *rtwusb) +{ + struct rtw89_usb_rx_ctrl_block *rxcb; + int i; + + for (i = 0; i < RTW89_USB_RXCB_NUM; i++) { + rxcb = &rtwusb->rx_cb[i]; + usb_kill_urb(rxcb->rx_urb); + } +} + +static void rtw89_usb_free_rx_bufs(struct rtw89_usb *rtwusb) +{ + struct rtw89_usb_rx_ctrl_block *rxcb; + int i; + + for (i = 0; i < RTW89_USB_RXCB_NUM; i++) { + rxcb = &rtwusb->rx_cb[i]; + usb_free_urb(rxcb->rx_urb); + } +} + +static int rtw89_usb_alloc_rx_bufs(struct rtw89_usb *rtwusb) +{ + struct rtw89_usb_rx_ctrl_block *rxcb; + int i; + + for (i = 0; i < RTW89_USB_RXCB_NUM; i++) { + rxcb = &rtwusb->rx_cb[i]; + + rxcb->rtwdev = rtwusb->rtwdev; + rxcb->rx_urb = usb_alloc_urb(0, GFP_KERNEL); + if (!rxcb->rx_urb) { + rtw89_usb_free_rx_bufs(rtwusb); + return -ENOMEM; + } + } + + return 0; +} + +static int rtw89_usb_init_rx(struct rtw89_dev *rtwdev) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + struct sk_buff *rx_skb; + int i; + + rtwusb->rxwq = alloc_workqueue("rtw89_usb: rx wq", WQ_BH, 0); + if (!rtwusb->rxwq) { + rtw89_err(rtwdev, "failed to create RX work queue\n"); + return -ENOMEM; + } + + skb_queue_head_init(&rtwusb->rx_queue); + skb_queue_head_init(&rtwusb->rx_free_queue); + + INIT_WORK(&rtwusb->rx_work, rtw89_usb_rx_handler); + INIT_WORK(&rtwusb->rx_urb_work, rtw89_usb_rx_resubmit_work); + + for (i = 0; i < RTW89_USB_RX_SKB_NUM; i++) { + rx_skb = alloc_skb(RTW89_USB_RECVBUF_SZ, GFP_KERNEL); + if (rx_skb) + skb_queue_tail(&rtwusb->rx_free_queue, rx_skb); + } + + return 0; +} + +static void rtw89_usb_deinit_rx(struct rtw89_dev *rtwdev) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + + skb_queue_purge(&rtwusb->rx_queue); + + destroy_workqueue(rtwusb->rxwq); + + skb_queue_purge(&rtwusb->rx_free_queue); +} + +static void rtw89_usb_start_rx(struct rtw89_dev *rtwdev) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + int i; + + for (i = 0; i < RTW89_USB_RXCB_NUM; i++) + rtw89_usb_rx_resubmit(rtwusb, &rtwusb->rx_cb[i], GFP_KERNEL); +} + +static void rtw89_usb_ops_reset(struct rtw89_dev *rtwdev) +{ + /* TODO: anything to do here? */ +} + +static int rtw89_usb_ops_start(struct rtw89_dev *rtwdev) +{ + return 0; /* Nothing to do. */ +} + +static void rtw89_usb_ops_stop(struct rtw89_dev *rtwdev) +{ + /* Nothing to do. */ +} + +static void rtw89_usb_ops_pause(struct rtw89_dev *rtwdev, bool pause) +{ + /* Nothing to do? */ +} + +static void rtw89_usb_ops_switch_mode(struct rtw89_dev *rtwdev, bool low_power) +{ + /* Nothing to do. */ +} + +static int rtw89_usb_ops_deinit(struct rtw89_dev *rtwdev) +{ + return 0; /* Nothing to do. */ +} + +static int rtw89_usb_ops_mac_pre_init(struct rtw89_dev *rtwdev) +{ + u32 val32; + + rtw89_write32_set(rtwdev, R_AX_USB_HOST_REQUEST_2, B_AX_R_USBIO_MODE); + + /* fix USB IO hang suggest by chihhanli@realtek.com */ + rtw89_write32_clr(rtwdev, R_AX_USB_WLAN0_1, + B_AX_USBRX_RST | B_AX_USBTX_RST); + + val32 = rtw89_read32(rtwdev, R_AX_HCI_FUNC_EN); + val32 &= ~(B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN); + rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32); + + val32 |= B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN; + rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32); + /* fix USB TRX hang suggest by chihhanli@realtek.com */ + + return 0; +} + +static int rtw89_usb_ops_mac_pre_deinit(struct rtw89_dev *rtwdev) +{ + return 0; /* Nothing to do. */ +} + +static int rtw89_usb_ops_mac_post_init(struct rtw89_dev *rtwdev) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + enum usb_device_speed speed; + u32 ep; + + rtw89_write32_clr(rtwdev, R_AX_USB3_MAC_NPI_CONFIG_INTF_0, + B_AX_SSPHY_LFPS_FILTER); + + speed = rtwusb->udev->speed; + + if (speed == USB_SPEED_SUPER) + rtw89_write8(rtwdev, R_AX_RXDMA_SETTING, USB3_BULKSIZE); + else if (speed == USB_SPEED_HIGH) + rtw89_write8(rtwdev, R_AX_RXDMA_SETTING, USB2_BULKSIZE); + else + rtw89_write8(rtwdev, R_AX_RXDMA_SETTING, USB11_BULKSIZE); + + for (ep = 5; ep <= 12; ep++) { + if (ep == 8) + continue; + + rtw89_write8_mask(rtwdev, R_AX_USB_ENDPOINT_0, + B_AX_EP_IDX, ep); + rtw89_write8(rtwdev, R_AX_USB_ENDPOINT_2 + 1, NUMP); + } + + return 0; +} + +static void rtw89_usb_ops_recalc_int_mit(struct rtw89_dev *rtwdev) +{ + /* Nothing to do. */ +} + +static int rtw89_usb_ops_mac_lv1_rcvy(struct rtw89_dev *rtwdev, + enum rtw89_lv1_rcvy_step step) +{ + u32 reg, mask; + + switch (rtwdev->chip->chip_id) { + case RTL8851B: + case RTL8852A: + case RTL8852B: + reg = R_AX_USB_WLAN0_1; + mask = B_AX_USBRX_RST | B_AX_USBTX_RST; + break; + case RTL8852C: + reg = R_AX_USB_WLAN0_1_V1; + mask = B_AX_USBRX_RST_V1 | B_AX_USBTX_RST_V1; + break; + default: + rtw89_err(rtwdev, "%s: fix me\n", __func__); + return -EOPNOTSUPP; + } + + switch (step) { + case RTW89_LV1_RCVY_STEP_1: + rtw89_write32_set(rtwdev, reg, mask); + + msleep(30); + break; + case RTW89_LV1_RCVY_STEP_2: + rtw89_write32_clr(rtwdev, reg, mask); + break; + default: + return -EINVAL; + } + + return 0; +} + +static void rtw89_usb_ops_dump_err_status(struct rtw89_dev *rtwdev) +{ + rtw89_warn(rtwdev, "%s TODO\n", __func__); +} + +static const struct rtw89_hci_ops rtw89_usb_ops = { + .tx_write = rtw89_usb_ops_tx_write, + .tx_kick_off = rtw89_usb_ops_tx_kick_off, + .flush_queues = NULL, /* Not needed? */ + .reset = rtw89_usb_ops_reset, + .start = rtw89_usb_ops_start, + .stop = rtw89_usb_ops_stop, + .pause = rtw89_usb_ops_pause, + .switch_mode = rtw89_usb_ops_switch_mode, + .recalc_int_mit = rtw89_usb_ops_recalc_int_mit, + + .read8 = rtw89_usb_ops_read8, + .read16 = rtw89_usb_ops_read16, + .read32 = rtw89_usb_ops_read32, + .write8 = rtw89_usb_ops_write8, + .write16 = rtw89_usb_ops_write16, + .write32 = rtw89_usb_ops_write32, + + .mac_pre_init = rtw89_usb_ops_mac_pre_init, + .mac_pre_deinit = rtw89_usb_ops_mac_pre_deinit, + .mac_post_init = rtw89_usb_ops_mac_post_init, + .deinit = rtw89_usb_ops_deinit, + + .check_and_reclaim_tx_resource = rtw89_usb_ops_check_and_reclaim_tx_resource, + .mac_lv1_rcvy = rtw89_usb_ops_mac_lv1_rcvy, + .dump_err_status = rtw89_usb_ops_dump_err_status, + .napi_poll = NULL, + + .recovery_start = NULL, + .recovery_complete = NULL, + + .ctrl_txdma_ch = NULL, + .ctrl_txdma_fw_ch = NULL, + .ctrl_trxhci = NULL, + .poll_txdma_ch_idle = NULL, + + .clr_idx_all = NULL, + .clear = NULL, + .disable_intr = NULL, + .enable_intr = NULL, + .rst_bdram = NULL, +}; + +static int rtw89_usb_parse(struct rtw89_dev *rtwdev, + struct usb_interface *intf) +{ + struct usb_host_interface *host_interface = &intf->altsetting[0]; + struct usb_interface_descriptor *intf_desc = &host_interface->desc; + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + struct usb_endpoint_descriptor *endpoint; + int num_out_pipes = 0; + u8 num; + int i; + + if (intf_desc->bNumEndpoints > RTW89_MAX_ENDPOINT_NUM) { + rtw89_err(rtwdev, "found %d endpoints, expected %d max\n", + intf_desc->bNumEndpoints, RTW89_MAX_ENDPOINT_NUM); + return -EINVAL; + } + + for (i = 0; i < intf_desc->bNumEndpoints; i++) { + endpoint = &host_interface->endpoint[i].desc; + num = usb_endpoint_num(endpoint); + + if (usb_endpoint_dir_in(endpoint) && + usb_endpoint_xfer_bulk(endpoint)) { + if (rtwusb->in_pipe) { + rtw89_err(rtwdev, + "found more than 1 bulk in endpoint\n"); + return -EINVAL; + } + + rtwusb->in_pipe = num; + } + + if (usb_endpoint_dir_out(endpoint) && + usb_endpoint_xfer_bulk(endpoint)) { + if (num_out_pipes >= RTW89_MAX_BULKOUT_NUM) { + rtw89_err(rtwdev, + "found more than %d bulk out endpoints\n", + RTW89_MAX_BULKOUT_NUM); + return -EINVAL; + } + + rtwusb->out_pipe[num_out_pipes++] = num; + } + } + + if (num_out_pipes < 1) { + rtw89_err(rtwdev, "no bulk out endpoints found\n"); + return -EINVAL; + } + + return 0; +} + +static int rtw89_usb_intf_init(struct rtw89_dev *rtwdev, + struct usb_interface *intf) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + int ret; + + ret = rtw89_usb_parse(rtwdev, intf); + if (ret) + return ret; + + rtwusb->vendor_req_buf = kmalloc(sizeof(u32), GFP_KERNEL); + if (!rtwusb->vendor_req_buf) + return -ENOMEM; + + rtwusb->udev = usb_get_dev(interface_to_usbdev(intf)); + + usb_set_intfdata(intf, rtwdev->hw); + + SET_IEEE80211_DEV(rtwdev->hw, &intf->dev); + + return 0; +} + +static void rtw89_usb_intf_deinit(struct rtw89_dev *rtwdev, + struct usb_interface *intf) +{ + struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + + usb_put_dev(rtwusb->udev); + kfree(rtwusb->vendor_req_buf); + usb_set_intfdata(intf, NULL); +} + +int rtw89_usb_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + const struct rtw89_driver_info *info; + struct rtw89_dev *rtwdev; + struct rtw89_usb *rtwusb; + int ret; + + info = (const struct rtw89_driver_info *)id->driver_info; + + rtwdev = rtw89_alloc_ieee80211_hw(&intf->dev, + sizeof(struct rtw89_usb), + info->chip, info->variant); + if (!rtwdev) { + dev_err(&intf->dev, "failed to allocate hw\n"); + return -ENOMEM; + } + + rtwusb = rtw89_usb_priv(rtwdev); + rtwusb->rtwdev = rtwdev; + + rtwdev->hci.ops = &rtw89_usb_ops; + rtwdev->hci.type = RTW89_HCI_TYPE_USB; + + ret = rtw89_usb_intf_init(rtwdev, intf); + if (ret) { + rtw89_err(rtwdev, "failed to initialise intf: %d\n", ret); + goto err_free_hw; + } + + if (rtwusb->udev->speed == USB_SPEED_SUPER) + rtwdev->hci.dle_type = RTW89_HCI_DLE_TYPE_USB3; + else + rtwdev->hci.dle_type = RTW89_HCI_DLE_TYPE_USB2; + + ret = rtw89_usb_alloc_rx_bufs(rtwusb); + if (ret) + goto err_intf_deinit; + + ret = rtw89_usb_init_rx(rtwdev); + if (ret) + goto err_free_rx_bufs; + + ret = rtw89_core_init(rtwdev); + if (ret) { + rtw89_err(rtwdev, "failed to initialise core: %d\n", ret); + goto err_deinit_rx; + } + + ret = rtw89_chip_info_setup(rtwdev); + if (ret) { + rtw89_err(rtwdev, "failed to setup chip information\n"); + goto err_core_deinit; + } + + ret = rtw89_core_register(rtwdev); + if (ret) { + rtw89_err(rtwdev, "failed to register core\n"); + goto err_core_deinit; + } + + rtw89_usb_start_rx(rtwdev); + + set_bit(RTW89_FLAG_PROBE_DONE, rtwdev->flags); + + return 0; + +err_core_deinit: + rtw89_core_deinit(rtwdev); +err_deinit_rx: + rtw89_usb_deinit_rx(rtwdev); +err_free_rx_bufs: + rtw89_usb_free_rx_bufs(rtwusb); +err_intf_deinit: + rtw89_usb_intf_deinit(rtwdev, intf); +err_free_hw: + rtw89_free_ieee80211_hw(rtwdev); + + return ret; +} +EXPORT_SYMBOL(rtw89_usb_probe); + +void rtw89_usb_disconnect(struct usb_interface *intf) +{ + struct ieee80211_hw *hw = usb_get_intfdata(intf); + struct rtw89_dev *rtwdev; + struct rtw89_usb *rtwusb; + + if (!hw) + return; + + rtwdev = hw->priv; + rtwusb = rtw89_usb_priv(rtwdev); + + rtw89_usb_cancel_rx_bufs(rtwusb); + + rtw89_core_unregister(rtwdev); + rtw89_core_deinit(rtwdev); + rtw89_usb_deinit_rx(rtwdev); + rtw89_usb_free_rx_bufs(rtwusb); + rtw89_usb_intf_deinit(rtwdev, intf); + rtw89_free_ieee80211_hw(rtwdev); +} +EXPORT_SYMBOL(rtw89_usb_disconnect); + +MODULE_AUTHOR("Bitterblue Smith "); +MODULE_DESCRIPTION("Realtek USB 802.11ax wireless driver"); +MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/net/wireless/realtek/rtw89/usb.h b/drivers/net/wireless/realtek/rtw89/usb.h new file mode 100644 index 000000000000..30f90abb1c9d --- /dev/null +++ b/drivers/net/wireless/realtek/rtw89/usb.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* Copyright(c) 2025 Realtek Corporation + */ + +#ifndef __RTW89_USB_H__ +#define __RTW89_USB_H__ + +#define RTW89_USB_VENQT 0x05 +#define RTW89_USB_VENQT_READ 0xc0 +#define RTW89_USB_VENQT_WRITE 0x40 + +#define RTW89_USB_RECVBUF_SZ 20480 +#define RTW89_USB_RXCB_NUM 8 +#define RTW89_USB_RX_SKB_NUM 16 +#define RTW89_USB_MAX_RXQ_LEN 512 + +#define RTW89_MAX_ENDPOINT_NUM 9 +#define RTW89_MAX_BULKOUT_NUM 7 + +struct rtw89_usb_rx_ctrl_block { + struct rtw89_dev *rtwdev; + struct urb *rx_urb; + struct sk_buff *rx_skb; +}; + +struct rtw89_usb_tx_ctrl_block { + struct rtw89_dev *rtwdev; + struct sk_buff_head tx_ack_queue; +}; + +struct rtw89_usb { + struct rtw89_dev *rtwdev; + struct usb_device *udev; + + __le32 *vendor_req_buf; + + atomic_t continual_io_error; + + u8 in_pipe; + u8 out_pipe[RTW89_MAX_BULKOUT_NUM]; + + struct workqueue_struct *rxwq; + struct rtw89_usb_rx_ctrl_block rx_cb[RTW89_USB_RXCB_NUM]; + struct sk_buff_head rx_queue; + struct sk_buff_head rx_free_queue; + struct work_struct rx_work; + struct work_struct rx_urb_work; +}; + +static inline struct rtw89_usb *rtw89_usb_priv(struct rtw89_dev *rtwdev) +{ + return (struct rtw89_usb *)rtwdev->priv; +} + +int rtw89_usb_probe(struct usb_interface *intf, + const struct usb_device_id *id); +void rtw89_usb_disconnect(struct usb_interface *intf); + +#endif From patchwork Mon Jun 9 19:33:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895146 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75AE521D595 for ; Mon, 9 Jun 2025 19:33:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497594; cv=none; b=PMZC/nj3P7IVlSe//YZNNxXP/0Cf3NtXgGvPCtmLmu9GUpKsux4NHdEFqDqTjolM/nWPTqw7uBwt6msWrS/THYWvnSPcUIFtNYTZXdpnWeb0s0p4h21b8+xvu77oI5Az66ovXsIOa8iSZTY1xOA6Ty2c1o6387xRnl/9YGRS6/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497594; c=relaxed/simple; bh=1LOPeXDBuuZBQCtN1DwANhsQ+hjfg4SCtB27wwcM2DQ=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=s+yxUOdywNi1C1DMWBvXqlFK6ivBxEpxrFO9wuTiq5g8OTajRCuR2NP2kQTqkK5AOJO5pt2XdXurH6KD1JUL1lAaBu/i5yHSt/wLm1GGWvmgj4PiyiZ9c4xQq8QYwW3HgVd+S8p8YBjQFvLftOdmHqB5HqjZnLgfltoeuL2lH0c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JBrBNjPE; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JBrBNjPE" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-addcea380eeso653009666b.0 for ; Mon, 09 Jun 2025 12:33:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497591; x=1750102391; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=0hPgxAk1LCscr3VqQlcFXVVIn4/tweGo2bp6F79GaWE=; b=JBrBNjPEM0URgKsMQH4KqAmmax7R24IvDZtWfEX6NNMROJDmDA7sbQ8N+cNaO1Uhob 8cwFDLOSOQHrK/ktzv0RAlfO+RFnm7EBX2olGpXIH819agQhJTLTg3We3XwNikpNEPxC bsQCotHQ3GGNdqw+Os6/oj1oHFL2TfArwr5pzG0Td9zxRC2U+NTGUN9bD00H81XU+y0F RbfARcej2Typdy4eBi/k1SNvqjuNc7/i6YDO7qwuV2TpmHAmg97omjZ/ZYJYUHM4W3YK 9o2YjeT2QzDWttMkLYw04vYcHVVAWIkfo3bcKLDowWIgHxZ5YHL/xGpSNOvq9r328HGy Q5xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497591; x=1750102391; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0hPgxAk1LCscr3VqQlcFXVVIn4/tweGo2bp6F79GaWE=; b=X5mL9W4yIvDz/sqMUNOmTFGhAgZBiPx2aMLx/upS11n48qWWjDpKeQuX0kLQL80mlX PRzT+Owbfi+X4oc/BGcjFnMk3MP7LagPSovsodaz4sq3Z9gdhavGgjwiR3GCHqhow7ri IO+F0Yuh8o6hw8cv2BKbmXbTSXWI0+fqaINMbKyBSkUnY4hFvBt8S44tfLjjZci5cRQ1 87R3MvarIBZHADi54vPwuZnKOaUQ4Qhj5xq0m3zWyfbyslD6ZmWbGRL/HCxFFBuxcutk jxwEe42svhC+g0ZDzFRsXV2sJNZQxXtog9/GG4nEjM4+o6wM/RVMDw2QbqJENrN7R2te fbZQ== X-Gm-Message-State: AOJu0Ywa5OhcSIAQNHCDTInoLT7q79Wob7ax910kC3h95nUkkrxUEQwA 3j+h+G8WdI+N92ff8n5w4kubiePpgQZ+8oGlRAGy05oJHbXGtuLd02BFP5oNUA== X-Gm-Gg: ASbGncsyNfoGyHFf+GfHbxyHT5bxVoWgwXnOWFJEDJhnR7kzxiPnKq/yY577YorDPe1 HSgNlQ4G5aYD+pJEiwur+zr36nE7gN+0SfaU2Gpi31W0x1cOpgKh45yziFkmbIQp1a4CMerh8A7 kRP92kdeUrX0+Qow5B3nTj3kfT/cVN55V8CjxndcHCIrr1NO17ZRD5GfaOTmoIvbfDn3jRAWEvZ 2z6nELDH2072LKr+0fDsvMDCBCV7Pbrwv2tFK29Rl2PJgLGr8DniN76UiZwhqBSDiZwGfioP4fF d3+G/xFv4ECRq2/iBuWnhf7MgOb2BkkjsnvxqLuK3AmACKFInVCN/4Y5Ho3dEKol59IZFQ== X-Google-Smtp-Source: AGHT+IFHUtLDJxvOJHvIuVtb08SciXBOnIKDUUEjlyVlU/pfFNQQbExq6ifoB7ICzf9NJbhFVatCiw== X-Received: by 2002:a17:906:c142:b0:ad8:8717:bf9c with SMTP id a640c23a62f3a-ade1a978b47mr1379997766b.32.1749497590646; Mon, 09 Jun 2025 12:33:10 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1e361462sm587906866b.184.2025.06.09.12.33.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:33:10 -0700 (PDT) Message-ID: <327a8202-30b0-4617-87e4-bd5d7916ab2b@gmail.com> Date: Mon, 9 Jun 2025 22:33:09 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 13/14] wifi: rtw89: Add rtw8851bu.c From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> This is the entry point for the new rtw89_8851bu module. Signed-off-by: Bitterblue Smith --- v2: - Add USB ID 3625:010b for TP-Link Archer TX10UB Nano. - Add USB ID 7392:e611 for Edimax EW-7611UXB. --- .../net/wireless/realtek/rtw89/rtw8851bu.c | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtw89/rtw8851bu.c diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c new file mode 100644 index 000000000000..c3722547c6b0 --- /dev/null +++ b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* Copyright(c) 2025 Realtek Corporation + */ + +#include +#include +#include "rtw8851b.h" +#include "usb.h" + +static const struct rtw89_driver_info rtw89_8851bu_info = { + .chip = &rtw8851b_chip_info, + .variant = NULL, + .quirks = NULL, +}; + +static const struct usb_device_id rtw_8851bu_id_table[] = { + { USB_DEVICE_AND_INTERFACE_INFO(0x0bda, 0xb851, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&rtw89_8851bu_info }, + /* TP-Link Archer TX10UB Nano */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3625, 0x010b, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&rtw89_8851bu_info }, + /* Edimax EW-7611UXB */ + { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xe611, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&rtw89_8851bu_info }, + {}, +}; +MODULE_DEVICE_TABLE(usb, rtw_8851bu_id_table); + +static struct usb_driver rtw_8851bu_driver = { + .name = KBUILD_MODNAME, + .id_table = rtw_8851bu_id_table, + .probe = rtw89_usb_probe, + .disconnect = rtw89_usb_disconnect, +}; +module_usb_driver(rtw_8851bu_driver); + +MODULE_AUTHOR("Bitterblue Smith "); +MODULE_DESCRIPTION("Realtek 802.11ax wireless 8851BU driver"); +MODULE_LICENSE("Dual BSD/GPL"); From patchwork Mon Jun 9 19:34:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bitterblue Smith X-Patchwork-Id: 895962 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9F3321FF42 for ; Mon, 9 Jun 2025 19:34:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497647; cv=none; b=GcsDn43FbFaCZgJXy9dFT/b24b3g3x7vWf516xC7yh63p30adGl8rr0YQfLyPQHJ/9/lnWXNbj92I4+ah0kxN2puKhy9KrA/mZ/sTGVzS3J2FkNYs5kNogfD78eOoiJyvNVRalhFhW+z7ocMWdXNXtTKz9tTw/J+vPcdZUzkTXo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749497647; c=relaxed/simple; bh=gu2tdnuPFBsGHrdSi0bV+nic+L5cLpuD4YydiZ9Ii6o=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=ive6hEoOnTC07j1WnYaSk3z5g6ZZxkicG7DTK3/k3MXb49wtjFSK2meL92WRl0jpijgu6gFzfWzfa/490RCsAfe8Gx5hoFkKVhcAESMoo7PHzRJ1lTIe0ogd18TB5MkAaVl92m8Xcoj+aessUXg4Ll1AgFQefH+Pj8/GtO/5k38= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TB2EInfm; arc=none smtp.client-ip=209.85.218.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TB2EInfm" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-ad88eb71eb5so633850266b.0 for ; Mon, 09 Jun 2025 12:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749497644; x=1750102444; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=DY8HwOkps1wZ/Hv4SZKRQo+7+ZZLqqhNx7wbzd+QorM=; b=TB2EInfmxHqBs9KRLNqUqZLsRNIgAfYoEwFYGwNXmsoMs7G5FXgb7/XpoZDjgBJtGm X56XkEaxWnuxIdihhs80KzXKqtfugkG8NxnVL/vsRVwX+EShXZdu6Srn/1/hBq59nVBP GMFX7WJqcOWn0aCqNnPnZ78/aBnUwwsQvwmmWPfa+gdHkozojGlD3h3olCaJ4KqdTdMe v9CoIT37cEakDunkX3jn4+49z0okJGHAb4JN1vXPmZmp9BdS5wjxU9C6SZyU8IXNcmxb 9zTKiNDuk9aFqMCp9wapxaONqFfeGat/Br80KnNz4ptWvXrI4zngm9s/JcnQCsSZo8Qu xEBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749497644; x=1750102444; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DY8HwOkps1wZ/Hv4SZKRQo+7+ZZLqqhNx7wbzd+QorM=; b=God1rXMJnReQvtzA1/rpKQM0Z3JRTw68HHvfR8D/97YvtZEvpv0KgKUD+HPUi1cjhR 1xP2EX+cLTCfD1pXNRihYhlz4ckt8luwoJ2zaYBlM544hB2lFDcwMG9eDwQ1zsGdRH0E fvAhqb6gFTdBprdP3O3eVrV1ZueoakNI4A6pkBs2DCxDoSCU1WXD10F2soHDLWAmgF3h pE70SKSb3Sc7R2dpwGSpQHOfSX3w/QsNpX00zSh4XUM3iRlm0nTh79YSE+AYDGOHd4CH BOr4KTtqI3YWTkqJz/JaNJr+Q/7fg6avdsAbzf33Isef8W1yWZIwfH50hy1QNJ0IBOWn ZJJw== X-Gm-Message-State: AOJu0YyxoDSu3k9Ge5Si8WchbNZt6bizI4WoEeec7RHu783TsV67NbGl LUlZCBpNslPF27qZFFws1bFKoXEojTcRBDJstb1fvZhEFhAlyAo2kWmkW9oUVw== X-Gm-Gg: ASbGncvJJYob1BWivs6DACexSh6msOWwxug3Nl7WOgPOZiQiTECTcKHXsKyj9EuXB2N 9fp9j5eiHHuaGLRbmMfV6jOOFKBRsgN45Im/4WpenMr77dzm0ygK7SogURuicbQ0Yh1OEOH2VDL ilwYvI0TPIIEcfwTt+ccYJ3PSkqvoE7tBY+xGwM5vkXLOId4nQst2LUkzHpL8r6Bw+BNKymw19k LroGCh3lqebFvdbubdys4eMpNQNbPyv2xUKCcs7QVDQVaW+1XrJV/s37LEzQadfLqqhgdm1K2sw fdGyDss/0gKAInIuciTCg1fF7mx3I5MvLJ0JvMJhAsHlTGbOSHXDfUH3kCw= X-Google-Smtp-Source: AGHT+IG0RFfqD2mvVlrSMhnZnQN9Q/WMGl4krPpAHVyfL5ywaw6uNOJEGrm5X5gnTjvmrPYrxfS02Q== X-Received: by 2002:a17:906:4794:b0:ad5:372d:87e3 with SMTP id a640c23a62f3a-ade1aa157fcmr1396913266b.27.1749497643886; Mon, 09 Jun 2025 12:34:03 -0700 (PDT) Received: from [192.168.0.50] ([79.119.240.16]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ade1db55f6bsm596029866b.51.2025.06.09.12.34.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Jun 2025 12:34:03 -0700 (PDT) Message-ID: <663044d3-0816-4b1b-874d-776835e774e9@gmail.com> Date: Mon, 9 Jun 2025 22:34:02 +0300 Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH rtw-next v2 14/14] wifi: rtw89: Enable the new USB modules From: Bitterblue Smith To: "linux-wireless@vger.kernel.org" Cc: Ping-Ke Shih References: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Content-Language: en-US In-Reply-To: <6fc81cc4-a4d1-4db9-ab60-c8976e0b3c27@gmail.com> Enable compilation of the new rtw89_usb and rtw89_8851bu modules. Tested mostly in station mode, and a little bit in AP mode. Signed-off-by: Bitterblue Smith Acked-by: Ping-Ke Shih --- v2: - Add Acked-by. - Add more information in the commit message. --- drivers/net/wireless/realtek/rtw89/Kconfig | 14 ++++++++++++++ drivers/net/wireless/realtek/rtw89/Makefile | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/Kconfig b/drivers/net/wireless/realtek/rtw89/Kconfig index 205d7ecca7d7..bd180f3369c3 100644 --- a/drivers/net/wireless/realtek/rtw89/Kconfig +++ b/drivers/net/wireless/realtek/rtw89/Kconfig @@ -17,6 +17,9 @@ config RTW89_CORE config RTW89_PCI tristate +config RTW89_USB + tristate + config RTW89_8851B tristate @@ -49,6 +52,17 @@ config RTW89_8851BE 802.11ax PCIe wireless network (Wi-Fi 6) adapter +config RTW89_8851BU + tristate "Realtek 8851BU USB wireless network (Wi-Fi 6) adapter" + depends on USB + select RTW89_CORE + select RTW89_USB + select RTW89_8851B + help + Select this option will enable support for 8851BU chipset + + 802.11ax USB wireless network (Wi-Fi 6) adapter + config RTW89_8852AE tristate "Realtek 8852AE PCI wireless network (Wi-Fi 6) adapter" depends on PCI diff --git a/drivers/net/wireless/realtek/rtw89/Makefile b/drivers/net/wireless/realtek/rtw89/Makefile index c751013e811e..891e2d55c335 100644 --- a/drivers/net/wireless/realtek/rtw89/Makefile +++ b/drivers/net/wireless/realtek/rtw89/Makefile @@ -31,6 +31,9 @@ rtw89_8851b-objs := rtw8851b.o \ obj-$(CONFIG_RTW89_8851BE) += rtw89_8851be.o rtw89_8851be-objs := rtw8851be.o +obj-$(CONFIG_RTW89_8851BU) += rtw89_8851bu.o +rtw89_8851bu-objs := rtw8851bu.o + obj-$(CONFIG_RTW89_8852A) += rtw89_8852a.o rtw89_8852a-objs := rtw8852a.o \ rtw8852a_table.o \ @@ -81,3 +84,6 @@ rtw89_core-$(CONFIG_RTW89_DEBUG) += debug.o obj-$(CONFIG_RTW89_PCI) += rtw89_pci.o rtw89_pci-y := pci.o pci_be.o +obj-$(CONFIG_RTW89_USB) += rtw89_usb.o +rtw89_usb-y := usb.o +