From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E0D71C433FE for ; Sun, 1 May 2022 12:42:06 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 68F2183F06; Sun, 1 May 2022 14:41:50 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=solid-run.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=solid-run-com.20210112.gappssmtp.com header.i=@solid-run-com.20210112.gappssmtp.com header.b="P9Veo2w1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5436E83F24; Sun, 1 May 2022 14:41:47 +0200 (CEST) Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) (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 206A983E0E for ; Sun, 1 May 2022 14:41:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=solid-run.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=josua@solid-run.com Received: by mail-wm1-x32e.google.com with SMTP id k126so3563987wme.2 for ; Sun, 01 May 2022 05:41:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=solid-run-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2wGmn8oJPGDy5nJddkycf+awPbPbtnE5ka9KphZacSU=; b=P9Veo2w1W9i37axpaIrJCRZBAYxl/ttN8ig2BY4UrihSdfm6nvAifrtOy3ymOfdHfs rffLVmPkjAvtvrSQ/dknj30EM53w9J2v1Y3ptCqdekx6FNh0gge6xSPKyEOF8XoLJ3IR 4bQoc34mwIm+3XyTrWi7qn7upqGq3nxzCGT/mBRfd9Y0vp/BgKytvIr8LoqBxLTyM/q7 YX0AoMcHS1Y7d8z85CnS5u/pDGNpWglaIUiz124OwR8VcswdLnG8jjF6eXFx2ZF5rtRn rlNlXsCkexMk4cwDaJQEENsPAsmGoFN96dS2qCQTXLi8o/9xad1Rp6PcGQff4tL8rFlJ Y1QQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2wGmn8oJPGDy5nJddkycf+awPbPbtnE5ka9KphZacSU=; b=WRH+EUNHviB8r6dD34HsA89joUQST8X28A36fxiwAB3gNTVQ5qOTk7YGtGSuUD0PRl tvEW+EIQgIwMRFCfGLQzzEtPsP23hhmctrEIVhz+Sk4Fm00Sm97cCg+OxGhlu/QcxGY/ ChZUc7pubAT0otqIZKrP8qL6IVomLBxGxHBNk1kHkaF/eJTeWCvOPbljZCVGfpUvTEh2 lmuBnwVH7g28x2h1MdYlkieSyydQY/3AHnnGkC+8YHv0i10/HMZ6JQbFYvtYHRbeGLd9 b4jKpP+d+he3fNOvWuxtSe69aGbaRQjmEc2gEfpXqf5Gt9055t0FaBEE2CuXv3HWm7t2 ZXHg== X-Gm-Message-State: AOAM533AeC2qu02/y4auihvtsV4vbO+pgK6K0I2+GPbhxYW29Kwfdbzv eD1h53Xenu8Cmd2Thh8pq+39fowSvQ7log== X-Google-Smtp-Source: ABdhPJwCx+bOaZ28C4C51AjQeUFQaMWV8p08yvKi5vk0IXuZcsr1jWYnqXl9VcFob8GtlfsAZQr+VA== X-Received: by 2002:a05:600c:19ce:b0:393:f030:5baf with SMTP id u14-20020a05600c19ce00b00393f0305bafmr7293797wmq.136.1651408902365; Sun, 01 May 2022 05:41:42 -0700 (PDT) Received: from josua-work.lan (bzq-82-81-222-124.cablep.bezeqint.net. [82.81.222.124]) by smtp.gmail.com with ESMTPSA id c13-20020adfa70d000000b0020c5253d8e8sm4615238wrd.52.2022.05.01.05.41.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 May 2022 05:41:41 -0700 (PDT) From: Josua Mayer To: u-boot@lists.denx.de Cc: alvaro.karsz@solid-run.com, Josua Mayer , Joe Hershberger , Ramon Fried , Nate Drude Subject: [PATCH 2/5] phy: adin: add support for clock output Date: Sun, 1 May 2022 15:41:28 +0300 Message-Id: <20220501124131.30614-3-josua@solid-run.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220501124131.30614-1-josua@solid-run.com> References: <20220501124131.30614-1-josua@solid-run.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.103.5 at phobos.denx.de X-Virus-Status: Clean The ADIN1300 supports generating certain clocks on its GP_CLK pin, as well as providing the reference clock on CLK25_REF. Add support for selecting the clock via device-tree properties. This patch is based on just submitted patches to Linux [1] [2]. [1] https://patchwork.kernel.org/project/netdevbpf/patch/20220428082848.12191-2-josua@solid-run.com/ [2] https://patchwork.kernel.org/project/netdevbpf/patch/20220428082848.12191-4-josua@solid-run.com/ Signed-off-by: Josua Mayer --- drivers/net/phy/adin.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/drivers/net/phy/adin.c b/drivers/net/phy/adin.c index 2433e76fea..485430b128 100644 --- a/drivers/net/phy/adin.c +++ b/drivers/net/phy/adin.c @@ -4,6 +4,7 @@ * * Copyright 2019 Analog Devices Inc. * Copyright 2022 Variscite Ltd. + * Copyright 2022 Josua Mayer */ #include #include @@ -13,6 +14,16 @@ #define PHY_ID_ADIN1300 0x0283bc30 #define ADIN1300_EXT_REG_PTR 0x10 #define ADIN1300_EXT_REG_DATA 0x11 + +#define ADIN1300_GE_CLK_CFG_REG 0xff1f +#define ADIN1300_GE_CLK_CFG_MASK GENMASK(5, 0) +#define ADIN1300_GE_CLK_CFG_RCVR_125 BIT(5) +#define ADIN1300_GE_CLK_CFG_FREE_125 BIT(4) +#define ADIN1300_GE_CLK_CFG_REF_EN BIT(3) +#define ADIN1300_GE_CLK_CFG_HRT_RCVR BIT(2) +#define ADIN1300_GE_CLK_CFG_HRT_FREE BIT(1) +#define ADIN1300_GE_CLK_CFG_25 BIT(0) + #define ADIN1300_GE_RGMII_CFG 0xff23 #define ADIN1300_GE_RGMII_RX_MSK GENMASK(8, 6) #define ADIN1300_GE_RGMII_RX_SEL(x) \ @@ -115,6 +126,37 @@ static int adin_ext_write(struct phy_device *phydev, const u32 regnum, const u16 return phy_write(phydev, MDIO_DEVAD_NONE, ADIN1300_EXT_REG_DATA, val); } +static int adin_config_clk_out(struct phy_device *phydev) +{ + ofnode node = phy_get_ofnode(phydev); + const char *val = NULL; + u8 sel = 0; + + val = ofnode_read_string(node, "adi,phy-output-clock"); + if (!val) { + /* property not present, do not enable GP_CLK pin */ + } else if (strcmp(val, "25mhz-reference") == 0) { + sel |= ADIN1300_GE_CLK_CFG_25; + } else if (strcmp(val, "125mhz-free-running") == 0) { + sel |= ADIN1300_GE_CLK_CFG_FREE_125; + } else if (strcmp(val, "125mhz-recovered") == 0) { + sel |= ADIN1300_GE_CLK_CFG_RCVR_125; + } else if (strcmp(val, "adaptive-free-running") == 0) { + sel |= ADIN1300_GE_CLK_CFG_HRT_FREE; + } else if (strcmp(val, "adaptive-recovered") == 0) { + sel |= ADIN1300_GE_CLK_CFG_HRT_RCVR; + } else { + pr_err("%s: invalid adi,phy-output-clock\n", __func__); + return -EINVAL; + } + + if (ofnode_read_bool(node, "adi,phy-output-reference-clock")) + sel |= ADIN1300_GE_CLK_CFG_REF_EN; + + return adin_ext_write(phydev, ADIN1300_GE_CLK_CFG_REG, + ADIN1300_GE_CLK_CFG_MASK & sel); +} + static int adin_config_rgmii_mode(struct phy_device *phydev) { u16 reg_val; @@ -168,6 +210,10 @@ static int adin1300_config(struct phy_device *phydev) printf("ADIN1300 PHY detected at addr %d\n", phydev->addr); + ret = adin_config_clk_out(phydev); + if (ret < 0) + return ret; + ret = adin_config_rgmii_mode(phydev); if (ret < 0) -- 2.34.1