mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
drm/xe/xe_sysctrl: Add System Controller initialization support
Add initialization and cleanup infrastructure for System Controller subsystem and integrate it into xe device probe path. During initialization, platform support is checked via has_sysctrl capability flag and the mailbox region is configured through SoC remapper interface. Signed-off-by: Anoop Vijay <anoop.c.vijay@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patch.msgid.link/20260327131837.2192929-13-anoop.c.vijay@intel.com
This commit is contained in:
parent
37ace5254a
commit
5ea3f0dc8f
|
|
@ -123,6 +123,7 @@ xe-y += xe_bb.o \
|
|||
xe_step.o \
|
||||
xe_survivability_mode.o \
|
||||
xe_sync.o \
|
||||
xe_sysctrl.o \
|
||||
xe_tile.o \
|
||||
xe_tile_sysfs.o \
|
||||
xe_tlb_inval.o \
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
#include "xe_survivability_mode.h"
|
||||
#include "xe_sriov.h"
|
||||
#include "xe_svm.h"
|
||||
#include "xe_sysctrl.h"
|
||||
#include "xe_tile.h"
|
||||
#include "xe_ttm_stolen_mgr.h"
|
||||
#include "xe_ttm_sys_mgr.h"
|
||||
|
|
@ -992,6 +993,10 @@ int xe_device_probe(struct xe_device *xe)
|
|||
if (err)
|
||||
goto err_unregister_display;
|
||||
|
||||
err = xe_sysctrl_init(xe);
|
||||
if (err)
|
||||
goto err_unregister_display;
|
||||
|
||||
err = xe_device_sysfs_init(xe);
|
||||
if (err)
|
||||
goto err_unregister_display;
|
||||
|
|
|
|||
77
drivers/gpu/drm/xe/xe_sysctrl.c
Normal file
77
drivers/gpu/drm/xe/xe_sysctrl.c
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/*
|
||||
* Copyright © 2026 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <drm/drm_managed.h>
|
||||
|
||||
#include "regs/xe_sysctrl_regs.h"
|
||||
#include "xe_device.h"
|
||||
#include "xe_mmio.h"
|
||||
#include "xe_soc_remapper.h"
|
||||
#include "xe_sysctrl.h"
|
||||
#include "xe_sysctrl_mailbox.h"
|
||||
#include "xe_sysctrl_types.h"
|
||||
|
||||
/**
|
||||
* DOC: System Controller (sysctrl)
|
||||
*
|
||||
* System Controller (sysctrl) is a firmware-managed entity on Intel dGPUs
|
||||
* responsible for selected low-level platform management functions.
|
||||
* Communication between driver and System Controller is performed
|
||||
* via a mailbox interface, enabling command and response exchange.
|
||||
*
|
||||
* This module provides initialization and support code for interacting
|
||||
* with System Controller through the mailbox interface.
|
||||
*/
|
||||
static void sysctrl_fini(void *arg)
|
||||
{
|
||||
struct xe_device *xe = arg;
|
||||
|
||||
xe->soc_remapper.set_sysctrl_region(xe, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_sysctrl_init() - Initialize System Controller subsystem
|
||||
* @xe: xe device instance
|
||||
*
|
||||
* Entry point for System Controller initialization, called from xe_device_probe.
|
||||
* This function checks platform support and initializes the system controller.
|
||||
*
|
||||
* Return: 0 on success, error code on failure
|
||||
*/
|
||||
int xe_sysctrl_init(struct xe_device *xe)
|
||||
{
|
||||
struct xe_tile *tile = xe_device_get_root_tile(xe);
|
||||
struct xe_sysctrl *sc = &xe->sc;
|
||||
int ret;
|
||||
|
||||
if (!xe->info.has_soc_remapper_sysctrl)
|
||||
return 0;
|
||||
|
||||
if (!xe->info.has_sysctrl)
|
||||
return 0;
|
||||
|
||||
xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
|
||||
|
||||
ret = devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
sc->mmio = devm_kzalloc(xe->drm.dev, sizeof(*sc->mmio), GFP_KERNEL);
|
||||
if (!sc->mmio)
|
||||
return -ENOMEM;
|
||||
|
||||
xe_mmio_init(sc->mmio, tile, tile->mmio.regs, tile->mmio.regs_size);
|
||||
sc->mmio->adj_offset = SYSCTRL_BASE;
|
||||
sc->mmio->adj_limit = U32_MAX;
|
||||
|
||||
ret = devm_mutex_init(xe->drm.dev, &sc->cmd_lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
21
drivers/gpu/drm/xe/xe_sysctrl.h
Normal file
21
drivers/gpu/drm/xe/xe_sysctrl.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* SPDX-License-Identifier: MIT */
|
||||
/*
|
||||
* Copyright © 2026 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef _XE_SYSCTRL_H_
|
||||
#define _XE_SYSCTRL_H_
|
||||
|
||||
#include <linux/container_of.h>
|
||||
|
||||
#include "xe_device_types.h"
|
||||
#include "xe_sysctrl_types.h"
|
||||
|
||||
static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
|
||||
{
|
||||
return container_of(sc, struct xe_device, sc);
|
||||
}
|
||||
|
||||
int xe_sysctrl_init(struct xe_device *xe);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user