Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
50d8cf26
Commit
50d8cf26
authored
4 years ago
by
joanna.farley
Committed by
TrustedFirmware Code Review
4 years ago
Browse files
Options
Download
Plain Diff
Merge "TF-A GICv3 driver: Change API for GICR_IPRIORITYR accessors" into integration
parents
0b18f8b2
e2a4027b
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
drivers/arm/gic/v3/gicrv3_helpers.c
+14
-0
drivers/arm/gic/v3/gicrv3_helpers.c
drivers/arm/gic/v3/gicv3_main.c
+4
-2
drivers/arm/gic/v3/gicv3_main.c
drivers/arm/gic/v3/gicv3_private.h
+126
-5
drivers/arm/gic/v3/gicv3_private.h
with
144 additions
and
7 deletions
+144
-7
drivers/arm/gic/v3/gicrv3_helpers.c
View file @
50d8cf26
...
...
@@ -17,6 +17,20 @@
* the number of interrupt `id`s involved depends on the register accessed.
******************************************************************************/
/*
* Accessors to read/write the GIC Redistributor IPRIORITYR and IPRIORITYRE
* register corresponding to the interrupt `id`, 4 interrupts IDs at a time.
*/
unsigned
int
gicr_read_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
)
{
return
GICR_READ
(
IPRIORITY
,
base
,
id
);
}
void
gicr_write_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
)
{
GICR_WRITE
(
IPRIORITY
,
base
,
id
,
val
);
}
/*
* Accessor to set the byte corresponding to interrupt `id`
* in GIC Redistributor IPRIORITYR and IPRIORITYRE.
...
...
This diff is collapsed.
Click to expand it.
drivers/arm/gic/v3/gicv3_main.c
View file @
50d8cf26
...
...
@@ -593,7 +593,8 @@ void gicv3_rdistif_save(unsigned int proc_num,
/* 4 interrupt IDs per GICR_IPRIORITYR register */
regs_num
=
ppi_regs_num
<<
3
;
for
(
i
=
0U
;
i
<
regs_num
;
++
i
)
{
SAVE_GICR_REG
(
gicr_base
,
rdist_ctx
,
ipriorityr
,
i
);
rdist_ctx
->
gicr_ipriorityr
[
i
]
=
gicr_ipriorityr_read
(
gicr_base
,
i
);
}
/*
...
...
@@ -678,7 +679,8 @@ void gicv3_rdistif_init_restore(unsigned int proc_num,
/* 4 interrupt IDs per GICR_IPRIORITYR register */
regs_num
=
ppi_regs_num
<<
3
;
for
(
i
=
0U
;
i
<
regs_num
;
++
i
)
{
RESTORE_GICR_REG
(
gicr_base
,
rdist_ctx
,
ipriorityr
,
i
);
gicr_ipriorityr_write
(
gicr_base
,
i
,
rdist_ctx
->
gicr_ipriorityr
[
i
]);
}
/* 16 interrupt IDs per GICR_ICFGR register */
...
...
This diff is collapsed.
Click to expand it.
drivers/arm/gic/v3/gicv3_private.h
View file @
50d8cf26
...
...
@@ -126,7 +126,7 @@
#define GICR_OFFSET(REG, id) \
(GICR_##REG##R + (((uintptr_t)(id) >> REG##R_SHIFT) << 2))
#endif
#endif
/* GIC_EXT_INTID */
/* Read/Write GIC Redistributor register corresponding to its interrupt ID */
#define GICR_READ(REG, base, id) \
...
...
@@ -136,7 +136,7 @@
mmio_write_8((base) + GICR_OFFSET_8(REG, (id)), (val))
#define GICR_WRITE(REG, base, id, val) \
mmio_write((base) + GICR_OFFSET(REG, (id)), (val))
mmio_write
_32
((base) + GICR_OFFSET(REG, (id)), (val))
/*
* Bit operations on GIC Redistributor register
...
...
@@ -202,7 +202,9 @@ extern const gicv3_driver_data_t *gicv3_driver_data;
* the number of interrupt IDs involved depends on the register accessed.
******************************************************************************/
unsigned
int
gicd_read_igrpmodr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicr_read_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_write_igrpmodr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicr_write_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
/*******************************************************************************
* Private GICv3 function prototypes for accessing the GIC registers
...
...
@@ -357,6 +359,19 @@ void arm_gicv3_distif_post_restore(unsigned int rdist_proc_num);
* the number of interrupt IDs involved depends on the register accessed.
******************************************************************************/
/*
* Accessors to read/write GIC Redistributor ICENABLER0 register
*/
static
inline
unsigned
int
gicr_read_icenabler0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ICENABLER0
);
}
static
inline
void
gicr_write_icenabler0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ICENABLER0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor ICENABLER0 and ICENABLERE
* register corresponding to its number
...
...
@@ -374,7 +389,30 @@ static inline void gicr_write_icenabler(uintptr_t base, unsigned int reg_num,
}
/*
* Accessor to read/write GIC Redistributor ICFGR0, ICFGR1 and ICFGRE
* Accessors to read/write GIC Redistributor ICFGR0, ICFGR1 registers
*/
static
inline
unsigned
int
gicr_read_icfgr0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ICFGR0
);
}
static
inline
unsigned
int
gicr_read_icfgr1
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ICFGR1
);
}
static
inline
void
gicr_write_icfgr0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ICFGR0
,
val
);
}
static
inline
void
gicr_write_icfgr1
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ICFGR1
,
val
);
}
/*
* Accessors to read/write GIC Redistributor ICFGR0, ICFGR1 and ICFGRE
* register corresponding to its number
*/
static
inline
unsigned
int
gicr_read_icfgr
(
uintptr_t
base
,
unsigned
int
reg_num
)
...
...
@@ -388,6 +426,37 @@ static inline void gicr_write_icfgr(uintptr_t base, unsigned int reg_num,
mmio_write_32
(
base
+
GICR_ICFGR
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessor to write GIC Redistributor ICPENDR0 register
*/
static
inline
void
gicr_write_icpendr0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ICPENDR0
,
val
);
}
/*
* Accessor to write GIC Redistributor ICPENDR0 and ICPENDRE
* register corresponding to its number
*/
static
inline
void
gicr_write_icpendr
(
uintptr_t
base
,
unsigned
int
reg_num
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ICPENDR
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessors to read/write GIC Redistributor IGROUPR0 register
*/
static
inline
unsigned
int
gicr_read_igroupr0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_IGROUPR0
);
}
static
inline
void
gicr_write_igroupr0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_IGROUPR0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor IGROUPR0 and IGROUPRE
* register corresponding to its number
...
...
@@ -404,6 +473,19 @@ static inline void gicr_write_igroupr(uintptr_t base, unsigned int reg_num,
mmio_write_32
(
base
+
GICR_IGROUPR
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessors to read/write GIC Redistributor IGRPMODR0 register
*/
static
inline
unsigned
int
gicr_read_igrpmodr0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_IGRPMODR0
);
}
static
inline
void
gicr_write_igrpmodr0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_IGRPMODR0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor IGRPMODR0 and IGRPMODRE
* register corresponding to its number
...
...
@@ -424,18 +506,31 @@ static inline void gicr_write_igrpmodr(uintptr_t base, unsigned int reg_num,
* Accessors to read/write the GIC Redistributor IPRIORITYR(E) register
* corresponding to its number, 4 interrupts IDs at a time.
*/
static
inline
unsigned
int
gicr_
read_
ipriorityr
(
uintptr_t
base
,
static
inline
unsigned
int
gicr_ipriorityr
_read
(
uintptr_t
base
,
unsigned
int
reg_num
)
{
return
mmio_read_32
(
base
+
GICR_IPRIORITYR
+
(
reg_num
<<
2
));
}
static
inline
void
gicr_
write_
ipriorityr
(
uintptr_t
base
,
unsigned
int
reg_num
,
static
inline
void
gicr_ipriorityr
_write
(
uintptr_t
base
,
unsigned
int
reg_num
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_IPRIORITYR
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessors to read/write GIC Redistributor ISACTIVER0 register
*/
static
inline
unsigned
int
gicr_read_isactiver0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ISACTIVER0
);
}
static
inline
void
gicr_write_isactiver0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ISACTIVER0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor ISACTIVER0 and ISACTIVERE
* register corresponding to its number
...
...
@@ -452,6 +547,19 @@ static inline void gicr_write_isactiver(uintptr_t base, unsigned int reg_num,
mmio_write_32
(
base
+
GICR_ISACTIVER
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessors to read/write GIC Redistributor ISENABLER0 register
*/
static
inline
unsigned
int
gicr_read_isenabler0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ISENABLER0
);
}
static
inline
void
gicr_write_isenabler0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ISENABLER0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor ISENABLER0 and ISENABLERE
* register corresponding to its number
...
...
@@ -468,6 +576,19 @@ static inline void gicr_write_isenabler(uintptr_t base, unsigned int reg_num,
mmio_write_32
(
base
+
GICR_ISENABLER
+
(
reg_num
<<
2
),
val
);
}
/*
* Accessors to read/write GIC Redistributor ISPENDR0 register
*/
static
inline
unsigned
int
gicr_read_ispendr0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ISPENDR0
);
}
static
inline
void
gicr_write_ispendr0
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICR_ISPENDR0
,
val
);
}
/*
* Accessors to read/write GIC Redistributor ISPENDR0 and ISPENDRE
* register corresponding to its number
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help