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 earlgrey
11 */
12
13#include "hw/top/dt/api.h"
15#include <stdint.h>
16
17
18enum {
19 kTopEarlgreyPlicIrqIdCount = kTopEarlgreyPlicIrqIdLast + 1,
20};
21
22static const dt_instance_id_t instance_from_irq[kTopEarlgreyPlicIrqIdCount] = {
245};
246
248 if (irq <= kTopEarlgreyPlicIrqIdLast) {
249 return instance_from_irq[irq];
250 }
252}
253
254
255enum {
256 kTopEarlgreyAlertIdCount = kTopEarlgreyAlertIdLast + 1,
257};
258
259static const dt_instance_id_t instance_from_alert[kTopEarlgreyAlertIdCount] = {
329};
330
332 if (alert <= kTopEarlgreyAlertIdLast) {
333 return instance_from_alert[alert];
334 }
336}
337
387};
388
390 if ((int)dev < kDtInstanceIdCount) {
391 return device_type[dev];
392 }
394}
395
396/**
397 * Pad description.
398 *
399 * A `dt_pad_t` represents a chip's physical pad.
400 */
401typedef struct dt_pad_desc {
402 dt_pad_type_t type; /**< Pad type */
403 /**
404 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
405 * that controls this pad (or the output part of this pad).
406 *
407 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
408 * that control this pad.
409 */
411 /**
412 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
413 * registers to connect a peripheral to this pad.
414 */
415 uint16_t insel;
417
418
419
420// Pad descriptions.
421static const dt_pad_desc_t dt_pad[kDtPadCount] = {
423 .type = kDtPadTypeMio,
424 .mio_out_or_direct_pad = 0,
426 },
428 .type = kDtPadTypeMio,
429 .mio_out_or_direct_pad = 0,
431 },
432 [kDtPadIoa0] = {
433 .type = kDtPadTypeMio,
434 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa0,
436 },
437 [kDtPadIoa1] = {
438 .type = kDtPadTypeMio,
439 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa1,
441 },
442 [kDtPadIoa2] = {
443 .type = kDtPadTypeMio,
444 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa2,
446 },
447 [kDtPadIoa3] = {
448 .type = kDtPadTypeMio,
449 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa3,
451 },
452 [kDtPadIoa4] = {
453 .type = kDtPadTypeMio,
454 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa4,
456 },
457 [kDtPadIoa5] = {
458 .type = kDtPadTypeMio,
459 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa5,
461 },
462 [kDtPadIoa6] = {
463 .type = kDtPadTypeMio,
464 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa6,
466 },
467 [kDtPadIoa7] = {
468 .type = kDtPadTypeMio,
469 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa7,
471 },
472 [kDtPadIoa8] = {
473 .type = kDtPadTypeMio,
474 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa8,
476 },
477 [kDtPadIob0] = {
478 .type = kDtPadTypeMio,
479 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob0,
481 },
482 [kDtPadIob1] = {
483 .type = kDtPadTypeMio,
484 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob1,
486 },
487 [kDtPadIob2] = {
488 .type = kDtPadTypeMio,
489 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob2,
491 },
492 [kDtPadIob3] = {
493 .type = kDtPadTypeMio,
494 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob3,
496 },
497 [kDtPadIob4] = {
498 .type = kDtPadTypeMio,
499 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob4,
501 },
502 [kDtPadIob5] = {
503 .type = kDtPadTypeMio,
504 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob5,
506 },
507 [kDtPadIob6] = {
508 .type = kDtPadTypeMio,
509 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob6,
511 },
512 [kDtPadIob7] = {
513 .type = kDtPadTypeMio,
514 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob7,
516 },
517 [kDtPadIob8] = {
518 .type = kDtPadTypeMio,
519 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob8,
521 },
522 [kDtPadIob9] = {
523 .type = kDtPadTypeMio,
524 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob9,
526 },
527 [kDtPadIob10] = {
528 .type = kDtPadTypeMio,
529 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob10,
531 },
532 [kDtPadIob11] = {
533 .type = kDtPadTypeMio,
534 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob11,
536 },
537 [kDtPadIob12] = {
538 .type = kDtPadTypeMio,
539 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob12,
541 },
542 [kDtPadIoc0] = {
543 .type = kDtPadTypeMio,
544 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc0,
546 },
547 [kDtPadIoc1] = {
548 .type = kDtPadTypeMio,
549 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc1,
551 },
552 [kDtPadIoc2] = {
553 .type = kDtPadTypeMio,
554 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc2,
556 },
557 [kDtPadIoc3] = {
558 .type = kDtPadTypeMio,
559 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc3,
561 },
562 [kDtPadIoc4] = {
563 .type = kDtPadTypeMio,
564 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc4,
566 },
567 [kDtPadIoc5] = {
568 .type = kDtPadTypeMio,
569 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc5,
571 },
572 [kDtPadIoc6] = {
573 .type = kDtPadTypeMio,
574 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc6,
576 },
577 [kDtPadIoc7] = {
578 .type = kDtPadTypeMio,
579 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc7,
581 },
582 [kDtPadIoc8] = {
583 .type = kDtPadTypeMio,
584 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc8,
586 },
587 [kDtPadIoc9] = {
588 .type = kDtPadTypeMio,
589 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc9,
591 },
592 [kDtPadIoc10] = {
593 .type = kDtPadTypeMio,
594 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc10,
596 },
597 [kDtPadIoc11] = {
598 .type = kDtPadTypeMio,
599 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc11,
601 },
602 [kDtPadIoc12] = {
603 .type = kDtPadTypeMio,
604 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc12,
606 },
607 [kDtPadIor0] = {
608 .type = kDtPadTypeMio,
609 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor0,
611 },
612 [kDtPadIor1] = {
613 .type = kDtPadTypeMio,
614 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor1,
616 },
617 [kDtPadIor2] = {
618 .type = kDtPadTypeMio,
619 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor2,
621 },
622 [kDtPadIor3] = {
623 .type = kDtPadTypeMio,
624 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor3,
626 },
627 [kDtPadIor4] = {
628 .type = kDtPadTypeMio,
629 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor4,
631 },
632 [kDtPadIor5] = {
633 .type = kDtPadTypeMio,
634 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor5,
636 },
637 [kDtPadIor6] = {
638 .type = kDtPadTypeMio,
639 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor6,
641 },
642 [kDtPadIor7] = {
643 .type = kDtPadTypeMio,
644 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor7,
646 },
647 [kDtPadIor10] = {
648 .type = kDtPadTypeMio,
649 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor10,
651 },
652 [kDtPadIor11] = {
653 .type = kDtPadTypeMio,
654 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor11,
656 },
657 [kDtPadIor12] = {
658 .type = kDtPadTypeMio,
659 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor12,
661 },
662 [kDtPadIor13] = {
663 .type = kDtPadTypeMio,
664 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor13,
666 },
667 [kDtPadUsbdevUsbDp] = {
668 .type = kDtPadTypeDio,
669 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDp,
670 .insel = 0,
671 },
672 [kDtPadUsbdevUsbDn] = {
673 .type = kDtPadTypeDio,
674 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDn,
675 .insel = 0,
676 },
678 .type = kDtPadTypeDio,
679 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd0,
680 .insel = 0,
681 },
683 .type = kDtPadTypeDio,
684 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd1,
685 .insel = 0,
686 },
688 .type = kDtPadTypeDio,
689 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd2,
690 .insel = 0,
691 },
693 .type = kDtPadTypeDio,
694 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd3,
695 .insel = 0,
696 },
698 .type = kDtPadTypeDio,
699 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd0,
700 .insel = 0,
701 },
703 .type = kDtPadTypeDio,
704 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd1,
705 .insel = 0,
706 },
708 .type = kDtPadTypeDio,
709 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd2,
710 .insel = 0,
711 },
713 .type = kDtPadTypeDio,
714 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd3,
715 .insel = 0,
716 },
718 .type = kDtPadTypeDio,
719 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlEcRstL,
720 .insel = 0,
721 },
723 .type = kDtPadTypeDio,
724 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlFlashWpL,
725 .insel = 0,
726 },
728 .type = kDtPadTypeDio,
729 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSck,
730 .insel = 0,
731 },
733 .type = kDtPadTypeDio,
734 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceCsb,
735 .insel = 0,
736 },
738 .type = kDtPadTypeDio,
739 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sck,
740 .insel = 0,
741 },
743 .type = kDtPadTypeDio,
744 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Csb0,
745 .insel = 0,
746 },
747};
748
749
750
751#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (int)(pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
752
754 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
755}
756
757dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
758 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
759}
760
761dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
762 // Same index as MIO_OUT.
763 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
764}
765
766dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
767 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
768}
769
770dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
771 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
772}
773
774/* Pin that is constantly tied to high-Z (input only) */
775const dt_periph_io_t kDtPeriphIoConstantHighZ = {
776 .__internal = {
777 .type = kDtPeriphIoTypeMio,
778 .periph_input_or_direct_pad = 0,
779 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
780 }
781};
782
783/* Pin that is constantly tied to zero (input/output) */
784const dt_periph_io_t kDtPeriphIoConstantZero = {
785 .__internal = {
786 .type = kDtPeriphIoTypeMio,
787 .periph_input_or_direct_pad = 0,
788 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
789 }
790};
791
792/* Pin that is constantly tied to one (input/output) */
793const dt_periph_io_t kDtPeriphIoConstantOne = {
794 .__internal = {
795 .type = kDtPeriphIoTypeMio,
796 .periph_input_or_direct_pad = 0,
797 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
798 }
799};