git: f97f57b51855 - main - simple_mfd: switch to controllable locking for syscon provider.
Michal Meloun
mmel at FreeBSD.org
Thu Mar 4 15:17:38 UTC 2021
The branch main has been updated by mmel:
URL: https://cgit.FreeBSD.org/src/commit/?id=f97f57b51855cecb9b497a90dfed06dac2c21111
commit f97f57b51855cecb9b497a90dfed06dac2c21111
Author: Michal Meloun <mmel at FreeBSD.org>
AuthorDate: 2021-03-04 14:09:32 +0000
Commit: Michal Meloun <mmel at FreeBSD.org>
CommitDate: 2021-03-04 15:12:39 +0000
simple_mfd: switch to controllable locking for syscon provider.
MFC after 3 weeks
---
sys/dev/fdt/simple_mfd.c | 40 ++++++++++++++++++++++++++++------------
1 file 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),
More information about the dev-commits-src-main
mailing list