Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

firmware: xilinx: Add query data API

Add ZynqMP firmware query data API to query platform
specific information(clocks, pins) from firmware.

Signed-off-by: Rajan Vaja <rajanv@xilinx.com>
Signed-off-by: Jolly Shah <jollys@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>

authored by

Rajan Vaja and committed by
Michal Simek
59ecdd77 76582671

+34
+14
drivers/firmware/xilinx/zynqmp.c
··· 241 241 return 0; 242 242 } 243 243 244 + /** 245 + * zynqmp_pm_query_data() - Get query data from firmware 246 + * @qdata: Variable to the zynqmp_pm_query_data structure 247 + * @out: Returned output value 248 + * 249 + * Return: Returns status, either success or error+reason 250 + */ 251 + static int zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata, u32 *out) 252 + { 253 + return zynqmp_pm_invoke_fn(PM_QUERY_DATA, qdata.qid, qdata.arg1, 254 + qdata.arg2, qdata.arg3, out); 255 + } 256 + 244 257 static const struct zynqmp_eemi_ops eemi_ops = { 245 258 .get_api_version = zynqmp_pm_get_api_version, 259 + .query_data = zynqmp_pm_query_data, 246 260 }; 247 261 248 262 /**
+20
include/linux/firmware/xlnx-zynqmp.h
··· 34 34 35 35 enum pm_api_id { 36 36 PM_GET_API_VERSION = 1, 37 + PM_QUERY_DATA = 35, 37 38 }; 38 39 39 40 /* PMU-FW return status codes */ ··· 48 47 XST_PM_ABORT_SUSPEND, 49 48 }; 50 49 50 + enum pm_query_id { 51 + PM_QID_INVALID, 52 + }; 53 + 54 + /** 55 + * struct zynqmp_pm_query_data - PM query data 56 + * @qid: query ID 57 + * @arg1: Argument 1 of query data 58 + * @arg2: Argument 2 of query data 59 + * @arg3: Argument 3 of query data 60 + */ 61 + struct zynqmp_pm_query_data { 62 + u32 qid; 63 + u32 arg1; 64 + u32 arg2; 65 + u32 arg3; 66 + }; 67 + 51 68 struct zynqmp_eemi_ops { 52 69 int (*get_api_version)(u32 *version); 70 + int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out); 53 71 }; 54 72 55 73 #if IS_REACHABLE(CONFIG_ARCH_ZYNQMP)