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 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 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 32struct reset_ops raspberrypi_reset_ops = { 33 .request = raspberrypi_reset_request, 34 .rst_assert = raspberrypi_reset_assert, 35}; 36 37static const struct udevice_id raspberrypi_reset_ids[] = { 38 { .compatible = "raspberrypi,firmware-reset" }, 39 { } 40}; 41 42U_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