]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
core: introduce dev_read_addr_name[_size]_ptr() functions
authorMatthias Schiffer <matthias.schiffer@ew.tq-group.com>
Wed, 27 Sep 2023 13:33:32 +0000 (15:33 +0200)
committerSimon Glass <sjg@chromium.org>
Fri, 13 Oct 2023 17:15:41 +0000 (10:15 -0700)
Same as dev_read_addr_name[_size](), but returns a pointer, cast
through map_sysmem().

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/core/fdtaddr.c
drivers/core/read.c
include/dm/fdtaddr.h
include/dm/read.h

index 0f4eff6707d34ae69efc4855ca03be8428917562..8e774d49ce6e18f22c44c0813f8d68f3a335fb8e 100644 (file)
@@ -153,6 +153,16 @@ fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name)
 #endif
 }
 
+void *devfdt_get_addr_name_ptr(const struct udevice *dev, const char *name)
+{
+       fdt_addr_t addr = devfdt_get_addr_name(dev, name);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_sysmem(addr, 0);
+}
+
 fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev,
                                     const char *name, fdt_size_t *size)
 {
@@ -170,6 +180,17 @@ fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev,
 #endif
 }
 
+void *devfdt_get_addr_size_name_ptr(const struct udevice *dev,
+                                   const char *name, fdt_size_t *size)
+{
+       fdt_addr_t addr = devfdt_get_addr_size_name(dev, name, size);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_sysmem(addr, 0);
+}
+
 fdt_addr_t devfdt_get_addr(const struct udevice *dev)
 {
        return devfdt_get_addr_index(dev, 0);
index 419013451f0c61fde1aa0306a8691bd77b6f6d3a..1a4a95cddea34a9f65b08e5e916a6b11516e944f 100644 (file)
@@ -181,6 +181,16 @@ fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name)
                return dev_read_addr_index(dev, index);
 }
 
+void *dev_read_addr_name_ptr(const struct udevice *dev, const char *name)
+{
+       fdt_addr_t addr = dev_read_addr_name(dev, name);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_sysmem(addr, 0);
+}
+
 fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name,
                                   fdt_size_t *size)
 {
@@ -192,6 +202,17 @@ fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name,
                return dev_read_addr_size_index(dev, index, size);
 }
 
+void *dev_read_addr_size_name_ptr(const struct udevice *dev, const char *name,
+                                 fdt_size_t *size)
+{
+       fdt_addr_t addr = dev_read_addr_size_name(dev, name, size);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_sysmem(addr, 0);
+}
+
 void *dev_remap_addr_name(const struct udevice *dev, const char *name)
 {
        fdt_addr_t addr = dev_read_addr_name(dev, name);
index c577d4369ceb4e27d0a410deee3ee03cb901047e..bf8132deb864a85ce6743f30608ba43470580351 100644 (file)
@@ -146,6 +146,19 @@ void *devfdt_get_addr_size_index_ptr(const struct udevice *dev, int index,
  */
 fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name);
 
+/**
+ * devfdt_get_addr_name_ptr() - Get the reg property of a device as a pointer,
+ *                              indexed by name
+ *
+ * @dev: Pointer to a device
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @name
+ *       indicates the value to search for in 'reg-names'.
+ *
+ * Return: Pointer to addr, or NULL if there is no such property
+ */
+void *devfdt_get_addr_name_ptr(const struct udevice *dev, const char *name);
+
 /**
  * devfdt_get_addr_size_name() - Get the reg property and its size for a device,
  *                              indexed by name
@@ -164,6 +177,24 @@ fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name);
 fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev,
                                     const char *name, fdt_size_t *size);
 
+/**
+ * devfdt_get_addr_size_name_ptr() - Get the reg property for a device as a
+ *                                   pointer, indexed by name
+ *
+ * Returns the address and size specified in the 'reg' property of a device.
+ *
+ * @dev: Pointer to a device
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @name
+ *       indicates the value to search for in 'reg-names'.
+ * @size: Pointer to size variable - this function returns the size
+ *        specified in the 'reg' property here
+ *
+ * Return: Pointer to addr, or NULL if there is no such property
+ */
+void *devfdt_get_addr_size_name_ptr(const struct udevice *dev,
+                                   const char *name, fdt_size_t *size);
+
 /**
  * devfdt_get_addr_pci() - Read an address and handle PCI address translation
  *
index 517795cc2064232f7c8af7f888430a82cdcc688b..894bc698bb49209c03e7cf74628a2600ea1be675 100644 (file)
@@ -284,6 +284,19 @@ void *dev_remap_addr_index(const struct udevice *dev, int index);
  */
 fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name);
 
+/**
+ * dev_read_addr_name_ptr() - Get the reg property of a device as a pointer,
+ *                            indexed by name
+ *
+ * @dev: Device to read from
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @name
+ *       indicates the value to search for in 'reg-names'.
+ *
+ * Return: pointer or NULL if not found
+ */
+void *dev_read_addr_name_ptr(const struct udevice *dev, const char *name);
+
 /**
  * dev_read_addr_size_name() - Get the reg property of a device, indexed by name
  *
@@ -298,6 +311,21 @@ fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name);
 fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name,
                                   fdt_size_t *size);
 
+/**
+ * dev_read_addr_size_name_ptr() - Get the reg property of a device as a pointer,
+ *                                 indexed by name
+ *
+ * @dev: Device to read from
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @name
+ *       indicates the value to search for in 'reg-names'.
+ *  @size: place to put size value (on success)
+ *
+ * Return: pointer or NULL if not found
+ */
+void *dev_read_addr_size_name_ptr(const struct udevice *dev, const char *name,
+                                 fdt_size_t *size);
+
 /**
  * dev_remap_addr_name() - Get the reg property of a device, indexed by name,
  *                         as a memory-mapped I/O pointer
@@ -980,6 +1008,12 @@ static inline fdt_addr_t dev_read_addr_name(const struct udevice *dev,
        return devfdt_get_addr_name(dev, name);
 }
 
+static inline void *dev_read_addr_name_ptr(const struct udevice *dev,
+                                          const char *name)
+{
+       return devfdt_get_addr_name_ptr(dev, name);
+}
+
 static inline fdt_addr_t dev_read_addr_size_name(const struct udevice *dev,
                                                 const char *name,
                                                 fdt_size_t *size)
@@ -987,6 +1021,13 @@ static inline fdt_addr_t dev_read_addr_size_name(const struct udevice *dev,
        return devfdt_get_addr_size_name(dev, name, size);
 }
 
+static inline void *dev_read_addr_size_name_ptr(const struct udevice *dev,
+                                               const char *name,
+                                               fdt_size_t *size)
+{
+       return devfdt_get_addr_size_name_ptr(dev, name, size);
+}
+
 static inline fdt_addr_t dev_read_addr(const struct udevice *dev)
 {
        return devfdt_get_addr(dev);