Skip to content

Commit 47ffe57

Browse files
quic-chadkcarlescufi
authored andcommitted
drivers: gic: Redistributor Power Register
GIC-600 and later interrupt controllers have an additional GICR_PWRR register that controls the power up sequencing of the redistributors. Added logic to gicv3_rdist_enable to configure GICR_PWRR if required. Signed-off-by: Chad Karaginides <[email protected]>
1 parent 0fead68 commit 47ffe57

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

drivers/interrupt_controller/intc_gicv3.c

+10
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,16 @@ static void gicv3_rdist_enable(mem_addr_t rdist)
299299
return;
300300
}
301301

302+
if (GICR_IIDR_PRODUCT_ID_GET(sys_read32(rdist + GICR_IIDR)) >= 0x2) {
303+
if (sys_read32(rdist + GICR_PWRR) & BIT(GICR_PWRR_RDPD)) {
304+
sys_set_bit(rdist + GICR_PWRR, GICR_PWRR_RDAG);
305+
sys_clear_bit(rdist + GICR_PWRR, GICR_PWRR_RDPD);
306+
while (sys_read32(rdist + GICR_PWRR) & BIT(GICR_PWRR_RDPD)) {
307+
;
308+
}
309+
}
310+
}
311+
302312
sys_clear_bit(rdist + GICR_WAKER, GICR_WAKER_PS);
303313
while (sys_read32(rdist + GICR_WAKER) & BIT(GICR_WAKER_CA)) {
304314
;

drivers/interrupt_controller/intc_gicv3_priv.h

+11
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#define GICR_TYPER 0x0008
4242
#define GICR_STATUSR 0x0010
4343
#define GICR_WAKER 0x0014
44+
#define GICR_PWRR 0x0024
4445
#define GICR_PROPBASER 0x0070
4546
#define GICR_PENDBASER 0x0078
4647

@@ -62,6 +63,11 @@
6263
#define GICR_CTLR_ENABLE_LPIS BIT(0)
6364
#define GICR_CTLR_RWP 3
6465

66+
/* GICR_IIDR */
67+
#define GICR_IIDR_PRODUCT_ID_SHIFT 24
68+
#define GICR_IIDR_PRODUCT_ID_MASK 0xFFUL
69+
#define GICR_IIDR_PRODUCT_ID_GET(_val) MASK_GET(_val, GICR_IIDR_PRODUCT_ID)
70+
6571
/* GICR_TYPER */
6672
#define GICR_TYPER_AFFINITY_VALUE_SHIFT 32
6773
#define GICR_TYPER_AFFINITY_VALUE_MASK 0xFFFFFFFFUL
@@ -77,6 +83,11 @@
7783
#define GICR_WAKER_PS 1
7884
#define GICR_WAKER_CA 2
7985

86+
/* GICR_PWRR */
87+
#define GICR_PWRR_RDPD 0
88+
#define GICR_PWRR_RDAG 1
89+
#define GICR_PWRR_RDGPO 3
90+
8091
/* GICR_PROPBASER */
8192
#define GITR_PROPBASER_ID_BITS_MASK 0x1fUL
8293
#define GITR_PROPBASER_INNER_CACHE_SHIFT 7

0 commit comments

Comments
 (0)