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 2F264C433EF for ; Sat, 30 Apr 2022 16:15:09 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0797A83542; Sat, 30 Apr 2022 18:14:55 +0200 (CEST) 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="b2EX/39K"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id DC96B818A3; Sat, 30 Apr 2022 18:14:46 +0200 (CEST) Received: from mail-io1-xd2e.google.com (mail-io1-xd2e.google.com [IPv6:2607:f8b0:4864:20::d2e]) (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 E4CBA83F27 for ; Sat, 30 Apr 2022 18:14:42 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=aford173@gmail.com Received: by mail-io1-xd2e.google.com with SMTP id z18so12147802iob.5 for ; Sat, 30 Apr 2022 09:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Gs4gKeqFWdza4enk3dScMggXl06PpfdkA6SQrMLt/L4=; b=b2EX/39KUvyvOp6t7MM+/kaUq0K9ppZR+tYGbYIq0Z/YW/IMsPu6NrcDKoOzPDpOKg LcVpDDHkxCoEaQS+vQRNwfyxP7dsEeEG1zZNWIGHIuzc0DGQODho0HA1CcEeCG6K0Duk JNBaa+IxbBzrJbrmSkOrL0rPzBAooDb107lkdKeP6xXa1C29COF6zOTnLhF9FlFeO0Rx Qr5Lkp/OzgQvcODpINctszIHliAgVhEDrVYTyENK8YTW+WM47q1Zu8a8VkCc6BVUUACE X4cFI7G6IewI+zM6oKsHaIATrmsizNXSXi2HYN9+m0U8E3C2jtvUMQDLWvhjJejDYzQv M3bg== 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=Gs4gKeqFWdza4enk3dScMggXl06PpfdkA6SQrMLt/L4=; b=cwA0gOR3zL6+yQF59KUMha+ZRxrrjIIbdgFDVUFrDYwKQn//PEvKsnoBmj6TZCyb8Q Ewco2KF2X4XPa6WbwZ8tYKG74MeStG4vlrUIhHvOe/gxD0ByJ9A2yphbTgfu74nayBOr 8m4chduEV9pLb03FT+mlBLcnyBGhGdIaO3bEAlrzB0p1SY5XRnU3YfXfdWDPgdKT6cSV Zhoyl+zMHsp6WtOQWdFf4FiLEJydbRNnQvjfGtz007BJ7gdyTxPmZbEI+CEKDeyYJWHM PNKunpOhsAGDHwjYbQciigD1l8W5v/OQaPVIZPP+yzwP0a9UpGotlvHIU1zhQaR9uAVd t3KQ== X-Gm-Message-State: AOAM533aDny7W2mB52w/+p3WVGdnG4ErqHp+SY7046vKGXs+mKbW+3Ge ezHlFMGYvfa0F4SygXfrFj11G0aBCB8= X-Google-Smtp-Source: ABdhPJwG1qrdU67XVz55J+e2aOH/3tAOyqyYx1LOhQNGaaddsVoVNky+Ixe8It13PrKCb3p0HlvEjQ== X-Received: by 2002:a05:6638:d8a:b0:32a:c87e:ee92 with SMTP id l10-20020a0566380d8a00b0032ac87eee92mr2033633jaj.50.1651335281294; Sat, 30 Apr 2022 09:14:41 -0700 (PDT) Received: from aford-IdeaCentre-A730.lan ([2601:448:8400:9e8:3a27:d646:29a7:7498]) by smtp.gmail.com with ESMTPSA id u2-20020a02b1c2000000b0032b3a781771sm1532860jah.53.2022.04.30.09.14.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Apr 2022 09:14:40 -0700 (PDT) From: Adam Ford To: u-boot@lists.denx.de Cc: Adam Ford , "Ying-Chun Liu (PaulLiu)" , Jagan Teki , Matteo Lisi , Marek Vasut , Olaf Mandel , Peng Fan , Tim Harvey , "Ariel D'Alessandro" , Michael Trimarchi , Ilko Iliev , Fabio Estevam , Marco Franchi , Alifer Moraes , Simon Glass Subject: [RFC 2/3] serial: mxc: Enable getting and enabling clocks with CCF Composite Date: Sat, 30 Apr 2022 11:14:21 -0500 Message-Id: <20220430161422.558361-3-aford173@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220430161422.558361-1-aford173@gmail.com> References: <20220430161422.558361-1-aford173@gmail.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 Certain platforms have the UART clocks exposed through the CCF. When they are, it's possible to enable and query the clock(s) for a given UART. Add support getting, enabling, and querying the clocks. Signed-off-by: Adam Ford diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c index e4970a169b..c68040ba74 100644 --- a/drivers/serial/serial_mxc.c +++ b/drivers/serial/serial_mxc.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -266,8 +267,13 @@ __weak struct serial_device *default_serial_console(void) int mxc_serial_setbrg(struct udevice *dev, int baudrate) { struct mxc_serial_plat *plat = dev_get_plat(dev); - u32 clk = imx_get_uartclk(); + u32 clk; +#if CONFIG_IS_ENABLED(CLK_COMPOSITE_CCF) + clk = clk_get_rate(&plat->ipg_clk); +#else + clk = imx_get_uartclk; +#endif _mxc_serial_setbrg(plat->reg, clk, baudrate, plat->use_dte); return 0; @@ -277,6 +283,22 @@ static int mxc_serial_probe(struct udevice *dev) { struct mxc_serial_plat *plat = dev_get_plat(dev); +#if CONFIG_IS_ENABLED(CLK_COMPOSITE_CCF) + int ret = 0; + + ret = clk_enable(&plat->per_clk); + if (ret) { + printf("Failed to enable per_clk\n"); + return ret; + } + + ret = clk_enable(&plat->per_clk); + if (ret) { + printf("Failed to enable ipg_clk\n"); + return ret; + } + +#endif _mxc_serial_init(plat->reg, plat->use_dte); return 0; @@ -339,6 +361,21 @@ static int mxc_serial_of_to_plat(struct udevice *dev) plat->use_dte = fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), "fsl,dte-mode"); +#if CONFIG_IS_ENABLED(CLK_COMPOSITE_CCF) + int ret = 0; + + ret = clk_get_by_name(dev, "per", &plat->per_clk); + if (ret) { + printf("Failed to get per_clk\n"); + return ret; + } + + ret = clk_get_by_name(dev, "ipg", &plat->ipg_clk); + if (ret) { + printf("Failed to get per_clk\n"); + return ret; + } +#endif return 0; } diff --git a/include/dm/platform_data/serial_mxc.h b/include/dm/platform_data/serial_mxc.h index cc59eeb1dd..9a8c8498bf 100644 --- a/include/dm/platform_data/serial_mxc.h +++ b/include/dm/platform_data/serial_mxc.h @@ -10,6 +10,8 @@ struct mxc_serial_plat { struct mxc_uart *reg; /* address of registers in physical memory */ bool use_dte; + struct clk per_clk; + struct clk ipg_clk; }; #endif -- 2.34.1