[U-Boot] [PATCH v2 00/17] bmips: convert to use live-dt

Convert bmips drivers to use live device tree instead of flattened device tree.
v2: Introduce changes suggested by Daniel Schwierzeck and Simon Glass: - Add generic dev_remap_addr/dev_remap_addr_index functions. - Fix bcm63xx_spi conversion. - Convert remaining bmips drivers (cpu, usbh-phy).
Álvaro Fernández Rojas (17): dm: core: add functions to get memory-mapped I/O addreses watchdog: bcm6345: convert to use live dt serial: bcm6345: convert to use live dt clk: bcm6345: convert to use live dt reset: bcm6345: convert to use live dt gpio: bcm6345: convert to use live dt led: bcm6358: convert to use live dt led: bcm6328: convert to use live dt power: domain: bcm6328: convert to use live dt spi: bcm63xx_spi: convert to use live dt spi: bcm63xx_hsspi: convert to use live dt ram: bmips: convert to use live dt cpu: bmips: convert to use live dt phy: bcm6348-usbh: convert to use live dt phy: bcm6358-usbh: convert to use live dt phy: bcm6368-usbh: convert to use live dt phy: bcm6318-usbh: convert to use live dt
drivers/clk/clk_bcm6345.c | 8 ++--- drivers/core/fdtaddr.c | 12 +++++++ drivers/core/read.c | 12 +++++++ drivers/cpu/bmips_cpu.c | 12 ++----- drivers/gpio/bcm6345_gpio.c | 18 +++------- drivers/led/led_bcm6328.c | 52 ++++++++++------------------- drivers/led/led_bcm6358.c | 44 +++++++++--------------- drivers/phy/bcm6318-usbh-phy.c | 10 ++---- drivers/phy/bcm6348-usbh-phy.c | 10 ++---- drivers/phy/bcm6358-usbh-phy.c | 10 ++---- drivers/phy/bcm6368-usbh-phy.c | 9 ++--- drivers/power/domain/bcm6328-power-domain.c | 8 ++--- drivers/ram/bmips_ram.c | 7 ++-- drivers/reset/reset-bcm6345.c | 8 ++--- drivers/serial/serial_bcm6345.c | 8 ++--- drivers/spi/bcm63xx_hsspi.c | 12 ++----- drivers/spi/bcm63xx_spi.c | 12 ++----- drivers/watchdog/bcm6345_wdt.c | 8 ++--- include/dm/fdtaddr.h | 22 ++++++++++++ include/dm/read.h | 32 ++++++++++++++++++ 20 files changed, 148 insertions(+), 166 deletions(-)

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 3847dd836e..8a80000332 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -132,6 +132,18 @@ void *devfdt_get_addr_ptr(struct udevice *dev) return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); }
+void *devfdt_remap_addr_index(struct udevice *dev, int index) +{ + fdt_addr_t addr = devfdt_get_addr_index(dev, index); + + return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0); +} + +void *devfdt_remap_addr(struct udevice *dev) +{ + return devfdt_remap_addr_index(dev, 0); +} + void *devfdt_map_physmem(struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev); diff --git a/drivers/core/read.c b/drivers/core/read.c index 601d1322d6..0d338563ad 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -58,6 +58,13 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); }
+void *dev_remap_addr_index(struct udevice *dev, int index) +{ + fdt_addr_t addr = dev_read_addr_index(dev, index); + + return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0); +} + fdt_addr_t dev_read_addr(struct udevice *dev) { return dev_read_addr_index(dev, 0); @@ -70,6 +77,11 @@ void *dev_read_addr_ptr(struct udevice *dev) return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); }
+void * dev_remap_addr(struct udevice *dev) +{ + return dev_remap_addr_index(dev, 0); +} + fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, fdt_size_t *sizep) { diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index c46f0e91d0..82fc5f931d 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -35,6 +35,28 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); void *devfdt_get_addr_ptr(struct udevice *dev);
/** + * devfdt_remap_addr() - Return pointer to the memory-mapped I/O address + * of the reg property of a device + * + * @dev: Pointer to a device + * + * @return Pointer to addr, or NULL if there is no such property + */ +void *devfdt_remap_addr(struct udevice *dev); + +/** + * devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped + * I/O address of the reg property of a device + * @index: the 'reg' property can hold a list of <addr, size> pairs + * and @index is used to select which one is required + * + * @dev: Pointer to a device + * + * @return Pointer to addr, or NULL if there is no such property + */ +void *devfdt_remap_addr_index(struct udevice *dev, int index); + +/** * devfdt_map_physmem() - Read device address from reg property of the * device node and map the address into CPU address * space. diff --git a/include/dm/read.h b/include/dm/read.h index f14c7a7ba8..42eb585137 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -114,6 +114,18 @@ int dev_read_size(struct udevice *dev, const char *propname); fdt_addr_t dev_read_addr_index(struct udevice *dev, int index);
/** + * dev_remap_addr_index() - Get the indexed reg property of a device + * as a memory-mapped I/O pointer + * + * @dev: Device to read from + * @index: the 'reg' property can hold a list of <addr, size> pairs + * and @index is used to select which one is required + * + * @return pointer or NULL if not found + */ +void * dev_remap_addr_index(struct udevice *dev, int index); + +/** * dev_read_addr() - Get the reg property of a device * * @dev: Device to read from @@ -133,6 +145,16 @@ fdt_addr_t dev_read_addr(struct udevice *dev); void *dev_read_addr_ptr(struct udevice *dev);
/** + * dev_remap_addr() - Get the reg property of a device as a + * memory-mapped I/O pointer + * + * @dev: Device to read from + * + * @return pointer or NULL if not found + */ +void * dev_remap_addr(struct udevice *dev); + +/** * dev_read_addr_size() - get address and size from a device property * * This does no address translation. It simply reads an property that contains @@ -483,6 +505,16 @@ static inline void *dev_read_addr_ptr(struct udevice *dev) return devfdt_get_addr_ptr(dev); }
+static inline void *dev_remap_addr(struct udevice *dev) +{ + return devfdt_remap_addr(dev); +} + +static inline void *dev_remap_addr_index(struct udevice *dev, int index) +{ + return devfdt_remap_addr_index(dev, index); +} + static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, fdt_size_t *sizep)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 3847dd836e..8a80000332 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -132,6 +132,18 @@ void *devfdt_get_addr_ptr(struct udevice *dev) return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); }
+void *devfdt_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = devfdt_get_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
hm, grepping through all arch's include directories it seems that ioremap() is not available on all archs but map_physmem() is. Maybe you should switch to map_physmem().
+}
+void *devfdt_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr_index(dev, 0);
+}
void *devfdt_map_physmem(struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev); diff --git a/drivers/core/read.c b/drivers/core/read.c index 601d1322d6..0d338563ad 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -58,6 +58,13 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); }
+void *dev_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = dev_read_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
+}
fdt_addr_t dev_read_addr(struct udevice *dev) { return dev_read_addr_index(dev, 0); @@ -70,6 +77,11 @@ void *dev_read_addr_ptr(struct udevice *dev) return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); }
+void * dev_remap_addr(struct udevice *dev) +{
- return dev_remap_addr_index(dev, 0);
+}
fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, fdt_size_t *sizep) { diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index c46f0e91d0..82fc5f931d 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -35,6 +35,28 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); void *devfdt_get_addr_ptr(struct udevice *dev);
/**
- devfdt_remap_addr() - Return pointer to the memory-mapped I/O address
of the reg property of a device
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr(struct udevice *dev);
+/**
- devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped
I/O address of the reg property of a device
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr_index(struct udevice *dev, int index);
+/**
- devfdt_map_physmem() - Read device address from reg property of the
device node and map the address into CPU address
space.
diff --git a/include/dm/read.h b/include/dm/read.h index f14c7a7ba8..42eb585137 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -114,6 +114,18 @@ int dev_read_size(struct udevice *dev, const char *propname); fdt_addr_t dev_read_addr_index(struct udevice *dev, int index);
/**
- dev_remap_addr_index() - Get the indexed reg property of a device
as a memory-mapped I/O pointer
- @dev: Device to read from
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @return pointer or NULL if not found
- */
+void * dev_remap_addr_index(struct udevice *dev, int index);
+/**
- dev_read_addr() - Get the reg property of a device
- @dev: Device to read from
@@ -133,6 +145,16 @@ fdt_addr_t dev_read_addr(struct udevice *dev); void *dev_read_addr_ptr(struct udevice *dev);
/**
- dev_remap_addr() - Get the reg property of a device as a
memory-mapped I/O pointer
- @dev: Device to read from
- @return pointer or NULL if not found
- */
+void * dev_remap_addr(struct udevice *dev);
+/**
- dev_read_addr_size() - get address and size from a device property
- This does no address translation. It simply reads an property that contains
@@ -483,6 +505,16 @@ static inline void *dev_read_addr_ptr(struct udevice *dev) return devfdt_get_addr_ptr(dev); }
+static inline void *dev_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr(dev);
+}
+static inline void *dev_remap_addr_index(struct udevice *dev, int index) +{
- return devfdt_remap_addr_index(dev, index);
+}
static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, fdt_size_t *sizep)

Hi Daniel,
El 23/03/2018 a las 15:34, Daniel Schwierzeck escribió:
On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 3847dd836e..8a80000332 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -132,6 +132,18 @@ void *devfdt_get_addr_ptr(struct udevice *dev) return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); }
+void *devfdt_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = devfdt_get_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
hm, grepping through all arch's include directories it seems that ioremap() is not available on all archs but map_physmem() is. Maybe you should switch to map_physmem().
According to this it should be safe to use ioremap: https://github.com/Noltari/u-boot/commit/9a387128e341debb6d7e32df8e0f72669a3...
+}
+void *devfdt_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr_index(dev, 0);
+}
- void *devfdt_map_physmem(struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev);
diff --git a/drivers/core/read.c b/drivers/core/read.c index 601d1322d6..0d338563ad 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -58,6 +58,13 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); }
+void *dev_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = dev_read_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
+}
- fdt_addr_t dev_read_addr(struct udevice *dev) { return dev_read_addr_index(dev, 0);
@@ -70,6 +77,11 @@ void *dev_read_addr_ptr(struct udevice *dev) return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); }
+void * dev_remap_addr(struct udevice *dev) +{
- return dev_remap_addr_index(dev, 0);
+}
- fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, fdt_size_t *sizep) {
diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index c46f0e91d0..82fc5f931d 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -35,6 +35,28 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); void *devfdt_get_addr_ptr(struct udevice *dev);
/**
- devfdt_remap_addr() - Return pointer to the memory-mapped I/O address
of the reg property of a device
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr(struct udevice *dev);
+/**
- devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped
I/O address of the reg property of a device
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr_index(struct udevice *dev, int index);
+/**
- devfdt_map_physmem() - Read device address from reg property of the
device node and map the address into CPU address
space.
diff --git a/include/dm/read.h b/include/dm/read.h index f14c7a7ba8..42eb585137 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -114,6 +114,18 @@ int dev_read_size(struct udevice *dev, const char *propname); fdt_addr_t dev_read_addr_index(struct udevice *dev, int index);
/**
- dev_remap_addr_index() - Get the indexed reg property of a device
as a memory-mapped I/O pointer
- @dev: Device to read from
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @return pointer or NULL if not found
- */
+void * dev_remap_addr_index(struct udevice *dev, int index);
+/**
- dev_read_addr() - Get the reg property of a device
- @dev: Device to read from
@@ -133,6 +145,16 @@ fdt_addr_t dev_read_addr(struct udevice *dev); void *dev_read_addr_ptr(struct udevice *dev);
/**
- dev_remap_addr() - Get the reg property of a device as a
memory-mapped I/O pointer
- @dev: Device to read from
- @return pointer or NULL if not found
- */
+void * dev_remap_addr(struct udevice *dev);
+/**
- dev_read_addr_size() - get address and size from a device property
- This does no address translation. It simply reads an property that contains
@@ -483,6 +505,16 @@ static inline void *dev_read_addr_ptr(struct udevice *dev) return devfdt_get_addr_ptr(dev); }
+static inline void *dev_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr(dev);
+}
+static inline void *dev_remap_addr_index(struct udevice *dev, int index) +{
- return devfdt_remap_addr_index(dev, index);
+}
- static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, fdt_size_t *sizep)

On 23.03.2018 18:15, Álvaro Fernández Rojas wrote:
Hi Daniel,
El 23/03/2018 a las 15:34, Daniel Schwierzeck escribió:
On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 3847dd836e..8a80000332 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -132,6 +132,18 @@ void *devfdt_get_addr_ptr(struct udevice *dev) return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); } +void *devfdt_remap_addr_index(struct udevice *dev, int index) +{ + fdt_addr_t addr = devfdt_get_addr_index(dev, index);
+ return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
hm, grepping through all arch's include directories it seems that ioremap() is not available on all archs but map_physmem() is. Maybe you should switch to map_physmem().
According to this it should be safe to use ioremap: https://github.com/Noltari/u-boot/commit/9a387128e341debb6d7e32df8e0f72669a3...
ah ok, I forgot this one ;)
+}
+void *devfdt_remap_addr(struct udevice *dev) +{ + return devfdt_remap_addr_index(dev, 0); +}
void *devfdt_map_physmem(struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev); diff --git a/drivers/core/read.c b/drivers/core/read.c index 601d1322d6..0d338563ad 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -58,6 +58,13 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); } +void *dev_remap_addr_index(struct udevice *dev, int index) +{ + fdt_addr_t addr = dev_read_addr_index(dev, index);
+ return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0); +}
fdt_addr_t dev_read_addr(struct udevice *dev) { return dev_read_addr_index(dev, 0); @@ -70,6 +77,11 @@ void *dev_read_addr_ptr(struct udevice *dev) return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); } +void * dev_remap_addr(struct udevice *dev) +{ + return dev_remap_addr_index(dev, 0); +}
fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, fdt_size_t *sizep) { diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index c46f0e91d0..82fc5f931d 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -35,6 +35,28 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); void *devfdt_get_addr_ptr(struct udevice *dev); /**
- devfdt_remap_addr() - Return pointer to the memory-mapped I/O
address
- * of the reg property of a device
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr(struct udevice *dev);
+/**
- devfdt_remap_addr_index() - Return indexed pointer to the
memory-mapped
- * I/O address of the reg property
of a device
- @index: the 'reg' property can hold a list of <addr, size> pairs
- * and @index is used to select which one is required
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr_index(struct udevice *dev, int index);
+/** * devfdt_map_physmem() - Read device address from reg property of the * device node and map the address into CPU address * space. diff --git a/include/dm/read.h b/include/dm/read.h index f14c7a7ba8..42eb585137 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -114,6 +114,18 @@ int dev_read_size(struct udevice *dev, const char *propname); fdt_addr_t dev_read_addr_index(struct udevice *dev, int index); /**
- dev_remap_addr_index() - Get the indexed reg property of a device
- * as a memory-mapped I/O pointer
- @dev: Device to read from
- @index: the 'reg' property can hold a list of <addr, size> pairs
- * and @index is used to select which one is required
- @return pointer or NULL if not found
- */
+void * dev_remap_addr_index(struct udevice *dev, int index);
+/** * dev_read_addr() - Get the reg property of a device * * @dev: Device to read from @@ -133,6 +145,16 @@ fdt_addr_t dev_read_addr(struct udevice *dev); void *dev_read_addr_ptr(struct udevice *dev); /**
- dev_remap_addr() - Get the reg property of a device as a
- * memory-mapped I/O pointer
- @dev: Device to read from
- @return pointer or NULL if not found
- */
+void * dev_remap_addr(struct udevice *dev);
+/** * dev_read_addr_size() - get address and size from a device property * * This does no address translation. It simply reads an property that contains @@ -483,6 +505,16 @@ static inline void *dev_read_addr_ptr(struct udevice *dev) return devfdt_get_addr_ptr(dev); } +static inline void *dev_remap_addr(struct udevice *dev) +{ + return devfdt_remap_addr(dev); +}
+static inline void *dev_remap_addr_index(struct udevice *dev, int index) +{ + return devfdt_remap_addr_index(dev, index); +}
static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, fdt_size_t *sizep)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Hi Simon,
On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
are you okay with these changes? I'd like to have your ACK for this patch before applying. Thanks.
diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 3847dd836e..8a80000332 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -132,6 +132,18 @@ void *devfdt_get_addr_ptr(struct udevice *dev) return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); }
+void *devfdt_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = devfdt_get_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
+}
+void *devfdt_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr_index(dev, 0);
+}
void *devfdt_map_physmem(struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev); diff --git a/drivers/core/read.c b/drivers/core/read.c index 601d1322d6..0d338563ad 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -58,6 +58,13 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); }
+void *dev_remap_addr_index(struct udevice *dev, int index) +{
- fdt_addr_t addr = dev_read_addr_index(dev, index);
- return (addr == FDT_ADDR_T_NONE) ? NULL : ioremap(addr, 0);
+}
fdt_addr_t dev_read_addr(struct udevice *dev) { return dev_read_addr_index(dev, 0); @@ -70,6 +77,11 @@ void *dev_read_addr_ptr(struct udevice *dev) return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); }
+void * dev_remap_addr(struct udevice *dev) +{
- return dev_remap_addr_index(dev, 0);
+}
fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, fdt_size_t *sizep) { diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index c46f0e91d0..82fc5f931d 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -35,6 +35,28 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); void *devfdt_get_addr_ptr(struct udevice *dev);
/**
- devfdt_remap_addr() - Return pointer to the memory-mapped I/O address
of the reg property of a device
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr(struct udevice *dev);
+/**
- devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped
I/O address of the reg property of a device
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @dev: Pointer to a device
- @return Pointer to addr, or NULL if there is no such property
- */
+void *devfdt_remap_addr_index(struct udevice *dev, int index);
+/**
- devfdt_map_physmem() - Read device address from reg property of the
device node and map the address into CPU address
space.
diff --git a/include/dm/read.h b/include/dm/read.h index f14c7a7ba8..42eb585137 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -114,6 +114,18 @@ int dev_read_size(struct udevice *dev, const char *propname); fdt_addr_t dev_read_addr_index(struct udevice *dev, int index);
/**
- dev_remap_addr_index() - Get the indexed reg property of a device
as a memory-mapped I/O pointer
- @dev: Device to read from
- @index: the 'reg' property can hold a list of <addr, size> pairs
and @index is used to select which one is required
- @return pointer or NULL if not found
- */
+void * dev_remap_addr_index(struct udevice *dev, int index);
+/**
- dev_read_addr() - Get the reg property of a device
- @dev: Device to read from
@@ -133,6 +145,16 @@ fdt_addr_t dev_read_addr(struct udevice *dev); void *dev_read_addr_ptr(struct udevice *dev);
/**
- dev_remap_addr() - Get the reg property of a device as a
memory-mapped I/O pointer
- @dev: Device to read from
- @return pointer or NULL if not found
- */
+void * dev_remap_addr(struct udevice *dev);
+/**
- dev_read_addr_size() - get address and size from a device property
- This does no address translation. It simply reads an property that contains
@@ -483,6 +505,16 @@ static inline void *dev_read_addr_ptr(struct udevice *dev) return devfdt_get_addr_ptr(dev); }
+static inline void *dev_remap_addr(struct udevice *dev) +{
- return devfdt_remap_addr(dev);
+}
+static inline void *dev_remap_addr_index(struct udevice *dev, int index) +{
- return devfdt_remap_addr_index(dev, index);
+}
static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, fdt_size_t *sizep)

Hi Daniel,
On 6 April 2018 at 20:45, Daniel Schwierzeck daniel.schwierzeck@gmail.com wrote:
Hi Simon,
On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/core/fdtaddr.c | 12 ++++++++++++ drivers/core/read.c | 12 ++++++++++++ include/dm/fdtaddr.h | 22 ++++++++++++++++++++++ include/dm/read.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+)
are you okay with these changes? I'd like to have your ACK for this patch before applying. Thanks.
It looks fine to me. I'd like to see these functions called from a sandbox test though - e.g. test/dm/test-fdt.c
Regards, Simon

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/watchdog/bcm6345_wdt.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/watchdog/bcm6345_wdt.c b/drivers/watchdog/bcm6345_wdt.c index 3ef7d438a6..2e33b24331 100644 --- a/drivers/watchdog/bcm6345_wdt.c +++ b/drivers/watchdog/bcm6345_wdt.c @@ -86,15 +86,11 @@ static const struct udevice_id bcm6345_wdt_ids[] = { static int bcm6345_wdt_probe(struct udevice *dev) { struct bcm6345_wdt_priv *priv = dev_get_priv(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - bcm6345_wdt_stop(dev);
return 0;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/watchdog/bcm6345_wdt.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/serial/serial_bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index 20f67f4b7e..4b8d09d241 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -228,17 +228,13 @@ static int bcm6345_serial_probe(struct udevice *dev) { struct bcm6345_serial_priv *priv = dev_get_priv(dev); struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
/* get address */ - addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->base = dev_remap_addr(dev); + if (!priv->base) return -EINVAL;
- priv->base = ioremap(addr, size); - /* get clock rate */ ret = clk_get_by_index(dev, 0, &clk); if (ret < 0)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/serial/serial_bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/clk/clk_bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/clk_bcm6345.c b/drivers/clk/clk_bcm6345.c index 93603fa825..7c31ca325e 100644 --- a/drivers/clk/clk_bcm6345.c +++ b/drivers/clk/clk_bcm6345.c @@ -56,15 +56,11 @@ static const struct udevice_id bcm6345_clk_ids[] = { static int bcm63xx_clk_probe(struct udevice *dev) { struct bcm6345_clk_priv *priv = dev_get_priv(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - return 0; }

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/clk/clk_bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/reset/reset-bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c index ebf6bee9e6..fb9978a116 100644 --- a/drivers/reset/reset-bcm6345.c +++ b/drivers/reset/reset-bcm6345.c @@ -67,15 +67,11 @@ static const struct udevice_id bcm6345_reset_ids[] = { static int bcm6345_reset_probe(struct udevice *dev) { struct bcm6345_reset_priv *priv = dev_get_priv(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - return 0; }

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/reset/reset-bcm6345.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr_index function.
drivers/gpio/bcm6345_gpio.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/gpio/bcm6345_gpio.c b/drivers/gpio/bcm6345_gpio.c index b9100cdc58..847b6ca076 100644 --- a/drivers/gpio/bcm6345_gpio.c +++ b/drivers/gpio/bcm6345_gpio.c @@ -14,8 +14,6 @@ #include <asm/gpio.h> #include <asm/io.h>
-DECLARE_GLOBAL_DATA_PTR; - struct bcm6345_gpio_priv { void __iomem *reg_dirout; void __iomem *reg_data; @@ -91,22 +89,16 @@ static int bcm6345_gpio_probe(struct udevice *dev) { struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); struct bcm6345_gpio_priv *priv = dev_get_priv(dev); - fdt_addr_t data_addr, dirout_addr; - fdt_size_t data_size, dirout_size;
- dirout_addr = devfdt_get_addr_size_index(dev, 0, &dirout_size); - if (dirout_addr == FDT_ADDR_T_NONE) + priv->reg_dirout = dev_remap_addr_index(dev, 0); + if (!priv->reg_dirout) return -EINVAL;
- data_addr = devfdt_get_addr_size_index(dev, 1, &data_size); - if (data_addr == FDT_ADDR_T_NONE) + priv->reg_data = dev_remap_addr_index(dev, 1); + if (!priv->reg_data) return -EINVAL;
- priv->reg_data = ioremap(data_addr, data_size); - priv->reg_dirout = ioremap(dirout_addr, dirout_size); - - uc_priv->gpio_count = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), - "ngpios", 32); + uc_priv->gpio_count = dev_read_u32_default(dev, "ngpios", 32); uc_priv->bank_name = dev->name;
return 0;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr_index function.
drivers/gpio/bcm6345_gpio.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/led/led_bcm6358.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-)
diff --git a/drivers/led/led_bcm6358.c b/drivers/led/led_bcm6358.c index e8a3b64e68..86ec7aba75 100644 --- a/drivers/led/led_bcm6358.c +++ b/drivers/led/led_bcm6358.c @@ -32,8 +32,6 @@ #define LED_CTRL_BUSY_SHIFT 3 #define LED_CTRL_BUSY_MASK (1 << LED_CTRL_BUSY_SHIFT)
-DECLARE_GLOBAL_DATA_PTR; - struct bcm6358_led_priv { void __iomem *regs; uint8_t pin; @@ -115,8 +113,6 @@ static const struct led_ops bcm6358_led_ops = { static int bcm6358_led_probe(struct udevice *dev) { struct led_uc_plat *uc_plat = dev_get_uclass_platdata(dev); - fdt_addr_t addr; - fdt_size_t size;
/* Top-level LED node */ if (!uc_plat->label) { @@ -124,17 +120,14 @@ static int bcm6358_led_probe(struct udevice *dev) unsigned int clk_div; u32 set_bits = 0;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + regs = dev_remap_addr(dev); + if (!regs) return -EINVAL;
- regs = ioremap(addr, size); - - if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,clk-dat-low")) + if (dev_read_bool(dev, "brcm,clk-dat-low")) set_bits |= LED_CTRL_POL_MASK; - clk_div = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), - "brcm,clk-div", LED_CTRL_CLK_1); + clk_div = dev_read_u32_default(dev, "brcm,clk-div", + LED_CTRL_CLK_1); switch (clk_div) { case 8: set_bits |= LED_CTRL_CLK_8; @@ -158,21 +151,17 @@ static int bcm6358_led_probe(struct udevice *dev) struct bcm6358_led_priv *priv = dev_get_priv(dev); unsigned int pin;
- addr = devfdt_get_addr_size_index(dev_get_parent(dev), 0, - &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- pin = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "reg", - LEDS_MAX); + pin = dev_read_u32_default(dev, "reg", LEDS_MAX); if (pin >= LEDS_MAX) return -EINVAL;
- priv->regs = ioremap(addr, size); priv->pin = pin;
- if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "active-low")) + if (dev_read_bool(dev, "active-low")) priv->active_low = true; }
@@ -181,27 +170,24 @@ static int bcm6358_led_probe(struct udevice *dev)
static int bcm6358_led_bind(struct udevice *parent) { - const void *blob = gd->fdt_blob; - int node; + ofnode node;
- for (node = fdt_first_subnode(blob, dev_of_offset(parent)); - node > 0; - node = fdt_next_subnode(blob, node)) { + dev_for_each_subnode(node, parent) { struct led_uc_plat *uc_plat; struct udevice *dev; const char *label; int ret;
- label = fdt_getprop(blob, node, "label", NULL); + label = ofnode_read_string(node, "label"); if (!label) { debug("%s: node %s has no label\n", __func__, - fdt_get_name(blob, node, NULL)); + ofnode_get_name(node)); return -EINVAL; }
ret = device_bind_driver_to_node(parent, "bcm6358-led", - fdt_get_name(blob, node, NULL), - offset_to_ofnode(node), &dev); + ofnode_get_name(node), + node, &dev); if (ret) return ret;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/led/led_bcm6358.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/led/led_bcm6328.c | 52 ++++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 35 deletions(-)
diff --git a/drivers/led/led_bcm6328.c b/drivers/led/led_bcm6328.c index 5d545c5096..a8cc5c5167 100644 --- a/drivers/led/led_bcm6328.c +++ b/drivers/led/led_bcm6328.c @@ -38,8 +38,6 @@ #define LED_MODE_OFF 3 #define LED_MODE_MASK 0x3
-DECLARE_GLOBAL_DATA_PTR; - struct bcm6328_led_priv { void __iomem *regs; void __iomem *mode; @@ -150,34 +148,25 @@ static const struct led_ops bcm6328_led_ops = { static int bcm6328_led_probe(struct udevice *dev) { struct led_uc_plat *uc_plat = dev_get_uclass_platdata(dev); - fdt_addr_t addr; - fdt_size_t size;
/* Top-level LED node */ if (!uc_plat->label) { void __iomem *regs; u32 set_bits = 0;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + regs = dev_remap_addr(dev); + if (!regs) return -EINVAL;
- regs = ioremap(addr, size); - - if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,serial-leds")) + if (dev_read_bool(dev, "brcm,serial-leds")) set_bits |= LED_INIT_SLEDEN_MASK; - if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,serial-mux")) + if (dev_read_bool(dev, "brcm,serial-mux")) set_bits |= LED_INIT_SLEDMUX_MASK; - if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,serial-clk-low")) + if (dev_read_bool(dev, "brcm,serial-clk-low")) set_bits |= LED_INIT_SLEDCLKNPOL_MASK; - if (!fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,serial-dat-low")) + if (!dev_read_bool(dev, "brcm,serial-dat-low")) set_bits |= LED_INIT_SLEDDATANPOL_MASK; - if (!fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "brcm,serial-shift-inv")) + if (!dev_read_bool(dev, "brcm,serial-shift-inv")) set_bits |= LED_INIT_SLEDSHIFTDIR_MASK;
clrsetbits_be32(regs + LED_INIT_REG, ~0, set_bits); @@ -185,17 +174,14 @@ static int bcm6328_led_probe(struct udevice *dev) struct bcm6328_led_priv *priv = dev_get_priv(dev); unsigned int pin;
- addr = devfdt_get_addr_size_index(dev_get_parent(dev), 0, - &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- pin = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), "reg", - LEDS_MAX); + pin = dev_read_u32_default(dev, "reg", LEDS_MAX); if (pin >= LEDS_MAX) return -EINVAL;
- priv->regs = ioremap(addr, size); if (pin < 8) { /* LEDs 0-7 (bits 47:32) */ priv->mode = priv->regs + LED_MODE_REG_HI; @@ -206,8 +192,7 @@ static int bcm6328_led_probe(struct udevice *dev) priv->shift = ((pin - 8) << 1); }
- if (fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev), - "active-low")) + if (dev_read_bool(dev, "active-low")) priv->active_low = true; }
@@ -216,27 +201,24 @@ static int bcm6328_led_probe(struct udevice *dev)
static int bcm6328_led_bind(struct udevice *parent) { - const void *blob = gd->fdt_blob; - int node; + ofnode node;
- for (node = fdt_first_subnode(blob, dev_of_offset(parent)); - node > 0; - node = fdt_next_subnode(blob, node)) { + dev_for_each_subnode(node, parent) { struct led_uc_plat *uc_plat; struct udevice *dev; const char *label; int ret;
- label = fdt_getprop(blob, node, "label", NULL); + label = ofnode_read_string(node, "label"); if (!label) { debug("%s: node %s has no label\n", __func__, - fdt_get_name(blob, node, NULL)); + ofnode_get_name(node)); return -EINVAL; }
ret = device_bind_driver_to_node(parent, "bcm6328-led", - fdt_get_name(blob, node, NULL), - offset_to_ofnode(node), &dev); + ofnode_get_name(node), + node, &dev); if (ret) return ret;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/led/led_bcm6328.c | 52 ++++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 35 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/power/domain/bcm6328-power-domain.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/power/domain/bcm6328-power-domain.c b/drivers/power/domain/bcm6328-power-domain.c index 776afa3d43..6a64f6bb2c 100644 --- a/drivers/power/domain/bcm6328-power-domain.c +++ b/drivers/power/domain/bcm6328-power-domain.c @@ -49,15 +49,11 @@ static int bcm6328_power_domain_off(struct power_domain *power_domain) static int bcm6328_power_domain_probe(struct udevice *dev) { struct bcm6328_power_domain *priv = dev_get_priv(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - return 0; }

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/power/domain/bcm6328-power-domain.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck and Simon Glass: - Use generic dev_remap_addr function. - Fix bcm63xx_spi conversion.
drivers/spi/bcm63xx_spi.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/drivers/spi/bcm63xx_spi.c b/drivers/spi/bcm63xx_spi.c index f0df6871d8..c61c5d49b4 100644 --- a/drivers/spi/bcm63xx_spi.c +++ b/drivers/spi/bcm63xx_spi.c @@ -16,8 +16,6 @@ #include <wait_bit.h> #include <asm/io.h>
-DECLARE_GLOBAL_DATA_PTR; - /* BCM6348 SPI core */ #define SPI_6348_CLK 0x06 #define SPI_6348_CMD 0x00 @@ -374,18 +372,14 @@ static int bcm63xx_spi_probe(struct udevice *dev) (const unsigned long *)dev_get_driver_data(dev); struct reset_ctl rst_ctl; struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->base = dev_remap_addr(dev); + if (!priv->base) return -EINVAL;
priv->regs = regs; - priv->base = ioremap(addr, size); - priv->num_cs = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), - "num-cs", 8); + priv->num_cs = dev_read_u32_default(dev, "num-cs", 8);
/* enable clock */ ret = clk_get_by_index(dev, 0, &clk);

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck and Simon Glass:
- Use generic dev_remap_addr function.
- Fix bcm63xx_spi conversion.
drivers/spi/bcm63xx_spi.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/spi/bcm63xx_hsspi.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/drivers/spi/bcm63xx_hsspi.c b/drivers/spi/bcm63xx_hsspi.c index 3393166a1e..a4eecc9b19 100644 --- a/drivers/spi/bcm63xx_hsspi.c +++ b/drivers/spi/bcm63xx_hsspi.c @@ -16,8 +16,6 @@ #include <wait_bit.h> #include <asm/io.h>
-DECLARE_GLOBAL_DATA_PTR; - #define HSSPI_PP 0
#define SPI_MAX_SYNC_CLOCK 30000000 @@ -338,17 +336,13 @@ static int bcm63xx_hsspi_probe(struct udevice *dev) struct bcm63xx_hsspi_priv *priv = dev_get_priv(dev); struct reset_ctl rst_ctl; struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - priv->num_cs = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), - "num-cs", 8); + priv->num_cs = dev_read_u32_default(dev, "num-cs", 8);
/* enable clock */ ret = clk_get_by_name(dev, "hsspi", &clk);

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/spi/bcm63xx_hsspi.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org --- v2: Introduce changes suggested by Daniel Schwierzeck: - Use generic dev_remap_addr function.
drivers/ram/bmips_ram.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/ram/bmips_ram.c b/drivers/ram/bmips_ram.c index 7a5dfac4ab..22b08715a5 100644 --- a/drivers/ram/bmips_ram.c +++ b/drivers/ram/bmips_ram.c @@ -151,14 +151,11 @@ static int bmips_ram_probe(struct udevice *dev) struct bmips_ram_priv *priv = dev_get_priv(dev); const struct bmips_ram_hw *hw = (const struct bmips_ram_hw *)dev_get_driver_data(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); priv->hw = hw;
return 0;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com Reviewed-by: Simon Glass sjg@chromium.org
v2: Introduce changes suggested by Daniel Schwierzeck:
- Use generic dev_remap_addr function.
drivers/ram/bmips_ram.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/cpu/bmips_cpu.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/drivers/cpu/bmips_cpu.c b/drivers/cpu/bmips_cpu.c index 6c612bacdc..f766be22e6 100644 --- a/drivers/cpu/bmips_cpu.c +++ b/drivers/cpu/bmips_cpu.c @@ -14,8 +14,6 @@ #include <errno.h> #include <asm/io.h>
-DECLARE_GLOBAL_DATA_PTR; - #define REV_CHIPID_SHIFT 16 #define REV_CHIPID_MASK (0xffff << REV_CHIPID_SHIFT) #define REV_LONG_CHIPID_SHIFT 12 @@ -398,8 +396,7 @@ int bmips_cpu_bind(struct udevice *dev) { struct cpu_platdata *plat = dev_get_parent_platdata(dev);
- plat->cpu_id = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), - "reg", -1); + plat->cpu_id = dev_read_u32_default(dev, "reg", -1); plat->device_id = read_c0_prid();
return 0; @@ -410,14 +407,11 @@ int bmips_cpu_probe(struct udevice *dev) struct bmips_cpu_priv *priv = dev_get_priv(dev); const struct bmips_cpu_hw *hw = (const struct bmips_cpu_hw *)dev_get_driver_data(dev); - fdt_addr_t addr; - fdt_size_t size;
- addr = devfdt_get_addr_size_index(dev_get_parent(dev), 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); priv->hw = hw;
return 0;

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/cpu/bmips_cpu.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/phy/bcm6348-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/bcm6348-usbh-phy.c b/drivers/phy/bcm6348-usbh-phy.c index 169ee0ecec..a0134c3e43 100644 --- a/drivers/phy/bcm6348-usbh-phy.c +++ b/drivers/phy/bcm6348-usbh-phy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Ãlvaro Fernández Rojas noltari@gmail.com + * Copyright (C) 2018 Álvaro Fernández Rojas noltari@gmail.com * * Derived from linux/arch/mips/bcm63xx/usb-common.c: * Copyright 2008 Maxime Bizon mbizon@freebox.fr @@ -45,16 +45,12 @@ static int bcm6348_usbh_probe(struct udevice *dev) struct bcm6348_usbh_priv *priv = dev_get_priv(dev); struct reset_ctl rst_ctl; struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - /* enable usbh clock */ ret = clk_get_by_name(dev, "usbh", &clk); if (ret < 0)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Also fix bad accents in my name.
not sure why but some of the downloaded patches from Patchwork seemed to be messed up. I also had to fix the author field in the commit message when I applied your patches.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/phy/bcm6348-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/phy/bcm6358-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/bcm6358-usbh-phy.c b/drivers/phy/bcm6358-usbh-phy.c index e000316a93..00637ece51 100644 --- a/drivers/phy/bcm6358-usbh-phy.c +++ b/drivers/phy/bcm6358-usbh-phy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Ãlvaro Fernández Rojas noltari@gmail.com + * Copyright (C) 2018 Álvaro Fernández Rojas noltari@gmail.com * * Derived from linux/arch/mips/bcm63xx/usb-common.c: * Copyright 2008 Maxime Bizon mbizon@freebox.fr @@ -58,16 +58,12 @@ static int bcm6358_usbh_probe(struct udevice *dev) { struct bcm6358_usbh_priv *priv = dev_get_priv(dev); struct reset_ctl rst_ctl; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - /* perform reset */ ret = reset_get_by_index(dev, 0, &rst_ctl); if (ret < 0)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/phy/bcm6358-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/phy/bcm6368-usbh-phy.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/phy/bcm6368-usbh-phy.c b/drivers/phy/bcm6368-usbh-phy.c index 71abc0fcc4..2c4288c9b8 100644 --- a/drivers/phy/bcm6368-usbh-phy.c +++ b/drivers/phy/bcm6368-usbh-phy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Ãlvaro Fernández Rojas noltari@gmail.com + * Copyright (C) 2018 Álvaro Fernández Rojas noltari@gmail.com * * Derived from linux/arch/mips/bcm63xx/usb-common.c: * Copyright 2008 Maxime Bizon mbizon@freebox.fr @@ -117,15 +117,12 @@ static int bcm6368_usbh_probe(struct udevice *dev) #endif struct reset_ctl rst_ctl; struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); priv->hw = hw;
/* enable usbh clock */

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/phy/bcm6368-usbh-phy.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/phy/bcm6318-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/bcm6318-usbh-phy.c b/drivers/phy/bcm6318-usbh-phy.c index 6d54214581..043d8ff842 100644 --- a/drivers/phy/bcm6318-usbh-phy.c +++ b/drivers/phy/bcm6318-usbh-phy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Ãlvaro Fernández Rojas noltari@gmail.com + * Copyright (C) 2018 Álvaro Fernández Rojas noltari@gmail.com * * Derived from linux/arch/mips/bcm63xx/usb-common.c: * Copyright 2008 Maxime Bizon mbizon@freebox.fr @@ -80,16 +80,12 @@ static int bcm6318_usbh_probe(struct udevice *dev) struct power_domain pwr_dom; struct reset_ctl rst_ctl; struct clk clk; - fdt_addr_t addr; - fdt_size_t size; int ret;
- addr = devfdt_get_addr_size_index(dev, 0, &size); - if (addr == FDT_ADDR_T_NONE) + priv->regs = dev_remap_addr(dev); + if (!priv->regs) return -EINVAL;
- priv->regs = ioremap(addr, size); - /* enable usbh clock */ ret = clk_get_by_name(dev, "usbh", &clk); if (ret < 0)

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Also fix bad accents in my name.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/phy/bcm6318-usbh-phy.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com

On 22.03.2018 19:39, Álvaro Fernández Rojas wrote:
Convert bmips drivers to use live device tree instead of flattened device tree.
v2: Introduce changes suggested by Daniel Schwierzeck and Simon Glass:
- Add generic dev_remap_addr/dev_remap_addr_index functions.
- Fix bcm63xx_spi conversion.
- Convert remaining bmips drivers (cpu, usbh-phy).
Álvaro Fernández Rojas (17): dm: core: add functions to get memory-mapped I/O addreses watchdog: bcm6345: convert to use live dt serial: bcm6345: convert to use live dt clk: bcm6345: convert to use live dt reset: bcm6345: convert to use live dt gpio: bcm6345: convert to use live dt led: bcm6358: convert to use live dt led: bcm6328: convert to use live dt power: domain: bcm6328: convert to use live dt spi: bcm63xx_spi: convert to use live dt spi: bcm63xx_hsspi: convert to use live dt ram: bmips: convert to use live dt cpu: bmips: convert to use live dt phy: bcm6348-usbh: convert to use live dt phy: bcm6358-usbh: convert to use live dt phy: bcm6368-usbh: convert to use live dt phy: bcm6318-usbh: convert to use live dt
drivers/clk/clk_bcm6345.c | 8 ++--- drivers/core/fdtaddr.c | 12 +++++++ drivers/core/read.c | 12 +++++++ drivers/cpu/bmips_cpu.c | 12 ++----- drivers/gpio/bcm6345_gpio.c | 18 +++------- drivers/led/led_bcm6328.c | 52 ++++++++++------------------- drivers/led/led_bcm6358.c | 44 +++++++++--------------- drivers/phy/bcm6318-usbh-phy.c | 10 ++---- drivers/phy/bcm6348-usbh-phy.c | 10 ++---- drivers/phy/bcm6358-usbh-phy.c | 10 ++---- drivers/phy/bcm6368-usbh-phy.c | 9 ++--- drivers/power/domain/bcm6328-power-domain.c | 8 ++--- drivers/ram/bmips_ram.c | 7 ++-- drivers/reset/reset-bcm6345.c | 8 ++--- drivers/serial/serial_bcm6345.c | 8 ++--- drivers/spi/bcm63xx_hsspi.c | 12 ++----- drivers/spi/bcm63xx_spi.c | 12 ++----- drivers/watchdog/bcm6345_wdt.c | 8 ++--- include/dm/fdtaddr.h | 22 ++++++++++++ include/dm/read.h | 32 ++++++++++++++++++ 20 files changed, 148 insertions(+), 166 deletions(-)
applied to u-boot-mips/next and scheduled for 2018.07-rc1
Patch 01/17 has been replaced with https://patchwork.ozlabs.org/patch/906412/
participants (3)
-
Daniel Schwierzeck
-
Simon Glass
-
Álvaro Fernández Rojas