File Index
Files and directories
Sign in
FILE

aie2_solver.h

File preview with syntax highlighting.

linux-6.19.14/drivers/accel/amdxdna/aie2_solver.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (C) 2023-2024, Advanced Micro Devices, Inc.
  4 */
  5
  6#ifndef _AIE2_SOLVER_H
  7#define _AIE2_SOLVER_H
  8
  9#define XRS_MAX_COL 128
 10
 11/*
 12 * Structure used to describe a partition. A partition is column based
 13 * allocation unit described by its start column and number of columns.
 14 */
 15struct aie_part {
 16	u32	start_col;
 17	u32	ncols;
 18};
 19
 20/*
 21 * The QoS capabilities of a given AIE partition.
 22 */
 23struct aie_qos_cap {
 24	u32     opc;            /* operations per cycle */
 25	u32     dma_bw;         /* DMA bandwidth */
 26};
 27
 28/*
 29 * QoS requirement of a resource allocation.
 30 */
 31struct aie_qos {
 32	u32	gops;		/* Giga operations */
 33	u32	fps;		/* Frames per second */
 34	u32	dma_bw;		/* DMA bandwidth */
 35	u32	latency;	/* Frame response latency */
 36	u32	exec_time;	/* Frame execution time */
 37	u32	priority;	/* Request priority */
 38};
 39
 40/*
 41 * Structure used to describe a relocatable CDO (Configuration Data Object).
 42 */
 43struct cdo_parts {
 44	u32		   *start_cols;		/* Start column array */
 45	u32		   cols_len;		/* Length of start column array */
 46	u32		   ncols;		/* # of column */
 47	struct aie_qos_cap qos_cap;		/* CDO QoS capabilities */
 48};
 49
 50/*
 51 * Structure used to describe a request to allocate.
 52 */
 53struct alloc_requests {
 54	u64			rid;
 55	struct cdo_parts	cdo;
 56	struct aie_qos		rqos;		/* Requested QoS */
 57};
 58
 59/*
 60 * Load callback argument
 61 */
 62struct xrs_action_load {
 63	u32                     rid;
 64	struct aie_part         part;
 65};
 66
 67/*
 68 * Define the power level available
 69 *
 70 * POWER_LEVEL_MIN:
 71 *     Lowest power level. Usually set when all actions are unloaded.
 72 *
 73 * POWER_LEVEL_n
 74 *     Power levels 0 - n, is a step increase in system frequencies
 75 */
 76enum power_level {
 77	POWER_LEVEL_MIN = 0x0,
 78	POWER_LEVEL_0   = 0x1,
 79	POWER_LEVEL_1   = 0x2,
 80	POWER_LEVEL_2   = 0x3,
 81	POWER_LEVEL_3   = 0x4,
 82	POWER_LEVEL_4   = 0x5,
 83	POWER_LEVEL_5   = 0x6,
 84	POWER_LEVEL_6   = 0x7,
 85	POWER_LEVEL_7   = 0x8,
 86	POWER_LEVEL_NUM,
 87};
 88
 89/*
 90 * Structure used to describe the frequency table.
 91 * Resource solver chooses the frequency from the table
 92 * to meet the QOS requirements.
 93 */
 94struct clk_list_info {
 95	u32        num_levels;                     /* available power levels */
 96	u32        cu_clk_list[POWER_LEVEL_NUM];   /* available aie clock frequencies in Mhz*/
 97};
 98
 99struct xrs_action_ops {
100	int (*load)(void *cb_arg, struct xrs_action_load *action);
101	int (*unload)(void *cb_arg);
102	int (*set_dft_dpm_level)(struct drm_device *ddev, u32 level);
103};
104
105/*
106 * Structure used to describe information for solver during initialization.
107 */
108struct init_config {
109	u32			total_col;
110	u32			sys_eff_factor; /* system efficiency factor */
111	u32			latency_adj;    /* latency adjustment in ms */
112	struct clk_list_info	clk_list;       /* List of frequencies available in system */
113	struct drm_device	*ddev;
114	struct xrs_action_ops	*actions;
115};
116
117/*
118 * xrsm_init() - Register resource solver. Resource solver client needs
119 *              to call this function to register itself.
120 *
121 * @cfg:	The system metrics for resource solver to use
122 *
123 * Return:	A resource solver handle
124 *
125 * Note: We should only create one handle per AIE array to be managed.
126 */
127void *xrsm_init(struct init_config *cfg);
128
129/*
130 * xrs_allocate_resource() - Request to allocate resources for a given context
131 *                           and a partition metadata. (See struct part_meta)
132 *
133 * @hdl:	Resource solver handle obtained from xrs_init()
134 * @req:	Input to the Resource solver including request id
135 *		and partition metadata.
136 * @cb_arg:	callback argument pointer
137 *
138 * Return:	0 when successful.
139 *		Or standard error number when failing
140 *
141 * Note:
142 *      There is no lock mechanism inside resource solver. So it is
143 *      the caller's responsibility to lock down XCLBINs and grab
144 *      necessary lock.
145 */
146int xrs_allocate_resource(void *hdl, struct alloc_requests *req, void *cb_arg);
147
148/*
149 * xrs_release_resource() - Request to free resources for a given context.
150 *
151 * @hdl:	Resource solver handle obtained from xrs_init()
152 * @rid:	The Request ID to identify the requesting context
153 */
154int xrs_release_resource(void *hdl, u64 rid);
155#endif /* _AIE2_SOLVER_H */
~/ Read-only file preview.