Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: MIT
2/*
3 * Copyright © 2025 Intel Corporation
4 */
5
6#include "regs/xe_soc_remapper_regs.h"
7#include "xe_device.h"
8#include "xe_mmio.h"
9#include "xe_soc_remapper.h"
10
11static void xe_soc_remapper_set_region(struct xe_device *xe, struct xe_reg reg,
12 u32 mask, u32 val)
13{
14 guard(spinlock_irqsave)(&xe->soc_remapper.lock);
15 xe_mmio_rmw32(xe_root_tile_mmio(xe), reg, mask, val);
16}
17
18static void xe_soc_remapper_set_telem_region(struct xe_device *xe, u32 index)
19{
20 xe_soc_remapper_set_region(xe, SG_REMAP_INDEX1, SG_REMAP_TELEM_MASK,
21 REG_FIELD_PREP(SG_REMAP_TELEM_MASK, index));
22}
23
24static void xe_soc_remapper_set_sysctrl_region(struct xe_device *xe, u32 index)
25{
26 xe_soc_remapper_set_region(xe, SG_REMAP_INDEX1, SG_REMAP_SYSCTRL_MASK,
27 REG_FIELD_PREP(SG_REMAP_SYSCTRL_MASK, index));
28}
29
30/**
31 * xe_soc_remapper_init() - Initialize SoC remapper
32 * @xe: Pointer to xe device.
33 *
34 * Initialize SoC remapper.
35 *
36 * Return: 0 on success, error code on failure
37 */
38int xe_soc_remapper_init(struct xe_device *xe)
39{
40 bool has_soc_remapper = xe->info.has_soc_remapper_telem ||
41 xe->info.has_soc_remapper_sysctrl;
42
43 if (has_soc_remapper)
44 spin_lock_init(&xe->soc_remapper.lock);
45
46 if (xe->info.has_soc_remapper_telem)
47 xe->soc_remapper.set_telem_region = xe_soc_remapper_set_telem_region;
48
49 if (xe->info.has_soc_remapper_sysctrl)
50 xe->soc_remapper.set_sysctrl_region = xe_soc_remapper_set_sysctrl_region;
51
52 return 0;
53}