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 "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] = {
378 [kDtPadIoa0] = {
379 .type = kDtPadTypeMio,
380 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa0,
382 },
383 [kDtPadIoa1] = {
384 .type = kDtPadTypeMio,
385 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa1,
387 },
388 [kDtPadIoa2] = {
389 .type = kDtPadTypeMio,
390 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa2,
392 },
393 [kDtPadIoa3] = {
394 .type = kDtPadTypeMio,
395 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa3,
397 },
398 [kDtPadIoa4] = {
399 .type = kDtPadTypeMio,
400 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa4,
402 },
403 [kDtPadIoa5] = {
404 .type = kDtPadTypeMio,
405 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa5,
407 },
408 [kDtPadIoa6] = {
409 .type = kDtPadTypeMio,
410 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa6,
412 },
413 [kDtPadIoa7] = {
414 .type = kDtPadTypeMio,
415 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa7,
417 },
418 [kDtPadIoa8] = {
419 .type = kDtPadTypeMio,
420 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa8,
422 },
423 [kDtPadIob0] = {
424 .type = kDtPadTypeMio,
425 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob0,
427 },
428 [kDtPadIob1] = {
429 .type = kDtPadTypeMio,
430 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob1,
432 },
433 [kDtPadIob2] = {
434 .type = kDtPadTypeMio,
435 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob2,
437 },
438 [kDtPadIob3] = {
439 .type = kDtPadTypeMio,
440 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob3,
442 },
443 [kDtPadIob4] = {
444 .type = kDtPadTypeMio,
445 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob4,
447 },
448 [kDtPadIob5] = {
449 .type = kDtPadTypeMio,
450 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob5,
452 },
453 [kDtPadIob6] = {
454 .type = kDtPadTypeMio,
455 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob6,
457 },
458 [kDtPadIob7] = {
459 .type = kDtPadTypeMio,
460 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob7,
462 },
463 [kDtPadIob8] = {
464 .type = kDtPadTypeMio,
465 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob8,
467 },
468 [kDtPadIob9] = {
469 .type = kDtPadTypeMio,
470 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob9,
472 },
473 [kDtPadIob10] = {
474 .type = kDtPadTypeMio,
475 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob10,
477 },
478 [kDtPadIob11] = {
479 .type = kDtPadTypeMio,
480 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob11,
482 },
483 [kDtPadIob12] = {
484 .type = kDtPadTypeMio,
485 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob12,
487 },
488 [kDtPadIoc0] = {
489 .type = kDtPadTypeMio,
490 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc0,
492 },
493 [kDtPadIoc1] = {
494 .type = kDtPadTypeMio,
495 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc1,
497 },
498 [kDtPadIoc2] = {
499 .type = kDtPadTypeMio,
500 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc2,
502 },
503 [kDtPadIoc3] = {
504 .type = kDtPadTypeMio,
505 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc3,
507 },
508 [kDtPadIoc4] = {
509 .type = kDtPadTypeMio,
510 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc4,
512 },
513 [kDtPadIoc5] = {
514 .type = kDtPadTypeMio,
515 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc5,
517 },
518 [kDtPadIoc6] = {
519 .type = kDtPadTypeMio,
520 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc6,
522 },
523 [kDtPadIoc7] = {
524 .type = kDtPadTypeMio,
525 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc7,
527 },
528 [kDtPadIoc8] = {
529 .type = kDtPadTypeMio,
530 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc8,
532 },
533 [kDtPadIoc9] = {
534 .type = kDtPadTypeMio,
535 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc9,
537 },
538 [kDtPadIoc10] = {
539 .type = kDtPadTypeMio,
540 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc10,
542 },
543 [kDtPadIoc11] = {
544 .type = kDtPadTypeMio,
545 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc11,
547 },
548 [kDtPadIoc12] = {
549 .type = kDtPadTypeMio,
550 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc12,
552 },
553 [kDtPadIor0] = {
554 .type = kDtPadTypeMio,
555 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor0,
557 },
558 [kDtPadIor1] = {
559 .type = kDtPadTypeMio,
560 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor1,
562 },
563 [kDtPadIor2] = {
564 .type = kDtPadTypeMio,
565 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor2,
567 },
568 [kDtPadIor3] = {
569 .type = kDtPadTypeMio,
570 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor3,
572 },
573 [kDtPadIor4] = {
574 .type = kDtPadTypeMio,
575 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor4,
577 },
578 [kDtPadIor5] = {
579 .type = kDtPadTypeMio,
580 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor5,
582 },
583 [kDtPadIor6] = {
584 .type = kDtPadTypeMio,
585 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor6,
587 },
588 [kDtPadIor7] = {
589 .type = kDtPadTypeMio,
590 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor7,
592 },
593 [kDtPadIor10] = {
594 .type = kDtPadTypeMio,
595 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor10,
597 },
598 [kDtPadIor11] = {
599 .type = kDtPadTypeMio,
600 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor11,
602 },
603 [kDtPadIor12] = {
604 .type = kDtPadTypeMio,
605 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor12,
607 },
608 [kDtPadIor13] = {
609 .type = kDtPadTypeMio,
610 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor13,
612 },
613 [kDtPadUsbdevUsbDp] = {
614 .type = kDtPadTypeDio,
615 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDp,
616 .insel = 0,
617 },
618 [kDtPadUsbdevUsbDn] = {
619 .type = kDtPadTypeDio,
620 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDn,
621 .insel = 0,
622 },
624 .type = kDtPadTypeDio,
625 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd0,
626 .insel = 0,
627 },
629 .type = kDtPadTypeDio,
630 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd1,
631 .insel = 0,
632 },
634 .type = kDtPadTypeDio,
635 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd2,
636 .insel = 0,
637 },
639 .type = kDtPadTypeDio,
640 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd3,
641 .insel = 0,
642 },
644 .type = kDtPadTypeDio,
645 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd0,
646 .insel = 0,
647 },
649 .type = kDtPadTypeDio,
650 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd1,
651 .insel = 0,
652 },
654 .type = kDtPadTypeDio,
655 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd2,
656 .insel = 0,
657 },
659 .type = kDtPadTypeDio,
660 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd3,
661 .insel = 0,
662 },
664 .type = kDtPadTypeDio,
665 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonEcRstL,
666 .insel = 0,
667 },
669 .type = kDtPadTypeDio,
670 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonFlashWpL,
671 .insel = 0,
672 },
674 .type = kDtPadTypeDio,
675 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSck,
676 .insel = 0,
677 },
679 .type = kDtPadTypeDio,
680 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceCsb,
681 .insel = 0,
682 },
684 .type = kDtPadTypeDio,
685 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sck,
686 .insel = 0,
687 },
689 .type = kDtPadTypeDio,
690 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Csb,
691 .insel = 0,
692 },
693};
694
695
696
697#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
698
700 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
701}
702
703dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
704 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
705}
706
707dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
708 // Same index as MIO_OUT.
709 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
710}
711
712dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
713 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
714}
715
716dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
717 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
718}
719
720/* Pin that is constantly tied to high-Z (input only) */
721const dt_periph_io_t kDtPeriphIoConstantHighZ = {
722 .__internal = {
723 .type = kDtPeriphIoTypeMio,
724 .periph_input_or_direct_pad = 0,
725 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
726 }
727};
728
729/* Pin that is constantly tied to zero (input/output) */
730const dt_periph_io_t kDtPeriphIoConstantZero = {
731 .__internal = {
732 .type = kDtPeriphIoTypeMio,
733 .periph_input_or_direct_pad = 0,
734 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
735 }
736};
737
738/* Pin that is constantly tied to one (input/output) */
739const dt_periph_io_t kDtPeriphIoConstantOne = {
740 .__internal = {
741 .type = kDtPeriphIoTypeMio,
742 .periph_input_or_direct_pad = 0,
743 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
744 }
745};