From nobody Tue Jan 04 12:29:29 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 8C1FB192F8DE; Tue, 4 Jan 2022 12:29:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JSsPQ1r9dz4jtW; Tue, 4 Jan 2022 12:29:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1ADB118ACE; Tue, 4 Jan 2022 12:29:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 204CTTMY070809; Tue, 4 Jan 2022 12:29:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 204CTTvO070808; Tue, 4 Jan 2022 12:29:29 GMT (envelope-from git) Date: Tue, 4 Jan 2022 12:29:29 GMT Message-Id: <202201041229.204CTTvO070808@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Wojciech Macek Subject: git: 01b9c59fd262 - main - Add driver for marvell, armada-3700 oscillator List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: wma X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 01b9c59fd262590b47f9baaf2f553630f9bb4cbd Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1641299370; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RKPa6nEogF3439VmhIyJiOHoMh2dk0taUZZt3DBe9IE=; b=LBHMBtIMcyrC89XZ1xi8ps5qQM28msN7QbsG1023qGqsjRBWb5IqQdWtB34JCossyc3QVW hp1YRfW4y0kGFrKMdzIQoOVTjI0gtLDBXBy10AxhjCXLTTRo4q4zL4/tnzMl7WD5vFedhd SRJz6bYzWMEzEAzq4jYpbQPMEX22Rn8CISdkuGZJvjonbwwhwZ2acEGNwK+tW/FbqczQVb yrY/xr2doG4lTO1KazDcW6fgtCpQGonEL+A97oNebW8QG5/mTHxjive7KU90DN3wyim00B GlIW/+hyQ00UVi9td6PqF/6HWIExQbRaxbXRY26p8GkF4AgRrabTdJf9mptiKg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1641299370; a=rsa-sha256; cv=none; b=nLJCtkQyW9pVke9niInWRq28PNkDefQE2CyeCFaaKgmGqL+qaBRmdk0Vm6gJvcgTGwkSpk WNioIaRc8HMBMN2Sp11XLu4D+q+RbaTgirq5utq1aqXI0g8ziGULhxRgbfb8/6WsJrQNSj 0r+PDBd9wptRTdFtEmu/uJ3X7NBYUIodml3/WD0yIcZD7b2sNr2u08xmxxh+A7p8nOuTvf 1YwmCHxdhjrxV76hXuPE6cHaod/hsYS4iLYmJsFPFCicZu8G1BIcWDJwhsxq+GuCnoab2G Rw97FDc1pfu/CKzlYCAllRZ/Gx9dJjhlTSDgnXnKbY4tEHqlEz0uJd3EfRB8qA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by wma: URL: https://cgit.FreeBSD.org/src/commit/?id=01b9c59fd262590b47f9baaf2f553630f9bb4cbd commit 01b9c59fd262590b47f9baaf2f553630f9bb4cbd Author: Hubert Mazur AuthorDate: 2021-07-28 11:42:12 +0000 Commit: Wojciech Macek CommitDate: 2022-01-04 12:26:34 +0000 Add driver for marvell, armada-3700 oscillator Driver registers new clock device. Clock frequency is set depending on tenth bit's value obtained from syscon register. Full information about the clock is dumped if bootverbose is enabled. Driver was tested on EspressoBin. Reviewed by: manu Obtained from: Semihalf Differential revision: https://reviews.freebsd.org/D32292 --- sys/arm/mv/clk/a37x0_xtal.c | 151 ++++++++++++++++++++++++++++++++++++++++++++ sys/arm64/conf/std.marvell | 3 + sys/conf/files.arm64 | 1 + 3 files changed, 155 insertions(+) diff --git a/sys/arm/mv/clk/a37x0_xtal.c b/sys/arm/mv/clk/a37x0_xtal.c new file mode 100644 index 000000000000..3de81a6c640f --- /dev/null +++ b/sys/arm/mv/clk/a37x0_xtal.c @@ -0,0 +1,151 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2021 Semihalf. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include + +#include "syscon_if.h" + +#define BIT(x) (1 << (x)) + +#define NB_GPIO1_PIN_LT_L 0x8 +#define NB_GPIO1_MPP1_9 BIT(9) + +struct a37x0_xtal_softc { + device_t dev; + struct clkdom *clkdom; +}; + +static devclass_t a37x0_xtal_devclass; + +static int a37x0_xtal_attach(device_t dev); +static int a37x0_xtal_detach(device_t dev); +static int a37x0_xtal_probe(device_t dev); + +static device_method_t a37x0_xtal_methods [] = { + DEVMETHOD(device_probe, a37x0_xtal_probe), + DEVMETHOD(device_attach, a37x0_xtal_attach), + DEVMETHOD(device_detach, a37x0_xtal_detach), + DEVMETHOD_END +}; + +static driver_t a37x0_xtal_driver = { + "a37x0-xtal", + a37x0_xtal_methods, + sizeof(struct a37x0_xtal_softc) +}; + +EARLY_DRIVER_MODULE(a37x0_xtal, simplebus, a37x0_xtal_driver, + a37x0_xtal_devclass, 0, 0, BUS_PASS_TIMER + BUS_PASS_ORDER_EARLY); + +static int +a37x0_xtal_attach(device_t dev) +{ + struct a37x0_xtal_softc *sc; + struct clk_fixed_def def; + struct syscon *syscon; + phandle_t node; + uint32_t reg; + int error; + + node = ofw_bus_get_node(dev); + sc = device_get_softc(dev); + + def.clkdef.name = "armada-3700-xtal"; + def.clkdef.parent_names = NULL; + def.clkdef.parent_cnt = 0; + def.clkdef.id = 1; + def.mult = 0; + def.div = 0; + + if (SYSCON_GET_HANDLE(dev, &syscon) != 0 || syscon == NULL){ + device_printf(dev, "Cannot get syscon driver handle\n"); + return (ENXIO); + } + + reg = SYSCON_READ_4(syscon, NB_GPIO1_PIN_LT_L); + if (reg & NB_GPIO1_MPP1_9) + def.freq = 40000000; + else + def.freq = 25000000; + + sc->clkdom = clkdom_create(dev); + error = clknode_fixed_register(sc->clkdom, &def); + if (error){ + device_printf(dev, "Cannot register clock node\n"); + return (ENXIO); + } + + error = clkdom_finit(sc->clkdom); + if (error){ + device_printf(dev, "Cannot finalize clock domain initialization\n"); + return (ENXIO); + } + + if (bootverbose) + clkdom_dump(sc->clkdom); + + return (0); +} + +static int +a37x0_xtal_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_is_compatible(dev, "marvell,armada-3700-xtal-clock")) + return (ENXIO); + + device_set_desc(dev, "Marvell Armada 3700 Oscillator"); + return (BUS_PROBE_DEFAULT); +} + +static int +a37x0_xtal_detach(device_t dev) +{ + + return (EBUSY); +} diff --git a/sys/arm64/conf/std.marvell b/sys/arm64/conf/std.marvell index cb49d8aedc2b..fc25bac9354d 100644 --- a/sys/arm64/conf/std.marvell +++ b/sys/arm64/conf/std.marvell @@ -53,5 +53,8 @@ device sdhci_xenon # Marvell Xenon SD/MMC controller options FDT device acpi +# Clocks +device a37x0_xtal # Marvell xtal-clock + # DTBs makeoptions MODULES_EXTRA+="dtb/mv" diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64 index 56712d859d69..a955e790f4e9 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -456,6 +456,7 @@ dev/ffec/if_ffec.c optional ffec arm/mv/a37x0_gpio.c optional a37x0_gpio gpio fdt arm/mv/a37x0_iic.c optional a37x0_iic iicbus fdt arm/mv/a37x0_spi.c optional a37x0_spi spibus fdt +arm/mv/clk/a37x0_xtal.c optional a37x0_xtal clk fdt syscon arm/mv/armada38x/armada38x_rtc.c optional mv_rtc fdt arm/mv/gpio.c optional mv_gpio fdt arm/mv/mvebu_gpio.c optional mv_gpio fdt