From owner-svn-src-head@freebsd.org Sat Aug 1 09:11:03 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 45F713742FC; Sat, 1 Aug 2020 09:11:03 +0000 (UTC) (envelope-from melounmichal@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 4BJdft1fYmz45f5; Sat, 1 Aug 2020 09:11:01 +0000 (UTC) (envelope-from melounmichal@gmail.com) Received: by mail-wm1-x344.google.com with SMTP id x5so10324562wmi.2; Sat, 01 Aug 2020 02:11:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:reply-to:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=OEMAo4i1AWTO3Ja4Og8vVm0CDcasC4n/s6doHN4n408=; b=kWSxVcY/PMZQtCf+zmIam8CCXqaWyx/ZUGOX+EoQ0lj6mJFMxYY9fBZbrl/7VrjMhD Ck2fiOY2dyk+qcyWrvrN7CfDs7/XF4zc91Tn8Zu5Cq5B2HVLKaJAcab9SlsaMAZWZ9bz VNLpGWrZkfKwrLbbAXPoU8CZ83bIb1yrym78Dhz1dtLfHPSv7Z3EldImGjU4UDpbhO56 DzK4BXnIoeOkuF4wSVFMfYdnYQMUfKQjSbkcMcWGyIxB115U2VPG7jsWJJGqUwUHwptQ 4jJfoDj+27uoMdzc8ZYLh5c2U7oDA9hfC8hLe4pAKq9N7pD/sqv0mYkEH85BYAWeff8d kfUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:reply-to:subject:to:cc:references :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=OEMAo4i1AWTO3Ja4Og8vVm0CDcasC4n/s6doHN4n408=; b=oytgIIhhwoNwZ1cNJCDAnJMktJ/FRbtv1VR/U18cKUdZyG85QGJAjRbX4VEejcrkC1 eRdwo287KeD0kmzWcEljGHjklnu68RYhxg4TyNo0gzTubIP3MZhPPsQAWZ9N/SpNE/iE wIup8HUxixX10hJrhTi1KlZwJT+ln3udYE6uOFKzrMTYW5eraKTIHKcd21FhCApirUIK 2t0Hn26VU6ifJPAo16gCUlbjbHvYY1W9Z5VZPoRfNKAWWLyIRp5w95OY82DUtlDz76hZ j3aQVmFI0J7plGl+D+8vpWPXSR8eALPOwVhpO+SqQHdm3UlzsTqcU/MjMSGa7Pziy40x ndRw== X-Gm-Message-State: AOAM532VO3jvjH/rP5aaGlBgrw2vWKd1ZaKCSR8oTQzaJd1TCZZ2X3Ea xdiMc1K/MnBHXx2s8iVISojoQzOn X-Google-Smtp-Source: ABdhPJz6w6F5kYd6RV++uRXJzMUR/I6gZEfzA2Porlab33R01E8yC7AqkTsDVG7Fp3w0LzYm3fSVXw== X-Received: by 2002:a1c:1d52:: with SMTP id d79mr7735302wmd.82.1596273059048; Sat, 01 Aug 2020 02:10:59 -0700 (PDT) Received: from [88.208.79.100] (halouny.humusoft.cz. [88.208.79.100]) by smtp.gmail.com with ESMTPSA id s125sm16128046wmf.14.2020.08.01.02.10.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 01 Aug 2020 02:10:58 -0700 (PDT) Sender: Michal Meloun From: Michal Meloun X-Google-Original-From: Michal Meloun Reply-To: mmel@freebsd.org 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: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <202007301445.06UEj5uj062013@repo.freebsd.org> Message-ID: <85d52020-3aff-7210-ace7-12ae19ad5d9a@freebsd.org> Date: Sat, 1 Aug 2020 11:10:58 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4BJdft1fYmz45f5 X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=kWSxVcY/; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of melounmichal@gmail.com designates 2a00:1450:4864:20::344 as permitted sender) smtp.mailfrom=melounmichal@gmail.com X-Spamd-Result: default: False [-3.90 / 15.00]; HAS_REPLYTO(0.00)[mmel@freebsd.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; NEURAL_HAM_SHORT(-0.94)[-0.941]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; TAGGED_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-0.995]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; SH_EMAIL_DBL_DONT_QUERY_IPS(0.00)[0.0.0.40:email,0.0.1.242:email]; NEURAL_HAM_LONG(-0.96)[-0.963]; MIME_GOOD(-0.10)[text/plain]; REPLYTO_DOM_NEQ_FROM_DOM(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DBL_PROHIBIT(0.00)[0.0.0.40:email,0.0.1.242:email]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::344:from]; RCVD_TLS_ALL(0.00)[] 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 09:11:03 -0000 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" >> > >