u-boot/test/dm
Alper Nebi Yasak 226fce6108 phy: Track power-on and init counts in uclass
On boards using the RK3399 SoC, the USB OHCI and EHCI controllers share
the same PHY device instance. While these controllers are being stopped
they both attempt to power-off and deinitialize it, but trying to
power-off the deinitialized PHY device results in a hang. This usually
happens just before booting an OS, and can be explicitly triggered by
running "usb start; usb stop" in the U-Boot shell.

Implement a uclass-wide counting mechanism for PHY initialization and
power state change requests, so that we don't power-off/deinitialize a
PHY instance until all of its users want it done. The Allwinner A10 USB
PHY driver does this counting in-driver, remove those parts in favour of
this in-uclass implementation.

The sandbox PHY operations test needs some changes since the uclass will
no longer call into the drivers for actions matching its tracked state
(e.g. powering-off a powered-off PHY). Update that test, and add a new
one which simulates multiple users of a single PHY.

The major complication here is that PHY handles aren't deduplicated per
instance, so the obvious idea of putting the counts in the PHY handles
don't immediately work. It seems possible to bind a child udevice per
PHY instance to the PHY provider and deduplicate the handles in each
child's uclass-private areas, like in the CLK framework. An alternative
approach could be to use those bound child udevices themselves as the
PHY handles. Instead, to avoid the architectural changes those would
require, this patch solves things by dynamically allocating a list of
structs (one per instance) in the provider's uclass-private area.

Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Peter Robinson <pbrobinson@gmail.com> - Rock960
2022-01-14 14:36:57 -05:00
..
acpi.c acpi: Use U-Boot version for OEM_REVISION 2021-10-06 09:15:14 -04:00
acpi.h acpi: Support generation of a scope 2020-07-17 14:32:24 +08:00
acpi_dp.c dm: acpi: Use correct GPIO polarity type in acpi_dp_add_gpio() 2020-09-25 11:27:14 +08:00
acpigen.c acpi: Add more support for generating processor tables 2020-09-25 11:27:18 +08:00
adc.c dm: treewide: Rename 'platdata' variables to just 'plat' 2020-12-13 16:51:08 -07:00
audio.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
axi.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
blk.c blk: Support iteration 2021-07-21 10:27:35 -06:00
bootcount.c bootcount: add a new driver with syscon as backend 2021-08-22 11:04:52 +02:00
bus.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
button.c test: add a simple test for the adc-keys button driver 2021-02-18 11:37:26 +01:00
cache.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
clk.c clk: add clk_round_rate() 2021-01-12 10:58:04 +05:30
clk_ccf.c clk: do not disable clock if it is critical 2020-09-22 11:27:18 +03:00
core.c dm: core: Allow getting some basic stats 2021-12-23 10:24:40 -05:00
cpu.c sandbox: correct cpu nodes 2021-09-25 09:46:15 -06:00
cros_ec.c cros_ec: Add vstore support 2021-01-30 14:25:41 -07:00
cros_ec_pwm.c sandbox: cros-ec: Add tests for the Chromium OS EC PWM driver 2021-07-06 10:38:03 -06:00
devres.c dm: treewide: Rename ofdata_to_platdata() to of_to_plat() 2020-12-13 16:51:09 -07:00
dma.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
dsa.c net: update NXP copyright text 2021-09-28 18:50:56 +03:00
dsi_host.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
ecdsa.c test: dm: Add test for ECDSA UCLASS support 2021-08-16 10:49:35 +02:00
efi_media.c efi: Add uclass for devices provided by UEFI firmware 2021-12-09 11:43:25 -08:00
eth.c sandbox: Add a DSA sandbox driver and unit test 2021-04-15 14:22:17 +05:30
fastboot.c fastboot: Allow u-boot-style partitions 2021-02-26 15:30:55 +01:00
fdtdec.c fdtdec: Support reserved-memory flags 2021-10-13 14:18:30 -07:00
firmware.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
gpio.c gpio: Add a way to read 3-way strapping pins 2021-03-03 15:40:47 -05:00
hwspinlock.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
i2c.c i2c: add dm_i2c_reg_clrset 2021-08-22 10:52:53 +02:00
i2s.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
iommu.c test: Add tests for IOMMU uclass 2021-10-31 08:46:44 -04:00
irq.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
k210_pll.c clk: k210: Try harder to get the best config 2021-10-07 16:08:23 +08:00
Kconfig test: Move the unit tests to their own menu 2015-05-21 09:16:17 -04:00
led.c test: dm: Test for default led naming 2020-10-08 11:42:36 -04:00
mailbox.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
Makefile efi: Add uclass for devices provided by UEFI firmware 2021-12-09 11:43:25 -08:00
mdio.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
mdio_mux.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
misc.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
mmc.c mmc: sandbox: Add support for writing 2021-02-26 15:30:55 +01:00
mux-cmd.c test: mux-cmd: Add tests for the 'mux' command 2020-10-28 11:49:31 -04:00
mux-emul.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
mux-mmio.c test: Add tests for the multiplexer framework 2020-10-28 11:49:31 -04:00
nop.c cmd: bind: Fix driver binding on a device 2021-10-12 14:19:52 +02:00
of_extra.c test: dm: Add a case to test ofnode_phy_is_fixed_link() 2021-04-15 14:22:17 +05:30
of_platdata.c dm: gpio: Add of-platdata support 2021-09-25 09:46:15 -06:00
ofnode.c dm: core: Add a way to obtain a string list 2021-11-28 16:51:51 -07:00
ofread.c dm: treewide: Rename 'platdata' variables to just 'plat' 2020-12-13 16:51:08 -07:00
osd.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
p2sb.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
panel.c sandbox: cros-ec: Add tests for the Chromium OS EC PWM driver 2021-07-06 10:38:03 -06:00
part.c part: Add check for NULL dev_part_str 2021-05-26 17:26:07 -04:00
pch.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
pci.c dm: core: Use dev_has_ofnode() instead of dev_of_valid() 2021-01-05 12:24:41 -07:00
pci_ep.c WS cleanup: remove trailing empty lines 2021-09-30 08:08:56 -04:00
phy.c phy: Track power-on and init counts in uclass 2022-01-14 14:36:57 -05:00
phys2bus.c dm: test: Add test case for dev_phys_to_bus()/dev_bus_to_phys() 2021-02-18 11:56:25 +01:00
pinmux.c test: pinmux: add test for 'pinctrl-single' driver 2021-04-12 11:17:15 +05:30
pmc.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
pmic.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
power-domain.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
pwm.c sandbox: cros-ec: Add tests for the Chromium OS EC PWM driver 2021-07-06 10:38:03 -06:00
qfw.c test: qemu: add qfw sandbox driver, dm tests, qemu tests 2021-04-12 17:45:39 -04:00
ram.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
read.c dm: test: Add test case for dev_get_dma_ranges() 2021-02-18 11:56:25 +01:00
reboot-mode.c reboot-mode: read the boot mode from RTC memory 2021-07-23 10:16:39 -04:00
regmap.c test: Avoid random numbers in dm_test_devm_regmap() 2021-05-24 14:21:30 -04:00
regulator.c dm: treewide: Rename 'platdata' variables to just 'plat' 2020-12-13 16:51:08 -07:00
remoteproc.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
reset.c test: reset: Extend base reset test to catch error 2021-04-27 08:07:05 -04:00
rng.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
rtc.c display_options: Drop two spaces before the ASCII column 2021-06-08 11:39:09 -04:00
scmi.c test: scmi: add local variables for scmi agent reference 2021-04-12 17:17:11 -04:00
serial.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
sf.c sf: Support querying write-protect 2021-03-27 15:04:31 +13:00
simple-bus.c test: dm: Add a test case for simple-bus <ranges> 2021-04-15 14:22:17 +05:30
simple-pm-bus.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
smem.c WS cleanup: remove trailing empty lines 2021-09-30 08:08:56 -04:00
soc.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
sound.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
spi.c test: dm: spi: Add testcase for spi_claim_bus() 2020-12-22 20:39:26 -07:00
spmi.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
syscon-reset.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
syscon.c dm: Rename DM test flags to make them more generic 2020-08-07 22:31:32 -04:00
sysinfo-gpio.c test: Add gpio-sysinfo test 2021-05-04 07:57:18 -04:00
sysinfo.c sysinfo: Require that sysinfo_detect be called before other methods 2021-05-04 07:57:18 -04:00
sysreset.c test: adjust sysreset tests 2020-11-05 09:11:30 -07:00
tee.c test: dm: tee: extend with RPC test 2021-02-16 11:48:20 -05:00
test-dm.c test: Allow SPL to run any available test 2021-03-12 09:57:31 -05:00
test-driver.c test: Use a local variable for test state 2021-03-12 09:57:30 -05:00
test-fdt.c net: use the same alias stem for ethernet as linux 2021-06-18 11:29:17 +03:00
test-uclass.c test: Use a local variable for test state 2021-03-12 09:57:30 -05:00
timer.c sandbox: correct cpu nodes 2021-09-25 09:46:15 -06:00
usb.c common: rename getc() to getchar() 2020-10-22 09:54:53 -04:00
video.c video: Support showing the U-Boot logo 2021-12-26 23:32:46 +01:00
virtio.c dm: core: Avoid partially removing devices 2021-02-03 03:38:41 -07:00
wdt.c sandbox: add test of wdt-uclass' watchdog_reset() 2021-08-31 12:04:03 +02:00