xref: /freebsd/sys/dev/qcom_gcc/qcom_gcc_msm8916_reset.c (revision 4e3fdced7f78c067e048c4d9ec42341c30b7899d)
1*4e3fdcedSAdrian Chadd /*-
2*4e3fdcedSAdrian Chadd  * SPDX-License-Identifier: BSD-2-Clause
3*4e3fdcedSAdrian Chadd  *
4*4e3fdcedSAdrian Chadd  * Copyright (c) 2026 Adrian Chadd <adrian@FreeBSD.org>
5*4e3fdcedSAdrian Chadd  *
6*4e3fdcedSAdrian Chadd  * Redistribution and use in source and binary forms, with or without
7*4e3fdcedSAdrian Chadd  * modification, are permitted provided that the following conditions
8*4e3fdcedSAdrian Chadd  * are met:
9*4e3fdcedSAdrian Chadd  * 1. Redistributions of source code must retain the above copyright
10*4e3fdcedSAdrian Chadd  *    notice unmodified, this list of conditions, and the following
11*4e3fdcedSAdrian Chadd  *    disclaimer.
12*4e3fdcedSAdrian Chadd  * 2. Redistributions in binary form must reproduce the above copyright
13*4e3fdcedSAdrian Chadd  *    notice, this list of conditions and the following disclaimer in the
14*4e3fdcedSAdrian Chadd  *    documentation and/or other materials provided with the distribution.
15*4e3fdcedSAdrian Chadd  *
16*4e3fdcedSAdrian Chadd  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17*4e3fdcedSAdrian Chadd  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18*4e3fdcedSAdrian Chadd  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19*4e3fdcedSAdrian Chadd  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20*4e3fdcedSAdrian Chadd  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21*4e3fdcedSAdrian Chadd  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22*4e3fdcedSAdrian Chadd  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23*4e3fdcedSAdrian Chadd  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*4e3fdcedSAdrian Chadd  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25*4e3fdcedSAdrian Chadd  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*4e3fdcedSAdrian Chadd  */
27*4e3fdcedSAdrian Chadd 
28*4e3fdcedSAdrian Chadd #include <sys/param.h>
29*4e3fdcedSAdrian Chadd #include <sys/kernel.h>
30*4e3fdcedSAdrian Chadd #include <sys/malloc.h>
31*4e3fdcedSAdrian Chadd #include <sys/module.h>
32*4e3fdcedSAdrian Chadd #include <sys/sglist.h>
33*4e3fdcedSAdrian Chadd #include <sys/random.h>
34*4e3fdcedSAdrian Chadd #include <sys/stdatomic.h>
35*4e3fdcedSAdrian Chadd #include <sys/mutex.h>
36*4e3fdcedSAdrian Chadd 
37*4e3fdcedSAdrian Chadd #include <machine/bus.h>
38*4e3fdcedSAdrian Chadd #include <machine/resource.h>
39*4e3fdcedSAdrian Chadd #include <sys/bus.h>
40*4e3fdcedSAdrian Chadd 
41*4e3fdcedSAdrian Chadd #include <dev/fdt/fdt_common.h>
42*4e3fdcedSAdrian Chadd #include <dev/ofw/ofw_bus.h>
43*4e3fdcedSAdrian Chadd #include <dev/ofw/ofw_bus_subr.h>
44*4e3fdcedSAdrian Chadd 
45*4e3fdcedSAdrian Chadd #include <dev/hwreset/hwreset.h>
46*4e3fdcedSAdrian Chadd 
47*4e3fdcedSAdrian Chadd #include "hwreset_if.h"
48*4e3fdcedSAdrian Chadd 
49*4e3fdcedSAdrian Chadd #include "qcom_gcc_var.h"
50*4e3fdcedSAdrian Chadd #include "qcom_gcc_msm8916.h"
51*4e3fdcedSAdrian Chadd 
52*4e3fdcedSAdrian Chadd static int
qcom_gcc_msm8916_hwreset_assert(device_t dev,intptr_t id,bool reset)53*4e3fdcedSAdrian Chadd qcom_gcc_msm8916_hwreset_assert(device_t dev, intptr_t id, bool reset)
54*4e3fdcedSAdrian Chadd {
55*4e3fdcedSAdrian Chadd 	device_printf(dev, "%s: invalid id (%d)\n", __func__, (uint32_t) id);
56*4e3fdcedSAdrian Chadd 	return (EINVAL);
57*4e3fdcedSAdrian Chadd }
58*4e3fdcedSAdrian Chadd 
59*4e3fdcedSAdrian Chadd static int
qcom_gcc_msm8916_hwreset_is_asserted(device_t dev,intptr_t id,bool * reset)60*4e3fdcedSAdrian Chadd qcom_gcc_msm8916_hwreset_is_asserted(device_t dev, intptr_t id, bool *reset)
61*4e3fdcedSAdrian Chadd {
62*4e3fdcedSAdrian Chadd 	device_printf(dev, "%s: invalid id (%d)\n", __func__, (uint32_t) id);
63*4e3fdcedSAdrian Chadd 	return (EINVAL);
64*4e3fdcedSAdrian Chadd }
65*4e3fdcedSAdrian Chadd 
66*4e3fdcedSAdrian Chadd void
qcom_gcc_msm8916_hwreset_init(struct qcom_gcc_softc * sc)67*4e3fdcedSAdrian Chadd qcom_gcc_msm8916_hwreset_init(struct qcom_gcc_softc *sc)
68*4e3fdcedSAdrian Chadd {
69*4e3fdcedSAdrian Chadd 	sc->sc_cb.hw_reset_assert = qcom_gcc_msm8916_hwreset_assert;
70*4e3fdcedSAdrian Chadd 	sc->sc_cb.hw_reset_is_asserted = qcom_gcc_msm8916_hwreset_is_asserted;
71*4e3fdcedSAdrian Chadd }
72