Lines Matching +full:firmware +full:- +full:reset
1 // SPDX-License-Identifier: GPL-2.0
3 * Raspberry Pi 4 firmware reset driver
12 #include <linux/reset-controller.h>
13 #include <soc/bcm2835/raspberrypi-firmware.h>
14 #include <dt-bindings/reset/raspberrypi,firmware-reset.h>
36 * PCIe chip that implements xHCI. After a PCI reset, VL805's in rpi_reset_reset()
37 * firmware may either be loaded directly from an EEPROM or, if in rpi_reset_reset()
38 * not present, by the SoC's co-processor, VideoCore. rpi's in rpi_reset_reset()
39 * VideoCore OS contains both the non public firmware load in rpi_reset_reset()
40 * logic and the VL805 firmware blob. This triggers the in rpi_reset_reset()
44 * firmware encoded like this: in rpi_reset_reset()
52 ret = rpi_firmware_property(priv->fw, RPI_FIRMWARE_NOTIFY_XHCI_RESET, in rpi_reset_reset()
62 return -EINVAL; in rpi_reset_reset()
69 .reset = rpi_reset_reset,
74 struct device *dev = &pdev->dev; in rpi_reset_probe()
79 np = of_get_parent(dev->of_node); in rpi_reset_probe()
81 dev_err(dev, "Missing firmware node\n"); in rpi_reset_probe()
82 return -ENOENT; in rpi_reset_probe()
85 fw = devm_rpi_firmware_get(&pdev->dev, np); in rpi_reset_probe()
88 return -EPROBE_DEFER; in rpi_reset_probe()
92 return -ENOMEM; in rpi_reset_probe()
96 priv->fw = fw; in rpi_reset_probe()
97 priv->rcdev.owner = THIS_MODULE; in rpi_reset_probe()
98 priv->rcdev.nr_resets = RASPBERRYPI_FIRMWARE_RESET_NUM_IDS; in rpi_reset_probe()
99 priv->rcdev.ops = &rpi_reset_ops; in rpi_reset_probe()
100 priv->rcdev.of_node = dev->of_node; in rpi_reset_probe()
102 return devm_reset_controller_register(dev, &priv->rcdev); in rpi_reset_probe()
106 { .compatible = "raspberrypi,firmware-reset" },
114 .name = "raspberrypi-reset",
121 MODULE_DESCRIPTION("Raspberry Pi 4 firmware reset driver");