diff options
| author | Michal Meloun <mmel@FreeBSD.org> | 2021-03-04 14:09:32 +0000 |
|---|---|---|
| committer | Michal Meloun <mmel@FreeBSD.org> | 2021-03-04 15:12:39 +0000 |
| commit | f97f57b51855cecb9b497a90dfed06dac2c21111 (patch) | |
| tree | 1dbacb162890d7afafec817aa2efa50f4c3096dd /sys | |
| parent | 5e6989ba4f26acafc77baa6055c0a9e7fe683514 (diff) | |
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/fdt/simple_mfd.c | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/sys/dev/fdt/simple_mfd.c b/sys/dev/fdt/simple_mfd.c index 752740cf705e..aedada3079e8 100644 --- a/sys/dev/fdt/simple_mfd.c +++ b/sys/dev/fdt/simple_mfd.c @@ -73,9 +73,9 @@ static int simple_mfd_syscon_modify_4(struct syscon *syscon, bus_size_t offset, #define SYSCON_ASSERT_UNLOCKED(_sc) mtx_assert(&(_sc)->mtx, MA_NOTOWNED); static syscon_method_t simple_mfd_syscon_methods[] = { - SYSCONMETHOD(syscon_read_4, simple_mfd_syscon_read_4), - SYSCONMETHOD(syscon_write_4, simple_mfd_syscon_write_4), - SYSCONMETHOD(syscon_modify_4, simple_mfd_syscon_modify_4), + SYSCONMETHOD(syscon_unlocked_read_4, simple_mfd_syscon_read_4), + SYSCONMETHOD(syscon_unlocked_write_4, simple_mfd_syscon_write_4), + SYSCONMETHOD(syscon_unlocked_modify_4, simple_mfd_syscon_modify_4), SYSCONMETHOD_END }; @@ -89,10 +89,8 @@ simple_mfd_syscon_read_4(struct syscon *syscon, bus_size_t offset) uint32_t val; sc = device_get_softc(syscon->pdev); - - SYSCON_LOCK(sc); + SYSCON_ASSERT_LOCKED(sc);; val = bus_read_4(sc->mem_res, offset); - SYSCON_UNLOCK(sc); return (val); } @@ -103,10 +101,8 @@ simple_mfd_syscon_write_4(struct syscon *syscon, bus_size_t offset, struct simple_mfd_softc *sc; sc = device_get_softc(syscon->pdev); - - SYSCON_LOCK(sc); + SYSCON_ASSERT_LOCKED(sc); bus_write_4(sc->mem_res, offset, val); - SYSCON_UNLOCK(sc); return (0); } @@ -118,15 +114,14 @@ simple_mfd_syscon_modify_4(struct syscon *syscon, bus_size_t offset, uint32_t val; sc = device_get_softc(syscon->pdev); - - SYSCON_LOCK(sc); + SYSCON_ASSERT_LOCKED(sc); val = bus_read_4(sc->mem_res, offset); val &= ~clear_bits; val |= set_bits; bus_write_4(sc->mem_res, offset, val); - SYSCON_UNLOCK(sc); return (0); } + static int simple_mfd_syscon_get_handle(device_t dev, struct syscon **syscon) { @@ -139,6 +134,24 @@ simple_mfd_syscon_get_handle(device_t dev, struct syscon **syscon) return (0); } +static void +simple_mfd_syscon_lock(device_t dev) +{ + struct simple_mfd_softc *sc; + + sc = device_get_softc(dev); + SYSCON_LOCK(sc); +} + +static void +simple_mfd_syscon_unlock(device_t dev) +{ + struct simple_mfd_softc *sc; + + sc = device_get_softc(dev); + SYSCON_UNLOCK(sc); +} + static int simple_mfd_probe(device_t dev) { @@ -293,6 +306,9 @@ simple_mfd_add_device(device_t dev, phandle_t node, u_int order, static device_method_t simple_mfd_methods[] = { /* syscon interface */ DEVMETHOD(syscon_get_handle, simple_mfd_syscon_get_handle), + DEVMETHOD(syscon_device_lock, simple_mfd_syscon_lock), + DEVMETHOD(syscon_device_unlock, simple_mfd_syscon_unlock), + /* Device interface */ DEVMETHOD(device_probe, simple_mfd_probe), DEVMETHOD(device_attach, simple_mfd_attach), |
