git: 6ea05fce8e2e - main - Revert "jh7110: Add StarFive JH7110 clock/reset generator drivers"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 07 May 2024 16:08:17 UTC
The branch main has been updated by mhorne:
URL: https://cgit.FreeBSD.org/src/commit/?id=6ea05fce8e2e63b3c2547719ff9a84207e2132b4
commit 6ea05fce8e2e63b3c2547719ff9a84207e2132b4
Author: Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2024-05-07 16:05:31 +0000
Commit: Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2024-05-07 16:05:31 +0000
Revert "jh7110: Add StarFive JH7110 clock/reset generator drivers"
I did not set the author field properly; revert to fix this.
This reverts commit 5d6d6278979b9eab598a23c804d23e930d2f7268.
---
sys/dev/clk/starfive/jh7110_clk.c | 277 ------------------------
sys/dev/clk/starfive/jh7110_clk.h | 72 -------
sys/dev/clk/starfive/jh7110_clk_aon.c | 168 ---------------
sys/dev/clk/starfive/jh7110_clk_pll.c | 386 ----------------------------------
sys/dev/clk/starfive/jh7110_clk_pll.h | 211 -------------------
sys/dev/clk/starfive/jh7110_clk_sys.c | 261 -----------------------
sys/riscv/starfive/files.starfive | 4 -
7 files changed, 1379 deletions(-)
diff --git a/sys/dev/clk/starfive/jh7110_clk.c b/sys/dev/clk/starfive/jh7110_clk.c
deleted file mode 100644
index adb5707b3f64..000000000000
--- a/sys/dev/clk/starfive/jh7110_clk.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2019 Emmanuel Vadot <manu@freebsd.org>
- * Copyright (c) 2022 Mitchell Horne <mhorne@FreeBSD.org>
- * Copyright (c) 2024 Jari Sihvola <jsihv@gmx.com>
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/mutex.h>
-#include <sys/rman.h>
-
-#include <machine/bus.h>
-#include <machine/intr.h>
-#include <machine/resource.h>
-
-#include <dev/clk/clk.h>
-#include <dev/hwreset/hwreset.h>
-
-#include <dt-bindings/clock/starfive,jh7110-crg.h>
-
-#include <dev/clk/starfive/jh7110_clk.h>
-
-#include "clkdev_if.h"
-#include "hwreset_if.h"
-
-#define JH7110_DIV_MASK 0xffffff
-#define JH7110_MUX_SHIFT 24
-#define JH7110_MUX_MASK 0x3f000000
-#define JH7110_ENABLE_SHIFT 31
-
-#define REG_SIZE 4
-
-struct jh7110_clk_sc {
- uint32_t offset;
- uint32_t flags;
- uint64_t d_max;
- int id;
-};
-
-#define DIV_ROUND_CLOSEST(n, d) (((n) + (d) / 2) / (d))
-
-#define READ4(_sc, _off) \
- bus_read_4(_sc->mem_res, _off)
-#define WRITE4(_sc, _off, _val) \
- bus_write_4(_sc->mem_res, _off, _val)
-
-#define DEVICE_LOCK(_clk) \
- CLKDEV_DEVICE_LOCK(clknode_get_device(_clk))
-#define DEVICE_UNLOCK(_clk) \
- CLKDEV_DEVICE_UNLOCK(clknode_get_device(_clk))
-
-/* Reset functions */
-
-int
-jh7110_reset_assert(device_t dev, intptr_t id, bool assert)
-{
- struct jh7110_clkgen_softc *sc;
- uint32_t regvalue, offset, bitmask = 1UL << id % 32;
-
- sc = device_get_softc(dev);
- offset = sc->reset_selector_offset + id / 32 * 4;
-
- mtx_lock(&sc->mtx);
-
- regvalue = READ4(sc, offset);
-
- if (assert)
- regvalue |= bitmask;
- else
- regvalue &= ~bitmask;
- WRITE4(sc, offset, regvalue);
-
- mtx_unlock(&sc->mtx);
-
- return (0);
-}
-
-int
-jh7110_reset_is_asserted(device_t dev, intptr_t id, bool *reset)
-{
- struct jh7110_clkgen_softc *sc;
- uint32_t regvalue, offset, bitmask;
-
- sc = device_get_softc(dev);
- offset = sc->reset_status_offset + id / 32 * 4;
-
- mtx_lock(&sc->mtx);
-
- regvalue = READ4(sc, offset);
- bitmask = 1UL << id % 32;
-
- mtx_unlock(&sc->mtx);
-
- *reset = (regvalue & bitmask) == 0;
-
- return (0);
-}
-
-/* Clock functions */
-
-static int
-jh7110_clk_init(struct clknode *clk, device_t dev)
-{
- struct jh7110_clkgen_softc *sc;
- struct jh7110_clk_sc *sc_clk;
- uint32_t reg;
- int idx = 0;
-
- sc = device_get_softc(clknode_get_device(clk));
- sc_clk = clknode_get_softc(clk);
-
- if (sc_clk->flags & JH7110_CLK_HAS_MUX) {
- DEVICE_LOCK(clk);
- reg = READ4(sc, sc_clk->offset);
- DEVICE_UNLOCK(clk);
- idx = (reg & JH7110_MUX_MASK) >> JH7110_MUX_SHIFT;
- }
-
- clknode_init_parent_idx(clk, idx);
-
- return (0);
-}
-
-static int
-jh7110_clk_set_gate(struct clknode *clk, bool enable)
-{
- struct jh7110_clkgen_softc *sc;
- struct jh7110_clk_sc *sc_clk;
- uint32_t reg;
-
- sc = device_get_softc(clknode_get_device(clk));
- sc_clk = clknode_get_softc(clk);
-
- if ((sc_clk->flags & JH7110_CLK_HAS_GATE) == 0)
- return (0);
-
- DEVICE_LOCK(clk);
-
- reg = READ4(sc, sc_clk->offset);
- if (enable)
- reg |= (1 << JH7110_ENABLE_SHIFT);
- else
- reg &= ~(1 << JH7110_ENABLE_SHIFT);
- WRITE4(sc, sc_clk->offset, reg);
-
- DEVICE_UNLOCK(clk);
-
- return (0);
-}
-
-static int
-jh7110_clk_set_mux(struct clknode *clk, int idx)
-{
- struct jh7110_clkgen_softc *sc;
- struct jh7110_clk_sc *sc_clk;
- uint32_t reg;
-
- sc = device_get_softc(clknode_get_device(clk));
- sc_clk = clknode_get_softc(clk);
-
- if ((sc_clk->flags & JH7110_CLK_HAS_MUX) == 0)
- return (ENXIO);
-
- /* Checking index size */
- if ((idx & (JH7110_MUX_MASK >> JH7110_MUX_SHIFT)) != idx)
- return (EINVAL);
-
- DEVICE_LOCK(clk);
-
- reg = READ4(sc, sc_clk->offset) & ~JH7110_MUX_MASK;
- reg |= idx << JH7110_MUX_SHIFT;
- WRITE4(sc, sc_clk->offset, reg);
-
- DEVICE_UNLOCK(clk);
-
- return (0);
-}
-
-static int
-jh7110_clk_recalc_freq(struct clknode *clk, uint64_t *freq)
-{
- struct jh7110_clkgen_softc *sc;
- struct jh7110_clk_sc *sc_clk;
- uint32_t divisor;
-
- sc = device_get_softc(clknode_get_device(clk));
- sc_clk = clknode_get_softc(clk);
-
- /* Returning error here causes panic */
- if ((sc_clk->flags & JH7110_CLK_HAS_DIV) == 0)
- return (0);
-
- DEVICE_LOCK(clk);
-
- divisor = READ4(sc, sc_clk->offset) & JH7110_DIV_MASK;
-
- DEVICE_UNLOCK(clk);
-
- if (divisor)
- *freq = *freq / divisor;
- else
- *freq = 0;
-
- return (0);
-}
-
-static int
-jh7110_clk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout,
- int flags, int *done)
-{
- struct jh7110_clkgen_softc *sc;
- struct jh7110_clk_sc *sc_clk;
- uint32_t divisor;
-
- sc = device_get_softc(clknode_get_device(clk));
- sc_clk = clknode_get_softc(clk);
-
- if ((sc_clk->flags & JH7110_CLK_HAS_DIV) == 0)
- return (0);
-
- divisor = MIN(MAX(DIV_ROUND_CLOSEST(fin, *fout), 1UL), sc_clk->d_max);
-
- if (flags & CLK_SET_DRYRUN)
- goto done;
-
- DEVICE_LOCK(clk);
-
- divisor |= READ4(sc, sc_clk->offset) & ~JH7110_DIV_MASK;
- WRITE4(sc, sc_clk->offset, divisor);
-
- DEVICE_UNLOCK(clk);
-
-done:
- *fout = divisor;
- *done = 1;
-
- return (0);
-}
-
-static clknode_method_t jh7110_clknode_methods[] = {
- /* Device interface */
- CLKNODEMETHOD(clknode_init, jh7110_clk_init),
- CLKNODEMETHOD(clknode_set_gate, jh7110_clk_set_gate),
- CLKNODEMETHOD(clknode_set_mux, jh7110_clk_set_mux),
- CLKNODEMETHOD(clknode_recalc_freq, jh7110_clk_recalc_freq),
- CLKNODEMETHOD(clknode_set_freq, jh7110_clk_set_freq),
- CLKNODEMETHOD_END
-};
-
-DEFINE_CLASS_1(jh7110_clknode, jh7110_clknode_class, jh7110_clknode_methods,
- sizeof(struct jh7110_clk_sc), clknode_class);
-
-int
-jh7110_clk_register(struct clkdom *clkdom, const struct jh7110_clk_def *clkdef)
-{
- struct clknode *clk;
- struct jh7110_clk_sc *sc;
-
- clk = clknode_create(clkdom, &jh7110_clknode_class, &clkdef->clkdef);
- if (clk == NULL)
- return (-1);
-
- sc = clknode_get_softc(clk);
-
- sc->offset = clkdef->clkdef.id * REG_SIZE;
-
- sc->flags = clkdef->flags;
- sc->id = clkdef->clkdef.id;
- sc->d_max = clkdef->d_max;
-
- clknode_register(clkdom, clk);
-
- return (0);
-}
diff --git a/sys/dev/clk/starfive/jh7110_clk.h b/sys/dev/clk/starfive/jh7110_clk.h
deleted file mode 100644
index 882f82032d44..000000000000
--- a/sys/dev/clk/starfive/jh7110_clk.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2024 Jari Sihvola <jsihv@gmx.com>
- */
-
-#ifndef _JH7110_CLK_H_
-#define _JH7110_CLK_H_
-
-#include <dev/clk/clk.h>
-
-#define JH7110_CLK_HAS_GATE 0x01
-#define JH7110_CLK_HAS_MUX 0x02
-#define JH7110_CLK_HAS_DIV 0x04
-#define JH7110_CLK_HAS_INV 0x08
-
-#define AONCRG_RESET_SELECTOR 0x38
-#define AONCRG_RESET_STATUS 0x3c
-#define STGCRG_RESET_SELECTOR 0x74
-#define STGCRG_RESET_STATUS 0x78
-#define SYSCRG_RESET_SELECTOR 0x2f8
-#define SYSCRG_RESET_STATUS 0x308
-
-struct jh7110_clkgen_softc {
- struct mtx mtx;
- struct clkdom *clkdom;
- struct resource *mem_res;
- uint32_t reset_status_offset;
- uint32_t reset_selector_offset;
-};
-
-struct jh7110_clk_def {
- struct clknode_init_def clkdef;
- uint32_t offset;
- uint32_t flags;
- uint64_t d_max;
-};
-
-#define JH7110_CLK(_idx, _name, _pn, _d_max, _flags) \
-{ \
- .clkdef.id = _idx, \
- .clkdef.name = _name, \
- .clkdef.parent_names = _pn, \
- .clkdef.parent_cnt = nitems(_pn), \
- .clkdef.flags = CLK_NODE_STATIC_STRINGS, \
- .flags = _flags, \
- .d_max = _d_max, \
-}
-
-#define JH7110_GATE(_idx, _name, _pn) \
- JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_GATE)
-#define JH7110_MUX(_idx, _name, _pn) \
- JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_MUX)
-#define JH7110_DIV(_idx, _name, _pn, _d_max) \
- JH7110_CLK(_idx, _name, _pn, _d_max, JH7110_CLK_HAS_DIV)
-#define JH7110_GATEMUX(_idx, _name, _pn) \
- JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_GATE | \
- JH7110_CLK_HAS_MUX)
-#define JH7110_GATEDIV(_idx, _name, _pn, _d_max) \
- JH7110_CLK(_idx, _name, _pn, _d_max, JH7110_CLK_HAS_GATE | \
- JH7110_CLK_HAS_DIV)
-#define JH7110_INV(_idx, _name, _pn) \
- JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_INV)
-
-int jh7110_clk_register(struct clkdom *clkdom,
- const struct jh7110_clk_def *clkdef);
-int jh7110_ofw_map(struct clkdom *clkdom, uint32_t ncells, phandle_t *cells,
- struct clknode **clk);
-int jh7110_reset_is_asserted(device_t dev, intptr_t id, bool *reset);
-int jh7110_reset_assert(device_t dev, intptr_t id, bool assert);
-
-#endif /* _JH7110_CLK_H_ */
diff --git a/sys/dev/clk/starfive/jh7110_clk_aon.c b/sys/dev/clk/starfive/jh7110_clk_aon.c
deleted file mode 100644
index 21b15142835e..000000000000
--- a/sys/dev/clk/starfive/jh7110_clk_aon.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright 2016 Michal Meloun <mmel@FreeBSD.org>
- * Copyright (c) 2020 Oskar Holmlund <oskar.holmlund@ohdata.se>
- * Copyright (c) 2024 Jari Sihvola <jsihv@gmx.com>
- */
-
-/* Clocks for JH7110 AON group. PLL driver must be attached before this. */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/mutex.h>
-#include <sys/resource.h>
-#include <sys/rman.h>
-#include <machine/bus.h>
-
-#include <dev/fdt/simplebus.h>
-#include <dev/hwreset/hwreset.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <dev/clk/clk.h>
-#include <dev/clk/starfive/jh7110_clk.h>
-
-#include <dt-bindings/clock/starfive,jh7110-crg.h>
-
-#include "clkdev_if.h"
-#include "hwreset_if.h"
-
-static struct ofw_compat_data compat_data[] = {
- { "starfive,jh7110-aoncrg", 1 },
- { NULL, 0 }
-};
-
-static struct resource_spec res_spec[] = {
- { SYS_RES_MEMORY, 0, RF_ACTIVE | RF_SHAREABLE },
- RESOURCE_SPEC_END
-};
-
-/* parents */
-static const char *gmac0_axi_p[] = { "stg_axiahb" };
-static const char *gmac0_ahb_p[] = { "stg_axiahb" };
-static const char *gmac0_tx_inv_p[] = { "gmac0_tx" };
-static const char *gmac0_tx_p[] = { "gmac0_gtxclk", "gmac0_rmii_rtx" };
-static const char *gmac0_rmii_rtx_p[] = { "gmac0_rmii_refin" };
-
-/* AON clocks */
-static const struct jh7110_clk_def aon_clks[] = {
- JH7110_GATE(JH7110_AONCLK_GMAC0_AXI, "gmac0_axi", gmac0_axi_p),
- JH7110_GATE(JH7110_AONCLK_GMAC0_AHB, "gmac0_ahb", gmac0_ahb_p),
- JH7110_GATEMUX(JH7110_AONCLK_GMAC0_TX, "gmac0_tx", gmac0_tx_p),
- JH7110_INV(JH7110_AONCLK_GMAC0_TX_INV, "gmac0_tx_inv", gmac0_tx_inv_p),
- JH7110_DIV(JH7110_AONCLK_GMAC0_RMII_RTX, "gmac0_rmii_rtx",
- gmac0_rmii_rtx_p, 30),
-};
-
-static int
-jh7110_clk_aon_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, "StarFive JH7110 AON clock generator");
-
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-jh7110_clk_aon_attach(device_t dev)
-{
- struct jh7110_clkgen_softc *sc;
- int err;
-
- sc = device_get_softc(dev);
-
- sc->reset_status_offset = AONCRG_RESET_STATUS;
- sc->reset_selector_offset = AONCRG_RESET_SELECTOR;
-
- mtx_init(&sc->mtx, device_get_nameunit(dev), NULL, MTX_DEF);
-
- err = bus_alloc_resources(dev, res_spec, &sc->mem_res);
- if (err != 0) {
- device_printf(dev, "Couldn't allocate resources, error %d\n",
- err);
- return (ENXIO);
- }
-
- sc->clkdom = clkdom_create(dev);
- if (sc->clkdom == NULL) {
- device_printf(dev, "Couldn't create clkdom, error %d\n", err);
- return (ENXIO);
- }
-
- for (int i = 0; i < nitems(aon_clks); i++) {
- err = jh7110_clk_register(sc->clkdom, &aon_clks[i]);
- if (err != 0) {
- device_printf(dev,
- "Couldn't register clk %s, error %d\n",
- aon_clks[i].clkdef.name, err);
- return (ENXIO);
- }
- }
-
- if (clkdom_finit(sc->clkdom) != 0)
- panic("Cannot finalize clkdom initialization\n");
-
- if (bootverbose)
- clkdom_dump(sc->clkdom);
-
- hwreset_register_ofw_provider(dev);
-
- return (0);
-}
-
-static void
-jh7110_clk_aon_device_lock(device_t dev)
-{
- struct jh7110_clkgen_softc *sc;
-
- sc = device_get_softc(dev);
- mtx_lock(&sc->mtx);
-}
-
-static void
-jh7110_clk_aon_device_unlock(device_t dev)
-{
- struct jh7110_clkgen_softc *sc;
-
- sc = device_get_softc(dev);
- mtx_unlock(&sc->mtx);
-}
-
-static int
-jh7110_clk_aon_detach(device_t dev)
-{
- /* Detach not supported */
- return (EBUSY);
-}
-
-static device_method_t jh7110_clk_aon_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, jh7110_clk_aon_probe),
- DEVMETHOD(device_attach, jh7110_clk_aon_attach),
- DEVMETHOD(device_detach, jh7110_clk_aon_detach),
-
- /* clkdev interface */
- DEVMETHOD(clkdev_device_lock, jh7110_clk_aon_device_lock),
- DEVMETHOD(clkdev_device_unlock, jh7110_clk_aon_device_unlock),
-
- /* Reset interface */
- DEVMETHOD(hwreset_assert, jh7110_reset_assert),
- DEVMETHOD(hwreset_is_asserted, jh7110_reset_is_asserted),
-
- DEVMETHOD_END
-};
-
-DEFINE_CLASS_0(jh7110_aon, jh7110_aon_driver, jh7110_clk_aon_methods,
- sizeof(struct jh7110_clkgen_softc));
-EARLY_DRIVER_MODULE(jh7110_aon, simplebus, jh7110_aon_driver, 0, 0,
- BUS_PASS_BUS + BUS_PASS_ORDER_LATE);
-MODULE_VERSION(jh7110_aon, 1);
diff --git a/sys/dev/clk/starfive/jh7110_clk_pll.c b/sys/dev/clk/starfive/jh7110_clk_pll.c
deleted file mode 100644
index 5882f33984ae..000000000000
--- a/sys/dev/clk/starfive/jh7110_clk_pll.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2024 Jari Sihvola <jsihv@gmx.com>
- * Copyright (c) 2024 The FreeBSD Foundation
- *
- * Portions of this software were developed by Mitchell Horne
- * <mhorne@FreeBSD.org> under sponsorship from the FreeBSD Foundation.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/mutex.h>
-
-#include <machine/bus.h>
-
-#include <dev/fdt/simplebus.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <dev/clk/clk.h>
-#include <dev/clk/starfive/jh7110_clk.h>
-#include <dev/clk/starfive/jh7110_clk_pll.h>
-#include <dev/syscon/syscon.h>
-
-#include <dt-bindings/clock/starfive,jh7110-crg.h>
-
-#include "clkdev_if.h"
-#include "syscon_if.h"
-
-#define JH7110_SYS_SYSCON_SYSCFG24 0x18
-#define JH7110_SYS_SYSCON_SYSCFG28 0x1c
-#define JH7110_SYS_SYSCON_SYSCFG32 0x20
-#define JH7110_SYS_SYSCON_SYSCFG36 0x24
-#define JH7110_SYS_SYSCON_SYSCFG40 0x28
-#define JH7110_SYS_SYSCON_SYSCFG44 0x2c
-#define JH7110_SYS_SYSCON_SYSCFG48 0x30
-#define JH7110_SYS_SYSCON_SYSCFG52 0x34
-
-#define DEVICE_LOCK(_clk) \
- CLKDEV_DEVICE_LOCK(clknode_get_device(_clk))
-#define DEVICE_UNLOCK(_clk) \
- CLKDEV_DEVICE_UNLOCK(clknode_get_device(_clk))
-
-#define PLL_MASK_FILL(sc, id) \
-do { \
- sc->dacpd_mask = PLL## id ##_DACPD_MASK; \
- sc->dsmpd_mask = PLL## id ##_DSMPD_MASK; \
- sc->fbdiv_mask = PLL## id ##_FBDIV_MASK; \
- sc->frac_mask = PLL## id ##_FRAC_MASK; \
- sc->prediv_mask = PLL## id ##_PREDIV_MASK; \
- sc->postdiv1_mask = PLL## id ##_POSTDIV1_MASK; \
-} while (0)
-
-#define PLL_SHIFT_FILL(sc, id) \
-do { \
- sc->dacpd_shift = PLL## id ##_DACPD_SHIFT; \
- sc->dsmpd_shift = PLL## id ##_DSMPD_SHIFT; \
- sc->fbdiv_shift = PLL## id ##_FBDIV_SHIFT; \
- sc->frac_shift = PLL## id ##_FRAC_SHIFT; \
- sc->prediv_shift = PLL## id ##_PREDIV_SHIFT; \
- sc->postdiv1_shift = PLL## id ##_POSTDIV1_SHIFT; \
-} while (0)
-
-struct jh7110_clk_pll_softc {
- struct mtx mtx;
- struct clkdom *clkdom;
- struct syscon *syscon;
-};
-
-struct jh7110_pll_clknode_softc {
- uint32_t dacpd_offset;
- uint32_t dsmpd_offset;
- uint32_t fbdiv_offset;
- uint32_t frac_offset;
- uint32_t prediv_offset;
- uint32_t postdiv1_offset;
-
- uint32_t dacpd_mask;
- uint32_t dsmpd_mask;
- uint32_t fbdiv_mask;
- uint32_t frac_mask;
- uint32_t prediv_mask;
- uint32_t postdiv1_mask;
-
- uint32_t dacpd_shift;
- uint32_t dsmpd_shift;
- uint32_t fbdiv_shift;
- uint32_t frac_shift;
- uint32_t prediv_shift;
- uint32_t postdiv1_shift;
-
- const struct jh7110_pll_syscon_value *syscon_arr;
- int syscon_nitems;
-};
-
-static const char *pll_parents[] = { "osc" };
-
-static struct jh7110_clk_def pll_out_clks[] = {
- {
- .clkdef.id = JH7110_PLLCLK_PLL0_OUT,
- .clkdef.name = "pll0_out",
- .clkdef.parent_names = pll_parents,
- .clkdef.parent_cnt = nitems(pll_parents),
- .clkdef.flags = CLK_NODE_STATIC_STRINGS,
- },
- {
- .clkdef.id = JH7110_PLLCLK_PLL1_OUT,
- .clkdef.name = "pll1_out",
- .clkdef.parent_names = pll_parents,
- .clkdef.parent_cnt = nitems(pll_parents),
- .clkdef.flags = CLK_NODE_STATIC_STRINGS,
- },
- {
- .clkdef.id = JH7110_PLLCLK_PLL2_OUT,
- .clkdef.name = "pll2_out",
- .clkdef.parent_names = pll_parents,
- .clkdef.parent_cnt = nitems(pll_parents),
- .clkdef.flags = CLK_NODE_STATIC_STRINGS,
- },
-};
-
-static int jh7110_clk_pll_register(struct clkdom *clkdom,
- struct jh7110_clk_def *clkdef);
-
-static int
-jh7110_clk_pll_recalc_freq(struct clknode *clk, uint64_t *freq)
-{
- struct jh7110_clk_pll_softc *sc;
- struct jh7110_pll_clknode_softc *clk_sc;
- uint32_t dacpd, dsmpd, fbdiv, prediv, postdiv1;
- uint64_t frac, fcal = 0;
-
- sc = device_get_softc(clknode_get_device(clk));
- clk_sc = clknode_get_softc(clk);
-
- DEVICE_LOCK(clk);
-
- dacpd = (SYSCON_READ_4(sc->syscon, clk_sc->dacpd_offset) & clk_sc->dacpd_mask) >>
- clk_sc->dacpd_shift;
- dsmpd = (SYSCON_READ_4(sc->syscon, clk_sc->dsmpd_offset) & clk_sc->dsmpd_mask) >>
- clk_sc->dsmpd_shift;
- fbdiv = (SYSCON_READ_4(sc->syscon, clk_sc->fbdiv_offset) & clk_sc->fbdiv_mask) >>
- clk_sc->fbdiv_shift;
- prediv = (SYSCON_READ_4(sc->syscon, clk_sc->prediv_offset) & clk_sc->prediv_mask) >>
- clk_sc->prediv_shift;
- postdiv1 = (SYSCON_READ_4(sc->syscon, clk_sc->postdiv1_offset) &
- clk_sc->postdiv1_mask) >> clk_sc->postdiv1_shift;
- frac = (SYSCON_READ_4(sc->syscon, clk_sc->frac_offset) & clk_sc->frac_mask) >>
- clk_sc->frac_shift;
-
- DEVICE_UNLOCK(clk);
-
- /* dacpd and dsmpd both being 0 entails Fraction Multiple Mode */
- if (dacpd == 0 && dsmpd == 0)
- fcal = frac * FRAC_PATR_SIZE / (1 << 24);
-
- *freq = *freq / FRAC_PATR_SIZE * (fbdiv * FRAC_PATR_SIZE + fcal) /
- prediv / (1 << postdiv1);
-
- return (0);
-}
-
-static int
-jh7110_clk_pll_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout,
- int flags, int *done)
-{
- struct jh7110_clk_pll_softc *sc;
- struct jh7110_pll_clknode_softc *clk_sc;
- const struct jh7110_pll_syscon_value *syscon_val = NULL;
-
- sc = device_get_softc(clknode_get_device(clk));
- clk_sc = clknode_get_softc(clk);
-
- for (int i = 0; i != clk_sc->syscon_nitems; i++) {
- if (*fout == clk_sc->syscon_arr[i].freq) {
- syscon_val = &clk_sc->syscon_arr[i];
- }
- }
-
- if (syscon_val == NULL) {
- printf("%s: tried to set an unknown frequency %ju for %s\n",
- __func__, *fout, clknode_get_name(clk));
- return (EINVAL);
- }
-
- if ((flags & CLK_SET_DRYRUN) != 0) {
- *done = 1;
- return (0);
- }
-
- DEVICE_LOCK(clk);
-
- SYSCON_MODIFY_4(sc->syscon, clk_sc->dacpd_offset, clk_sc->dacpd_mask,
- syscon_val->dacpd << clk_sc->dacpd_shift & clk_sc->dacpd_mask);
- SYSCON_MODIFY_4(sc->syscon, clk_sc->dsmpd_offset, clk_sc->dsmpd_mask,
- syscon_val->dsmpd << clk_sc->dsmpd_shift & clk_sc->dsmpd_mask);
- SYSCON_MODIFY_4(sc->syscon, clk_sc->prediv_offset, clk_sc->prediv_mask,
- syscon_val->prediv << clk_sc->prediv_shift & clk_sc->prediv_mask);
- SYSCON_MODIFY_4(sc->syscon, clk_sc->fbdiv_offset, clk_sc->fbdiv_mask,
- syscon_val->fbdiv << clk_sc->fbdiv_shift & clk_sc->fbdiv_mask);
- SYSCON_MODIFY_4(sc->syscon, clk_sc->postdiv1_offset,
- clk_sc->postdiv1_mask, (syscon_val->postdiv1 >> 1) <<
- clk_sc->postdiv1_shift & clk_sc->postdiv1_mask);
-
- if (!syscon_val->dacpd && !syscon_val->dsmpd) {
- SYSCON_MODIFY_4(sc->syscon, clk_sc->frac_offset, clk_sc->frac_mask,
- syscon_val->frac << clk_sc->frac_shift & clk_sc->frac_mask);
- }
-
- DEVICE_UNLOCK(clk);
-
- *done = 1;
- return (0);
-}
-
-static int
-jh7110_clk_pll_init(struct clknode *clk, device_t dev)
-{
- clknode_init_parent_idx(clk, 0);
-
- return (0);
-}
-
-static int
-jh7110_clk_pll_probe(device_t dev)
-{
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (!ofw_bus_is_compatible(dev, "starfive,jh7110-pll"))
- return (ENXIO);
-
- device_set_desc(dev, "StarFive JH7110 PLL clock generator");
-
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-jh7110_clk_pll_attach(device_t dev)
-{
- struct jh7110_clk_pll_softc *sc;
- int error;
-
- sc = device_get_softc(dev);
-
- mtx_init(&sc->mtx, device_get_nameunit(dev), NULL, MTX_DEF);
-
- sc->clkdom = clkdom_create(dev);
- if (sc->clkdom == NULL) {
- device_printf(dev, "Couldn't create clkdom\n");
- return (ENXIO);
- }
-
- error = syscon_get_by_ofw_node(dev, OF_parent(ofw_bus_get_node(dev)),
- &sc->syscon);
- if (error != 0) {
- device_printf(dev, "Couldn't get syscon handle of parent\n");
- return (error);
- }
-
- for (int i = 0; i < nitems(pll_out_clks); i++) {
- error = jh7110_clk_pll_register(sc->clkdom, &pll_out_clks[i]);
- if (error != 0)
- device_printf(dev, "Couldn't register clock %s: %d\n",
- pll_out_clks[i].clkdef.name, error);
- }
-
- error = clkdom_finit(sc->clkdom);
- if (error != 0) {
- device_printf(dev, "clkdom_finit() returned %d\n", error);
- }
-
- if (bootverbose)
- clkdom_dump(sc->clkdom);
-
- return (0);
-}
-
-static void
-jh7110_clk_pll_device_lock(device_t dev)
-{
- struct jh7110_clk_pll_softc *sc;
-
- sc = device_get_softc(dev);
- mtx_lock(&sc->mtx);
-}
-
-static void
-jh7110_clk_pll_device_unlock(device_t dev)
-{
- struct jh7110_clk_pll_softc *sc;
-
- sc = device_get_softc(dev);
- mtx_unlock(&sc->mtx);
-}
-
-static clknode_method_t jh7110_pllnode_methods[] = {
- /* Device interface */
- CLKNODEMETHOD(clknode_init, jh7110_clk_pll_init),
- CLKNODEMETHOD(clknode_recalc_freq, jh7110_clk_pll_recalc_freq),
- CLKNODEMETHOD(clknode_set_freq, jh7110_clk_pll_set_freq),
-
- CLKNODEMETHOD_END
-};
-
-static device_method_t jh7110_clk_pll_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, jh7110_clk_pll_probe),
- DEVMETHOD(device_attach, jh7110_clk_pll_attach),
-
- /* clkdev interface */
- DEVMETHOD(clkdev_device_lock, jh7110_clk_pll_device_lock),
- DEVMETHOD(clkdev_device_unlock, jh7110_clk_pll_device_unlock),
-
- DEVMETHOD_END
-};
-
-DEFINE_CLASS_1(jh7110_pllnode, jh7110_pllnode_class, jh7110_pllnode_methods,
- sizeof(struct jh7110_pll_clknode_softc), clknode_class);
-DEFINE_CLASS_0(jh7110_clk_pll, jh7110_clk_pll_driver, jh7110_clk_pll_methods,
- sizeof(struct jh7110_clk_pll_softc));
-EARLY_DRIVER_MODULE(jh7110_clk_pll, simplebus, jh7110_clk_pll_driver, 0, 0,
- BUS_PASS_BUS + BUS_PASS_ORDER_EARLY);
-MODULE_VERSION(jh7110_clk_pll, 1);
-
-int
-jh7110_clk_pll_register(struct clkdom *clkdom, struct jh7110_clk_def *clkdef)
-{
- struct clknode *clk = NULL;
- struct jh7110_pll_clknode_softc *sc;
-
- clk = clknode_create(clkdom, &jh7110_pllnode_class, &clkdef->clkdef);
- if (clk == NULL)
- return (1);
-
- sc = clknode_get_softc(clk);
-
- switch (clkdef->clkdef.id) {
- case JH7110_PLLCLK_PLL0_OUT:
- sc->syscon_arr = jh7110_pll0_syscon_freq;
- sc->syscon_nitems = nitems(jh7110_pll0_syscon_freq);
- PLL_MASK_FILL(sc, 0);
- PLL_SHIFT_FILL(sc, 0);
- sc->dacpd_offset = JH7110_SYS_SYSCON_SYSCFG24;
- sc->dsmpd_offset = JH7110_SYS_SYSCON_SYSCFG24;
- sc->fbdiv_offset = JH7110_SYS_SYSCON_SYSCFG28;
- sc->frac_offset = JH7110_SYS_SYSCON_SYSCFG32;
- sc->prediv_offset = JH7110_SYS_SYSCON_SYSCFG36;
- sc->postdiv1_offset = JH7110_SYS_SYSCON_SYSCFG32;
- break;
- case JH7110_PLLCLK_PLL1_OUT:
- sc->syscon_arr = jh7110_pll1_syscon_freq;
- sc->syscon_nitems = nitems(jh7110_pll1_syscon_freq);
- PLL_MASK_FILL(sc, 1);
- PLL_SHIFT_FILL(sc, 1);
- sc->dacpd_offset = JH7110_SYS_SYSCON_SYSCFG36;
- sc->dsmpd_offset = JH7110_SYS_SYSCON_SYSCFG36;
- sc->fbdiv_offset = JH7110_SYS_SYSCON_SYSCFG36;
- sc->frac_offset = JH7110_SYS_SYSCON_SYSCFG40;
- sc->prediv_offset = JH7110_SYS_SYSCON_SYSCFG44;
- sc->postdiv1_offset = JH7110_SYS_SYSCON_SYSCFG40;
- break;
- case JH7110_PLLCLK_PLL2_OUT:
- sc->syscon_arr = jh7110_pll2_syscon_freq;
- sc->syscon_nitems = nitems(jh7110_pll2_syscon_freq);
- PLL_MASK_FILL(sc, 2);
- PLL_SHIFT_FILL(sc, 2);
- sc->dacpd_offset = JH7110_SYS_SYSCON_SYSCFG44;
- sc->dsmpd_offset = JH7110_SYS_SYSCON_SYSCFG44;
- sc->fbdiv_offset = JH7110_SYS_SYSCON_SYSCFG44;
- sc->frac_offset = JH7110_SYS_SYSCON_SYSCFG48;
- sc->prediv_offset = JH7110_SYS_SYSCON_SYSCFG52;
- sc->postdiv1_offset = JH7110_SYS_SYSCON_SYSCFG48;
- break;
- default:
- return (EINVAL);
- }
-
- clknode_register(clkdom, clk);
-
- return (0);
-}
diff --git a/sys/dev/clk/starfive/jh7110_clk_pll.h b/sys/dev/clk/starfive/jh7110_clk_pll.h
deleted file mode 100644
index 700072a4b465..000000000000
--- a/sys/dev/clk/starfive/jh7110_clk_pll.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * StarFive JH7110 PLL Clock Generator Driver
- *
- * Copyright (C) 2022 Xingyu Wu <xingyu.wu@starfivetech.com>
- */
-
-#define PLL0_DACPD_SHIFT 24
-#define PLL0_DACPD_MASK 0x1000000
-#define PLL_0_DACPD_SHIFT 24
-#define PLL_0_DACPD_MASK 0x1000000
-
-#define PLL0_DSMPD_SHIFT 25
-#define PLL0_DSMPD_MASK 0x2000000
-#define PLL0_FBDIV_SHIFT 0
-#define PLL0_FBDIV_MASK 0xFFF
-#define PLL0_FRAC_SHIFT 0
-#define PLL0_FRAC_MASK 0xFFFFFF
-#define PLL0_POSTDIV1_SHIFT 28
-#define PLL0_POSTDIV1_MASK 0x30000000
-#define PLL0_PREDIV_SHIFT 0
-#define PLL0_PREDIV_MASK 0x3F
-
-#define PLL1_DACPD_SHIFT 15
-#define PLL1_DACPD_MASK 0x8000
-#define PLL1_DSMPD_SHIFT 16
-#define PLL1_DSMPD_MASK 0x10000
-#define PLL1_FBDIV_SHIFT 17
*** 462 LINES SKIPPED ***