Lines Matching refs:smem

361 static int qcom_smem_alloc_private(struct qcom_smem *smem,  in qcom_smem_alloc_private()  argument
397 dev_err(smem->dev, "Out of memory\n"); in qcom_smem_alloc_private()
417 dev_err(smem->dev, "Found invalid canary in hosts %hu:%hu partition\n", in qcom_smem_alloc_private()
423 static int qcom_smem_alloc_global(struct qcom_smem *smem, in qcom_smem_alloc_global() argument
430 header = smem->regions[0].virt_base; in qcom_smem_alloc_global()
505 static void *qcom_smem_get_global(struct qcom_smem *smem, in qcom_smem_get_global() argument
517 header = smem->regions[0].virt_base; in qcom_smem_get_global()
524 for (i = 0; i < smem->num_regions; i++) { in qcom_smem_get_global()
525 region = &smem->regions[i]; in qcom_smem_get_global()
544 static void *qcom_smem_get_private(struct qcom_smem *smem, in qcom_smem_get_private() argument
628 dev_err(smem->dev, "Found invalid canary in hosts %hu:%hu partition\n", in qcom_smem_get_private()
775 static int qcom_smem_get_sbl_version(struct qcom_smem *smem) in qcom_smem_get_sbl_version() argument
780 header = smem->regions[0].virt_base; in qcom_smem_get_sbl_version()
786 static struct smem_ptable *qcom_smem_get_ptable(struct qcom_smem *smem) in qcom_smem_get_ptable() argument
791 ptable = smem->ptable; in qcom_smem_get_ptable()
797 dev_err(smem->dev, in qcom_smem_get_ptable()
804 static u32 qcom_smem_get_item_count(struct qcom_smem *smem) in qcom_smem_get_item_count() argument
809 ptable = qcom_smem_get_ptable(smem); in qcom_smem_get_item_count()
826 qcom_smem_partition_header(struct qcom_smem *smem, in qcom_smem_partition_header() argument
833 phys_addr = smem->regions[0].aux_base + le32_to_cpu(entry->offset); in qcom_smem_partition_header()
834 header = devm_ioremap_wc(smem->dev, phys_addr, le32_to_cpu(entry->size)); in qcom_smem_partition_header()
840 dev_err(smem->dev, "bad partition magic %4ph\n", header->magic); in qcom_smem_partition_header()
845 dev_err(smem->dev, "bad host0 (%hu != %hu)\n", in qcom_smem_partition_header()
850 dev_err(smem->dev, "bad host1 (%hu != %hu)\n", in qcom_smem_partition_header()
857 dev_err(smem->dev, "bad partition size (%u != %u)\n", in qcom_smem_partition_header()
863 dev_err(smem->dev, "bad partition free uncached (%u > %u)\n", in qcom_smem_partition_header()
871 static int qcom_smem_set_global_partition(struct qcom_smem *smem) in qcom_smem_set_global_partition() argument
879 if (smem->global_partition.virt_base) { in qcom_smem_set_global_partition()
880 dev_err(smem->dev, "Already found the global partition\n"); in qcom_smem_set_global_partition()
884 ptable = qcom_smem_get_ptable(smem); in qcom_smem_set_global_partition()
905 dev_err(smem->dev, "Missing entry for global partition\n"); in qcom_smem_set_global_partition()
909 header = qcom_smem_partition_header(smem, entry, in qcom_smem_set_global_partition()
914 smem->global_partition.virt_base = (void __iomem *)header; in qcom_smem_set_global_partition()
915 smem->global_partition.phys_base = smem->regions[0].aux_base + in qcom_smem_set_global_partition()
917 smem->global_partition.size = le32_to_cpu(entry->size); in qcom_smem_set_global_partition()
918 smem->global_partition.cacheline = le32_to_cpu(entry->cacheline); in qcom_smem_set_global_partition()
924 qcom_smem_enumerate_partitions(struct qcom_smem *smem, u16 local_host) in qcom_smem_enumerate_partitions() argument
933 ptable = qcom_smem_get_ptable(smem); in qcom_smem_enumerate_partitions()
954 dev_err(smem->dev, "bad host %u\n", remote_host); in qcom_smem_enumerate_partitions()
958 if (smem->partitions[remote_host].virt_base) { in qcom_smem_enumerate_partitions()
959 dev_err(smem->dev, "duplicate host %u\n", remote_host); in qcom_smem_enumerate_partitions()
963 header = qcom_smem_partition_header(smem, entry, host0, host1); in qcom_smem_enumerate_partitions()
967 smem->partitions[remote_host].virt_base = (void __iomem *)header; in qcom_smem_enumerate_partitions()
968 smem->partitions[remote_host].phys_base = smem->regions[0].aux_base + in qcom_smem_enumerate_partitions()
970 smem->partitions[remote_host].size = le32_to_cpu(entry->size); in qcom_smem_enumerate_partitions()
971 smem->partitions[remote_host].cacheline = le32_to_cpu(entry->cacheline); in qcom_smem_enumerate_partitions()
977 static int qcom_smem_map_toc(struct qcom_smem *smem, struct smem_region *region) in qcom_smem_map_toc() argument
982 region->virt_base = devm_ioremap_wc(smem->dev, region->aux_base, SZ_4K); in qcom_smem_map_toc()
985 smem->ptable = devm_ioremap_wc(smem->dev, ptable_start, SZ_4K); in qcom_smem_map_toc()
987 if (!region->virt_base || !smem->ptable) in qcom_smem_map_toc()
993 static int qcom_smem_map_global(struct qcom_smem *smem, u32 size) in qcom_smem_map_global() argument
997 phys_addr = smem->regions[0].aux_base; in qcom_smem_map_global()
999 smem->regions[0].size = size; in qcom_smem_map_global()
1000 smem->regions[0].virt_base = devm_ioremap_wc(smem->dev, phys_addr, size); in qcom_smem_map_global()
1002 if (!smem->regions[0].virt_base) in qcom_smem_map_global()
1008 static int qcom_smem_resolve_mem(struct qcom_smem *smem, const char *name, in qcom_smem_resolve_mem() argument
1011 struct device *dev = smem->dev; in qcom_smem_resolve_mem()
1037 struct qcom_smem *smem; in qcom_smem_probe() local
1052 smem = devm_kzalloc(&pdev->dev, sizeof(*smem) + array_size, GFP_KERNEL); in qcom_smem_probe()
1053 if (!smem) in qcom_smem_probe()
1056 smem->dev = &pdev->dev; in qcom_smem_probe()
1057 smem->num_regions = num_regions; in qcom_smem_probe()
1061 smem->regions[0].aux_base = rmem->base; in qcom_smem_probe()
1062 smem->regions[0].size = rmem->size; in qcom_smem_probe()
1068 ret = qcom_smem_resolve_mem(smem, "memory-region", &smem->regions[0]); in qcom_smem_probe()
1074 ret = qcom_smem_resolve_mem(smem, "qcom,rpm-msg-ram", &smem->regions[1]); in qcom_smem_probe()
1080 ret = qcom_smem_map_toc(smem, &smem->regions[0]); in qcom_smem_probe()
1085 smem->regions[i].virt_base = devm_ioremap_wc(&pdev->dev, in qcom_smem_probe()
1086 smem->regions[i].aux_base, in qcom_smem_probe()
1087 smem->regions[i].size); in qcom_smem_probe()
1088 if (!smem->regions[i].virt_base) { in qcom_smem_probe()
1089 dev_err(&pdev->dev, "failed to remap %pa\n", &smem->regions[i].aux_base); in qcom_smem_probe()
1094 header = smem->regions[0].virt_base; in qcom_smem_probe()
1108 smem->hwlock = hwspin_lock_request_specific(hwlock_id); in qcom_smem_probe()
1109 if (!smem->hwlock) in qcom_smem_probe()
1112 ret = hwspin_lock_timeout_irqsave(smem->hwlock, HWSPINLOCK_TIMEOUT, &flags); in qcom_smem_probe()
1116 hwspin_unlock_irqrestore(smem->hwlock, &flags); in qcom_smem_probe()
1118 version = qcom_smem_get_sbl_version(smem); in qcom_smem_probe()
1124 devm_iounmap(smem->dev, smem->regions[0].virt_base); in qcom_smem_probe()
1127 ret = qcom_smem_set_global_partition(smem); in qcom_smem_probe()
1130 smem->item_count = qcom_smem_get_item_count(smem); in qcom_smem_probe()
1133 qcom_smem_map_global(smem, size); in qcom_smem_probe()
1134 smem->item_count = SMEM_ITEM_COUNT; in qcom_smem_probe()
1142 ret = qcom_smem_enumerate_partitions(smem, SMEM_HOST_APPS); in qcom_smem_probe()
1146 __smem = smem; in qcom_smem_probe()
1148 smem->socinfo = platform_device_register_data(&pdev->dev, "qcom-socinfo", in qcom_smem_probe()
1151 if (IS_ERR(smem->socinfo)) in qcom_smem_probe()