Lines Matching +full:am4376 +full:- +full:pruss1
1 // SPDX-License-Identifier: GPL-2.0-only
3 * PRU-ICSS platform driver for various TI SoCs
5 * Copyright (C) 2014-2020 Texas Instruments Incorporated - http://www.ti.com/
7 * Suman Anna <s-anna@ti.com>
9 * Tero Kristo <t-kristo@ti.com>
12 #include <linux/clk-provider.h>
13 #include <linux/dma-mapping.h>
29 * struct pruss_private_data - PRUSS driver private data
39 * pruss_get() - get the pruss for a given PRU remoteproc
53 * -EINVAL if invalid parameter
54 * -ENODEV if PRU device or PRUSS device is not found
63 return ERR_PTR(-EINVAL);
65 dev = &rproc->dev;
68 if (!dev->parent || !is_pru_rproc(dev->parent))
69 return ERR_PTR(-ENODEV);
71 ppdev = to_platform_device(dev->parent->parent);
74 return ERR_PTR(-ENODEV);
76 get_device(pruss->dev);
83 * pruss_put() - decrement pruss device's usecount
94 put_device(pruss->dev);
99 * pruss_request_mem_region() - request a memory resource
116 return -EINVAL;
118 mutex_lock(&pruss->lock);
120 if (pruss->mem_in_use[mem_id]) {
121 mutex_unlock(&pruss->lock);
122 return -EBUSY;
125 *region = pruss->mem_regions[mem_id];
126 pruss->mem_in_use[mem_id] = region;
128 mutex_unlock(&pruss->lock);
135 * pruss_release_mem_region() - release a memory resource
151 return -EINVAL;
153 mutex_lock(&pruss->lock);
157 if (pruss->mem_in_use[id] == region)
162 mutex_unlock(&pruss->lock);
163 return -EINVAL;
166 pruss->mem_in_use[id] = NULL;
168 mutex_unlock(&pruss->lock);
175 * pruss_cfg_get_gpmux() - get the current GPMUX value for a PRU device
177 * @pru_id: PRU identifier (0-1)
188 return -EINVAL;
199 * pruss_cfg_set_gpmux() - set the GPMUX value for a PRU device
201 * @pru_id: PRU identifier (0-1)
210 return -EINVAL;
219 * pruss_cfg_gpimode() - set the GPI mode of the PRU
233 return -EINVAL;
242 * pruss_cfg_miirt_enable() - Enable/disable MII RT Events
260 * pruss_cfg_xfr_enable() - Enable/disable XIN XOUT shift functionality
280 return -EINVAL;
306 struct device *dev = pruss->dev;
318 return -ENODEV;
323 dev_err(dev, "mux-clock %pOF must have parents\n", clk_mux_np);
324 ret = -EINVAL;
331 ret = -ENOMEM;
340 ret = -ENOMEM;
348 reg = pruss->cfg_base + reg_offset;
383 struct device *dev = pruss->dev;
390 return dev_err_probe(dev, -ENODEV,
394 if (data && data->has_core_mux_clock) {
395 ret = pruss_clk_mux_setup(pruss, pruss->core_clk_mux,
396 "coreclk-mux", clks_np);
399 "failed to setup coreclk-mux\n");
402 ret = pruss_clk_mux_setup(pruss, pruss->iep_clk_mux, "iepclk-mux",
405 return dev_err_probe(dev, ret, "failed to setup iepclk-mux\n");
420 return dev_err_probe(dev, -ENODEV,
432 if (data && data->has_no_sharedram && i == PRUSS_MEM_SHRD_RAM2)
435 index = of_property_match_string(child, "reg-names",
441 return -EINVAL;
443 pruss->mem_regions[i].va = devm_ioremap(dev, res.start,
445 if (!pruss->mem_regions[i].va)
446 return dev_err_probe(dev, -ENOMEM,
449 pruss->mem_regions[i].pa = res.start;
450 pruss->mem_regions[i].size = resource_size(&res);
453 mem_names[i], &pruss->mem_regions[i].pa,
454 pruss->mem_regions[i].size, pruss->mem_regions[i].va);
475 return dev_err_probe(dev, -ENODEV,
479 return -ENOMEM;
481 pruss->cfg_base = devm_ioremap(dev, res.start, resource_size(&res));
482 if (!pruss->cfg_base)
483 return -ENOMEM;
487 regmap_conf.max_register = resource_size(&res) - 4;
489 pruss->cfg_regmap = devm_regmap_init_mmio(dev, pruss->cfg_base,
492 if (IS_ERR(pruss->cfg_regmap))
493 return dev_err_probe(dev, PTR_ERR(pruss->cfg_regmap),
505 struct device *dev = &pdev->dev;
517 return -ENOMEM;
519 pruss->dev = dev;
520 mutex_init(&pruss->lock);
556 struct device *dev = &pdev->dev;
564 /* instance-specific driver private data */
578 { .compatible = "ti,am3356-pruss" },
579 { .compatible = "ti,am4376-pruss0", .data = &am437x_pruss0_data, },
580 { .compatible = "ti,am4376-pruss1", .data = &am437x_pruss1_data, },
581 { .compatible = "ti,am5728-pruss" },
582 { .compatible = "ti,k2g-pruss" },
583 { .compatible = "ti,am654-icssg", .data = &am65x_j721e_pruss_data, },
584 { .compatible = "ti,j721e-icssg", .data = &am65x_j721e_pruss_data, },
585 { .compatible = "ti,am642-icssg", .data = &am65x_j721e_pruss_data, },
586 { .compatible = "ti,am625-pruss", .data = &am65x_j721e_pruss_data, },
601 MODULE_AUTHOR("Suman Anna <s-anna@ti.com>");
602 MODULE_DESCRIPTION("PRU-ICSS Subsystem Driver");