xref: /aosp_15_r20/external/executorch/backends/qualcomm/serialization/qc_schema.py (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1# Copyright (c) Qualcomm Innovation Center, Inc.
2# All rights reserved
3#
4# This source code is licensed under the BSD-style license found in the
5# LICENSE file in the root directory of this source tree.
6
7"""
8Please refer to executorch/backends/qualcomm/serialization/schema.fbs for the schema definitions
9"""
10
11from dataclasses import dataclass
12from enum import IntEnum, unique
13
14
15@dataclass
16class BinaryInfo:
17    signature: str = ""
18    data: bytes = None
19
20
21@unique
22class HtpArch(IntEnum):
23    NONE = 0
24    V68 = 68
25    V69 = 69
26    V73 = 73
27    V75 = 75
28
29
30@dataclass
31class HtpInfo:
32    htp_arch: HtpArch = HtpArch.NONE
33    vtcm_size_in_mb: int = 0
34
35
36@unique
37class QcomChipset(IntEnum):
38    UNKNOWN_SM = 0
39    SM8450 = 36  # v69
40    SM8475 = 42  # v69
41    SM8550 = 43  # v73
42    SSG2115P = 46  # v73
43    SM8650 = 57  # v75
44    SA8295 = 39  # v68
45
46
47@dataclass
48class SocInfo:
49    soc_model: QcomChipset = QcomChipset.UNKNOWN_SM
50    htp_info: HtpInfo = HtpInfo()
51
52
53_soc_info_table = {
54    QcomChipset.SM8450: SocInfo(QcomChipset.SM8450, HtpInfo(HtpArch.V69, 8)),
55    QcomChipset.SM8475: SocInfo(QcomChipset.SM8475, HtpInfo(HtpArch.V69, 8)),
56    QcomChipset.SM8550: SocInfo(QcomChipset.SM8550, HtpInfo(HtpArch.V73, 8)),
57    QcomChipset.SM8650: SocInfo(QcomChipset.SM8650, HtpInfo(HtpArch.V75, 8)),
58    QcomChipset.SSG2115P: SocInfo(QcomChipset.SSG2115P, HtpInfo(HtpArch.V73, 2)),
59    QcomChipset.SA8295: SocInfo(QcomChipset.SA8295, HtpInfo(HtpArch.V68, 8)),
60}
61
62
63@unique
64class QnnExecuTorchHtpPerformanceMode(IntEnum):
65    kHtpDefault = 0
66    kHtpSustainedHighPerformance = 1
67    kHtpBurst = 2
68    kHtpHighPerformance = 3
69    kHtpPowerSaver = 4
70    kHtpLowPowerSaver = 5
71    kHtpHighPowerSaver = 6
72    kHtpLowBalanced = 7
73    kHtpBalanced = 8
74
75
76@unique
77class QnnExecuTorchHtpPrecision(IntEnum):
78    kHtpQuantized = 0
79    kHtpFp16 = 1
80
81
82@unique
83class QnnExecuTorchHtpPdSession(IntEnum):
84    kHtpUnsignedPd = 0
85    kHtpSignedPd = 1
86
87
88@unique
89class QnnExecuTorchBackendType(IntEnum):
90    kUndefinedBackend = 0
91    kGpuBackend = 1
92    kHtpBackend = 2
93    kDspBackend = 3
94
95
96@dataclass
97class QnnExecuTorchHtpBackendOptions:
98    max_sf_buf_size: int = 0
99    performance_mode: QnnExecuTorchHtpPerformanceMode = (
100        QnnExecuTorchHtpPerformanceMode.kHtpDefault
101    )
102    precision: QnnExecuTorchHtpPrecision = QnnExecuTorchHtpPrecision.kHtpQuantized
103    pd_session: QnnExecuTorchHtpPdSession = QnnExecuTorchHtpPdSession.kHtpUnsignedPd
104    skel_library_dir: str = ""
105    use_conv_hmx: bool = True
106    use_dlbc: bool = False
107    use_fold_relu: bool = True
108    use_multi_contexts: bool = False
109    use_weight_sharing: bool = False
110
111
112@unique
113class QnnExecuTorchLogLevel(IntEnum):
114    kLogOff = 0
115    kLogLevelError = 1
116    kLogLevelWarn = 2
117    kLogLevelInfo = 3
118    kLogLevelVerbose = 4
119    kLogLevelDebug = 5
120
121
122@unique
123class QnnExecuTorchProfileLevel(IntEnum):
124    kProfileOff = 0
125    kProfileBasic = 1
126    kProfileDetailed = 2
127    kProfileOptrace = 3
128
129
130@dataclass
131class QnnExecuTorchBackendOptions:
132    backend_type: QnnExecuTorchBackendType
133    htp_options: QnnExecuTorchHtpBackendOptions
134
135
136@dataclass
137class QnnExecuTorchOptions:
138    soc_info: SocInfo
139    backend_options: QnnExecuTorchBackendOptions
140    graph_name: str = ""
141    library_path: str = ""
142    log_level: QnnExecuTorchLogLevel = QnnExecuTorchLogLevel.kLogOff
143    online_prepare: bool = False
144    dump_intermediate_outputs: bool = False
145    profile_level: QnnExecuTorchProfileLevel = QnnExecuTorchProfileLevel.kProfileOff
146    shared_buffer: bool = False
147    is_from_context_binary: bool = False
148    multiple_graphs: bool = False
149