From patchwork Mon Apr 27 13:40:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 1277657 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-silabs-onmicrosoft-com header.b=PH6q/l8b; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 499mC84gSgz9sT1 for ; Mon, 27 Apr 2020 23:41:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728071AbgD0NlT (ORCPT ); Mon, 27 Apr 2020 09:41:19 -0400 Received: from mail-mw2nam12on2089.outbound.protection.outlook.com ([40.107.244.89]:62212 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728039AbgD0NlQ (ORCPT ); Mon, 27 Apr 2020 09:41:16 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gmnXzy+iJ9rddlLIdowG5oVRCuzdIB9+LvaeSs5F+wqdL65eDLMMmjHXPRPbYgdeDaEVP7tDrBmFsVaEtsiPv7xfep1y435knj8x60Js4qLtZ2yNKW4gmpOviraXP0NSFlalQ2lna6ZO7Y4a+ogG2FLTury7xgLnmrytAssG8MF1UuuszpnbUlELVEpIeqI7UrPnp/CMp8X4e3gxQ0w76Tu5CPAmQ5VZIFg5uToexepiiR/c/MhJQeMi5gKJ7gn2KW5pY/l7q0EgnjNpoazdGLc5zoIHHNi4xmzS2FRNsf7xo6KPljbKxjf39GSPwH/8owaxDpxequU/PQb1O6pGlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SlhKzyyAtScIwXKv8cVUaj8lHOyXNli0M2jDxTxuPXU=; b=ZPEIZkQm2URl2NHBhN7lHzIB9YjLks8nQa3ydMYuvic7fdA5pTWUaxIGVLmoOeKOS+xbjYI3j1KBR3k2wU+DXRlOms5014iT5TyvcOfYza7v03b6H2Ul29sr+cfXnc0pSMXsmH8RKazHvrTh4zXs5B6KbpRArf5gCaXzYWatZa1XW/yJbl7LBhUoaM9VerP5FwvBm8no5+e816O8rg1i3VllS8lAZyV7a2JMbnzT9hod835CgXm5JIfwYSoPN899aC0kWCEvW72nuHOmgCa49+vTEikJhYU+LeOl+Z3cPp3StXHNaSERzyV3QzxyiwFt4sn3hXcaInmU2W1L4AyqBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SlhKzyyAtScIwXKv8cVUaj8lHOyXNli0M2jDxTxuPXU=; b=PH6q/l8bFSDa6YcUS/a/OBtgKevYsgSTDUQOjyCWRkMpdDLQrNCuNxIWBkqBHzzawUo5fGpfB8PLsB7bAYNeyGhN6vFNosX2K0k3KH9C0D7S4DUAoWwLt4EOKr/ifHaNJBsgZ6YqnaGdhhsJxOXkmvMmt8PAaSnT5JWiu7t3mGw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; Received: from MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) by MWHPR11MB1424.namprd11.prod.outlook.com (2603:10b6:300:26::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.22; Mon, 27 Apr 2020 13:41:14 +0000 Received: from MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::81d5:b62b:3770:ffbe]) by MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::81d5:b62b:3770:ffbe%10]) with mapi id 15.20.2937.023; Mon, 27 Apr 2020 13:41:14 +0000 From: Jerome Pouiller To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= Subject: [PATCH 06/17] staging: wfx: add support for 'device too hot' indication Date: Mon, 27 Apr 2020 15:40:20 +0200 Message-Id: <20200427134031.323403-7-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.26.1 In-Reply-To: <20200427134031.323403-1-Jerome.Pouiller@silabs.com> References: <20200427134031.323403-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: PR0P264CA0232.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::28) To MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by PR0P264CA0232.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.13 via Frontend Transport; Mon, 27 Apr 2020 13:41:12 +0000 X-Mailer: git-send-email 2.26.1 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a77beb1d-a777-4835-263b-08d7eab0a797 X-MS-TrafficTypeDiagnostic: MWHPR11MB1424: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 0386B406AA X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1775.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(136003)(39850400004)(376002)(346002)(396003)(366004)(8886007)(66476007)(66556008)(4326008)(81156014)(86362001)(8936002)(6486002)(52116002)(6666004)(6506007)(5660300002)(16526019)(6512007)(1076003)(478600001)(8676002)(36756003)(186003)(2616005)(54906003)(107886003)(66574012)(2906002)(316002)(66946007);DIR:OUT;SFP:1101; Received-SPF: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HHEUaZedoOewOMkJPyiW3sePv4XO1kWXSriNS38xlQTLYMW82EWi8qCuBxat/B9X3CdZizz7Jaxfi5KKO+IjzoVCy/rZ9D8r1DSz2lW67eHMjJKkoDabKhEVcTMeuxyUyvjn4FVUTSxRtn6uyh7Oqx+UDaO1VRq4wMgUK3lsponmJaL5Tw/5e2k5EvjRMLQTAyZsid/IHJh1EsFMgyb4rFoOOk4X/eYxfOsj0ojJatQOllZjNRU861ZaGRXeTD+41HrRBLqP6IVFdRTTirrxf+IXWxQEU7cvHP01EKFG3xfejhFX5gL1X7Gy+65JmdKuYdZRFz1G/vjz3kqymrqa3MCXcs0vgNo9fhLypRtstR54qEoj1wnMVoJvwGohX7uI56PGbCky36usY9nKA7DYNBKWZxeIea1WGeeN4EeGK9HMCtf+ZNLl2M+mInpLZaA6 X-MS-Exchange-AntiSpam-MessageData: kj7qXx4KZf2ZMjTXuGuyVdMtnlS3kCY9Ogw/GbhKTki69jgz0SB4QsQnnsGN1V5iQjrNPWMSw0ToBR9sm6IoN0UCOJeO26WDgSDJyOaAU4c23QdOPIrCU/A8FyVwrBRDi0DSGi0ioKAFgW6bs6+yv/CipRjprmU10zY+W9+h+S1dOTr50Y0HdbfdLkiiQcOgm7Vr29lMp8WZxAIsZpEonhjibjACoUDAkRBEThr00ld9MNLDAhcZSeJDutmhfRyXvPrMDdadodwaYH7puLn0cLYUuFF/9oi6VAr4Wvj60NzHLiwr3DBwL9J1nBs8dYm1gch6v0NIR/ClcXsgWp2TzG829q87EUFfws43LXxVFVScy8+ktAGYTayBxqTR88ehMHbZKLBESId8088TKmme/KC9qlBwW9S529XtCl480NqG+N5t/UeoGP6A1iggyxkb3vbzN6w8zm2Cr8ZvsKPq9WkksUJZPoXfFbJbOemC/ZDJiDwderQCPg12soFM6ffu7XioOfCAUFPRRJc8Op2YwqHvpDCo3VXp0YmROo9kRyRd6dabCUIPCA5JS9wkabAZHv0/1Ul7Aotg5k1SV5bWz56Rj4+grFBT617+2aUysrLyLP7qqaFIqFBhoTPCfBJKfT5Fsat09o+5OlXXMvHshg371yGUvPA+CKFn7ruv1qpPG79pK5T20xfd3Old5jGrnnCXQCjpNjJ0XxT3e/oxknin0xcY2VpBr5OApSmbNZMZXG7im9MlKjotKFJJ5Ypgbe7WliGBCgpW2YSqQYkF0Kf5qJV+jua3TULIvY4mLtW7+EwiDUyzhJf6vxTgXnmzqojdVmLv4QIZkAAhkZ9Me357FJneFNaPOWgi8v3FAN8= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a77beb1d-a777-4835-263b-08d7eab0a797 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2020 13:41:14.5517 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y1jvPNCSFKMSmz/in69MBJoPYIUA3Gr31IcpgwuN8+3XNHFk6h4NP7iLOCWPIdw78mWjLWnFM0BTEsiYebtcWw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1424 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jérôme Pouiller Device is able to detect a high temperature. In this case, the traffic is not allowed to be sent until the temperature decrease. This patch detects the warnings raised by the device and stop the traffic accordingly. It also add a delayed task as safeguard in case the chip would never send the indication that the temperature decrease. Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/hif_rx.c | 20 ++++++++++++++------ drivers/staging/wfx/main.c | 2 ++ drivers/staging/wfx/sta.c | 23 +++++++++++++++++++++++ drivers/staging/wfx/sta.h | 2 ++ drivers/staging/wfx/wfx.h | 1 + 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c index a2ac6c098163..6de210139d8a 100644 --- a/drivers/staging/wfx/hif_rx.c +++ b/drivers/staging/wfx/hif_rx.c @@ -235,12 +235,20 @@ static int hif_suspend_resume_indication(struct wfx_dev *wdev, struct wfx_vif *wvif = wdev_to_wvif(wdev, hif->interface); const struct hif_ind_suspend_resume_tx *body = buf; - WARN_ON(!wvif); - WARN(!body->suspend_resume_flags.bc_mc_only, "unsupported suspend/resume notification"); - if (body->suspend_resume_flags.resume) - wfx_suspend_resume_mc(wvif, STA_NOTIFY_AWAKE); - else - wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP); + if (body->suspend_resume_flags.bc_mc_only) { + WARN_ON(!wvif); + if (body->suspend_resume_flags.resume) + wfx_suspend_resume_mc(wvif, STA_NOTIFY_AWAKE); + else + wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP); + } else { + WARN(body->peer_sta_set, "misunderstood indication"); + WARN(hif->interface != 2, "misunderstood indication"); + if (body->suspend_resume_flags.resume) + wfx_suspend_hot_dev(wdev, STA_NOTIFY_AWAKE); + else + wfx_suspend_hot_dev(wdev, STA_NOTIFY_SLEEP); + } return 0; } diff --git a/drivers/staging/wfx/main.c b/drivers/staging/wfx/main.c index cc7f924f3106..1093584373ad 100644 --- a/drivers/staging/wfx/main.c +++ b/drivers/staging/wfx/main.c @@ -341,6 +341,8 @@ struct wfx_dev *wfx_init_common(struct device *dev, mutex_init(&wdev->conf_mutex); mutex_init(&wdev->rx_stats_lock); init_completion(&wdev->firmware_ready); + INIT_DELAYED_WORK(&wdev->cooling_timeout_work, + wfx_cooling_timeout_work); wfx_init_hif_cmd(&wdev->hif_cmd); wfx_tx_queues_init(wdev); diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index 5132c19e0367..67eb4a6e176b 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -38,6 +38,29 @@ u32 wfx_rate_mask_to_hw(struct wfx_dev *wdev, u32 rates) return ret; } +void wfx_cooling_timeout_work(struct work_struct *work) +{ + struct wfx_dev *wdev = container_of(to_delayed_work(work), + struct wfx_dev, + cooling_timeout_work); + + wdev->chip_frozen = true; + wfx_tx_unlock(wdev); +} + +void wfx_suspend_hot_dev(struct wfx_dev *wdev, enum sta_notify_cmd cmd) +{ + if (cmd == STA_NOTIFY_AWAKE) { + // Device recover normal temperature + if (cancel_delayed_work(&wdev->cooling_timeout_work)) + wfx_tx_unlock(wdev); + } else { + // Device is too hot + schedule_delayed_work(&wdev->cooling_timeout_work, 10 * HZ); + wfx_tx_lock(wdev); + } +} + static void wfx_filter_beacon(struct wfx_vif *wvif, bool filter_beacon) { const struct hif_ie_table_entry filter_ies[] = { diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h index e814fe743b7d..f7e876d1b031 100644 --- a/drivers/staging/wfx/sta.h +++ b/drivers/staging/wfx/sta.h @@ -67,6 +67,8 @@ void wfx_unassign_vif_chanctx(struct ieee80211_hw *hw, struct ieee80211_chanctx_conf *conf); // WSM Callbacks +void wfx_cooling_timeout_work(struct work_struct *work); +void wfx_suspend_hot_dev(struct wfx_dev *wdev, enum sta_notify_cmd cmd); void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd cmd); void wfx_event_report_rssi(struct wfx_vif *wvif, u8 raw_rcpi_rssi); diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h index c7a58ab3beaa..09bbb5da4f06 100644 --- a/drivers/staging/wfx/wfx.h +++ b/drivers/staging/wfx/wfx.h @@ -45,6 +45,7 @@ struct wfx_dev { struct hif_ind_startup hw_caps; struct wfx_hif hif; struct sl_context sl; + struct delayed_work cooling_timeout_work; bool chip_frozen; struct mutex conf_mutex;