From patchwork Tue Sep 15 03:32:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AceLan Kao X-Patchwork-Id: 1364101 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=a7Z1NsFO; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Br81b3rDdz9sVD; Tue, 15 Sep 2020 13:32:34 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1kI1hl-00005Y-4x; Tue, 15 Sep 2020 03:32:29 +0000 Received: from mail-pf1-f195.google.com ([209.85.210.195]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kI1hi-00005D-Qq for kernel-team@lists.ubuntu.com; Tue, 15 Sep 2020 03:32:26 +0000 Received: by mail-pf1-f195.google.com with SMTP id o68so1155948pfg.2 for ; Mon, 14 Sep 2020 20:32:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BBnfA0IbshoKGYx3S96DBfEuB+uHBYPJgvO67uP2ekQ=; b=a7Z1NsFO5gKqeoo7Wlz7WyxkQOXL2zHLadBH4v/UkFQH8HuLGJMJl7QJ2Rf8ZRrXhL FwRmPLkWhNaccrjkdyGu1XlQ/mudK618pRStUD29RBXXHbzagSZw0blL0shY3UbQ1CqQ nZxkIus42hs4KFFZdqH4Z05+C6PFh2VL28l/jYI3TMRqoxIR56UsvGDtT5RUWRjQ8ZSV 3oMd70eZMrswDYynrahPGIBaItOb+weocsiVS7d9EpwG6oClz2wUqSgu/s/vUKMKaHdN Cop5B5iRThBE98zjFVxykapK+jnD3QmjfQ52gn/mu/OzYg0urUGe0C2b5nCRKxlG7cWm PLyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=BBnfA0IbshoKGYx3S96DBfEuB+uHBYPJgvO67uP2ekQ=; b=Pfdxk4jhu0Sn74DkcrT3Sh2h5jCmW2UpI580O92jnPCMlRhfqRybAss/hBJXoM6hq+ GE3sFCzM+I/cTs+jMsfm1OfTwmJ6b++V67FZJNl7xoi4mknx1cttY2mkBEv3QOEy7guz ZmGuEAIVqLku8REfW755asRlRC3kIh9YzGk2r8NmAk5Y37lol8TDEU/gIVKjnv5mRbWW GLGjjxbHMZnqe0mL8fkW3h3JHSGlxWWh6HoGjvWaefIdCNY4IvR+r96ivqBH+8rmzpYx dVKsX7Ytt2JOXDoMOW272g5yERUS0naswm8ZuZfjEdjGgDCvGCpSNmtCfJk4i3S/ZmDd F2Sw== X-Gm-Message-State: AOAM53380/Icri9JNd8oZq4KgKbPuzDgWIA+AYllFSV8OIVSraT2eFZf 518vrLRv9tQbm0LA/36a+QiVvaCIsbw= X-Google-Smtp-Source: ABdhPJw6dHh3D9qtG1Noiqo3bxuCoHK/WHQhg6ZMbNImodzRzS0Au55e4miVQWMdHLAyRKw6hnyoTw== X-Received: by 2002:a62:5bc2:0:b029:13e:d13d:a130 with SMTP id p185-20020a625bc20000b029013ed13da130mr15334290pfb.24.1600140744568; Mon, 14 Sep 2020 20:32:24 -0700 (PDT) Received: from localhost (61-220-137-37.HINET-IP.hinet.net. [61.220.137.37]) by smtp.gmail.com with ESMTPSA id gj16sm10112942pjb.13.2020.09.14.20.32.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Sep 2020 20:32:24 -0700 (PDT) From: AceLan Kao To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/1][SRU][OEM-B-OSP1][F][OEM-5.6][G] thunderbolt: Retry DROM read once if parsing fails Date: Tue, 15 Sep 2020 11:32:20 +0800 Message-Id: <20200915033220.165985-2-acelan.kao@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200915033220.165985-1-acelan.kao@canonical.com> References: <20200915033220.165985-1-acelan.kao@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.210.195; envelope-from=acelan@gmail.com; helo=mail-pf1-f195.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Mika Westerberg BugLink: https://bugs.launchpad.net/bugs/1895606 Kai-Heng reported that sometimes DROM parsing of ASUS PA27AC Thunderbolt 3 monitor fails. This makes the driver to fail to add the device so only DisplayPort tunneling is functional. It is not clear what exactly happens but waiting for 100 ms and retrying the read seems to work this around so we do that here. Link: https://bugzilla.kernel.org/show_bug.cgi?id=206493 Reported-by: Kai-Heng Feng Tested-by: Kai-Heng Feng Cc: stable@vger.kernel.org Signed-off-by: Mika Westerberg (cherry picked from commit f022ff7bf377ca94367be05de61277934d42ea74 linux-next) Signed-off-by: AceLan Kao Acked-by: Kleber Sacilotto de Souza --- drivers/thunderbolt/eeprom.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/thunderbolt/eeprom.c b/drivers/thunderbolt/eeprom.c index ee5196479854..fa491944de1a 100644 --- a/drivers/thunderbolt/eeprom.c +++ b/drivers/thunderbolt/eeprom.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include "tb.h" @@ -386,8 +387,8 @@ static int tb_drom_parse_entries(struct tb_switch *sw) struct tb_drom_entry_header *entry = (void *) (sw->drom + pos); if (pos + 1 == drom_size || pos + entry->len > drom_size || !entry->len) { - tb_sw_warn(sw, "drom buffer overrun, aborting\n"); - return -EIO; + tb_sw_warn(sw, "DROM buffer overrun\n"); + return -EILSEQ; } switch (entry->type) { @@ -493,7 +494,8 @@ int tb_drom_read(struct tb_switch *sw) u16 size; u32 crc; struct tb_drom_header *header; - int res; + int res, retries = 1; + if (sw->drom) return 0; @@ -581,7 +583,17 @@ int tb_drom_read(struct tb_switch *sw) tb_sw_warn(sw, "drom device_rom_revision %#x unknown\n", header->device_rom_revision); - return tb_drom_parse_entries(sw); + res = tb_drom_parse_entries(sw); + /* If the DROM parsing fails, wait a moment and retry once */ + if (res == -EILSEQ && retries--) { + tb_sw_warn(sw, "parsing DROM failed, retrying\n"); + msleep(100); + res = tb_drom_read_n(sw, 0, sw->drom, size); + if (!res) + goto parse; + } + + return res; err: kfree(sw->drom); sw->drom = NULL;