From patchwork Mon Nov 11 21:42:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 1193155 X-Patchwork-Delegate: simon.k.r.goldschmidt@gmail.com 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.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JvB6IBeW"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47BkrQ2CBxz9s7T for ; Tue, 12 Nov 2019 08:43:02 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 88E48C21E1A; Mon, 11 Nov 2019 21:43:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 88BCFC21C8B; Mon, 11 Nov 2019 21:42:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 91FAFC21C8B; Mon, 11 Nov 2019 21:42:56 +0000 (UTC) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by lists.denx.de (Postfix) with ESMTPS id 43977C21C2C for ; Mon, 11 Nov 2019 21:42:56 +0000 (UTC) Received: by mail-wr1-f65.google.com with SMTP id e6so16351466wrw.1 for ; Mon, 11 Nov 2019 13:42:56 -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:mime-version :content-transfer-encoding; bh=jlME5vBQi74EoYxHody+6aNNC34qMKmSH10eSo3g+PI=; b=JvB6IBeWlpRCeukogok9H3CPFGd7YVvZ2PzP3hXW3CR98HycQNW23CKimt8Q85zQy2 I5HbFGs7Q9kO43gQD+/LDSRI0XSQczfzrSB/yAdYVticducbsbTs2/1x8yqGnhTDitcB 8WDSJ2KXlhgFF/WcakcIhBzP4UcLIh5Ao/kwXnie+nqTB2W9d1LjehZwP7e+onDVi5yn oHCPJ9Dq/pPYdekzWpvf0skyzltHOaNHqZsxDeZTKJEf3YXMxhwi+TbxAC0yEzU/ArcX qvyD8UzFjaEaJwXslilS44RE7Y4EQod3Fklwi+56xQvsD3iQrI47EBuFReOD3V897+VR 5rYA== 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:mime-version :content-transfer-encoding; bh=jlME5vBQi74EoYxHody+6aNNC34qMKmSH10eSo3g+PI=; b=rBqcNX/eCQhiJTiRwVuPu3oCHTDEZ62q4Wlq04/bwbOiDtTZ248qBq+Iz1ro79KjGL ouXLdv3SPE2PM5pNXPJ9hRn9BlUVzB55Sae2qPskei+ivmFZy5GU8zCNTV6ZA1ZsZIHP 29DY/0UrDTI278Z93o5qPDM8YuuhXFp/zxTV921CASsao+jhZWaldsw8kGtZWxeS3j5B 6DtIsiaPJoq4j6oZL5Qno7jY8YiYRbOUiSAjKNwAcEVZqZ7lwdDtl6D2MHd8/dFTAgEp JmOunPsXjGmfihc7WPDNQbSCCQE/UivsDZjz8/qCrXnM5p8af5Yvu0F9XwcLQXu4Tk1D 5pDg== X-Gm-Message-State: APjAAAU7TD6NcihduX93Wjcgn5JfBzKYyJ/aZ4qZ4DJmJlSbUK+FP01L ZU2kDf9Rlo+aabGCoOyKFVw= X-Google-Smtp-Source: APXvYqw2cmUI5hqxd8oT4F6DBLj2zAzjlNMuscfyTvjZ0ccBNyV5vuylWJ+A2+SqxcyV/LEqgbhsjA== X-Received: by 2002:adf:b7c2:: with SMTP id t2mr19963624wre.47.1573508575876; Mon, 11 Nov 2019 13:42:55 -0800 (PST) Received: from ubuntu.home ([2a02:8071:6a3:700:695e:d262:a293:b57]) by smtp.gmail.com with ESMTPSA id j22sm29165718wrd.41.2019.11.11.13.42.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Nov 2019 13:42:54 -0800 (PST) From: Simon Goldschmidt To: Jagan Teki Date: Mon, 11 Nov 2019 22:42:51 +0100 Message-Id: <20191111214251.4112-1-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Cc: Marek Vasut , u-boot@lists.denx.de Subject: [U-Boot] [PATCH v3] spi: cadence_qspi: support DM_CLK X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Support loading clk speed via DM instead of requiring ad-hoc code. Signed-off-by: Simon Goldschmidt --- Changes in v3: - load ref_clk_hz only once in cadence_spi_ofdata_to_platdata instead of loading it every time in cadence_spi_write_speed Changes in v2: - check return value of clk_get_rate for error drivers/spi/cadence_qspi.c | 21 +++++++++++++++++++-- drivers/spi/cadence_qspi.h | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c index e2e54cd277..8fd23a7702 100644 --- a/drivers/spi/cadence_qspi.c +++ b/drivers/spi/cadence_qspi.c @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -24,10 +25,10 @@ static int cadence_spi_write_speed(struct udevice *bus, uint hz) struct cadence_spi_priv *priv = dev_get_priv(bus); cadence_qspi_apb_config_baudrate_div(priv->regbase, - CONFIG_CQSPI_REF_CLK, hz); + plat->ref_clk_hz, hz); /* Reconfigure delay timing if speed is changed. */ - cadence_qspi_apb_delay(priv->regbase, CONFIG_CQSPI_REF_CLK, hz, + cadence_qspi_apb_delay(priv->regbase, plat->ref_clk_hz, hz, plat->tshsl_ns, plat->tsd2d_ns, plat->tchsh_ns, plat->tslch_ns); @@ -294,6 +295,8 @@ static int cadence_spi_ofdata_to_platdata(struct udevice *bus) { struct cadence_spi_platdata *plat = bus->platdata; ofnode subnode; + struct clk clk; + int ret; plat->regbase = (void *)devfdt_get_addr_index(bus, 0); plat->ahbbase = (void *)devfdt_get_addr_index(bus, 1); @@ -325,6 +328,20 @@ static int cadence_spi_ofdata_to_platdata(struct udevice *bus) plat->tchsh_ns = ofnode_read_u32_default(subnode, "cdns,tchsh-ns", 20); plat->tslch_ns = ofnode_read_u32_default(subnode, "cdns,tslch-ns", 20); + ret = clk_get_by_index(bus, 0, &clk); + if (ret) { +#ifdef CONFIG_CQSPI_REF_CLK + plat->ref_clk_hz = CONFIG_CQSPI_REF_CLK; +#else + return ret; +#endif + } else { + plat->ref_clk_hz = clk_get_rate(&clk); + clk_free(&clk); + if (IS_ERR_VALUE(plat->ref_clk_hz)) + return plat->ref_clk_hz; + } + debug("%s: regbase=%p ahbbase=%p max-frequency=%d page-size=%d\n", __func__, plat->regbase, plat->ahbbase, plat->max_hz, plat->page_size); diff --git a/drivers/spi/cadence_qspi.h b/drivers/spi/cadence_qspi.h index 20cceca239..99dee75bbd 100644 --- a/drivers/spi/cadence_qspi.h +++ b/drivers/spi/cadence_qspi.h @@ -16,6 +16,7 @@ #define CQSPI_READ_CAPTURE_MAX_DELAY 16 struct cadence_spi_platdata { + unsigned int ref_clk_hz; unsigned int max_hz; void *regbase; void *ahbbase;