Lines Matching refs:smem
354 static int qcom_smem_alloc_private(struct qcom_smem *smem, in qcom_smem_alloc_private() argument
379 dev_err(smem->dev, "Out of memory\n"); in qcom_smem_alloc_private()
399 dev_err(smem->dev, "Found invalid canary in hosts %hu:%hu partition\n", in qcom_smem_alloc_private()
405 static int qcom_smem_alloc_global(struct qcom_smem *smem, in qcom_smem_alloc_global() argument
412 header = smem->regions[0].virt_base; in qcom_smem_alloc_global()
487 static void *qcom_smem_get_global(struct qcom_smem *smem, in qcom_smem_get_global() argument
497 header = smem->regions[0].virt_base; in qcom_smem_get_global()
504 for (i = 0; i < smem->num_regions; i++) { in qcom_smem_get_global()
505 area = &smem->regions[i]; in qcom_smem_get_global()
517 static void *qcom_smem_get_private(struct qcom_smem *smem, in qcom_smem_get_private() argument
566 dev_err(smem->dev, "Found invalid canary in hosts %hu:%hu partition\n", in qcom_smem_get_private()
680 static int qcom_smem_get_sbl_version(struct qcom_smem *smem) in qcom_smem_get_sbl_version() argument
685 header = smem->regions[0].virt_base; in qcom_smem_get_sbl_version()
691 static struct smem_ptable *qcom_smem_get_ptable(struct qcom_smem *smem) in qcom_smem_get_ptable() argument
696 ptable = smem->regions[0].virt_base + smem->regions[0].size - SZ_4K; in qcom_smem_get_ptable()
702 dev_err(smem->dev, in qcom_smem_get_ptable()
709 static u32 qcom_smem_get_item_count(struct qcom_smem *smem) in qcom_smem_get_item_count() argument
714 ptable = qcom_smem_get_ptable(smem); in qcom_smem_get_item_count()
725 static int qcom_smem_set_global_partition(struct qcom_smem *smem) in qcom_smem_set_global_partition() argument
734 if (smem->global_partition) { in qcom_smem_set_global_partition()
735 dev_err(smem->dev, "Already found the global partition\n"); in qcom_smem_set_global_partition()
739 ptable = qcom_smem_get_ptable(smem); in qcom_smem_set_global_partition()
755 dev_err(smem->dev, "Missing entry for global partition\n"); in qcom_smem_set_global_partition()
760 dev_err(smem->dev, "Invalid entry for global partition\n"); in qcom_smem_set_global_partition()
764 header = smem->regions[0].virt_base + le32_to_cpu(entry->offset); in qcom_smem_set_global_partition()
769 dev_err(smem->dev, "Global partition has invalid magic\n"); in qcom_smem_set_global_partition()
774 dev_err(smem->dev, "Global partition hosts are invalid\n"); in qcom_smem_set_global_partition()
779 dev_err(smem->dev, "Global partition has invalid size\n"); in qcom_smem_set_global_partition()
785 dev_err(smem->dev, in qcom_smem_set_global_partition()
790 smem->global_partition = header; in qcom_smem_set_global_partition()
791 smem->global_cacheline = le32_to_cpu(entry->cacheline); in qcom_smem_set_global_partition()
796 static int qcom_smem_enumerate_partitions(struct qcom_smem *smem, in qcom_smem_enumerate_partitions() argument
806 ptable = qcom_smem_get_ptable(smem); in qcom_smem_enumerate_partitions()
830 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
836 if (smem->partitions[remote_host]) { in qcom_smem_enumerate_partitions()
837 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
843 header = smem->regions[0].virt_base + le32_to_cpu(entry->offset); in qcom_smem_enumerate_partitions()
849 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
855 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
861 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
867 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
873 dev_err(smem->dev, in qcom_smem_enumerate_partitions()
878 smem->partitions[remote_host] = header; in qcom_smem_enumerate_partitions()
879 smem->cacheline[remote_host] = le32_to_cpu(entry->cacheline); in qcom_smem_enumerate_partitions()
885 static int qcom_smem_map_memory(struct qcom_smem *smem, struct device *dev, in qcom_smem_map_memory() argument
903 smem->regions[i].aux_base = (u32)r.start; in qcom_smem_map_memory()
904 smem->regions[i].size = resource_size(&r); in qcom_smem_map_memory()
905 smem->regions[i].virt_base = devm_ioremap_wc(dev, r.start, resource_size(&r)); in qcom_smem_map_memory()
906 if (!smem->regions[i].virt_base) in qcom_smem_map_memory()
915 struct qcom_smem *smem; in qcom_smem_probe() local
927 smem = devm_kzalloc(&pdev->dev, sizeof(*smem) + array_size, GFP_KERNEL); in qcom_smem_probe()
928 if (!smem) in qcom_smem_probe()
931 smem->dev = &pdev->dev; in qcom_smem_probe()
932 smem->num_regions = num_regions; in qcom_smem_probe()
934 ret = qcom_smem_map_memory(smem, &pdev->dev, "memory-region", 0); in qcom_smem_probe()
938 if (num_regions > 1 && (ret = qcom_smem_map_memory(smem, &pdev->dev, in qcom_smem_probe()
942 header = smem->regions[0].virt_base; in qcom_smem_probe()
949 version = qcom_smem_get_sbl_version(smem); in qcom_smem_probe()
952 ret = qcom_smem_set_global_partition(smem); in qcom_smem_probe()
955 smem->item_count = qcom_smem_get_item_count(smem); in qcom_smem_probe()
958 smem->item_count = SMEM_ITEM_COUNT; in qcom_smem_probe()
965 ret = qcom_smem_enumerate_partitions(smem, SMEM_HOST_APPS); in qcom_smem_probe()
976 smem->hwlock = hwspin_lock_request_specific(hwlock_id); in qcom_smem_probe()
977 if (!smem->hwlock) in qcom_smem_probe()
980 __smem = smem; in qcom_smem_probe()