Skip to content

Commit af6a1cf

Browse files
author
Marc Zyngier
committed
LoongArch: Provisionally add ACPICA data structures
The LoongArch architecture is using ACPI, but the spec containing the required updates still is in an unreleased state. Instead of preventing the inclusion of the IRQ support into the kernel, add the missing bits to the arch-specific parts of the ACPICA support. Once the ACPICA bits are updated to the version that supports LoongArch, these bits can eventually be removed. Signed-off-by: Marc Zyngier <[email protected]> Signed-off-by: Jianmin Lv <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent a111daf commit af6a1cf

File tree

1 file changed

+142
-0
lines changed
  • arch/loongarch/include/asm

1 file changed

+142
-0
lines changed

arch/loongarch/include/asm/acpi.h

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,148 @@ static inline bool acpi_has_cpu_in_madt(void)
3131

3232
extern struct list_head acpi_wakeup_device_list;
3333

34+
/*
35+
* Temporary definitions until the core ACPICA code gets updated (see
36+
37+
* follow-ups for the "rationale").
38+
*
39+
* Once the "legal reasons" are cleared and that the code is merged,
40+
* this can be dropped entierely.
41+
*/
42+
#if (ACPI_CA_VERSION == 0x20220331 && !defined(LOONGARCH_ACPICA_EXT))
43+
44+
#define LOONGARCH_ACPICA_EXT 1
45+
46+
#define ACPI_MADT_TYPE_CORE_PIC 17
47+
#define ACPI_MADT_TYPE_LIO_PIC 18
48+
#define ACPI_MADT_TYPE_HT_PIC 19
49+
#define ACPI_MADT_TYPE_EIO_PIC 20
50+
#define ACPI_MADT_TYPE_MSI_PIC 21
51+
#define ACPI_MADT_TYPE_BIO_PIC 22
52+
#define ACPI_MADT_TYPE_LPC_PIC 23
53+
54+
/* Values for Version field above */
55+
56+
enum acpi_madt_core_pic_version {
57+
ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
58+
ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
59+
ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
60+
};
61+
62+
enum acpi_madt_lio_pic_version {
63+
ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
64+
ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
65+
ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
66+
};
67+
68+
enum acpi_madt_eio_pic_version {
69+
ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
70+
ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
71+
ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
72+
};
73+
74+
enum acpi_madt_ht_pic_version {
75+
ACPI_MADT_HT_PIC_VERSION_NONE = 0,
76+
ACPI_MADT_HT_PIC_VERSION_V1 = 1,
77+
ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
78+
};
79+
80+
enum acpi_madt_bio_pic_version {
81+
ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
82+
ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
83+
ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
84+
};
85+
86+
enum acpi_madt_msi_pic_version {
87+
ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
88+
ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
89+
ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
90+
};
91+
92+
enum acpi_madt_lpc_pic_version {
93+
ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
94+
ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
95+
ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */
96+
};
97+
98+
#pragma pack(1)
99+
100+
/* Core Interrupt Controller */
101+
102+
struct acpi_madt_core_pic {
103+
struct acpi_subtable_header header;
104+
u8 version;
105+
u32 processor_id;
106+
u32 core_id;
107+
u32 flags;
108+
};
109+
110+
/* Legacy I/O Interrupt Controller */
111+
112+
struct acpi_madt_lio_pic {
113+
struct acpi_subtable_header header;
114+
u8 version;
115+
u64 address;
116+
u16 size;
117+
u8 cascade[2];
118+
u32 cascade_map[2];
119+
};
120+
121+
/* Extend I/O Interrupt Controller */
122+
123+
struct acpi_madt_eio_pic {
124+
struct acpi_subtable_header header;
125+
u8 version;
126+
u8 cascade;
127+
u8 node;
128+
u64 node_map;
129+
};
130+
131+
/* HT Interrupt Controller */
132+
133+
struct acpi_madt_ht_pic {
134+
struct acpi_subtable_header header;
135+
u8 version;
136+
u64 address;
137+
u16 size;
138+
u8 cascade[8];
139+
};
140+
141+
/* Bridge I/O Interrupt Controller */
142+
143+
struct acpi_madt_bio_pic {
144+
struct acpi_subtable_header header;
145+
u8 version;
146+
u64 address;
147+
u16 size;
148+
u16 id;
149+
u16 gsi_base;
150+
};
151+
152+
/* MSI Interrupt Controller */
153+
154+
struct acpi_madt_msi_pic {
155+
struct acpi_subtable_header header;
156+
u8 version;
157+
u64 msg_address;
158+
u32 start;
159+
u32 count;
160+
};
161+
162+
/* LPC Interrupt Controller */
163+
164+
struct acpi_madt_lpc_pic {
165+
struct acpi_subtable_header header;
166+
u8 version;
167+
u64 address;
168+
u16 size;
169+
u8 cascade;
170+
};
171+
172+
#pragma pack()
173+
174+
#endif
175+
34176
#endif /* !CONFIG_ACPI */
35177

36178
#define ACPI_TABLE_UPGRADE_MAX_PHYS ARCH_LOW_ADDRESS_LIMIT

0 commit comments

Comments
 (0)