cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rsmu_core.c (1640B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Core driver for Renesas Synchronization Management Unit (SMU) devices.
      4 *
      5 * Copyright (C) 2021 Integrated Device Technology, Inc., a Renesas Company.
      6 */
      7
      8#include <linux/init.h>
      9#include <linux/kernel.h>
     10#include <linux/mfd/core.h>
     11#include <linux/mfd/rsmu.h>
     12#include <linux/module.h>
     13#include <linux/of.h>
     14#include <linux/regmap.h>
     15#include <linux/slab.h>
     16
     17#include "rsmu.h"
     18
     19enum {
     20	RSMU_PHC = 0,
     21	RSMU_CDEV = 1,
     22	RSMU_N_DEVS = 2,
     23};
     24
     25static struct mfd_cell rsmu_cm_devs[] = {
     26	[RSMU_PHC] = {
     27		.name = "8a3400x-phc",
     28	},
     29	[RSMU_CDEV] = {
     30		.name = "8a3400x-cdev",
     31	},
     32};
     33
     34static struct mfd_cell rsmu_sabre_devs[] = {
     35	[RSMU_PHC] = {
     36		.name = "82p33x1x-phc",
     37	},
     38	[RSMU_CDEV] = {
     39		.name = "82p33x1x-cdev",
     40	},
     41};
     42
     43static struct mfd_cell rsmu_sl_devs[] = {
     44	[RSMU_PHC] = {
     45		.name = "8v19n85x-phc",
     46	},
     47	[RSMU_CDEV] = {
     48		.name = "8v19n85x-cdev",
     49	},
     50};
     51
     52int rsmu_core_init(struct rsmu_ddata *rsmu)
     53{
     54	struct mfd_cell *cells;
     55	int ret;
     56
     57	switch (rsmu->type) {
     58	case RSMU_CM:
     59		cells = rsmu_cm_devs;
     60		break;
     61	case RSMU_SABRE:
     62		cells = rsmu_sabre_devs;
     63		break;
     64	case RSMU_SL:
     65		cells = rsmu_sl_devs;
     66		break;
     67	default:
     68		dev_err(rsmu->dev, "Unsupported RSMU device type: %d\n", rsmu->type);
     69		return -ENODEV;
     70	}
     71
     72	mutex_init(&rsmu->lock);
     73
     74	ret = devm_mfd_add_devices(rsmu->dev, PLATFORM_DEVID_AUTO, cells,
     75				   RSMU_N_DEVS, NULL, 0, NULL);
     76	if (ret < 0)
     77		dev_err(rsmu->dev, "Failed to register sub-devices: %d\n", ret);
     78
     79	return ret;
     80}
     81
     82void rsmu_core_exit(struct rsmu_ddata *rsmu)
     83{
     84	mutex_destroy(&rsmu->lock);
     85}
     86
     87MODULE_DESCRIPTION("Renesas SMU core driver");
     88MODULE_LICENSE("GPL");