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