Software APIs
dt_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 darjeeling
11 */
12
13#include "dt/dt_api.h"
15#include <stdint.h>
16
17
18enum {
19 kTopDarjeelingPlicIrqIdCount = kTopDarjeelingPlicIrqIdLast + 1,
20};
21
22static const dt_instance_id_t instance_from_irq[kTopDarjeelingPlicIrqIdCount] = {
187};
188
190 if (irq <= kTopDarjeelingPlicIrqIdLast) {
191 return instance_from_irq[irq];
192 }
194}
195
196
197enum {
198 kTopDarjeelingAlertIdCount = kTopDarjeelingAlertIdLast + 1,
199};
200
201static const dt_instance_id_t instance_from_alert[kTopDarjeelingAlertIdCount] = {
307};
308
310 if (alert <= kTopDarjeelingAlertIdLast) {
311 return instance_from_alert[alert];
312 }
314}
315
316static const dt_device_type_t device_type[kDtInstanceIdCount] = {
365};
366
368 if (dev < kDtInstanceIdCount) {
369 return device_type[dev];
370 }
372}
373
374/**
375 * Pad description.
376 *
377 * A `dt_pad_t` represents a chip's physical pad.
378 */
379typedef struct dt_pad_desc {
380 dt_pad_type_t type; /**< Pad type */
381 /**
382 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
383 * that controls this pad (or the output part of this pad).
384 *
385 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
386 * that control this pad.
387 */
388 uint16_t mio_out_or_direct_pad;
389 /**
390 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
391 * registers to connect a peripheral to this pad.
392 */
393 uint16_t insel;
395
396
397
398// Pad descriptions.
399static const dt_pad_desc_t dt_pad[kDtPadCount] = {
400 [kDtPadMio0] = {
401 .type = kDtPadTypeMio,
402 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio0,
404 },
405 [kDtPadMio1] = {
406 .type = kDtPadTypeMio,
407 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio1,
409 },
410 [kDtPadMio2] = {
411 .type = kDtPadTypeMio,
412 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio2,
414 },
415 [kDtPadMio3] = {
416 .type = kDtPadTypeMio,
417 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio3,
419 },
420 [kDtPadMio4] = {
421 .type = kDtPadTypeMio,
422 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio4,
424 },
425 [kDtPadMio5] = {
426 .type = kDtPadTypeMio,
427 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio5,
429 },
430 [kDtPadMio6] = {
431 .type = kDtPadTypeMio,
432 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio6,
434 },
435 [kDtPadMio7] = {
436 .type = kDtPadTypeMio,
437 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio7,
439 },
440 [kDtPadMio8] = {
441 .type = kDtPadTypeMio,
442 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio8,
444 },
445 [kDtPadMio9] = {
446 .type = kDtPadTypeMio,
447 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio9,
449 },
450 [kDtPadMio10] = {
451 .type = kDtPadTypeMio,
452 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio10,
454 },
455 [kDtPadMio11] = {
456 .type = kDtPadTypeMio,
457 .mio_out_or_direct_pad = kTopDarjeelingPinmuxMioOutMio11,
459 },
461 .type = kDtPadTypeDio,
462 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Sd0,
463 .insel = 0,
464 },
466 .type = kDtPadTypeDio,
467 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Sd1,
468 .insel = 0,
469 },
471 .type = kDtPadTypeDio,
472 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Sd2,
473 .insel = 0,
474 },
476 .type = kDtPadTypeDio,
477 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Sd3,
478 .insel = 0,
479 },
481 .type = kDtPadTypeDio,
482 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceSd0,
483 .insel = 0,
484 },
486 .type = kDtPadTypeDio,
487 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceSd1,
488 .insel = 0,
489 },
491 .type = kDtPadTypeDio,
492 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceSd2,
493 .insel = 0,
494 },
496 .type = kDtPadTypeDio,
497 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceSd3,
498 .insel = 0,
499 },
500 [kDtPadI2c0Scl] = {
501 .type = kDtPadTypeDio,
502 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsI2c0Scl,
503 .insel = 0,
504 },
505 [kDtPadI2c0Sda] = {
506 .type = kDtPadTypeDio,
507 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsI2c0Sda,
508 .insel = 0,
509 },
510 [kDtPadGpioGpio0] = {
511 .type = kDtPadTypeDio,
512 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio0,
513 .insel = 0,
514 },
515 [kDtPadGpioGpio1] = {
516 .type = kDtPadTypeDio,
517 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio1,
518 .insel = 0,
519 },
520 [kDtPadGpioGpio2] = {
521 .type = kDtPadTypeDio,
522 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio2,
523 .insel = 0,
524 },
525 [kDtPadGpioGpio3] = {
526 .type = kDtPadTypeDio,
527 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio3,
528 .insel = 0,
529 },
530 [kDtPadGpioGpio4] = {
531 .type = kDtPadTypeDio,
532 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio4,
533 .insel = 0,
534 },
535 [kDtPadGpioGpio5] = {
536 .type = kDtPadTypeDio,
537 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio5,
538 .insel = 0,
539 },
540 [kDtPadGpioGpio6] = {
541 .type = kDtPadTypeDio,
542 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio6,
543 .insel = 0,
544 },
545 [kDtPadGpioGpio7] = {
546 .type = kDtPadTypeDio,
547 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio7,
548 .insel = 0,
549 },
550 [kDtPadGpioGpio8] = {
551 .type = kDtPadTypeDio,
552 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio8,
553 .insel = 0,
554 },
555 [kDtPadGpioGpio9] = {
556 .type = kDtPadTypeDio,
557 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio9,
558 .insel = 0,
559 },
560 [kDtPadGpioGpio10] = {
561 .type = kDtPadTypeDio,
562 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio10,
563 .insel = 0,
564 },
565 [kDtPadGpioGpio11] = {
566 .type = kDtPadTypeDio,
567 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio11,
568 .insel = 0,
569 },
570 [kDtPadGpioGpio12] = {
571 .type = kDtPadTypeDio,
572 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio12,
573 .insel = 0,
574 },
575 [kDtPadGpioGpio13] = {
576 .type = kDtPadTypeDio,
577 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio13,
578 .insel = 0,
579 },
580 [kDtPadGpioGpio14] = {
581 .type = kDtPadTypeDio,
582 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio14,
583 .insel = 0,
584 },
585 [kDtPadGpioGpio15] = {
586 .type = kDtPadTypeDio,
587 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio15,
588 .insel = 0,
589 },
590 [kDtPadGpioGpio16] = {
591 .type = kDtPadTypeDio,
592 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio16,
593 .insel = 0,
594 },
595 [kDtPadGpioGpio17] = {
596 .type = kDtPadTypeDio,
597 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio17,
598 .insel = 0,
599 },
600 [kDtPadGpioGpio18] = {
601 .type = kDtPadTypeDio,
602 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio18,
603 .insel = 0,
604 },
605 [kDtPadGpioGpio19] = {
606 .type = kDtPadTypeDio,
607 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio19,
608 .insel = 0,
609 },
610 [kDtPadGpioGpio20] = {
611 .type = kDtPadTypeDio,
612 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio20,
613 .insel = 0,
614 },
615 [kDtPadGpioGpio21] = {
616 .type = kDtPadTypeDio,
617 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio21,
618 .insel = 0,
619 },
620 [kDtPadGpioGpio22] = {
621 .type = kDtPadTypeDio,
622 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio22,
623 .insel = 0,
624 },
625 [kDtPadGpioGpio23] = {
626 .type = kDtPadTypeDio,
627 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio23,
628 .insel = 0,
629 },
630 [kDtPadGpioGpio24] = {
631 .type = kDtPadTypeDio,
632 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio24,
633 .insel = 0,
634 },
635 [kDtPadGpioGpio25] = {
636 .type = kDtPadTypeDio,
637 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio25,
638 .insel = 0,
639 },
640 [kDtPadGpioGpio26] = {
641 .type = kDtPadTypeDio,
642 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio26,
643 .insel = 0,
644 },
645 [kDtPadGpioGpio27] = {
646 .type = kDtPadTypeDio,
647 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio27,
648 .insel = 0,
649 },
650 [kDtPadGpioGpio28] = {
651 .type = kDtPadTypeDio,
652 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio28,
653 .insel = 0,
654 },
655 [kDtPadGpioGpio29] = {
656 .type = kDtPadTypeDio,
657 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio29,
658 .insel = 0,
659 },
660 [kDtPadGpioGpio30] = {
661 .type = kDtPadTypeDio,
662 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio30,
663 .insel = 0,
664 },
665 [kDtPadGpioGpio31] = {
666 .type = kDtPadTypeDio,
667 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsGpioGpio31,
668 .insel = 0,
669 },
671 .type = kDtPadTypeDio,
672 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceSck,
673 .insel = 0,
674 },
676 .type = kDtPadTypeDio,
677 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceCsb,
678 .insel = 0,
679 },
681 .type = kDtPadTypeDio,
682 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiDeviceTpmCsb,
683 .insel = 0,
684 },
685 [kDtPadUart0Rx] = {
686 .type = kDtPadTypeDio,
687 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsUart0Rx,
688 .insel = 0,
689 },
691 .type = kDtPadTypeDio,
692 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi0,
693 .insel = 0,
694 },
696 .type = kDtPadTypeDio,
697 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi1,
698 .insel = 0,
699 },
701 .type = kDtPadTypeDio,
702 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi2,
703 .insel = 0,
704 },
706 .type = kDtPadTypeDio,
707 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi3,
708 .insel = 0,
709 },
711 .type = kDtPadTypeDio,
712 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi4,
713 .insel = 0,
714 },
716 .type = kDtPadTypeDio,
717 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi5,
718 .insel = 0,
719 },
721 .type = kDtPadTypeDio,
722 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi6,
723 .insel = 0,
724 },
726 .type = kDtPadTypeDio,
727 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi7,
728 .insel = 0,
729 },
731 .type = kDtPadTypeDio,
732 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi8,
733 .insel = 0,
734 },
736 .type = kDtPadTypeDio,
737 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi9,
738 .insel = 0,
739 },
741 .type = kDtPadTypeDio,
742 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi10,
743 .insel = 0,
744 },
746 .type = kDtPadTypeDio,
747 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpi11,
748 .insel = 0,
749 },
751 .type = kDtPadTypeDio,
752 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Sck,
753 .insel = 0,
754 },
756 .type = kDtPadTypeDio,
757 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSpiHost0Csb,
758 .insel = 0,
759 },
760 [kDtPadUart0Tx] = {
761 .type = kDtPadTypeDio,
762 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsUart0Tx,
763 .insel = 0,
764 },
766 .type = kDtPadTypeDio,
767 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo0,
768 .insel = 0,
769 },
771 .type = kDtPadTypeDio,
772 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo1,
773 .insel = 0,
774 },
776 .type = kDtPadTypeDio,
777 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo2,
778 .insel = 0,
779 },
781 .type = kDtPadTypeDio,
782 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo3,
783 .insel = 0,
784 },
786 .type = kDtPadTypeDio,
787 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo4,
788 .insel = 0,
789 },
791 .type = kDtPadTypeDio,
792 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo5,
793 .insel = 0,
794 },
796 .type = kDtPadTypeDio,
797 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo6,
798 .insel = 0,
799 },
801 .type = kDtPadTypeDio,
802 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo7,
803 .insel = 0,
804 },
806 .type = kDtPadTypeDio,
807 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo8,
808 .insel = 0,
809 },
811 .type = kDtPadTypeDio,
812 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo9,
813 .insel = 0,
814 },
816 .type = kDtPadTypeDio,
817 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo10,
818 .insel = 0,
819 },
821 .type = kDtPadTypeDio,
822 .mio_out_or_direct_pad = kTopDarjeelingDirectPadsSocProxySocGpo11,
823 .insel = 0,
824 },
825};
826
827
828
829#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
830
832 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
833}
834
835dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
836 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
837}
838
839dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
840 // Same index as MIO_OUT.
841 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
842}
843
844dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
845 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
846}
847
848dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
849 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
850}
851
852/* Pin that is constantly tied to high-Z (input only) */
853const dt_periph_io_t kDtPeriphIoConstantHighZ = {
854 .__internal = {
855 .type = kDtPeriphIoTypeMio,
856 .periph_input_or_direct_pad = 0,
857 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
858 }
859};
860
861/* Pin that is constantly tied to zero (input/output) */
862const dt_periph_io_t kDtPeriphIoConstantZero = {
863 .__internal = {
864 .type = kDtPeriphIoTypeMio,
865 .periph_input_or_direct_pad = 0,
866 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
867 }
868};
869
870/* Pin that is constantly tied to one (input/output) */
871const dt_periph_io_t kDtPeriphIoConstantOne = {
872 .__internal = {
873 .type = kDtPeriphIoTypeMio,
874 .periph_input_or_direct_pad = 0,
875 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
876 }
877};