| .. | .. |
|---|
| 668 | 668 | * TRCDEVARCH - CoreSight architected register |
|---|
| 669 | 669 | * - Bits[15:12] - Major version |
|---|
| 670 | 670 | * - Bits[19:16] - Minor version |
|---|
| 671 | | - * TRCIDR1 - ETM architected register |
|---|
| 672 | | - * - Bits[11:8] - Major version |
|---|
| 673 | | - * - Bits[7:4] - Minor version |
|---|
| 674 | | - * We must rely on TRCDEVARCH for the version information, |
|---|
| 675 | | - * however we don't want to break the support for potential |
|---|
| 676 | | - * old implementations which might not implement it. Thus |
|---|
| 677 | | - * we fall back to TRCIDR1 if TRCDEVARCH is not implemented |
|---|
| 678 | | - * for memory mapped components. |
|---|
| 671 | + * |
|---|
| 672 | + * We must rely only on TRCDEVARCH for the version information. Even though, |
|---|
| 673 | + * TRCIDR1 also provides the architecture version, it is a "Trace" register |
|---|
| 674 | + * and as such must be accessed only with Trace power domain ON. This may |
|---|
| 675 | + * not be available at probe time. |
|---|
| 676 | + * |
|---|
| 679 | 677 | * Now to make certain decisions easier based on the version |
|---|
| 680 | 678 | * we use an internal representation of the version in the |
|---|
| 681 | 679 | * driver, as follows : |
|---|
| .. | .. |
|---|
| 699 | 697 | { |
|---|
| 700 | 698 | return ETM_ARCH_VERSION(ETM_DEVARCH_ARCHID_ARCH_VER(devarch), |
|---|
| 701 | 699 | ETM_DEVARCH_REVISION(devarch)); |
|---|
| 702 | | -} |
|---|
| 703 | | - |
|---|
| 704 | | -static inline u8 etm_trcidr_to_arch(u32 trcidr1) |
|---|
| 705 | | -{ |
|---|
| 706 | | - return ETM_ARCH_VERSION(ETM_TRCIDR1_ARCH_MAJOR(trcidr1), |
|---|
| 707 | | - ETM_TRCIDR1_ARCH_MINOR(trcidr1)); |
|---|
| 708 | 700 | } |
|---|
| 709 | 701 | |
|---|
| 710 | 702 | enum etm_impdef_type { |
|---|