]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: treewide: Use uclass_first_device_err when accessing one device
authorMichal Suchanek <msuchanek@suse.de>
Wed, 12 Oct 2022 19:57:59 +0000 (21:57 +0200)
committerSimon Glass <sjg@chromium.org>
Tue, 18 Oct 2022 03:17:12 +0000 (21:17 -0600)
There is a number of users that use uclass_first_device to access the
first and (assumed) only device in uclass.

Some check the return value of uclass_first_device and also that a
device was returned which is exactly what uclass_first_device_err does.

Some are not checking that a device was returned and can potentially
crash if no device exists in the uclass. Finally there is one that
returns NULL on error either way.

Convert all of these to use uclass_first_device_err instead, the return
value will be removed from uclass_first_device in a later patch.

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
25 files changed:
arch/arm/mach-omap2/am33xx/board.c
arch/x86/cpu/broadwell/cpu.c
arch/x86/cpu/intel_common/cpu.c
arch/x86/lib/pinctrl_ich6.c
board/intel/cougarcanyon2/cougarcanyon2.c
drivers/mmc/omap_hsmmc.c
drivers/serial/serial-uclass.c
drivers/serial/serial_bcm283x_mu.c
drivers/serial/serial_bcm283x_pl011.c
drivers/sysreset/sysreset_ast.c
drivers/video/exynos/exynos_fb.c
drivers/video/mali_dp.c
drivers/video/stm32/stm32_dsi.c
drivers/video/tegra124/dp.c
lib/acpi/acpi_table.c
lib/efi_loader/efi_gop.c
net/eth-uclass.c
test/boot/bootmeth.c
test/dm/acpi.c
test/dm/devres.c
test/dm/i2c.c
test/dm/virtio_device.c
test/dm/virtio_rng.c
test/fuzz/cmd_fuzz.c
test/fuzz/virtio.c

index 7f1b84e466da6c8383fef21315b4eb14bcfb54c2..f393ff91441f5afe86241a0e579c0b53b57b9f1c 100644 (file)
@@ -265,8 +265,8 @@ int arch_misc_init(void)
        struct udevice *dev;
        int ret;
 
-       ret = uclass_first_device(UCLASS_MISC, &dev);
-       if (ret || !dev)
+       ret = uclass_first_device_err(UCLASS_MISC, &dev);
+       if (ret)
                return ret;
 
 #if defined(CONFIG_DM_ETH) && defined(CONFIG_USB_ETHER)
index 2adcf4b242c5a37e94b298566cc3512dd8cac95a..7877961451a6deb055304ee4132238b3291b88a0 100644 (file)
@@ -31,11 +31,9 @@ static int broadwell_init_cpu(void *ctx, struct event *event)
        int ret;
 
        /* Start up the LPC so we have serial */
-       ret = uclass_first_device(UCLASS_LPC, &dev);
+       ret = uclass_first_device_err(UCLASS_LPC, &dev);
        if (ret)
                return ret;
-       if (!dev)
-               return -ENODEV;
        ret = cpu_set_flex_ratio_to_tdp_nominal();
        if (ret)
                return ret;
index 96d05e2eb3a129e33fb6b860447d0579af71bd0e..8f489e6c651c0203f7fa8743b38247837bb3949a 100644 (file)
@@ -61,11 +61,9 @@ int cpu_common_init(void)
        /* Early chipset init required before RAM init can work */
        uclass_first_device(UCLASS_NORTHBRIDGE, &dev);
 
-       ret = uclass_first_device(UCLASS_LPC, &lpc);
+       ret = uclass_first_device_err(UCLASS_LPC, &lpc);
        if (ret)
                return ret;
-       if (!lpc)
-               return -ENODEV;
 
        /* Cause the SATA device to do its early init */
        uclass_first_device(UCLASS_AHCI, &dev);
index fd5e311b29169771b5edc54e231744b8f24cbb9c..c93f245845de46f421aa37078edbeb45bd4884d0 100644 (file)
@@ -160,11 +160,9 @@ static int ich6_pinctrl_probe(struct udevice *dev)
        u32 iobase = -1;
 
        debug("%s: start\n", __func__);
-       ret = uclass_first_device(UCLASS_PCH, &pch);
+       ret = uclass_first_device_err(UCLASS_PCH, &pch);
        if (ret)
                return ret;
-       if (!pch)
-               return -ENODEV;
 
        /*
         * Get the memory/io base address to configure every pins.
index ce11eae59d506fe683628a41488fecd6442147b2..7f61ef8b366b20970b289d0ef11cdad292d4a68d 100644 (file)
@@ -21,11 +21,9 @@ int board_early_init_f(void)
        struct udevice *pch;
        int ret;
 
-       ret = uclass_first_device(UCLASS_PCH, &pch);
+       ret = uclass_first_device_err(UCLASS_PCH, &pch);
        if (ret)
                return ret;
-       if (!pch)
-               return -ENODEV;
 
        /* Initialize LPC interface to turn on superio chipset decode range */
        dm_pci_write_config16(pch, LPC_IO_DEC, COMA_DEC_RANGE | COMB_DEC_RANGE);
index b2f4a4e7219adb05a2875eeed09fef15f8487b05..a2595d19e7f62ca6d6f4e57415282371fe16fea2 100644 (file)
@@ -644,7 +644,7 @@ static int omap_hsmmc_execute_tuning(struct udevice *dev, uint opcode)
              ((mmc->selected_mode == UHS_SDR50) && (val & CAPA2_TSDR50))))
                return 0;
 
-       ret = uclass_first_device(UCLASS_THERMAL, &thermal_dev);
+       ret = uclass_first_device_err(UCLASS_THERMAL, &thermal_dev);
        if (ret) {
                printf("Couldn't get thermal device for tuning\n");
                return ret;
index da3e1eb3ab1fa9bf621cda37edbc517ac3917b13..83cda1f204095cbf4473ce8edf7883e7327d8ce1 100644 (file)
@@ -143,7 +143,7 @@ static void serial_find_console_or_panic(void)
 #else
                if (!uclass_get_device_by_seq(UCLASS_SERIAL, INDEX, &dev) ||
                    !uclass_get_device(UCLASS_SERIAL, INDEX, &dev) ||
-                   (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) {
+                   !uclass_first_device_err(UCLASS_SERIAL, &dev)) {
                        gd->cur_serial_dev = dev;
                        return;
                }
index 493a42b4ccc2046b263e502e45b3b84286ecbfd4..12cbcb9858c21474f65084548d3b4945951e66a6 100644 (file)
@@ -147,7 +147,7 @@ static bool bcm283x_is_serial_muxed(void)
        int serial_gpio = 15;
        struct udevice *dev;
 
-       if (uclass_first_device(UCLASS_PINCTRL, &dev) || !dev)
+       if (uclass_first_device_err(UCLASS_PINCTRL, &dev))
                return false;
 
        if (pinctrl_get_gpio_mux(dev, 0, serial_gpio) != BCM2835_GPIO_ALT5)
index fe746294cdcff46779606f4f29761b815979f07c..7d172cdac0a50fd66491a26fc120a6a4746ced2e 100644 (file)
@@ -24,7 +24,7 @@ static bool bcm283x_is_serial_muxed(void)
        int serial_gpio = 15;
        struct udevice *dev;
 
-       if (uclass_first_device(UCLASS_PINCTRL, &dev) || !dev)
+       if (uclass_first_device_err(UCLASS_PINCTRL, &dev))
                return false;
 
        if (pinctrl_get_gpio_mux(dev, 0, serial_gpio) != BCM2835_GPIO_ALT0)
index d747ed00a7f68aeae61484ffadaf84f5571a4b02..92fad96871bde6cbe106cf5998053b881e289a59 100644 (file)
@@ -18,7 +18,7 @@ static int ast_sysreset_request(struct udevice *dev, enum sysreset_t type)
 {
        struct udevice *wdt;
        u32 reset_mode;
-       int ret = uclass_first_device(UCLASS_WDT, &wdt);
+       int ret = uclass_first_device_err(UCLASS_WDT, &wdt);
 
        if (ret)
                return ret;
index 69992b3c2ba062fe82e4a7c274e3fc64d0424b04..86970a6d5d20bdbcc7b58e2bca6ca21be224fc97 100644 (file)
@@ -640,25 +640,17 @@ static int exynos_fb_probe(struct udevice *dev)
 #endif
        exynos_fimd_lcd_init(dev);
 
-       ret = uclass_first_device(UCLASS_PANEL, &panel);
+       ret = uclass_first_device_err(UCLASS_PANEL, &panel);
        if (ret) {
-               printf("LCD panel failed to probe\n");
+               printf("%s: LCD panel failed to probe %d\n", __func__, ret);
                return ret;
        }
-       if (!panel) {
-               printf("LCD panel not found\n");
-               return -ENODEV;
-       }
 
-       ret = uclass_first_device(UCLASS_DISPLAY, &dp);
+       ret = uclass_first_device_err(UCLASS_DISPLAY, &dp);
        if (ret) {
                debug("%s: Display device error %d\n", __func__, ret);
                return ret;
        }
-       if (!dev) {
-               debug("%s: Display device missing\n", __func__);
-               return -ENODEV;
-       }
        ret = display_enable(dp, 18, NULL);
        if (ret) {
                debug("%s: Display enable error %d\n", __func__, ret);
index ba1ddd64e08cf43feaea58df6758b0a58acc7c9e..cbcdb99e1f07adc2747b9187a0cbf5d02a153272 100644 (file)
@@ -244,7 +244,7 @@ static int malidp_update_timings_from_edid(struct udevice *dev,
        struct udevice *disp_dev;
        int err;
 
-       err = uclass_first_device(UCLASS_DISPLAY, &disp_dev);
+       err = uclass_first_device_err(UCLASS_DISPLAY, &disp_dev);
        if (err)
                return err;
 
index 5871ac7c4ffa8ff9a670cc44d01f5b94dda32a3a..e6347bb8da6a85f93d3517274aeb6a0855135b3e 100644 (file)
@@ -346,7 +346,7 @@ static int stm32_dsi_attach(struct udevice *dev)
        struct display_timing timings;
        int ret;
 
-       ret = uclass_first_device(UCLASS_PANEL, &priv->panel);
+       ret = uclass_first_device_err(UCLASS_PANEL, &priv->panel);
        if (ret) {
                dev_err(dev, "panel device error %d\n", ret);
                return ret;
index ee4f09a0c49f68f9c1426363dd8fabb363ea8ea7..b27b1633bab56538358d2a93a199eb501efea494 100644 (file)
@@ -1494,8 +1494,8 @@ int tegra_dp_enable(struct udevice *dev, int panel_bpp,
                return -ENOLINK;
        }
 
-       ret = uclass_first_device(UCLASS_VIDEO_BRIDGE, &sor);
-       if (ret || !sor) {
+       ret = uclass_first_device_err(UCLASS_VIDEO_BRIDGE, &sor);
+       if (ret) {
                debug("dp: failed to find SOR device: ret=%d\n", ret);
                return ret;
        }
index f8642f9942085f071bbc7af06a807f46bbade32d..7c4189e2434b10db8abe549663e9ca1ef56295ad 100644 (file)
@@ -40,7 +40,7 @@ int acpi_create_dmar(struct acpi_dmar *dmar, enum dmar_flags flags)
        struct udevice *cpu;
        int ret;
 
-       ret = uclass_first_device(UCLASS_CPU, &cpu);
+       ret = uclass_first_device_err(UCLASS_CPU, &cpu);
        if (ret)
                return log_msg_ret("cpu", ret);
        ret = cpu_get_info(cpu, &info);
index 5908b5c646697724cdabc8a45d6159602db509cf..20bd7fff0867d402f6438edb56a2957cb8f1e34b 100644 (file)
@@ -482,7 +482,7 @@ efi_status_t efi_gop_register(void)
        struct video_priv *priv;
 
        /* We only support a single video output device for now */
-       if (uclass_first_device(UCLASS_VIDEO, &vdev) || !vdev) {
+       if (uclass_first_device_err(UCLASS_VIDEO, &vdev)) {
                debug("WARNING: No video device\n");
                return EFI_SUCCESS;
        }
index 0f6b45b002c0be52ad15cd08c064d960ed475dd1..8c3f9cc31b760597134ec67f743d4577ca575cc1 100644 (file)
@@ -91,8 +91,8 @@ struct udevice *eth_get_dev(void)
                eth_errno = uclass_get_device_by_seq(UCLASS_ETH, 0,
                                                     &uc_priv->current);
                if (eth_errno)
-                       eth_errno = uclass_first_device(UCLASS_ETH,
-                                                       &uc_priv->current);
+                       eth_errno = uclass_first_device_err(UCLASS_ETH,
+                                                           &uc_priv->current);
        }
        return uc_priv->current;
 }
index fb62731339631ca368289196773e7fd6c30a8220..f0b5ab9adb382a502dc3df24cd84b450e7e993da 100644 (file)
@@ -156,7 +156,7 @@ static int bootmeth_state(struct unit_test_state *uts)
        struct udevice *dev;
        char buf[50];
 
-       ut_assertok(uclass_first_device(UCLASS_BOOTMETH, &dev));
+       ut_assertok(uclass_first_device_err(UCLASS_BOOTMETH, &dev));
        ut_assertnonnull(dev);
 
        ut_assertok(bootmeth_get_state_desc(dev, buf, sizeof(buf)));
index edad91329f9e49aac9671b72e56bc39c0f016bdd..9634fc2e9002e275e9b9d4641277561f891bc958 100644 (file)
@@ -169,28 +169,28 @@ static int dm_test_acpi_get_name(struct unit_test_state *uts)
        ut_asserteq_str("GHIJ", name);
 
        /* Test getting the name from acpi_device_get_name() */
-       ut_assertok(uclass_first_device(UCLASS_I2C, &i2c));
+       ut_assertok(uclass_first_device_err(UCLASS_I2C, &i2c));
        ut_assertok(acpi_get_name(i2c, name));
        ut_asserteq_str("I2C0", name);
 
-       ut_assertok(uclass_first_device(UCLASS_SPI, &spi));
+       ut_assertok(uclass_first_device_err(UCLASS_SPI, &spi));
        ut_assertok(acpi_get_name(spi, name));
        ut_asserteq_str("SPI0", name);
 
        /* ACPI doesn't know about the timer */
-       ut_assertok(uclass_first_device(UCLASS_TIMER, &timer));
+       ut_assertok(uclass_first_device_err(UCLASS_TIMER, &timer));
        ut_asserteq(-ENOENT, acpi_get_name(timer, name));
 
        /* May as well test the rest of the cases */
-       ut_assertok(uclass_first_device(UCLASS_SOUND, &sound));
+       ut_assertok(uclass_first_device_err(UCLASS_SOUND, &sound));
        ut_assertok(acpi_get_name(sound, name));
        ut_asserteq_str("HDAS", name);
 
-       ut_assertok(uclass_first_device(UCLASS_PCI, &pci));
+       ut_assertok(uclass_first_device_err(UCLASS_PCI, &pci));
        ut_assertok(acpi_get_name(pci, name));
        ut_asserteq_str("PCI0", name);
 
-       ut_assertok(uclass_first_device(UCLASS_ROOT, &root));
+       ut_assertok(uclass_first_device_err(UCLASS_ROOT, &root));
        ut_assertok(acpi_get_name(root, name));
        ut_asserteq_str("\\_SB", name);
 
@@ -219,7 +219,7 @@ static int dm_test_acpi_create_dmar(struct unit_test_state *uts)
        struct acpi_dmar dmar;
        struct udevice *cpu;
 
-       ut_assertok(uclass_first_device(UCLASS_CPU, &cpu));
+       ut_assertok(uclass_first_device_err(UCLASS_CPU, &cpu));
        ut_assertnonnull(cpu);
        ut_assertok(acpi_create_dmar(&dmar, DMAR_INTR_REMAP));
        ut_asserteq(DMAR_INTR_REMAP, dmar.flags);
index 524114c833c1880c6806ff27218cb4257ce7bf4c..3df0f64362dc6c35aeaa3bb763327b9109b05bfa 100644 (file)
@@ -165,8 +165,8 @@ static int dm_test_devres_phase(struct unit_test_state *uts)
        ut_asserteq(TEST_DEVRES_SIZE + TEST_DEVRES_SIZE3, stats.total_size);
 
        /* Probing the device should add one allocation */
-       ut_assertok(uclass_first_device(UCLASS_TEST_DEVRES, &dev));
-       ut_assert(dev != NULL);
+       ut_assertok(uclass_first_device_err(UCLASS_TEST_DEVRES, &dev));
+       ut_assertnonnull(dev);
        devres_get_stats(dev, &stats);
        ut_asserteq(3, stats.allocs);
        ut_asserteq(TEST_DEVRES_SIZE + TEST_DEVRES_SIZE2 + TEST_DEVRES_SIZE3,
index 74b2097195604c70a45eb8ecf51e8948b57e11bf..b46a22e79b140509eb2928c7797620f89d901d7b 100644 (file)
@@ -124,7 +124,7 @@ static int dm_test_i2c_bytewise(struct unit_test_state *uts)
        ut_asserteq_mem(buf, "\0\0\0\0\0", sizeof(buf));
 
        /* Tell the EEPROM to only read/write one register at a time */
-       ut_assertok(uclass_first_device(UCLASS_I2C_EMUL, &eeprom));
+       ut_assertok(uclass_first_device_err(UCLASS_I2C_EMUL, &eeprom));
        ut_assertnonnull(eeprom);
        sandbox_i2c_eeprom_set_test_mode(eeprom, SIE_TEST_MODE_SINGLE_BYTE);
 
@@ -177,7 +177,7 @@ static int dm_test_i2c_offset(struct unit_test_state *uts)
 
        /* Do a transfer so we can find the emulator */
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
-       ut_assertok(uclass_first_device(UCLASS_I2C_EMUL, &eeprom));
+       ut_assertok(uclass_first_device_err(UCLASS_I2C_EMUL, &eeprom));
 
        /* Offset length 0 */
        sandbox_i2c_eeprom_set_offset_len(eeprom, 0);
@@ -250,7 +250,7 @@ static int dm_test_i2c_addr_offset(struct unit_test_state *uts)
 
        /* Do a transfer so we can find the emulator */
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
-       ut_assertok(uclass_first_device(UCLASS_I2C_EMUL, &eeprom));
+       ut_assertok(uclass_first_device_err(UCLASS_I2C_EMUL, &eeprom));
 
        /* Offset length 0 */
        sandbox_i2c_eeprom_set_offset_len(eeprom, 0);
@@ -315,7 +315,7 @@ static int dm_test_i2c_reg_clrset(struct unit_test_state *uts)
 
        /* Do a transfer so we can find the emulator */
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
-       ut_assertok(uclass_first_device(UCLASS_I2C_EMUL, &eeprom));
+       ut_assertok(uclass_first_device_err(UCLASS_I2C_EMUL, &eeprom));
 
        /* Dummy data for the test */
        ut_assertok(dm_i2c_write(dev, 0, "\xff\x00\xff\x00\x10", 5));
index d0195e6bf096fb352eba4d04109bd65bedb77b28..b5c4523a028b101a2fce755ec7b43e092e65feb5 100644 (file)
@@ -22,7 +22,7 @@ static int dm_test_virtio_base(struct unit_test_state *uts)
        u8 status;
 
        /* check probe success */
-       ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+       ut_assertok(uclass_first_device_err(UCLASS_VIRTIO, &bus));
        ut_assertnonnull(bus);
 
        /* check the child virtio-rng device is bound */
@@ -60,7 +60,7 @@ static int dm_test_virtio_all_ops(struct unit_test_state *uts)
        struct virtqueue *vqs[2];
 
        /* check probe success */
-       ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+       ut_assertok(uclass_first_device_err(UCLASS_VIRTIO, &bus));
        ut_assertnonnull(bus);
 
        /* check the child virtio-rng device is bound */
@@ -102,7 +102,7 @@ static int dm_test_virtio_remove(struct unit_test_state *uts)
        struct udevice *bus, *dev;
 
        /* check probe success */
-       ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+       ut_assertok(uclass_first_device_err(UCLASS_VIRTIO, &bus));
        ut_assertnonnull(bus);
 
        /* check the child virtio-rng device is bound */
@@ -134,7 +134,7 @@ static int dm_test_virtio_ring(struct unit_test_state *uts)
        u8 buffer[2][32];
 
        /* check probe success */
-       ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+       ut_assertok(uclass_first_device_err(UCLASS_VIRTIO, &bus));
        ut_assertnonnull(bus);
 
        /* check the child virtio-blk device is bound */
index ff5646b4e11331cb3f6a26baaf0606a9ea11c278..8b9a04b1fdef727f0c9dcc049bea8b22d85e6ac1 100644 (file)
@@ -28,7 +28,7 @@ static int dm_test_virtio_rng_check_len(struct unit_test_state *uts)
        u8 buffer[16];
 
        /* check probe success */
-       ut_assertok(uclass_first_device(UCLASS_VIRTIO, &bus));
+       ut_assertok(uclass_first_device_err(UCLASS_VIRTIO, &bus));
        ut_assertnonnull(bus);
 
        /* check the child virtio-rng device is bound */
index 0cc01dc199ca764e00af9b295542c0945dff6d4b..e2f44f3ecb61bad8d3d6725d647435cf9b4d8488 100644 (file)
@@ -29,7 +29,7 @@ static struct udevice *find_fuzzing_engine(void)
 {
        struct udevice *dev;
 
-       if (uclass_first_device(UCLASS_FUZZING_ENGINE, &dev))
+       if (uclass_first_device_err(UCLASS_FUZZING_ENGINE, &dev))
                return NULL;
 
        return dev;
index e5363d5638e49a9ddab12b72b36cb70167d84065..8a47667e778540ea7b79999994e51698d37c2140 100644 (file)
@@ -30,7 +30,7 @@ static int fuzz_vring(const uint8_t *data, size_t size)
                return 0;
 
        /* check probe success */
-       if (uclass_first_device(UCLASS_VIRTIO, &bus) || !bus)
+       if (uclass_first_device_err(UCLASS_VIRTIO, &bus))
                panic("Could not find virtio bus\n");
 
        /* check the child virtio-rng device is bound */