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

Commit 20fb2fbd authored by Ramesh Babu's avatar Ramesh Babu Committed by Mark Brown
Browse files

ASoC: Intel: Skylake: Add library loading IPCs



DSP fw can have additional firmwares as libs. These libs can be
loaded using message IPC_GLB_LOAD_LIBRARY.

Signed-off-by: default avatarRamesh Babu <ramesh.babu@intel.com>
Signed-off-by: default avatarKranthi G <gudishax.kranthikumar@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0bdd6d8b
Loading
Loading
Loading
Loading
+23 −0
Original line number Original line Diff line number Diff line
@@ -190,6 +190,7 @@ enum skl_ipc_glb_type {
	IPC_GLB_GET_PPL_CONTEXT_SIZE = 21,
	IPC_GLB_GET_PPL_CONTEXT_SIZE = 21,
	IPC_GLB_SAVE_PPL = 22,
	IPC_GLB_SAVE_PPL = 22,
	IPC_GLB_RESTORE_PPL = 23,
	IPC_GLB_RESTORE_PPL = 23,
	IPC_GLB_LOAD_LIBRARY = 24,
	IPC_GLB_NOTIFY = 26,
	IPC_GLB_NOTIFY = 26,
	IPC_GLB_MAX_IPC_MSG_NUMBER = 31 /* Maximum message number */
	IPC_GLB_MAX_IPC_MSG_NUMBER = 31 /* Maximum message number */
};
};
@@ -902,3 +903,25 @@ int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
	return ret;
	return ret;
}
}
EXPORT_SYMBOL_GPL(skl_ipc_get_large_config);
EXPORT_SYMBOL_GPL(skl_ipc_get_large_config);

int skl_sst_ipc_load_library(struct sst_generic_ipc *ipc,
				u8 dma_id, u8 table_id)
{
	struct skl_ipc_header header = {0};
	u64 *ipc_header = (u64 *)(&header);
	int ret = 0;

	header.primary = IPC_MSG_TARGET(IPC_FW_GEN_MSG);
	header.primary |= IPC_MSG_DIR(IPC_MSG_REQUEST);
	header.primary |= IPC_GLB_TYPE(IPC_GLB_LOAD_LIBRARY);
	header.primary |= IPC_MOD_INSTANCE_ID(table_id);
	header.primary |= IPC_MOD_ID(dma_id);

	ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0);

	if (ret < 0)
		dev_err(ipc->dev, "ipc: load lib failed\n");

	return ret;
}
EXPORT_SYMBOL_GPL(skl_sst_ipc_load_library);
+3 −0
Original line number Original line Diff line number Diff line
@@ -151,6 +151,9 @@ int skl_ipc_set_large_config(struct sst_generic_ipc *ipc,
int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
int skl_ipc_get_large_config(struct sst_generic_ipc *ipc,
		struct skl_ipc_large_config_msg *msg, u32 *param);
		struct skl_ipc_large_config_msg *msg, u32 *param);


int skl_sst_ipc_load_library(struct sst_generic_ipc *ipc,
			u8 dma_id, u8 table_id);

void skl_ipc_int_enable(struct sst_dsp *dsp);
void skl_ipc_int_enable(struct sst_dsp *dsp);
void skl_ipc_op_int_enable(struct sst_dsp *ctx);
void skl_ipc_op_int_enable(struct sst_dsp *ctx);
void skl_ipc_op_int_disable(struct sst_dsp *ctx);
void skl_ipc_op_int_disable(struct sst_dsp *ctx);