brintos

brintos / linux-shallow public Read only

0
0
Text · 1.1 KiB · b804234 Raw
60 lines · c
1// SPDX-License-Identifier: MIT2/*3 * Copyright © 2023 Intel Corporation4 */5 6#include <linux/kobject.h>7#include <linux/sysfs.h>8#include <drm/drm_managed.h>9 10#include "xe_pm.h"11#include "xe_tile.h"12#include "xe_tile_sysfs.h"13#include "xe_vram_freq.h"14 15static void xe_tile_sysfs_kobj_release(struct kobject *kobj)16{17	kfree(kobj);18}19 20static const struct kobj_type xe_tile_sysfs_kobj_type = {21	.release = xe_tile_sysfs_kobj_release,22	.sysfs_ops = &kobj_sysfs_ops,23};24 25static void tile_sysfs_fini(void *arg)26{27	struct xe_tile *tile = arg;28 29	kobject_put(tile->sysfs);30}31 32int xe_tile_sysfs_init(struct xe_tile *tile)33{34	struct xe_device *xe = tile_to_xe(tile);35	struct device *dev = xe->drm.dev;36	struct kobj_tile *kt;37	int err;38 39	kt = kzalloc(sizeof(*kt), GFP_KERNEL);40	if (!kt)41		return -ENOMEM;42 43	kobject_init(&kt->base, &xe_tile_sysfs_kobj_type);44	kt->tile = tile;45 46	err = kobject_add(&kt->base, &dev->kobj, "tile%d", tile->id);47	if (err) {48		kobject_put(&kt->base);49		return err;50	}51 52	tile->sysfs = &kt->base;53 54	err = xe_vram_freq_sysfs_init(tile);55	if (err)56		return err;57 58	return devm_add_action_or_reset(xe->drm.dev, tile_sysfs_fini, tile);59}60