Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F177394266
D55909.1794282987.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
D55909.1794282987.diff
View Options
diff --git a/sys/dev/clk/broadcom/bcm_cprman.h b/sys/dev/clk/broadcom/bcm_clk_stub.h
copy from sys/dev/clk/broadcom/bcm_cprman.h
copy to sys/dev/clk/broadcom/bcm_clk_stub.h
--- a/sys/dev/clk/broadcom/bcm_cprman.h
+++ b/sys/dev/clk/broadcom/bcm_clk_stub.h
@@ -25,42 +25,19 @@
* SUCH DAMAGE.
*/
-#ifndef BCM_CPRMAN_H
-#define BCM_CPRMAN_H
+#ifndef BCM_CLK_STUB_H
+#define BCM_CLK_STUB_H
#include <sys/types.h>
-#include <sys/bus.h>
-#include <sys/mutex.h>
-#include <dev/clk/broadcom/bcm_clk_periph.h>
-#include <dev/clk/broadcom/bcm_clk_pll.h>
-#include <dev/clk/broadcom/bcm_clk_pll_channel.h>
+#include <dev/clk/clk.h>
-struct bcm_cprman_clk_data {
- const struct bcm_clk_periph_def *periph_clks;
- size_t periph_clk_cnt;
-
- const struct bcm_clk_pll_def *pll_clks;
- size_t pll_clk_cnt;
-
- const struct bcm_clk_pll_channel_def *pll_chan_clks;
- size_t pll_chan_clk_cnt;
-};
-
-struct bcm_cprman_softc {
- device_t dev;
- struct resource *res;
- struct clkdom *clkdom;
- struct mtx mtx;
- const struct bcm_cprman_clk_data *clk_data;
+struct bcm_clk_stub_def {
+ struct clknode_init_def clkdef;
+ uint64_t freq;
};
-int bcm_cprman_attach(device_t dev);
-
-/*
- * Base kobj class that provides the clkdev interface (read/write/lock).
- * Chip-specific drivers inherit from this via DEFINE_CLASS_1.
- */
-DECLARE_CLASS(bcm_cprman_driver);
+int bcm_clk_stub_register(struct clkdom *clkdom,
+ const struct bcm_clk_stub_def *clkdef);
-#endif /* BCM_CPRMAN_H */
+#endif /* BCM_CLK_STUB_H */
diff --git a/sys/dev/clk/broadcom/bcm_cprman.h b/sys/dev/clk/broadcom/bcm_clk_stub.c
copy from sys/dev/clk/broadcom/bcm_cprman.h
copy to sys/dev/clk/broadcom/bcm_clk_stub.c
--- a/sys/dev/clk/broadcom/bcm_cprman.h
+++ b/sys/dev/clk/broadcom/bcm_clk_stub.c
@@ -25,42 +25,68 @@
* SUCH DAMAGE.
*/
-#ifndef BCM_CPRMAN_H
-#define BCM_CPRMAN_H
+#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <sys/bus.h>
-#include <sys/mutex.h>
+#include <sys/param.h>
+#include <sys/systm.h>
-#include <dev/clk/broadcom/bcm_clk_periph.h>
-#include <dev/clk/broadcom/bcm_clk_pll.h>
-#include <dev/clk/broadcom/bcm_clk_pll_channel.h>
+#include <dev/clk/broadcom/bcm_clk_stub.h>
-struct bcm_cprman_clk_data {
- const struct bcm_clk_periph_def *periph_clks;
- size_t periph_clk_cnt;
+struct bcm_clk_stub_sc {
+ uint64_t freq;
+};
- const struct bcm_clk_pll_def *pll_clks;
- size_t pll_clk_cnt;
+static int
+bcm_clk_stub_recalc(struct clknode *clk, uint64_t *freq)
+{
+ struct bcm_clk_stub_sc *sc;
- const struct bcm_clk_pll_channel_def *pll_chan_clks;
- size_t pll_chan_clk_cnt;
-};
+ sc = clknode_get_softc(clk);
+ *freq = sc->freq;
+
+ return (0);
+}
+
+static int
+bcm_clk_stub_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout,
+ int flags, int *stop)
+{
+ struct bcm_clk_stub_sc *sc;
+
+ sc = clknode_get_softc(clk);
+ *stop = 1;
+ if (*fout != sc->freq)
+ return (ERANGE);
-struct bcm_cprman_softc {
- device_t dev;
- struct resource *res;
- struct clkdom *clkdom;
- struct mtx mtx;
- const struct bcm_cprman_clk_data *clk_data;
+ return (0);
+}
+
+static clknode_method_t bcm_clk_stub_clknode_methods[] = {
+ CLKNODEMETHOD(clknode_recalc_freq, bcm_clk_stub_recalc),
+ CLKNODEMETHOD(clknode_set_freq, bcm_clk_stub_set_freq),
+ CLKNODEMETHOD_END
};
-int bcm_cprman_attach(device_t dev);
+DEFINE_CLASS_1(bcm_clk_stub_clknode, bcm_clk_stub_clknode_class,
+ bcm_clk_stub_clknode_methods, sizeof(struct bcm_clk_stub_sc),
+ clknode_class);
-/*
- * Base kobj class that provides the clkdev interface (read/write/lock).
- * Chip-specific drivers inherit from this via DEFINE_CLASS_1.
- */
-DECLARE_CLASS(bcm_cprman_driver);
+int
+bcm_clk_stub_register(struct clkdom *clkdom,
+ const struct bcm_clk_stub_def *clkdef)
+{
+ struct bcm_clk_stub_sc *sc;
+ struct clknode *clk;
+
+ clk = clknode_create(clkdom, &bcm_clk_stub_clknode_class,
+ &clkdef->clkdef);
+ if (clk == NULL)
+ return (ENOMEM);
+
+ sc = clknode_get_softc(clk);
+ sc->freq = clkdef->freq;
+
+ clknode_register(clkdom, clk);
-#endif /* BCM_CPRMAN_H */
+ return (0);
+}
diff --git a/sys/dev/clk/broadcom/bcm_cprman.h b/sys/dev/clk/broadcom/bcm_cprman.h
--- a/sys/dev/clk/broadcom/bcm_cprman.h
+++ b/sys/dev/clk/broadcom/bcm_cprman.h
@@ -35,8 +35,11 @@
#include <dev/clk/broadcom/bcm_clk_periph.h>
#include <dev/clk/broadcom/bcm_clk_pll.h>
#include <dev/clk/broadcom/bcm_clk_pll_channel.h>
+#include <dev/clk/broadcom/bcm_clk_stub.h>
struct bcm_cprman_clk_data {
+ const struct bcm_clk_stub_def *stub_clks;
+ size_t stub_clk_cnt;
const struct bcm_clk_periph_def *periph_clks;
size_t periph_clk_cnt;
diff --git a/sys/dev/clk/broadcom/bcm_cprman.c b/sys/dev/clk/broadcom/bcm_cprman.c
--- a/sys/dev/clk/broadcom/bcm_cprman.c
+++ b/sys/dev/clk/broadcom/bcm_cprman.c
@@ -116,6 +116,22 @@
mtx_unlock_spin(&sc->mtx);
}
+static int
+bcm_cprman_register_stub_clks(struct bcm_cprman_softc *sc)
+{
+ int error;
+ size_t i;
+
+ for (i = 0; i < sc->clk_data->stub_clk_cnt; i++) {
+ error = bcm_clk_stub_register(sc->clkdom,
+ &sc->clk_data->stub_clks[i]);
+ if (error != 0)
+ return (error);
+ }
+
+ return (0);
+}
+
static int
bcm_cprman_register_periph_clks(struct bcm_cprman_softc *sc)
{
@@ -192,6 +208,12 @@
return (ENXIO);
}
+ error = bcm_cprman_register_stub_clks(sc);
+ if (error != 0) {
+ device_printf(dev, "cannot register stub clocks\n");
+ return (ENXIO);
+ }
+
error = bcm_cprman_register_plls(sc);
if (error != 0) {
device_printf(dev, "cannot register PLL clocks\n");
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 10, 3:56 AM (16 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41626545
Default Alt Text
D55909.1794282987.diff (5 KB)
Attached To
Mode
D55909: clk/broadcom: Add stub clock node for unimplemented clock sources
Attached
Detach File
Event Timeline