فهرست منبع

soc: ti: k3-ringacc: Query the GP ring range via tisci

Instead of using the - deprecated - information from DT, use the tisci RM
API to query the available GP ring range for the driver.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Peter Ujfalusi 7 سال پیش
والد
کامیت
89eeed345b
1فایلهای تغییر یافته به همراه16 افزوده شده و 29 حذف شده
  1. 16 29
      drivers/soc/ti/k3-ringacc.c

+ 16 - 29
drivers/soc/ti/k3-ringacc.c

@@ -156,17 +156,6 @@ struct k3_ring {
 	int		proxy_id;
 };
 
-/**
- * struct k3_ring_range -  Ring range
- *
- * @start - first ring id in range
- * @count - number of rings in range
- */
-struct k3_ring_range {
-	u32 start;
-	u32 count;
-};
-
 /**
  * struct k3_ringacc - Rings accelerator descriptor
  *
@@ -174,7 +163,7 @@ struct k3_ring_range {
  * @proxy_gcfg - RA proxy global config registers
  * @proxy_target_base - RA proxy datapath region
  * @num_rings - number of ring in RA
- * @gp_rings - general purpose rings range
+ * @rm_gp_range - general purpose rings range from tisci
  * @dma_ring_reset_quirk - DMA reset w/a enable
  * @num_proxies - number of RA proxies
  * @rings - array of rings descriptors (struct @k3_ring)
@@ -189,7 +178,8 @@ struct k3_ringacc {
 	void __iomem *proxy_target_base;
 	u32 num_rings; /* number of rings in Ringacc module */
 	unsigned long *rings_inuse;
-	struct k3_ring_range gp_rings;
+	struct ti_sci_resource *rm_gp_range;
+
 	bool dma_ring_reset_quirk;
 	u32 num_proxies;
 	unsigned long *proxy_inuse;
@@ -291,11 +281,13 @@ struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
 
 	if (id == K3_RINGACC_RING_ID_ANY) {
 		/* Request for any general purpose ring */
+		struct ti_sci_resource_desc *gp_rings =
+						&ringacc->rm_gp_range->desc[0];
 		unsigned long size;
 
-		size = ringacc->gp_rings.start + ringacc->gp_rings.count;
-		id = find_next_zero_bit(ringacc->rings_inuse,
-					size, ringacc->gp_rings.start);
+		size = gp_rings->start + gp_rings->num;
+		id = find_next_zero_bit(ringacc->rings_inuse, size,
+					gp_rings->start);
 		if (id == size)
 			goto error;
 	} else if (id < 0) {
@@ -995,7 +987,6 @@ static int k3_ringacc_probe_dt(struct k3_ringacc *ringacc)
 {
 	struct device_node *node = ringacc->dev->of_node;
 	struct device *dev = ringacc->dev;
-	u32 ranges[2];
 	int ret;
 
 	if (!node) {
@@ -1009,16 +1000,6 @@ static int k3_ringacc_probe_dt(struct k3_ringacc *ringacc)
 		return ret;
 	}
 
-	ret = of_property_read_u32_array(node, "ti,gp-rings", &ranges[0], 2);
-	if (ret) {
-		ranges[0] = 0;
-		ranges[1] = ringacc->num_rings;
-		dev_info(dev, "Using default GP range [%u, %u]\n",
-			 ranges[0], ranges[1]);
-	}
-	ringacc->gp_rings.start = ranges[0];
-	ringacc->gp_rings.count = ranges[1];
-
 	ringacc->dma_ring_reset_quirk =
 			of_property_read_bool(node, "ti,dma-ring-reset-quirk");
 
@@ -1036,6 +1017,12 @@ static int k3_ringacc_probe_dt(struct k3_ringacc *ringacc)
 	if (ret)
 		dev_err(dev, "ti,sci-dev-id read fail %d\n", ret);
 
+	ringacc->rm_gp_range = devm_ti_sci_get_of_resource(ringacc->tisci, dev,
+						ringacc->tisci_dev_id,
+						"ti,sci-rm-range-gp-rings");
+	if (IS_ERR(ringacc->rm_gp_range))
+		ret = PTR_ERR(ringacc->rm_gp_range);
+
 	return ret;
 }
 
@@ -1123,8 +1110,8 @@ static int k3_ringacc_probe(struct platform_device *pdev)
 
 	dev_info(dev, "Ring Accelerator probed rings:%u, gp-rings[%u,%u] sci-dev-id:%u\n",
 		 ringacc->num_rings,
-		 ringacc->gp_rings.start,
-		 ringacc->gp_rings.count,
+		 ringacc->rm_gp_range->desc[0].start,
+		 ringacc->rm_gp_range->desc[0].num,
 		 ringacc->tisci_dev_id);
 	dev_info(dev, "dma-ring-reset-quirk: %s\n",
 		 ringacc->dma_ring_reset_quirk ? "enabled" : "disabled");