accel/ivpu: Move recovery work to system_unbound_wq
[drm/drm-misc.git] / drivers / bus / fsl-mc / obj-api.c
blob06c1dd84e38d4c5d84cd48b1c6d542e02cc6d4f6
1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2 /*
3 * Copyright 2021 NXP
5 */
6 #include <linux/kernel.h>
7 #include <linux/fsl/mc.h>
9 #include "fsl-mc-private.h"
11 static int fsl_mc_get_open_cmd_id(const char *type)
13 static const struct {
14 int cmd_id;
15 const char *type;
16 } dev_ids[] = {
17 { DPRTC_CMDID_OPEN, "dprtc" },
18 { DPRC_CMDID_OPEN, "dprc" },
19 { DPNI_CMDID_OPEN, "dpni" },
20 { DPIO_CMDID_OPEN, "dpio" },
21 { DPSW_CMDID_OPEN, "dpsw" },
22 { DPBP_CMDID_OPEN, "dpbp" },
23 { DPCON_CMDID_OPEN, "dpcon" },
24 { DPMCP_CMDID_OPEN, "dpmcp" },
25 { DPMAC_CMDID_OPEN, "dpmac" },
26 { DPSECI_CMDID_OPEN, "dpseci" },
27 { DPDMUX_CMDID_OPEN, "dpdmux" },
28 { DPDCEI_CMDID_OPEN, "dpdcei" },
29 { DPAIOP_CMDID_OPEN, "dpaiop" },
30 { DPCI_CMDID_OPEN, "dpci" },
31 { DPDMAI_CMDID_OPEN, "dpdmai" },
32 { DPDBG_CMDID_OPEN, "dpdbg" },
33 { 0, NULL }
35 int i;
37 for (i = 0; dev_ids[i].type; i++)
38 if (!strcmp(dev_ids[i].type, type))
39 return dev_ids[i].cmd_id;
41 return -1;
44 int fsl_mc_obj_open(struct fsl_mc_io *mc_io,
45 u32 cmd_flags,
46 int obj_id,
47 char *obj_type,
48 u16 *token)
50 struct fsl_mc_command cmd = { 0 };
51 struct fsl_mc_obj_cmd_open *cmd_params;
52 int err = 0;
53 int cmd_id = fsl_mc_get_open_cmd_id(obj_type);
55 if (cmd_id == -1)
56 return -ENODEV;
58 /* prepare command */
59 cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);
60 cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;
61 cmd_params->obj_id = cpu_to_le32(obj_id);
63 /* send command to mc*/
64 err = mc_send_command(mc_io, &cmd);
65 if (err)
66 return err;
68 /* retrieve response parameters */
69 *token = mc_cmd_hdr_read_token(&cmd);
71 return err;
73 EXPORT_SYMBOL_GPL(fsl_mc_obj_open);
75 int fsl_mc_obj_close(struct fsl_mc_io *mc_io,
76 u32 cmd_flags,
77 u16 token)
79 struct fsl_mc_command cmd = { 0 };
81 /* prepare command */
82 cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
83 token);
85 /* send command to mc*/
86 return mc_send_command(mc_io, &cmd);
88 EXPORT_SYMBOL_GPL(fsl_mc_obj_close);
90 int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,
91 u32 cmd_flags,
92 u16 token)
94 struct fsl_mc_command cmd = { 0 };
96 /* prepare command */
97 cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
98 token);
100 /* send command to mc*/
101 return mc_send_command(mc_io, &cmd);
103 EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);