mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 05:31:32 +00:00
- DWC and i.MX6 fixes
This commit is contained in:
commit
e597e5b6bc
7 changed files with 131 additions and 2 deletions
|
@ -400,6 +400,18 @@
|
||||||
sandbox,silent; /* Don't emit sounds while testing */
|
sandbox,silent; /* Don't emit sounds while testing */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nop-test_0 {
|
||||||
|
compatible = "sandbox,nop_sandbox1";
|
||||||
|
nop-test_1 {
|
||||||
|
compatible = "sandbox,nop_sandbox2";
|
||||||
|
bind = "True";
|
||||||
|
};
|
||||||
|
nop-test_2 {
|
||||||
|
compatible = "sandbox,nop_sandbox2";
|
||||||
|
bind = "False";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
misc-test {
|
misc-test {
|
||||||
compatible = "sandbox,misc_sandbox";
|
compatible = "sandbox,misc_sandbox";
|
||||||
};
|
};
|
||||||
|
|
|
@ -757,3 +757,8 @@ int uclass_pre_remove_device(struct udevice *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
UCLASS_DRIVER(nop) = {
|
||||||
|
.id = UCLASS_NOP,
|
||||||
|
.name = "nop",
|
||||||
|
};
|
||||||
|
|
|
@ -337,7 +337,7 @@ static int dwc3_glue_remove(struct udevice *dev)
|
||||||
|
|
||||||
clk_release_bulk(&glue->clks);
|
clk_release_bulk(&glue->clks);
|
||||||
|
|
||||||
return dm_scan_fdt_dev(dev);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct udevice_id dwc3_glue_ids[] = {
|
static const struct udevice_id dwc3_glue_ids[] = {
|
||||||
|
@ -350,7 +350,7 @@ static const struct udevice_id dwc3_glue_ids[] = {
|
||||||
|
|
||||||
U_BOOT_DRIVER(dwc3_generic_wrapper) = {
|
U_BOOT_DRIVER(dwc3_generic_wrapper) = {
|
||||||
.name = "dwc3-generic-wrapper",
|
.name = "dwc3-generic-wrapper",
|
||||||
.id = UCLASS_MISC,
|
.id = UCLASS_NOP,
|
||||||
.of_match = dwc3_glue_ids,
|
.of_match = dwc3_glue_ids,
|
||||||
.bind = dwc3_glue_bind,
|
.bind = dwc3_glue_bind,
|
||||||
.probe = dwc3_glue_probe,
|
.probe = dwc3_glue_probe,
|
||||||
|
|
|
@ -503,6 +503,42 @@ static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ehci_usb_bind(struct udevice *dev)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* This driver is only partly converted to DT probing and still uses
|
||||||
|
* a tremendous amount of hard-coded addresses. To make things worse,
|
||||||
|
* the driver depends on specific sequential indexing of controllers,
|
||||||
|
* from which it derives offsets in the PHY and ANATOP register sets.
|
||||||
|
*
|
||||||
|
* Here we attempt to calculate these indexes from DT information as
|
||||||
|
* well as we can. The USB controllers on all existing iMX6/iMX7 SoCs
|
||||||
|
* are placed next to each other, at addresses incremented by 0x200.
|
||||||
|
* Thus, the index is derived from the multiple of 0x200 offset from
|
||||||
|
* the first controller address.
|
||||||
|
*
|
||||||
|
* However, to complete conversion of this driver to DT probing, the
|
||||||
|
* following has to be done:
|
||||||
|
* - DM clock framework support for iMX must be implemented
|
||||||
|
* - usb_power_config() has to be converted to clock framework
|
||||||
|
* -> Thus, the ad-hoc "index" variable goes away.
|
||||||
|
* - USB PHY handling has to be factored out into separate driver
|
||||||
|
* -> Thus, the ad-hoc "index" variable goes away from the PHY
|
||||||
|
* code, the PHY driver must parse it's address from DT. This
|
||||||
|
* USB driver must find the PHY driver via DT phandle.
|
||||||
|
* -> usb_power_config() shall be moved to PHY driver
|
||||||
|
* With these changes in place, the ad-hoc indexing goes away and
|
||||||
|
* the driver is fully converted to DT probing.
|
||||||
|
*/
|
||||||
|
fdt_size_t size;
|
||||||
|
fdt_addr_t addr = devfdt_get_addr_size_index(dev, 0, &size);
|
||||||
|
|
||||||
|
dev->req_seq = (addr - USB_BASE_ADDR) / size;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ehci_usb_probe(struct udevice *dev)
|
static int ehci_usb_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct usb_platdata *plat = dev_get_platdata(dev);
|
struct usb_platdata *plat = dev_get_platdata(dev);
|
||||||
|
@ -564,6 +600,7 @@ U_BOOT_DRIVER(usb_mx6) = {
|
||||||
.id = UCLASS_USB,
|
.id = UCLASS_USB,
|
||||||
.of_match = mx6_usb_ids,
|
.of_match = mx6_usb_ids,
|
||||||
.ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
|
.ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
|
||||||
|
.bind = ehci_usb_bind,
|
||||||
.probe = ehci_usb_probe,
|
.probe = ehci_usb_probe,
|
||||||
.remove = ehci_deregister,
|
.remove = ehci_deregister,
|
||||||
.ops = &ehci_usb_ops,
|
.ops = &ehci_usb_ops,
|
||||||
|
|
|
@ -62,6 +62,7 @@ enum uclass_id {
|
||||||
UCLASS_MMC, /* SD / MMC card or chip */
|
UCLASS_MMC, /* SD / MMC card or chip */
|
||||||
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
||||||
UCLASS_MTD, /* Memory Technology Device (MTD) device */
|
UCLASS_MTD, /* Memory Technology Device (MTD) device */
|
||||||
|
UCLASS_NOP, /* No-op devices */
|
||||||
UCLASS_NORTHBRIDGE, /* Intel Northbridge / SDRAM controller */
|
UCLASS_NORTHBRIDGE, /* Intel Northbridge / SDRAM controller */
|
||||||
UCLASS_NVME, /* NVM Express device */
|
UCLASS_NVME, /* NVM Express device */
|
||||||
UCLASS_PANEL, /* Display panel, such as an LCD */
|
UCLASS_PANEL, /* Display panel, such as an LCD */
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
# Copyright (c) 2013 Google, Inc
|
# Copyright (c) 2013 Google, Inc
|
||||||
|
|
||||||
obj-$(CONFIG_UT_DM) += bus.o
|
obj-$(CONFIG_UT_DM) += bus.o
|
||||||
|
obj-$(CONFIG_UT_DM) += nop.o
|
||||||
obj-$(CONFIG_UT_DM) += test-driver.o
|
obj-$(CONFIG_UT_DM) += test-driver.o
|
||||||
obj-$(CONFIG_UT_DM) += test-fdt.o
|
obj-$(CONFIG_UT_DM) += test-fdt.o
|
||||||
obj-$(CONFIG_UT_DM) += test-main.o
|
obj-$(CONFIG_UT_DM) += test-main.o
|
||||||
|
|
73
test/dm/nop.c
Normal file
73
test/dm/nop.c
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Test for the NOP uclass
|
||||||
|
*
|
||||||
|
* (C) Copyright 2019 - Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
* Jean-Jacques Hiblot <jjhiblot@ti.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <dm/ofnode.h>
|
||||||
|
#include <dm/lists.h>
|
||||||
|
#include <dm/device.h>
|
||||||
|
#include <dm/test.h>
|
||||||
|
#include <misc.h>
|
||||||
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
static int noptest_bind(struct udevice *parent)
|
||||||
|
{
|
||||||
|
ofnode ofnode = dev_read_first_subnode(parent);
|
||||||
|
|
||||||
|
while (ofnode_valid(ofnode)) {
|
||||||
|
struct udevice *dev;
|
||||||
|
const char *bind_flag = ofnode_read_string(ofnode, "bind");
|
||||||
|
|
||||||
|
if (bind_flag && (strcmp(bind_flag, "True") == 0))
|
||||||
|
lists_bind_fdt(parent, ofnode, &dev, false);
|
||||||
|
ofnode = dev_read_next_subnode(ofnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct udevice_id noptest1_ids[] = {
|
||||||
|
{
|
||||||
|
.compatible = "sandbox,nop_sandbox1",
|
||||||
|
},
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
U_BOOT_DRIVER(noptest_drv1) = {
|
||||||
|
.name = "noptest1_drv",
|
||||||
|
.of_match = noptest1_ids,
|
||||||
|
.id = UCLASS_NOP,
|
||||||
|
.bind = noptest_bind,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct udevice_id noptest2_ids[] = {
|
||||||
|
{
|
||||||
|
.compatible = "sandbox,nop_sandbox2",
|
||||||
|
},
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
U_BOOT_DRIVER(noptest_drv2) = {
|
||||||
|
.name = "noptest2_drv",
|
||||||
|
.of_match = noptest2_ids,
|
||||||
|
.id = UCLASS_NOP,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int dm_test_nop(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_0", &dev));
|
||||||
|
ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_1", &dev));
|
||||||
|
ut_asserteq(-ENODEV,
|
||||||
|
uclass_get_device_by_name(UCLASS_NOP, "nop-test_2", &dev));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DM_TEST(dm_test_nop, DM_TESTF_FLAT_TREE | DM_TESTF_SCAN_FDT);
|
Loading…
Add table
Reference in a new issue