From patchwork Mon Mar 2 08:58:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Chen X-Patchwork-Id: 1247678 X-Patchwork-Delegate: hs@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=cwMLAoN5; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48WNLg3D4Sz9sPK for ; Tue, 3 Mar 2020 01:48:43 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4FE3B8126F; Mon, 2 Mar 2020 15:48:12 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cwMLAoN5"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 563308120A; Mon, 2 Mar 2020 10:01:41 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id CC2BE81183 for ; Mon, 2 Mar 2020 10:01:34 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=ptchentw@gmail.com Received: by mail-pg1-x543.google.com with SMTP id y30so5086298pga.13 for ; Mon, 02 Mar 2020 01:01:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mvCnDCWm8P/ZVH3zdC3ShQ8GIQ8L66Ip9hGe8YROTno=; b=cwMLAoN5ZlBTnD8LNWLrHLYEUcDWiZ2qOQZAiey3wwIEjfgO5GPfmhNHksP15+zjk3 BmRLCS7cyEw6ltcmX6q7LmrwsDMO0j81p/Cwaa4NEwqYhFdR4RnieaOTvmz8ztRwEW6n xwM9NrB8yBsUFfp25Iu9MtxPmSL1U9VxgZvKj0MoUnxWyMA7vyWtArugkQ6IW86qfpom XNFKguOUL4C7RqtJxq8WZA8OEjfME2Qo8+G7eGU8YqAJ7FXbgN9Vx1q/SaRLFHCbWUda 59TbHMXphs+bieZMsenk9OMkn5v8gUpfoW4hviFjFIV6/3/XxPMjZWrW8k0ET5x9SWkc nMqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mvCnDCWm8P/ZVH3zdC3ShQ8GIQ8L66Ip9hGe8YROTno=; b=ru6JW5jRElRbK/jJf5b3Fl6nM5Xr5jBmL9ZMtL/UiojL21WKNKhbnPIYa7N+lvd4Wg py76AJtqLViwLUdXHAfETlRcC5+ZFiY54MnZpelLNKdqVCMpj/pN9f6Eh6dGnvsvIM4L vb+cqC+eQSrcqVZ02B/KeSKlXvBvc3eN9fZZWKvnvKizsrpRz1f8WqzYVTtaGrK/r+es gGhdbXiJc7fSKCNEdYa5MJV7kRB4pHWxYsPubOFN+q9/rc0lgwgEpJ2zrJKHqV4fnS13 j+FJymlCyipQgLAoVbyjU+S47en1CoTw2WJG5fqmMDnlKrFsZg6BLhEXbOt43+1nh7y6 krFw== X-Gm-Message-State: APjAAAVlMfjgS1qa24sxEygeC8KTo+86Th5EhNZl84NR4y0sz/dABFCH Q0CAuhnSYQRV7s+yU147+ykcv9jSzlg= X-Google-Smtp-Source: APXvYqz2NgG76nPCwm+4/9I6NRjcYBJbnQGnHkFPv/CFdG/opuiE2hDFzywK6+OY26oMejZ3GHTIFQ== X-Received: by 2002:a63:f14e:: with SMTP id o14mr18071769pgk.399.1583139693023; Mon, 02 Mar 2020 01:01:33 -0800 (PST) Received: from localhost.localdomain (114-34-112-171.HINET-IP.hinet.net. [114.34.112.171]) by smtp.gmail.com with ESMTPSA id c6sm20069132pgc.18.2020.03.02.01.01.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Mar 2020 01:01:32 -0800 (PST) From: Jun Chen To: u-boot@lists.denx.de Cc: Jun Chen , Jun Chen , Heiko Schocher , Simon Glass Subject: [PATCH 2/4] i2c: designware_i2c: check is high speed possible support Date: Mon, 2 Mar 2020 16:58:55 +0800 Message-Id: <1583139537-65602-3-git-send-email-ptchentw@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1583139537-65602-1-git-send-email-ptchentw@gmail.com> References: <1583139537-65602-1-git-send-email-ptchentw@gmail.com> X-Mailman-Approved-At: Mon, 02 Mar 2020 15:48:00 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.2 at phobos.denx.de X-Virus-Status: Clean From: Jun Chen To read IC_COMP_PARAM_1[3:2] to check is high speed possible, and fall back to fast mode if not. Signed-off-by: Jun Chen Signed-off-by: Jun Chen --- drivers/i2c/designware_i2c.c | 10 ++++++++++ drivers/i2c/designware_i2c.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index 9186fcb..f4fbf3b 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -203,9 +203,12 @@ static int calc_bus_speed(struct dw_i2c *priv, int speed, ulong bus_clk, const struct dw_scl_sda_cfg *scl_sda_cfg = NULL; struct i2c_regs *regs = priv->regs; enum i2c_speed_mode i2c_spd; + u32 comp_param1; int spk_cnt; int ret; + comp_param1 = readl(®s->comp_param1); + if (priv) scl_sda_cfg = priv->scl_sda_cfg; /* Allow high speed if there is no config, or the config allows it */ @@ -219,6 +222,13 @@ static int calc_bus_speed(struct dw_i2c *priv, int speed, ulong bus_clk, else i2c_spd = IC_SPEED_MODE_STANDARD; + /* Check is high speed possible and fall back to fast mode if not */ + if (i2c_spd == IC_SPEED_MODE_HIGH) { + if ((comp_param1 & DW_IC_COMP_PARAM_1_SPEED_MODE_MASK) + != DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH) + i2c_spd = IC_SPEED_MODE_FAST; + } + /* Get the proper spike-suppression count based on target speed */ if (!priv || !priv->has_spk_cnt) spk_cnt = 0; diff --git a/drivers/i2c/designware_i2c.h b/drivers/i2c/designware_i2c.h index 61a882c..23f311b 100644 --- a/drivers/i2c/designware_i2c.h +++ b/drivers/i2c/designware_i2c.h @@ -138,6 +138,9 @@ struct i2c_regs { #define IC_STATUS_TFNF 0x0002 #define IC_STATUS_ACT 0x0001 +#define DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH (BIT(2) | BIT(3)) +#define DW_IC_COMP_PARAM_1_SPEED_MODE_MASK (BIT(2) | BIT(3)) + /** * struct dw_scl_sda_cfg - I2C timing configuration *