Lines Matching +full:primecell +full:- +full:periphid

1 // SPDX-License-Identifier: GPL-2.0-only
19 #include <linux/clk/clk-conf.h>
27 /* called on periphid match and class 0x9 coresight device. */
34 uci = table->data; in amba_cs_uci_id_match()
36 /* no table data or zero mask - return match on periphid */ in amba_cs_uci_id_match()
37 if (!uci || (uci->devarch_mask == 0)) in amba_cs_uci_id_match()
41 ret = (dev->uci.devtype == uci->devtype) && in amba_cs_uci_id_match()
42 ((dev->uci.devarch & uci->devarch_mask) == uci->devarch); in amba_cs_uci_id_match()
49 while (table->mask) { in amba_lookup()
50 if (((dev->periphid & table->mask) == table->id) && in amba_lookup()
51 ((dev->cid != CORESIGHT_CID) || in amba_lookup()
65 if (pcdev->driver_override) in amba_match()
66 return !strcmp(pcdev->driver_override, drv->name); in amba_match()
68 return amba_lookup(pcdrv->id_table, pcdev) != NULL; in amba_match()
76 retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid); in amba_uevent()
80 retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid); in amba_uevent()
91 len = sprintf(buf, "%s\n", dev->driver_override); in driver_override_show()
104 if (count >= (PAGE_SIZE - 1)) in driver_override_store()
105 return -EINVAL; in driver_override_store()
109 return -ENOMEM; in driver_override_store()
116 old = dev->driver_override; in driver_override_store()
118 dev->driver_override = driver_override; in driver_override_store()
121 dev->driver_override = NULL; in driver_override_store()
140 amba_attr_func(id, "%08x\n", dev->periphid);
141 amba_attr_func(irq0, "%u\n", dev->irq[0]);
142 amba_attr_func(irq1, "%u\n", dev->irq[1]);
144 (unsigned long long)dev->res.start, (unsigned long long)dev->res.end,
145 dev->res.flags);
166 if (ret == 0 && dev->driver) { in amba_pm_runtime_suspend()
168 clk_disable(pcdev->pclk); in amba_pm_runtime_suspend()
170 clk_disable_unprepare(pcdev->pclk); in amba_pm_runtime_suspend()
181 if (dev->driver) { in amba_pm_runtime_resume()
183 ret = clk_enable(pcdev->pclk); in amba_pm_runtime_resume()
185 ret = clk_prepare_enable(pcdev->pclk); in amba_pm_runtime_resume()
236 pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk"); in amba_get_enable_pclk()
237 if (IS_ERR(pcdev->pclk)) in amba_get_enable_pclk()
238 return PTR_ERR(pcdev->pclk); in amba_get_enable_pclk()
240 ret = clk_prepare_enable(pcdev->pclk); in amba_get_enable_pclk()
242 clk_put(pcdev->pclk); in amba_get_enable_pclk()
249 clk_disable_unprepare(pcdev->pclk); in amba_put_disable_pclk()
250 clk_put(pcdev->pclk); in amba_put_disable_pclk()
260 struct amba_driver *pcdrv = to_amba_driver(dev->driver); in amba_probe()
261 const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev); in amba_probe()
265 ret = of_clk_set_defaults(dev->of_node, false); in amba_probe()
283 ret = pcdrv->probe(pcdev, id); in amba_probe()
301 struct amba_driver *drv = to_amba_driver(dev->driver); in amba_remove()
304 if (drv->remove) in amba_remove()
305 drv->remove(pcdev); in amba_remove()
321 struct amba_driver *drv = to_amba_driver(dev->driver); in amba_shutdown()
323 if (drv->shutdown) in amba_shutdown()
324 drv->shutdown(to_amba_device(dev)); in amba_shutdown()
328 * amba_driver_register - register an AMBA device driver
332 * core. If devices pre-exist, the drivers probe function will
337 if (!drv->probe) in amba_driver_register()
338 return -EINVAL; in amba_driver_register()
340 drv->drv.bus = &amba_bustype; in amba_driver_register()
341 drv->drv.probe = amba_probe; in amba_driver_register()
342 drv->drv.remove = amba_remove; in amba_driver_register()
343 drv->drv.shutdown = amba_shutdown; in amba_driver_register()
345 return driver_register(&drv->drv); in amba_driver_register()
349 * amba_driver_unregister - remove an AMBA device driver
358 driver_unregister(&drv->drv); in amba_driver_unregister()
366 if (d->res.parent) in amba_device_release()
367 release_resource(&d->res); in amba_device_release()
377 ret = request_resource(parent, &dev->res); in amba_device_try_add()
381 /* Hard-coded primecell ID instead of plug-n-play */ in amba_device_try_add()
382 if (dev->periphid != 0) in amba_device_try_add()
389 size = resource_size(&dev->res); in amba_device_try_add()
390 tmp = ioremap(dev->res.start, size); in amba_device_try_add()
392 ret = -ENOMEM; in amba_device_try_add()
396 ret = dev_pm_domain_attach(&dev->dev, true); in amba_device_try_add()
408 * Find reset control(s) of the amba bus and de-assert them. in amba_device_try_add()
410 rstc = of_reset_control_array_get_optional_shared(dev->dev.of_node); in amba_device_try_add()
413 if (ret != -EPROBE_DEFER) in amba_device_try_add()
414 dev_err(&dev->dev, "can't get reset: %d\n", in amba_device_try_add()
426 pid |= (readl(tmp + size - 0x20 + 4 * i) & 255) << in amba_device_try_add()
429 cid |= (readl(tmp + size - 0x10 + 4 * i) & 255) << in amba_device_try_add()
434 void __iomem *csbase = tmp + size - 4096; in amba_device_try_add()
436 dev->uci.devarch = in amba_device_try_add()
438 dev->uci.devtype = in amba_device_try_add()
445 dev->periphid = pid; in amba_device_try_add()
446 dev->cid = cid; in amba_device_try_add()
449 if (!dev->periphid) in amba_device_try_add()
450 ret = -ENODEV; in amba_device_try_add()
454 dev_pm_domain_detach(&dev->dev, true); in amba_device_try_add()
460 ret = device_add(&dev->dev); in amba_device_try_add()
464 if (dev->irq[0]) in amba_device_try_add()
465 ret = device_create_file(&dev->dev, &dev_attr_irq0); in amba_device_try_add()
466 if (ret == 0 && dev->irq[1]) in amba_device_try_add()
467 ret = device_create_file(&dev->dev, &dev_attr_irq1); in amba_device_try_add()
471 device_unregister(&dev->dev); in amba_device_try_add()
474 release_resource(&dev->res); in amba_device_try_add()
481 dev_pm_domain_detach(&dev->dev, true); in amba_device_try_add()
515 int ret = amba_device_try_add(ddev->dev, ddev->parent); in amba_deferred_retry()
517 if (ret == -EPROBE_DEFER) in amba_deferred_retry()
520 list_del_init(&ddev->node); in amba_deferred_retry()
540 * amba_device_add - add a previously allocated AMBA device structure
552 if (ret == -EPROBE_DEFER) { in amba_device_add()
557 return -ENOMEM; in amba_device_add()
559 ddev->dev = dev; in amba_device_add()
560 ddev->parent = parent; in amba_device_add()
568 list_add_tail(&ddev->node, &deferred_devices); in amba_device_add()
579 void *pdata, unsigned int periphid, u64 dma_mask, in amba_aphb_device_add() argument
587 return ERR_PTR(-ENOMEM); in amba_aphb_device_add()
589 dev->dev.coherent_dma_mask = dma_mask; in amba_aphb_device_add()
590 dev->irq[0] = irq1; in amba_aphb_device_add()
591 dev->irq[1] = irq2; in amba_aphb_device_add()
592 dev->periphid = periphid; in amba_aphb_device_add()
593 dev->dev.platform_data = pdata; in amba_aphb_device_add()
594 dev->dev.parent = parent; in amba_aphb_device_add()
608 void *pdata, unsigned int periphid) in amba_apb_device_add() argument
611 periphid, 0, &iomem_resource); in amba_apb_device_add()
618 void *pdata, unsigned int periphid) in amba_ahb_device_add() argument
621 periphid, ~0ULL, &iomem_resource); in amba_ahb_device_add()
628 int irq2, void *pdata, unsigned int periphid, in amba_apb_device_add_res() argument
632 periphid, 0, resbase); in amba_apb_device_add_res()
639 int irq2, void *pdata, unsigned int periphid, in amba_ahb_device_add_res() argument
643 periphid, ~0ULL, resbase); in amba_ahb_device_add_res()
650 device_initialize(&dev->dev); in amba_device_initialize()
652 dev_set_name(&dev->dev, "%s", name); in amba_device_initialize()
653 dev->dev.release = amba_device_release; in amba_device_initialize()
654 dev->dev.bus = &amba_bustype; in amba_device_initialize()
655 dev->dev.dma_mask = &dev->dev.coherent_dma_mask; in amba_device_initialize()
656 dev->dev.dma_parms = &dev->dma_parms; in amba_device_initialize()
657 dev->res.name = dev_name(&dev->dev); in amba_device_initialize()
661 * amba_device_alloc - allocate an AMBA device
677 dev->res.start = base; in amba_device_alloc()
678 dev->res.end = base + size - 1; in amba_device_alloc()
679 dev->res.flags = IORESOURCE_MEM; in amba_device_alloc()
687 * amba_device_register - register an AMBA device
697 amba_device_initialize(dev, dev->dev.init_name); in amba_device_register()
698 dev->dev.init_name = NULL; in amba_device_register()
704 * amba_device_put - put an AMBA device
709 put_device(&dev->dev); in amba_device_put()
714 * amba_device_unregister - unregister an AMBA device
726 device_unregister(&dev->dev); in amba_device_unregister()
744 r = (pcdev->periphid & d->mask) == d->id; in amba_find_match()
745 if (d->parent) in amba_find_match()
746 r &= d->parent == dev->parent; in amba_find_match()
747 if (d->busid) in amba_find_match()
748 r &= strcmp(dev_name(dev), d->busid) == 0; in amba_find_match()
752 d->dev = pcdev; in amba_find_match()
759 * amba_find_device - locate an AMBA device given a bus id
790 * amba_request_regions - request all mem regions associated with device
800 name = dev->dev.driver->name; in amba_request_regions()
802 size = resource_size(&dev->res); in amba_request_regions()
804 if (!request_mem_region(dev->res.start, size, name)) in amba_request_regions()
805 ret = -EBUSY; in amba_request_regions()
811 * amba_release_regions - release mem regions associated with device
820 size = resource_size(&dev->res); in amba_release_regions()
821 release_mem_region(dev->res.start, size); in amba_release_regions()