Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6606c073 authored by Stuart Yoder's avatar Stuart Yoder Committed by Greg Kroah-Hartman
Browse files

staging: fsl-mc: update dpbp binary interface to v2.2

parent f8274454
Loading
Loading
Loading
Loading
+75 −2
Original line number Diff line number Diff line
@@ -293,7 +293,7 @@ int dpbp_set_irq(struct fsl_mc_io *mc_io,
	cmd.params[0] |= mc_enc(0, 8, irq_index);
	cmd.params[0] |= mc_enc(32, 32, irq_cfg->val);
	cmd.params[1] |= mc_enc(0, 64, irq_cfg->addr);
	cmd.params[2] |= mc_enc(0, 32, irq_cfg->user_irq_id);
	cmd.params[2] |= mc_enc(0, 32, irq_cfg->irq_num);

	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
@@ -334,7 +334,7 @@ int dpbp_get_irq(struct fsl_mc_io *mc_io,
	/* retrieve response parameters */
	irq_cfg->val = (u32)mc_dec(cmd.params[0], 0, 32);
	irq_cfg->addr = (u64)mc_dec(cmd.params[1], 0, 64);
	irq_cfg->user_irq_id = (int)mc_dec(cmd.params[2], 0, 32);
	irq_cfg->irq_num = (int)mc_dec(cmd.params[2], 0, 32);
	*type = (int)mc_dec(cmd.params[2], 32, 32);
	return 0;
}
@@ -502,6 +502,7 @@ int dpbp_get_irq_status(struct fsl_mc_io *mc_io,
	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_IRQ_STATUS,
					  cmd_flags, token);
	cmd.params[0] |= mc_enc(0, 32, *status);
	cmd.params[0] |= mc_enc(32, 8, irq_index);

	/* send command to mc*/
@@ -580,3 +581,75 @@ int dpbp_get_attributes(struct fsl_mc_io *mc_io,
	return 0;
}
EXPORT_SYMBOL(dpbp_get_attributes);

/**
 * dpbp_set_notifications() - Set notifications towards software
 * @mc_io:	Pointer to MC portal's I/O object
 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 * @token:	Token of DPBP object
 * @cfg:	notifications configuration
 *
 * Return:	'0' on Success; Error code otherwise.
 */
int dpbp_set_notifications(struct fsl_mc_io *mc_io,
			   u32 cmd_flags,
			   u16 token,
			   struct dpbp_notification_cfg	*cfg)
{
	struct mc_command cmd = { 0 };

	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPBP_CMDID_SET_NOTIFICATIONS,
					  cmd_flags,
					  token);

	cmd.params[0] |= mc_enc(0, 32, cfg->depletion_entry);
	cmd.params[0] |= mc_enc(32, 32, cfg->depletion_exit);
	cmd.params[1] |= mc_enc(0, 32, cfg->surplus_entry);
	cmd.params[1] |= mc_enc(32, 32, cfg->surplus_exit);
	cmd.params[2] |= mc_enc(0, 16, cfg->options);
	cmd.params[3] |= mc_enc(0, 64, cfg->message_ctx);
	cmd.params[4] |= mc_enc(0, 64, cfg->message_iova);

	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
}

/**
 * dpbp_get_notifications() - Get the notifications configuration
 * @mc_io:	Pointer to MC portal's I/O object
 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 * @token:	Token of DPBP object
 * @cfg:	notifications configuration
 *
 * Return:	'0' on Success; Error code otherwise.
 */
int dpbp_get_notifications(struct fsl_mc_io *mc_io,
			   u32 cmd_flags,
			   u16 token,
			   struct dpbp_notification_cfg	*cfg)
{
	struct mc_command cmd = { 0 };
	int err;

	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_NOTIFICATIONS,
					  cmd_flags,
					  token);

	/* send command to mc*/
	err = mc_send_command(mc_io, &cmd);
	if (err)
		return err;

	/* retrieve response parameters */
	cfg->depletion_entry = (u32)mc_dec(cmd.params[0], 0, 32);
	cfg->depletion_exit = (u32)mc_dec(cmd.params[0], 32, 32);
	cfg->surplus_entry = (u32)mc_dec(cmd.params[1], 0, 32);
	cfg->surplus_exit = (u32)mc_dec(cmd.params[1], 32, 32);
	cfg->options = (u16)mc_dec(cmd.params[2], 0, 16);
	cfg->message_ctx = (u64)mc_dec(cmd.params[3], 0, 64);
	cfg->message_iova = (u64)mc_dec(cmd.params[4], 0, 64);

	return 0;
}
+3 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@

/* DPBP Version */
#define DPBP_VER_MAJOR				2
#define DPBP_VER_MINOR				1
#define DPBP_VER_MINOR				2

/* Command IDs */
#define DPBP_CMDID_CLOSE				0x800
@@ -57,4 +57,6 @@
#define DPBP_CMDID_GET_IRQ_STATUS			0x016
#define DPBP_CMDID_CLEAR_IRQ_STATUS			0x017

#define DPBP_CMDID_SET_NOTIFICATIONS		0x01b0
#define DPBP_CMDID_GET_NOTIFICATIONS		0x01b1
#endif /* _FSL_DPBP_CMD_H */
+49 −2
Original line number Diff line number Diff line
@@ -85,12 +85,12 @@ int dpbp_reset(struct fsl_mc_io *mc_io,
 * struct dpbp_irq_cfg - IRQ configuration
 * @addr:	Address that must be written to signal a message-based interrupt
 * @val:	Value to write into irq_addr address
 * @user_irq_id: A user defined number associated with this IRQ
 * @irq_num: A user defined number associated with this IRQ
 */
struct dpbp_irq_cfg {
	     u64		addr;
	     u32		val;
	     int		user_irq_id;
	     int		irq_num;
};

int dpbp_set_irq(struct fsl_mc_io	*mc_io,
@@ -168,6 +168,53 @@ int dpbp_get_attributes(struct fsl_mc_io *mc_io,
			u16		token,
			struct dpbp_attr	*attr);

/**
 *  DPBP notifications options
 */

/**
 * BPSCN write will attempt to allocate into a cache (coherent write)
 */
#define DPBP_NOTIF_OPT_COHERENT_WRITE	0x00000001

/**
 * struct dpbp_notification_cfg - Structure representing DPBP notifications
 *	towards software
 * @depletion_entry: below this threshold the pool is "depleted";
 *	set it to '0' to disable it
 * @depletion_exit: greater than or equal to this threshold the pool exit its
 *	"depleted" state
 * @surplus_entry: above this threshold the pool is in "surplus" state;
 *	set it to '0' to disable it
 * @surplus_exit: less than or equal to this threshold the pool exit its
 *	"surplus" state
 * @message_iova: MUST be given if either 'depletion_entry' or 'surplus_entry'
 *	is not '0' (enable); I/O virtual address (must be in DMA-able memory),
 *	must be 16B aligned.
 * @message_ctx: The context that will be part of the BPSCN message and will
 *	be written to 'message_iova'
 * @options: Mask of available options; use 'DPBP_NOTIF_OPT_<X>' values
 */
struct dpbp_notification_cfg {
	u32	depletion_entry;
	u32	depletion_exit;
	u32	surplus_entry;
	u32	surplus_exit;
	u64	message_iova;
	u64	message_ctx;
	u16	options;
};

int dpbp_set_notifications(struct fsl_mc_io	*mc_io,
			   u32		cmd_flags,
			   u16		token,
			   struct dpbp_notification_cfg	*cfg);

int dpbp_get_notifications(struct fsl_mc_io	*mc_io,
			   u32		cmd_flags,
			   u16		token,
			   struct dpbp_notification_cfg	*cfg);

/** @} */

#endif /* __FSL_DPBP_H */