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