diff options
Diffstat (limited to 'drivers/misc')
33 files changed, 355 insertions, 133 deletions
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 29432ae7eb..7d2a299779 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -343,6 +343,15 @@ config TEGRA186_BPMP can make requests to the BPMP. This driver is similar to an MFD driver in the Linux kernel. +config TEST_DRV + bool "Enable support for test drivers" + default y if SANDBOX + help + This enables drivers and uclasses that provides a way of testing the + operations of memory allocation and driver/uclass methods in driver + model. This should only be enabled for testing as it is not useful for + anything else. + config TWL4030_LED bool "Enable TWL4030 LED controller" help diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index 947bd3a647..d737203704 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -67,6 +67,7 @@ obj-$(CONFIG_STM32_RCC) += stm32_rcc.o obj-$(CONFIG_SYS_DPAA_QBMAN) += fsl_portals.o obj-$(CONFIG_TEGRA186_BPMP) += tegra186_bpmp.o obj-$(CONFIG_TEGRA_CAR) += tegra_car.o +obj-$(CONFIG_TEST_DRV) += test_drv.o obj-$(CONFIG_TWL4030_LED) += twl4030_led.o obj-$(CONFIG_VEXPRESS_CONFIG) += vexpress_config.o obj-$(CONFIG_WINBOND_W83627) += winbond_w83627.o diff --git a/drivers/misc/altera_sysid.c b/drivers/misc/altera_sysid.c index c6502650b7..878df12771 100644 --- a/drivers/misc/altera_sysid.c +++ b/drivers/misc/altera_sysid.c @@ -17,7 +17,7 @@ struct altera_sysid_regs { u32 timestamp; /* Timestamp */ }; -struct altera_sysid_platdata { +struct altera_sysid_plat { struct altera_sysid_regs *regs; }; @@ -59,7 +59,7 @@ U_BOOT_CMD( static int altera_sysid_read(struct udevice *dev, int offset, void *buf, int size) { - struct altera_sysid_platdata *plat = dev->platdata; + struct altera_sysid_plat *plat = dev_get_plat(dev); struct altera_sysid_regs *const regs = plat->regs; u32 *sysid = buf; @@ -69,9 +69,9 @@ static int altera_sysid_read(struct udevice *dev, return 0; } -static int altera_sysid_ofdata_to_platdata(struct udevice *dev) +static int altera_sysid_of_to_plat(struct udevice *dev) { - struct altera_sysid_platdata *plat = dev_get_platdata(dev); + struct altera_sysid_plat *plat = dev_get_plat(dev); plat->regs = map_physmem(dev_read_addr(dev), sizeof(struct altera_sysid_regs), @@ -93,7 +93,7 @@ U_BOOT_DRIVER(altera_sysid) = { .name = "altera_sysid", .id = UCLASS_MISC, .of_match = altera_sysid_ids, - .ofdata_to_platdata = altera_sysid_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct altera_sysid_platdata), + .of_to_plat = altera_sysid_of_to_plat, + .plat_auto = sizeof(struct altera_sysid_plat), .ops = &altera_sysid_ops, }; diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 422ea6f3e5..90f9cd246a 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -382,7 +382,7 @@ int atsha204a_get_random(struct udevice *dev, u8 *buffer, size_t max) return 0; } -static int atsha204a_ofdata_to_platdata(struct udevice *dev) +static int atsha204a_of_to_plat(struct udevice *dev) { fdt_addr_t *priv = dev_get_priv(dev); fdt_addr_t addr; @@ -406,6 +406,6 @@ U_BOOT_DRIVER(atsha204) = { .name = "atsha204", .id = UCLASS_MISC, .of_match = atsha204a_ids, - .ofdata_to_platdata = atsha204a_ofdata_to_platdata, - .priv_auto_alloc_size = sizeof(fdt_addr_t), + .of_to_plat = atsha204a_of_to_plat, + .priv_auto = sizeof(fdt_addr_t), }; diff --git a/drivers/misc/cros_ec.c b/drivers/misc/cros_ec.c index 1b22f1883e..f03b7d55d6 100644 --- a/drivers/misc/cros_ec.c +++ b/drivers/misc/cros_ec.c @@ -1505,7 +1505,7 @@ int cros_ec_set_lid_shutdown_mask(struct udevice *dev, int enable) UCLASS_DRIVER(cros_ec) = { .id = UCLASS_CROS_EC, .name = "cros-ec", - .per_device_auto_alloc_size = sizeof(struct cros_ec_dev), + .per_device_auto = sizeof(struct cros_ec_dev), .post_bind = dm_scan_fdt_dev, .flags = DM_UC_FLAG_ALLOC_PRIV_DMA, }; diff --git a/drivers/misc/cros_ec_i2c.c b/drivers/misc/cros_ec_i2c.c index 664bd2b938..a1b78a3045 100644 --- a/drivers/misc/cros_ec_i2c.c +++ b/drivers/misc/cros_ec_i2c.c @@ -52,7 +52,7 @@ struct ec_host_response_i2c { static int cros_ec_i2c_packet(struct udevice *udev, int out_bytes, int in_bytes) { struct cros_ec_dev *dev = dev_get_uclass_priv(udev); - struct dm_i2c_chip *chip = dev_get_parent_platdata(udev); + struct dm_i2c_chip *chip = dev_get_parent_plat(udev); struct ec_host_request_i2c *ec_request_i2c = (struct ec_host_request_i2c *)dev->dout; struct ec_host_response_i2c *ec_response_i2c = @@ -112,7 +112,7 @@ static int cros_ec_i2c_command(struct udevice *udev, uint8_t cmd, int dout_len, uint8_t **dinp, int din_len) { struct cros_ec_dev *dev = dev_get_uclass_priv(udev); - struct dm_i2c_chip *chip = dev_get_parent_platdata(udev); + struct dm_i2c_chip *chip = dev_get_parent_plat(udev); struct i2c_msg i2c_msg[2]; /* version8, cmd8, arglen8, out8[dout_len], csum8 */ int out_bytes = dout_len + 4; diff --git a/drivers/misc/cros_ec_sandbox.c b/drivers/misc/cros_ec_sandbox.c index d72db3eace..9fd6cc2086 100644 --- a/drivers/misc/cros_ec_sandbox.c +++ b/drivers/misc/cros_ec_sandbox.c @@ -520,8 +520,8 @@ void cros_ec_check_keyboard(struct udevice *dev) int cros_ec_probe(struct udevice *dev) { - struct ec_state *ec = dev->priv; - struct cros_ec_dev *cdev = dev->uclass_priv; + struct ec_state *ec = dev_get_priv(dev); + struct cros_ec_dev *cdev = dev_get_uclass_priv(dev); struct udevice *keyb_dev; ofnode node; int err; @@ -585,6 +585,6 @@ U_BOOT_DRIVER(google_cros_ec_sandbox) = { .id = UCLASS_CROS_EC, .of_match = cros_ec_ids, .probe = cros_ec_probe, - .priv_auto_alloc_size = sizeof(struct ec_state), + .priv_auto = sizeof(struct ec_state), .ops = &cros_ec_ops, }; diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c index 56406aa1dd..f460b1a64c 100644 --- a/drivers/misc/fs_loader.c +++ b/drivers/misc/fs_loader.c @@ -61,7 +61,7 @@ static int mount_ubifs(char *mtdpart, char *ubivol) } #endif -static int select_fs_dev(struct device_platdata *plat) +static int select_fs_dev(struct device_plat *plat) { int ret; @@ -161,7 +161,7 @@ static int fw_get_filesystem_firmware(struct udevice *dev) else ret = -ENODEV; } else { - ret = select_fs_dev(dev->platdata); + ret = select_fs_dev(dev_get_plat(dev)); } if (ret) @@ -219,16 +219,16 @@ int request_firmware_into_buf(struct udevice *dev, return ret; } -static int fs_loader_ofdata_to_platdata(struct udevice *dev) +static int fs_loader_of_to_plat(struct udevice *dev) { u32 phandlepart[2]; ofnode fs_loader_node = dev_ofnode(dev); if (ofnode_valid(fs_loader_node)) { - struct device_platdata *plat; + struct device_plat *plat; - plat = dev->platdata; + plat = dev_get_plat(dev); if (!ofnode_read_u32_array(fs_loader_node, "phandlepart", phandlepart, 2)) { @@ -250,7 +250,7 @@ static int fs_loader_probe(struct udevice *dev) { #if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(BLK) int ret; - struct device_platdata *plat = dev->platdata; + struct device_plat *plat = dev_get_plat(dev); if (plat->phandlepart.phandle) { ofnode node = ofnode_get_by_phandle(plat->phandlepart.phandle); @@ -284,9 +284,9 @@ U_BOOT_DRIVER(fs_loader) = { .id = UCLASS_FS_FIRMWARE_LOADER, .of_match = fs_loader_ids, .probe = fs_loader_probe, - .ofdata_to_platdata = fs_loader_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct device_platdata), - .priv_auto_alloc_size = sizeof(struct firmware), + .of_to_plat = fs_loader_of_to_plat, + .plat_auto = sizeof(struct device_plat), + .priv_auto = sizeof(struct firmware), }; UCLASS_DRIVER(fs_loader) = { diff --git a/drivers/misc/gdsys_ioep.c b/drivers/misc/gdsys_ioep.c index 69e16a06a0..145cfa23c6 100644 --- a/drivers/misc/gdsys_ioep.c +++ b/drivers/misc/gdsys_ioep.c @@ -206,5 +206,5 @@ U_BOOT_DRIVER(gdsys_ioep) = { .flags = DM_UC_FLAG_SEQ_ALIAS, .of_match = gdsys_ioep_ids, .probe = gdsys_ioep_probe, - .priv_auto_alloc_size = sizeof(struct gdsys_ioep_priv), + .priv_auto = sizeof(struct gdsys_ioep_priv), }; diff --git a/drivers/misc/gdsys_rxaui_ctrl.c b/drivers/misc/gdsys_rxaui_ctrl.c index c56abce4d4..8f5cbe420f 100644 --- a/drivers/misc/gdsys_rxaui_ctrl.c +++ b/drivers/misc/gdsys_rxaui_ctrl.c @@ -77,5 +77,5 @@ U_BOOT_DRIVER(gdsys_rxaui_ctrl) = { .ops = &gdsys_rxaui_ctrl_ops, .of_match = gdsys_rxaui_ctrl_ids, .probe = gdsys_rxaui_ctrl_probe, - .priv_auto_alloc_size = sizeof(struct gdsys_rxaui_ctrl_priv), + .priv_auto = sizeof(struct gdsys_rxaui_ctrl_priv), }; diff --git a/drivers/misc/gdsys_soc.c b/drivers/misc/gdsys_soc.c index b4c721c6fe..27e7dc4832 100644 --- a/drivers/misc/gdsys_soc.c +++ b/drivers/misc/gdsys_soc.c @@ -71,5 +71,5 @@ U_BOOT_DRIVER(gdsys_soc_bus) = { .id = UCLASS_SIMPLE_BUS, .of_match = gdsys_soc_ids, .probe = gdsys_soc_probe, - .priv_auto_alloc_size = sizeof(struct gdsys_soc_priv), + .priv_auto = sizeof(struct gdsys_soc_priv), }; diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c index 3651ba4871..5926c91a2e 100644 --- a/drivers/misc/i2c_eeprom.c +++ b/drivers/misc/i2c_eeprom.c @@ -93,7 +93,7 @@ static const struct i2c_eeprom_ops i2c_eeprom_std_ops = { .size = i2c_eeprom_std_size, }; -static int i2c_eeprom_std_ofdata_to_platdata(struct udevice *dev) +static int i2c_eeprom_std_of_to_plat(struct udevice *dev) { struct i2c_eeprom *priv = dev_get_priv(dev); struct i2c_eeprom_drv_data *data = @@ -131,8 +131,8 @@ static int i2c_eeprom_std_bind(struct udevice *dev) if (!name) continue; - device_bind_ofnode(dev, DM_GET_DRIVER(i2c_eeprom_partition), - name, NULL, partition, NULL); + device_bind(dev, DM_DRIVER_GET(i2c_eeprom_partition), name, + NULL, partition, NULL); } return 0; @@ -283,8 +283,8 @@ U_BOOT_DRIVER(i2c_eeprom_std) = { .of_match = i2c_eeprom_std_ids, .bind = i2c_eeprom_std_bind, .probe = i2c_eeprom_std_probe, - .ofdata_to_platdata = i2c_eeprom_std_ofdata_to_platdata, - .priv_auto_alloc_size = sizeof(struct i2c_eeprom), + .of_to_plat = i2c_eeprom_std_of_to_plat, + .priv_auto = sizeof(struct i2c_eeprom), .ops = &i2c_eeprom_std_ops, }; @@ -298,7 +298,7 @@ static int i2c_eeprom_partition_probe(struct udevice *dev) return 0; } -static int i2c_eeprom_partition_ofdata_to_platdata(struct udevice *dev) +static int i2c_eeprom_partition_of_to_plat(struct udevice *dev) { struct i2c_eeprom_partition *priv = dev_get_priv(dev); u32 reg[2]; @@ -365,8 +365,8 @@ U_BOOT_DRIVER(i2c_eeprom_partition) = { .name = "i2c_eeprom_partition", .id = UCLASS_I2C_EEPROM, .probe = i2c_eeprom_partition_probe, - .ofdata_to_platdata = i2c_eeprom_partition_ofdata_to_platdata, - .priv_auto_alloc_size = sizeof(struct i2c_eeprom_partition), + .of_to_plat = i2c_eeprom_partition_of_to_plat, + .priv_auto = sizeof(struct i2c_eeprom_partition), .ops = &i2c_eeprom_partition_ops, }; diff --git a/drivers/misc/i2c_eeprom_emul.c b/drivers/misc/i2c_eeprom_emul.c index 6be76ad02e..85b127c406 100644 --- a/drivers/misc/i2c_eeprom_emul.c +++ b/drivers/misc/i2c_eeprom_emul.c @@ -36,14 +36,14 @@ struct sandbox_i2c_flash { void sandbox_i2c_eeprom_set_test_mode(struct udevice *dev, enum sandbox_i2c_eeprom_test_mode mode) { - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(dev); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(dev); plat->test_mode = mode; } void sandbox_i2c_eeprom_set_offset_len(struct udevice *dev, int offset_len) { - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(dev); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(dev); plat->offset_len = offset_len; } @@ -51,7 +51,7 @@ void sandbox_i2c_eeprom_set_offset_len(struct udevice *dev, int offset_len) void sandbox_i2c_eeprom_set_chip_addr_offset_mask(struct udevice *dev, uint mask) { - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(dev); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(dev); plat->chip_addr_offset_mask = mask; } @@ -74,7 +74,7 @@ static int sandbox_i2c_eeprom_xfer(struct udevice *emul, struct i2c_msg *msg, int nmsgs) { struct sandbox_i2c_flash *priv = dev_get_priv(emul); - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(emul); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(emul); uint offset = msg->addr & plat->chip_addr_offset_mask; debug("\n%s\n", __func__); @@ -149,9 +149,9 @@ struct dm_i2c_ops sandbox_i2c_emul_ops = { .xfer = sandbox_i2c_eeprom_xfer, }; -static int sandbox_i2c_eeprom_ofdata_to_platdata(struct udevice *dev) +static int sandbox_i2c_eeprom_of_to_plat(struct udevice *dev) { - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(dev); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(dev); plat->size = dev_read_u32_default(dev, "sandbox,size", 32); plat->filename = dev_read_string(dev, "sandbox,filename"); @@ -169,7 +169,7 @@ static int sandbox_i2c_eeprom_ofdata_to_platdata(struct udevice *dev) static int sandbox_i2c_eeprom_probe(struct udevice *dev) { - struct sandbox_i2c_flash_plat_data *plat = dev_get_platdata(dev); + struct sandbox_i2c_flash_plat_data *plat = dev_get_plat(dev); struct sandbox_i2c_flash *priv = dev_get_priv(dev); priv->data = calloc(1, plat->size); @@ -197,10 +197,10 @@ U_BOOT_DRIVER(sandbox_i2c_emul) = { .name = "sandbox_i2c_eeprom_emul", .id = UCLASS_I2C_EMUL, .of_match = sandbox_i2c_ids, - .ofdata_to_platdata = sandbox_i2c_eeprom_ofdata_to_platdata, + .of_to_plat = sandbox_i2c_eeprom_of_to_plat, .probe = sandbox_i2c_eeprom_probe, .remove = sandbox_i2c_eeprom_remove, - .priv_auto_alloc_size = sizeof(struct sandbox_i2c_flash), - .platdata_auto_alloc_size = sizeof(struct sandbox_i2c_flash_plat_data), + .priv_auto = sizeof(struct sandbox_i2c_flash), + .plat_auto = sizeof(struct sandbox_i2c_flash_plat_data), .ops = &sandbox_i2c_emul_ops, }; diff --git a/drivers/misc/ihs_fpga.c b/drivers/misc/ihs_fpga.c index 00d34a3adc..a0fece985d 100644 --- a/drivers/misc/ihs_fpga.c +++ b/drivers/misc/ihs_fpga.c @@ -866,5 +866,5 @@ U_BOOT_DRIVER(ihs_fpga_bus) = { .id = UCLASS_MISC, .of_match = ihs_fpga_ids, .probe = ihs_fpga_probe, - .priv_auto_alloc_size = sizeof(struct ihs_fpga_priv), + .priv_auto = sizeof(struct ihs_fpga_priv), }; diff --git a/drivers/misc/imx8/scu.c b/drivers/misc/imx8/scu.c index 223aac8518..72a3473263 100644 --- a/drivers/misc/imx8/scu.c +++ b/drivers/misc/imx8/scu.c @@ -158,7 +158,7 @@ static int sc_ipc_write(struct mu_type *base, void *data) static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg, int tx_size, void *rx_msg, int rx_size) { - struct imx8_scu *plat = dev_get_platdata(dev); + struct imx8_scu *plat = dev_get_plat(dev); sc_err_t result; int ret; @@ -182,7 +182,7 @@ static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg, static int imx8_scu_probe(struct udevice *dev) { - struct imx8_scu *plat = dev_get_platdata(dev); + struct imx8_scu *plat = dev_get_plat(dev); fdt_addr_t addr; debug("%s(dev=%p) (plat=%p)\n", __func__, dev, plat); @@ -245,6 +245,6 @@ U_BOOT_DRIVER(imx8_scu) = { .bind = imx8_scu_bind, .remove = imx8_scu_remove, .ops = &imx8_scu_ops, - .platdata_auto_alloc_size = sizeof(struct imx8_scu), + .plat_auto = sizeof(struct imx8_scu), .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/misc/irq_sandbox.c b/drivers/misc/irq_sandbox.c index a2511b32fc..1f7e62e661 100644 --- a/drivers/misc/irq_sandbox.c +++ b/drivers/misc/irq_sandbox.c @@ -108,5 +108,5 @@ U_BOOT_DRIVER(sandbox_irq_drv) = { .id = UCLASS_IRQ, .of_match = sandbox_irq_ids, .ops = &sandbox_irq_ops, - .priv_auto_alloc_size = sizeof(struct sandbox_irq_priv), + .priv_auto = sizeof(struct sandbox_irq_priv), }; diff --git a/drivers/misc/k3_avs.c b/drivers/misc/k3_avs.c index 408c89315a..840148d090 100644 --- a/drivers/misc/k3_avs.c +++ b/drivers/misc/k3_avs.c @@ -390,5 +390,5 @@ U_BOOT_DRIVER(k3_avs) = { .of_match = k3_avs_ids, .id = UCLASS_MISC, .probe = k3_avs_probe, - .priv_auto_alloc_size = sizeof(struct k3_avs_privdata), + .priv_auto = sizeof(struct k3_avs_privdata), }; diff --git a/drivers/misc/microchip_flexcom.c b/drivers/misc/microchip_flexcom.c index 64cc4ae7b6..e0a6f2d388 100644 --- a/drivers/misc/microchip_flexcom.c +++ b/drivers/misc/microchip_flexcom.c @@ -16,14 +16,14 @@ struct microchip_flexcom_regs { u32 cr; }; -struct microchip_flexcom_platdata { +struct microchip_flexcom_plat { struct microchip_flexcom_regs *regs; u32 flexcom_mode; }; -static int microchip_flexcom_ofdata_to_platdata(struct udevice *dev) +static int microchip_flexcom_of_to_plat(struct udevice *dev) { - struct microchip_flexcom_platdata *plat = dev_get_platdata(dev); + struct microchip_flexcom_plat *plat = dev_get_plat(dev); int ret; plat->regs = map_physmem(dev_read_addr(dev), @@ -61,6 +61,6 @@ U_BOOT_DRIVER(microchip_flexcom) = { .name = "microchip_flexcom", .id = UCLASS_MISC, .of_match = microchip_flexcom_ids, - .ofdata_to_platdata = microchip_flexcom_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct microchip_flexcom_platdata), + .of_to_plat = microchip_flexcom_of_to_plat, + .plat_auto = sizeof(struct microchip_flexcom_plat), }; diff --git a/drivers/misc/misc_sandbox.c b/drivers/misc/misc_sandbox.c index f7c5b2e25f..0e4292fd0a 100644 --- a/drivers/misc/misc_sandbox.c +++ b/drivers/misc/misc_sandbox.c @@ -129,5 +129,5 @@ U_BOOT_DRIVER(misc_sandbox) = { .ops = &misc_sandbox_ops, .of_match = misc_sandbox_ids, .probe = misc_sandbox_probe, - .priv_auto_alloc_size = sizeof(struct misc_sandbox_priv), + .priv_auto = sizeof(struct misc_sandbox_priv), }; diff --git a/drivers/misc/mpc83xx_serdes.c b/drivers/misc/mpc83xx_serdes.c index ab1e34e6f4..93c87e998c 100644 --- a/drivers/misc/mpc83xx_serdes.c +++ b/drivers/misc/mpc83xx_serdes.c @@ -183,5 +183,5 @@ U_BOOT_DRIVER(mpc83xx_serdes) = { .id = UCLASS_MISC, .of_match = mpc83xx_serdes_ids, .probe = mpc83xx_serdes_probe, - .priv_auto_alloc_size = sizeof(struct mpc83xx_serdes_priv), + .priv_auto = sizeof(struct mpc83xx_serdes_priv), }; diff --git a/drivers/misc/p2sb-uclass.c b/drivers/misc/p2sb-uclass.c index 12abcff2da..ac2852559f 100644 --- a/drivers/misc/p2sb-uclass.c +++ b/drivers/misc/p2sb-uclass.c @@ -30,7 +30,7 @@ int p2sb_set_hide(struct udevice *dev, bool hide) void *pcr_reg_address(struct udevice *dev, uint offset) { - struct p2sb_child_platdata *pplat = dev_get_parent_platdata(dev); + struct p2sb_child_plat *pplat = dev_get_parent_plat(dev); struct udevice *p2sb = dev_get_parent(dev); struct p2sb_uc_priv *upriv = dev_get_uclass_priv(p2sb); uintptr_t reg_addr; @@ -161,34 +161,19 @@ void pcr_clrsetbits8(struct udevice *dev, uint offset, uint clr, uint set) int p2sb_get_port_id(struct udevice *dev) { - struct p2sb_child_platdata *pplat = dev_get_parent_platdata(dev); + struct p2sb_child_plat *pplat = dev_get_parent_plat(dev); return pplat->pid; } int p2sb_set_port_id(struct udevice *dev, int portid) { - struct udevice *ps2b; - struct p2sb_child_platdata *pplat; + struct p2sb_child_plat *pplat; if (!CONFIG_IS_ENABLED(OF_PLATDATA)) return -ENOSYS; - if (!CONFIG_IS_ENABLED(OF_PLATDATA_PARENT)) { - uclass_find_first_device(UCLASS_P2SB, &ps2b); - if (!ps2b) - return -EDEADLK; - dev->parent = ps2b; - - /* - * We must allocate this, since when the device was bound it did - * not have a parent. - */ - dev->parent_platdata = malloc(sizeof(*pplat)); - if (!dev->parent_platdata) - return -ENOMEM; - } - pplat = dev_get_parent_platdata(dev); + pplat = dev_get_parent_plat(dev); pplat->pid = portid; return 0; @@ -197,7 +182,7 @@ int p2sb_set_port_id(struct udevice *dev, int portid) static int p2sb_child_post_bind(struct udevice *dev) { #if !CONFIG_IS_ENABLED(OF_PLATDATA) - struct p2sb_child_platdata *pplat = dev_get_parent_platdata(dev); + struct p2sb_child_plat *pplat = dev_get_parent_plat(dev); int ret; u32 pid; @@ -221,9 +206,8 @@ static int p2sb_post_bind(struct udevice *dev) UCLASS_DRIVER(p2sb) = { .id = UCLASS_P2SB, .name = "p2sb", - .per_device_auto_alloc_size = sizeof(struct p2sb_uc_priv), + .per_device_auto = sizeof(struct p2sb_uc_priv), .post_bind = p2sb_post_bind, .child_post_bind = p2sb_child_post_bind, - .per_child_platdata_auto_alloc_size = - sizeof(struct p2sb_child_platdata), + .per_child_plat_auto = sizeof(struct p2sb_child_plat), }; diff --git a/drivers/misc/p2sb_emul.c b/drivers/misc/p2sb_emul.c index a4b6dba516..973d02d678 100644 --- a/drivers/misc/p2sb_emul.c +++ b/drivers/misc/p2sb_emul.c @@ -18,12 +18,12 @@ #include <p2sb.h> /** - * struct p2sb_emul_platdata - platform data for this device + * struct p2sb_emul_plat - platform data for this device * * @command: Current PCI command value * @bar: Current base address values */ -struct p2sb_emul_platdata { +struct p2sb_emul_plat { u16 command; u32 bar[6]; }; @@ -53,7 +53,7 @@ static int sandbox_p2sb_emul_read_config(const struct udevice *emul, uint offset, ulong *valuep, enum pci_size_t size) { - struct p2sb_emul_platdata *plat = dev_get_platdata(emul); + struct p2sb_emul_plat *plat = dev_get_plat(emul); switch (offset) { case PCI_COMMAND: @@ -106,7 +106,7 @@ static int sandbox_p2sb_emul_read_config(const struct udevice *emul, static int sandbox_p2sb_emul_write_config(struct udevice *emul, uint offset, ulong value, enum pci_size_t size) { - struct p2sb_emul_platdata *plat = dev_get_platdata(emul); + struct p2sb_emul_plat *plat = dev_get_plat(emul); switch (offset) { case PCI_COMMAND: @@ -134,7 +134,7 @@ static int sandbox_p2sb_emul_write_config(struct udevice *emul, uint offset, static int sandbox_p2sb_emul_find_bar(struct udevice *emul, unsigned int addr, int *barnump, unsigned int *offsetp) { - struct p2sb_emul_platdata *plat = dev_get_platdata(emul); + struct p2sb_emul_plat *plat = dev_get_plat(emul); int barnum; for (barnum = 0; barnum < ARRAY_SIZE(barinfo); barnum++) { @@ -197,8 +197,8 @@ static int find_p2sb_channel(struct udevice *emul, uint offset, return log_msg_ret("No client", ret); device_foreach_child(dev, p2sb) { - struct p2sb_child_platdata *pplat = - dev_get_parent_platdata(dev); + struct p2sb_child_plat *pplat = + dev_get_parent_plat(dev); log_debug(" - child %s, pid %d, want %d\n", dev->name, pplat->pid, pid); @@ -262,8 +262,8 @@ U_BOOT_DRIVER(sandbox_p2sb_emul_emul) = { .id = UCLASS_PCI_EMUL, .of_match = sandbox_p2sb_emul_ids, .ops = &sandbox_p2sb_emul_emul_ops, - .priv_auto_alloc_size = sizeof(struct p2sb_emul_priv), - .platdata_auto_alloc_size = sizeof(struct p2sb_emul_platdata), + .priv_auto = sizeof(struct p2sb_emul_priv), + .plat_auto = sizeof(struct p2sb_emul_plat), }; static struct pci_device_id sandbox_p2sb_emul_supported[] = { diff --git a/drivers/misc/p2sb_sandbox.c b/drivers/misc/p2sb_sandbox.c index ce50a9732e..d80bca22a6 100644 --- a/drivers/misc/p2sb_sandbox.c +++ b/drivers/misc/p2sb_sandbox.c @@ -35,5 +35,5 @@ U_BOOT_DRIVER(p2sb_sandbox) = { .id = UCLASS_P2SB, .of_match = sandbox_p2sb_ids, .probe = sandbox_p2sb_probe, - .priv_auto_alloc_size = sizeof(struct sandbox_p2sb_priv), + .priv_auto = sizeof(struct sandbox_p2sb_priv), }; diff --git a/drivers/misc/rockchip-efuse.c b/drivers/misc/rockchip-efuse.c index 46ce6305fe..083ee65e0a 100644 --- a/drivers/misc/rockchip-efuse.c +++ b/drivers/misc/rockchip-efuse.c @@ -37,7 +37,7 @@ struct rockchip_efuse_regs { /* 0x14 efuse strobe finish control register */ }; -struct rockchip_efuse_platdata { +struct rockchip_efuse_plat { void __iomem *base; struct clk *clk; }; @@ -58,7 +58,7 @@ static int dump_efuses(struct cmd_tbl *cmdtp, int flag, /* retrieve the device */ ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(rockchip_efuse), &dev); + DM_DRIVER_GET(rockchip_efuse), &dev); if (ret) { printf("%s: no misc-device found\n", __func__); return 0; @@ -86,7 +86,7 @@ U_BOOT_CMD( static int rockchip_rk3399_efuse_read(struct udevice *dev, int offset, void *buf, int size) { - struct rockchip_efuse_platdata *plat = dev_get_platdata(dev); + struct rockchip_efuse_plat *plat = dev_get_plat(dev); struct rockchip_efuse_regs *efuse = (struct rockchip_efuse_regs *)plat->base; @@ -137,9 +137,9 @@ static const struct misc_ops rockchip_efuse_ops = { .read = rockchip_efuse_read, }; -static int rockchip_efuse_ofdata_to_platdata(struct udevice *dev) +static int rockchip_efuse_of_to_plat(struct udevice *dev) { - struct rockchip_efuse_platdata *plat = dev_get_platdata(dev); + struct rockchip_efuse_plat *plat = dev_get_plat(dev); plat->base = dev_read_addr_ptr(dev); return 0; @@ -154,7 +154,7 @@ U_BOOT_DRIVER(rockchip_efuse) = { .name = "rockchip_efuse", .id = UCLASS_MISC, .of_match = rockchip_efuse_ids, - .ofdata_to_platdata = rockchip_efuse_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct rockchip_efuse_platdata), + .of_to_plat = rockchip_efuse_of_to_plat, + .plat_auto = sizeof(struct rockchip_efuse_plat), .ops = &rockchip_efuse_ops, }; diff --git a/drivers/misc/rockchip-otp.c b/drivers/misc/rockchip-otp.c index bdd443b3db..cc9a5450e0 100644 --- a/drivers/misc/rockchip-otp.c +++ b/drivers/misc/rockchip-otp.c @@ -47,13 +47,13 @@ #define OTPC_TIMEOUT 10000 -struct rockchip_otp_platdata { +struct rockchip_otp_plat { void __iomem *base; unsigned long secure_conf_base; unsigned long otp_mask_base; }; -static int rockchip_otp_wait_status(struct rockchip_otp_platdata *otp, +static int rockchip_otp_wait_status(struct rockchip_otp_plat *otp, u32 flag) { int delay = OTPC_TIMEOUT; @@ -73,7 +73,7 @@ static int rockchip_otp_wait_status(struct rockchip_otp_platdata *otp, return 0; } -static int rockchip_otp_ecc_enable(struct rockchip_otp_platdata *otp, +static int rockchip_otp_ecc_enable(struct rockchip_otp_plat *otp, bool enable) { int ret = 0; @@ -102,7 +102,7 @@ static int rockchip_otp_ecc_enable(struct rockchip_otp_platdata *otp, static int rockchip_px30_otp_read(struct udevice *dev, int offset, void *buf, int size) { - struct rockchip_otp_platdata *otp = dev_get_platdata(dev); + struct rockchip_otp_plat *otp = dev_get_plat(dev); u8 *buffer = buf; int ret = 0; @@ -145,9 +145,9 @@ static const struct misc_ops rockchip_otp_ops = { .read = rockchip_otp_read, }; -static int rockchip_otp_ofdata_to_platdata(struct udevice *dev) +static int rockchip_otp_of_to_plat(struct udevice *dev) { - struct rockchip_otp_platdata *otp = dev_get_platdata(dev); + struct rockchip_otp_plat *otp = dev_get_plat(dev); otp->base = dev_read_addr_ptr(dev); @@ -171,6 +171,6 @@ U_BOOT_DRIVER(rockchip_otp) = { .id = UCLASS_MISC, .of_match = rockchip_otp_ids, .ops = &rockchip_otp_ops, - .ofdata_to_platdata = rockchip_otp_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct rockchip_otp_platdata), + .of_to_plat = rockchip_otp_of_to_plat, + .plat_auto = sizeof(struct rockchip_otp_plat), }; diff --git a/drivers/misc/sandbox_adder.c b/drivers/misc/sandbox_adder.c index df262e6255..3ea33e46e9 100644 --- a/drivers/misc/sandbox_adder.c +++ b/drivers/misc/sandbox_adder.c @@ -21,7 +21,7 @@ struct sandbox_adder_priv { int sandbox_adder_read(struct udevice *dev, ulong address, void *data, enum axi_size_t size) { - struct p2sb_child_platdata *pplat = dev_get_parent_platdata(dev); + struct p2sb_child_plat *pplat = dev_get_parent_plat(dev); u32 *val = data; *val = pplat->pid << 24 | address; @@ -56,5 +56,5 @@ U_BOOT_DRIVER(adder_sandbox) = { .of_match = sandbox_adder_ids, .probe = sandbox_adder_probe, .ops = &sandbox_adder_ops, - .priv_auto_alloc_size = sizeof(struct sandbox_adder_priv), + .priv_auto = sizeof(struct sandbox_adder_priv), }; diff --git a/drivers/misc/sifive-otp.c b/drivers/misc/sifive-otp.c index 92f08dde01..3e658b3566 100644 --- a/drivers/misc/sifive-otp.c +++ b/drivers/misc/sifive-otp.c @@ -89,7 +89,7 @@ struct sifive_otp_regs { u32 pwe; /* Write enable input (defines program cycle) */ }; -struct sifive_otp_platdata { +struct sifive_otp_plat { struct sifive_otp_regs __iomem *regs; u32 total_fuses; }; @@ -100,7 +100,7 @@ struct sifive_otp_platdata { static int sifive_otp_read(struct udevice *dev, int offset, void *buf, int size) { - struct sifive_otp_platdata *plat = dev_get_platdata(dev); + struct sifive_otp_plat *plat = dev_get_plat(dev); struct sifive_otp_regs *regs = (struct sifive_otp_regs *)plat->regs; /* Check if offset and size are multiple of BYTES_PER_FUSE */ @@ -162,7 +162,7 @@ static int sifive_otp_read(struct udevice *dev, int offset, static int sifive_otp_write(struct udevice *dev, int offset, const void *buf, int size) { - struct sifive_otp_platdata *plat = dev_get_platdata(dev); + struct sifive_otp_plat *plat = dev_get_plat(dev); struct sifive_otp_regs *regs = (struct sifive_otp_regs *)plat->regs; /* Check if offset and size are multiple of BYTES_PER_FUSE */ @@ -239,9 +239,9 @@ static int sifive_otp_write(struct udevice *dev, int offset, return size; } -static int sifive_otp_ofdata_to_platdata(struct udevice *dev) +static int sifive_otp_of_to_plat(struct udevice *dev) { - struct sifive_otp_platdata *plat = dev_get_platdata(dev); + struct sifive_otp_plat *plat = dev_get_plat(dev); int ret; plat->regs = dev_read_addr_ptr(dev); @@ -269,7 +269,7 @@ U_BOOT_DRIVER(sifive_otp) = { .name = "sifive_otp", .id = UCLASS_MISC, .of_match = sifive_otp_ids, - .ofdata_to_platdata = sifive_otp_ofdata_to_platdata, - .platdata_auto_alloc_size = sizeof(struct sifive_otp_platdata), + .of_to_plat = sifive_otp_of_to_plat, + .plat_auto = sizeof(struct sifive_otp_plat), .ops = &sifive_otp_ops, }; diff --git a/drivers/misc/spltest_sandbox.c b/drivers/misc/spltest_sandbox.c index 3ae6707593..6b9701a06a 100644 --- a/drivers/misc/spltest_sandbox.c +++ b/drivers/misc/spltest_sandbox.c @@ -8,8 +8,14 @@ #include <dm.h> #include <dt-structs.h> +static const struct udevice_id sandbox_spl_ids[] = { + { .compatible = "sandbox,spl-test", }, + {} /* sentinel */ +}; + U_BOOT_DRIVER(sandbox_spl_test) = { .name = "sandbox_spl_test", .id = UCLASS_MISC, + .of_match = sandbox_spl_ids, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/misc/stm32mp_fuse.c b/drivers/misc/stm32mp_fuse.c index 0eed345973..9fd6c367dc 100644 --- a/drivers/misc/stm32mp_fuse.c +++ b/drivers/misc/stm32mp_fuse.c @@ -26,7 +26,7 @@ int fuse_read(u32 bank, u32 word, u32 *val) switch (bank) { case STM32MP_OTP_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stm32mp_bsec), + DM_DRIVER_GET(stm32mp_bsec), &dev); if (ret) return ret; @@ -41,7 +41,7 @@ int fuse_read(u32 bank, u32 word, u32 *val) #ifdef CONFIG_PMIC_STPMIC1 case STM32MP_NVM_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stpmic1_nvm), + DM_DRIVER_GET(stpmic1_nvm), &dev); if (ret) return ret; @@ -71,7 +71,7 @@ int fuse_prog(u32 bank, u32 word, u32 val) switch (bank) { case STM32MP_OTP_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stm32mp_bsec), + DM_DRIVER_GET(stm32mp_bsec), &dev); if (ret) return ret; @@ -86,7 +86,7 @@ int fuse_prog(u32 bank, u32 word, u32 val) #ifdef CONFIG_PMIC_STPMIC1 case STM32MP_NVM_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stpmic1_nvm), + DM_DRIVER_GET(stpmic1_nvm), &dev); if (ret) return ret; @@ -115,7 +115,7 @@ int fuse_sense(u32 bank, u32 word, u32 *val) switch (bank) { case STM32MP_OTP_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stm32mp_bsec), + DM_DRIVER_GET(stm32mp_bsec), &dev); if (ret) return ret; @@ -129,7 +129,7 @@ int fuse_sense(u32 bank, u32 word, u32 *val) #ifdef CONFIG_PMIC_STPMIC1 case STM32MP_NVM_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stpmic1_nvm), + DM_DRIVER_GET(stpmic1_nvm), &dev); if (ret) return ret; @@ -159,7 +159,7 @@ int fuse_override(u32 bank, u32 word, u32 val) switch (bank) { case STM32MP_OTP_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stm32mp_bsec), + DM_DRIVER_GET(stm32mp_bsec), &dev); if (ret) return ret; @@ -174,7 +174,7 @@ int fuse_override(u32 bank, u32 word, u32 val) #ifdef CONFIG_PMIC_STPMIC1 case STM32MP_NVM_BANK: ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_GET_DRIVER(stpmic1_nvm), + DM_DRIVER_GET(stpmic1_nvm), &dev); if (ret) return ret; diff --git a/drivers/misc/swap_case.c b/drivers/misc/swap_case.c index 07c67577d5..3cbc8f37ec 100644 --- a/drivers/misc/swap_case.c +++ b/drivers/misc/swap_case.c @@ -15,12 +15,12 @@ #include <linux/ctype.h> /** - * struct swap_case_platdata - platform data for this device + * struct swap_case_plat - platform data for this device * * @command: Current PCI command value * @bar: Current base address values */ -struct swap_case_platdata { +struct swap_case_plat { u16 command; u32 bar[6]; }; @@ -54,7 +54,7 @@ struct swap_case_priv { static int sandbox_swap_case_use_ea(const struct udevice *dev) { - return !!ofnode_get_property(dev->node, "use-ea", NULL); + return !!ofnode_get_property(dev_ofnode(dev), "use-ea", NULL); } /* Please keep these macros in sync with ea_regs below */ @@ -100,7 +100,7 @@ static int sandbox_swap_case_read_config(const struct udevice *emul, uint offset, ulong *valuep, enum pci_size_t size) { - struct swap_case_platdata *plat = dev_get_platdata(emul); + struct swap_case_plat *plat = dev_get_plat(emul); /* * The content of the EA capability structure is handled elsewhere to @@ -200,7 +200,7 @@ static int sandbox_swap_case_read_config(const struct udevice *emul, static int sandbox_swap_case_write_config(struct udevice *emul, uint offset, ulong value, enum pci_size_t size) { - struct swap_case_platdata *plat = dev_get_platdata(emul); + struct swap_case_plat *plat = dev_get_plat(emul); switch (offset) { case PCI_COMMAND: @@ -228,7 +228,7 @@ static int sandbox_swap_case_write_config(struct udevice *emul, uint offset, static int sandbox_swap_case_find_bar(struct udevice *emul, unsigned int addr, int *barnump, unsigned int *offsetp) { - struct swap_case_platdata *plat = dev_get_platdata(emul); + struct swap_case_plat *plat = dev_get_plat(emul); int barnum; for (barnum = 0; barnum < ARRAY_SIZE(barinfo); barnum++) { @@ -391,8 +391,8 @@ U_BOOT_DRIVER(sandbox_swap_case_emul) = { .id = UCLASS_PCI_EMUL, .of_match = sandbox_swap_case_ids, .ops = &sandbox_swap_case_emul_ops, - .priv_auto_alloc_size = sizeof(struct swap_case_priv), - .platdata_auto_alloc_size = sizeof(struct swap_case_platdata), + .priv_auto = sizeof(struct swap_case_priv), + .plat_auto = sizeof(struct swap_case_plat), }; static struct pci_device_id sandbox_swap_case_supported[] = { diff --git a/drivers/misc/tegra186_bpmp.c b/drivers/misc/tegra186_bpmp.c index 18da138507..f2366d6592 100644 --- a/drivers/misc/tegra186_bpmp.c +++ b/drivers/misc/tegra186_bpmp.c @@ -257,5 +257,5 @@ U_BOOT_DRIVER(tegra186_bpmp) = { .probe = tegra186_bpmp_probe, .remove = tegra186_bpmp_remove, .ops = &tegra186_bpmp_ops, - .priv_auto_alloc_size = sizeof(struct tegra186_bpmp), + .priv_auto = sizeof(struct tegra186_bpmp), }; diff --git a/drivers/misc/test_drv.c b/drivers/misc/test_drv.c new file mode 100644 index 0000000000..7dd3de34c9 --- /dev/null +++ b/drivers/misc/test_drv.c @@ -0,0 +1,222 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2014 Google, Inc + */ + +#include <common.h> +#include <dm.h> +#include <dm/test.h> + +/* Records the last testbus device that was removed */ +static struct udevice *testbus_removed; + +struct udevice *testbus_get_clear_removed(void) +{ + struct udevice *removed = testbus_removed; + + testbus_removed = NULL; + + return removed; +} + +static int testbus_drv_probe(struct udevice *dev) +{ + if (!CONFIG_IS_ENABLED(OF_PLATDATA)) { + int ret; + + ret = dm_scan_fdt_dev(dev); + if (ret) + return ret; + } + + return 0; +} + +static int testbus_child_post_bind(struct udevice *dev) +{ + struct dm_test_parent_plat *plat; + + plat = dev_get_parent_plat(dev); + plat->bind_flag = 1; + plat->uclass_bind_flag = 2; + + return 0; +} + +static int testbus_child_pre_probe(struct udevice *dev) +{ + struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); + + parent_data->flag += TEST_FLAG_CHILD_PROBED; + + return 0; +} + +static int testbus_child_pre_probe_uclass(struct udevice *dev) +{ + struct dm_test_priv *priv = dev_get_priv(dev); + + priv->uclass_flag++; + + return 0; +} + +static int testbus_child_post_probe_uclass(struct udevice *dev) +{ + struct dm_test_priv *priv = dev_get_priv(dev); + + priv->uclass_postp++; + + return 0; +} + +static int testbus_child_post_remove(struct udevice *dev) +{ + struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); + + parent_data->flag += TEST_FLAG_CHILD_REMOVED; + testbus_removed = dev; + + return 0; +} + +static const struct udevice_id testbus_ids[] = { + { .compatible = "denx,u-boot-test-bus", .data = DM_TEST_TYPE_FIRST }, + { } +}; + +U_BOOT_DRIVER(testbus_drv) = { + .name = "testbus_drv", + .of_match = testbus_ids, + .id = UCLASS_TEST_BUS, + .probe = testbus_drv_probe, + .child_post_bind = testbus_child_post_bind, + .priv_auto = sizeof(struct dm_test_priv), + .plat_auto = sizeof(struct dm_test_pdata), + .per_child_auto = sizeof(struct dm_test_parent_data), + .per_child_plat_auto = sizeof(struct dm_test_parent_plat), + .child_pre_probe = testbus_child_pre_probe, + .child_post_remove = testbus_child_post_remove, +}; + +UCLASS_DRIVER(testbus) = { + .name = "testbus", + .id = UCLASS_TEST_BUS, + .flags = DM_UC_FLAG_SEQ_ALIAS, + .child_pre_probe = testbus_child_pre_probe_uclass, + .child_post_probe = testbus_child_post_probe_uclass, +}; + +static int testfdt_drv_ping(struct udevice *dev, int pingval, int *pingret) +{ + const struct dm_test_pdata *pdata = dev_get_plat(dev); + struct dm_test_priv *priv = dev_get_priv(dev); + + *pingret = pingval + pdata->ping_add; + priv->ping_total += *pingret; + + return 0; +} + +static const struct test_ops test_ops = { + .ping = testfdt_drv_ping, +}; + +static int testfdt_of_to_plat(struct udevice *dev) +{ + struct dm_test_pdata *pdata = dev_get_plat(dev); + + pdata->ping_add = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), + "ping-add", -1); + pdata->base = fdtdec_get_addr(gd->fdt_blob, dev_of_offset(dev), + "ping-expect"); + + return 0; +} + +static int testfdt_drv_probe(struct udevice *dev) +{ + struct dm_test_priv *priv = dev_get_priv(dev); + + priv->ping_total += DM_TEST_START_TOTAL; + + /* + * If this device is on a bus, the uclass_flag will be set before + * calling this function. In the meantime the uclass_postp is + * initlized to a value -1. These are used respectively by + * dm_test_bus_child_pre_probe_uclass() and + * dm_test_bus_child_post_probe_uclass(). + */ + priv->uclass_total += priv->uclass_flag; + priv->uclass_postp = -1; + + return 0; +} + +static const struct udevice_id testfdt_ids[] = { + { .compatible = "denx,u-boot-fdt-test", .data = DM_TEST_TYPE_FIRST }, + { .compatible = "google,another-fdt-test", .data = DM_TEST_TYPE_SECOND }, + { } +}; + +U_BOOT_DRIVER(testfdt_drv) = { + .name = "testfdt_drv", + .of_match = testfdt_ids, + .id = UCLASS_TEST_FDT, + .of_to_plat = testfdt_of_to_plat, + .probe = testfdt_drv_probe, + .ops = &test_ops, + .priv_auto = sizeof(struct dm_test_priv), + .plat_auto = sizeof(struct dm_test_pdata), +}; + +static const struct udevice_id testfdt1_ids[] = { + { .compatible = "denx,u-boot-fdt-test1", .data = DM_TEST_TYPE_FIRST }, + { } +}; + +U_BOOT_DRIVER(testfdt1_drv) = { + .name = "testfdt1_drv", + .of_match = testfdt1_ids, + .id = UCLASS_TEST_FDT, + .of_to_plat = testfdt_of_to_plat, + .probe = testfdt_drv_probe, + .ops = &test_ops, + .priv_auto = sizeof(struct dm_test_priv), + .plat_auto = sizeof(struct dm_test_pdata), + .flags = DM_FLAG_PRE_RELOC, +}; + +/* From here is the testfdt uclass code */ +int testfdt_ping(struct udevice *dev, int pingval, int *pingret) +{ + const struct test_ops *ops = device_get_ops(dev); + + if (!ops->ping) + return -ENOSYS; + + return ops->ping(dev, pingval, pingret); +} + +UCLASS_DRIVER(testfdt) = { + .name = "testfdt", + .id = UCLASS_TEST_FDT, + .flags = DM_UC_FLAG_SEQ_ALIAS, +}; + +static const struct udevice_id testfdtm_ids[] = { + { .compatible = "denx,u-boot-fdtm-test" }, + { } +}; + +U_BOOT_DRIVER(testfdtm_drv) = { + .name = "testfdtm_drv", + .of_match = testfdtm_ids, + .id = UCLASS_TEST_FDT_MANUAL, +}; + +UCLASS_DRIVER(testfdtm) = { + .name = "testfdtm", + .id = UCLASS_TEST_FDT_MANUAL, + .flags = DM_UC_FLAG_SEQ_ALIAS | DM_UC_FLAG_NO_AUTO_SEQ, +}; diff --git a/drivers/misc/vexpress_config.c b/drivers/misc/vexpress_config.c index 02e5b586e2..2baca48109 100644 --- a/drivers/misc/vexpress_config.c +++ b/drivers/misc/vexpress_config.c @@ -109,7 +109,7 @@ static int vexpress_config_probe(struct udevice *dev) if (!priv) return -ENOMEM; - dev->uclass_priv = priv; + dev_get_uclass_priv(dev) = priv; priv->addr = ofnode_get_addr(args.node); return dev_read_u32(dev, "arm,vexpress,site", &priv->site); |