Pavona Software APIs
api.c
Go to the documentation of this file.
1// Copyright lowRISC contributors (OpenTitan project).
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5// Device table API auto-generated by `dtgen`
6
7
8/**
9 * @file
10 * @brief Device Tables (DT) API for top egret
11 */
12
13#include "hw/top/dt/api.h"
15#include <stdint.h>
16
17
18enum {
19 kTopEgretPlicIrqIdCount = kTopEgretPlicIrqIdLast + 1,
20};
21
22static const dt_instance_id_t instance_from_irq[kTopEgretPlicIrqIdCount] = {
209};
210
212 if (irq <= kTopEgretPlicIrqIdLast) {
213 return instance_from_irq[irq];
214 }
216}
217
218
219enum {
220 kTopEgretAlertIdCount = kTopEgretAlertIdLast + 1,
221};
222
223static const dt_instance_id_t instance_from_alert[kTopEgretAlertIdCount] = {
289};
290
292 if (alert <= kTopEgretAlertIdLast) {
293 return instance_from_alert[alert];
294 }
296}
297
344};
345
347 if ((int)dev < kDtInstanceIdCount) {
348 return device_type[dev];
349 }
351}
352
353/**
354 * Pad description.
355 *
356 * A `dt_pad_t` represents a chip's physical pad.
357 */
358typedef struct dt_pad_desc {
359 dt_pad_type_t type; /**< Pad type */
360 /**
361 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
362 * that controls this pad (or the output part of this pad).
363 *
364 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
365 * that control this pad.
366 */
368 /**
369 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
370 * registers to connect a peripheral to this pad.
371 */
372 uint16_t insel;
374
375
376
377// Pad descriptions.
378static const dt_pad_desc_t dt_pad[kDtPadCount] = {
380 .type = kDtPadTypeMio,
381 .mio_out_or_direct_pad = 0,
383 },
385 .type = kDtPadTypeMio,
386 .mio_out_or_direct_pad = 0,
388 },
389 [kDtPadIoa0] = {
390 .type = kDtPadTypeMio,
391 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa0,
393 },
394 [kDtPadIoa1] = {
395 .type = kDtPadTypeMio,
396 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa1,
398 },
399 [kDtPadIoa2] = {
400 .type = kDtPadTypeMio,
401 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa2,
403 },
404 [kDtPadIoa3] = {
405 .type = kDtPadTypeMio,
406 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa3,
408 },
409 [kDtPadIoa4] = {
410 .type = kDtPadTypeMio,
411 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa4,
413 },
414 [kDtPadIoa5] = {
415 .type = kDtPadTypeMio,
416 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa5,
418 },
419 [kDtPadIoa6] = {
420 .type = kDtPadTypeMio,
421 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa6,
423 },
424 [kDtPadIoa7] = {
425 .type = kDtPadTypeMio,
426 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa7,
428 },
429 [kDtPadIoa8] = {
430 .type = kDtPadTypeMio,
431 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoa8,
433 },
434 [kDtPadIob0] = {
435 .type = kDtPadTypeMio,
436 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob0,
438 },
439 [kDtPadIob1] = {
440 .type = kDtPadTypeMio,
441 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob1,
443 },
444 [kDtPadIob2] = {
445 .type = kDtPadTypeMio,
446 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob2,
448 },
449 [kDtPadIob3] = {
450 .type = kDtPadTypeMio,
451 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob3,
453 },
454 [kDtPadIob4] = {
455 .type = kDtPadTypeMio,
456 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob4,
458 },
459 [kDtPadIob5] = {
460 .type = kDtPadTypeMio,
461 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob5,
463 },
464 [kDtPadIob6] = {
465 .type = kDtPadTypeMio,
466 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob6,
468 },
469 [kDtPadIob7] = {
470 .type = kDtPadTypeMio,
471 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob7,
473 },
474 [kDtPadIob8] = {
475 .type = kDtPadTypeMio,
476 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob8,
478 },
479 [kDtPadIob9] = {
480 .type = kDtPadTypeMio,
481 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob9,
483 },
484 [kDtPadIob10] = {
485 .type = kDtPadTypeMio,
486 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob10,
488 },
489 [kDtPadIob11] = {
490 .type = kDtPadTypeMio,
491 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob11,
493 },
494 [kDtPadIob12] = {
495 .type = kDtPadTypeMio,
496 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIob12,
498 },
499 [kDtPadIoc0] = {
500 .type = kDtPadTypeMio,
501 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc0,
503 },
504 [kDtPadIoc1] = {
505 .type = kDtPadTypeMio,
506 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc1,
508 },
509 [kDtPadIoc2] = {
510 .type = kDtPadTypeMio,
511 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc2,
513 },
514 [kDtPadIoc3] = {
515 .type = kDtPadTypeMio,
516 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc3,
518 },
519 [kDtPadIoc4] = {
520 .type = kDtPadTypeMio,
521 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc4,
523 },
524 [kDtPadIoc5] = {
525 .type = kDtPadTypeMio,
526 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc5,
528 },
529 [kDtPadIoc6] = {
530 .type = kDtPadTypeMio,
531 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc6,
533 },
534 [kDtPadIoc7] = {
535 .type = kDtPadTypeMio,
536 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc7,
538 },
539 [kDtPadIoc8] = {
540 .type = kDtPadTypeMio,
541 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc8,
543 },
544 [kDtPadIoc9] = {
545 .type = kDtPadTypeMio,
546 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc9,
548 },
549 [kDtPadIoc10] = {
550 .type = kDtPadTypeMio,
551 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc10,
553 },
554 [kDtPadIoc11] = {
555 .type = kDtPadTypeMio,
556 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc11,
558 },
559 [kDtPadIoc12] = {
560 .type = kDtPadTypeMio,
561 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIoc12,
563 },
564 [kDtPadIor0] = {
565 .type = kDtPadTypeMio,
566 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor0,
568 },
569 [kDtPadIor1] = {
570 .type = kDtPadTypeMio,
571 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor1,
573 },
574 [kDtPadIor2] = {
575 .type = kDtPadTypeMio,
576 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor2,
578 },
579 [kDtPadIor3] = {
580 .type = kDtPadTypeMio,
581 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor3,
583 },
584 [kDtPadIor4] = {
585 .type = kDtPadTypeMio,
586 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor4,
588 },
589 [kDtPadIor5] = {
590 .type = kDtPadTypeMio,
591 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor5,
593 },
594 [kDtPadIor6] = {
595 .type = kDtPadTypeMio,
596 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor6,
598 },
599 [kDtPadIor7] = {
600 .type = kDtPadTypeMio,
601 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor7,
603 },
604 [kDtPadIor10] = {
605 .type = kDtPadTypeMio,
606 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor10,
608 },
609 [kDtPadIor11] = {
610 .type = kDtPadTypeMio,
611 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor11,
613 },
614 [kDtPadIor12] = {
615 .type = kDtPadTypeMio,
616 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor12,
618 },
619 [kDtPadIor13] = {
620 .type = kDtPadTypeMio,
621 .mio_out_or_direct_pad = kTopEgretPinmuxMioOutIor13,
623 },
624 [kDtPadUsbdevUsbDp] = {
625 .type = kDtPadTypeDio,
626 .mio_out_or_direct_pad = kTopEgretDirectPadsUsbdevUsbDp,
627 .insel = 0,
628 },
629 [kDtPadUsbdevUsbDn] = {
630 .type = kDtPadTypeDio,
631 .mio_out_or_direct_pad = kTopEgretDirectPadsUsbdevUsbDn,
632 .insel = 0,
633 },
635 .type = kDtPadTypeDio,
636 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Sd0,
637 .insel = 0,
638 },
640 .type = kDtPadTypeDio,
641 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Sd1,
642 .insel = 0,
643 },
645 .type = kDtPadTypeDio,
646 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Sd2,
647 .insel = 0,
648 },
650 .type = kDtPadTypeDio,
651 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Sd3,
652 .insel = 0,
653 },
655 .type = kDtPadTypeDio,
656 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceSd0,
657 .insel = 0,
658 },
660 .type = kDtPadTypeDio,
661 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceSd1,
662 .insel = 0,
663 },
665 .type = kDtPadTypeDio,
666 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceSd2,
667 .insel = 0,
668 },
670 .type = kDtPadTypeDio,
671 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceSd3,
672 .insel = 0,
673 },
675 .type = kDtPadTypeDio,
676 .mio_out_or_direct_pad = kTopEgretDirectPadsSysrstCtrlAonEcRstL,
677 .insel = 0,
678 },
680 .type = kDtPadTypeDio,
681 .mio_out_or_direct_pad = kTopEgretDirectPadsSysrstCtrlAonFlashWpL,
682 .insel = 0,
683 },
685 .type = kDtPadTypeDio,
686 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceSck,
687 .insel = 0,
688 },
690 .type = kDtPadTypeDio,
691 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiDeviceCsb,
692 .insel = 0,
693 },
695 .type = kDtPadTypeDio,
696 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Sck,
697 .insel = 0,
698 },
700 .type = kDtPadTypeDio,
701 .mio_out_or_direct_pad = kTopEgretDirectPadsSpiHost0Csb,
702 .insel = 0,
703 },
704};
705
706
707
708#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (int)(pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
709
711 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
712}
713
714dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
715 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
716}
717
718dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
719 // Same index as MIO_OUT.
720 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
721}
722
723dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
724 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
725}
726
727dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
728 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
729}
730
731/* Pin that is constantly tied to high-Z (input only) */
732const dt_periph_io_t kDtPeriphIoConstantHighZ = {
733 .__internal = {
734 .type = kDtPeriphIoTypeMio,
735 .periph_input_or_direct_pad = 0,
736 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
737 }
738};
739
740/* Pin that is constantly tied to zero (input/output) */
741const dt_periph_io_t kDtPeriphIoConstantZero = {
742 .__internal = {
743 .type = kDtPeriphIoTypeMio,
744 .periph_input_or_direct_pad = 0,
745 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
746 }
747};
748
749/* Pin that is constantly tied to one (input/output) */
750const dt_periph_io_t kDtPeriphIoConstantOne = {
751 .__internal = {
752 .type = kDtPeriphIoTypeMio,
753 .periph_input_or_direct_pad = 0,
754 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
755 }
756};