123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Raspberry Pi 4 firmware reset driver
- *
- * Copyright (C) 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
- */
- #include <common.h>
- #include <dm.h>
- #include <reset-uclass.h>
- #include <asm/arch/msg.h>
- #include <dt-bindings/reset/raspberrypi,firmware-reset.h>
- static int raspberrypi_reset_request(struct reset_ctl *reset_ctl)
- {
- if (reset_ctl->id >= RASPBERRYPI_FIRMWARE_RESET_NUM_IDS)
- return -EINVAL;
- return 0;
- }
- static int raspberrypi_reset_free(struct reset_ctl *reset_ctl)
- {
- return 0;
- }
- static int raspberrypi_reset_assert(struct reset_ctl *reset_ctl)
- {
- switch (reset_ctl->id) {
- case RASPBERRYPI_FIRMWARE_RESET_ID_USB:
- bcm2711_notify_vl805_reset();
- return 0;
- default:
- return -EINVAL;
- }
- }
- static int raspberrypi_reset_deassert(struct reset_ctl *reset_ctl)
- {
- return 0;
- }
- struct reset_ops raspberrypi_reset_ops = {
- .request = raspberrypi_reset_request,
- .rfree = raspberrypi_reset_free,
- .rst_assert = raspberrypi_reset_assert,
- .rst_deassert = raspberrypi_reset_deassert,
- };
- static const struct udevice_id raspberrypi_reset_ids[] = {
- { .compatible = "raspberrypi,firmware-reset" },
- { }
- };
- U_BOOT_DRIVER(raspberrypi_reset) = {
- .name = "raspberrypi-reset",
- .id = UCLASS_RESET,
- .of_match = raspberrypi_reset_ids,
- .ops = &raspberrypi_reset_ops,
- };
|