12#include "hw/top/dt/gpio.h"
40 uint8_t input_period_counter_count;
51 [kDtGpioRegBlockCore] = 0x30000000,
62 [kDtGpioPeriphIoGpio0] = {
66 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio0,
70 [kDtGpioPeriphIoGpio1] = {
74 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio1,
78 [kDtGpioPeriphIoGpio2] = {
82 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio2,
86 [kDtGpioPeriphIoGpio3] = {
90 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio3,
94 [kDtGpioPeriphIoGpio4] = {
98 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio4,
102 [kDtGpioPeriphIoGpio5] = {
106 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio5,
110 [kDtGpioPeriphIoGpio6] = {
114 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio6,
118 [kDtGpioPeriphIoGpio7] = {
122 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio7,
126 [kDtGpioPeriphIoGpio8] = {
130 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio8,
134 [kDtGpioPeriphIoGpio9] = {
138 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio9,
142 [kDtGpioPeriphIoGpio10] = {
146 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio10,
150 [kDtGpioPeriphIoGpio11] = {
154 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio11,
158 [kDtGpioPeriphIoGpio12] = {
162 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio12,
166 [kDtGpioPeriphIoGpio13] = {
170 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio13,
174 [kDtGpioPeriphIoGpio14] = {
178 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio14,
182 [kDtGpioPeriphIoGpio15] = {
186 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio15,
190 [kDtGpioPeriphIoGpio16] = {
194 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio16,
198 [kDtGpioPeriphIoGpio17] = {
202 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio17,
206 [kDtGpioPeriphIoGpio18] = {
210 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio18,
214 [kDtGpioPeriphIoGpio19] = {
218 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio19,
222 [kDtGpioPeriphIoGpio20] = {
226 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio20,
230 [kDtGpioPeriphIoGpio21] = {
234 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio21,
238 [kDtGpioPeriphIoGpio22] = {
242 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio22,
246 [kDtGpioPeriphIoGpio23] = {
250 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio23,
254 [kDtGpioPeriphIoGpio24] = {
258 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio24,
262 [kDtGpioPeriphIoGpio25] = {
266 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio25,
270 [kDtGpioPeriphIoGpio26] = {
274 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio26,
278 [kDtGpioPeriphIoGpio27] = {
282 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio27,
286 [kDtGpioPeriphIoGpio28] = {
290 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio28,
294 [kDtGpioPeriphIoGpio29] = {
298 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio29,
302 [kDtGpioPeriphIoGpio30] = {
306 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio30,
310 [kDtGpioPeriphIoGpio31] = {
314 .periph_input_or_direct_pad = kTopDragonflyDirectPadsGpioGpio31,
320 .input_period_counter_count = 8,
330#define TRY_GET_DT(dt, default) ({ if ((dt) < (dt_gpio_t)0 || (int)(dt) >= kDtGpioCount) return (default); &gpio_desc[dt]; })
348 return TRY_GET_DT(dt, 0xdeadbeef)->reg_addr[reg_block];
355 if (first_irq == kDtPlicIrqIdNone) {
356 return kDtPlicIrqIdNone;
366 if (first_irq == kDtPlicIrqIdNone) {
379 return (
dt_alert_id_t)((uint32_t)gpio_desc[dt].first_alert + (uint32_t)alert);
386 if (alert < gpio_desc[dt].first_alert || alert >= gpio_desc[dt].first_alert + (
dt_alert_id_t)count) {
397 return TRY_GET_DT(dt, kDtPeriphIoConstantHighZ)->periph_io[sig];
420 return TRY_GET_DT(dt, 0)->ipgen_ext.input_period_counter_count;