Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

firmware: tegra: Update BPMP ABI

Update the BPMP ABI to align with the the latest version.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>

authored by

Jon Hunter and committed by
Thierry Reding
4e871899 5e37b9c1

+460 -288
+460 -288
include/soc/tegra/bpmp-abi.h
··· 3 3 * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved. 4 4 */ 5 5 6 - #ifndef _ABI_BPMP_ABI_H_ 7 - #define _ABI_BPMP_ABI_H_ 6 + #ifndef ABI_BPMP_ABI_H 7 + #define ABI_BPMP_ABI_H 8 8 9 - #ifdef LK 9 + #if defined(LK) || defined(BPMP_ABI_HAVE_STDC) 10 + #include <stddef.h> 10 11 #include <stdint.h> 11 12 #endif 12 13 13 - #ifndef __ABI_PACKED 14 - #define __ABI_PACKED __attribute__((packed)) 14 + #ifndef BPMP_ABI_PACKED 15 + #ifdef __ABI_PACKED 16 + #define BPMP_ABI_PACKED __ABI_PACKED 17 + #else 18 + #define BPMP_ABI_PACKED __attribute__((packed)) 19 + #endif 15 20 #endif 16 21 17 22 #ifdef NO_GCC_EXTENSIONS 18 - #define EMPTY char empty; 19 - #define EMPTY_ARRAY 1 23 + #define BPMP_ABI_EMPTY char empty; 24 + #define BPMP_ABI_EMPTY_ARRAY 1 20 25 #else 21 - #define EMPTY 22 - #define EMPTY_ARRAY 0 26 + #define BPMP_ABI_EMPTY 27 + #define BPMP_ABI_EMPTY_ARRAY 0 23 28 #endif 24 29 25 - #ifndef __UNION_ANON 26 - #define __UNION_ANON 30 + #ifndef BPMP_UNION_ANON 31 + #ifdef __UNION_ANON 32 + #define BPMP_UNION_ANON __UNION_ANON 33 + #else 34 + #define BPMP_UNION_ANON 27 35 #endif 36 + #endif 37 + 28 38 /** 29 39 * @file 30 40 */ ··· 83 73 struct mrq_request { 84 74 /** @brief MRQ number of the request */ 85 75 uint32_t mrq; 76 + 86 77 /** 87 78 * @brief Flags providing follow up directions to the receiver 88 79 * ··· 93 82 * | 0 | should be 1 | 94 83 */ 95 84 uint32_t flags; 96 - } __ABI_PACKED; 85 + } BPMP_ABI_PACKED; 97 86 98 87 /** 99 88 * @ingroup MRQ_Format ··· 109 98 int32_t err; 110 99 /** @brief Reserved for future use */ 111 100 uint32_t flags; 112 - } __ABI_PACKED; 101 + } BPMP_ABI_PACKED; 113 102 114 103 /** 115 104 * @ingroup MRQ_Format 116 105 * Minimum needed size for an IPC message buffer 117 106 */ 118 - #define MSG_MIN_SZ 128 107 + #define MSG_MIN_SZ 128U 119 108 /** 120 109 * @ingroup MRQ_Format 121 110 * Minimum size guaranteed for data in an IPC message buffer 122 111 */ 123 - #define MSG_DATA_MIN_SZ 120 112 + #define MSG_DATA_MIN_SZ 120U 124 113 125 114 /** 126 115 * @ingroup MRQ_Codes ··· 129 118 * @{ 130 119 */ 131 120 132 - #define MRQ_PING 0 133 - #define MRQ_QUERY_TAG 1 134 - #define MRQ_MODULE_LOAD 4 135 - #define MRQ_MODULE_UNLOAD 5 136 - #define MRQ_TRACE_MODIFY 7 137 - #define MRQ_WRITE_TRACE 8 138 - #define MRQ_THREADED_PING 9 139 - #define MRQ_MODULE_MAIL 11 140 - #define MRQ_DEBUGFS 19 141 - #define MRQ_RESET 20 142 - #define MRQ_I2C 21 143 - #define MRQ_CLK 22 144 - #define MRQ_QUERY_ABI 23 145 - #define MRQ_PG_READ_STATE 25 146 - #define MRQ_PG_UPDATE_STATE 26 147 - #define MRQ_THERMAL 27 148 - #define MRQ_CPU_VHINT 28 149 - #define MRQ_ABI_RATCHET 29 150 - #define MRQ_EMC_DVFS_LATENCY 31 151 - #define MRQ_TRACE_ITER 64 152 - #define MRQ_RINGBUF_CONSOLE 65 153 - #define MRQ_PG 66 154 - #define MRQ_CPU_NDIV_LIMITS 67 155 - #define MRQ_STRAP 68 156 - #define MRQ_UPHY 69 157 - #define MRQ_CPU_AUTO_CC3 70 158 - #define MRQ_QUERY_FW_TAG 71 159 - #define MRQ_FMON 72 160 - #define MRQ_EC 73 161 - #define MRQ_FBVOLT_STATUS 74 162 - #define MRQ_DEBUG 75 121 + #define MRQ_PING 0U 122 + #define MRQ_QUERY_TAG 1U 123 + #define MRQ_MODULE_LOAD 4U 124 + #define MRQ_MODULE_UNLOAD 5U 125 + #define MRQ_TRACE_MODIFY 7U 126 + #define MRQ_WRITE_TRACE 8U 127 + #define MRQ_THREADED_PING 9U 128 + #define MRQ_MODULE_MAIL 11U 129 + #define MRQ_DEBUGFS 19U 130 + #define MRQ_RESET 20U 131 + #define MRQ_I2C 21U 132 + #define MRQ_CLK 22U 133 + #define MRQ_QUERY_ABI 23U 134 + #define MRQ_PG_READ_STATE 25U 135 + #define MRQ_PG_UPDATE_STATE 26U 136 + #define MRQ_THERMAL 27U 137 + #define MRQ_CPU_VHINT 28U 138 + #define MRQ_ABI_RATCHET 29U 139 + #define MRQ_EMC_DVFS_LATENCY 31U 140 + #define MRQ_TRACE_ITER 64U 141 + #define MRQ_RINGBUF_CONSOLE 65U 142 + #define MRQ_PG 66U 143 + #define MRQ_CPU_NDIV_LIMITS 67U 144 + #define MRQ_STRAP 68U 145 + #define MRQ_UPHY 69U 146 + #define MRQ_CPU_AUTO_CC3 70U 147 + #define MRQ_QUERY_FW_TAG 71U 148 + #define MRQ_FMON 72U 149 + #define MRQ_EC 73U 150 + #define MRQ_DEBUG 75U 163 151 164 152 /** @} */ 165 153 ··· 167 157 * @brief Maximum MRQ code to be sent by CPU software to 168 158 * BPMP. Subject to change in future 169 159 */ 170 - #define MAX_CPU_MRQ_ID 75 160 + #define MAX_CPU_MRQ_ID 75U 171 161 172 162 /** 173 163 * @addtogroup MRQ_Payloads ··· 234 224 struct mrq_ping_request { 235 225 /** @brief Arbitrarily chosen value */ 236 226 uint32_t challenge; 237 - } __ABI_PACKED; 227 + } BPMP_ABI_PACKED; 238 228 239 229 /** 240 230 * @ingroup Ping ··· 248 238 struct mrq_ping_response { 249 239 /** @brief Response to the MRQ_PING challege */ 250 240 uint32_t reply; 251 - } __ABI_PACKED; 241 + } BPMP_ABI_PACKED; 252 242 253 243 /** 254 244 * @ingroup MRQ_Codes ··· 275 265 struct mrq_query_tag_request { 276 266 /** @brief Base address to store the firmware tag */ 277 267 uint32_t addr; 278 - } __ABI_PACKED; 268 + } BPMP_ABI_PACKED; 279 269 280 270 281 271 /** ··· 302 292 struct mrq_query_fw_tag_response { 303 293 /** @brief Array to store tag information */ 304 294 uint8_t tag[32]; 305 - } __ABI_PACKED; 295 + } BPMP_ABI_PACKED; 306 296 307 297 /** 308 298 * @ingroup MRQ_Codes 309 299 * @def MRQ_MODULE_LOAD 310 300 * @brief Dynamically load a BPMP code module 311 301 * 312 - * * Platforms: T210, T214, T186 313 - * @cond (bpmp_t210 || bpmp_t214 || bpmp_t186) 302 + * * Platforms: T210, T210B01, T186 303 + * @cond (bpmp_t210 || bpmp_t210b01 || bpmp_t186) 314 304 * * Initiators: CCPLEX 315 305 * * Targets: BPMP 316 306 * * Request Payload: @ref mrq_module_load_request ··· 338 328 * 339 329 */ 340 330 struct mrq_module_load_request { 341 - /** @brief Base address of the code to load. Treated as (void *) */ 342 - uint32_t phys_addr; /* (void *) */ 331 + /** @brief Base address of the code to load */ 332 + uint32_t phys_addr; 343 333 /** @brief Size in bytes of code to load */ 344 334 uint32_t size; 345 - } __ABI_PACKED; 335 + } BPMP_ABI_PACKED; 346 336 347 337 /** 348 338 * @ingroup Module ··· 353 343 struct mrq_module_load_response { 354 344 /** @brief Handle to the loaded module */ 355 345 uint32_t base; 356 - } __ABI_PACKED; 346 + } BPMP_ABI_PACKED; 357 347 /** @endcond*/ 358 348 359 349 /** ··· 361 351 * @def MRQ_MODULE_UNLOAD 362 352 * @brief Unload a previously loaded code module 363 353 * 364 - * * Platforms: T210, T214, T186 365 - * @cond (bpmp_t210 || bpmp_t214 || bpmp_t186) 354 + * * Platforms: T210, T210B01, T186 355 + * @cond (bpmp_t210 || bpmp_t210b01 || bpmp_t186) 366 356 * * Initiators: CCPLEX 367 357 * * Targets: BPMP 368 358 * * Request Payload: @ref mrq_module_unload_request ··· 381 371 struct mrq_module_unload_request { 382 372 /** @brief Handle of the module to unload */ 383 373 uint32_t base; 384 - } __ABI_PACKED; 374 + } BPMP_ABI_PACKED; 385 375 /** @endcond*/ 386 376 387 377 /** 388 378 * @ingroup MRQ_Codes 389 379 * @def MRQ_TRACE_MODIFY 390 380 * @brief Modify the set of enabled trace events 381 + * 382 + * @deprecated 391 383 * 392 384 * * Platforms: All 393 385 * * Initiators: CCPLEX ··· 413 401 uint32_t clr; 414 402 /** @brief Bit mask of trace events to enable */ 415 403 uint32_t set; 416 - } __ABI_PACKED; 404 + } BPMP_ABI_PACKED; 417 405 418 406 /** 419 407 * @ingroup Trace ··· 427 415 struct mrq_trace_modify_response { 428 416 /** @brief Bit mask of trace event enable states */ 429 417 uint32_t mask; 430 - } __ABI_PACKED; 418 + } BPMP_ABI_PACKED; 431 419 432 420 /** 433 421 * @ingroup MRQ_Codes 434 422 * @def MRQ_WRITE_TRACE 435 423 * @brief Write trace data to a buffer 424 + * 425 + * @deprecated 436 426 * 437 427 * * Platforms: All 438 428 * * Initiators: CCPLEX ··· 469 455 uint32_t area; 470 456 /** @brief Size in bytes of the output buffer */ 471 457 uint32_t size; 472 - } __ABI_PACKED; 458 + } BPMP_ABI_PACKED; 473 459 474 460 /** 475 461 * @ingroup Trace ··· 486 472 * drained to the outputbuffer. Value is 0 otherwise. 487 473 */ 488 474 uint32_t eof; 489 - } __ABI_PACKED; 475 + } BPMP_ABI_PACKED; 490 476 491 477 /** @private */ 492 478 struct mrq_threaded_ping_request { 493 479 uint32_t challenge; 494 - } __ABI_PACKED; 480 + } BPMP_ABI_PACKED; 495 481 496 482 /** @private */ 497 483 struct mrq_threaded_ping_response { 498 484 uint32_t reply; 499 - } __ABI_PACKED; 485 + } BPMP_ABI_PACKED; 500 486 501 487 /** 502 488 * @ingroup MRQ_Codes 503 489 * @def MRQ_MODULE_MAIL 504 490 * @brief Send a message to a loadable module 505 491 * 506 - * * Platforms: T210, T214, T186 507 - * @cond (bpmp_t210 || bpmp_t214 || bpmp_t186) 492 + * * Platforms: T210, T210B01, T186 493 + * @cond (bpmp_t210 || bpmp_t210b01 || bpmp_t186) 508 494 * * Initiators: Any 509 495 * * Targets: BPMP 510 496 * * Request Payload: @ref mrq_module_mail_request ··· 525 511 * The length of data[ ] is unknown to the BPMP core firmware 526 512 * but it is limited to the size of an IPC message. 527 513 */ 528 - uint8_t data[EMPTY_ARRAY]; 529 - } __ABI_PACKED; 514 + uint8_t data[BPMP_ABI_EMPTY_ARRAY]; 515 + } BPMP_ABI_PACKED; 530 516 531 517 /** 532 518 * @ingroup Module ··· 538 524 * The length of data[ ] is unknown to the BPMP core firmware 539 525 * but it is limited to the size of an IPC message. 540 526 */ 541 - uint8_t data[EMPTY_ARRAY]; 542 - } __ABI_PACKED; 527 + uint8_t data[BPMP_ABI_EMPTY_ARRAY]; 528 + } BPMP_ABI_PACKED; 543 529 /** @endcond */ 544 530 545 531 /** ··· 604 590 uint32_t dataaddr; 605 591 /** @brief Length in bytes of data buffer */ 606 592 uint32_t datalen; 607 - } __ABI_PACKED; 593 + } BPMP_ABI_PACKED; 608 594 609 595 /** 610 596 * @ingroup Debugfs ··· 615 601 uint32_t dataaddr; 616 602 /** @brief Length in bytes of data buffer */ 617 603 uint32_t datalen; 618 - } __ABI_PACKED; 604 + } BPMP_ABI_PACKED; 619 605 620 606 /** 621 607 * @ingroup Debugfs ··· 626 612 uint32_t reserved; 627 613 /** @brief Number of bytes read from or written to data buffer */ 628 614 uint32_t nbytes; 629 - } __ABI_PACKED; 615 + } BPMP_ABI_PACKED; 630 616 631 617 /** 632 618 * @ingroup Debugfs ··· 637 623 uint32_t reserved; 638 624 /** @brief Number of bytes read from or written to data buffer */ 639 625 uint32_t nbytes; 640 - } __ABI_PACKED; 626 + } BPMP_ABI_PACKED; 641 627 642 628 /** 643 629 * @ingroup Debugfs ··· 660 646 union { 661 647 struct cmd_debugfs_fileop_request fop; 662 648 struct cmd_debugfs_dumpdir_request dumpdir; 663 - } __UNION_ANON; 664 - } __ABI_PACKED; 649 + } BPMP_UNION_ANON; 650 + } BPMP_ABI_PACKED; 665 651 666 652 /** 667 653 * @ingroup Debugfs ··· 676 662 struct cmd_debugfs_fileop_response fop; 677 663 /** @brief Response data for CMD_DEBUGFS_DUMPDIR command */ 678 664 struct cmd_debugfs_dumpdir_response dumpdir; 679 - } __UNION_ANON; 680 - } __ABI_PACKED; 665 + } BPMP_UNION_ANON; 666 + } BPMP_ABI_PACKED; 681 667 682 668 /** 683 669 * @addtogroup Debugfs ··· 749 735 * length @ref DEBUG_FNAME_MAX_SZ 750 736 */ 751 737 char name[DEBUG_FNAME_MAX_SZ]; 752 - } __ABI_PACKED; 738 + } BPMP_ABI_PACKED; 753 739 754 740 /** 755 741 * @ingroup Debugfs ··· 762 748 * Maximum allowed length for WRITE command 763 749 */ 764 750 uint32_t datalen; 765 - } __ABI_PACKED; 751 + } BPMP_ABI_PACKED; 766 752 767 753 /** 768 754 * @ingroup Debugfs ··· 773 759 * to CMD_DEBUG_OPEN_RO request 774 760 */ 775 761 uint32_t fd; 776 - } __ABI_PACKED; 762 + } BPMP_ABI_PACKED; 777 763 778 764 /** 779 765 * @ingroup Debugfs ··· 792 778 uint32_t readlen; 793 779 /** @brief File data from seek position */ 794 780 char data[DEBUG_READ_MAX_SZ]; 795 - } __ABI_PACKED; 781 + } BPMP_ABI_PACKED; 796 782 797 783 /** 798 784 * @ingroup Debugfs ··· 815 801 uint32_t datalen; 816 802 /** @brief Data to be written */ 817 803 char data[DEBUG_WRITE_MAX_SZ]; 818 - } __ABI_PACKED; 804 + } BPMP_ABI_PACKED; 819 805 820 806 /** 821 807 * @ingroup Debugfs ··· 826 812 * to CMD_DEBUG_OPEN_RO request 827 813 */ 828 814 uint32_t fd; 829 - } __ABI_PACKED; 815 + } BPMP_ABI_PACKED; 830 816 831 817 /** 832 818 * @ingroup Debugfs ··· 857 843 struct cmd_debug_fwrite_request fwr; 858 844 /** @brief Request payload for CMD_DEBUG_CLOSE command */ 859 845 struct cmd_debug_fclose_request fcl; 860 - } __UNION_ANON; 861 - } __ABI_PACKED; 846 + } BPMP_UNION_ANON; 847 + } BPMP_ABI_PACKED; 862 848 863 849 /** 864 850 * @ingroup Debugfs ··· 869 855 struct cmd_debug_fopen_response fop; 870 856 /** @brief Response data for CMD_DEBUG_READ command */ 871 857 struct cmd_debug_fread_response frd; 872 - } __UNION_ANON; 873 - } __ABI_PACKED; 858 + } BPMP_UNION_ANON; 859 + } BPMP_ABI_PACKED; 874 860 875 861 /** 876 862 * @ingroup MRQ_Codes ··· 888 874 */ 889 875 890 876 enum mrq_reset_commands { 891 - /** @brief Assert module reset */ 877 + /** 878 + * @brief Assert module reset 879 + * 880 + * mrq_response::err is 0 if the operation was successful, or @n 881 + * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 882 + * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 883 + * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 884 + */ 892 885 CMD_RESET_ASSERT = 1, 893 - /** @brief Deassert module reset */ 886 + /** 887 + * @brief Deassert module reset 888 + * 889 + * mrq_response::err is 0 if the operation was successful, or @n 890 + * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 891 + * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 892 + * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 893 + */ 894 894 CMD_RESET_DEASSERT = 2, 895 - /** @brief Assert and deassert the module reset */ 895 + /** 896 + * @brief Assert and deassert the module reset 897 + * 898 + * mrq_response::err is 0 if the operation was successful, or @n 899 + * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 900 + * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 901 + * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 902 + */ 896 903 CMD_RESET_MODULE = 3, 897 - /** @brief Get the highest reset ID */ 904 + /** 905 + * @brief Get the highest reset ID 906 + * 907 + * mrq_response::err is 0 if the operation was successful, or @n 908 + * -#BPMP_ENODEV if no reset domains are supported (number of IDs is 0) 909 + */ 898 910 CMD_RESET_GET_MAX_ID = 4, 911 + 899 912 /** @brief Not part of ABI and subject to change */ 900 913 CMD_RESET_MAX, 901 914 }; ··· 938 897 uint32_t cmd; 939 898 /** @brief Id of the reset to affected */ 940 899 uint32_t reset_id; 941 - } __ABI_PACKED; 900 + } BPMP_ABI_PACKED; 942 901 943 902 /** 944 903 * @brief Response for MRQ_RESET sub-command CMD_RESET_GET_MAX_ID. When ··· 948 907 struct cmd_reset_get_max_id_response { 949 908 /** @brief Max reset id */ 950 909 uint32_t max_id; 951 - } __ABI_PACKED; 910 + } BPMP_ABI_PACKED; 952 911 953 912 /** 954 913 * @brief Response with MRQ_RESET ··· 967 926 struct mrq_reset_response { 968 927 union { 969 928 struct cmd_reset_get_max_id_response reset_get_max_id; 970 - } __UNION_ANON; 971 - } __ABI_PACKED; 929 + } BPMP_UNION_ANON; 930 + } BPMP_ABI_PACKED; 972 931 973 932 /** @} */ 974 933 ··· 986 945 * @addtogroup I2C 987 946 * @{ 988 947 */ 989 - #define TEGRA_I2C_IPC_MAX_IN_BUF_SIZE (MSG_DATA_MIN_SZ - 12) 990 - #define TEGRA_I2C_IPC_MAX_OUT_BUF_SIZE (MSG_DATA_MIN_SZ - 4) 948 + #define TEGRA_I2C_IPC_MAX_IN_BUF_SIZE (MSG_DATA_MIN_SZ - 12U) 949 + #define TEGRA_I2C_IPC_MAX_OUT_BUF_SIZE (MSG_DATA_MIN_SZ - 4U) 991 950 992 - #define SERIALI2C_TEN 0x0010 993 - #define SERIALI2C_RD 0x0001 994 - #define SERIALI2C_STOP 0x8000 995 - #define SERIALI2C_NOSTART 0x4000 996 - #define SERIALI2C_REV_DIR_ADDR 0x2000 997 - #define SERIALI2C_IGNORE_NAK 0x1000 998 - #define SERIALI2C_NO_RD_ACK 0x0800 999 - #define SERIALI2C_RECV_LEN 0x0400 951 + #define SERIALI2C_TEN 0x0010U 952 + #define SERIALI2C_RD 0x0001U 953 + #define SERIALI2C_STOP 0x8000U 954 + #define SERIALI2C_NOSTART 0x4000U 955 + #define SERIALI2C_REV_DIR_ADDR 0x2000U 956 + #define SERIALI2C_IGNORE_NAK 0x1000U 957 + #define SERIALI2C_NO_RD_ACK 0x0800U 958 + #define SERIALI2C_RECV_LEN 0x0400U 1000 959 1001 960 enum { 1002 961 CMD_I2C_XFER = 1 ··· 1026 985 uint16_t len; 1027 986 /** @brief For write transactions only, #len bytes of data */ 1028 987 uint8_t data[]; 1029 - } __ABI_PACKED; 988 + } BPMP_ABI_PACKED; 1030 989 1031 990 /** 1032 991 * @brief Trigger one or more i2c transactions ··· 1040 999 1041 1000 /** @brief Serialized packed instances of @ref serial_i2c_request*/ 1042 1001 uint8_t data_buf[TEGRA_I2C_IPC_MAX_IN_BUF_SIZE]; 1043 - } __ABI_PACKED; 1002 + } BPMP_ABI_PACKED; 1044 1003 1045 1004 /** 1046 1005 * @brief Container for data read from the i2c bus ··· 1054 1013 uint32_t data_size; 1055 1014 /** @brief I2c read data */ 1056 1015 uint8_t data_buf[TEGRA_I2C_IPC_MAX_OUT_BUF_SIZE]; 1057 - } __ABI_PACKED; 1016 + } BPMP_ABI_PACKED; 1058 1017 1059 1018 /** 1060 1019 * @brief Request with #MRQ_I2C ··· 1064 1023 uint32_t cmd; 1065 1024 /** @brief Parameters of the transfer request */ 1066 1025 struct cmd_i2c_xfer_request xfer; 1067 - } __ABI_PACKED; 1026 + } BPMP_ABI_PACKED; 1068 1027 1069 1028 /** 1070 1029 * @brief Response to #MRQ_I2C 1030 + * 1031 + * mrq_response:err is 1032 + * 0: Success 1033 + * -#BPMP_EBADCMD: if mrq_i2c_request::cmd is other than 1 1034 + * -#BPMP_EINVAL: if cmd_i2c_xfer_request does not contain correctly formatted request 1035 + * -#BPMP_ENODEV: if cmd_i2c_xfer_request::bus_id is not supported by BPMP 1036 + * -#BPMP_EACCES: if i2c transaction is not allowed due to firewall rules 1037 + * -#BPMP_ETIMEDOUT: if i2c transaction times out 1038 + * -#BPMP_ENXIO: if i2c slave device does not reply with ACK to the transaction 1039 + * -#BPMP_EAGAIN: if ARB_LOST condition is detected by the i2c controller 1040 + * -#BPMP_EIO: any other i2c controller error code than NO_ACK or ARB_LOST 1071 1041 */ 1072 1042 struct mrq_i2c_response { 1073 1043 struct cmd_i2c_xfer_response xfer; 1074 - } __ABI_PACKED; 1044 + } BPMP_ABI_PACKED; 1075 1045 1076 1046 /** @} */ 1077 1047 ··· 1115 1063 CMD_CLK_MAX, 1116 1064 }; 1117 1065 1118 - #define BPMP_CLK_HAS_MUX (1 << 0) 1119 - #define BPMP_CLK_HAS_SET_RATE (1 << 1) 1120 - #define BPMP_CLK_IS_ROOT (1 << 2) 1066 + #define BPMP_CLK_HAS_MUX (1U << 0U) 1067 + #define BPMP_CLK_HAS_SET_RATE (1U << 1U) 1068 + #define BPMP_CLK_IS_ROOT (1U << 2U) 1069 + #define BPMP_CLK_IS_VAR_ROOT (1U << 3U) 1121 1070 1122 - #define MRQ_CLK_NAME_MAXLEN 40 1123 - #define MRQ_CLK_MAX_PARENTS 16 1071 + #define MRQ_CLK_NAME_MAXLEN 40U 1072 + #define MRQ_CLK_MAX_PARENTS 16U 1124 1073 1125 1074 /** @private */ 1126 1075 struct cmd_clk_get_rate_request { 1127 - EMPTY 1128 - } __ABI_PACKED; 1076 + BPMP_ABI_EMPTY 1077 + } BPMP_ABI_PACKED; 1129 1078 1130 1079 struct cmd_clk_get_rate_response { 1131 1080 int64_t rate; 1132 - } __ABI_PACKED; 1081 + } BPMP_ABI_PACKED; 1133 1082 1134 1083 struct cmd_clk_set_rate_request { 1135 1084 int32_t unused; 1136 1085 int64_t rate; 1137 - } __ABI_PACKED; 1086 + } BPMP_ABI_PACKED; 1138 1087 1139 1088 struct cmd_clk_set_rate_response { 1140 1089 int64_t rate; 1141 - } __ABI_PACKED; 1090 + } BPMP_ABI_PACKED; 1142 1091 1143 1092 struct cmd_clk_round_rate_request { 1144 1093 int32_t unused; 1145 1094 int64_t rate; 1146 - } __ABI_PACKED; 1095 + } BPMP_ABI_PACKED; 1147 1096 1148 1097 struct cmd_clk_round_rate_response { 1149 1098 int64_t rate; 1150 - } __ABI_PACKED; 1099 + } BPMP_ABI_PACKED; 1151 1100 1152 1101 /** @private */ 1153 1102 struct cmd_clk_get_parent_request { 1154 - EMPTY 1155 - } __ABI_PACKED; 1103 + BPMP_ABI_EMPTY 1104 + } BPMP_ABI_PACKED; 1156 1105 1157 1106 struct cmd_clk_get_parent_response { 1158 1107 uint32_t parent_id; 1159 - } __ABI_PACKED; 1108 + } BPMP_ABI_PACKED; 1160 1109 1161 1110 struct cmd_clk_set_parent_request { 1162 1111 uint32_t parent_id; 1163 - } __ABI_PACKED; 1112 + } BPMP_ABI_PACKED; 1164 1113 1165 1114 struct cmd_clk_set_parent_response { 1166 1115 uint32_t parent_id; 1167 - } __ABI_PACKED; 1116 + } BPMP_ABI_PACKED; 1168 1117 1169 1118 /** @private */ 1170 1119 struct cmd_clk_is_enabled_request { 1171 - EMPTY 1172 - } __ABI_PACKED; 1120 + BPMP_ABI_EMPTY 1121 + } BPMP_ABI_PACKED; 1173 1122 1123 + /** 1124 + * @brief Response data to #MRQ_CLK sub-command CMD_CLK_IS_ENABLED 1125 + */ 1174 1126 struct cmd_clk_is_enabled_response { 1127 + /** 1128 + * @brief The state of the clock that has been succesfully 1129 + * requested with CMD_CLK_ENABLE or CMD_CLK_DISABLE by the 1130 + * master invoking the command earlier. 1131 + * 1132 + * The state may not reflect the physical state of the clock 1133 + * if there are some other masters requesting it to be 1134 + * enabled. 1135 + * 1136 + * Value 0 is disabled, all other values indicate enabled. 1137 + */ 1175 1138 int32_t state; 1176 - } __ABI_PACKED; 1139 + } BPMP_ABI_PACKED; 1177 1140 1178 1141 /** @private */ 1179 1142 struct cmd_clk_enable_request { 1180 - EMPTY 1181 - } __ABI_PACKED; 1143 + BPMP_ABI_EMPTY 1144 + } BPMP_ABI_PACKED; 1182 1145 1183 1146 /** @private */ 1184 1147 struct cmd_clk_enable_response { 1185 - EMPTY 1186 - } __ABI_PACKED; 1148 + BPMP_ABI_EMPTY 1149 + } BPMP_ABI_PACKED; 1187 1150 1188 1151 /** @private */ 1189 1152 struct cmd_clk_disable_request { 1190 - EMPTY 1191 - } __ABI_PACKED; 1153 + BPMP_ABI_EMPTY 1154 + } BPMP_ABI_PACKED; 1192 1155 1193 1156 /** @private */ 1194 1157 struct cmd_clk_disable_response { 1195 - EMPTY 1196 - } __ABI_PACKED; 1158 + BPMP_ABI_EMPTY 1159 + } BPMP_ABI_PACKED; 1197 1160 1198 1161 /** @private */ 1199 1162 struct cmd_clk_get_all_info_request { 1200 - EMPTY 1201 - } __ABI_PACKED; 1163 + BPMP_ABI_EMPTY 1164 + } BPMP_ABI_PACKED; 1202 1165 1203 1166 struct cmd_clk_get_all_info_response { 1204 1167 uint32_t flags; ··· 1221 1154 uint32_t parents[MRQ_CLK_MAX_PARENTS]; 1222 1155 uint8_t num_parents; 1223 1156 uint8_t name[MRQ_CLK_NAME_MAXLEN]; 1224 - } __ABI_PACKED; 1157 + } BPMP_ABI_PACKED; 1225 1158 1226 1159 /** @private */ 1227 1160 struct cmd_clk_get_max_clk_id_request { 1228 - EMPTY 1229 - } __ABI_PACKED; 1161 + BPMP_ABI_EMPTY 1162 + } BPMP_ABI_PACKED; 1230 1163 1231 1164 struct cmd_clk_get_max_clk_id_response { 1232 1165 uint32_t max_id; 1233 - } __ABI_PACKED; 1166 + } BPMP_ABI_PACKED; 1234 1167 1235 1168 /** @private */ 1236 1169 struct cmd_clk_get_fmax_at_vmin_request { 1237 - EMPTY 1238 - } __ABI_PACKED; 1170 + BPMP_ABI_EMPTY 1171 + } BPMP_ABI_PACKED; 1239 1172 1240 1173 struct cmd_clk_get_fmax_at_vmin_response { 1241 1174 int64_t rate; 1242 - } __ABI_PACKED; 1175 + } BPMP_ABI_PACKED; 1243 1176 1244 1177 /** 1245 1178 * @ingroup Clocks ··· 1294 1227 struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id; 1295 1228 /** @private */ 1296 1229 struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin; 1297 - } __UNION_ANON; 1298 - } __ABI_PACKED; 1230 + } BPMP_UNION_ANON; 1231 + } BPMP_ABI_PACKED; 1299 1232 1300 1233 /** 1301 1234 * @ingroup Clocks ··· 1336 1269 struct cmd_clk_get_all_info_response clk_get_all_info; 1337 1270 struct cmd_clk_get_max_clk_id_response clk_get_max_clk_id; 1338 1271 struct cmd_clk_get_fmax_at_vmin_response clk_get_fmax_at_vmin; 1339 - } __UNION_ANON; 1340 - } __ABI_PACKED; 1272 + } BPMP_UNION_ANON; 1273 + } BPMP_ABI_PACKED; 1341 1274 1342 1275 /** @} */ 1343 1276 ··· 1363 1296 struct mrq_query_abi_request { 1364 1297 /** @brief MRQ code to query */ 1365 1298 uint32_t mrq; 1366 - } __ABI_PACKED; 1299 + } BPMP_ABI_PACKED; 1367 1300 1368 1301 /** 1369 1302 * @ingroup ABI_info ··· 1375 1308 struct mrq_query_abi_response { 1376 1309 /** @brief 0 if queried MRQ is supported. Else, -#BPMP_ENODEV */ 1377 1310 int32_t status; 1378 - } __ABI_PACKED; 1311 + } BPMP_ABI_PACKED; 1379 1312 1380 1313 /** 1381 1314 * @ingroup MRQ_Codes ··· 1400 1333 struct mrq_pg_read_state_request { 1401 1334 /** @brief ID of partition */ 1402 1335 uint32_t partition_id; 1403 - } __ABI_PACKED; 1336 + } BPMP_ABI_PACKED; 1404 1337 1405 1338 /** 1406 1339 * @ingroup Powergating ··· 1415 1348 * * 1 : on 1416 1349 */ 1417 1350 uint32_t logic_state; 1418 - } __ABI_PACKED; 1351 + } BPMP_ABI_PACKED; 1419 1352 /** @endcond*/ 1420 1353 /** @} */ 1421 1354 ··· 1465 1398 * @ref logic_state == 0x3) 1466 1399 */ 1467 1400 uint32_t clock_state; 1468 - } __ABI_PACKED; 1401 + } BPMP_ABI_PACKED; 1469 1402 /** @endcond*/ 1470 1403 1471 1404 /** ··· 1561 1494 struct cmd_pg_query_abi_request { 1562 1495 /** @ref mrq_pg_cmd */ 1563 1496 uint32_t type; 1564 - } __ABI_PACKED; 1497 + } BPMP_ABI_PACKED; 1565 1498 1566 1499 struct cmd_pg_set_state_request { 1567 1500 /** @ref pg_states */ 1568 1501 uint32_t state; 1569 - } __ABI_PACKED; 1502 + } BPMP_ABI_PACKED; 1570 1503 1504 + /** 1505 + * @brief Response data to #MRQ_PG sub command #CMD_PG_GET_STATE 1506 + */ 1571 1507 struct cmd_pg_get_state_response { 1572 - /** @ref pg_states */ 1508 + /** 1509 + * @brief The state of the power partition that has been 1510 + * succesfuly requested by the master earlier using #MRQ_PG 1511 + * command #CMD_PG_SET_STATE. 1512 + * 1513 + * The state may not reflect the physical state of the power 1514 + * partition if there are some other masters requesting it to 1515 + * be enabled. 1516 + * 1517 + * See @ref pg_states for possible values 1518 + */ 1573 1519 uint32_t state; 1574 - } __ABI_PACKED; 1520 + } BPMP_ABI_PACKED; 1575 1521 1576 1522 struct cmd_pg_get_name_response { 1577 1523 uint8_t name[MRQ_PG_NAME_MAXLEN]; 1578 - } __ABI_PACKED; 1524 + } BPMP_ABI_PACKED; 1579 1525 1580 1526 struct cmd_pg_get_max_id_response { 1581 1527 uint32_t max_id; 1582 - } __ABI_PACKED; 1528 + } BPMP_ABI_PACKED; 1583 1529 1584 1530 /** 1585 1531 * @brief Request with #MRQ_PG ··· 1617 1537 union { 1618 1538 struct cmd_pg_query_abi_request query_abi; 1619 1539 struct cmd_pg_set_state_request set_state; 1620 - } __UNION_ANON; 1621 - } __ABI_PACKED; 1540 + } BPMP_UNION_ANON; 1541 + } BPMP_ABI_PACKED; 1622 1542 1623 1543 /** 1624 1544 * @brief Response to MRQ_PG ··· 1640 1560 struct cmd_pg_get_state_response get_state; 1641 1561 struct cmd_pg_get_name_response get_name; 1642 1562 struct cmd_pg_get_max_id_response get_max_id; 1643 - } __UNION_ANON; 1644 - } __ABI_PACKED; 1563 + } BPMP_UNION_ANON; 1564 + } BPMP_ABI_PACKED; 1645 1565 1646 1566 /** @} */ 1647 1567 ··· 1730 1650 */ 1731 1651 CMD_THERMAL_GET_NUM_ZONES = 3, 1732 1652 1653 + /** 1654 + * @brief Get the thermtrip of the specified zone. 1655 + * 1656 + * Host needs to supply request parameters. 1657 + * 1658 + * mrq_response::err is 1659 + * * 0: Valid zone information returned. 1660 + * * -#BPMP_EINVAL: Invalid request parameters. 1661 + * * -#BPMP_ENOENT: No driver registered for thermal zone. 1662 + * * -#BPMP_ERANGE if thermtrip is invalid or disabled. 1663 + * * -#BPMP_EFAULT: Problem reading zone information. 1664 + */ 1665 + CMD_THERMAL_GET_THERMTRIP = 4, 1666 + 1733 1667 /** @brief: number of supported host-to-bpmp commands. May 1734 1668 * increase in future 1735 1669 */ ··· 1774 1680 */ 1775 1681 struct cmd_thermal_query_abi_request { 1776 1682 uint32_t type; 1777 - } __ABI_PACKED; 1683 + } BPMP_ABI_PACKED; 1778 1684 1779 1685 /* 1780 1686 * Host->BPMP request data for request type CMD_THERMAL_GET_TEMP ··· 1783 1689 */ 1784 1690 struct cmd_thermal_get_temp_request { 1785 1691 uint32_t zone; 1786 - } __ABI_PACKED; 1692 + } BPMP_ABI_PACKED; 1787 1693 1788 1694 /* 1789 1695 * BPMP->Host reply data for request CMD_THERMAL_GET_TEMP ··· 1796 1702 */ 1797 1703 struct cmd_thermal_get_temp_response { 1798 1704 int32_t temp; 1799 - } __ABI_PACKED; 1705 + } BPMP_ABI_PACKED; 1800 1706 1801 1707 /* 1802 1708 * Host->BPMP request data for request type CMD_THERMAL_SET_TRIP ··· 1811 1717 int32_t low; 1812 1718 int32_t high; 1813 1719 uint32_t enabled; 1814 - } __ABI_PACKED; 1720 + } BPMP_ABI_PACKED; 1815 1721 1816 1722 /* 1817 1723 * BPMP->Host request data for request type CMD_THERMAL_HOST_TRIP_REACHED ··· 1820 1726 */ 1821 1727 struct cmd_thermal_host_trip_reached_request { 1822 1728 uint32_t zone; 1823 - } __ABI_PACKED; 1729 + } BPMP_ABI_PACKED; 1824 1730 1825 1731 /* 1826 1732 * BPMP->Host reply data for request type CMD_THERMAL_GET_NUM_ZONES ··· 1830 1736 */ 1831 1737 struct cmd_thermal_get_num_zones_response { 1832 1738 uint32_t num; 1833 - } __ABI_PACKED; 1739 + } BPMP_ABI_PACKED; 1740 + 1741 + /* 1742 + * Host->BPMP request data for request type CMD_THERMAL_GET_THERMTRIP 1743 + * 1744 + * zone: Number of thermal zone. 1745 + */ 1746 + struct cmd_thermal_get_thermtrip_request { 1747 + uint32_t zone; 1748 + } BPMP_ABI_PACKED; 1749 + 1750 + /* 1751 + * BPMP->Host reply data for request CMD_THERMAL_GET_THERMTRIP 1752 + * 1753 + * thermtrip: HW shutdown temperature in millicelsius. 1754 + */ 1755 + struct cmd_thermal_get_thermtrip_response { 1756 + int32_t thermtrip; 1757 + } BPMP_ABI_PACKED; 1834 1758 1835 1759 /* 1836 1760 * Host->BPMP request data. ··· 1864 1752 struct cmd_thermal_query_abi_request query_abi; 1865 1753 struct cmd_thermal_get_temp_request get_temp; 1866 1754 struct cmd_thermal_set_trip_request set_trip; 1867 - } __UNION_ANON; 1868 - } __ABI_PACKED; 1755 + struct cmd_thermal_get_thermtrip_request get_thermtrip; 1756 + } BPMP_UNION_ANON; 1757 + } BPMP_ABI_PACKED; 1869 1758 1870 1759 /* 1871 1760 * BPMP->Host request data. ··· 1878 1765 uint32_t type; 1879 1766 union { 1880 1767 struct cmd_thermal_host_trip_reached_request host_trip_reached; 1881 - } __UNION_ANON; 1882 - } __ABI_PACKED; 1768 + } BPMP_UNION_ANON; 1769 + } BPMP_ABI_PACKED; 1883 1770 1884 1771 /* 1885 1772 * Data in reply to a Host->BPMP request. 1886 1773 */ 1887 1774 union mrq_thermal_bpmp_to_host_response { 1888 1775 struct cmd_thermal_get_temp_response get_temp; 1776 + struct cmd_thermal_get_thermtrip_response get_thermtrip; 1889 1777 struct cmd_thermal_get_num_zones_response get_num_zones; 1890 - } __ABI_PACKED; 1778 + } BPMP_ABI_PACKED; 1891 1779 /** @} */ 1892 1780 1893 1781 /** ··· 1920 1806 uint32_t addr; 1921 1807 /** @brief ID of the cluster whose data is requested */ 1922 1808 uint32_t cluster_id; 1923 - } __ABI_PACKED; 1809 + } BPMP_ABI_PACKED; 1924 1810 1925 1811 /** 1926 1812 * @brief Description of the CPU v/f relation ··· 1947 1833 uint16_t vindex_div; 1948 1834 /** reserved for future use */ 1949 1835 uint16_t reserved[328]; 1950 - } __ABI_PACKED; 1836 + } BPMP_ABI_PACKED; 1951 1837 /** @endcond */ 1952 1838 /** @} */ 1953 1839 ··· 2036 1922 * @brief Used by @ref mrq_emc_dvfs_latency_response 2037 1923 */ 2038 1924 struct emc_dvfs_latency { 2039 - /** @brief EMC frequency in kHz */ 1925 + /** @brief EMC DVFS node frequency in kHz */ 2040 1926 uint32_t freq; 2041 1927 /** @brief EMC DVFS latency in nanoseconds */ 2042 1928 uint32_t latency; 2043 - } __ABI_PACKED; 1929 + } BPMP_ABI_PACKED; 2044 1930 2045 1931 #define EMC_DVFS_LATENCY_MAX_SIZE 14 2046 1932 /** ··· 2049 1935 struct mrq_emc_dvfs_latency_response { 2050 1936 /** @brief The number valid entries in #pairs */ 2051 1937 uint32_t num_pairs; 2052 - /** @brief EMC <frequency, latency> information */ 1938 + /** @brief EMC DVFS node <frequency, latency> information */ 2053 1939 struct emc_dvfs_latency pairs[EMC_DVFS_LATENCY_MAX_SIZE]; 2054 - } __ABI_PACKED; 1940 + } BPMP_ABI_PACKED; 2055 1941 2056 1942 /** @} */ 2057 1943 ··· 2076 1962 struct mrq_cpu_ndiv_limits_request { 2077 1963 /** @brief Enum cluster_id */ 2078 1964 uint32_t cluster_id; 2079 - } __ABI_PACKED; 1965 + } BPMP_ABI_PACKED; 2080 1966 2081 1967 /** 2082 1968 * @brief Response to #MRQ_CPU_NDIV_LIMITS ··· 2092 1978 uint16_t ndiv_max; 2093 1979 /** @brief Minimum allowed NDIV value */ 2094 1980 uint16_t ndiv_min; 2095 - } __ABI_PACKED; 1981 + } BPMP_ABI_PACKED; 2096 1982 2097 1983 /** @} */ 2098 1984 /** @endcond */ ··· 2124 2010 struct mrq_cpu_auto_cc3_request { 2125 2011 /** @brief Enum cluster_id (logical cluster id, known to CCPLEX s/w) */ 2126 2012 uint32_t cluster_id; 2127 - } __ABI_PACKED; 2013 + } BPMP_ABI_PACKED; 2128 2014 2129 2015 /** 2130 2016 * @brief Response to #MRQ_CPU_AUTO_CC3 ··· 2138 2024 * - bit [0] if "1" auto-CC3 is allowed, if "0" auto-CC3 is not allowed 2139 2025 */ 2140 2026 uint32_t auto_cc3_config; 2141 - } __ABI_PACKED; 2027 + } BPMP_ABI_PACKED; 2142 2028 2143 2029 /** @} */ 2144 2030 /** @endcond */ ··· 2147 2033 * @ingroup MRQ_Codes 2148 2034 * @def MRQ_TRACE_ITER 2149 2035 * @brief Manage the trace iterator 2036 + * 2037 + * @deprecated 2150 2038 * 2151 2039 * * Platforms: All 2152 2040 * * Initiators: CCPLEX ··· 2171 2055 struct mrq_trace_iter_request { 2172 2056 /** @brief TRACE_ITER_INIT or TRACE_ITER_CLEAN */ 2173 2057 uint32_t cmd; 2174 - } __ABI_PACKED; 2058 + } BPMP_ABI_PACKED; 2175 2059 2176 2060 /** @} */ 2177 2061 ··· 2247 2131 struct cmd_ringbuf_console_query_abi_req { 2248 2132 /** @brief Command identifier to be queried */ 2249 2133 uint32_t cmd; 2250 - } __ABI_PACKED; 2134 + } BPMP_ABI_PACKED; 2251 2135 2252 2136 /** @private */ 2253 2137 struct cmd_ringbuf_console_query_abi_resp { 2254 - EMPTY 2255 - } __ABI_PACKED; 2138 + BPMP_ABI_EMPTY 2139 + } BPMP_ABI_PACKED; 2256 2140 2257 2141 /** 2258 2142 * @ingroup RingbufConsole ··· 2263 2147 * @brief Number of bytes requested to be read from the BPMP TX buffer 2264 2148 */ 2265 2149 uint8_t len; 2266 - } __ABI_PACKED; 2150 + } BPMP_ABI_PACKED; 2267 2151 2268 2152 /** 2269 2153 * @ingroup RingbufConsole ··· 2274 2158 uint8_t data[MRQ_RINGBUF_CONSOLE_MAX_READ_LEN]; 2275 2159 /** @brief Number of bytes in cmd_ringbuf_console_read_resp::data */ 2276 2160 uint8_t len; 2277 - } __ABI_PACKED; 2161 + } BPMP_ABI_PACKED; 2278 2162 2279 2163 /** 2280 2164 * @ingroup RingbufConsole ··· 2285 2169 uint8_t data[MRQ_RINGBUF_CONSOLE_MAX_WRITE_LEN]; 2286 2170 /** @brief Number of bytes in cmd_ringbuf_console_write_req::data */ 2287 2171 uint8_t len; 2288 - } __ABI_PACKED; 2172 + } BPMP_ABI_PACKED; 2289 2173 2290 2174 /** 2291 2175 * @ingroup RingbufConsole ··· 2296 2180 uint32_t space_avail; 2297 2181 /** @brief Number of bytes that were written to the BPMP RX buffer */ 2298 2182 uint8_t len; 2299 - } __ABI_PACKED; 2183 + } BPMP_ABI_PACKED; 2300 2184 2301 2185 /** @private */ 2302 2186 struct cmd_ringbuf_console_get_fifo_req { 2303 - EMPTY 2304 - } __ABI_PACKED; 2187 + BPMP_ABI_EMPTY 2188 + } BPMP_ABI_PACKED; 2305 2189 2306 2190 /** 2307 2191 * @ingroup RingbufConsole ··· 2316 2200 uint64_t bpmp_tx_tail_addr; 2317 2201 /** @brief Length of the BPMP TX buffer */ 2318 2202 uint32_t bpmp_tx_buf_len; 2319 - } __ABI_PACKED; 2203 + } BPMP_ABI_PACKED; 2320 2204 2321 2205 /** 2322 2206 * @ingroup RingbufConsole ··· 2336 2220 struct cmd_ringbuf_console_read_req read; 2337 2221 struct cmd_ringbuf_console_write_req write; 2338 2222 struct cmd_ringbuf_console_get_fifo_req get_fifo; 2339 - } __UNION_ANON; 2340 - } __ABI_PACKED; 2223 + } BPMP_UNION_ANON; 2224 + } BPMP_ABI_PACKED; 2341 2225 2342 2226 /** 2343 2227 * @ingroup RingbufConsole ··· 2350 2234 struct cmd_ringbuf_console_read_resp read; 2351 2235 struct cmd_ringbuf_console_write_resp write; 2352 2236 struct cmd_ringbuf_console_get_fifo_resp get_fifo; 2353 - } __ABI_PACKED; 2237 + } BPMP_ABI_PACKED; 2354 2238 /** @} */ 2355 2239 2356 2240 /** ··· 2394 2278 uint32_t id; 2395 2279 /** @brief Desired value for strap (if cmd is #STRAP_SET) */ 2396 2280 uint32_t value; 2397 - } __ABI_PACKED; 2281 + } BPMP_ABI_PACKED; 2398 2282 2399 2283 /** 2400 2284 * @defgroup Strap_Ids Strap Identifiers ··· 2437 2321 uint32_t y; 2438 2322 /** @brief Set number of bit blocks for each margin section */ 2439 2323 uint32_t nblks; 2440 - } __ABI_PACKED; 2324 + } BPMP_ABI_PACKED; 2441 2325 2442 2326 struct cmd_uphy_margin_status_response { 2443 2327 /** @brief Number of errors observed */ 2444 2328 uint32_t status; 2445 - } __ABI_PACKED; 2329 + } BPMP_ABI_PACKED; 2446 2330 2447 2331 struct cmd_uphy_ep_controller_pll_init_request { 2448 2332 /** @brief EP controller number, valid: 0, 4, 5 */ 2449 2333 uint8_t ep_controller; 2450 - } __ABI_PACKED; 2334 + } BPMP_ABI_PACKED; 2451 2335 2452 2336 struct cmd_uphy_pcie_controller_state_request { 2453 2337 /** @brief PCIE controller number, valid: 0, 1, 2, 3, 4 */ 2454 2338 uint8_t pcie_controller; 2455 2339 uint8_t enable; 2456 - } __ABI_PACKED; 2340 + } BPMP_ABI_PACKED; 2457 2341 2458 2342 struct cmd_uphy_ep_controller_pll_off_request { 2459 2343 /** @brief EP controller number, valid: 0, 4, 5 */ 2460 2344 uint8_t ep_controller; 2461 - } __ABI_PACKED; 2345 + } BPMP_ABI_PACKED; 2462 2346 2463 2347 /** 2464 2348 * @ingroup UPHY ··· 2489 2373 struct cmd_uphy_ep_controller_pll_init_request ep_ctrlr_pll_init; 2490 2374 struct cmd_uphy_pcie_controller_state_request controller_state; 2491 2375 struct cmd_uphy_ep_controller_pll_off_request ep_ctrlr_pll_off; 2492 - } __UNION_ANON; 2493 - } __ABI_PACKED; 2376 + } BPMP_UNION_ANON; 2377 + } BPMP_ABI_PACKED; 2494 2378 2495 2379 /** 2496 2380 * @ingroup UPHY ··· 2510 2394 struct mrq_uphy_response { 2511 2395 union { 2512 2396 struct cmd_uphy_margin_status_response uphy_get_margin_status; 2513 - } __UNION_ANON; 2514 - } __ABI_PACKED; 2397 + } BPMP_UNION_ANON; 2398 + } BPMP_ABI_PACKED; 2515 2399 2516 2400 /** @} */ 2517 2401 /** @endcond */ ··· 2561 2445 struct cmd_fmon_gear_clamp_request { 2562 2446 int32_t unused; 2563 2447 int64_t rate; 2564 - } __ABI_PACKED; 2448 + } BPMP_ABI_PACKED; 2565 2449 2566 2450 /** @private */ 2567 2451 struct cmd_fmon_gear_clamp_response { 2568 - EMPTY 2569 - } __ABI_PACKED; 2452 + BPMP_ABI_EMPTY 2453 + } BPMP_ABI_PACKED; 2570 2454 2571 2455 /** @private */ 2572 2456 struct cmd_fmon_gear_free_request { 2573 - EMPTY 2574 - } __ABI_PACKED; 2457 + BPMP_ABI_EMPTY 2458 + } BPMP_ABI_PACKED; 2575 2459 2576 2460 /** @private */ 2577 2461 struct cmd_fmon_gear_free_response { 2578 - EMPTY 2579 - } __ABI_PACKED; 2462 + BPMP_ABI_EMPTY 2463 + } BPMP_ABI_PACKED; 2580 2464 2581 2465 /** @private */ 2582 2466 struct cmd_fmon_gear_get_request { 2583 - EMPTY 2584 - } __ABI_PACKED; 2467 + BPMP_ABI_EMPTY 2468 + } BPMP_ABI_PACKED; 2585 2469 2586 2470 struct cmd_fmon_gear_get_response { 2587 2471 int64_t rate; 2588 - } __ABI_PACKED; 2472 + } BPMP_ABI_PACKED; 2589 2473 2590 2474 /** 2591 2475 * @ingroup FMON ··· 2618 2502 struct cmd_fmon_gear_free_request fmon_gear_free; 2619 2503 /** @private */ 2620 2504 struct cmd_fmon_gear_get_request fmon_gear_get; 2621 - } __UNION_ANON; 2622 - } __ABI_PACKED; 2505 + } BPMP_UNION_ANON; 2506 + } BPMP_ABI_PACKED; 2623 2507 2624 2508 /** 2625 2509 * @ingroup FMON ··· 2643 2527 /** @private */ 2644 2528 struct cmd_fmon_gear_free_response fmon_gear_free; 2645 2529 struct cmd_fmon_gear_get_response fmon_gear_get; 2646 - } __UNION_ANON; 2647 - } __ABI_PACKED; 2530 + } BPMP_UNION_ANON; 2531 + } BPMP_ABI_PACKED; 2648 2532 2649 2533 /** @} */ 2650 2534 /** @endcond */ ··· 2669 2553 */ 2670 2554 enum { 2671 2555 /** 2556 + * @cond DEPRECATED 2672 2557 * @brief Retrieve specified EC status. 2673 2558 * 2674 2559 * mrq_response::err is 0 if the operation was successful, or @n 2675 2560 * -#BPMP_ENODEV if target EC is not owned by BPMP @n 2676 - * -#BPMP_EACCES if target EC power domain is turned off 2561 + * -#BPMP_EACCES if target EC power domain is turned off @n 2562 + * -#BPMP_EBADCMD if subcommand is not supported 2563 + * @endcond 2677 2564 */ 2678 - CMD_EC_STATUS_GET = 1, 2565 + CMD_EC_STATUS_GET = 1, /* deprecated */ 2566 + 2567 + /** 2568 + * @brief Retrieve specified EC extended status (includes error 2569 + * counter and user values). 2570 + * 2571 + * mrq_response::err is 0 if the operation was successful, or @n 2572 + * -#BPMP_ENODEV if target EC is not owned by BPMP @n 2573 + * -#BPMP_EACCES if target EC power domain is turned off @n 2574 + * -#BPMP_EBADCMD if subcommand is not supported 2575 + */ 2576 + CMD_EC_STATUS_EX_GET = 2, 2679 2577 CMD_EC_NUM, 2680 2578 }; 2681 2579 ··· 2745 2615 2746 2616 /** @brief SW Correctable error 2747 2617 * 2748 - * Error descriptor @ref ec_err_simple_desc. 2618 + * Error descriptor @ref ec_err_sw_error_desc. 2749 2619 */ 2750 2620 EC_ERR_TYPE_SW_CORRECTABLE = 16, 2751 2621 2752 2622 /** @brief SW Uncorrectable error 2753 2623 * 2754 - * Error descriptor @ref ec_err_simple_desc. 2624 + * Error descriptor @ref ec_err_sw_error_desc. 2755 2625 */ 2756 2626 EC_ERR_TYPE_SW_UNCORRECTABLE = 17, 2757 2627 ··· 2771 2641 /** @brief Group of registers with parity error. */ 2772 2642 enum ec_registers_group { 2773 2643 /** @brief Functional registers group */ 2774 - EC_ERR_GROUP_FUNC_REG = 0, 2644 + EC_ERR_GROUP_FUNC_REG = 0U, 2775 2645 /** @brief SCR registers group */ 2776 - EC_ERR_GROUP_SCR_REG = 1, 2646 + EC_ERR_GROUP_SCR_REG = 1U, 2777 2647 }; 2778 2648 2779 2649 /** ··· 2782 2652 * @{ 2783 2653 */ 2784 2654 /** @brief No EC error found flag */ 2785 - #define EC_STATUS_FLAG_NO_ERROR 0x0001 2655 + #define EC_STATUS_FLAG_NO_ERROR 0x0001U 2786 2656 /** @brief Last EC error found flag */ 2787 - #define EC_STATUS_FLAG_LAST_ERROR 0x0002 2657 + #define EC_STATUS_FLAG_LAST_ERROR 0x0002U 2788 2658 /** @brief EC latent error flag */ 2789 - #define EC_STATUS_FLAG_LATENT_ERROR 0x0004 2659 + #define EC_STATUS_FLAG_LATENT_ERROR 0x0004U 2790 2660 /** @} */ 2791 2661 2792 2662 /** ··· 2795 2665 * @{ 2796 2666 */ 2797 2667 /** @brief EC descriptor error resolved flag */ 2798 - #define EC_DESC_FLAG_RESOLVED 0x0001 2668 + #define EC_DESC_FLAG_RESOLVED 0x0001U 2799 2669 /** @brief EC descriptor failed to retrieve id flag */ 2800 - #define EC_DESC_FLAG_NO_ID 0x0002 2670 + #define EC_DESC_FLAG_NO_ID 0x0002U 2801 2671 /** @} */ 2802 2672 2803 2673 /** ··· 2814 2684 uint32_t fmon_faults; 2815 2685 /** @brief FMON faults access error */ 2816 2686 int32_t fmon_access_error; 2817 - } __ABI_PACKED; 2687 + } BPMP_ABI_PACKED; 2818 2688 2819 2689 /** 2820 2690 * |error type | vmon_adc_id values | ··· 2830 2700 uint32_t vmon_faults; 2831 2701 /** @brief VMON faults access error */ 2832 2702 int32_t vmon_access_error; 2833 - } __ABI_PACKED; 2703 + } BPMP_ABI_PACKED; 2834 2704 2835 2705 /** 2836 2706 * |error type | reg_id values | ··· 2844 2714 uint16_t reg_id; 2845 2715 /** @brief Register group @ref ec_registers_group */ 2846 2716 uint16_t reg_group; 2847 - } __ABI_PACKED; 2717 + } BPMP_ABI_PACKED; 2718 + 2719 + /** 2720 + * |error type | err_source_id values | 2721 + * |--------------------------------- |--------------------------| 2722 + * |@ref EC_ERR_TYPE_SW_CORRECTABLE | @ref bpmp_ec_ce_swd_ids | 2723 + * |@ref EC_ERR_TYPE_SW_UNCORRECTABLE | @ref bpmp_ec_ue_swd_ids | 2724 + */ 2725 + struct ec_err_sw_error_desc { 2726 + /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 2727 + uint16_t desc_flags; 2728 + /** @brief Error source id */ 2729 + uint16_t err_source_id; 2730 + /** @brief Sw error data */ 2731 + uint32_t sw_error_data; 2732 + } BPMP_ABI_PACKED; 2848 2733 2849 2734 /** 2850 2735 * |error type | err_source_id values | ··· 2869 2724 * |@ref EC_ERR_TYPE_ECC_DED_INTERNAL |@ref bpmp_ec_ipath_ids | 2870 2725 * |@ref EC_ERR_TYPE_COMPARATOR |@ref bpmp_ec_comparator_ids| 2871 2726 * |@ref EC_ERR_TYPE_PARITY_SRAM |@ref bpmp_clock_ids | 2872 - * |@ref EC_ERR_TYPE_SW_CORRECTABLE |@ref bpmp_ec_misc_ids | 2873 - * |@ref EC_ERR_TYPE_SW_UNCORRECTABLE |@ref bpmp_ec_misc_ids | 2874 - * |@ref EC_ERR_TYPE_OTHER_HW_CORRECTABLE |@ref bpmp_ec_misc_ids | 2875 - * |@ref EC_ERR_TYPE_OTHER_HW_UNCORRECTABLE |@ref bpmp_ec_misc_ids | 2727 + * |@ref EC_ERR_TYPE_OTHER_HW_CORRECTABLE |@ref bpmp_ec_misc_hwd_ids | 2728 + * |@ref EC_ERR_TYPE_OTHER_HW_UNCORRECTABLE |@ref bpmp_ec_misc_hwd_ids | 2876 2729 */ 2877 2730 struct ec_err_simple_desc { 2878 2731 /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 2879 2732 uint16_t desc_flags; 2880 2733 /** @brief Error source id. Id space depends on error type. */ 2881 2734 uint16_t err_source_id; 2882 - } __ABI_PACKED; 2735 + } BPMP_ABI_PACKED; 2883 2736 2884 2737 /** @brief Union of EC error descriptors */ 2885 2738 union ec_err_desc { 2886 2739 struct ec_err_fmon_desc fmon_desc; 2887 2740 struct ec_err_vmon_desc vmon_desc; 2888 2741 struct ec_err_reg_parity_desc reg_parity_desc; 2742 + struct ec_err_sw_error_desc sw_error_desc; 2889 2743 struct ec_err_simple_desc simple_desc; 2890 - } __ABI_PACKED; 2744 + } BPMP_ABI_PACKED; 2891 2745 2892 2746 struct cmd_ec_status_get_request { 2893 2747 /** @brief HSM error line number that identifies target EC. */ 2894 2748 uint32_t ec_hsm_id; 2895 - } __ABI_PACKED; 2749 + } BPMP_ABI_PACKED; 2896 2750 2897 2751 /** EC status maximum number of descriptors */ 2898 - #define EC_ERR_STATUS_DESC_MAX_NUM 4 2752 + #define EC_ERR_STATUS_DESC_MAX_NUM 4U 2899 2753 2754 + /** 2755 + * @cond DEPRECATED 2756 + */ 2900 2757 struct cmd_ec_status_get_response { 2901 2758 /** @brief Target EC id (the same id received with request). */ 2902 2759 uint32_t ec_hsm_id; ··· 2916 2769 uint32_t error_desc_num; 2917 2770 /** @brief EC error descriptors */ 2918 2771 union ec_err_desc error_descs[EC_ERR_STATUS_DESC_MAX_NUM]; 2919 - } __ABI_PACKED; 2772 + } BPMP_ABI_PACKED; 2773 + /** @endcond */ 2774 + 2775 + struct cmd_ec_status_ex_get_response { 2776 + /** @brief Target EC id (the same id received with request). */ 2777 + uint32_t ec_hsm_id; 2778 + /** 2779 + * @brief Bitmask of @ref bpmp_ec_status_flags 2780 + * 2781 + * If NO_ERROR flag is set, error_ fields should be ignored 2782 + */ 2783 + uint32_t ec_status_flags; 2784 + /** @brief Found EC error index. */ 2785 + uint32_t error_idx; 2786 + /** @brief Found EC error type @ref bpmp_ec_err_type. */ 2787 + uint32_t error_type; 2788 + /** @brief Found EC mission error counter value */ 2789 + uint32_t error_counter; 2790 + /** @brief Found EC mission error user value */ 2791 + uint32_t error_uval; 2792 + /** @brief Reserved entry */ 2793 + uint32_t reserved; 2794 + /** @brief Number of returned EC error descriptors */ 2795 + uint32_t error_desc_num; 2796 + /** @brief EC error descriptors */ 2797 + union ec_err_desc error_descs[EC_ERR_STATUS_DESC_MAX_NUM]; 2798 + } BPMP_ABI_PACKED; 2920 2799 2921 2800 /** 2922 2801 * @ingroup EC ··· 2951 2778 * Used by the sender of an #MRQ_EC message to access ECs owned 2952 2779 * by BPMP. 2953 2780 * 2781 + * @cond DEPRECATED 2954 2782 * |sub-command |payload | 2955 2783 * |----------------------------|-----------------------| 2956 2784 * |@ref CMD_EC_STATUS_GET |ec_status_get | 2785 + * @endcond 2786 + * 2787 + * |sub-command |payload | 2788 + * |----------------------------|-----------------------| 2789 + * |@ref CMD_EC_STATUS_EX_GET |ec_status_get | 2957 2790 * 2958 2791 */ 2959 2792 ··· 2969 2790 2970 2791 union { 2971 2792 struct cmd_ec_status_get_request ec_status_get; 2972 - } __UNION_ANON; 2973 - } __ABI_PACKED; 2793 + } BPMP_UNION_ANON; 2794 + } BPMP_ABI_PACKED; 2974 2795 2975 2796 /** 2976 2797 * @ingroup EC ··· 2979 2800 * Each sub-command supported by @ref mrq_ec_request may return 2980 2801 * sub-command-specific data as indicated below. 2981 2802 * 2803 + * @cond DEPRECATED 2982 2804 * |sub-command |payload | 2983 2805 * |----------------------------|------------------------| 2984 2806 * |@ref CMD_EC_STATUS_GET |ec_status_get | 2807 + * @endcond 2808 + * 2809 + * |sub-command |payload | 2810 + * |----------------------------|------------------------| 2811 + * |@ref CMD_EC_STATUS_EX_GET |ec_status_ex_get | 2985 2812 * 2986 2813 */ 2987 2814 2988 2815 struct mrq_ec_response { 2989 2816 union { 2817 + /** 2818 + * @cond DEPRECATED 2819 + */ 2990 2820 struct cmd_ec_status_get_response ec_status_get; 2991 - } __UNION_ANON; 2992 - } __ABI_PACKED; 2993 - 2994 - /** @} */ 2995 - /** @endcond */ 2996 - 2997 - /** 2998 - * @ingroup MRQ_Codes 2999 - * @def MRQ_FBVOLT_STATUS 3000 - * @brief Provides status information about voltage state for fuse burning 3001 - * 3002 - * * Platforms: T194 onwards 3003 - * @cond bpmp_t194 3004 - * * Initiators: CCPLEX 3005 - * * Target: BPMP 3006 - * * Request Payload: None 3007 - * * Response Payload: @ref mrq_fbvolt_status_response 3008 - * @{ 3009 - */ 3010 - 3011 - /** 3012 - * @ingroup Fbvolt_status 3013 - * @brief Response to #MRQ_FBVOLT_STATUS 3014 - * 3015 - * Value of #ready reflects if core voltages are in a suitable state for buring 3016 - * fuses. A value of 0x1 indicates that core voltages are ready for burning 3017 - * fuses. A value of 0x0 indicates that core voltages are not ready. 3018 - */ 3019 - struct mrq_fbvolt_status_response { 3020 - /** @brief Bit [0:0] - ready status, bits [31:1] - reserved */ 3021 - uint32_t ready; 3022 - /** @brief Reserved */ 3023 - uint32_t unused; 3024 - } __ABI_PACKED; 2821 + /** @endcond */ 2822 + struct cmd_ec_status_ex_get_response ec_status_ex_get; 2823 + } BPMP_UNION_ANON; 2824 + } BPMP_ABI_PACKED; 3025 2825 3026 2826 /** @} */ 3027 2827 /** @endcond */ ··· 3013 2855 * @{ 3014 2856 */ 3015 2857 2858 + /** @brief Operation not permitted */ 2859 + #define BPMP_EPERM 1 3016 2860 /** @brief No such file or directory */ 3017 2861 #define BPMP_ENOENT 2 3018 2862 /** @brief No MRQ handler */ ··· 3023 2863 #define BPMP_EIO 5 3024 2864 /** @brief Bad sub-MRQ command */ 3025 2865 #define BPMP_EBADCMD 6 2866 + /** @brief Resource temporarily unavailable */ 2867 + #define BPMP_EAGAIN 11 3026 2868 /** @brief Not enough memory */ 3027 2869 #define BPMP_ENOMEM 12 3028 2870 /** @brief Permission denied */ 3029 2871 #define BPMP_EACCES 13 3030 2872 /** @brief Bad address */ 3031 2873 #define BPMP_EFAULT 14 2874 + /** @brief Resource busy */ 2875 + #define BPMP_EBUSY 16 3032 2876 /** @brief No such device */ 3033 2877 #define BPMP_ENODEV 19 3034 2878 /** @brief Argument is a directory */ ··· 3044 2880 /** @brief Out of range */ 3045 2881 #define BPMP_ERANGE 34 3046 2882 /** @brief Function not implemented */ 3047 - #define BPMP_ENOSYS 38 2883 + #define BPMP_ENOSYS 38 3048 2884 /** @brief Invalid slot */ 3049 2885 #define BPMP_EBADSLT 57 2886 + /** @brief Not supported */ 2887 + #define BPMP_ENOTSUP 134 2888 + /** @brief No such device or address */ 2889 + #define BPMP_ENXIO 140 3050 2890 3051 2891 /** @} */ 2892 + 2893 + #if defined(BPMP_ABI_CHECKS) 2894 + #include "bpmp_abi_checks.h" 2895 + #endif 3052 2896 3053 2897 #endif