Angel Pons | ae59387 | 2020-04-04 18:50:57 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Marshall Dawson | 0b4a1e2 | 2018-09-04 13:11:42 -0600 | [diff] [blame] | 2 | |
Felix Held | f1093af | 2021-07-13 23:00:26 +0200 | [diff] [blame] | 3 | #include <amdblocks/mca.h> |
Felix Held | d1d6479 | 2021-07-14 18:00:32 +0200 | [diff] [blame] | 4 | #include <cpu/x86/msr.h> |
Felix Held | e4a6edf | 2021-07-13 21:12:46 +0200 | [diff] [blame] | 5 | #include <types.h> |
Marshall Dawson | 0b4a1e2 | 2018-09-04 13:11:42 -0600 | [diff] [blame] | 6 | |
| 7 | static const char *const mca_bank_name[] = { |
Felix Held | a0112c1 | 2021-07-13 20:37:06 +0200 | [diff] [blame] | 8 | [0] = "Load-store unit", |
| 9 | [1] = "Instruction fetch unit", |
| 10 | [2] = "Combined unit", |
Felix Held | 65deb24 | 2021-07-13 22:35:39 +0200 | [diff] [blame] | 11 | /* Bank 3 is reserved and not all corresponding MSRs are implemented in Family 15h. |
| 12 | Accessing non-existing MSRs causes a general protection fault. */ |
| 13 | [3] = NULL, |
Felix Held | a0112c1 | 2021-07-13 20:37:06 +0200 | [diff] [blame] | 14 | [4] = "Northbridge", |
| 15 | [5] = "Execution unit", |
| 16 | [6] = "Floating point unit" |
Marshall Dawson | 0b4a1e2 | 2018-09-04 13:11:42 -0600 | [diff] [blame] | 17 | }; |
| 18 | |
Felix Held | d1d6479 | 2021-07-14 18:00:32 +0200 | [diff] [blame] | 19 | bool mca_has_expected_bank_count(void) |
| 20 | { |
| 21 | return ARRAY_SIZE(mca_bank_name) == mca_get_bank_count(); |
| 22 | } |
| 23 | |
Felix Held | e84c3f1 | 2021-07-14 01:16:30 +0200 | [diff] [blame] | 24 | bool mca_is_valid_bank(unsigned int bank) |
Felix Held | 65deb24 | 2021-07-13 22:35:39 +0200 | [diff] [blame] | 25 | { |
| 26 | return (bank < ARRAY_SIZE(mca_bank_name) && mca_bank_name[bank] != NULL); |
| 27 | } |
| 28 | |
Felix Held | e84c3f1 | 2021-07-14 01:16:30 +0200 | [diff] [blame] | 29 | const char *mca_get_bank_name(unsigned int bank) |
Felix Held | 65deb24 | 2021-07-13 22:35:39 +0200 | [diff] [blame] | 30 | { |
| 31 | if (mca_is_valid_bank(bank)) |
| 32 | return mca_bank_name[bank]; |
| 33 | else |
| 34 | return ""; |
| 35 | } |