| /* |
| * SPDX-License-Identifier: GPL-2.0 |
| * |
| * Copyright © 2018 Intel Corporation |
| */ |
| |
| #include "../i915_selftest.h" |
| |
| static int intel_mmio_bases_check(void *arg) |
| { |
| int i, j; |
| |
| for (i = 0; i < ARRAY_SIZE(intel_engines); i++) { |
| const struct engine_info *info = &intel_engines[i]; |
| char name[INTEL_ENGINE_CS_MAX_NAME]; |
| u8 prev = U8_MAX; |
| |
| __sprint_engine_name(name, info); |
| |
| for (j = 0; j < MAX_MMIO_BASES; j++) { |
| u8 gen = info->mmio_bases[j].gen; |
| u32 base = info->mmio_bases[j].base; |
| |
| if (gen >= prev) { |
| pr_err("%s: %s: mmio base for gen %x " |
| "is before the one for gen %x\n", |
| __func__, name, prev, gen); |
| return -EINVAL; |
| } |
| |
| if (gen == 0) |
| break; |
| |
| if (!base) { |
| pr_err("%s: %s: invalid mmio base (%x) " |
| "for gen %x at entry %u\n", |
| __func__, name, base, gen, j); |
| return -EINVAL; |
| } |
| |
| prev = gen; |
| } |
| |
| pr_info("%s: min gen supported for %s = %d\n", |
| __func__, name, prev); |
| } |
| |
| return 0; |
| } |
| |
| int intel_engine_cs_mock_selftests(void) |
| { |
| static const struct i915_subtest tests[] = { |
| SUBTEST(intel_mmio_bases_check), |
| }; |
| |
| return i915_subtests(tests, NULL); |
| } |