1
0
Fork 0

Merge git://git.denx.de/u-boot-dm

utp
Tom Rini 2015-10-27 19:08:19 -04:00
commit 2431492aef
47 changed files with 209 additions and 257 deletions

4
README
View File

@ -1472,8 +1472,8 @@ The following options need to be configured:
CONFIG_TPM
Support TPM devices.
CONFIG_TPM_TIS_I2C
Support for i2c bus TPM devices. Only one device
CONFIG_TPM_TIS_INFINEON
Support for Infineon i2c bus TPM devices. Only one device
per system is supported at this time.
CONFIG_TPM_TIS_I2C_BURST_LIMITATION

View File

@ -449,6 +449,9 @@ static int initr_env(void)
env_relocate();
else
set_default_env(NULL);
#ifdef CONFIG_OF_CONTROL
setenv_addr("fdtcontroladdr", gd->fdt_blob);
#endif
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);

View File

@ -443,7 +443,6 @@ TPM_COMMAND_NO_ARG(tpm_force_clear)
TPM_COMMAND_NO_ARG(tpm_physical_enable)
TPM_COMMAND_NO_ARG(tpm_physical_disable)
#ifdef CONFIG_DM_TPM
static int get_tpm(struct udevice **devp)
{
int rc;
@ -476,11 +475,11 @@ static int do_tpm_info(cmd_tbl_t *cmdtp, int flag, int argc,
return 0;
}
#endif
static int do_tpm_raw_transfer(cmd_tbl_t *cmdtp, int flag,
int argc, char * const argv[])
{
struct udevice *dev;
void *command;
uint8_t response[1024];
size_t count, response_length = sizeof(response);
@ -492,17 +491,11 @@ static int do_tpm_raw_transfer(cmd_tbl_t *cmdtp, int flag,
return CMD_RET_FAILURE;
}
#ifdef CONFIG_DM_TPM
struct udevice *dev;
rc = get_tpm(&dev);
if (rc)
return rc;
rc = tpm_xfer(dev, command, count, response, &response_length);
#else
rc = tis_sendrecv(command, count, response, &response_length);
#endif
free(command);
if (!rc) {
puts("tpm response:\n");
@ -657,9 +650,7 @@ TPM_COMMAND_NO_ARG(tpm_end_oiap)
U_BOOT_CMD_MKENT(cmd, 0, 1, do_tpm_ ## cmd, "", "")
static cmd_tbl_t tpm_commands[] = {
#ifdef CONFIG_DM_TPM
U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""),
#endif
U_BOOT_CMD_MKENT(init, 0, 1,
do_tpm_init, "", ""),
U_BOOT_CMD_MKENT(startup, 0, 1,
@ -730,9 +721,7 @@ U_BOOT_CMD(tpm, CONFIG_SYS_MAXARGS, 1, do_tpm,
"cmd args...\n"
" - Issue TPM command <cmd> with arguments <args...>.\n"
"Admin Startup and State Commands:\n"
#ifdef CONFIG_DM_TPM
" info - Show information about the TPM\n"
#endif
" init\n"
" - Put TPM into a state where it waits for 'startup' command.\n"
" startup mode\n"

View File

@ -281,7 +281,7 @@ static struct usb_device *usb_find_device(int devnum)
if (!device_active(hub))
continue;
udev = dev_get_parentdata(hub);
udev = dev_get_parent_priv(hub);
if (udev->devnum == devnum)
return udev;
@ -291,7 +291,7 @@ static struct usb_device *usb_find_device(int devnum)
if (!device_active(hub))
continue;
udev = dev_get_parentdata(dev);
udev = dev_get_parent_priv(dev);
if (udev->devnum == devnum)
return udev;
}
@ -407,7 +407,7 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre)
if (!device_active(child))
continue;
udev = dev_get_parentdata(child);
udev = dev_get_parent_priv(child);
/* Ignore emulators, we only want real devices */
if (device_get_uclass_id(child) != UCLASS_USB_EMUL) {
@ -553,7 +553,7 @@ static void show_info(struct udevice *dev)
struct udevice *child;
struct usb_device *udev;
udev = dev_get_parentdata(dev);
udev = dev_get_parent_priv(dev);
usb_display_desc(udev);
usb_display_config(udev);
for (device_find_first_child(dev, &child);
@ -641,7 +641,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
device_find_first_child(bus, &dev);
if (dev && device_active(dev)) {
udev = dev_get_parentdata(dev);
udev = dev_get_parent_priv(dev);
usb_show_tree(udev);
}
}

View File

@ -230,7 +230,7 @@ int legacy_hub_port_reset(struct usb_device *dev, int port,
#ifdef CONFIG_DM_USB
int hub_port_reset(struct udevice *dev, int port, unsigned short *portstat)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
return legacy_hub_port_reset(udev, port, portstat);
}
@ -610,7 +610,7 @@ int usb_hub_probe(struct usb_device *dev, int ifnum)
#ifdef CONFIG_DM_USB
int usb_hub_scan(struct udevice *hub)
{
struct usb_device *udev = dev_get_parentdata(hub);
struct usb_device *udev = dev_get_parent_priv(hub);
return usb_hub_configure(udev);
}

View File

@ -1408,7 +1408,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
static int usb_mass_storage_probe(struct udevice *dev)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
int ret;
usb_disable_asynch(1); /* asynch transfer not allowed */

View File

@ -6,6 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD,DEVELOP"
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_TPM=y
CONFIG_SPI_FLASH=y
CONFIG_DM=y
CONFIG_DM_TPM=y
CONFIG_TPM_ATMEL_TWI=y
CONFIG_TPM_AUTH_SESSIONS=y
CONFIG_TPM=y

View File

@ -6,6 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD"
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_TPM=y
CONFIG_SPI_FLASH=y
CONFIG_DM=y
CONFIG_DM_TPM=y
CONFIG_TPM_ATMEL_TWI=y
CONFIG_TPM_AUTH_SESSIONS=y
CONFIG_TPM=y

View File

@ -7,6 +7,8 @@ CONFIG_SYS_EXTRA_OPTIONS="TRAILBLAZER,SPIFLASH,DEVELOP"
# CONFIG_CMD_FLASH is not set
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_TPM=y
CONFIG_DM=y
CONFIG_DM_TPM=y
CONFIG_TPM_ATMEL_TWI=y
CONFIG_TPM_AUTH_SESSIONS=y
CONFIG_TPM=y

View File

@ -7,6 +7,8 @@ CONFIG_SYS_EXTRA_OPTIONS="TRAILBLAZER,SPIFLASH"
# CONFIG_CMD_FLASH is not set
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_TPM=y
CONFIG_DM=y
CONFIG_DM_TPM=y
CONFIG_TPM_ATMEL_TWI=y
CONFIG_TPM_AUTH_SESSIONS=y
CONFIG_TPM=y

View File

@ -20,7 +20,7 @@ CONFIG_CROS_EC_SPI=y
CONFIG_SPI_FLASH=y
CONFIG_TEGRA114_SPI=y
CONFIG_DM_TPM=y
CONFIG_TPM_TIS_I2C=y
CONFIG_TPM_TIS_INFINEON=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_DISPLAY_PORT=y

View File

@ -30,7 +30,7 @@ CONFIG_I2S_SAMSUNG=y
CONFIG_SOUND_MAX98095=y
CONFIG_SOUND_WM8994=y
CONFIG_DM_TPM=y
CONFIG_TPM_TIS_I2C=y
CONFIG_TPM_TIS_INFINEON=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_VIDEO_BRIDGE=y

View File

@ -30,7 +30,7 @@ CONFIG_I2S_SAMSUNG=y
CONFIG_SOUND_MAX98095=y
CONFIG_SOUND_WM8994=y
CONFIG_DM_TPM=y
CONFIG_TPM_TIS_I2C=y
CONFIG_TPM_TIS_INFINEON=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_VIDEO_BRIDGE=y

View File

@ -39,7 +39,7 @@ CONFIG_I2S_SAMSUNG=y
CONFIG_SOUND_MAX98095=y
CONFIG_SOUND_WM8994=y
CONFIG_DM_TPM=y
CONFIG_TPM_TIS_I2C=y
CONFIG_TPM_TIS_INFINEON=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_VIDEO_BRIDGE=y

View File

@ -39,7 +39,7 @@ CONFIG_I2S_SAMSUNG=y
CONFIG_SOUND_MAX98095=y
CONFIG_SOUND_WM8994=y
CONFIG_DM_TPM=y
CONFIG_TPM_TIS_I2C=y
CONFIG_TPM_TIS_INFINEON=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_VIDEO_BRIDGE=y

View File

@ -156,7 +156,10 @@ address of the fdt binary blob, and will override either of the options.
Be aware that this environment variable is checked prior to relocation,
when only the compiled-in environment is available. Therefore it is not
possible to define this variable in the saved SPI/NAND flash
environment, for example (it will be ignored).
environment, for example (it will be ignored). After relocation, this
variable will be set to the address of the newly relocated fdt blob.
It is read-only and cannot be changed. It can optionally be used to
control the boot process of Linux with bootm/bootz commands.
To use this, put something like this in your board header file:

View File

@ -84,7 +84,7 @@ The following primary data structures are in use:
This holds information about a device on the bus. All devices have
this structure, even the root hub. The controller itself does not
have this structure. You can access it for a device 'dev' with
dev_get_parentdata(dev). It matches the old structure except that the
dev_get_parent_priv(dev). It matches the old structure except that the
parent and child information is not present (since driver model
handles that). Once the device is set up, you can find the device
descriptor and current configuration descriptor in this structure.
@ -279,7 +279,7 @@ USB hubs are scanned as in the section above. While hubs have their own
uclass, they share some common elements with controllers:
- they both attach private data to their children (struct usb_device,
accessible for a child with dev_get_parentdata(child))
accessible for a child with dev_get_parent_priv(child))
- they both use usb_child_pre_probe() to set up their children as proper USB
devices

View File

@ -395,7 +395,7 @@ void *dev_get_uclass_priv(struct udevice *dev)
return dev->uclass_priv;
}
void *dev_get_parentdata(struct udevice *dev)
void *dev_get_parent_priv(struct udevice *dev)
{
if (!dev) {
dm_warn("%s: null device\n", __func__);

View File

@ -24,7 +24,7 @@ DECLARE_GLOBAL_DATA_PTR;
int cros_ec_spi_packet(struct udevice *udev, int out_bytes, int in_bytes)
{
struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
struct spi_slave *slave = dev_get_parentdata(dev->dev);
struct spi_slave *slave = dev_get_parent_priv(dev->dev);
ulong start;
uint8_t byte;
int rv;
@ -84,7 +84,7 @@ int cros_ec_spi_command(struct udevice *udev, uint8_t cmd, int cmd_version,
uint8_t **dinp, int din_len)
{
struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
struct spi_slave *slave = dev_get_parentdata(dev->dev);
struct spi_slave *slave = dev_get_parent_priv(dev->dev);
int in_bytes = din_len + 4; /* status, length, checksum, trailer */
uint8_t *out;
uint8_t *p;

View File

@ -577,7 +577,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id)
*/
static int spi_dataflash_probe(struct udevice *dev)
{
struct spi_slave *spi = dev_get_parentdata(dev);
struct spi_slave *spi = dev_get_parent_priv(dev);
struct spi_flash *spi_flash;
struct flash_info *info;
u8 idcode[5];

View File

@ -471,7 +471,7 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
int spi_flash_std_probe(struct udevice *dev)
{
struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_slave *slave = dev_get_parent_priv(dev);
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
struct spi_flash *flash;

View File

@ -913,7 +913,7 @@ void spi_init(void)
#else
static int fsl_qspi_child_pre_probe(struct udevice *dev)
{
struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_slave *slave = dev_get_parent_priv(dev);
slave->max_write_size = TX_BUFFER_SIZE;

View File

@ -740,7 +740,7 @@ static int ich_spi_child_pre_probe(struct udevice *dev)
struct udevice *bus = dev_get_parent(dev);
struct ich_spi_platdata *plat = dev_get_platdata(bus);
struct ich_spi_priv *priv = dev_get_priv(bus);
struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_slave *slave = dev_get_parent_priv(dev);
/*
* Yes this controller can only write a small number of bytes at

View File

@ -200,7 +200,7 @@ static int soft_spi_ofdata_to_platdata(struct udevice *dev)
static int soft_spi_probe(struct udevice *dev)
{
struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_slave *slave = dev_get_parent_priv(dev);
struct soft_spi_platdata *plat = dev->platdata;
int cs_flags, clk_flags;

View File

@ -124,7 +124,7 @@ static int spi_post_probe(struct udevice *bus)
static int spi_child_pre_probe(struct udevice *dev)
{
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_slave *slave = dev_get_parent_priv(dev);
/*
* This is needed because we pass struct spi_slave around the place
@ -282,7 +282,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
ret = device_probe(dev);
if (ret)
goto err;
slave = dev_get_parentdata(dev);
slave = dev_get_parent_priv(dev);
slave->dev = dev;
}
@ -291,7 +291,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode,
goto err;
*busp = bus;
*devp = dev_get_parentdata(dev);
*devp = dev_get_parent_priv(dev);
debug("%s: bus=%p, slave=%p\n", __func__, bus, *devp);
return 0;
@ -320,7 +320,7 @@ struct spi_slave *spi_setup_slave_fdt(const void *blob, int node,
ret = device_get_child_by_of_offset(bus, node, &dev);
if (ret)
return NULL;
return dev_get_parentdata(dev);
return dev_get_parent_priv(dev);
}
/* Compatibility function - to be removed */

View File

@ -4,15 +4,6 @@
menu "TPM support"
config DM_TPM
bool "Enable driver model for Trusted Platform Module drivers"
depends on DM && TPM
help
Enable driver model for TPMs. The TIS interface (tis_open(),
tis_sendrecv(), etc.) is then implemented by the TPM uclass. Note
that even with driver model only a single TPM is currently
supported, since the tpm library assumes this.
config TPM_TIS_SANDBOX
bool "Enable sandbox TPM driver"
depends on SANDBOX
@ -24,14 +15,14 @@ config TPM_TIS_SANDBOX
config TPM_ATMEL_TWI
bool "Enable Atmel TWI TPM device driver"
depends on TPM
depends on TPM && DM_I2C
help
This driver supports an Atmel TPM device connected on the I2C bus.
The usual tpm operations and the 'tpm' command can be used to talk
to the device using the standard TPM Interface Specification (TIS)
protocol
config TPM_TIS_I2C
config TPM_TIS_INFINEON
bool "Enable support for Infineon SLB9635/45 TPMs on I2C"
depends on TPM && DM_I2C
help
@ -42,7 +33,7 @@ config TPM_TIS_I2C
config TPM_TIS_I2C_BURST_LIMITATION
bool "Enable I2C burst length limitation"
depends on TPM_TIS_I2C
depends on TPM_TIS_INFINEON
help
Some broken TPMs have a limitation on the number of bytes they can
receive in one message. Enable this option to allow you to set this

View File

@ -3,9 +3,9 @@
# SPDX-License-Identifier: GPL-2.0+
#
obj-$(CONFIG_DM_TPM) += tpm-uclass.o
obj-$(CONFIG_TPM) += tpm-uclass.o
obj-$(CONFIG_TPM_ATMEL_TWI) += tpm_atmel_twi.o
obj-$(CONFIG_TPM_TIS_I2C) += tpm_tis_i2c.o
obj-$(CONFIG_TPM_TIS_INFINEON) += tpm_tis_infineon.o
obj-$(CONFIG_TPM_TIS_LPC) += tpm_tis_lpc.o
obj-$(CONFIG_TPM_TIS_SANDBOX) += tpm_tis_sandbox.o

View File

@ -7,51 +7,56 @@
*/
#include <common.h>
#include <dm.h>
#include <tpm.h>
#include <i2c.h>
#include <asm/unaligned.h>
#include "tpm_internal.h"
#define ATMEL_TPM_TIMEOUT_MS 5000 /* sufficient for anything but
generating/exporting keys */
/*
* tis_init()
*
* Initialize the TPM device. Returns 0 on success or -1 on
* failure (in case device probing did not succeed).
*/
int tis_init(void)
{
return 0;
}
/*
* tis_open()
* tpm_atmel_twi_open()
*
* Requests access to locality 0 for the caller. After all commands have been
* completed the caller is supposed to call tis_close().
*
* Returns 0 on success, -1 on failure.
*/
int tis_open(void)
static int tpm_atmel_twi_open(struct udevice *dev)
{
return 0;
}
/*
* tis_close()
* tpm_atmel_twi_close()
*
* terminate the currect session with the TPM by releasing the locked
* locality. Returns 0 on success of -1 on failure (in case lock
* removal did not succeed).
*/
int tis_close(void)
static int tpm_atmel_twi_close(struct udevice *dev)
{
return 0;
}
/*
* tis_sendrecv()
* tpm_atmel_twi_get_desc()
*
* @dev: Device to check
* @buf: Buffer to put the string
* @size: Maximum size of buffer
* @return length of string, or -ENOSPC it no space
*/
static int tpm_atmel_twi_get_desc(struct udevice *dev, char *buf, int size)
{
return 0;
}
/*
* tpm_atmel_twi_xfer()
*
* Send the requested data to the TPM and then try to get its response
*
@ -63,8 +68,9 @@ int tis_close(void)
* Returns 0 on success (and places the number of response bytes at recv_len)
* or -1 on failure.
*/
int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
size_t *recv_len)
static int tpm_atmel_twi_xfer(struct udevice *dev,
const uint8_t *sendbuf, size_t send_size,
uint8_t *recvbuf, size_t *recv_len)
{
int res;
unsigned long start;
@ -83,6 +89,7 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
start = get_timer(0);
while ((res = i2c_read(0x29, 0, 0, recvbuf, 10))) {
/* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */
if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) {
puts("tpm timed out\n");
return -1;
@ -110,3 +117,28 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
return res;
}
static int tpm_atmel_twi_probe(struct udevice *dev)
{
return 0;
}
static const struct udevice_id tpm_atmel_twi_ids[] = {
{ .compatible = "atmel,at97sc3204t"},
{ }
};
static const struct tpm_ops tpm_atmel_twi_ops = {
.open = tpm_atmel_twi_open,
.close = tpm_atmel_twi_close,
.xfer = tpm_atmel_twi_xfer,
.get_desc = tpm_atmel_twi_get_desc,
};
U_BOOT_DRIVER(tpm_atmel_twi) = {
.name = "tpm_atmel_twi",
.id = UCLASS_TPM,
.of_match = tpm_atmel_twi_ids,
.ops = &tpm_atmel_twi_ops,
.probe = tpm_atmel_twi_probe,
};

View File

@ -24,14 +24,13 @@
#include <dm.h>
#include <fdtdec.h>
#include <i2c.h>
#include <tis.h>
#include <tpm.h>
#include <asm-generic/errno.h>
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/unaligned/be_byteshift.h>
#include "tpm_tis_i2c.h"
#include "tpm_tis_infineon.h"
#include "tpm_internal.h"
DECLARE_GLOBAL_DATA_PTR;
@ -614,7 +613,7 @@ static const struct udevice_id tpm_tis_i2c_ids[] = {
};
U_BOOT_DRIVER(tpm_tis_i2c) = {
.name = "tpm_tis_i2c",
.name = "tpm_tis_infineon",
.id = UCLASS_TPM,
.of_match = tpm_tis_i2c_ids,
.ops = &tpm_tis_i2c_ops,

View File

@ -16,7 +16,6 @@
#include <common.h>
#include <dm.h>
#include <mapmem.h>
#include <tis.h>
#include <tpm.h>
#include <asm/io.h>

View File

@ -945,7 +945,7 @@ int smsc95xx_eth_get_info(struct usb_device *dev, struct ueth_data *ss,
#ifdef CONFIG_DM_ETH
static int smsc95xx_eth_start(struct udevice *dev)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
struct smsc95xx_private *priv = dev_get_priv(dev);
struct eth_pdata *pdata = dev_get_platdata(dev);
@ -1029,7 +1029,7 @@ static int smsc95xx_free_pkt(struct udevice *dev, uchar *packet, int packet_len)
int smsc95xx_write_hwaddr(struct udevice *dev)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
struct eth_pdata *pdata = dev_get_platdata(dev);
struct smsc95xx_private *priv = dev_get_priv(dev);

View File

@ -19,7 +19,7 @@
int usb_ether_register(struct udevice *dev, struct ueth_data *ueth, int rxsize)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
struct usb_interface_descriptor *iface_desc;
bool ep_in_found = false, ep_out_found = false;
struct usb_interface *iface;

View File

@ -303,7 +303,7 @@ static void ehci_update_endpt2_dev_n_port(struct usb_device *udev,
ttdev = udev;
parent = udev->dev;
uparent = dev_get_parentdata(parent);
uparent = dev_get_parent_priv(parent);
while (uparent->speed != USB_SPEED_HIGH) {
struct udevice *dev = parent;
@ -313,9 +313,9 @@ static void ehci_update_endpt2_dev_n_port(struct usb_device *udev,
return;
}
ttdev = dev_get_parentdata(dev);
ttdev = dev_get_parent_priv(dev);
parent = dev->parent;
uparent = dev_get_parentdata(parent);
uparent = dev_get_parent_priv(parent);
}
parent_devnum = uparent->devnum;
#else

View File

@ -289,7 +289,7 @@ static struct usb_device *find_child_devnum(struct udevice *parent, int devnum)
if (!device_active(parent))
return NULL;
udev = dev_get_parentdata(parent);
udev = dev_get_parent_priv(parent);
if (udev->devnum == devnum)
return udev;
@ -575,7 +575,7 @@ int usb_scan_device(struct udevice *parent, int port,
udev->portnr = port;
debug("Calling usb_setup_device(), portnr=%d\n", udev->portnr);
parent_udev = device_get_uclass_id(parent) == UCLASS_USB_HUB ?
dev_get_parentdata(parent) : NULL;
dev_get_parent_priv(parent) : NULL;
ret = usb_setup_device(udev, priv->desc_before_addr, parent_udev);
debug("read_descriptor for '%s': ret=%d\n", parent->name, ret);
if (ret)
@ -638,7 +638,7 @@ int usb_detect_change(void)
if (!device_active(dev))
continue;
udev = dev_get_parentdata(dev);
udev = dev_get_parent_priv(dev);
if (usb_get_port_status(udev, udev->portnr, &status)
< 0)
/* USB request failed */
@ -694,7 +694,7 @@ struct udevice *usb_get_bus(struct udevice *dev)
int usb_child_pre_probe(struct udevice *dev)
{
struct usb_device *udev = dev_get_parentdata(dev);
struct usb_device *udev = dev_get_parent_priv(dev);
struct usb_dev_platdata *plat = dev_get_parent_platdata(dev);
int ret;

View File

@ -1119,7 +1119,7 @@ static struct usb_device *get_usb_device(struct udevice *dev)
if (device_get_uclass_id(dev) == UCLASS_USB)
udev = dev_get_uclass_priv(dev);
else
udev = dev_get_parentdata(dev);
udev = dev_get_parent_priv(dev);
return udev;
}
@ -1150,7 +1150,7 @@ static int xhci_submit_control_msg(struct udevice *dev, struct usb_device *udev,
} else {
while (!is_root_hub(hub->parent))
hub = hub->parent;
uhop = dev_get_parentdata(hub);
uhop = dev_get_parent_priv(hub);
root_portnr = uhop->portnr;
}
}

View File

@ -82,7 +82,7 @@ static inline u16 find_tt(struct usb_device *udev)
*/
ttdev = udev;
parent = udev->dev;
uparent = dev_get_parentdata(parent);
uparent = dev_get_parent_priv(parent);
while (uparent->speed != USB_SPEED_HIGH) {
struct udevice *dev = parent;
@ -92,9 +92,9 @@ static inline u16 find_tt(struct usb_device *udev)
return 0;
}
ttdev = dev_get_parentdata(dev);
ttdev = dev_get_parent_priv(dev);
parent = dev->parent;
uparent = dev_get_parentdata(parent);
uparent = dev_get_parent_priv(parent);
}
return (uparent->devnum << 8) | (ttdev->portnr - 1);
@ -119,12 +119,12 @@ static inline struct usb_device *usb_dev_get_parent(struct usb_device *udev)
* If these 2 are not the same we are being called from
* usb_scan_device() and udev itself is the parent.
*/
if (dev_get_parentdata(udev->dev) != udev)
if (dev_get_parent_priv(udev->dev) != udev)
return udev;
/* We are being called normally, use the parent pointer */
if (device_get_uclass_id(parent) == UCLASS_USB_HUB)
return dev_get_parentdata(parent);
return dev_get_parent_priv(parent);
return NULL;
}

View File

@ -21,13 +21,13 @@
struct driver_info;
/* Driver is active (probed). Cleared when it is removed */
#define DM_FLAG_ACTIVATED (1 << 0)
#define DM_FLAG_ACTIVATED (1 << 0)
/* DM is responsible for allocating and freeing platdata */
#define DM_FLAG_ALLOC_PDATA (1 << 1)
#define DM_FLAG_ALLOC_PDATA (1 << 1)
/* DM should init this device prior to relocation */
#define DM_FLAG_PRE_RELOC (1 << 2)
#define DM_FLAG_PRE_RELOC (1 << 2)
/* DM is responsible for allocating and freeing parent_platdata */
#define DM_FLAG_ALLOC_PARENT_PDATA (1 << 3)
@ -36,10 +36,10 @@ struct driver_info;
#define DM_FLAG_ALLOC_UCLASS_PDATA (1 << 4)
/* Allocate driver private data on a DMA boundary */
#define DM_FLAG_ALLOC_PRIV_DMA (1 << 5)
#define DM_FLAG_ALLOC_PRIV_DMA (1 << 5)
/* Device is bound */
#define DM_FLAG_BOUND (1 << 6)
#define DM_FLAG_BOUND (1 << 6)
/**
* struct udevice - An instance of a driver
@ -78,6 +78,10 @@ struct driver_info;
* @req_seq: Requested sequence number for this device (-1 = any)
* @seq: Allocated sequence number for this device (-1 = none). This is set up
* when the device is probed and will be unique within the device's uclass.
* @devres_head: List of memory allocations associated with this device.
* When CONFIG_DEVRES is enabled, devm_kmalloc() and friends will
* add to this list. Memory so-allocated will be freed
* automatically when the device is removed / unbound
*/
struct udevice {
const struct driver *driver;
@ -166,10 +170,6 @@ struct udevice_id {
* @per_child_auto_alloc_size: Each device can hold private data owned by
* its parent. If required this will be automatically allocated if this
* value is non-zero.
* TODO(sjg@chromium.org): I'm considering dropping this, and just having
* device_probe_child() pass it in. So far the use case for allocating it
* is SPI, but I found that unsatisfactory. Since it is here I will leave it
* until things are clearer.
* @per_child_platdata_auto_alloc_size: A bus likes to store information about
* its children. If non-zero this is the size of this data, to be allocated
* in the child's parent_platdata pointer.
@ -232,20 +232,6 @@ void *dev_get_parent_platdata(struct udevice *dev);
*/
void *dev_get_uclass_platdata(struct udevice *dev);
/**
* dev_get_parentdata() - Get the parent data for a device
*
* The parent data is data stored in the device but owned by the parent.
* For example, a USB device may have parent data which contains information
* about how to talk to the device over USB.
*
* This checks that dev is not NULL, but no other checks for now
*
* @dev Device to check
* @return parent data, or NULL if none
*/
void *dev_get_parentdata(struct udevice *dev);
/**
* dev_get_priv() - Get the private data for a device
*
@ -257,12 +243,18 @@ void *dev_get_parentdata(struct udevice *dev);
void *dev_get_priv(struct udevice *dev);
/**
* struct dev_get_parent() - Get the parent of a device
* dev_get_parent_priv() - Get the parent private data for a device
*
* @child: Child to check
* @return parent of child, or NULL if this is the root device
* The parent private data is data stored in the device but owned by the
* parent. For example, a USB device may have parent data which contains
* information about how to talk to the device over USB.
*
* This checks that dev is not NULL, but no other checks for now
*
* @dev Device to check
* @return parent data, or NULL if none
*/
struct udevice *dev_get_parent(struct udevice *child);
void *dev_get_parent_priv(struct udevice *dev);
/**
* dev_get_uclass_priv() - Get the private uclass data for a device
@ -274,17 +266,38 @@ struct udevice *dev_get_parent(struct udevice *child);
*/
void *dev_get_uclass_priv(struct udevice *dev);
/**
* struct dev_get_parent() - Get the parent of a device
*
* @child: Child to check
* @return parent of child, or NULL if this is the root device
*/
struct udevice *dev_get_parent(struct udevice *child);
/**
* dev_get_driver_data() - get the driver data used to bind a device
*
* When a device is bound using a device tree node, it matches a
* particular compatible string as in struct udevice_id. This function
* particular compatible string in struct udevice_id. This function
* returns the associated data value for that compatible string. This is
* the 'data' field in struct udevice_id.
*
* As an example, consider this structure:
* static const struct udevice_id tegra_i2c_ids[] = {
* { .compatible = "nvidia,tegra114-i2c", .data = TYPE_114 },
* { .compatible = "nvidia,tegra20-i2c", .data = TYPE_STD },
* { .compatible = "nvidia,tegra20-i2c-dvc", .data = TYPE_DVC },
* { }
* };
*
* When driver model finds a driver for this it will store the 'data' value
* corresponding to the compatible string it matches. This function returns
* that value. This allows the driver to handle several variants of a device.
*
* For USB devices, this is the driver_info field in struct usb_device_id.
*
* @dev: Device to check
* @return driver data (0 if none is provided)
*/
ulong dev_get_driver_data(struct udevice *dev);
@ -299,7 +312,7 @@ ulong dev_get_driver_data(struct udevice *dev);
*/
const void *dev_get_driver_ops(struct udevice *dev);
/*
/**
* device_get_uclass_id() - return the uclass ID of a device
*
* @dev: Device to check
@ -307,7 +320,7 @@ const void *dev_get_driver_ops(struct udevice *dev);
*/
enum uclass_id device_get_uclass_id(struct udevice *dev);
/*
/**
* dev_get_uclass_name() - return the uclass name of a device
*
* This checks that dev is not NULL.
@ -512,7 +525,7 @@ void *_devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
#endif
/**
* devres_alloc - Allocate device resource data
* devres_alloc() - Allocate device resource data
* @release: Release function devres will be associated with
* @size: Allocation size
* @gfp: Allocation flags
@ -528,7 +541,7 @@ void *_devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
_devres_alloc(release, size, gfp | __GFP_ZERO)
/**
* devres_free - Free device resource data
* devres_free() - Free device resource data
* @res: Pointer to devres data to free
*
* Free devres created with devres_alloc().
@ -536,7 +549,7 @@ void *_devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
void devres_free(void *res);
/**
* devres_add - Register device resource
* devres_add() - Register device resource
* @dev: Device to add resource to
* @res: Resource to register
*
@ -547,7 +560,7 @@ void devres_free(void *res);
void devres_add(struct udevice *dev, void *res);
/**
* devres_find - Find device resource
* devres_find() - Find device resource
* @dev: Device to lookup resource from
* @release: Look for resources associated with this release function
* @match: Match function (optional)
@ -557,14 +570,13 @@ void devres_add(struct udevice *dev, void *res);
* and for which @match returns 1. If @match is NULL, it's considered
* to match all.
*
* RETURNS:
* Pointer to found devres, NULL if not found.
* @return pointer to found devres, NULL if not found.
*/
void *devres_find(struct udevice *dev, dr_release_t release,
dr_match_t match, void *match_data);
/**
* devres_get - Find devres, if non-existent, add one atomically
* devres_get() - Find devres, if non-existent, add one atomically
* @dev: Device to lookup or add devres for
* @new_res: Pointer to new initialized devres to add if not found
* @match: Match function (optional)
@ -574,14 +586,13 @@ void *devres_find(struct udevice *dev, dr_release_t release,
* as @new_res and for which @match return 1. If found, @new_res is
* freed; otherwise, @new_res is added atomically.
*
* RETURNS:
* Pointer to found or added devres.
* @return ointer to found or added devres.
*/
void *devres_get(struct udevice *dev, void *new_res,
dr_match_t match, void *match_data);
/**
* devres_remove - Find a device resource and remove it
* devres_remove() - Find a device resource and remove it
* @dev: Device to find resource from
* @release: Look for resources associated with this release function
* @match: Match function (optional)
@ -592,14 +603,13 @@ void *devres_get(struct udevice *dev, void *new_res,
* match all. If found, the resource is removed atomically and
* returned.
*
* RETURNS:
* Pointer to removed devres on success, NULL if not found.
* @return ointer to removed devres on success, NULL if not found.
*/
void *devres_remove(struct udevice *dev, dr_release_t release,
dr_match_t match, void *match_data);
/**
* devres_destroy - Find a device resource and destroy it
* devres_destroy() - Find a device resource and destroy it
* @dev: Device to find resource from
* @release: Look for resources associated with this release function
* @match: Match function (optional)
@ -613,14 +623,13 @@ void *devres_remove(struct udevice *dev, dr_release_t release,
* only the devres-allocated data will be freed. The caller becomes
* responsible for freeing any other data.
*
* RETURNS:
* 0 if devres is found and freed, -ENOENT if not found.
* @return 0 if devres is found and freed, -ENOENT if not found.
*/
int devres_destroy(struct udevice *dev, dr_release_t release,
dr_match_t match, void *match_data);
/**
* devres_release - Find a device resource and destroy it, calling release
* devres_release() - Find a device resource and destroy it, calling release
* @dev: Device to find resource from
* @release: Look for resources associated with this release function
* @match: Match function (optional)
@ -631,15 +640,14 @@ int devres_destroy(struct udevice *dev, dr_release_t release,
* match all. If found, the resource is removed atomically, the
* release function called and the resource freed.
*
* RETURNS:
* 0 if devres is found and freed, -ENOENT if not found.
* @return 0 if devres is found and freed, -ENOENT if not found.
*/
int devres_release(struct udevice *dev, dr_release_t release,
dr_match_t match, void *match_data);
/* managed devm_k.alloc/kfree for device drivers */
/**
* devm_kmalloc - Resource-managed kmalloc
* devm_kmalloc() - Resource-managed kmalloc
* @dev: Device to allocate memory for
* @size: Allocation size
* @gfp: Allocation gfp flags
@ -648,8 +656,7 @@ int devres_release(struct udevice *dev, dr_release_t release,
* automatically freed on driver detach. Like all other devres
* resources, guaranteed alignment is unsigned long long.
*
* RETURNS:
* Pointer to allocated memory on success, NULL on failure.
* @return pointer to allocated memory on success, NULL on failure.
*/
void *devm_kmalloc(struct udevice *dev, size_t size, gfp_t gfp);
static inline void *devm_kzalloc(struct udevice *dev, size_t size, gfp_t gfp)
@ -670,13 +677,13 @@ static inline void *devm_kcalloc(struct udevice *dev,
}
/**
* devm_kfree - Resource-managed kfree
* devm_kfree() - Resource-managed kfree
* @dev: Device this memory belongs to
* @p: Memory to free
* @ptr: Memory to free
*
* Free memory allocated with devm_kmalloc().
*/
void devm_kfree(struct udevice *dev, void *p);
void devm_kfree(struct udevice *dev, void *ptr);
#else /* ! CONFIG_DEVRES */
@ -750,9 +757,9 @@ static inline void *devm_kcalloc(struct udevice *dev,
return kmalloc(n * size, flags | __GFP_ZERO);
}
static inline void devm_kfree(struct udevice *dev, void *p)
static inline void devm_kfree(struct udevice *dev, void *ptr)
{
kfree(p);
kfree(ptr);
}
#endif /* ! CONFIG_DEVRES */

View File

@ -797,7 +797,7 @@ struct udevice;
*
* Every device on a PCI bus has this per-child data.
*
* It can be accessed using dev_get_parentdata(dev) if dev->parent is a
* It can be accessed using dev_get_parent_priv(dev) if dev->parent is a
* PCI bus (i.e. UCLASS_PCI)
*
* @devfn: Encoded device and function index - see PCI_DEVFN()

View File

@ -88,7 +88,7 @@ struct dm_spi_slave_platdata {
* struct spi_slave - Representation of a SPI slave
*
* For driver model this is the per-child data used by the SPI bus. It can
* be accessed using dev_get_parentdata() on the slave device. The SPI uclass
* be accessed using dev_get_parent_priv() on the slave device. The SPI uclass
* sets uip per_child_auto_alloc_size to sizeof(struct spi_slave), and the
* driver should not override it. Two platform data fields (max_hz and mode)
* are copied into this structure to provide an initial value. This allows

View File

@ -1,60 +0,0 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __TIS_H
#define __TIS_H
#ifndef CONFIG_DM_TPM
#include <common.h>
/* Low-level interface to access TPM */
/*
* tis_init()
*
* Initialize the TPM device. Returns 0 on success or -1 on
* failure (in case device probing did not succeed).
*/
int tis_init(void);
/*
* tis_open()
*
* Requests access to locality 0 for the caller. After all commands have been
* completed the caller is supposed to call tis_close().
*
* Returns 0 on success, -1 on failure.
*/
int tis_open(void);
/*
* tis_close()
*
* terminate the currect session with the TPM by releasing the locked
* locality. Returns 0 on success of -1 on failure (in case lock
* removal did not succeed).
*/
int tis_close(void);
/*
* tis_sendrecv()
*
* Send the requested data to the TPM and then try to get its response
*
* @sendbuf - buffer of the data to send
* @send_size size of the data to send
* @recvbuf - memory to save the response to
* @recv_len - pointer to the size of the response buffer
*
* Returns 0 on success (and places the number of response bytes at recv_len)
* or -1 on failure.
*/
int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
size_t *recv_len);
#endif
#endif /* __TIS_H */

View File

@ -8,8 +8,6 @@
#ifndef __TPM_H
#define __TPM_H
#include <tis.h>
/*
* Here is a partial implementation of TPM commands. Please consult TCG Main
* Specification for definitions of TPM commands.
@ -196,8 +194,6 @@ struct tpm_permanent_flags {
u8 disable_full_da_logic_info;
} __packed;
#ifdef CONFIG_DM_TPM
/* Max buffer size supported by our tpm */
#define TPM_DEV_BUFSIZE 1260
@ -375,8 +371,6 @@ int tpm_get_desc(struct udevice *dev, char *buf, int size);
int tpm_xfer(struct udevice *dev, const uint8_t *sendbuf, size_t send_size,
uint8_t *recvbuf, size_t *recv_size);
#endif /* CONFIG_DM_TPM */
/**
* Initialize TPM device. It must be called before any TPM commands.
*

View File

@ -96,7 +96,7 @@ enum {
* (the hubs) have this as parent data. Hubs are children of controllers or
* other hubs and there is always a single root hub for each controller.
* Therefore struct usb_device can always be accessed with
* dev_get_parentdata(dev), where dev is a USB device.
* dev_get_parent_priv(dev), where dev is a USB device.
*
* Pointers exist for obtaining both the device (could be any uclass) and
* controller (UCLASS_USB) from this structure. The controller does not have

View File

@ -56,6 +56,7 @@ source lib/rsa/Kconfig
config TPM
bool "Trusted Platform Module (TPM) Support"
depends on DM
help
This enables support for TPMs which can be used to provide security
features for your board. The TPM can be connected via LPC or I2C

View File

@ -219,13 +219,13 @@ int fdtdec_get_pci_addr(const void *blob, int node, enum fdt_pci_space type,
for (i = 0; i < num; i++) {
debug("pci address #%d: %08lx %08lx %08lx\n", i,
(ulong)fdt_addr_to_cpu(cell[0]),
(ulong)fdt_addr_to_cpu(cell[1]),
(ulong)fdt_addr_to_cpu(cell[2]));
if ((fdt_addr_to_cpu(*cell) & type) == type) {
addr->phys_hi = fdt_addr_to_cpu(cell[0]);
addr->phys_mid = fdt_addr_to_cpu(cell[1]);
addr->phys_lo = fdt_addr_to_cpu(cell[2]);
(ulong)fdt32_to_cpu(cell[0]),
(ulong)fdt32_to_cpu(cell[1]),
(ulong)fdt32_to_cpu(cell[2]));
if ((fdt32_to_cpu(*cell) & type) == type) {
addr->phys_hi = fdt32_to_cpu(cell[0]);
addr->phys_mid = fdt32_to_cpu(cell[1]);
addr->phys_lo = fdt32_to_cpu(cell[1]);
break;
} else {
cell += (FDT_PCI_ADDR_CELLS +

View File

@ -7,7 +7,6 @@
#include <common.h>
#include <dm.h>
#include <tis.h>
#include <tpm.h>
#include <asm/unaligned.h>
#include <u-boot/sha1.h>
@ -230,6 +229,8 @@ static uint32_t tpm_return_code(const void *response)
static uint32_t tpm_sendrecv_command(const void *command,
void *response, size_t *size_ptr)
{
struct udevice *dev;
int ret;
uint8_t response_buffer[COMMAND_BUFFER_SIZE];
size_t response_length;
uint32_t err;
@ -240,19 +241,13 @@ static uint32_t tpm_sendrecv_command(const void *command,
response = response_buffer;
response_length = sizeof(response_buffer);
}
#ifdef CONFIG_DM_TPM
struct udevice *dev;
int ret;
ret = uclass_first_device(UCLASS_TPM, &dev);
if (ret)
return ret;
err = tpm_xfer(dev, command, tpm_command_size(command),
response, &response_length);
#else
err = tis_sendrecv(command, tpm_command_size(command),
response, &response_length);
#endif
if (err < 0)
return TPM_LIB_ERROR;
if (size_ptr)
@ -264,21 +259,12 @@ static uint32_t tpm_sendrecv_command(const void *command,
int tpm_init(void)
{
int err;
#ifdef CONFIG_DM_TPM
struct udevice *dev;
err = uclass_first_device(UCLASS_TPM, &dev);
if (err)
return err;
return tpm_open(dev);
#else
err = tis_init();
if (err)
return err;
return tis_open();
#endif
}
uint32_t tpm_startup(enum tpm_startup_type mode)

View File

@ -46,7 +46,7 @@ static int testbus_child_post_bind(struct udevice *dev)
static int testbus_child_pre_probe(struct udevice *dev)
{
struct dm_test_parent_data *parent_data = dev_get_parentdata(dev);
struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev);
parent_data->flag += FLAG_CHILD_PROBED;
@ -64,7 +64,7 @@ static int testbus_child_pre_probe_uclass(struct udevice *dev)
static int testbus_child_post_remove(struct udevice *dev)
{
struct dm_test_parent_data *parent_data = dev_get_parentdata(dev);
struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev);
struct dm_test_state *dms = test_state;
parent_data->flag += FLAG_CHILD_REMOVED;
@ -215,20 +215,20 @@ static int test_bus_parent_data(struct unit_test_state *uts)
/* Check that parent data is allocated */
ut_assertok(device_find_child_by_seq(bus, 0, true, &dev));
ut_asserteq_ptr(NULL, dev_get_parentdata(dev));
ut_asserteq_ptr(NULL, dev_get_parent_priv(dev));
ut_assertok(device_get_child_by_seq(bus, 0, &dev));
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
ut_assert(NULL != parent_data);
/* Check that it starts at 0 and goes away when device is removed */
parent_data->sum += 5;
ut_asserteq(5, parent_data->sum);
device_remove(dev);
ut_asserteq_ptr(NULL, dev_get_parentdata(dev));
ut_asserteq_ptr(NULL, dev_get_parent_priv(dev));
/* Check that we can do this twice */
ut_assertok(device_get_child_by_seq(bus, 0, &dev));
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
ut_assert(NULL != parent_data);
parent_data->sum += 5;
ut_asserteq(5, parent_data->sum);
@ -239,11 +239,11 @@ static int test_bus_parent_data(struct unit_test_state *uts)
uclass_foreach_dev(dev, uc) {
/* Ignore these if they are not on this bus */
if (dev->parent != bus) {
ut_asserteq_ptr(NULL, dev_get_parentdata(dev));
ut_asserteq_ptr(NULL, dev_get_parent_priv(dev));
continue;
}
ut_assertok(device_probe(dev));
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
parent_data->sum = value;
value += 5;
@ -255,7 +255,7 @@ static int test_bus_parent_data(struct unit_test_state *uts)
/* Ignore these if they are not on this bus */
if (dev->parent != bus)
continue;
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
ut_asserteq(value, parent_data->sum);
value += 5;
@ -311,10 +311,10 @@ static int dm_test_bus_parent_ops(struct unit_test_state *uts)
/* Ignore these if they are not on this bus */
if (dev->parent != bus)
continue;
ut_asserteq_ptr(NULL, dev_get_parentdata(dev));
ut_asserteq_ptr(NULL, dev_get_parent_priv(dev));
ut_assertok(device_probe(dev));
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
ut_asserteq(FLAG_CHILD_PROBED, parent_data->flag);
}
@ -322,10 +322,10 @@ static int dm_test_bus_parent_ops(struct unit_test_state *uts)
/* Ignore these if they are not on this bus */
if (dev->parent != bus)
continue;
parent_data = dev_get_parentdata(dev);
parent_data = dev_get_parent_priv(dev);
ut_asserteq(FLAG_CHILD_PROBED, parent_data->flag);
ut_assertok(device_remove(dev));
ut_asserteq_ptr(NULL, dev_get_parentdata(dev));
ut_asserteq_ptr(NULL, dev_get_parent_priv(dev));
ut_asserteq_ptr(dms->removed, dev);
}
test_state = NULL;