aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-03-28 21:07:23 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-03-28 21:07:23 -0400
commit0b412605ef5f5c64b31f19e2910b1d5eba9929c3 (patch)
tree2053ec8f2e998d298e234c1edd8a1560a8ff80e1
parent68b8dffce68e8cae208a891c4833c7a7990bf2c4 (diff)
parentef55d1538dfb823a4475bd690f78b5edc0d2a6fd (diff)
Merge tag 'drm-fixes-for-v4.16-rc8' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Nothing serious, two amdkfd and two tegra fixes" * tag 'drm-fixes-for-v4.16-rc8' of git://people.freedesktop.org/~airlied/linux: drm/tegra: dc: Using NULL instead of plain integer drm/amdkfd: Deallocate SDMA queues correctly drm/amdkfd: Fix scratch memory with HWS enabled drm/tegra: dc: Use correct format array for Tegra124
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c20
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c3
-rw-r--r--drivers/gpu/drm/tegra/dc.c6
3 files changed, 18 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
index b21285afa4ea..1bd5f26b3f00 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -821,13 +821,13 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
821 pr_warn("Can't create new usermode queue because %d queues were already created\n", 821 pr_warn("Can't create new usermode queue because %d queues were already created\n",
822 dqm->total_queue_count); 822 dqm->total_queue_count);
823 retval = -EPERM; 823 retval = -EPERM;
824 goto out; 824 goto out_unlock;
825 } 825 }
826 826
827 if (q->properties.type == KFD_QUEUE_TYPE_SDMA) { 827 if (q->properties.type == KFD_QUEUE_TYPE_SDMA) {
828 retval = allocate_sdma_queue(dqm, &q->sdma_id); 828 retval = allocate_sdma_queue(dqm, &q->sdma_id);
829 if (retval) 829 if (retval)
830 goto out; 830 goto out_unlock;
831 q->properties.sdma_queue_id = 831 q->properties.sdma_queue_id =
832 q->sdma_id / CIK_SDMA_QUEUES_PER_ENGINE; 832 q->sdma_id / CIK_SDMA_QUEUES_PER_ENGINE;
833 q->properties.sdma_engine_id = 833 q->properties.sdma_engine_id =
@@ -838,7 +838,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
838 838
839 if (!mqd) { 839 if (!mqd) {
840 retval = -ENOMEM; 840 retval = -ENOMEM;
841 goto out; 841 goto out_deallocate_sdma_queue;
842 } 842 }
843 843
844 dqm->asic_ops.init_sdma_vm(dqm, q, qpd); 844 dqm->asic_ops.init_sdma_vm(dqm, q, qpd);
@@ -848,7 +848,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
848 retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj, 848 retval = mqd->init_mqd(mqd, &q->mqd, &q->mqd_mem_obj,
849 &q->gart_mqd_addr, &q->properties); 849 &q->gart_mqd_addr, &q->properties);
850 if (retval) 850 if (retval)
851 goto out; 851 goto out_deallocate_sdma_queue;
852 852
853 list_add(&q->list, &qpd->queues_list); 853 list_add(&q->list, &qpd->queues_list);
854 qpd->queue_count++; 854 qpd->queue_count++;
@@ -869,7 +869,13 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
869 pr_debug("Total of %d queues are accountable so far\n", 869 pr_debug("Total of %d queues are accountable so far\n",
870 dqm->total_queue_count); 870 dqm->total_queue_count);
871 871
872out: 872 mutex_unlock(&dqm->lock);
873 return retval;
874
875out_deallocate_sdma_queue:
876 if (q->properties.type == KFD_QUEUE_TYPE_SDMA)
877 deallocate_sdma_queue(dqm, q->sdma_id);
878out_unlock:
873 mutex_unlock(&dqm->lock); 879 mutex_unlock(&dqm->lock);
874 return retval; 880 return retval;
875} 881}
@@ -1188,8 +1194,10 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
1188 1194
1189 /* Clear all user mode queues */ 1195 /* Clear all user mode queues */
1190 list_for_each_entry(q, &qpd->queues_list, list) { 1196 list_for_each_entry(q, &qpd->queues_list, list) {
1191 if (q->properties.type == KFD_QUEUE_TYPE_SDMA) 1197 if (q->properties.type == KFD_QUEUE_TYPE_SDMA) {
1192 dqm->sdma_queue_count--; 1198 dqm->sdma_queue_count--;
1199 deallocate_sdma_queue(dqm, q->sdma_id);
1200 }
1193 1201
1194 if (q->properties.is_active) 1202 if (q->properties.is_active)
1195 dqm->queue_count--; 1203 dqm->queue_count--;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
index 0ecbd1f9b606..0c3bc00978f7 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
@@ -188,8 +188,7 @@ static int pm_create_map_process(struct packet_manager *pm, uint32_t *buffer,
188 packet->sh_mem_ape1_base = qpd->sh_mem_ape1_base; 188 packet->sh_mem_ape1_base = qpd->sh_mem_ape1_base;
189 packet->sh_mem_ape1_limit = qpd->sh_mem_ape1_limit; 189 packet->sh_mem_ape1_limit = qpd->sh_mem_ape1_limit;
190 190
191 /* TODO: scratch support */ 191 packet->sh_hidden_private_base_vmid = qpd->sh_hidden_private_base;
192 packet->sh_hidden_private_base_vmid = 0;
193 192
194 packet->gds_addr_lo = lower_32_bits(qpd->gds_context_area); 193 packet->gds_addr_lo = lower_32_bits(qpd->gds_context_area);
195 packet->gds_addr_hi = upper_32_bits(qpd->gds_context_area); 194 packet->gds_addr_hi = upper_32_bits(qpd->gds_context_area);
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index fbffe1948b3b..90b25ce363ca 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -2009,9 +2009,9 @@ static const struct tegra_dc_soc_info tegra124_dc_soc_info = {
2009 .coupled_pm = false, 2009 .coupled_pm = false,
2010 .has_nvdisplay = false, 2010 .has_nvdisplay = false,
2011 .num_primary_formats = ARRAY_SIZE(tegra124_primary_formats), 2011 .num_primary_formats = ARRAY_SIZE(tegra124_primary_formats),
2012 .primary_formats = tegra114_primary_formats, 2012 .primary_formats = tegra124_primary_formats,
2013 .num_overlay_formats = ARRAY_SIZE(tegra124_overlay_formats), 2013 .num_overlay_formats = ARRAY_SIZE(tegra124_overlay_formats),
2014 .overlay_formats = tegra114_overlay_formats, 2014 .overlay_formats = tegra124_overlay_formats,
2015}; 2015};
2016 2016
2017static const struct tegra_dc_soc_info tegra210_dc_soc_info = { 2017static const struct tegra_dc_soc_info tegra210_dc_soc_info = {
@@ -2160,7 +2160,7 @@ static int tegra_dc_couple(struct tegra_dc *dc)
2160 struct device_link *link; 2160 struct device_link *link;
2161 struct device *partner; 2161 struct device *partner;
2162 2162
2163 partner = driver_find_device(dc->dev->driver, NULL, 0, 2163 partner = driver_find_device(dc->dev->driver, NULL, NULL,
2164 tegra_dc_match_by_pipe); 2164 tegra_dc_match_by_pipe);
2165 if (!partner) 2165 if (!partner)
2166 return -EPROBE_DEFER; 2166 return -EPROBE_DEFER;