Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1858700pxb; Wed, 10 Feb 2021 20:09:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJxXHt40PtUxWtKHZZlgRUGb8SV5g4h6aDezhqXHp+CxkRUT4ZE57jyeEhLwBSzSQivJvNM8 X-Received: by 2002:a05:6402:2683:: with SMTP id w3mr6261622edd.378.1613016547964; Wed, 10 Feb 2021 20:09:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613016547; cv=none; d=google.com; s=arc-20160816; b=k0Gyx6fdhrLhkaxAtfZzmvxRlU5q2iwzUY/7O77o0UztjAQTjZqEQHYV+ge+cx7EQY fC+csbaxt3iRgF415aP0fNhV4AOLtKLiZeAFGpMnjbcZkq5ohMihlllSeknumMMMLtzO P9J1U0J5m8xJ+Qu+Pt75994cz5o9NqRESeziYgNrbqZlwijvVzaiooIikTGIDTC74abl 93z5p/6StWza60oSTnz5ERAjKEDkAj/f+HCTUfkyJ+0tSqOrKBmtR81nFqgY4z+4XwNS ZVsjTEKySxdxmycxut0a0uNNbryW4czFYpS+mh9LnH5UgGULRnWFtkAVrmSWh8fINnny DVRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=YmprhBUucZtKdCmu+LAa/i7gnU89uApOkepqzbffePM=; b=r3qFgK9uG3NTVMAApBKbLaE9ujQQe4iWZgKxCj/eEoGM4y+iDMlHDZIxOgjB3x8V5u IgxXk7nbFEA3KNizZIQfjgVNT4NxQ8uVO2dJg3HlucBP7rGcKfj/05b1nksl/1effV7w oe6pd7n7m2Vxqfaq29Z6DPzNuLvxS0rK5yvbaNQM43BLi78Ov5zoNyY7RjqgM9FgoVvD /hEVKYmy83BKK+xS9+YkB5aqUAhbPwIaDfM121oJxEWbn24tU17Q5jnw49HKt5AKKuIY raJW5zimtTSiPXRFg5E3xD3MAoPapxlt2v9c4bKrNmOFTTc8m9VnEtgD9P74dH9X5obB X6OQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i8si2697559ejv.311.2021.02.10.20.08.42; Wed, 10 Feb 2021 20:09:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229577AbhBKEGk (ORCPT + 99 others); Wed, 10 Feb 2021 23:06:40 -0500 Received: from mail-pg1-f171.google.com ([209.85.215.171]:37681 "EHLO mail-pg1-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229452AbhBKEGi (ORCPT ); Wed, 10 Feb 2021 23:06:38 -0500 Received: by mail-pg1-f171.google.com with SMTP id z21so2916393pgj.4; Wed, 10 Feb 2021 20:06:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=YmprhBUucZtKdCmu+LAa/i7gnU89uApOkepqzbffePM=; b=iaNUsbrvkAnxEKNI/suPdo35uWbfrwyvj58EdmyeXtaz2k89NYamqkBJOJxcTCNLP1 3m2CdrWRfpfX61DwYK0jkNexmCgNXcL7ZY/8z98Cz/t9hqtYsujKwAqnIPg74Wanld/F Mi5dkAPM7tdZXwlrBWlu8yVAKKw349GLr+dWStsYYwPzzQExNc5YCs16RSlE2e/brA4H nHR89AhH4ECSoGLFy+awlvrEBBpltUZGMM0PG8C0qIM0WNynAlkgdyBMH7qlQBztnz9l GjxeA5xLNG8DS7jorP0GtNPUhCQ5FTjst5cWEh4Q3H2AGweDcmbmjKWKUPdC+LR3uIIJ JJhQ== X-Gm-Message-State: AOAM531tJLPJ/9KLYZdrxl90CU/su+ZXr36+kBmOuaoySznquGFN9UXB ZJzSTnZW4ZUbgKGkLcAYFGZdXOYt+aRrrg== X-Received: by 2002:a63:f74f:: with SMTP id f15mr6320181pgk.186.1613016358110; Wed, 10 Feb 2021 20:05:58 -0800 (PST) Received: from localhost ([2601:647:5b00:1161:a4cc:eef9:fbc0:2781]) by smtp.gmail.com with ESMTPSA id z186sm3758954pgb.78.2021.02.10.20.05.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Feb 2021 20:05:57 -0800 (PST) Date: Wed, 10 Feb 2021 20:05:56 -0800 From: Moritz Fischer To: Alexandru Ardelean Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, mturquette@baylibre.com, sboyd@kernel.org, lars@metafoo.de, linux-fpga@vger.kernel.org, mdf@kernel.org, ardeleanalex@gmail.com, Mircea Caprioru Subject: Re: [PATCH 2/2] clk: axi-clkgen: Add support for FPGA info Message-ID: References: <20210210101535.47979-1-alexandru.ardelean@analog.com> <20210210101535.47979-2-alexandru.ardelean@analog.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210210101535.47979-2-alexandru.ardelean@analog.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Feb 10, 2021 at 12:15:35PM +0200, Alexandru Ardelean wrote: > From: Mircea Caprioru > > This patch adds support for vco maximum and minimum ranges in accordance VCO > with fpga speed grade, voltage, device package, technology and family. This FPGA > new information is extracted from two new registers implemented in the ip > core: ADI_REG_FPGA_INFO and ADI_REG_FPGA_VOLTAGE, which are stored in the > 'include/linux/fpga/adi-axi-common.h' file as they are common to all ADI > FPGA cores. Either all caps FPGA or all non-caps. > > Signed-off-by: Mircea Caprioru > Signed-off-by: Alexandru Ardelean > --- > drivers/clk/clk-axi-clkgen.c | 52 +++++++++++++++++++++++++++++++++++- > 1 file changed, 51 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/clk-axi-clkgen.c b/drivers/clk/clk-axi-clkgen.c > index ac6ff736ac8f..e4d6c87f8a07 100644 > --- a/drivers/clk/clk-axi-clkgen.c > +++ b/drivers/clk/clk-axi-clkgen.c > @@ -8,6 +8,7 @@ > > #include > #include > +#include > #include > #include > #include > @@ -240,6 +241,50 @@ static void axi_clkgen_read(struct axi_clkgen *axi_clkgen, > *val = readl(axi_clkgen->base + reg); > } > > +static void axi_clkgen_setup_ranges(struct axi_clkgen *axi_clkgen) > +{ > + struct axi_clkgen_limits *limits = &axi_clkgen->limits; > + unsigned int reg_value; > + unsigned int tech, family, speed_grade, voltage; Reverse xmas-tree please. xxxxxx xxx x > + > + axi_clkgen_read(axi_clkgen, ADI_AXI_REG_FPGA_INFO, ®_value); > + tech = ADI_AXI_INFO_FPGA_TECH(reg_value); > + family = ADI_AXI_INFO_FPGA_FAMILY(reg_value); > + speed_grade = ADI_AXI_INFO_FPGA_SPEED_GRADE(reg_value); > + > + axi_clkgen_read(axi_clkgen, ADI_AXI_REG_FPGA_VOLTAGE, ®_value); > + voltage = ADI_AXI_INFO_FPGA_VOLTAGE(reg_value); > + > + switch (speed_grade) { > + case ADI_AXI_FPGA_SPEED_GRADE_XILINX_1 ... ADI_AXI_FPGA_SPEED_GRADE_XILINX_1LV: > + limits->fvco_max = 1200000; > + limits->fpfd_max = 450000; > + break; > + case ADI_AXI_FPGA_SPEED_GRADE_XILINX_2 ... ADI_AXI_FPGA_SPEED_GRADE_XILINX_2LV: > + limits->fvco_max = 1440000; > + limits->fpfd_max = 500000; > + if ((family == ADI_AXI_FPGA_FAMILY_XILINX_KINTEX) | > + (family == ADI_AXI_FPGA_FAMILY_XILINX_ARTIX)) { > + if (voltage < 950) { > + limits->fvco_max = 1200000; > + limits->fpfd_max = 450000; > + } > + } > + break; > + case ADI_AXI_FPGA_SPEED_GRADE_XILINX_3: > + limits->fvco_max = 1600000; > + limits->fpfd_max = 550000; > + break; > + default: No warning? Does PCORE_VER_MAJOR(ver) > 0x04 not imply this to be known or valid? > + break; > + }; > + Maybe: "For Ultrascale+ the speedgrades don't matter" or something as a comment? > + if (tech == ADI_AXI_FPGA_TECH_XILINX_ULTRASCALE_PLUS) { > + limits->fvco_max = 1600000; > + limits->fvco_min = 800000; > + } > +} > + > static int axi_clkgen_wait_non_busy(struct axi_clkgen *axi_clkgen) > { > unsigned int timeout = 10000; > @@ -510,7 +555,7 @@ static int axi_clkgen_probe(struct platform_device *pdev) > struct clk_init_data init; > const char *parent_names[2]; > const char *clk_name; > - unsigned int i; > + unsigned int i, ver; > int ret; > > dflt_limits = device_get_match_data(&pdev->dev); > @@ -537,6 +582,11 @@ static int axi_clkgen_probe(struct platform_device *pdev) > > memcpy(&axi_clkgen->limits, dflt_limits, sizeof(axi_clkgen->limits)); > > + axi_clkgen_read(axi_clkgen, ADI_AXI_REG_VERSION, &ver); > + > + if (ADI_AXI_PCORE_VER_MAJOR(ver) > 0x04) Nit: 0x4 is fine? > + axi_clkgen_setup_ranges(axi_clkgen); > + > clk_name = pdev->dev.of_node->name; > of_property_read_string(pdev->dev.of_node, "clock-output-names", > &clk_name); > -- > 2.17.1 > Thanks, Moritz