]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge git://git.denx.de/u-boot-dm
authorTom Rini <trini@konsulko.com>
Tue, 10 Oct 2017 00:19:39 +0000 (20:19 -0400)
committerTom Rini <trini@konsulko.com>
Tue, 10 Oct 2017 00:19:39 +0000 (20:19 -0400)
15 files changed:
arch/sandbox/cpu/os.c
drivers/core/device.c
drivers/core/ofnode.c
drivers/gpio/adi_gpio2.c
drivers/gpio/atmel_pio4.c
drivers/gpio/imx_rgpio2p.c
drivers/gpio/mxc_gpio.c
drivers/gpio/omap_gpio.c
drivers/gpio/pca953x_gpio.c
drivers/gpio/tegra186_gpio.c
drivers/gpio/vybrid_gpio.c
drivers/i2c/imx_lpi2c.c
drivers/i2c/mxc_i2c.c
drivers/i2c/tegra186_bpmp_i2c.c
test/print_ut.c

index 22d6aab5348130d2f5dc1b7778051a2facff075a..c524957b6c531afcc1d5d68d0e52c09cadb7a0ba 100644 (file)
@@ -319,6 +319,7 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp)
        DIR *dir;
        int ret;
        char *fname;
+       char *old_fname;
        int len;
        int dirlen;
 
@@ -344,16 +345,23 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp)
                        break;
                }
                next = malloc(sizeof(*node) + strlen(entry->d_name) + 1);
-               if (dirlen + strlen(entry->d_name) > len) {
-                       len = dirlen + strlen(entry->d_name);
-                       fname = realloc(fname, len);
-               }
-               if (!next || !fname) {
-                       free(next);
+               if (!next) {
                        os_dirent_free(head);
                        ret = -ENOMEM;
                        goto done;
                }
+               if (dirlen + strlen(entry->d_name) > len) {
+                       len = dirlen + strlen(entry->d_name);
+                       old_fname = fname;
+                       fname = realloc(fname, len);
+                       if (!fname) {
+                               free(old_fname);
+                               free(next);
+                               os_dirent_free(head);
+                               ret = -ENOMEM;
+                               goto done;
+                       }
+               }
                next->next = NULL;
                strcpy(next->name, entry->d_name);
                switch (entry->d_type) {
index de63e5335a813f1d5fa15016d43efcac3a162520..9a46a7bbe5e9dea953629413f35809d92def751e 100644 (file)
@@ -254,6 +254,7 @@ static void *alloc_priv(int size, uint flags)
        void *priv;
 
        if (flags & DM_FLAG_ALLOC_PRIV_DMA) {
+               size = ROUND(size, ARCH_DMA_MINALIGN);
                priv = memalign(ARCH_DMA_MINALIGN, size);
                if (priv) {
                        memset(priv, '\0', size);
index c6ca13fabf1f7fbf1ab462d89a400057f89c98e7..0030ab962ef1912bbc75673ed2c09ec172053fcf 100644 (file)
@@ -468,8 +468,10 @@ fdt_addr_t ofnode_get_addr_size(ofnode node, const char *property,
                int na, ns;
                int psize;
                const struct device_node *np = ofnode_to_np(node);
-               const __be32 *prop = of_get_property(np, "reg", &psize);
+               const __be32 *prop = of_get_property(np, property, &psize);
 
+               if (!prop)
+                       return FDT_ADDR_T_NONE;
                na = of_n_addr_cells(np);
                ns = of_n_addr_cells(np);
                *sizep = of_read_number(prop + na, ns);
index 4db08a344adbfd8b6c80dcde7fd4bfd061afefbe..1012f2d8eb8d2093621976ed91c9b8dab3432f58 100644 (file)
@@ -138,7 +138,7 @@ int peripheral_request(unsigned short per, const char *label)
                return 0;
 
        if (!(per & P_DEFINED))
-               return -ENODEV;
+               return -EINVAL;
 
        BUG_ON(ident >= MAX_RESOURCES);
 
index f3689467f01fd9a2bf25e9dc0052108c6d01b88e..30bc4296e3aa4235ac57bc659e2f14f0552ed40e 100644 (file)
@@ -50,11 +50,11 @@ static int atmel_pio4_config_io_func(u32 port, u32 pin,
        u32 reg, mask;
 
        if (pin >= ATMEL_PIO_NPINS_PER_BANK)
-               return -ENODEV;
+               return -EINVAL;
 
        port_base = atmel_pio4_port_base(port);
        if (!port_base)
-               return -ENODEV;
+               return -EINVAL;
 
        mask = 1 << pin;
        reg = func;
@@ -128,11 +128,11 @@ int atmel_pio4_set_pio_output(u32 port, u32 pin, u32 value)
        u32 reg, mask;
 
        if (pin >= ATMEL_PIO_NPINS_PER_BANK)
-               return -ENODEV;
+               return -EINVAL;
 
        port_base = atmel_pio4_port_base(port);
        if (!port_base)
-               return -ENODEV;
+               return -EINVAL;
 
        mask = 0x01 << pin;
        reg = ATMEL_PIO_CFGR_FUNC_GPIO | ATMEL_PIO_DIR_MASK;
@@ -154,11 +154,11 @@ int atmel_pio4_get_pio_input(u32 port, u32 pin)
        u32 reg, mask;
 
        if (pin >= ATMEL_PIO_NPINS_PER_BANK)
-               return -ENODEV;
+               return -EINVAL;
 
        port_base = atmel_pio4_port_base(port);
        if (!port_base)
-               return -ENODEV;
+               return -EINVAL;
 
        mask = 0x01 << pin;
        reg = ATMEL_PIO_CFGR_FUNC_GPIO;
index 5abc88ba5477fec5e044765b0e93cc4836d0f9a5..7825714e8003c0e92573c11673013de58034e909 100644 (file)
@@ -168,13 +168,18 @@ static int imx_rgpio2p_bind(struct udevice *dev)
 
        addr = devfdt_get_addr_index(dev, 1);
        if (addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        /*
         * TODO:
         * When every board is converted to driver model and DT is supported,
         * this can be done by auto-alloc feature, but not using calloc
         * to alloc memory for platdata.
+        *
+        * For example imx_rgpio2p_plat uses platform data rather than device
+        * tree.
+        *
+        * NOTE: DO NOT COPY this code if you are using device tree.
         */
        plat = calloc(1, sizeof(*plat));
        if (!plat)
index 0eb6c600f1ef4f446c4280becdb05870f6544f1b..c480eba9407a40c89575b72b94e0b2c4d01140c5 100644 (file)
@@ -304,13 +304,18 @@ static int mxc_gpio_bind(struct udevice *dev)
 
        addr = devfdt_get_addr(dev);
        if (addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        /*
         * TODO:
         * When every board is converted to driver model and DT is supported,
         * this can be done by auto-alloc feature, but not using calloc
         * to alloc memory for platdata.
+        *
+        * For example mxc_plat below uses platform data rather than device
+        * tree.
+        *
+        * NOTE: DO NOT COPY this code if you are using device tree.
         */
        plat = calloc(1, sizeof(*plat));
        if (!plat)
index b423e34ca4bfc4ad3d2a6e0aa42eebae2b8e4e90..7243100219a99399dd7b9985ed393a944ca42883 100644 (file)
@@ -299,7 +299,7 @@ static int omap_gpio_probe(struct udevice *dev)
 
 static int omap_gpio_bind(struct udevice *dev)
 {
-       struct omap_gpio_platdata *plat = dev->platdata;
+       struct omap_gpio_platdata *plat = dev_get_platdata(dev);
        fdt_addr_t base_addr;
 
        if (plat)
@@ -307,13 +307,17 @@ static int omap_gpio_bind(struct udevice *dev)
 
        base_addr = devfdt_get_addr(dev);
        if (base_addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        /*
        * TODO:
        * When every board is converted to driver model and DT is
        * supported, this can be done by auto-alloc feature, but
        * not using calloc to alloc memory for platdata.
+       *
+       * For example am33xx_gpio uses platform data rather than device tree.
+       *
+       * NOTE: DO NOT COPY this code if you are using device tree.
        */
        plat = calloc(1, sizeof(*plat));
        if (!plat)
index 4962f25230808d3c7fffba3a2eda89936007d025..791d1d15166f5585b5fe2df8537f43640144b2fd 100644 (file)
@@ -249,22 +249,11 @@ static int pca953x_probe(struct udevice *dev)
 {
        struct pca953x_info *info = dev_get_platdata(dev);
        struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
-       struct dm_i2c_chip *chip = dev_get_parent_platdata(dev);
        char name[32], *str;
        int addr;
        ulong driver_data;
        int ret;
 
-       if (!info) {
-               dev_err(dev, "platdata not ready\n");
-               return -ENOMEM;
-       }
-
-       if (!chip) {
-               dev_err(dev, "i2c not ready\n");
-               return -ENODEV;
-       }
-
        addr = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "reg", 0);
        if (addr == 0)
                return -ENODEV;
index c5a7e13cceb8f88aba4d52f3a4920232c586738e..deb59e8b32024842fdb860ec40952766395f5b95 100644 (file)
@@ -181,7 +181,7 @@ static int tegra186_gpio_bind(struct udevice *parent)
 
        regs = (uint32_t *)devfdt_get_addr_name(parent, "gpio");
        if (regs == (uint32_t *)FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        for (port = 0; port < ctlr_data->port_count; port++) {
                struct tegra186_gpio_platdata *plat;
index 89918e48ddc9e1b18898fe261072bea0ae358c32..030e8d08a453b88c210023fd905f819d9c5de69e 100644 (file)
@@ -105,32 +105,18 @@ static int vybrid_gpio_probe(struct udevice *dev)
        return 0;
 }
 
-static int vybrid_gpio_bind(struct udevice *dev)
+static int vybrid_gpio_odata_to_platdata(struct udevice *dev)
 {
-       struct vybrid_gpio_platdata *plat = dev->platdata;
+       struct vybrid_gpio_platdata *plat = dev_get_platdata(dev);
        fdt_addr_t base_addr;
 
-       if (plat)
-               return 0;
-
        base_addr = devfdt_get_addr(dev);
        if (base_addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
-
-       /*
-       * TODO:
-       * When every board is converted to driver model and DT is
-       * supported, this can be done by auto-alloc feature, but
-       * not using calloc to alloc memory for platdata.
-       */
-       plat = calloc(1, sizeof(*plat));
-       if (!plat)
-               return -ENOMEM;
+               return -EINVAL;
 
        plat->base = base_addr;
        plat->chip = dev->req_seq;
        plat->port_name = fdt_get_name(gd->fdt_blob, dev_of_offset(dev), NULL);
-       dev->platdata = plat;
 
        return 0;
 }
@@ -144,8 +130,9 @@ U_BOOT_DRIVER(gpio_vybrid) = {
        .name   = "gpio_vybrid",
        .id     = UCLASS_GPIO,
        .ops    = &gpio_vybrid_ops,
+       .of_match = vybrid_gpio_ids,
+       .ofdata_to_platdata = vybrid_gpio_odata_to_platdata,
        .probe  = vybrid_gpio_probe,
        .priv_auto_alloc_size = sizeof(struct vybrid_gpios),
-       .of_match = vybrid_gpio_ids,
-       .bind   = vybrid_gpio_bind,
+       .platdata_auto_alloc_size = sizeof(struct vybrid_gpio_platdata),
 };
index aa97196e237c903694e19cc8e0ab999f889b21a8..e7ec17fe9e1b1c83d3021fadcb0968955fa2f3c9 100644 (file)
@@ -412,7 +412,7 @@ static int imx_lpi2c_probe(struct udevice *bus)
 
        addr = devfdt_get_addr(bus);
        if (addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        i2c_bus->base = addr;
        i2c_bus->index = bus->seq;
index b7bb76c0ed0c794ce1f7e183465e06ed397353e0..abf1da2ae3ee846cc8b4a88cd662fe5a8edd55a5 100644 (file)
@@ -176,7 +176,7 @@ static int bus_i2c_set_bus_speed(struct mxc_i2c_bus *i2c_bus, int speed)
        int reg_shift = quirk ? VF610_I2C_REGSHIFT : IMX_I2C_REGSHIFT;
 
        if (!base)
-               return -ENODEV;
+               return -EINVAL;
 
        /* Store divider value */
        writeb(idx, base + (IFDR << reg_shift));
@@ -239,7 +239,7 @@ static int tx_byte(struct mxc_i2c_bus *i2c_bus, u8 byte)
        if (ret < 0)
                return ret;
        if (ret & I2SR_RX_NO_AK)
-               return -ENODEV;
+               return -EREMOTEIO;
        return 0;
 }
 
@@ -418,14 +418,14 @@ static int i2c_init_transfer(struct mxc_i2c_bus *i2c_bus, u8 chip,
                        VF610_I2C_REGSHIFT : IMX_I2C_REGSHIFT;
 
        if (!i2c_bus->base)
-               return -ENODEV;
+               return -EINVAL;
 
        for (retry = 0; retry < 3; retry++) {
                ret = i2c_init_transfer_(i2c_bus, chip, addr, alen);
                if (ret >= 0)
                        return 0;
                i2c_imx_stop(i2c_bus);
-               if (ret == -ENODEV)
+               if (ret == -EREMOTEIO)
                        return ret;
 
                printf("%s: failed for chip 0x%x retry=%d\n", __func__, chip,
@@ -754,7 +754,7 @@ static int mxc_i2c_probe(struct udevice *bus)
 
        addr = devfdt_get_addr(bus);
        if (addr == FDT_ADDR_T_NONE)
-               return -ENODEV;
+               return -EINVAL;
 
        i2c_bus->base = addr;
        i2c_bus->index = bus->seq;
@@ -783,7 +783,7 @@ static int mxc_i2c_probe(struct udevice *bus)
                    !dm_gpio_is_valid(&i2c_bus->scl_gpio) |
                    ret | ret2) {
                        dev_err(dev, "i2c bus %d at %lu, fail to request scl/sda gpio\n", bus->seq, i2c_bus->base);
-                       return -ENODEV;
+                       return -EINVAL;
                }
        }
 
index 931c6de508c02b2c0c3475470908a61f7f59b1fe..b46a09a4e07e1638f076e531225e00b18da0b57e 100644 (file)
@@ -94,7 +94,7 @@ static int tegra186_bpmp_i2c_probe(struct udevice *dev)
                                            "nvidia,bpmp-bus-id", U32_MAX);
        if (priv->bpmp_bus_id == U32_MAX) {
                debug("%s: could not parse nvidia,bpmp-bus-id\n", __func__);
-               return -ENODEV;
+               return -EINVAL;
        }
 
        return 0;
index baad289972577e6e0b63e408ceb0e85379c88572..a42c554bef8d563b86334c06671878cfced0a1a3 100644 (file)
@@ -36,6 +36,9 @@ static int do_ut_print(cmd_tbl_t *cmdtp, int flag, int argc,
        snprintf(str, 0, "testing none");
        assert(*str == 'x');
 
+       sprintf(big_str, "_%ls_", L"foo");
+       assert(!strcmp("_foo_", big_str));
+
        /* Test the banner function */
        s = display_options_get_banner(true, str, sizeof(str));
        assert(s == str);