From owner-svn-src-head@freebsd.org Sat Aug 1 17:37:27 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 862F43A1925; Sat, 1 Aug 2020 17:37:27 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BJrvB5ftpz4Wnq; Sat, 1 Aug 2020 17:37:26 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wm1-x344.google.com with SMTP id k8so11934458wma.2; Sat, 01 Aug 2020 10:37:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=6UIYoSB6SRd0eBuEdOQEDINY8Facwlr/l6DQgOoS7Wc=; b=GvjGVnwlAUTX3ZH3XC+zzMQto66GndpF2yrFkoQZhzesJH/oyZanYHzRvh33xTjfSH 0XQa+HeVSRVoCjzmt08RombqTOiGKP7DKM2gBznBukgjDtKjGnUFAlym1H/dSK9DF/G/ CVdglu66hTfDj0rTb0BT4wFq5TEry7LIJsrqEDLkydNKDSPCbFqtJGX4j5Bazc9IzWHp vC67C9IpZXMS9ziHDC3SR2fzJu0RXDATwoURYJS1WOpPJLKSODId1kTxgCKhkVnozh+Z ALsLPBpf30WyIY4IRmQnTgXibcn/nxOkDCn4j12vo+/LNI1AinxclhtL0dT4l70Cqfst 2EkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=6UIYoSB6SRd0eBuEdOQEDINY8Facwlr/l6DQgOoS7Wc=; b=AzAWXZmarHQ7QrXliWwP3x8ui8J/EvKxk5JbfIdioPtWxHXd5l03D41vL++4s1SfXy T8YwQMoNyE076QrpRtgqepKxB5Iql/B+B5XMHf7U0nplEV92KZTPHDzBZbjv9dbDBlBb XRMd65k4HUykSCwUDOq7tYANxvYKBcKGCA8Btc07gPgwrMQJJ3F5QBsZUdyEMmV8isD+ JVygn8l6wIy2ATQ1JWw2hKB1EAV6UoTZBioDf0KXEhQA5mP7K/aAKyvDr2dNEWuom0zx TJFTBF8V2GVOgu1tjBob94SY95kJZpsByb9R8eLi49A2i2W0EdyibGt1cwlFYH1Qu2/D AuzQ== X-Gm-Message-State: AOAM530Rxt5bj8fnAWgt/fQID+FnukvDeF3a9k7rwNqQQ9vcdA6Nq9kg JMq/1MS5xwX8mX+WB4DOSCB+aLunKpHWwZdXop/TlA== X-Google-Smtp-Source: ABdhPJxV1UA9P8gpIAnmlWEYH+eQTzHPDMrq9WAgBpAYoRL81c1SEqVx+T67Y+RxD/uSe3uSflMWOmMwCbYJYrgUM3s= X-Received: by 2002:a1c:e90d:: with SMTP id q13mr9078536wmc.187.1596303444025; Sat, 01 Aug 2020 10:37:24 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a5d:614c:0:0:0:0:0 with HTTP; Sat, 1 Aug 2020 10:37:23 -0700 (PDT) In-Reply-To: <85d52020-3aff-7210-ace7-12ae19ad5d9a@freebsd.org> References: <202007301445.06UEj5uj062013@repo.freebsd.org> <85d52020-3aff-7210-ace7-12ae19ad5d9a@freebsd.org> From: Mateusz Guzik Date: Sat, 1 Aug 2020 19:37:23 +0200 Message-ID: Subject: Re: svn commit: r363700 - in head/sys: arm/ti arm/ti/am335x arm/ti/clk arm/ti/cpsw arm/ti/omap4 arm/ti/usb dev/uart modules To: mmel@freebsd.org Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4BJrvB5ftpz4Wnq X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Aug 2020 17:37:27 -0000 thanks for prompt response. I confirm the issue is fixed. On 8/1/20, Michal Meloun wrote: > Oups, next module dependency on autogenerated header... > Fixed in r363758. > > Thanks for report > Michal > > > On 01.08.2020 6:39, Mateusz Guzik wrote: >> This breaks tinderbox for several arm kernels. >> >> On 7/30/20, Michal Meloun wrote: >>> Author: mmel >>> Date: Thu Jul 30 14:45:05 2020 >>> New Revision: 363700 >>> URL: https://svnweb.freebsd.org/changeset/base/363700 >>> >>> Log: >>> Move Ti AM335x to dev/extres/clk framework. >>> >>> Re-implement clocks for these SoC by using now standard extres/clk >>> framework. >>> This is necessary for future expansion of these. The new >>> implementation >>> is (due to the size of the patch) only the initial (minimum) version. >>> It will be updated/expanded with a subsequent set of particular >>> patches. >>> >>> This patch is also not tested on OMAP4 based boards (BeagleBone), >>> so all possible issues should be (and will be) fixed by ASAP once >>> identified. >>> >>> Submited by: Oskar Holmlund (oskar.holmlund@ohdata.se) >>> Differential Revision: https://reviews.freebsd.org/D25118 >>> >>> Added: >>> head/sys/arm/ti/am335x/am3359_cppi41.c (contents, props changed) >>> head/sys/arm/ti/am335x/am335x_usb_phy.c (contents, props changed) >>> head/sys/arm/ti/clk/ >>> head/sys/arm/ti/clk/clock_common.c (contents, props changed) >>> head/sys/arm/ti/clk/clock_common.h (contents, props changed) >>> head/sys/arm/ti/clk/ti_clk_clkctrl.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_clk_clkctrl.h (contents, props changed) >>> head/sys/arm/ti/clk/ti_clk_dpll.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_clk_dpll.h (contents, props changed) >>> head/sys/arm/ti/clk/ti_clkctrl.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_divider_clock.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_dpll_clock.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_gate_clock.c (contents, props changed) >>> head/sys/arm/ti/clk/ti_mux_clock.c (contents, props changed) >>> head/sys/arm/ti/ti_omap4_cm.c (contents, props changed) >>> head/sys/arm/ti/ti_omap4_cm.h (contents, props changed) >>> head/sys/arm/ti/ti_prm.c (contents, props changed) >>> head/sys/arm/ti/ti_prm.h (contents, props changed) >>> head/sys/arm/ti/ti_scm_syscon.c (contents, props changed) >>> head/sys/arm/ti/ti_sysc.h (contents, props changed) >>> Deleted: >>> head/sys/arm/ti/am335x/am335x_prcm.c >>> head/sys/arm/ti/am335x/am335x_usbss.c >>> head/sys/arm/ti/ti_hwmods.c >>> head/sys/arm/ti/ti_hwmods.h >>> Modified: >>> head/sys/arm/ti/am335x/am335x_dmtimer.c >>> head/sys/arm/ti/am335x/am335x_dmtpps.c >>> head/sys/arm/ti/am335x/am335x_dmtreg.h >>> head/sys/arm/ti/am335x/am335x_gpio.c >>> head/sys/arm/ti/am335x/am335x_lcd.c >>> head/sys/arm/ti/am335x/am335x_musb.c >>> head/sys/arm/ti/am335x/am335x_pwmss.c >>> head/sys/arm/ti/am335x/am335x_rtc.c >>> head/sys/arm/ti/am335x/am335x_scm.c >>> head/sys/arm/ti/am335x/files.am335x >>> head/sys/arm/ti/cpsw/if_cpsw.c >>> head/sys/arm/ti/files.ti >>> head/sys/arm/ti/omap4/files.omap4 >>> head/sys/arm/ti/ti_adc.c >>> head/sys/arm/ti/ti_edma3.c >>> head/sys/arm/ti/ti_gpio.c >>> head/sys/arm/ti/ti_i2c.c >>> head/sys/arm/ti/ti_mbox.c >>> head/sys/arm/ti/ti_pinmux.c >>> head/sys/arm/ti/ti_prcm.c >>> head/sys/arm/ti/ti_prcm.h >>> head/sys/arm/ti/ti_pruss.c >>> head/sys/arm/ti/ti_scm.c >>> head/sys/arm/ti/ti_sdhci.c >>> head/sys/arm/ti/ti_sdma.c >>> head/sys/arm/ti/ti_spi.c >>> head/sys/arm/ti/ti_sysc.c >>> head/sys/arm/ti/ti_wdt.c >>> head/sys/arm/ti/usb/omap_ehci.c >>> head/sys/arm/ti/usb/omap_host.c >>> head/sys/arm/ti/usb/omap_tll.c >>> head/sys/dev/uart/uart_dev_ti8250.c >>> head/sys/modules/Makefile >>> >>> Added: head/sys/arm/ti/am335x/am3359_cppi41.c >>> ============================================================================== >>> --- /dev/null 00:00:00 1970 (empty, because file is newly added) >>> +++ head/sys/arm/ti/am335x/am3359_cppi41.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -0,0 +1,192 @@ >>> +/*- >>> + * Copyright (c) 2019 Emmanuel Vadot >>> + * >>> + * Copyright (c) 2020 Oskar Holmlund >>> + * >>> + * 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 ``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 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. >>> + * >>> + * $FreeBSD$ >>> + */ >>> +/* Based on sys/arm/ti/ti_sysc.c */ >>> + >>> +#include >>> +__FBSDID("$FreeBSD$"); >>> + >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> + >>> +#include >>> +#include >>> + >>> +#include >>> + >>> +#include >>> +#include >>> +#include >>> + >>> +#include >>> + >>> +#if 0 >>> +#define DPRINTF(dev, msg...) device_printf(dev, msg) >>> +#else >>> +#define DPRINTF(dev, msg...) >>> +#endif >>> + >>> +struct ti_am3359_cppi41_softc { >>> + device_t dev; >>> + struct syscon * syscon; >>> + struct resource * res[4]; >>> + bus_space_tag_t bst; >>> + bus_space_handle_t bsh; >>> + struct mtx mtx; >>> +}; >>> + >>> +static struct resource_spec ti_am3359_cppi41_res_spec[] = { >>> + { SYS_RES_MEMORY, 0, RF_ACTIVE | RF_SHAREABLE }, >>> + { SYS_RES_MEMORY, 1, RF_ACTIVE | RF_SHAREABLE }, >>> + { SYS_RES_MEMORY, 2, RF_ACTIVE | RF_SHAREABLE }, >>> + { SYS_RES_MEMORY, 3, RF_ACTIVE | RF_SHAREABLE }, >>> + { -1, 0 } >>> +}; >>> + >>> +/* Device */ >>> +static struct ofw_compat_data compat_data[] = { >>> + { "ti,am3359-cppi41", 1 }, >>> + { NULL, 0 } >>> +}; >>> + >>> +static int >>> +ti_am3359_cppi41_write_4(device_t dev, bus_addr_t addr, uint32_t val) >>> +{ >>> + struct ti_am3359_cppi41_softc *sc; >>> + >>> + sc = device_get_softc(dev); >>> + DPRINTF(sc->dev, "offset=%lx write %x\n", addr, val); >>> + mtx_lock(&sc->mtx); >>> + bus_space_write_4(sc->bst, sc->bsh, addr, val); >>> + mtx_unlock(&sc->mtx); >>> + return (0); >>> +} >>> + >>> +static uint32_t >>> +ti_am3359_cppi41_read_4(device_t dev, bus_addr_t addr) >>> +{ >>> + struct ti_am3359_cppi41_softc *sc; >>> + uint32_t val; >>> + >>> + sc = device_get_softc(dev); >>> + >>> + mtx_lock(&sc->mtx); >>> + val = bus_space_read_4(sc->bst, sc->bsh, addr); >>> + mtx_unlock(&sc->mtx); >>> + DPRINTF(sc->dev, "offset=%lx Read %x\n", addr, val); >>> + return (val); >>> +} >>> + >>> +/* device interface */ >>> +static int >>> +ti_am3359_cppi41_probe(device_t dev) >>> +{ >>> + if (!ofw_bus_status_okay(dev)) >>> + return (ENXIO); >>> + >>> + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) >>> + return (ENXIO); >>> + >>> + device_set_desc(dev, "TI AM3359 CPPI 41"); >>> + return(BUS_PROBE_DEFAULT); >>> +} >>> + >>> +static int >>> +ti_am3359_cppi41_attach(device_t dev) >>> +{ >>> + struct ti_am3359_cppi41_softc *sc; >>> + phandle_t node; >>> + uint32_t reg, reset_bit, timeout=10; >>> + uint64_t sysc_address; >>> + device_t parent; >>> + >>> + sc = device_get_softc(dev); >>> + sc->dev = dev; >>> + >>> + if (bus_alloc_resources(dev, ti_am3359_cppi41_res_spec, sc->res)) { >>> + device_printf(sc->dev, "Cant allocate resources\n"); >>> + return (ENXIO); >>> + } >>> + >>> + sc->dev = dev; >>> + sc->bst = rman_get_bustag(sc->res[0]); >>> + sc->bsh = rman_get_bushandle(sc->res[0]); >>> + >>> + mtx_init(&sc->mtx, device_get_nameunit(sc->dev), NULL, MTX_DEF); >>> + node = ofw_bus_get_node(sc->dev); >>> + >>> + /* variant of am335x_usbss.c */ >>> + DPRINTF(dev, "-- RESET USB --\n"); >>> + parent = device_get_parent(dev); >>> + reset_bit = ti_sysc_get_soft_reset_bit(parent); >>> + if (reset_bit == 0) { >>> + DPRINTF(dev, "Dont have reset bit\n"); >>> + return (0); >>> + } >>> + sysc_address = ti_sysc_get_sysc_address_offset_host(parent); >>> + DPRINTF(dev, "sysc_address %x\n", sysc_address); >>> + ti_am3359_cppi41_write_4(dev, sysc_address, reset_bit); >>> + DELAY(100); >>> + reg = ti_am3359_cppi41_read_4(dev, sysc_address); >>> + if ((reg & reset_bit) && timeout--) { >>> + DPRINTF(dev, "Reset still ongoing - wait a little bit longer\n"); >>> + DELAY(100); >>> + reg = ti_am3359_cppi41_read_4(dev, sysc_address); >>> + } >>> + if (timeout == 0) >>> + device_printf(dev, "USB Reset timeout\n"); >>> + >>> + return (0); >>> +} >>> + >>> + >>> +static device_method_t ti_am3359_cppi41_methods[] = { >>> + DEVMETHOD(device_probe, ti_am3359_cppi41_probe), >>> + DEVMETHOD(device_attach, ti_am3359_cppi41_attach), >>> + >>> + DEVMETHOD_END >>> +}; >>> + >>> + >>> +DEFINE_CLASS_1(ti_am3359_cppi41, ti_am3359_cppi41_driver, >>> + ti_am3359_cppi41_methods,sizeof(struct ti_am3359_cppi41_softc), >>> + simplebus_driver); >>> + >>> +static devclass_t ti_am3359_cppi41_devclass; >>> + >>> +EARLY_DRIVER_MODULE(ti_am3359_cppi41, simplebus, >>> ti_am3359_cppi41_driver, >>> + ti_am3359_cppi41_devclass, 0, 0, BUS_PASS_BUS + >>> BUS_PASS_ORDER_MIDDLE); >>> +MODULE_VERSION(ti_am3359_cppi41, 1); >>> +MODULE_DEPEND(ti_am3359_cppi41, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_dmtimer.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_dmtimer.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_dmtimer.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -42,12 +42,13 @@ __FBSDID("$FreeBSD$"); >>> >>> #include /* For arm_set_delay */ >>> >>> +#include >>> + >>> #include >>> #include >>> #include >>> >>> -#include >>> -#include >>> +#include >>> >>> #include "am335x_dmtreg.h" >>> >>> @@ -58,7 +59,8 @@ struct am335x_dmtimer_softc { >>> int tmr_irq_rid; >>> struct resource * tmr_irq_res; >>> void *tmr_irq_handler; >>> - uint32_t sysclk_freq; >>> + clk_t clk_fck; >>> + uint64_t sysclk_freq; >>> uint32_t tclr; /* Cached TCLR register. */ >>> union { >>> struct timecounter tc; >>> @@ -251,6 +253,7 @@ am335x_dmtimer_probe(device_t dev) >>> { >>> char strbuf[32]; >>> int tmr_num; >>> + uint64_t rev_address; >>> >>> if (!ofw_bus_status_okay(dev)) >>> return (ENXIO); >>> @@ -259,13 +262,22 @@ am335x_dmtimer_probe(device_t dev) >>> return (ENXIO); >>> >>> /* >>> - * Get the hardware unit number (the N from ti,hwmods="timerN"). >>> + * Get the hardware unit number from address of rev register. >>> * If this isn't the hardware unit we're going to use for either the >>> * eventtimer or the timecounter, no point in instantiating the >>> device. >>> */ >>> - tmr_num = ti_hwmods_get_unit(dev, "timer"); >>> - if (tmr_num != ET_TMR_NUM && tmr_num != TC_TMR_NUM) >>> - return (ENXIO); >>> + rev_address = ti_sysc_get_rev_address(device_get_parent(dev)); >>> + switch (rev_address) { >>> + case DMTIMER2_REV: >>> + tmr_num = 2; >>> + break; >>> + case DMTIMER3_REV: >>> + tmr_num = 3; >>> + break; >>> + default: >>> + /* Not DMTIMER2 or DMTIMER3 */ >>> + return (ENXIO); >>> + } >>> >>> snprintf(strbuf, sizeof(strbuf), "AM335x DMTimer%d", tmr_num); >>> device_set_desc_copy(dev, strbuf); >>> @@ -277,24 +289,47 @@ static int >>> am335x_dmtimer_attach(device_t dev) >>> { >>> struct am335x_dmtimer_softc *sc; >>> - clk_ident_t timer_id; >>> int err; >>> + uint64_t rev_address; >>> + clk_t sys_clkin; >>> >>> sc = device_get_softc(dev); >>> sc->dev = dev; >>> >>> - /* Get the base clock frequency. */ >>> - if ((err = ti_prcm_clk_get_source_freq(SYS_CLK, &sc->sysclk_freq)) != >>> 0) >>> - return (err); >>> + /* expect one clock */ >>> + err = clk_get_by_ofw_index(dev, 0, 0, &sc->clk_fck); >>> + if (err != 0) { >>> + device_printf(dev, "Cant find clock index 0. err: %d\n", err); >>> + return (ENXIO); >>> + } >>> >>> + err = clk_get_by_name(dev, "sys_clkin_ck@40", &sys_clkin); >>> + if (err != 0) { >>> + device_printf(dev, "Cant find sys_clkin_ck@40 err: %d\n", err); >>> + return (ENXIO); >>> + } >>> + >>> + /* Select M_OSC as DPLL parent */ >>> + err = clk_set_parent_by_clk(sc->clk_fck, sys_clkin); >>> + if (err != 0) { >>> + device_printf(dev, "Cant set mux to CLK_M_OSC\n"); >>> + return (ENXIO); >>> + } >>> + >>> /* Enable clocks and power on the device. */ >>> - if ((timer_id = ti_hwmods_get_clock(dev)) == INVALID_CLK_IDENT) >>> + err = ti_sysc_clock_enable(device_get_parent(dev)); >>> + if (err != 0) { >>> + device_printf(dev, "Cant enable sysc clkctrl, err %d\n", err); >>> return (ENXIO); >>> - if ((err = ti_prcm_clk_set_source(timer_id, SYSCLK_CLK)) != 0) >>> - return (err); >>> - if ((err = ti_prcm_clk_enable(timer_id)) != 0) >>> - return (err); >>> + } >>> >>> + /* Get the base clock frequency. */ >>> + err = clk_get_freq(sc->clk_fck, &sc->sysclk_freq); >>> + if (err != 0) { >>> + device_printf(dev, "Cant get sysclk frequency, err %d\n", err); >>> + return (ENXIO); >>> + } >>> + >>> /* Request the memory resources. */ >>> sc->tmr_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, >>> &sc->tmr_mem_rid, RF_ACTIVE); >>> @@ -302,7 +337,20 @@ am335x_dmtimer_attach(device_t dev) >>> return (ENXIO); >>> } >>> >>> - sc->tmr_num = ti_hwmods_get_unit(dev, "timer"); >>> + rev_address = ti_sysc_get_rev_address(device_get_parent(dev)); >>> + switch (rev_address) { >>> + case DMTIMER2_REV: >>> + sc->tmr_num = 2; >>> + break; >>> + case DMTIMER3_REV: >>> + sc->tmr_num = 3; >>> + break; >>> + default: >>> + device_printf(dev, "Not timer 2 or 3! %#jx\n", >>> + rev_address); >>> + return (ENXIO); >>> + } >>> + >>> snprintf(sc->tmr_name, sizeof(sc->tmr_name), "DMTimer%d", >>> sc->tmr_num); >>> >>> /* >>> @@ -334,7 +382,7 @@ static driver_t am335x_dmtimer_driver = { >>> static devclass_t am335x_dmtimer_devclass; >>> >>> DRIVER_MODULE(am335x_dmtimer, simplebus, am335x_dmtimer_driver, >>> am335x_dmtimer_devclass, 0, 0); >>> -MODULE_DEPEND(am335x_dmtimer, am335x_prcm, 1, 1, 1); >>> +MODULE_DEPEND(am335x_dmtimer, ti_sysc, 1, 1, 1); >>> >>> static void >>> am335x_dmtimer_delay(int usec, void *arg) >>> >>> Modified: head/sys/arm/ti/am335x/am335x_dmtpps.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_dmtpps.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_dmtpps.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -43,6 +43,8 @@ >>> #include >>> __FBSDID("$FreeBSD$"); >>> >>> +#include "opt_platform.h" >>> + >>> #include >>> #include >>> #include >>> @@ -60,9 +62,9 @@ __FBSDID("$FreeBSD$"); >>> #include >>> #include >>> #include >>> +#include >>> >>> -#include >>> -#include >>> +#include >>> #include >>> #include >>> >>> @@ -82,6 +84,8 @@ struct dmtpps_softc { >>> struct cdev * pps_cdev; >>> struct pps_state pps_state; >>> struct mtx pps_mtx; >>> + clk_t clk_fck; >>> + uint64_t sysclk_freq; >>> }; >>> >>> static int dmtpps_tmr_num; /* Set by probe() */ >>> @@ -383,6 +387,7 @@ dmtpps_probe(device_t dev) >>> { >>> char strbuf[64]; >>> int tmr_num; >>> + uint64_t rev_address; >>> >>> if (!ofw_bus_status_okay(dev)) >>> return (ENXIO); >>> @@ -402,7 +407,33 @@ dmtpps_probe(device_t dev) >>> * Figure out which hardware timer is being probed and see if it >>> matches >>> * the configured timer number determined earlier. >>> */ >>> - tmr_num = ti_hwmods_get_unit(dev, "timer"); >>> + rev_address = ti_sysc_get_rev_address(device_get_parent(dev)); >>> + switch (rev_address) { >>> + case DMTIMER1_1MS_REV: >>> + tmr_num = 1; >>> + break; >>> + case DMTIMER2_REV: >>> + tmr_num = 2; >>> + break; >>> + case DMTIMER3_REV: >>> + tmr_num = 3; >>> + break; >>> + case DMTIMER4_REV: >>> + tmr_num = 4; >>> + break; >>> + case DMTIMER5_REV: >>> + tmr_num = 5; >>> + break; >>> + case DMTIMER6_REV: >>> + tmr_num = 6; >>> + break; >>> + case DMTIMER7_REV: >>> + tmr_num = 7; >>> + break; >>> + default: >>> + return (ENXIO); >>> + } >>> + >>> if (dmtpps_tmr_num != tmr_num) >>> return (ENXIO); >>> >>> @@ -418,23 +449,73 @@ dmtpps_attach(device_t dev) >>> { >>> struct dmtpps_softc *sc; >>> struct make_dev_args mda; >>> - clk_ident_t timer_id; >>> - int err, sysclk_freq; >>> + int err; >>> + clk_t sys_clkin; >>> + uint64_t rev_address; >>> >>> sc = device_get_softc(dev); >>> sc->dev = dev; >>> >>> - /* Get the base clock frequency. */ >>> - err = ti_prcm_clk_get_source_freq(SYS_CLK, &sysclk_freq); >>> + /* Figure out which hardware timer this is and set the name string. */ >>> + rev_address = ti_sysc_get_rev_address(device_get_parent(dev)); >>> + switch (rev_address) { >>> + case DMTIMER1_1MS_REV: >>> + sc->tmr_num = 1; >>> + break; >>> + case DMTIMER2_REV: >>> + sc->tmr_num = 2; >>> + break; >>> + case DMTIMER3_REV: >>> + sc->tmr_num = 3; >>> + break; >>> + case DMTIMER4_REV: >>> + sc->tmr_num = 4; >>> + break; >>> + case DMTIMER5_REV: >>> + sc->tmr_num = 5; >>> + break; >>> + case DMTIMER6_REV: >>> + sc->tmr_num = 6; >>> + break; >>> + case DMTIMER7_REV: >>> + sc->tmr_num = 7; >>> + break; >>> + } >>> + snprintf(sc->tmr_name, sizeof(sc->tmr_name), "DMTimer%d", >>> sc->tmr_num); >>> >>> + /* expect one clock */ >>> + err = clk_get_by_ofw_index(dev, 0, 0, &sc->clk_fck); >>> + if (err != 0) { >>> + device_printf(dev, "Cant find clock index 0. err: %d\n", err); >>> + return (ENXIO); >>> + } >>> + >>> + err = clk_get_by_name(dev, "sys_clkin_ck@40", &sys_clkin); >>> + if (err != 0) { >>> + device_printf(dev, "Cant find sys_clkin_ck@40 err: %d\n", err); >>> + return (ENXIO); >>> + } >>> + >>> + /* Select M_OSC as DPLL parent */ >>> + err = clk_set_parent_by_clk(sc->clk_fck, sys_clkin); >>> + if (err != 0) { >>> + device_printf(dev, "Cant set mux to CLK_M_OSC\n"); >>> + return (ENXIO); >>> + } >>> + >>> /* Enable clocks and power on the device. */ >>> - if ((timer_id = ti_hwmods_get_clock(dev)) == INVALID_CLK_IDENT) >>> + err = ti_sysc_clock_enable(device_get_parent(dev)); >>> + if (err != 0) { >>> + device_printf(dev, "Cant enable sysc clkctrl, err %d\n", err); >>> return (ENXIO); >>> - if ((err = ti_prcm_clk_set_source(timer_id, SYSCLK_CLK)) != 0) >>> - return (err); >>> - if ((err = ti_prcm_clk_enable(timer_id)) != 0) >>> - return (err); >>> + } >>> >>> + /* Get the base clock frequency. */ >>> + err = clk_get_freq(sc->clk_fck, &sc->sysclk_freq); >>> + if (err != 0) { >>> + device_printf(dev, "Cant get sysclk frequency, err %d\n", err); >>> + return (ENXIO); >>> + } >>> /* Request the memory resources. */ >>> sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, >>> &sc->mem_rid, RF_ACTIVE); >>> @@ -442,10 +523,6 @@ dmtpps_attach(device_t dev) >>> return (ENXIO); >>> } >>> >>> - /* Figure out which hardware timer this is and set the name string. */ >>> - sc->tmr_num = ti_hwmods_get_unit(dev, "timer"); >>> - snprintf(sc->tmr_name, sizeof(sc->tmr_name), "DMTimer%d", >>> sc->tmr_num); >>> - >>> /* >>> * Configure the timer pulse/capture pin to input/capture mode. This >>> is >>> * required in addition to configuring the pin as input with the >>> pinmux >>> @@ -468,7 +545,7 @@ dmtpps_attach(device_t dev) >>> sc->tc.tc_name = sc->tmr_name; >>> sc->tc.tc_get_timecount = dmtpps_get_timecount; >>> sc->tc.tc_counter_mask = ~0u; >>> - sc->tc.tc_frequency = sysclk_freq; >>> + sc->tc.tc_frequency = sc->sysclk_freq; >>> sc->tc.tc_quality = 1000; >>> sc->tc.tc_priv = sc; >>> >>> @@ -541,5 +618,4 @@ static driver_t dmtpps_driver = { >>> static devclass_t dmtpps_devclass; >>> >>> DRIVER_MODULE(am335x_dmtpps, simplebus, dmtpps_driver, dmtpps_devclass, >>> 0, >>> 0); >>> -MODULE_DEPEND(am335x_dmtpps, am335x_prcm, 1, 1, 1); >>> - >>> +MODULE_DEPEND(am335x_dmtpps, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_dmtreg.h >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_dmtreg.h Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_dmtreg.h Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -73,4 +73,16 @@ >>> #define DMT_TSICR_RESET (1 << 1) /* TSICR perform soft reset */ >>> #define DMT_TCAR2 0x48 /* Capture Reg */ >>> >>> +/* Location of revision register from TRM Memory map chapter 2 */ >>> +/* L4_WKUP */ >>> +#define DMTIMER0_REV 0x05000 >>> +#define DMTIMER1_1MS_REV 0x31000 >>> +/* L4_PER */ >>> +#define DMTIMER2_REV 0x40000 >>> +#define DMTIMER3_REV 0x42000 >>> +#define DMTIMER4_REV 0x44000 >>> +#define DMTIMER5_REV 0x46000 >>> +#define DMTIMER6_REV 0x48000 >>> +#define DMTIMER7_REV 0x4A000 >>> + >>> #endif /* AM335X_DMTREG_H */ >>> >>> Modified: head/sys/arm/ti/am335x/am335x_gpio.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_gpio.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_gpio.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -155,3 +155,4 @@ DEFINE_CLASS_1(gpio, am335x_gpio_driver, >>> am335x_gpio_m >>> sizeof(struct ti_gpio_softc), ti_gpio_driver); >>> DRIVER_MODULE(am335x_gpio, simplebus, am335x_gpio_driver, >>> am335x_gpio_devclass, >>> 0, 0); >>> +MODULE_DEPEND(am335x_gpio, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_lcd.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_lcd.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_lcd.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -50,6 +50,8 @@ __FBSDID("$FreeBSD$"); >>> >>> #include >>> >>> +#include >>> + >>> #include >>> #include >>> #include >>> @@ -65,7 +67,7 @@ __FBSDID("$FreeBSD$"); >>> #include >>> #endif >>> >>> -#include >>> +#include >>> #include >>> >>> #include "am335x_lcd.h" >>> @@ -219,6 +221,9 @@ struct am335x_lcd_softc { >>> /* HDMI framer */ >>> phandle_t sc_hdmi_framer; >>> eventhandler_tag sc_hdmi_evh; >>> + >>> + /* Clock */ >>> + clk_t sc_clk_dpll_disp_ck; >>> }; >>> >>> static void >>> @@ -615,24 +620,28 @@ am335x_lcd_configure(struct am335x_lcd_softc *sc) >>> uint32_t hbp, hfp, hsw; >>> uint32_t vbp, vfp, vsw; >>> uint32_t width, height; >>> - unsigned int ref_freq; >>> + uint64_t ref_freq; >>> int err; >>> >>> /* >>> * try to adjust clock to get double of requested frequency >>> * HDMI/DVI displays are very sensitive to error in frequncy value >>> */ >>> - if (ti_prcm_clk_set_source_freq(LCDC_CLK, >>> sc->sc_panel.panel_pxl_clk*2)) >>> { >>> + >>> + err = clk_set_freq(sc->sc_clk_dpll_disp_ck, >>> sc->sc_panel.panel_pxl_clk*2, >>> + CLK_SET_ROUND_ANY); >>> + if (err != 0) { >>> device_printf(sc->sc_dev, "can't set source frequency\n"); >>> return (ENXIO); >>> } >>> >>> - if (ti_prcm_clk_get_source_freq(LCDC_CLK, &ref_freq)) { >>> + err = clk_get_freq(sc->sc_clk_dpll_disp_ck, &ref_freq); >>> + if (err != 0) { >>> device_printf(sc->sc_dev, "can't get reference frequency\n"); >>> return (ENXIO); >>> } >>> >>> - /* Panle initialization */ >>> + /* Panel initialization */ >>> dma_size = >>> round_page(sc->sc_panel.panel_width*sc->sc_panel.panel_height*sc->sc_panel.bpp/8); >>> >>> /* >>> @@ -967,6 +976,13 @@ am335x_lcd_attach(device_t dev) >>> return (ENXIO); >>> } >>> >>> + /* Fixme: Cant find any reference in DTS for dpll_disp_ck@498 for now. >>> */ >>> + err = clk_get_by_name(dev, "dpll_disp_ck@498", >>> &sc->sc_clk_dpll_disp_ck); >>> + if (err != 0) { >>> + device_printf(dev, "Cant get dpll_disp_ck@49\n"); >>> + return (ENXIO); >>> + } >>> + >>> sc->sc_panel.ac_bias = 255; >>> sc->sc_panel.ac_bias_intrpt = 0; >>> sc->sc_panel.dma_burst_sz = 16; >>> @@ -989,7 +1005,11 @@ am335x_lcd_attach(device_t dev) >>> } >>> } >>> >>> - ti_prcm_clk_enable(LCDC_CLK); >>> + err = ti_sysc_clock_enable(device_get_parent(dev)); >>> + if (err != 0) { >>> + device_printf(dev, "Failed to enable sysc clkctrl, err %d\n", err); >>> + return (ENXIO); >>> + } >>> >>> rid = 0; >>> sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, >>> @@ -1081,3 +1101,4 @@ static devclass_t am335x_lcd_devclass; >>> DRIVER_MODULE(am335x_lcd, simplebus, am335x_lcd_driver, >>> am335x_lcd_devclass, 0, 0); >>> MODULE_VERSION(am335x_lcd, 1); >>> MODULE_DEPEND(am335x_lcd, simplebus, 1, 1, 1); >>> +MODULE_DEPEND(am335x_lcd, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_musb.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_musb.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_musb.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -66,9 +66,11 @@ __FBSDID("$FreeBSD$"); >>> >>> #include >>> >>> -#include >>> -#include >>> #include >>> +#include >>> +#include >>> +#include >>> +#include "syscon_if.h" >>> >>> #define USBCTRL_REV 0x00 >>> #define USBCTRL_CTRL 0x14 >>> @@ -130,6 +132,7 @@ struct musbotg_super_softc { >>> struct musbotg_softc sc_otg; >>> struct resource *sc_mem_res[2]; >>> int sc_irq_rid; >>> + struct syscon *syscon; >>> }; >>> >>> static void >>> @@ -155,30 +158,33 @@ static void >>> musbotg_clocks_on(void *arg) >>> { >>> struct musbotg_softc *sc; >>> - uint32_t c, reg; >>> + struct musbotg_super_softc *ssc; >>> + uint32_t reg; >>> >>> sc = arg; >>> - reg = USB_CTRL[sc->sc_id]; >>> + ssc = sc->sc_platform_data; >>> >>> - ti_scm_reg_read_4(reg, &c); >>> - c &= ~3; /* Enable power */ >>> - c |= 1 << 19; /* VBUS detect enable */ >>> - c |= 1 << 20; /* Session end enable */ >>> - ti_scm_reg_write_4(reg, c); >>> + reg = SYSCON_READ_4(ssc->syscon, USB_CTRL[sc->sc_id]); >>> + reg &= ~3; /* Enable power */ >>> + reg |= 1 << 19; /* VBUS detect enable */ >>> + reg |= 1 << 20; /* Session end enable */ >>> + >>> + SYSCON_WRITE_4(ssc->syscon, USB_CTRL[sc->sc_id], reg); >>> } >>> >>> static void >>> musbotg_clocks_off(void *arg) >>> { >>> struct musbotg_softc *sc; >>> - uint32_t c, reg; >>> + struct musbotg_super_softc *ssc; >>> + uint32_t reg; >>> >>> sc = arg; >>> - reg = USB_CTRL[sc->sc_id]; >>> + ssc = sc->sc_platform_data; >>> >>> /* Disable power to PHY */ >>> - ti_scm_reg_read_4(reg, &c); >>> - ti_scm_reg_write_4(reg, c | 3); >>> + reg = SYSCON_READ_4(ssc->syscon, USB_CTRL[sc->sc_id]); >>> + SYSCON_WRITE_4(ssc->syscon, USB_CTRL[sc->sc_id], reg | 3); >>> } >>> >>> static void >>> @@ -241,9 +247,42 @@ musbotg_attach(device_t dev) >>> char mode[16]; >>> int err; >>> uint32_t reg; >>> + phandle_t opp_table; >>> + clk_t clk_usbotg_fck; >>> >>> sc->sc_otg.sc_id = device_get_unit(dev); >>> >>> + /* FIXME: The devicetree needs to be updated to get a handle to the >>> gate >>> + * usbotg_fck@47c. see TRM 8.1.12.2 CM_WKUP CM_CLKDCOLDO_DPLL_PER. >>> + */ >>> + err = clk_get_by_name(dev, "usbotg_fck@47c", &clk_usbotg_fck); >>> + if (err) { >>> + device_printf(dev, "Can not find usbotg_fck@47c\n"); >>> + return (ENXIO); >>> + } >>> + >>> + err = clk_enable(clk_usbotg_fck); >>> + if (err) { >>> + device_printf(dev, "Can not enable usbotg_fck@47c\n"); >>> + return (ENXIO); >>> + } >>> + >>> + /* FIXME: For now; Go and kidnap syscon from opp-table */ >>> + opp_table = OF_finddevice("/opp-table"); >>> + if (opp_table == -1) { >>> + device_printf(dev, "Cant find /opp-table\n"); >>> + return (ENXIO); >>> + } >>> + if (!OF_hasprop(opp_table, "syscon")) { >>> + device_printf(dev, "/opp-table missing syscon property\n"); >>> + return (ENXIO); >>> + } >>> + err = syscon_get_by_ofw_property(dev, opp_table, "syscon", >>> &sc->syscon); >>> + if (err) { >>> + device_printf(dev, "Failed to get syscon\n"); >>> + return (ENXIO); >>> + } >>> + >>> /* Request the memory resources */ >>> err = bus_alloc_resources(dev, am335x_musbotg_mem_spec, >>> sc->sc_mem_res); >>> @@ -417,5 +456,7 @@ static driver_t musbotg_driver = { >>> >>> static devclass_t musbotg_devclass; >>> >>> -DRIVER_MODULE(musbotg, usbss, musbotg_driver, musbotg_devclass, 0, 0); >>> -MODULE_DEPEND(musbotg, usbss, 1, 1, 1); >>> +DRIVER_MODULE(musbotg, ti_sysc, musbotg_driver, musbotg_devclass, 0, >>> 0); >>> +MODULE_DEPEND(musbotg, ti_sysc, 1, 1, 1); >>> +MODULE_DEPEND(musbotg, ti_am3359_cppi41, 1, 1, 1); >>> +MODULE_DEPEND(usbss, usb, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_pwmss.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_pwmss.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_pwmss.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -46,10 +46,11 @@ __FBSDID("$FreeBSD$"); >>> #include >>> #include >>> >>> -#include >>> -#include >>> -#include >>> +#include >>> >>> +#include >>> +#include "syscon_if.h" >>> + >>> #include "am335x_pwm.h" >>> #include "am335x_scm.h" >>> >>> @@ -59,6 +60,11 @@ __FBSDID("$FreeBSD$"); >>> #define CLKCONFIG_EPWMCLK_EN (1 << 8) >>> #define PWMSS_CLKSTATUS 0x0C >>> >>> +/* TRM chapter 2 memory map table 2-3 + VER register location */ >>> +#define PWMSS_REV_0 0x0000 >>> +#define PWMSS_REV_1 0x2000 >>> +#define PWMSS_REV_2 0x4000 >>> + >>> static device_probe_t am335x_pwmss_probe; >>> static device_attach_t am335x_pwmss_attach; >>> static device_detach_t am335x_pwmss_detach; >>> @@ -66,7 +72,7 @@ static device_detach_t am335x_pwmss_detach; >>> struct am335x_pwmss_softc { >>> struct simplebus_softc sc_simplebus; >>> device_t sc_dev; >>> - clk_ident_t sc_clk; >>> + struct syscon *syscon; >>> }; >>> >>> static device_method_t am335x_pwmss_methods[] = { >>> @@ -97,36 +103,45 @@ am335x_pwmss_attach(device_t dev) >>> { >>> struct am335x_pwmss_softc *sc; >>> uint32_t reg, id; >>> - phandle_t node; >>> + uint64_t rev_address; >>> + phandle_t node, opp_table; >>> >>> sc = device_get_softc(dev); >>> sc->sc_dev = dev; >>> >>> - sc->sc_clk = ti_hwmods_get_clock(dev); >>> - if (sc->sc_clk == INVALID_CLK_IDENT) { >>> - device_printf(dev, "failed to get device id based on ti,hwmods\n"); >>> - return (EINVAL); >>> + /* FIXME: For now; Go and kidnap syscon from opp-table */ >>> + opp_table = OF_finddevice("/opp-table"); >>> + if (opp_table == -1) { >>> + device_printf(dev, "Cant find /opp-table\n"); >>> + return (ENXIO); >>> } >>> + if (!OF_hasprop(opp_table, "syscon")) { >>> + device_printf(dev, "/opp-table doesnt have required syscon >>> property\n"); >>> + return (ENXIO); >>> + } >>> + if (syscon_get_by_ofw_property(dev, opp_table, "syscon", &sc->syscon) >>> != >>> 0) { >>> + device_printf(dev, "Failed to get syscon\n"); >>> + return (ENXIO); >>> + } >>> >>> - ti_prcm_clk_enable(sc->sc_clk); >>> - ti_scm_reg_read_4(SCM_PWMSS_CTRL, ®); >>> - switch (sc->sc_clk) { >>> - case PWMSS0_CLK: >>> - id = 0; >>> - break; >>> - case PWMSS1_CLK: >>> - id = 1; >>> - break; >>> + ti_sysc_clock_enable(device_get_parent(dev)); >>> >>> - case PWMSS2_CLK: >>> - id = 2; >>> - break; >>> - default: >>> - device_printf(dev, "unknown pwmss clock id: %d\n", sc->sc_clk); >>> - return (EINVAL); >>> + rev_address = ti_sysc_get_rev_address(device_get_parent(dev)); >>> + switch (rev_address) { >>> + case PWMSS_REV_0: >>> + id = 0; >>> + break; >>> + case PWMSS_REV_1: >>> + id = 1; >>> + break; >>> + case PWMSS_REV_2: >>> + id = 2; >>> + break; >>> } >>> + >>> + reg = SYSCON_READ_4(sc->syscon, SCM_PWMSS_CTRL); >>> reg |= (1 << id); >>> - ti_scm_reg_write_4(SCM_PWMSS_CTRL, reg); >>> + SYSCON_WRITE_4(sc->syscon, SCM_PWMSS_CTRL, reg); >>> >>> node = ofw_bus_get_node(dev); >>> >>> @@ -161,3 +176,4 @@ DEFINE_CLASS_1(am335x_pwmss, am335x_pwmss_driver, >>> am33 >>> static devclass_t am335x_pwmss_devclass; >>> DRIVER_MODULE(am335x_pwmss, simplebus, am335x_pwmss_driver, >>> am335x_pwmss_devclass, 0, 0); >>> MODULE_VERSION(am335x_pwmss, 1); >>> +MODULE_DEPEND(am335x_pwmss, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_rtc.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_rtc.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_rtc.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -39,8 +39,9 @@ __FBSDID("$FreeBSD$"); >>> >>> #include >>> >>> +#include >>> #include >>> -#include >>> +#include >>> #include >>> #include >>> >>> @@ -110,7 +111,7 @@ am335x_rtc_attach(device_t dev) >>> RTC_LOCK_INIT(sc); >>> >>> /* Enable the RTC module. */ >>> - ti_prcm_clk_enable(RTC_CLK); >>> + ti_sysc_clock_enable(device_get_parent(dev)); >>> rev = RTC_READ4(sc, RTC_REVISION); >>> device_printf(dev, "AM335X RTC v%d.%d.%d\n", >>> (rev >> 8) & 0x7, (rev >> 6) & 0x3, rev & 0x3f); >>> @@ -209,3 +210,4 @@ static devclass_t am335x_rtc_devclass; >>> DRIVER_MODULE(am335x_rtc, simplebus, am335x_rtc_driver, >>> am335x_rtc_devclass, 0, 0); >>> MODULE_VERSION(am335x_rtc, 1); >>> MODULE_DEPEND(am335x_rtc, simplebus, 1, 1, 1); >>> +MODULE_DEPEND(am335x_rtc, ti_sysc, 1, 1, 1); >>> >>> Modified: head/sys/arm/ti/am335x/am335x_scm.c >>> ============================================================================== >>> --- head/sys/arm/ti/am335x/am335x_scm.c Thu Jul 30 14:42:50 >>> 2020 (r363699) >>> +++ head/sys/arm/ti/am335x/am335x_scm.c Thu Jul 30 14:45:05 >>> 2020 (r363700) >>> @@ -40,11 +40,15 @@ __FBSDID("$FreeBSD$"); >>> #include >>> #include >>> >>> +#include >>> +#include "syscon_if.h" >>> + >>> #define TZ_ZEROC 2731 >>> >>> struct am335x_scm_softc { >>> int sc_last_temp; >>> struct sysctl_oid *sc_temp_oid; >>> + struct syscon *syscon; >>> }; >>> >>> static int >>> @@ -60,7 +64,7 @@ am335x_scm_temp_sysctl(SYSCTL_HANDLER_ARGS) >>> >>> /* Read the temperature and convert to Kelvin. */ >>> for(i = 50; i > 0; i--) { >>> - ti_scm_reg_read_4(SCM_BGAP_CTRL, ®); >>> + reg = SYSCON_READ_4(sc->syscon, SCM_BGAP_CTRL); >>> if ((reg & SCM_BGAP_EOCZ) == 0) >>> break; >>> DELAY(50); >>> @@ -96,6 +100,9 @@ am335x_scm_identify(driver_t *driver, device_t >>> parent) >>> static int >>> am335x_scm_probe(device_t dev) >>> { >>> + /* Just allow the first one */ >>> + if (strcmp(device_get_nameunit(dev), "am335x_scm0") != 0) >>> + return (ENXIO); >>> >>> device_set_desc(dev, "AM335x Control Module Extension"); >>> >>> @@ -109,21 +116,40 @@ am335x_scm_attach(device_t dev) >>> struct sysctl_ctx_list *ctx; >>> struct sysctl_oid_list *tree; >>> uint32_t reg; >>> + phandle_t opp_table; >>> + int err; >>> >>> + sc = device_get_softc(dev); >>> + >>> + /* FIXME: For now; Go and kidnap syscon from opp-table */ >>> + opp_table = OF_finddevice("/opp-table"); >>> + if (opp_table == -1) { >>> + device_printf(dev, "Cant find /opp-table\n"); >>> + return (ENXIO); >>> + } >>> + if (!OF_hasprop(opp_table, "syscon")) { >>> + device_printf(dev, "/opp-table missing syscon property\n"); >>> + return (ENXIO); >>> + } >>> + err = syscon_get_by_ofw_property(dev, opp_table, "syscon", >>> &sc->syscon); >>> + if (err) { >>> + device_printf(dev, "Failed to get syscon\n"); >>> + return (ENXIO); >>> + } >>> + >>> /* Reset the digital outputs. */ >>> - ti_scm_reg_write_4(SCM_BGAP_CTRL, 0); >>> - ti_scm_reg_read_4(SCM_BGAP_CTRL, ®); >>> + SYSCON_WRITE_4(sc->syscon, SCM_BGAP_CTRL, 0); >>> + reg = SYSCON_READ_4(sc->syscon, SCM_BGAP_CTRL); >>> DELAY(500); >>> /* Set continous mode. */ >>> - ti_scm_reg_write_4(SCM_BGAP_CTRL, SCM_BGAP_CONTCONV); >>> - ti_scm_reg_read_4(SCM_BGAP_CTRL, ®); >>> + SYSCON_WRITE_4(sc->syscon, SCM_BGAP_CTRL, SCM_BGAP_CONTCONV); >>> + reg = SYSCON_READ_4(sc->syscon, SCM_BGAP_CTRL); >>> DELAY(500); >>> /* Start the ADC conversion. */ >>> reg = SCM_BGAP_CLRZ | SCM_BGAP_CONTCONV | SCM_BGAP_SOC; >>> - ti_scm_reg_write_4(SCM_BGAP_CTRL, reg); >>> + SYSCON_WRITE_4(sc->syscon, SCM_BGAP_CTRL, reg); >>> >>> /* Temperature sysctl. */ >>> - sc = device_get_softc(dev); >>> ctx = device_get_sysctl_ctx(dev); >>> tree = SYSCTL_CHILDREN(device_get_sysctl_tree(dev)); >>> sc->sc_temp_oid = SYSCTL_ADD_PROC(ctx, tree, OID_AUTO, >>> @@ -145,7 +171,7 @@ am335x_scm_detach(device_t dev) >>> sysctl_remove_oid(sc->sc_temp_oid, 1, 0); >>> >>> /* Stop the bandgap ADC. */ >>> - ti_scm_reg_write_4(SCM_BGAP_CTRL, SCM_BGAP_BGOFF); >>> >>> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >>> _______________________________________________ >>> svn-src-all@freebsd.org mailing list >>> https://lists.freebsd.org/mailman/listinfo/svn-src-all >>> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org" >>> >> >> > -- Mateusz Guzik