smp2p              92 drivers/soc/qcom/smp2p.c 	struct qcom_smp2p *smp2p;
smp2p             151 drivers/soc/qcom/smp2p.c static void qcom_smp2p_kick(struct qcom_smp2p *smp2p)
smp2p             156 drivers/soc/qcom/smp2p.c 	if (smp2p->mbox_chan) {
smp2p             157 drivers/soc/qcom/smp2p.c 		mbox_send_message(smp2p->mbox_chan, NULL);
smp2p             158 drivers/soc/qcom/smp2p.c 		mbox_client_txdone(smp2p->mbox_chan, 0);
smp2p             160 drivers/soc/qcom/smp2p.c 		regmap_write(smp2p->ipc_regmap, smp2p->ipc_offset, BIT(smp2p->ipc_bit));
smp2p             176 drivers/soc/qcom/smp2p.c 	struct qcom_smp2p *smp2p = data;
smp2p             177 drivers/soc/qcom/smp2p.c 	unsigned smem_id = smp2p->smem_items[SMP2P_INBOUND];
smp2p             178 drivers/soc/qcom/smp2p.c 	unsigned pid = smp2p->remote_pid;
smp2p             186 drivers/soc/qcom/smp2p.c 	in = smp2p->in;
smp2p             192 drivers/soc/qcom/smp2p.c 			dev_err(smp2p->dev,
smp2p             197 drivers/soc/qcom/smp2p.c 		smp2p->in = in;
smp2p             201 drivers/soc/qcom/smp2p.c 	for (i = smp2p->valid_entries; i < in->valid_entries; i++) {
smp2p             202 drivers/soc/qcom/smp2p.c 		list_for_each_entry(entry, &smp2p->inbound, node) {
smp2p             210 drivers/soc/qcom/smp2p.c 	smp2p->valid_entries = i;
smp2p             213 drivers/soc/qcom/smp2p.c 	list_for_each_entry(entry, &smp2p->inbound, node) {
smp2p             305 drivers/soc/qcom/smp2p.c static int qcom_smp2p_inbound_entry(struct qcom_smp2p *smp2p,
smp2p             311 drivers/soc/qcom/smp2p.c 		dev_err(smp2p->dev, "failed to add irq_domain\n");
smp2p             332 drivers/soc/qcom/smp2p.c 		qcom_smp2p_kick(entry->smp2p);
smp2p             341 drivers/soc/qcom/smp2p.c static int qcom_smp2p_outbound_entry(struct qcom_smp2p *smp2p,
smp2p             345 drivers/soc/qcom/smp2p.c 	struct smp2p_smem_item *out = smp2p->out;
smp2p             359 drivers/soc/qcom/smp2p.c 		dev_err(smp2p->dev, "failed to register qcom_smem_state\n");
smp2p             366 drivers/soc/qcom/smp2p.c static int qcom_smp2p_alloc_outbound_item(struct qcom_smp2p *smp2p)
smp2p             369 drivers/soc/qcom/smp2p.c 	unsigned smem_id = smp2p->smem_items[SMP2P_OUTBOUND];
smp2p             370 drivers/soc/qcom/smp2p.c 	unsigned pid = smp2p->remote_pid;
smp2p             376 drivers/soc/qcom/smp2p.c 			dev_err(smp2p->dev,
smp2p             383 drivers/soc/qcom/smp2p.c 		dev_err(smp2p->dev, "Unable to acquire local smp2p item\n");
smp2p             389 drivers/soc/qcom/smp2p.c 	out->local_pid = smp2p->local_pid;
smp2p             390 drivers/soc/qcom/smp2p.c 	out->remote_pid = smp2p->remote_pid;
smp2p             401 drivers/soc/qcom/smp2p.c 	qcom_smp2p_kick(smp2p);
smp2p             403 drivers/soc/qcom/smp2p.c 	smp2p->out = out;
smp2p             408 drivers/soc/qcom/smp2p.c static int smp2p_parse_ipc(struct qcom_smp2p *smp2p)
smp2p             411 drivers/soc/qcom/smp2p.c 	struct device *dev = smp2p->dev;
smp2p             421 drivers/soc/qcom/smp2p.c 	smp2p->ipc_regmap = syscon_node_to_regmap(syscon);
smp2p             422 drivers/soc/qcom/smp2p.c 	if (IS_ERR(smp2p->ipc_regmap))
smp2p             423 drivers/soc/qcom/smp2p.c 		return PTR_ERR(smp2p->ipc_regmap);
smp2p             426 drivers/soc/qcom/smp2p.c 	ret = of_property_read_u32_index(dev->of_node, key, 1, &smp2p->ipc_offset);
smp2p             432 drivers/soc/qcom/smp2p.c 	ret = of_property_read_u32_index(dev->of_node, key, 2, &smp2p->ipc_bit);
smp2p             445 drivers/soc/qcom/smp2p.c 	struct qcom_smp2p *smp2p;
smp2p             450 drivers/soc/qcom/smp2p.c 	smp2p = devm_kzalloc(&pdev->dev, sizeof(*smp2p), GFP_KERNEL);
smp2p             451 drivers/soc/qcom/smp2p.c 	if (!smp2p)
smp2p             454 drivers/soc/qcom/smp2p.c 	smp2p->dev = &pdev->dev;
smp2p             455 drivers/soc/qcom/smp2p.c 	INIT_LIST_HEAD(&smp2p->inbound);
smp2p             456 drivers/soc/qcom/smp2p.c 	INIT_LIST_HEAD(&smp2p->outbound);
smp2p             458 drivers/soc/qcom/smp2p.c 	platform_set_drvdata(pdev, smp2p);
smp2p             462 drivers/soc/qcom/smp2p.c 					 smp2p->smem_items, 2);
smp2p             467 drivers/soc/qcom/smp2p.c 	ret = of_property_read_u32(pdev->dev.of_node, key, &smp2p->local_pid);
smp2p             472 drivers/soc/qcom/smp2p.c 	ret = of_property_read_u32(pdev->dev.of_node, key, &smp2p->remote_pid);
smp2p             482 drivers/soc/qcom/smp2p.c 	smp2p->mbox_client.dev = &pdev->dev;
smp2p             483 drivers/soc/qcom/smp2p.c 	smp2p->mbox_client.knows_txdone = true;
smp2p             484 drivers/soc/qcom/smp2p.c 	smp2p->mbox_chan = mbox_request_channel(&smp2p->mbox_client, 0);
smp2p             485 drivers/soc/qcom/smp2p.c 	if (IS_ERR(smp2p->mbox_chan)) {
smp2p             486 drivers/soc/qcom/smp2p.c 		if (PTR_ERR(smp2p->mbox_chan) != -ENODEV)
smp2p             487 drivers/soc/qcom/smp2p.c 			return PTR_ERR(smp2p->mbox_chan);
smp2p             489 drivers/soc/qcom/smp2p.c 		smp2p->mbox_chan = NULL;
smp2p             491 drivers/soc/qcom/smp2p.c 		ret = smp2p_parse_ipc(smp2p);
smp2p             496 drivers/soc/qcom/smp2p.c 	ret = qcom_smp2p_alloc_outbound_item(smp2p);
smp2p             507 drivers/soc/qcom/smp2p.c 		entry->smp2p = smp2p;
smp2p             515 drivers/soc/qcom/smp2p.c 			ret = qcom_smp2p_inbound_entry(smp2p, entry, node);
smp2p             519 drivers/soc/qcom/smp2p.c 			list_add(&entry->node, &smp2p->inbound);
smp2p             521 drivers/soc/qcom/smp2p.c 			ret = qcom_smp2p_outbound_entry(smp2p, entry, node);
smp2p             525 drivers/soc/qcom/smp2p.c 			list_add(&entry->node, &smp2p->outbound);
smp2p             530 drivers/soc/qcom/smp2p.c 	qcom_smp2p_kick(smp2p);
smp2p             535 drivers/soc/qcom/smp2p.c 					"smp2p", (void *)smp2p);
smp2p             545 drivers/soc/qcom/smp2p.c 	list_for_each_entry(entry, &smp2p->inbound, node)
smp2p             548 drivers/soc/qcom/smp2p.c 	list_for_each_entry(entry, &smp2p->outbound, node)
smp2p             551 drivers/soc/qcom/smp2p.c 	smp2p->out->valid_entries = 0;
smp2p             554 drivers/soc/qcom/smp2p.c 	mbox_free_channel(smp2p->mbox_chan);
smp2p             565 drivers/soc/qcom/smp2p.c 	struct qcom_smp2p *smp2p = platform_get_drvdata(pdev);
smp2p             568 drivers/soc/qcom/smp2p.c 	list_for_each_entry(entry, &smp2p->inbound, node)
smp2p             571 drivers/soc/qcom/smp2p.c 	list_for_each_entry(entry, &smp2p->outbound, node)
smp2p             574 drivers/soc/qcom/smp2p.c 	mbox_free_channel(smp2p->mbox_chan);
smp2p             576 drivers/soc/qcom/smp2p.c 	smp2p->out->valid_entries = 0;