12#include "hw/top/dt/dt_gpio.h"
23 uint32_t
reg_addr[kDtGpioRegBlockCount];
24 uint32_t
mem_addr[kDtGpioMemoryCount];
25 uint32_t
mem_size[kDtGpioMemoryCount];
42 uint8_t input_period_counter_count;
53 [kDtGpioRegBlockCore] = 0x30000000,
68 [kDtGpioPeriphIoGpio0] = {
72 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio0,
76 [kDtGpioPeriphIoGpio1] = {
80 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio1,
84 [kDtGpioPeriphIoGpio2] = {
88 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio2,
92 [kDtGpioPeriphIoGpio3] = {
96 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio3,
100 [kDtGpioPeriphIoGpio4] = {
104 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio4,
108 [kDtGpioPeriphIoGpio5] = {
112 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio5,
116 [kDtGpioPeriphIoGpio6] = {
120 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio6,
124 [kDtGpioPeriphIoGpio7] = {
128 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio7,
132 [kDtGpioPeriphIoGpio8] = {
136 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio8,
140 [kDtGpioPeriphIoGpio9] = {
144 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio9,
148 [kDtGpioPeriphIoGpio10] = {
152 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio10,
156 [kDtGpioPeriphIoGpio11] = {
160 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio11,
164 [kDtGpioPeriphIoGpio12] = {
168 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio12,
172 [kDtGpioPeriphIoGpio13] = {
176 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio13,
180 [kDtGpioPeriphIoGpio14] = {
184 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio14,
188 [kDtGpioPeriphIoGpio15] = {
192 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio15,
196 [kDtGpioPeriphIoGpio16] = {
200 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio16,
204 [kDtGpioPeriphIoGpio17] = {
208 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio17,
212 [kDtGpioPeriphIoGpio18] = {
216 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio18,
220 [kDtGpioPeriphIoGpio19] = {
224 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio19,
228 [kDtGpioPeriphIoGpio20] = {
232 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio20,
236 [kDtGpioPeriphIoGpio21] = {
240 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio21,
244 [kDtGpioPeriphIoGpio22] = {
248 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio22,
252 [kDtGpioPeriphIoGpio23] = {
256 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio23,
260 [kDtGpioPeriphIoGpio24] = {
264 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio24,
268 [kDtGpioPeriphIoGpio25] = {
272 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio25,
276 [kDtGpioPeriphIoGpio26] = {
280 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio26,
284 [kDtGpioPeriphIoGpio27] = {
288 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio27,
292 [kDtGpioPeriphIoGpio28] = {
296 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio28,
300 [kDtGpioPeriphIoGpio29] = {
304 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio29,
308 [kDtGpioPeriphIoGpio30] = {
312 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio30,
316 [kDtGpioPeriphIoGpio31] = {
320 .periph_input_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio31,
326 .input_period_counter_count = 8,
336#define TRY_GET_DT(dt, default) ({ if ((dt) < (dt_gpio_t)0 || (dt) >= kDtGpioCount) return (default); &gpio_desc[dt]; })
354 return TRY_GET_DT(dt, 0xdeadbeef)->reg_addr[reg_block];
361 return TRY_GET_DT(dt, 0xdeadbeef)->mem_addr[mem];
375 if (first_irq == kDtPlicIrqIdNone) {
376 return kDtPlicIrqIdNone;
386 if (first_irq == kDtPlicIrqIdNone) {
399 return (
dt_alert_id_t)((uint32_t)gpio_desc[dt].first_alert + (uint32_t)alert);
406 if (alert < gpio_desc[dt].first_alert || alert >= gpio_desc[dt].first_alert + (
dt_alert_id_t)count) {
417 return TRY_GET_DT(dt, kDtPeriphIoConstantHighZ)->periph_io[sig];
440 return TRY_GET_DT(dt, 0)->ipgen_ext.input_period_counter_count;