1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2016, NVIDIA CORPORATION. 4 */ 5 6 #include <common.h> 7 #include <dm.h> 8 #include <reset-uclass.h> 9 #include <asm/arch/clock.h> 10 #include <asm/arch-tegra/clk_rst.h> 11 12 static int tegra_car_reset_request(struct reset_ctl *reset_ctl) 13 { 14 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, 15 reset_ctl->dev, reset_ctl->id); 16 17 /* PERIPH_ID_COUNT varies per SoC */ 18 if (reset_ctl->id >= PERIPH_ID_COUNT) 19 return -EINVAL; 20 21 return 0; 22 } 23 24 static int tegra_car_reset_free(struct reset_ctl *reset_ctl) 25 { 26 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, 27 reset_ctl->dev, reset_ctl->id); 28 29 return 0; 30 } 31 32 static int tegra_car_reset_assert(struct reset_ctl *reset_ctl) 33 { 34 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, 35 reset_ctl->dev, reset_ctl->id); 36 37 reset_set_enable(reset_ctl->id, 1); 38 39 return 0; 40 } 41 42 static int tegra_car_reset_deassert(struct reset_ctl *reset_ctl) 43 { 44 debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl, 45 reset_ctl->dev, reset_ctl->id); 46 47 reset_set_enable(reset_ctl->id, 0); 48 49 return 0; 50 } 51 52 struct reset_ops tegra_car_reset_ops = { 53 .request = tegra_car_reset_request, 54 .free = tegra_car_reset_free, 55 .rst_assert = tegra_car_reset_assert, 56 .rst_deassert = tegra_car_reset_deassert, 57 }; 58 59 static int tegra_car_reset_probe(struct udevice *dev) 60 { 61 debug("%s(dev=%p)\n", __func__, dev); 62 63 return 0; 64 } 65 66 U_BOOT_DRIVER(tegra_car_reset) = { 67 .name = "tegra_car_reset", 68 .id = UCLASS_RESET, 69 .probe = tegra_car_reset_probe, 70 .ops = &tegra_car_reset_ops, 71 }; 72