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] = {
207};
208
210 if (irq <= kTopEarlgreyPlicIrqIdLast) {
211 return instance_from_irq[irq];
212 }
214}
215
216
217enum {
218 kTopEarlgreyAlertIdCount = kTopEarlgreyAlertIdLast + 1,
219};
220
221static const dt_instance_id_t instance_from_alert[kTopEarlgreyAlertIdCount] = {
286};
287
289 if (alert <= kTopEarlgreyAlertIdLast) {
290 return instance_from_alert[alert];
291 }
293}
294
339};
340
342 if ((int)dev < kDtInstanceIdCount) {
343 return device_type[dev];
344 }
346}
347
348/**
349 * Pad description.
350 *
351 * A `dt_pad_t` represents a chip's physical pad.
352 */
353typedef struct dt_pad_desc {
354 dt_pad_type_t type; /**< Pad type */
355 /**
356 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
357 * that controls this pad (or the output part of this pad).
358 *
359 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
360 * that control this pad.
361 */
363 /**
364 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
365 * registers to connect a peripheral to this pad.
366 */
367 uint16_t insel;
369
370
371
372// Pad descriptions.
373static const dt_pad_desc_t dt_pad[kDtPadCount] = {
375 .type = kDtPadTypeMio,
376 .mio_out_or_direct_pad = 0,
378 },
380 .type = kDtPadTypeMio,
381 .mio_out_or_direct_pad = 0,
383 },
384 [kDtPadIoa0] = {
385 .type = kDtPadTypeMio,
386 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa0,
388 },
389 [kDtPadIoa1] = {
390 .type = kDtPadTypeMio,
391 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa1,
393 },
394 [kDtPadIoa2] = {
395 .type = kDtPadTypeMio,
396 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa2,
398 },
399 [kDtPadIoa3] = {
400 .type = kDtPadTypeMio,
401 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa3,
403 },
404 [kDtPadIoa4] = {
405 .type = kDtPadTypeMio,
406 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa4,
408 },
409 [kDtPadIoa5] = {
410 .type = kDtPadTypeMio,
411 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa5,
413 },
414 [kDtPadIoa6] = {
415 .type = kDtPadTypeMio,
416 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa6,
418 },
419 [kDtPadIoa7] = {
420 .type = kDtPadTypeMio,
421 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa7,
423 },
424 [kDtPadIoa8] = {
425 .type = kDtPadTypeMio,
426 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa8,
428 },
429 [kDtPadIob0] = {
430 .type = kDtPadTypeMio,
431 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob0,
433 },
434 [kDtPadIob1] = {
435 .type = kDtPadTypeMio,
436 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob1,
438 },
439 [kDtPadIob2] = {
440 .type = kDtPadTypeMio,
441 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob2,
443 },
444 [kDtPadIob3] = {
445 .type = kDtPadTypeMio,
446 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob3,
448 },
449 [kDtPadIob4] = {
450 .type = kDtPadTypeMio,
451 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob4,
453 },
454 [kDtPadIob5] = {
455 .type = kDtPadTypeMio,
456 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob5,
458 },
459 [kDtPadIob6] = {
460 .type = kDtPadTypeMio,
461 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob6,
463 },
464 [kDtPadIob7] = {
465 .type = kDtPadTypeMio,
466 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob7,
468 },
469 [kDtPadIob8] = {
470 .type = kDtPadTypeMio,
471 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob8,
473 },
474 [kDtPadIob9] = {
475 .type = kDtPadTypeMio,
476 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob9,
478 },
479 [kDtPadIob10] = {
480 .type = kDtPadTypeMio,
481 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob10,
483 },
484 [kDtPadIob11] = {
485 .type = kDtPadTypeMio,
486 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob11,
488 },
489 [kDtPadIob12] = {
490 .type = kDtPadTypeMio,
491 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob12,
493 },
494 [kDtPadIoc0] = {
495 .type = kDtPadTypeMio,
496 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc0,
498 },
499 [kDtPadIoc1] = {
500 .type = kDtPadTypeMio,
501 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc1,
503 },
504 [kDtPadIoc2] = {
505 .type = kDtPadTypeMio,
506 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc2,
508 },
509 [kDtPadIoc3] = {
510 .type = kDtPadTypeMio,
511 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc3,
513 },
514 [kDtPadIoc4] = {
515 .type = kDtPadTypeMio,
516 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc4,
518 },
519 [kDtPadIoc5] = {
520 .type = kDtPadTypeMio,
521 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc5,
523 },
524 [kDtPadIoc6] = {
525 .type = kDtPadTypeMio,
526 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc6,
528 },
529 [kDtPadIoc7] = {
530 .type = kDtPadTypeMio,
531 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc7,
533 },
534 [kDtPadIoc8] = {
535 .type = kDtPadTypeMio,
536 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc8,
538 },
539 [kDtPadIoc9] = {
540 .type = kDtPadTypeMio,
541 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc9,
543 },
544 [kDtPadIoc10] = {
545 .type = kDtPadTypeMio,
546 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc10,
548 },
549 [kDtPadIoc11] = {
550 .type = kDtPadTypeMio,
551 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc11,
553 },
554 [kDtPadIoc12] = {
555 .type = kDtPadTypeMio,
556 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc12,
558 },
559 [kDtPadIor0] = {
560 .type = kDtPadTypeMio,
561 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor0,
563 },
564 [kDtPadIor1] = {
565 .type = kDtPadTypeMio,
566 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor1,
568 },
569 [kDtPadIor2] = {
570 .type = kDtPadTypeMio,
571 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor2,
573 },
574 [kDtPadIor3] = {
575 .type = kDtPadTypeMio,
576 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor3,
578 },
579 [kDtPadIor4] = {
580 .type = kDtPadTypeMio,
581 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor4,
583 },
584 [kDtPadIor5] = {
585 .type = kDtPadTypeMio,
586 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor5,
588 },
589 [kDtPadIor6] = {
590 .type = kDtPadTypeMio,
591 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor6,
593 },
594 [kDtPadIor7] = {
595 .type = kDtPadTypeMio,
596 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor7,
598 },
599 [kDtPadIor10] = {
600 .type = kDtPadTypeMio,
601 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor10,
603 },
604 [kDtPadIor11] = {
605 .type = kDtPadTypeMio,
606 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor11,
608 },
609 [kDtPadIor12] = {
610 .type = kDtPadTypeMio,
611 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor12,
613 },
614 [kDtPadIor13] = {
615 .type = kDtPadTypeMio,
616 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor13,
618 },
619 [kDtPadUsbdevUsbDp] = {
620 .type = kDtPadTypeDio,
621 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDp,
622 .insel = 0,
623 },
624 [kDtPadUsbdevUsbDn] = {
625 .type = kDtPadTypeDio,
626 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDn,
627 .insel = 0,
628 },
630 .type = kDtPadTypeDio,
631 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd0,
632 .insel = 0,
633 },
635 .type = kDtPadTypeDio,
636 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd1,
637 .insel = 0,
638 },
640 .type = kDtPadTypeDio,
641 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd2,
642 .insel = 0,
643 },
645 .type = kDtPadTypeDio,
646 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd3,
647 .insel = 0,
648 },
650 .type = kDtPadTypeDio,
651 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd0,
652 .insel = 0,
653 },
655 .type = kDtPadTypeDio,
656 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd1,
657 .insel = 0,
658 },
660 .type = kDtPadTypeDio,
661 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd2,
662 .insel = 0,
663 },
665 .type = kDtPadTypeDio,
666 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd3,
667 .insel = 0,
668 },
670 .type = kDtPadTypeDio,
671 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonEcRstL,
672 .insel = 0,
673 },
675 .type = kDtPadTypeDio,
676 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonFlashWpL,
677 .insel = 0,
678 },
680 .type = kDtPadTypeDio,
681 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSck,
682 .insel = 0,
683 },
685 .type = kDtPadTypeDio,
686 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceCsb,
687 .insel = 0,
688 },
690 .type = kDtPadTypeDio,
691 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sck,
692 .insel = 0,
693 },
695 .type = kDtPadTypeDio,
696 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Csb,
697 .insel = 0,
698 },
699};
700
701
702
703#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (int)(pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
704
706 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
707}
708
709dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
710 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
711}
712
713dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
714 // Same index as MIO_OUT.
715 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
716}
717
718dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
719 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
720}
721
722dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
723 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
724}
725
726/* Pin that is constantly tied to high-Z (input only) */
727const dt_periph_io_t kDtPeriphIoConstantHighZ = {
728 .__internal = {
729 .type = kDtPeriphIoTypeMio,
730 .periph_input_or_direct_pad = 0,
731 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
732 }
733};
734
735/* Pin that is constantly tied to zero (input/output) */
736const dt_periph_io_t kDtPeriphIoConstantZero = {
737 .__internal = {
738 .type = kDtPeriphIoTypeMio,
739 .periph_input_or_direct_pad = 0,
740 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
741 }
742};
743
744/* Pin that is constantly tied to one (input/output) */
745const dt_periph_io_t kDtPeriphIoConstantOne = {
746 .__internal = {
747 .type = kDtPeriphIoTypeMio,
748 .periph_input_or_direct_pad = 0,
749 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
750 }
751};