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] = {
213};
214
216 if (irq <= kTopEarlgreyPlicIrqIdLast) {
217 return instance_from_irq[irq];
218 }
220}
221
222
223enum {
224 kTopEarlgreyAlertIdCount = kTopEarlgreyAlertIdLast + 1,
225};
226
227static const dt_instance_id_t instance_from_alert[kTopEarlgreyAlertIdCount] = {
296};
297
299 if (alert <= kTopEarlgreyAlertIdLast) {
300 return instance_from_alert[alert];
301 }
303}
304
353};
354
356 if ((int)dev < kDtInstanceIdCount) {
357 return device_type[dev];
358 }
360}
361
362/**
363 * Pad description.
364 *
365 * A `dt_pad_t` represents a chip's physical pad.
366 */
367typedef struct dt_pad_desc {
368 dt_pad_type_t type; /**< Pad type */
369 /**
370 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
371 * that controls this pad (or the output part of this pad).
372 *
373 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
374 * that control this pad.
375 */
377 /**
378 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
379 * registers to connect a peripheral to this pad.
380 */
381 uint16_t insel;
383
384
385
386// Pad descriptions.
387static const dt_pad_desc_t dt_pad[kDtPadCount] = {
389 .type = kDtPadTypeMio,
390 .mio_out_or_direct_pad = 0,
392 },
394 .type = kDtPadTypeMio,
395 .mio_out_or_direct_pad = 0,
397 },
398 [kDtPadIoa0] = {
399 .type = kDtPadTypeMio,
400 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa0,
402 },
403 [kDtPadIoa1] = {
404 .type = kDtPadTypeMio,
405 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa1,
407 },
408 [kDtPadIoa2] = {
409 .type = kDtPadTypeMio,
410 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa2,
412 },
413 [kDtPadIoa3] = {
414 .type = kDtPadTypeMio,
415 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa3,
417 },
418 [kDtPadIoa4] = {
419 .type = kDtPadTypeMio,
420 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa4,
422 },
423 [kDtPadIoa5] = {
424 .type = kDtPadTypeMio,
425 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa5,
427 },
428 [kDtPadIoa6] = {
429 .type = kDtPadTypeMio,
430 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa6,
432 },
433 [kDtPadIoa7] = {
434 .type = kDtPadTypeMio,
435 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa7,
437 },
438 [kDtPadIoa8] = {
439 .type = kDtPadTypeMio,
440 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa8,
442 },
443 [kDtPadIob0] = {
444 .type = kDtPadTypeMio,
445 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob0,
447 },
448 [kDtPadIob1] = {
449 .type = kDtPadTypeMio,
450 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob1,
452 },
453 [kDtPadIob2] = {
454 .type = kDtPadTypeMio,
455 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob2,
457 },
458 [kDtPadIob3] = {
459 .type = kDtPadTypeMio,
460 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob3,
462 },
463 [kDtPadIob4] = {
464 .type = kDtPadTypeMio,
465 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob4,
467 },
468 [kDtPadIob5] = {
469 .type = kDtPadTypeMio,
470 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob5,
472 },
473 [kDtPadIob6] = {
474 .type = kDtPadTypeMio,
475 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob6,
477 },
478 [kDtPadIob7] = {
479 .type = kDtPadTypeMio,
480 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob7,
482 },
483 [kDtPadIob8] = {
484 .type = kDtPadTypeMio,
485 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob8,
487 },
488 [kDtPadIob9] = {
489 .type = kDtPadTypeMio,
490 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob9,
492 },
493 [kDtPadIob10] = {
494 .type = kDtPadTypeMio,
495 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob10,
497 },
498 [kDtPadIob11] = {
499 .type = kDtPadTypeMio,
500 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob11,
502 },
503 [kDtPadIob12] = {
504 .type = kDtPadTypeMio,
505 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob12,
507 },
508 [kDtPadIoc0] = {
509 .type = kDtPadTypeMio,
510 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc0,
512 },
513 [kDtPadIoc1] = {
514 .type = kDtPadTypeMio,
515 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc1,
517 },
518 [kDtPadIoc2] = {
519 .type = kDtPadTypeMio,
520 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc2,
522 },
523 [kDtPadIoc3] = {
524 .type = kDtPadTypeMio,
525 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc3,
527 },
528 [kDtPadIoc4] = {
529 .type = kDtPadTypeMio,
530 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc4,
532 },
533 [kDtPadIoc5] = {
534 .type = kDtPadTypeMio,
535 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc5,
537 },
538 [kDtPadIoc6] = {
539 .type = kDtPadTypeMio,
540 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc6,
542 },
543 [kDtPadIoc7] = {
544 .type = kDtPadTypeMio,
545 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc7,
547 },
548 [kDtPadIoc8] = {
549 .type = kDtPadTypeMio,
550 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc8,
552 },
553 [kDtPadIoc9] = {
554 .type = kDtPadTypeMio,
555 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc9,
557 },
558 [kDtPadIoc10] = {
559 .type = kDtPadTypeMio,
560 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc10,
562 },
563 [kDtPadIoc11] = {
564 .type = kDtPadTypeMio,
565 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc11,
567 },
568 [kDtPadIoc12] = {
569 .type = kDtPadTypeMio,
570 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc12,
572 },
573 [kDtPadIor0] = {
574 .type = kDtPadTypeMio,
575 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor0,
577 },
578 [kDtPadIor1] = {
579 .type = kDtPadTypeMio,
580 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor1,
582 },
583 [kDtPadIor2] = {
584 .type = kDtPadTypeMio,
585 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor2,
587 },
588 [kDtPadIor3] = {
589 .type = kDtPadTypeMio,
590 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor3,
592 },
593 [kDtPadIor4] = {
594 .type = kDtPadTypeMio,
595 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor4,
597 },
598 [kDtPadIor5] = {
599 .type = kDtPadTypeMio,
600 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor5,
602 },
603 [kDtPadIor6] = {
604 .type = kDtPadTypeMio,
605 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor6,
607 },
608 [kDtPadIor7] = {
609 .type = kDtPadTypeMio,
610 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor7,
612 },
613 [kDtPadIor10] = {
614 .type = kDtPadTypeMio,
615 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor10,
617 },
618 [kDtPadIor11] = {
619 .type = kDtPadTypeMio,
620 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor11,
622 },
623 [kDtPadIor12] = {
624 .type = kDtPadTypeMio,
625 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor12,
627 },
628 [kDtPadIor13] = {
629 .type = kDtPadTypeMio,
630 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor13,
632 },
633 [kDtPadUsbdevUsbDp] = {
634 .type = kDtPadTypeDio,
635 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDp,
636 .insel = 0,
637 },
638 [kDtPadUsbdevUsbDn] = {
639 .type = kDtPadTypeDio,
640 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDn,
641 .insel = 0,
642 },
644 .type = kDtPadTypeDio,
645 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd0,
646 .insel = 0,
647 },
649 .type = kDtPadTypeDio,
650 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd1,
651 .insel = 0,
652 },
654 .type = kDtPadTypeDio,
655 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd2,
656 .insel = 0,
657 },
659 .type = kDtPadTypeDio,
660 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd3,
661 .insel = 0,
662 },
664 .type = kDtPadTypeDio,
665 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd0,
666 .insel = 0,
667 },
669 .type = kDtPadTypeDio,
670 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd1,
671 .insel = 0,
672 },
674 .type = kDtPadTypeDio,
675 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd2,
676 .insel = 0,
677 },
679 .type = kDtPadTypeDio,
680 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd3,
681 .insel = 0,
682 },
684 .type = kDtPadTypeDio,
685 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlEcRstL,
686 .insel = 0,
687 },
689 .type = kDtPadTypeDio,
690 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlFlashWpL,
691 .insel = 0,
692 },
694 .type = kDtPadTypeDio,
695 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSck,
696 .insel = 0,
697 },
699 .type = kDtPadTypeDio,
700 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceCsb,
701 .insel = 0,
702 },
704 .type = kDtPadTypeDio,
705 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sck,
706 .insel = 0,
707 },
709 .type = kDtPadTypeDio,
710 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Csb,
711 .insel = 0,
712 },
713};
714
715
716
717#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (int)(pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
718
720 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
721}
722
723dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
724 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
725}
726
727dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
728 // Same index as MIO_OUT.
729 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
730}
731
732dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
733 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
734}
735
736dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
737 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
738}
739
740/* Pin that is constantly tied to high-Z (input only) */
741const dt_periph_io_t kDtPeriphIoConstantHighZ = {
742 .__internal = {
743 .type = kDtPeriphIoTypeMio,
744 .periph_input_or_direct_pad = 0,
745 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
746 }
747};
748
749/* Pin that is constantly tied to zero (input/output) */
750const dt_periph_io_t kDtPeriphIoConstantZero = {
751 .__internal = {
752 .type = kDtPeriphIoTypeMio,
753 .periph_input_or_direct_pad = 0,
754 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
755 }
756};
757
758/* Pin that is constantly tied to one (input/output) */
759const dt_periph_io_t kDtPeriphIoConstantOne = {
760 .__internal = {
761 .type = kDtPeriphIoTypeMio,
762 .periph_input_or_direct_pad = 0,
763 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
764 }
765};