diff options
author | Alistair Delva <adelva@google.com> | 2021-02-16 21:01:22 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-02-16 21:01:22 +0000 |
commit | efb2826bb8160e2d8e0fcec85133a7468484f9fd (patch) | |
tree | 37a21c69306801ee7cdda5167a30896c8740155b /plat/intel/soc/agilex | |
parent | b00a71fc312c9781fa6f404dccfb55b062b2ccac (diff) | |
parent | faa476c0caaa598afa5a6109d17102db5fe35ec6 (diff) | |
download | platform_external_arm-trusted-firmware-master.tar.gz platform_external_arm-trusted-firmware-master.tar.bz2 platform_external_arm-trusted-firmware-master.zip |
Merge branch 'aosp/upstream-master' into HEAD am: faa476c0caHEADandroid-s-beta-5android-s-beta-4android-s-beta-3android-s-beta-2android-s-beta-1mastermain-cg-testing-releaseandroid-s-beta-5android-s-beta-4
Original change: https://android-review.googlesource.com/c/platform/external/arm-trusted-firmware/+/1589611
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I3a25534ceed4f8e188510641080d8b8ed49b8f62
Diffstat (limited to 'plat/intel/soc/agilex')
-rw-r--r-- | plat/intel/soc/agilex/bl2_plat_setup.c | 13 | ||||
-rw-r--r-- | plat/intel/soc/agilex/bl31_plat_setup.c | 45 | ||||
-rw-r--r-- | plat/intel/soc/agilex/include/agilex_clock_manager.h | 1 | ||||
-rw-r--r-- | plat/intel/soc/agilex/include/agilex_mmc.h | 7 | ||||
-rw-r--r-- | plat/intel/soc/agilex/include/socfpga_plat_def.h | 1 | ||||
-rw-r--r-- | plat/intel/soc/agilex/platform.mk | 22 | ||||
-rw-r--r-- | plat/intel/soc/agilex/soc/agilex_clock_manager.c | 76 | ||||
-rw-r--r-- | plat/intel/soc/agilex/soc/agilex_mmc.c | 19 | ||||
-rw-r--r-- | plat/intel/soc/agilex/soc/agilex_pinmux.c | 8 |
9 files changed, 134 insertions, 58 deletions
diff --git a/plat/intel/soc/agilex/bl2_plat_setup.c b/plat/intel/soc/agilex/bl2_plat_setup.c index 9587d4859..f00294706 100644 --- a/plat/intel/soc/agilex/bl2_plat_setup.c +++ b/plat/intel/soc/agilex/bl2_plat_setup.c @@ -1,6 +1,6 @@ /* - * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. - * Copyright (c) 2019, Intel Corporation. All rights reserved. + * Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2019-2020, Intel Corporation. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -15,11 +15,13 @@ #include <drivers/ti/uart/uart_16550.h> #include <lib/xlat_tables/xlat_tables.h> +#include "agilex_mmc.h" #include "agilex_clock_manager.h" #include "agilex_memory_controller.h" #include "agilex_pinmux.h" #include "ccu/ncore_ccu.h" #include "qspi/cadence_qspi.h" +#include "socfpga_emac.h" #include "socfpga_handoff.h" #include "socfpga_mailbox.h" #include "socfpga_private.h" @@ -46,12 +48,12 @@ const mmap_region_t agilex_plat_mmap[] = { {0}, }; -boot_source_type boot_source; +boot_source_type boot_source = BOOT_SOURCE; void bl2_el3_early_platform_setup(u_register_t x0, u_register_t x1, u_register_t x2, u_register_t x4) { - static console_16550_t console; + static console_t console; handoff reverse_handoff_ptr; generic_delay_timer_init(); @@ -59,7 +61,6 @@ void bl2_el3_early_platform_setup(u_register_t x0, u_register_t x1, if (socfpga_get_handoff(&reverse_handoff_ptr)) return; config_pinmux(&reverse_handoff_ptr); - boot_source = reverse_handoff_ptr.boot_source; config_clkmgr_handoff(&reverse_handoff_ptr); enable_nonsecure_access(); @@ -73,8 +74,10 @@ void bl2_el3_early_platform_setup(u_register_t x0, u_register_t x1, socfpga_delay_timer_init(); init_ncore_ccu(); + socfpga_emac_init(); init_hard_memory_controller(); mailbox_init(); + agx_mmc_init(); if (!intel_mailbox_is_fpga_not_ready()) socfpga_bridges_enable(); diff --git a/plat/intel/soc/agilex/bl31_plat_setup.c b/plat/intel/soc/agilex/bl31_plat_setup.c index 375483dd4..168236b64 100644 --- a/plat/intel/soc/agilex/bl31_plat_setup.c +++ b/plat/intel/soc/agilex/bl31_plat_setup.c @@ -1,6 +1,6 @@ /* - * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. - * Copyright (c) 2019, Intel Corporation. All rights reserved. + * Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2019-2020, Intel Corporation. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -11,8 +11,11 @@ #include <common/bl_common.h> #include <drivers/arm/gicv2.h> #include <drivers/ti/uart/uart_16550.h> +#include <lib/mmio.h> #include <lib/xlat_tables/xlat_tables.h> +#include "socfpga_mailbox.h" +#include "socfpga_private.h" static entry_point_info_t bl32_image_ep_info; static entry_point_info_t bl33_image_ep_info; @@ -34,7 +37,9 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type) void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3) { - static console_16550_t console; + static console_t console; + + mmio_write_64(PLAT_SEC_ENTRY, PLAT_SEC_WARM_ENTRY); console_16550_register(PLAT_UART0_BASE, PLAT_UART_CLOCK, PLAT_BAUDRATE, &console); @@ -44,23 +49,33 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, void *from_bl2 = (void *) arg0; bl_params_t *params_from_bl2 = (bl_params_t *)from_bl2; - assert(params_from_bl2 != NULL); - assert(params_from_bl2->h.type == PARAM_BL_PARAMS); - assert(params_from_bl2->h.version >= VERSION_2); /* * Copy BL32 (if populated by BL31) and BL33 entry point information. * They are stored in Secure RAM, in BL31's address space. */ - bl_params_node_t *bl_params = params_from_bl2->head; + if (params_from_bl2->h.type == PARAM_BL_PARAMS && + params_from_bl2->h.version >= VERSION_2) { + + bl_params_node_t *bl_params = params_from_bl2->head; + + while (bl_params) { + if (bl_params->image_id == BL33_IMAGE_ID) + bl33_image_ep_info = *bl_params->ep_info; - while (bl_params) { - if (bl_params->image_id == BL33_IMAGE_ID) - bl33_image_ep_info = *bl_params->ep_info; + bl_params = bl_params->next_params_info; + } + } else { + struct socfpga_bl31_params *arg_from_bl2 = + (struct socfpga_bl31_params *) from_bl2; - bl_params = bl_params->next_params_info; + assert(arg_from_bl2->h.type == PARAM_BL31); + assert(arg_from_bl2->h.version >= VERSION_1); + + bl32_image_ep_info = *arg_from_bl2->bl32_ep_info; + bl33_image_ep_info = *arg_from_bl2->bl33_ep_info; } SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE); } @@ -86,11 +101,19 @@ static const gicv2_driver_data_t plat_gicv2_gic_data = { ******************************************************************************/ void bl31_platform_setup(void) { + socfpga_delay_timer_init(); + /* Initialize the gic cpu and distributor interfaces */ gicv2_driver_init(&plat_gicv2_gic_data); gicv2_distif_init(); gicv2_pcpu_distif_init(); gicv2_cpuif_enable(); + + /* Signal secondary CPUs to jump to BL31 (BL2 = U-boot SPL) */ + mmio_write_64(PLAT_CPU_RELEASE_ADDR, + (uint64_t)plat_secondary_cpus_bl31_entry); + + mailbox_hps_stage_notify(HPS_EXECUTION_STATE_SSBL); } const mmap_region_t plat_agilex_mmap[] = { diff --git a/plat/intel/soc/agilex/include/agilex_clock_manager.h b/plat/intel/soc/agilex/include/agilex_clock_manager.h index 8af6a60bc..20667f014 100644 --- a/plat/intel/soc/agilex/include/agilex_clock_manager.h +++ b/plat/intel/soc/agilex/include/agilex_clock_manager.h @@ -89,6 +89,7 @@ /* Peripheral PLL Macros */ #define CLKMGR_PERPLL_EN_RESET 0x00000fff +#define CLKMGR_PERPLL_EN_SDMMCCLK BIT(5) #define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x) (((x) << 0) & 0x0000ffff) /* Altera Macros */ diff --git a/plat/intel/soc/agilex/include/agilex_mmc.h b/plat/intel/soc/agilex/include/agilex_mmc.h new file mode 100644 index 000000000..00f4ca5a8 --- /dev/null +++ b/plat/intel/soc/agilex/include/agilex_mmc.h @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2020, Intel Corporation. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +void agx_mmc_init(void); diff --git a/plat/intel/soc/agilex/include/socfpga_plat_def.h b/plat/intel/soc/agilex/include/socfpga_plat_def.h index b4e09210f..6c9d81ceb 100644 --- a/plat/intel/soc/agilex/include/socfpga_plat_def.h +++ b/plat/intel/soc/agilex/include/socfpga_plat_def.h @@ -12,6 +12,7 @@ /* Platform Setting */ #define PLATFORM_MODEL PLAT_SOCFPGA_AGILEX +#define BOOT_SOURCE BOOT_SOURCE_SDMMC /* Register Mapping */ #define SOCFPGA_MMC_REG_BASE 0xff808000 diff --git a/plat/intel/soc/agilex/platform.mk b/plat/intel/soc/agilex/platform.mk index f47c3f113..bf5cc1445 100644 --- a/plat/intel/soc/agilex/platform.mk +++ b/plat/intel/soc/agilex/platform.mk @@ -1,6 +1,6 @@ # -# Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. -# Copyright (c) 2019, Intel Corporation. All rights reserved. +# Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2019-2020, Intel Corporation. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -10,18 +10,23 @@ PLAT_INCLUDES := \ -Iplat/intel/soc/common/drivers/ \ -Iplat/intel/soc/common/include/ +# Include GICv2 driver files +include drivers/arm/gic/v2/gicv2.mk +AGX_GICv2_SOURCES := \ + ${GICV2_SOURCES} \ + plat/common/plat_gicv2.c + + PLAT_BL_COMMON_SOURCES := \ - drivers/arm/gic/common/gic_common.c \ - drivers/arm/gic/v2/gicv2_main.c \ - drivers/arm/gic/v2/gicv2_helpers.c \ + ${AGX_GICv2_SOURCES} \ drivers/delay_timer/delay_timer.c \ drivers/delay_timer/generic_delay_timer.c \ drivers/ti/uart/aarch64/16550_console.S \ lib/xlat_tables/aarch64/xlat_tables.c \ lib/xlat_tables/xlat_tables_common.c \ - plat/common/plat_gicv2.c \ plat/intel/soc/common/aarch64/platform_common.c \ - plat/intel/soc/common/aarch64/plat_helpers.S + plat/intel/soc/common/aarch64/plat_helpers.S \ + plat/intel/soc/common/socfpga_delay_timer.c BL2_SOURCES += \ common/desc_image_load.c \ @@ -37,11 +42,12 @@ BL2_SOURCES += \ plat/intel/soc/agilex/bl2_plat_setup.c \ plat/intel/soc/agilex/soc/agilex_clock_manager.c \ plat/intel/soc/agilex/soc/agilex_memory_controller.c \ + plat/intel/soc/agilex/soc/agilex_mmc.c \ plat/intel/soc/agilex/soc/agilex_pinmux.c \ plat/intel/soc/common/bl2_plat_mem_params_desc.c \ - plat/intel/soc/common/socfpga_delay_timer.c \ plat/intel/soc/common/socfpga_image_load.c \ plat/intel/soc/common/socfpga_storage.c \ + plat/intel/soc/common/soc/socfpga_emac.c \ plat/intel/soc/common/soc/socfpga_handoff.c \ plat/intel/soc/common/soc/socfpga_mailbox.c \ plat/intel/soc/common/soc/socfpga_reset_manager.c \ diff --git a/plat/intel/soc/agilex/soc/agilex_clock_manager.c b/plat/intel/soc/agilex/soc/agilex_clock_manager.c index c6c48baea..4efd7131d 100644 --- a/plat/intel/soc/agilex/soc/agilex_clock_manager.c +++ b/plat/intel/soc/agilex/soc/agilex_clock_manager.c @@ -47,14 +47,14 @@ uint32_t wait_fsm(void) return 0; } -uint32_t pll_source_sync_config(uint32_t pll_mem_offset) +uint32_t pll_source_sync_config(uint32_t pll_mem_offset, uint32_t data) { uint32_t val = 0; uint32_t count = 0; uint32_t req_status = 0; val = (CLKMGR_MEM_WR | CLKMGR_MEM_REQ | - CLKMGR_MEM_WDAT << CLKMGR_MEM_WDAT_OFFSET | CLKMGR_MEM_ADDR); + (data << CLKMGR_MEM_WDAT_OFFSET) | CLKMGR_MEM_ADDR); mmio_write_32(pll_mem_offset, val); do { @@ -89,14 +89,17 @@ uint32_t pll_source_sync_read(uint32_t pll_mem_offset) rdata = mmio_read_32(pll_mem_offset + 0x4); INFO("rdata (%x) = %x\n", pll_mem_offset + 0x4, rdata); - return 0; + return rdata; } void config_clkmgr_handoff(handoff *hoff_ptr) { uint32_t mdiv, mscnt, hscnt; - uint32_t arefclk_div, drefclk_div; + uint32_t drefclk_div, refclk_div, rdata; + /* Set clock maanger into boot mode before running configuration */ + mmio_setbits_32(CLKMGR_OFFSET + CLKMGR_CTRL, + CLKMGR_CTRL_BOOTMODE_SET_MSK); /* Bypass all mainpllgrp's clocks */ mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_BYPASS, 0x7); wait_fsm(); @@ -116,26 +119,24 @@ void config_clkmgr_handoff(handoff *hoff_ptr) /* Setup main PLL dividers */ mdiv = CLKMGR_PLLM_MDIV(hoff_ptr->main_pll_pllm); - arefclk_div = CLKMGR_PLLGLOB_AREFCLKDIV( - hoff_ptr->main_pll_pllglob); drefclk_div = CLKMGR_PLLGLOB_DREFCLKDIV( hoff_ptr->main_pll_pllglob); + refclk_div = CLKMGR_PLLGLOB_REFCLKDIV( + hoff_ptr->main_pll_pllglob); - mscnt = 100 / (mdiv / BIT(drefclk_div)); + mscnt = 100 / (mdiv * BIT(drefclk_div)); if (!mscnt) mscnt = 1; - hscnt = (mdiv * mscnt * BIT(drefclk_div) / arefclk_div) - 4; + hscnt = (mdiv * mscnt * BIT(drefclk_div) / refclk_div) - 4; - mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_VCOCALIB, - CLKMGR_VCOCALIB_HSCNT_SET(hscnt) | - CLKMGR_VCOCALIB_MSCNT_SET(mscnt)); - - mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_NOCDIV, - hoff_ptr->main_pll_nocdiv); mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_PLLGLOB, - hoff_ptr->main_pll_pllglob); + hoff_ptr->main_pll_pllglob & + ~CLKMGR_PLLGLOB_RST_SET_MSK); mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_FDBCK, hoff_ptr->main_pll_fdbck); + mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_VCOCALIB, + CLKMGR_VCOCALIB_HSCNT_SET(hscnt) | + CLKMGR_VCOCALIB_MSCNT_SET(mscnt)); mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_PLLC0, hoff_ptr->main_pll_pllc0); mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_PLLC1, @@ -150,33 +151,33 @@ void config_clkmgr_handoff(handoff *hoff_ptr) hoff_ptr->main_pll_mpuclk); mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_NOCCLK, hoff_ptr->main_pll_nocclk); + mmio_write_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_NOCDIV, + hoff_ptr->main_pll_nocdiv); /* Setup peripheral PLL dividers */ mdiv = CLKMGR_PLLM_MDIV(hoff_ptr->per_pll_pllm); - arefclk_div = CLKMGR_PLLGLOB_AREFCLKDIV( - hoff_ptr->per_pll_pllglob); drefclk_div = CLKMGR_PLLGLOB_DREFCLKDIV( hoff_ptr->per_pll_pllglob); + refclk_div = CLKMGR_PLLGLOB_REFCLKDIV( + hoff_ptr->per_pll_pllglob); - mscnt = 100 / (mdiv / BIT(drefclk_div)); + + mscnt = 100 / (mdiv * BIT(drefclk_div)); if (!mscnt) mscnt = 1; - hscnt = (mdiv * mscnt * BIT(drefclk_div) / arefclk_div) - 4; + hscnt = (mdiv * mscnt * BIT(drefclk_div) / refclk_div) - 4; + + mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_PLLGLOB, + hoff_ptr->per_pll_pllglob & + ~CLKMGR_PLLGLOB_RST_SET_MSK); + mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_FDBCK, + hoff_ptr->per_pll_fdbck); mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_VCOCALIB, CLKMGR_VCOCALIB_HSCNT_SET(hscnt) | CLKMGR_VCOCALIB_MSCNT_SET(mscnt)); - mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_EMACCTL, - hoff_ptr->per_pll_emacctl); - mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_GPIODIV, - CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET( - hoff_ptr->per_pll_gpiodiv)); - mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_PLLGLOB, - hoff_ptr->per_pll_pllglob); - mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_FDBCK, - hoff_ptr->per_pll_fdbck); mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_PLLC0, hoff_ptr->per_pll_pllc0); mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_PLLC1, @@ -187,6 +188,10 @@ void config_clkmgr_handoff(handoff *hoff_ptr) hoff_ptr->per_pll_pllc3); mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_PLLM, hoff_ptr->per_pll_pllm); + mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_EMACCTL, + hoff_ptr->per_pll_emacctl); + mmio_write_32(CLKMGR_PERPLL + CLKMGR_PERPLL_GPIODIV, + hoff_ptr->per_pll_gpiodiv); /* Take both PLL out of reset and power up */ mmio_setbits_32(CLKMGR_MAINPLL + CLKMGR_MAINPLL_PLLGLOB, @@ -196,13 +201,16 @@ void config_clkmgr_handoff(handoff *hoff_ptr) CLKMGR_PLLGLOB_PD_SET_MSK | CLKMGR_PLLGLOB_RST_SET_MSK); - wait_pll_lock(); + rdata = pll_source_sync_read(CLKMGR_MAINPLL + + CLKMGR_MAINPLL_MEM); + pll_source_sync_config(CLKMGR_MAINPLL + CLKMGR_MAINPLL_MEM, + rdata | 0x80); - pll_source_sync_config(CLKMGR_MAINPLL + CLKMGR_MAINPLL_MEM); - pll_source_sync_read(CLKMGR_MAINPLL + CLKMGR_MAINPLL_MEM); + rdata = pll_source_sync_read(CLKMGR_PERPLL + CLKMGR_PERPLL_MEM); + pll_source_sync_config(CLKMGR_PERPLL + CLKMGR_PERPLL_MEM, + rdata | 0x80); - pll_source_sync_config(CLKMGR_PERPLL + CLKMGR_PERPLL_MEM); - pll_source_sync_read(CLKMGR_PERPLL + CLKMGR_PERPLL_MEM); + wait_pll_lock(); /*Configure Ping Pong counters in altera group */ mmio_write_32(CLKMGR_ALTERA + CLKMGR_ALTERA_EMACACTR, @@ -241,7 +249,7 @@ void config_clkmgr_handoff(handoff *hoff_ptr) /* Clear loss lock interrupt status register that */ /* might be set during configuration */ - mmio_setbits_32(CLKMGR_OFFSET + CLKMGR_INTRCLR, + mmio_clrbits_32(CLKMGR_OFFSET + CLKMGR_INTRCLR, CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK | CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK); diff --git a/plat/intel/soc/agilex/soc/agilex_mmc.c b/plat/intel/soc/agilex/soc/agilex_mmc.c new file mode 100644 index 000000000..e05d92a03 --- /dev/null +++ b/plat/intel/soc/agilex/soc/agilex_mmc.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020, Intel Corporation. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#include <lib/mmio.h> + +#include "socfpga_system_manager.h" +#include "agilex_clock_manager.h" + +void agx_mmc_init(void) +{ + mmio_clrbits_32(CLKMGR_PERPLL + CLKMGR_PERPLL_EN, + CLKMGR_PERPLL_EN_SDMMCCLK); + mmio_write_32(SOCFPGA_SYSMGR(SDMMC), + SYSMGR_SDMMC_SMPLSEL(0) | SYSMGR_SDMMC_DRVSEL(3)); + mmio_setbits_32(CLKMGR_PERPLL + CLKMGR_PERPLL_EN, + CLKMGR_PERPLL_EN_SDMMCCLK); +} diff --git a/plat/intel/soc/agilex/soc/agilex_pinmux.c b/plat/intel/soc/agilex/soc/agilex_pinmux.c index eff19473c..0b908cfa3 100644 --- a/plat/intel/soc/agilex/soc/agilex_pinmux.c +++ b/plat/intel/soc/agilex/soc/agilex_pinmux.c @@ -7,6 +7,7 @@ #include <lib/mmio.h> #include "agilex_pinmux.h" +#include "socfpga_system_manager.h" const uint32_t sysmgr_pinmux_array_sel[] = { 0x00000000, 0x00000001, /* usb */ @@ -185,6 +186,12 @@ const uint32_t sysmgr_pinmux_array_iodelay[] = { 0x0000011c, 0x00000000 }; +void config_fpgaintf_mod(void) +{ + mmio_write_32(SOCFPGA_SYSMGR(FPGAINTF_EN_2), 1<<8); +} + + void config_pinmux(handoff *hoff_ptr) { unsigned int i; @@ -213,5 +220,6 @@ void config_pinmux(handoff *hoff_ptr) hoff_ptr->pinmux_iodelay_array[i+1]); } + config_fpgaintf_mod(); } |