From patchwork Mon Apr 27 13:40:31 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: 1277663 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=A/kGiUFZ; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 499mD066fVz9sT1 for ; Mon, 27 Apr 2020 23:42:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728234AbgD0NmE (ORCPT ); Mon, 27 Apr 2020 09:42:04 -0400 Received: from mail-mw2nam12on2078.outbound.protection.outlook.com ([40.107.244.78]:6167 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728159AbgD0Nl7 (ORCPT ); Mon, 27 Apr 2020 09:41:59 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hElmyXNazKewLsrWD5OXIqxVSO/ziDUkS+JDpRolLR+y0LbOWklcqH/f98CooshHtHygJ4JNR9ajOLjGIi5ouExYYSRzJFof/aMqND8dnCGsAGMno+o+CwA3NG2TBmCDjANovDxuiAZeUp/uxjdZaPG/kUXf61sqnAkovS3bPMpe6JS1mpizEr9WpYW4XKd7DVg2H8JErQ2jvn8jDqG+cXdIo4qP4W2JA1LDhhCco5VZ/8d+8Dfq4DijqVWo3OsHAZuRrH07HIQfx8OLNiHYgD2vSh8UiltKqbgTTXO7QLa7p7hXvmXTiM6mhlc0mBdoi0/2fJ5vgf5oHpOeuS4iqA== 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=oywlY9bZiBzuqdYxVPOHJa4gwfeS6Tzsat0A43dBjSY=; b=dhXmDQ59nRw7UbSiYrexENrpHVGGsPle4M8mDRcYBnlRSkPH/PmpmNJv/m3hSYPXJsVZd/s+ME6ZF0BiuYpsKNCeG3JjmXWXZjduHybkh/Qay5Qu+zrWec0mLdbprP2y3qKAsGytjj9bl8lGKBGLbTpAecb7381/SZdhFMB1s6uqThvhwBUDR8mkd6BOxUOKYVNUugjWhRFTmykAIKNj9rpqLRYtCgMmfT2u+Pyujf1jtigOyR1IG/PPFE1MNBkAn1Q0KCycqjI9lIYqNIPcjZoVvJXc/Y9Ow86tFrS1xtT1MO0OI6vugDUSJmaJUROlnWUbKuoIZFSoHv6VNdxWIw== 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=oywlY9bZiBzuqdYxVPOHJa4gwfeS6Tzsat0A43dBjSY=; b=A/kGiUFZACL9L7uMGeo4Vn59BHXiTym89dQNYgI4hTkJrxxp0kqeEQ8HRYrqoQ6ioMFQ6GLXOWgRkzlLA4A5jZX2e4sLsf1euuEEUJVbl5m8c8/6LFn1wnoHqQ0F1SRLqISF3zJSVdVl5v2GYIR6MxvZvs3uFPjm0W8N1ZW83/o= 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:48 +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:48 +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 17/17] staging: wfx: update list of errors Date: Mon, 27 Apr 2020 15:40:31 +0200 Message-Id: <20200427134031.323403-18-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:45 +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: 79757a0a-b4ac-47ff-60ba-08d7eab0bb77 X-MS-TrafficTypeDiagnostic: MWHPR11MB1424: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; 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)(15650500001)(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: rNlXHZlcZeju6QSx0ra3m3uoRLTRt1AQZCWMp9RvIiwud6hqN8TLCblknZSSQ0yjR4ZmcztM9Ok+uvvKrsxMoq3c46SQAtfw08R9LRpRg7esUAaynMsGsNM1Am6cLn8sOLgaN7CUlLbwb0TgF9ci+0fTuuBTHNiQ2Iu+gpC6FrjPbxEiYRghuKqFoEdOLxLcrZHlhqGmKQ42c3VADh7XQGuKom86d+/4AH8GknG5yjNZMowqvKUFmJc62z+/eLPVsY0rG6DN5fNUP9yyCdq7gnJTc1oQW/cJLIfekC5z0qDcJzJ8ub4c8LnKbY2shENBk9gwHNdgQIyfZcUtwB6HUfFCzMFVdiAonggOlkDocw51DZmnK9Ua4d4D/0RPwX+z0/n0wXQ47Q0bLb+xN74vfXMmmLpd1WSVk1gtqQbEnlwaT0WCU7SA640kRwKSdKjr X-MS-Exchange-AntiSpam-MessageData: k9Xum+BeU4wB/fIkmZ5bWPh5Ex5f72sFP5L/4CsUw8bIqtn78ZBhQkK9mjLMC6DCdPATfCAAsxGOOc6SHMlMO8S/KFqAyiNwuqdWfKfWSFAPO7ZTkxrG6ZZNt6EDFw9bkkxzpLr0I7peAswhxJWjojIynAFGgCWUVR/wCTmYSde8X0WlXVDMfGstwI9skBDBrw4XT5MlzarypKAHTolms3aVQoqiKKAIPPQf5444U7uBe5auan4yq9SwH+rlSQBdJpprxTIyhWQlSOuMipJ8+pOWFZHB2XbOjdk1bEUpYR8YT0sg0sRMDTgHusTYpqIZU+qjpO2yOxwCKc62UBe2GRcIUSalaayvWTwxMzjOXieOSMc+9Qx0KKVD7QdnKSr3FHlZXUI2Q8n7NsJq564x8b+Xlnl1btvMOMCITfNSCVaBcqcAsOGvQQ6WDsUtSYkKRD1scJjKfef5E0h6ZbzaZGwL14WY3Wpcc0gcdlmFWNGTMqXN4g4kervwOFZyX+1bkI/57Kmz7nwsmrI6Qieeznrj/njQiJHBBf0I3mXpqlO3j9EKm940TcQo5H8jbFuEQ42wjDpzL+TNQ8Mm5kgS8ZJN4qs9/59Ha6expHkz89byNyvd/FaC+f6XM6xs+C1bheJyjp4eEvUIPKdF+A3ISszn+fXpABedvqaSMGIZnzbtpPvhy/3hA9sCvFAePoLbkoxpBj7VhxQXDvb+lhiIR95HwTxwIdYv3yKAjJroLugqut1QR2SrvRglgxWzDmqvSxacUU8FUIVDYmA+CSWKGdU2E0PRvzzJCkSRCe41v1FCxx2aLgJa0kViGezgciWv6vOuDnwgLB96rLwYVJC4je08n07fuSJ5+Fr3GtlpeIQ= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79757a0a-b4ac-47ff-60ba-08d7eab0bb77 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2020 13:41:47.8810 (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: jFX+ANsKeszk4+TxuKo9nC1OY1ZEvZx88h7gYEUlRphstWrk8iufFvqipx4u4CMqgwzWidnKpvMkYfASiZnz8Q== 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 The device raises error indications when it thinks there is a bug in the driver and it can't recover it (while it raises exception when a bug is detected in the device). The current list of of errors was a bit dated. This patch cleans up the list of errors and the associated message. It is also the right time to clean up the way the error indications are handled. Replace the switch..case with a clean loop over an array. Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/hif_api_general.h | 28 ++++--- drivers/staging/wfx/hif_rx.c | 114 ++++++++++++++++---------- 2 files changed, 86 insertions(+), 56 deletions(-) diff --git a/drivers/staging/wfx/hif_api_general.h b/drivers/staging/wfx/hif_api_general.h index 1c010f15c6d0..f0135d27120c 100644 --- a/drivers/staging/wfx/hif_api_general.h +++ b/drivers/staging/wfx/hif_api_general.h @@ -224,17 +224,23 @@ struct hif_ind_generic { } __packed; enum hif_error { - HIF_ERROR_FIRMWARE_ROLLBACK = 0x0, - HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x1, - HIF_ERROR_OUTDATED_SESSION_KEY = 0x2, - HIF_ERROR_INVALID_SESSION_KEY = 0x3, - HIF_ERROR_OOR_VOLTAGE = 0x4, - HIF_ERROR_PDS_VERSION = 0x5, - HIF_ERROR_OOR_TEMPERATURE = 0x6, - HIF_ERROR_REQ_DURING_KEY_EXCHANGE = 0x7, - HIF_ERROR_MULTI_TX_CNF_SECURELINK = 0x8, - HIF_ERROR_SECURELINK_OVERFLOW = 0x9, - HIF_ERROR_SECURELINK_DECRYPTION = 0xa + HIF_ERROR_FIRMWARE_ROLLBACK = 0x00, + HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x01, + HIF_ERROR_SLK_OUTDATED_SESSION_KEY = 0x02, + HIF_ERROR_SLK_SESSION_KEY = 0x03, + HIF_ERROR_OOR_VOLTAGE = 0x04, + HIF_ERROR_PDS_PAYLOAD = 0x05, + HIF_ERROR_OOR_TEMPERATURE = 0x06, + HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE = 0x07, + HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED = 0x08, + HIF_ERROR_SLK_OVERFLOW = 0x09, + HIF_ERROR_SLK_DECRYPTION = 0x0a, + HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE = 0x0b, + HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW = 0x0c, + HIF_ERROR_HIF_RX_DATA_TOO_LARGE = 0x0e, + HIF_ERROR_HIF_TX_QUEUE_FULL = 0x0d, + HIF_ERROR_HIF_BUS = 0x0f, + HIF_ERROR_PDS_TESTFEATURE = 0x10, }; struct hif_ind_error { diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c index 783f301d58a8..b786714a8755 100644 --- a/drivers/staging/wfx/hif_rx.c +++ b/drivers/staging/wfx/hif_rx.c @@ -253,51 +253,6 @@ static int hif_suspend_resume_indication(struct wfx_dev *wdev, return 0; } -static int hif_error_indication(struct wfx_dev *wdev, - const struct hif_msg *hif, const void *buf) -{ - const struct hif_ind_error *body = buf; - u8 *pRollback = (u8 *) body->data; - u32 *pStatus = (u32 *) body->data; - - switch (body->type) { - case HIF_ERROR_FIRMWARE_ROLLBACK: - dev_err(wdev->dev, - "asynchronous error: firmware rollback error %d\n", - *pRollback); - break; - case HIF_ERROR_FIRMWARE_DEBUG_ENABLED: - dev_err(wdev->dev, "asynchronous error: firmware debug feature enabled\n"); - break; - case HIF_ERROR_OUTDATED_SESSION_KEY: - dev_err(wdev->dev, "asynchronous error: secure link outdated key: %#.8x\n", - *pStatus); - break; - case HIF_ERROR_INVALID_SESSION_KEY: - dev_err(wdev->dev, "asynchronous error: invalid session key\n"); - break; - case HIF_ERROR_OOR_VOLTAGE: - dev_err(wdev->dev, "asynchronous error: out-of-range overvoltage: %#.8x\n", - *pStatus); - break; - case HIF_ERROR_OOR_TEMPERATURE: - dev_err(wdev->dev, "asynchronous error: out-of-range temperature: %#.8x\n", - *pStatus); - break; - case HIF_ERROR_PDS_VERSION: - dev_err(wdev->dev, - "asynchronous error: wrong PDS payload or version: %#.8x\n", - *pStatus); - break; - default: - dev_err(wdev->dev, "asynchronous error: unknown (%d)\n", - body->type); - break; - } - wdev->chip_frozen = true; - return 0; -} - static int hif_generic_indication(struct wfx_dev *wdev, const struct hif_msg *hif, const void *buf) { @@ -328,6 +283,75 @@ static int hif_generic_indication(struct wfx_dev *wdev, } } +static const struct { + int val; + const char *str; + bool has_param; +} hif_errors[] = { + { HIF_ERROR_FIRMWARE_ROLLBACK, + "rollback status" }, + { HIF_ERROR_FIRMWARE_DEBUG_ENABLED, + "debug feature enabled" }, + { HIF_ERROR_PDS_PAYLOAD, + "PDS version is not supported" }, + { HIF_ERROR_PDS_TESTFEATURE, + "PDS ask for an unknown test mode" }, + { HIF_ERROR_OOR_VOLTAGE, + "out-of-range power supply voltage", true }, + { HIF_ERROR_OOR_TEMPERATURE, + "out-of-range temperature", true }, + { HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE, + "secure link does not expect request during key exchange" }, + { HIF_ERROR_SLK_SESSION_KEY, + "secure link session key is invalid" }, + { HIF_ERROR_SLK_OVERFLOW, + "secure link overflow" }, + { HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE, + "secure link messages list does not match message encryption" }, + { HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW, + "bus clock is too slow (<1kHz)" }, + { HIF_ERROR_HIF_RX_DATA_TOO_LARGE, + "HIF message too large" }, + // Following errors only exists in old firmware versions: + { HIF_ERROR_HIF_TX_QUEUE_FULL, + "HIF messages queue is full" }, + { HIF_ERROR_HIF_BUS, + "HIF bus" }, + { HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED, + "secure link does not support multi-tx confirmations" }, + { HIF_ERROR_SLK_OUTDATED_SESSION_KEY, + "secure link session key is outdated" }, + { HIF_ERROR_SLK_DECRYPTION, + "secure link params (nonce or tag) mismatch" }, +}; + +static int hif_error_indication(struct wfx_dev *wdev, + const struct hif_msg *hif, const void *buf) +{ + const struct hif_ind_error *body = buf; + int type = le32_to_cpu(body->type); + int param = (s8)body->data[0]; + int i; + + for (i = 0; i < ARRAY_SIZE(hif_errors); i++) + if (type == hif_errors[i].val) + break; + if (i < ARRAY_SIZE(hif_errors)) + if (hif_errors[i].has_param) + dev_err(wdev->dev, "asynchronous error: %s: %d\n", + hif_errors[i].str, param); + else + dev_err(wdev->dev, "asynchronous error: %s\n", + hif_errors[i].str); + else + dev_err(wdev->dev, "asynchronous error: unknown: %08x\n", type); + print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET, + 16, 1, hif, hif->len, false); + wdev->chip_frozen = true; + + return 0; +}; + static int hif_exception_indication(struct wfx_dev *wdev, const struct hif_msg *hif, const void *buf) {