Skip to content
GitLab
Menu
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
4a966306
Commit
4a966306
authored
Feb 11, 2016
by
danh-arm
Browse files
Merge pull request #517 from soby-mathew/sm/gic_set_prio_fix
Fix IPRIORITY and ITARGET accessors in GIC drivers
parents
846f2367
e9ec3cec
Changes
9
Hide whitespace changes
Inline
Side-by-side
drivers/arm/gic/common/gic_common.c
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -31,6 +31,7 @@
#include <assert.h>
#include <gic_common.h>
#include <mmio.h>
#include "gic_common_private.h"
/*******************************************************************************
* GIC Distributor interface accessors for reading entire registers
...
...
@@ -239,7 +240,10 @@ void gicd_write_nsacr(uintptr_t base, unsigned int id, unsigned int val)
}
/*******************************************************************************
* GIC Distributor interface accessors for individual interrupt manipulation
* GIC Distributor functions for accessing the GIC registers
* corresponding to a single interrupt ID. These functions use bitwise
* operations or appropriate register accesses to modify or return
* the bit-field corresponding the single interrupt ID.
******************************************************************************/
unsigned
int
gicd_get_igroupr
(
uintptr_t
base
,
unsigned
int
id
)
{
...
...
@@ -306,3 +310,8 @@ void gicd_set_icactiver(uintptr_t base, unsigned int id)
gicd_write_icactiver
(
base
,
id
,
(
1
<<
bit_num
));
}
void
gicd_set_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
pri
)
{
mmio_write_8
(
base
+
GICD_IPRIORITYR
+
id
,
pri
&
GIC_PRI_MASK
);
}
drivers/arm/gic/common/gic_common_private.h
0 → 100644
View file @
4a966306
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of ARM nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GIC_COMMON_PRIVATE_H_
#define GIC_COMMON_PRIVATE_H_
#include <gic_common.h>
#include <mmio.h>
#include <stdint.h>
/*******************************************************************************
* GIC Distributor interface register accessors that are common to GICv3 & GICv2
******************************************************************************/
static
inline
unsigned
int
gicd_read_ctlr
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_CTLR
);
}
static
inline
unsigned
int
gicd_read_typer
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_TYPER
);
}
static
inline
unsigned
int
gicd_read_iidr
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_IIDR
);
}
static
inline
void
gicd_write_ctlr
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICD_CTLR
,
val
);
}
/*******************************************************************************
* GIC Distributor function prototypes for accessing entire registers.
* Note: The raw register values correspond to multiple interrupt IDs and
* the number of interrupt IDs involved depends on the register accessed.
******************************************************************************/
unsigned
int
gicd_read_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_isenabler
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icenabler
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_ispendr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icpendr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_isactiver
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icactiver
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icfgr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_nsacr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_write_igroupr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_isenabler
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icenabler
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_ispendr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icpendr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_isactiver
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icactiver
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icfgr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_nsacr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
/*******************************************************************************
* GIC Distributor function prototypes for accessing the GIC registers
* corresponding to a single interrupt ID. These functions use bitwise
* operations or appropriate register accesses to modify or return
* the bit-field corresponding the single interrupt ID.
******************************************************************************/
unsigned
int
gicd_get_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_clr_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_isenabler
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icenabler
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_ispendr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icpendr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_isactiver
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icactiver
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
pri
);
#endif
/* GIC_COMMON_PRIVATE_H_ */
drivers/arm/gic/gic_v2.c
View file @
4a966306
/*
* Copyright (c) 2013-201
4
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-201
6
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -261,10 +261,6 @@ void gicd_set_icactiver(uintptr_t base, unsigned int id)
*/
void
gicd_set_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
pri
)
{
unsigned
int
reg
=
base
+
GICD_IPRIORITYR
+
(
id
&
~
3
);
unsigned
int
shift
=
(
id
&
3
)
<<
3
;
unsigned
int
reg_val
=
mmio_read_32
(
reg
);
/*
* Enforce ARM recommendation to manage priority values such
* that group1 interrupts always have a lower priority than
...
...
@@ -278,17 +274,12 @@ void gicd_set_ipriorityr(uintptr_t base, unsigned int id, unsigned int pri)
pri
>=
GIC_HIGHEST_SEC_PRIORITY
&&
pri
<=
GIC_LOWEST_SEC_PRIORITY
);
reg_val
&=
~
(
GIC_PRI_MASK
<<
shift
);
reg_val
|=
(
pri
&
GIC_PRI_MASK
)
<<
shift
;
mmio_write_32
(
reg
,
reg_val
);
mmio_write_8
(
base
+
GICD_IPRIORITYR
+
id
,
pri
&
GIC_PRI_MASK
);
}
void
gicd_set_itargetsr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
target
)
{
unsigned
byte_off
=
id
&
((
1
<<
ITARGETSR_SHIFT
)
-
1
);
unsigned
int
reg_val
=
gicd_read_itargetsr
(
base
,
id
);
gicd_write_itargetsr
(
base
,
id
,
reg_val
|
(
target
<<
(
byte_off
<<
3
)));
mmio_write_8
(
base
+
GICD_ITARGETSR
+
id
,
target
&
GIC_TARGET_CPU_MASK
);
}
/*******************************************************************************
...
...
drivers/arm/gic/v2/gicv2_helpers.c
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -33,6 +33,7 @@
#include <assert.h>
#include <debug.h>
#include <gic_common.h>
#include "../common/gic_common_private.h"
#include "gicv2_private.h"
/*
...
...
@@ -101,10 +102,7 @@ void gicd_write_spendsgir(uintptr_t base, unsigned int id, unsigned int val)
*/
void
gicd_set_itargetsr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
target
)
{
unsigned
byte_off
=
id
&
((
1
<<
ITARGETSR_SHIFT
)
-
1
);
unsigned
int
reg_val
=
gicd_read_itargetsr
(
base
,
id
);
gicd_write_itargetsr
(
base
,
id
,
reg_val
|
(
target
<<
(
byte_off
<<
3
)));
mmio_write_8
(
base
+
GICD_ITARGETSR
+
id
,
target
&
GIC_TARGET_CPU_MASK
);
}
/*******************************************************************************
...
...
@@ -166,7 +164,7 @@ void gicv2_secure_spis_configure(uintptr_t gicd_base,
gicd_clr_igroupr
(
gicd_base
,
irq_num
);
/* Set the priority of this interrupt */
gicd_
write
_ipriorityr
(
gicd_base
,
gicd_
set
_ipriorityr
(
gicd_base
,
irq_num
,
GIC_HIGHEST_SEC_PRIORITY
);
...
...
@@ -213,7 +211,7 @@ void gicv2_secure_ppi_sgi_setup(uintptr_t gicd_base,
sec_ppi_sgi_mask
|=
1U
<<
irq_num
;
/* Set the priority of this interrupt */
gicd_
write
_ipriorityr
(
gicd_base
,
gicd_
set
_ipriorityr
(
gicd_base
,
irq_num
,
GIC_HIGHEST_SEC_PRIORITY
);
}
...
...
drivers/arm/gic/v2/gicv2_main.c
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -34,6 +34,7 @@
#include <debug.h>
#include <gic_common.h>
#include <gicv2.h>
#include "../common/gic_common_private.h"
#include "gicv2_private.h"
static
const
gicv2_driver_data_t
*
driver_data
;
...
...
drivers/arm/gic/v3/gicv3_helpers.c
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -33,6 +33,7 @@
#include <assert.h>
#include <debug.h>
#include <gic_common.h>
#include "../common/gic_common_private.h"
#include "gicv3_private.h"
/*
...
...
@@ -194,6 +195,15 @@ void gicr_set_isenabler0(uintptr_t base, unsigned int id)
gicr_write_isenabler0
(
base
,
(
1
<<
bit_num
));
}
/*
* Accessor to set the byte corresponding to interrupt ID
* in GIC Re-distributor IPRIORITYR.
*/
void
gicr_set_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
pri
)
{
mmio_write_8
(
base
+
GICR_IPRIORITYR
+
id
,
pri
&
GIC_PRI_MASK
);
}
/******************************************************************************
* This function marks the core as awake in the re-distributor and
* ensures that the interface is active.
...
...
@@ -330,7 +340,7 @@ void gicv3_secure_spis_configure(uintptr_t gicd_base,
gicd_clr_igrpmodr
(
gicd_base
,
irq_num
);
/* Set the priority of this interrupt */
gicd_
write
_ipriorityr
(
gicd_base
,
gicd_
set
_ipriorityr
(
gicd_base
,
irq_num
,
GIC_HIGHEST_SEC_PRIORITY
);
...
...
@@ -404,7 +414,7 @@ void gicv3_secure_ppi_sgi_configure(uintptr_t gicr_base,
gicr_clr_igrpmodr0
(
gicr_base
,
irq_num
);
/* Set the priority of this interrupt */
gicr_
write
_ipriorityr
(
gicr_base
,
gicr_
set
_ipriorityr
(
gicr_base
,
irq_num
,
GIC_HIGHEST_SEC_PRIORITY
);
...
...
drivers/arm/gic/v3/gicv3_main.c
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -34,6 +34,7 @@
#include <debug.h>
#include <gic_common.h>
#include <gicv3.h>
#include "../common/gic_common_private.h"
#include "gicv3_private.h"
static
const
gicv3_driver_data_t
*
driver_data
;
...
...
drivers/arm/gic/v3/gicv3_private.h
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -84,16 +84,24 @@
((typer_val >> 32) & 0xffffff))
/*******************************************************************************
* Private function prototypes
* Private GICv3 function prototypes for accessing entire registers.
* Note: The raw register values correspond to multiple interrupt IDs and
* 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
* corresponding to a single interrupt ID. These functions use bitwise
* operations or appropriate register accesses to modify or return
* the bit-field corresponding the single interrupt ID.
******************************************************************************/
unsigned
int
gicd_get_igrpmodr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicr_get_igrpmodr0
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicr_get_igroupr0
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicv3_get_pending_grp1_interrupt_id
(
unsigned
int
pending_grp
);
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
);
void
gicd_set_igrpmodr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicr_set_igrpmodr0
(
uintptr_t
base
,
unsigned
int
id
);
void
gicr_set_isenabler0
(
uintptr_t
base
,
unsigned
int
id
);
...
...
@@ -101,6 +109,11 @@ void gicr_set_igroupr0(uintptr_t base, unsigned int id);
void
gicd_clr_igrpmodr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicr_clr_igrpmodr0
(
uintptr_t
base
,
unsigned
int
id
);
void
gicr_clr_igroupr0
(
uintptr_t
base
,
unsigned
int
id
);
void
gicr_set_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
pri
);
/*******************************************************************************
* Private GICv3 helper function prototypes
******************************************************************************/
void
gicv3_spis_configure_defaults
(
uintptr_t
gicd_base
);
void
gicv3_ppi_sgi_configure_defaults
(
uintptr_t
gicr_base
);
void
gicv3_secure_spis_configure
(
uintptr_t
gicd_base
,
...
...
@@ -179,6 +192,11 @@ static inline void gicr_write_waker(uintptr_t base, unsigned int val)
mmio_write_32
(
base
+
GICR_WAKER
,
val
);
}
/*******************************************************************************
* GIC Re-distributor functions for accessing entire registers.
* Note: The raw register values correspond to multiple interrupt IDs and
* the number of interrupt IDs involved depends on the register accessed.
******************************************************************************/
static
inline
unsigned
int
gicr_read_icenabler0
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICR_ICENABLER0
);
...
...
include/drivers/arm/gic_common.h
View file @
4a966306
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2016
, ARM Limited and Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
...
...
@@ -107,67 +107,4 @@
(GIC_HIGHEST_NS_PRIORITY << 16) | \
(GIC_HIGHEST_NS_PRIORITY << 24))
#ifndef __ASSEMBLY__
#include <mmio.h>
#include <stdint.h>
/*******************************************************************************
* GIC Distributor interface register accessors that are common to GICv3 & GICv2
******************************************************************************/
static
inline
unsigned
int
gicd_read_ctlr
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_CTLR
);
}
static
inline
unsigned
int
gicd_read_typer
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_TYPER
);
}
static
inline
unsigned
int
gicd_read_iidr
(
uintptr_t
base
)
{
return
mmio_read_32
(
base
+
GICD_IIDR
);
}
static
inline
void
gicd_write_ctlr
(
uintptr_t
base
,
unsigned
int
val
)
{
mmio_write_32
(
base
+
GICD_CTLR
,
val
);
}
/*******************************************************************************
* GIC Distributor function prototypes
******************************************************************************/
unsigned
int
gicd_read_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_isenabler
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icenabler
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_ispendr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icpendr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_isactiver
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icactiver
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_icfgr
(
uintptr_t
base
,
unsigned
int
id
);
unsigned
int
gicd_read_nsacr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_write_igroupr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_isenabler
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icenabler
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_ispendr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icpendr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_isactiver
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icactiver
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_ipriorityr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_icfgr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
void
gicd_write_nsacr
(
uintptr_t
base
,
unsigned
int
id
,
unsigned
int
val
);
unsigned
int
gicd_get_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_clr_igroupr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_isenabler
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icenabler
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_ispendr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icpendr
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_isactiver
(
uintptr_t
base
,
unsigned
int
id
);
void
gicd_set_icactiver
(
uintptr_t
base
,
unsigned
int
id
);
#endif
/* __ASSEMBLY__ */
#endif
/* __GIC_COMMON_H__ */
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