Lines Matching +full:sys +full:- +full:syscon

1 /*-
27 /* Based on sys/arm/ti/ti_sysc.c */
29 #include <sys/param.h>
30 #include <sys/systm.h>
31 #include <sys/kernel.h>
32 #include <sys/module.h>
33 #include <sys/bus.h>
34 #include <sys/resource.h>
35 #include <sys/rman.h>
36 #include <sys/lock.h>
37 #include <sys/mutex.h>
49 #include <dev/syscon/syscon.h>
65 struct syscon * syscon; member
74 { -1, 0 }
79 { "syscon", 1 },
83 /* --- dev/extres/syscon syscon_method_t interface --- */
85 ti_scm_syscon_write_4(struct syscon *syscon, bus_size_t offset, uint32_t val) in ti_scm_syscon_write_4() argument
89 sc = device_get_softc(syscon->pdev); in ti_scm_syscon_write_4()
90 DPRINTF(sc->dev, "offset=%lx write %x\n", offset, val); in ti_scm_syscon_write_4()
91 mtx_lock(&sc->mtx); in ti_scm_syscon_write_4()
92 bus_space_write_4(sc->bst, sc->bsh, offset, val); in ti_scm_syscon_write_4()
93 mtx_unlock(&sc->mtx); in ti_scm_syscon_write_4()
98 ti_scm_syscon_read_4(struct syscon *syscon, bus_size_t offset) in ti_scm_syscon_read_4() argument
103 sc = device_get_softc(syscon->pdev); in ti_scm_syscon_read_4()
105 mtx_lock(&sc->mtx); in ti_scm_syscon_read_4()
106 val = bus_space_read_4(sc->bst, sc->bsh, offset); in ti_scm_syscon_read_4()
107 mtx_unlock(&sc->mtx); in ti_scm_syscon_read_4()
108 DPRINTF(sc->dev, "offset=%lx Read %x\n", offset, val); in ti_scm_syscon_read_4()
112 ti_scm_syscon_modify_4(struct syscon *syscon, bus_size_t offset, uint32_t clr, uint32_t set) in ti_scm_syscon_modify_4() argument
117 sc = device_get_softc(syscon->pdev); in ti_scm_syscon_modify_4()
119 mtx_lock(&sc->mtx); in ti_scm_syscon_modify_4()
120 reg = bus_space_read_4(sc->bst, sc->bsh, offset); in ti_scm_syscon_modify_4()
123 bus_space_write_4(sc->bst, sc->bsh, offset, reg); in ti_scm_syscon_modify_4()
124 mtx_unlock(&sc->mtx); in ti_scm_syscon_modify_4()
125 DPRINTF(sc->dev, "offset=%lx reg: %x (clr %x set %x)\n", offset, reg, clr, set); in ti_scm_syscon_modify_4()
151 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) in ti_scm_syscon_probe()
154 device_set_desc(dev, "TI OMAP Control Module Syscon"); in ti_scm_syscon_probe()
165 sc->dev = dev; in ti_scm_syscon_attach()
167 if (bus_alloc_resources(dev, ti_scm_syscon_res_spec, sc->res)) { in ti_scm_syscon_attach()
168 device_printf(sc->dev, "Cant allocate resources\n"); in ti_scm_syscon_attach()
172 sc->dev = dev; in ti_scm_syscon_attach()
173 sc->bst = rman_get_bustag(sc->res[0]); in ti_scm_syscon_attach()
174 sc->bsh = rman_get_bushandle(sc->res[0]); in ti_scm_syscon_attach()
176 mtx_init(&sc->mtx, device_get_nameunit(sc->dev), NULL, MTX_DEF); in ti_scm_syscon_attach()
177 node = ofw_bus_get_node(sc->dev); in ti_scm_syscon_attach()
179 /* dev/extres/syscon interface */ in ti_scm_syscon_attach()
180 sc->syscon = syscon_create_ofw_node(dev, &ti_scm_syscon_reg_class, node); in ti_scm_syscon_attach()
181 if (sc->syscon == NULL) { in ti_scm_syscon_attach()
182 device_printf(dev, "Failed to create/register syscon\n"); in ti_scm_syscon_attach()
186 simplebus_init(sc->dev, node); in ti_scm_syscon_attach()
188 bus_identify_children(sc->dev); in ti_scm_syscon_attach()
190 simplebus_add_device(sc->dev, child, 0, NULL, -1, NULL); in ti_scm_syscon_attach()
193 bus_attach_children(sc->dev); in ti_scm_syscon_attach()
197 /* syscon interface */
199 ti_scm_syscon_get_handle(device_t dev, struct syscon **syscon) in ti_scm_syscon_get_handle() argument
204 *syscon = sc->syscon; in ti_scm_syscon_get_handle()
205 if (*syscon == NULL) in ti_scm_syscon_get_handle()
217 DPRINTF(sc->dev, "offset=%lx write %x\n", addr, val); in ti_scm_syscon_clk_write_4()
218 bus_space_write_4(sc->bst, sc->bsh, addr, val); in ti_scm_syscon_clk_write_4()
229 *val = bus_space_read_4(sc->bst, sc->bsh, addr); in ti_scm_syscon_clk_read_4()
230 DPRINTF(sc->dev, "offset=%lx Read %x\n", addr, *val); in ti_scm_syscon_clk_read_4()
242 reg = bus_space_read_4(sc->bst, sc->bsh, addr); in ti_scm_syscon_clk_modify_4()
245 bus_space_write_4(sc->bst, sc->bsh, addr, reg); in ti_scm_syscon_clk_modify_4()
246 DPRINTF(sc->dev, "offset=%lx reg: %x (clr %x set %x)\n", addr, reg, clr, set); in ti_scm_syscon_clk_modify_4()
257 mtx_lock(&sc->mtx); in ti_scm_syscon_clk_device_lock()
265 mtx_unlock(&sc->mtx); in ti_scm_syscon_clk_device_unlock()
272 /* syscon interface */