diff --git a/plat/xen/arm/setup64.c b/plat/xen/arm/setup64.c index 9aeaf743b2..3134484504 100644 --- a/plat/xen/arm/setup64.c +++ b/plat/xen/arm/setup64.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -204,6 +205,28 @@ static inline void _get_cmdline(struct ukplat_bootinfo *bi) bi->cmdline_len = cmdline_len; } +int uk_intctlr_plat_probe(void *in, void *out) +{ + struct uk_intctlr_plat_data *dout = (struct uk_intctlr_plat_data *)out; + struct uk_intctlr_plat_data *din = (struct uk_intctlr_plat_data *)in; + + if (!in || !out) + return -EINVAL; + +#if defined(__arm__) + dout->dist_addr = to_virt((long)fdt64_ld(din->dist_addr)); + dout->rdist_addr = to_virt((long)fdt64_ld(din->rdist_addr)); +#else + set_pgt_entry(&fixmap_pgtable[l2_pgt_idx(FIX_GIC_START)], + ((din->dist_addr & L2_MASK) | BLOCK_DEV_ATTR | L2_BLOCK)); + dout->dist_addr = (FIX_GIC_START + (din->dist_addr & L2_OFFSET)); + dout->rdist_addr = (FIX_GIC_START + (din->rdist_addr & L2_OFFSET)); +#endif + /* Setting memory barrier to get access to mapped pages */ + wmb(); + return 0; +} + static int _init_mem(struct ukplat_bootinfo *const bi, paddr_t physical_offset) { int rc;