mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-10 07:44:23 +08:00
e65e175b07
Now that we have a subsystem for compute accelerators, move the habanalabs driver to it. This patch only moves the files and fixes the Makefiles. Future patches will change the existing code to register to the accel subsystem and expose the accel device char files instead of the habanalabs device char files. Update the MAINTAINERS file to reflect this change. Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
/*
|
|
* Copyright 2016-2019 HabanaLabs, Ltd.
|
|
* All Rights Reserved.
|
|
*/
|
|
|
|
#include "habanalabs.h"
|
|
|
|
#include <linux/slab.h>
|
|
|
|
int hl_asid_init(struct hl_device *hdev)
|
|
{
|
|
hdev->asid_bitmap = bitmap_zalloc(hdev->asic_prop.max_asid, GFP_KERNEL);
|
|
if (!hdev->asid_bitmap)
|
|
return -ENOMEM;
|
|
|
|
mutex_init(&hdev->asid_mutex);
|
|
|
|
/* ASID 0 is reserved for the kernel driver and device CPU */
|
|
set_bit(0, hdev->asid_bitmap);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void hl_asid_fini(struct hl_device *hdev)
|
|
{
|
|
mutex_destroy(&hdev->asid_mutex);
|
|
bitmap_free(hdev->asid_bitmap);
|
|
}
|
|
|
|
unsigned long hl_asid_alloc(struct hl_device *hdev)
|
|
{
|
|
unsigned long found;
|
|
|
|
mutex_lock(&hdev->asid_mutex);
|
|
|
|
found = find_first_zero_bit(hdev->asid_bitmap,
|
|
hdev->asic_prop.max_asid);
|
|
if (found == hdev->asic_prop.max_asid)
|
|
found = 0;
|
|
else
|
|
set_bit(found, hdev->asid_bitmap);
|
|
|
|
mutex_unlock(&hdev->asid_mutex);
|
|
|
|
return found;
|
|
}
|
|
|
|
void hl_asid_free(struct hl_device *hdev, unsigned long asid)
|
|
{
|
|
if (asid == HL_KERNEL_ASID_ID || asid >= hdev->asic_prop.max_asid) {
|
|
dev_crit(hdev->dev, "Invalid ASID %lu", asid);
|
|
return;
|
|
}
|
|
|
|
clear_bit(asid, hdev->asid_bitmap);
|
|
}
|