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] = {
285};
286
288 if (alert <= kTopEarlgreyAlertIdLast) {
289 return instance_from_alert[alert];
290 }
292}
293
337};
338
340 if ((int)dev < kDtInstanceIdCount) {
341 return device_type[dev];
342 }
344}
345
346/**
347 * Pad description.
348 *
349 * A `dt_pad_t` represents a chip's physical pad.
350 */
351typedef struct dt_pad_desc {
352 dt_pad_type_t type; /**< Pad type */
353 /**
354 * For `kDtPadTypeMio` pads: MIO out number. This is the index of the MIO_OUTSEL register
355 * that controls this pad (or the output part of this pad).
356 *
357 * For `kDtPadTypeDio`: DIO pad number. This is the index of the various DIO_PAD_* registers
358 * that control this pad.
359 */
361 /**
362 * For `kDtPadTypeMio` pads: MIO pad number. This is the value to put in the MIO_PERIPH_INSEL
363 * registers to connect a peripheral to this pad.
364 */
365 uint16_t insel;
367
368
369
370// Pad descriptions.
371static const dt_pad_desc_t dt_pad[kDtPadCount] = {
373 .type = kDtPadTypeMio,
374 .mio_out_or_direct_pad = 0,
376 },
378 .type = kDtPadTypeMio,
379 .mio_out_or_direct_pad = 0,
381 },
382 [kDtPadIoa0] = {
383 .type = kDtPadTypeMio,
384 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa0,
386 },
387 [kDtPadIoa1] = {
388 .type = kDtPadTypeMio,
389 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa1,
391 },
392 [kDtPadIoa2] = {
393 .type = kDtPadTypeMio,
394 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa2,
396 },
397 [kDtPadIoa3] = {
398 .type = kDtPadTypeMio,
399 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa3,
401 },
402 [kDtPadIoa4] = {
403 .type = kDtPadTypeMio,
404 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa4,
406 },
407 [kDtPadIoa5] = {
408 .type = kDtPadTypeMio,
409 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa5,
411 },
412 [kDtPadIoa6] = {
413 .type = kDtPadTypeMio,
414 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa6,
416 },
417 [kDtPadIoa7] = {
418 .type = kDtPadTypeMio,
419 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa7,
421 },
422 [kDtPadIoa8] = {
423 .type = kDtPadTypeMio,
424 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoa8,
426 },
427 [kDtPadIob0] = {
428 .type = kDtPadTypeMio,
429 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob0,
431 },
432 [kDtPadIob1] = {
433 .type = kDtPadTypeMio,
434 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob1,
436 },
437 [kDtPadIob2] = {
438 .type = kDtPadTypeMio,
439 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob2,
441 },
442 [kDtPadIob3] = {
443 .type = kDtPadTypeMio,
444 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob3,
446 },
447 [kDtPadIob4] = {
448 .type = kDtPadTypeMio,
449 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob4,
451 },
452 [kDtPadIob5] = {
453 .type = kDtPadTypeMio,
454 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob5,
456 },
457 [kDtPadIob6] = {
458 .type = kDtPadTypeMio,
459 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob6,
461 },
462 [kDtPadIob7] = {
463 .type = kDtPadTypeMio,
464 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob7,
466 },
467 [kDtPadIob8] = {
468 .type = kDtPadTypeMio,
469 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob8,
471 },
472 [kDtPadIob9] = {
473 .type = kDtPadTypeMio,
474 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob9,
476 },
477 [kDtPadIob10] = {
478 .type = kDtPadTypeMio,
479 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob10,
481 },
482 [kDtPadIob11] = {
483 .type = kDtPadTypeMio,
484 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob11,
486 },
487 [kDtPadIob12] = {
488 .type = kDtPadTypeMio,
489 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIob12,
491 },
492 [kDtPadIoc0] = {
493 .type = kDtPadTypeMio,
494 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc0,
496 },
497 [kDtPadIoc1] = {
498 .type = kDtPadTypeMio,
499 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc1,
501 },
502 [kDtPadIoc2] = {
503 .type = kDtPadTypeMio,
504 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc2,
506 },
507 [kDtPadIoc3] = {
508 .type = kDtPadTypeMio,
509 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc3,
511 },
512 [kDtPadIoc4] = {
513 .type = kDtPadTypeMio,
514 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc4,
516 },
517 [kDtPadIoc5] = {
518 .type = kDtPadTypeMio,
519 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc5,
521 },
522 [kDtPadIoc6] = {
523 .type = kDtPadTypeMio,
524 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc6,
526 },
527 [kDtPadIoc7] = {
528 .type = kDtPadTypeMio,
529 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc7,
531 },
532 [kDtPadIoc8] = {
533 .type = kDtPadTypeMio,
534 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc8,
536 },
537 [kDtPadIoc9] = {
538 .type = kDtPadTypeMio,
539 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc9,
541 },
542 [kDtPadIoc10] = {
543 .type = kDtPadTypeMio,
544 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc10,
546 },
547 [kDtPadIoc11] = {
548 .type = kDtPadTypeMio,
549 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc11,
551 },
552 [kDtPadIoc12] = {
553 .type = kDtPadTypeMio,
554 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIoc12,
556 },
557 [kDtPadIor0] = {
558 .type = kDtPadTypeMio,
559 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor0,
561 },
562 [kDtPadIor1] = {
563 .type = kDtPadTypeMio,
564 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor1,
566 },
567 [kDtPadIor2] = {
568 .type = kDtPadTypeMio,
569 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor2,
571 },
572 [kDtPadIor3] = {
573 .type = kDtPadTypeMio,
574 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor3,
576 },
577 [kDtPadIor4] = {
578 .type = kDtPadTypeMio,
579 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor4,
581 },
582 [kDtPadIor5] = {
583 .type = kDtPadTypeMio,
584 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor5,
586 },
587 [kDtPadIor6] = {
588 .type = kDtPadTypeMio,
589 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor6,
591 },
592 [kDtPadIor7] = {
593 .type = kDtPadTypeMio,
594 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor7,
596 },
597 [kDtPadIor10] = {
598 .type = kDtPadTypeMio,
599 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor10,
601 },
602 [kDtPadIor11] = {
603 .type = kDtPadTypeMio,
604 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor11,
606 },
607 [kDtPadIor12] = {
608 .type = kDtPadTypeMio,
609 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor12,
611 },
612 [kDtPadIor13] = {
613 .type = kDtPadTypeMio,
614 .mio_out_or_direct_pad = kTopEarlgreyPinmuxMioOutIor13,
616 },
617 [kDtPadUsbdevUsbDp] = {
618 .type = kDtPadTypeDio,
619 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDp,
620 .insel = 0,
621 },
622 [kDtPadUsbdevUsbDn] = {
623 .type = kDtPadTypeDio,
624 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsUsbdevUsbDn,
625 .insel = 0,
626 },
628 .type = kDtPadTypeDio,
629 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd0,
630 .insel = 0,
631 },
633 .type = kDtPadTypeDio,
634 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd1,
635 .insel = 0,
636 },
638 .type = kDtPadTypeDio,
639 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd2,
640 .insel = 0,
641 },
643 .type = kDtPadTypeDio,
644 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sd3,
645 .insel = 0,
646 },
648 .type = kDtPadTypeDio,
649 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd0,
650 .insel = 0,
651 },
653 .type = kDtPadTypeDio,
654 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd1,
655 .insel = 0,
656 },
658 .type = kDtPadTypeDio,
659 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd2,
660 .insel = 0,
661 },
663 .type = kDtPadTypeDio,
664 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSd3,
665 .insel = 0,
666 },
668 .type = kDtPadTypeDio,
669 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonEcRstL,
670 .insel = 0,
671 },
673 .type = kDtPadTypeDio,
674 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSysrstCtrlAonFlashWpL,
675 .insel = 0,
676 },
678 .type = kDtPadTypeDio,
679 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceSck,
680 .insel = 0,
681 },
683 .type = kDtPadTypeDio,
684 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiDeviceCsb,
685 .insel = 0,
686 },
688 .type = kDtPadTypeDio,
689 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Sck,
690 .insel = 0,
691 },
693 .type = kDtPadTypeDio,
694 .mio_out_or_direct_pad = kTopEarlgreyDirectPadsSpiHost0Csb,
695 .insel = 0,
696 },
697};
698
699
700
701#define TRY_GET_PAD(pad, default) ({ if ((pad) < (dt_pad_t)0 || (int)(pad) >= kDtPadCount) return (default); &dt_pad[pad]; })
702
704 return TRY_GET_PAD(pad, kDtPadTypeUnspecified)->type;
705}
706
707dt_pinmux_mio_out_t dt_pad_mio_out(dt_pad_t pad) {
708 return (dt_pinmux_mio_out_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
709}
710
711dt_pinmux_muxed_pad_t dt_pad_mio_pad_index(dt_pad_t pad) {
712 // Same index as MIO_OUT.
713 return (dt_pinmux_muxed_pad_t)dt_pad_mio_out(pad);
714}
715
716dt_pinmux_insel_t dt_pad_mio_insel(dt_pad_t pad) {
717 return (dt_pinmux_insel_t)TRY_GET_PAD(pad, 0)->insel;
718}
719
720dt_pinmux_direct_pad_t dt_pad_dio_pad_index(dt_pad_t pad) {
721 return (dt_pinmux_direct_pad_t)TRY_GET_PAD(pad, 0)->mio_out_or_direct_pad;
722}
723
724/* Pin that is constantly tied to high-Z (input only) */
725const dt_periph_io_t kDtPeriphIoConstantHighZ = {
726 .__internal = {
727 .type = kDtPeriphIoTypeMio,
728 .periph_input_or_direct_pad = 0,
729 .outsel_or_dt_pad = kDtPinmuxOutselConstantHighZ,
730 }
731};
732
733/* Pin that is constantly tied to zero (input/output) */
734const dt_periph_io_t kDtPeriphIoConstantZero = {
735 .__internal = {
736 .type = kDtPeriphIoTypeMio,
737 .periph_input_or_direct_pad = 0,
738 .outsel_or_dt_pad = kDtPinmuxOutselConstantZero,
739 }
740};
741
742/* Pin that is constantly tied to one (input/output) */
743const dt_periph_io_t kDtPeriphIoConstantOne = {
744 .__internal = {
745 .type = kDtPeriphIoTypeMio,
746 .periph_input_or_direct_pad = 0,
747 .outsel_or_dt_pad = kDtPinmuxOutselConstantOne,
748 }
749};