1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Raspberry Pi 4 firmware reset driver 4 * 5 * Copyright (C) 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de> 6 */ 7 #include <common.h> 8 #include <dm.h> 9 #include <reset-uclass.h> 10 #include <asm/arch/msg.h> 11 #include <dt-bindings/reset/raspberrypi,firmware-reset.h> 12 raspberrypi_reset_request(struct reset_ctl * reset_ctl)13static int raspberrypi_reset_request(struct reset_ctl *reset_ctl) 14 { 15 if (reset_ctl->id >= RASPBERRYPI_FIRMWARE_RESET_NUM_IDS) 16 return -EINVAL; 17 18 return 0; 19 } 20 raspberrypi_reset_assert(struct reset_ctl * reset_ctl)21static int raspberrypi_reset_assert(struct reset_ctl *reset_ctl) 22 { 23 switch (reset_ctl->id) { 24 case RASPBERRYPI_FIRMWARE_RESET_ID_USB: 25 bcm2711_notify_vl805_reset(); 26 return 0; 27 default: 28 return -EINVAL; 29 } 30 } 31 32 struct reset_ops raspberrypi_reset_ops = { 33 .request = raspberrypi_reset_request, 34 .rst_assert = raspberrypi_reset_assert, 35 }; 36 37 static const struct udevice_id raspberrypi_reset_ids[] = { 38 { .compatible = "raspberrypi,firmware-reset" }, 39 { } 40 }; 41 42 U_BOOT_DRIVER(raspberrypi_reset) = { 43 .name = "raspberrypi-reset", 44 .id = UCLASS_RESET, 45 .of_match = raspberrypi_reset_ids, 46 .ops = &raspberrypi_reset_ops, 47 }; 48