[vdec1] Work around an issue with the power on sequence.

Change the position where we release the clock gating during a power
up sequence in order to work around a limited number of devices in the
field which lock up if we don't.

Note that the previous sequence seemed to work for most devices.
However, we found at least one developer box (and have evidence of a
few more production boxes in the field) for which the sequence does
not work.  Specifically, after releasing the DOS unit from isolation,
the RMW to the MdecPicDcCtrl would cause the entire system to lock up,
eventually causing the HW WDT to fire.

There are really no docs from AML (that we have access to at least)
which specify the power up sequence or requirements here, however.
There are a few different driver implementations out there in the open
source world, however their sequences are inconsistent, and it is not
clear who to trust.

The best theory we have so far is that, if the clocks no present when
the VDEC/DOS unit powers up and is reset, that it is possible that
there may be clock synchronizers which don't actually end up getting
synchronized, and that later on, when we touch the MdecPicDcCtrl
register, it results in a lockup.

So, in the absence of any guidance from AML, move the un-gating of the
clocks up in the power on sequence.  Make sure that they are present
before we power the unit on, and then reset it.  This has been passing
overnight stress testing on the "bad" box, where it used to fail on
the first attempt to power down and then power back up again.

Test: See above.  Manual stress testing on the special "bad" hardware.
Bug: 70724
Change-Id: I8df0b90457bf1cde82420641c9145850b86bf90d
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/513642
Reviewed-by: Dustin Green <dustingreen@google.com>
Reviewed-by: Eric Holland <hollande@google.com>
Reviewed-by: John Bauman <jbauman@google.com>
Commit-Queue: John Grossman <johngro@google.com>
1 file changed
tree: 04602f14ee43d3631ce154640da0d2e3f1660cb3
  1. boards/
  2. build/
  3. buildtools/
  4. bundles/
  5. docs/
  6. examples/
  7. garnet/
  8. products/
  9. scripts/
  10. sdk/
  11. src/
  12. third_party/
  13. tools/
  14. zircon/
  15. .clang-format
  16. .clang-tidy
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. AUTHORS
  23. BUILD.gn
  24. CODE_OF_CONDUCT.md
  25. CONTRIBUTING.md
  26. LICENSE
  27. OWNERS
  28. PATENTS
  29. README.md
  30. rustfmt.toml
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.