[U-Boot] [PATCH 1/3] arm: socfpga: Remove unused FPGA feature from gen5 SPL
Marek Vasut
marex at denx.de
Thu Jul 27 09:37:41 UTC 2017
On 07/27/2017 11:21 AM, Chee, Tien Fong wrote:
> On Kha, 2017-07-27 at 10:21 +0200, Marek Vasut wrote:
>> On 07/27/2017 06:36 AM, tien.fong.chee at intel.com wrote:
>>>
>>> From: Tien Fong Chee <tien.fong.chee at intel.com>
>>>
>>> Remove unused FPGA feature for saving some space in gen5 SPL.
>> I really dislike the ifdefery. Why is this patch even needed?
>> I thought we had no space problems in the Gen5 SPL?
>>
> I can remove those codes within ifdefery because they are no longer
> required.
Why ?
> I keep them here just for one day we can use if we need to.
> Do you remember we have consent to clean up those useless codes for
> SPL, all fpga related drivers will be moved into one driver location.
No, sorry.
>>>
>>> Signed-off-by: Tien Fong Chee <tien.fong.chee at intel.com>
>>> ---
>>> arch/arm/mach-socfpga/reset_manager_gen5.c | 9 +++++++++
>>> arch/arm/mach-socfpga/system_manager_gen5.c | 6 ------
>>> drivers/ddr/altera/sdram.c | 8 +++++++-
>>> 3 files changed, 16 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-socfpga/reset_manager_gen5.c
>>> b/arch/arm/mach-socfpga/reset_manager_gen5.c
>>> index aa88adb..c954063 100644
>>> --- a/arch/arm/mach-socfpga/reset_manager_gen5.c
>>> +++ b/arch/arm/mach-socfpga/reset_manager_gen5.c
>>> @@ -97,6 +97,14 @@ void socfpga_bridges_reset(int enable)
>>> writel(0, &sysmgr_regs->iswgrp_handoff[0]);
>>> writel(l3mask, &sysmgr_regs->iswgrp_handoff[1]);
>>>
>>> +/*
>>> + * FPGA feature is not required in SPL, so FPGA bridges release
>>> from reset
>>> + * should not be supported in SPL, but some FPGA releated setting
>>> can be stored
>>> + * in handoff registers as SPL to U-boot/OS handoff information.
>>> These
>>> + * handoff information can be used in later phase such as feeding
>>> handoff
>>> + * information to bridge command when user want to enable FPGA
>>> feature in U-boot
>>> + */
>>> +#ifndef CONFIG_SPL_BUILD
>>> /* Check signal from FPGA. */
>>> if (!fpgamgr_test_fpga_ready()) {
>>> /* FPGA not ready, do nothing. We allow
>>> system to boot
>>> @@ -110,6 +118,7 @@ void socfpga_bridges_reset(int enable)
>>>
>>> /* Remap the bridges into memory map */
>>> writel(l3mask, SOCFPGA_L3REGS_ADDRESS);
>> I believe the L3REGS needs to be programmed on Gen5.
>>
> Yes, this is done when calling command "bridge
> enable". iswgrp_handoff[1] contains l3mask, which will be written
> into SOCFPGA_L3REGS_ADDRESS.
I think this needs to be done earlier, otherwise the first 1 MiB or so
of DRAM isn't accessible.
> Snippet from misc_gen5.c:
> int do_bridge(cmd_tbl_t *cmdtp, int flag, int argc, char * const
> argv[])
> {
> if (argc != 2)
> return CMD_RET_USAGE;
>
> argv++;
>
> switch (*argv[0]) {
> case 'e': /* Enable */
> writel(iswgrp_handoff[2], &sysmgr_regs-
>> fpgaintfgrp_module);
> socfpga_sdram_apply_static_cfg();
> writel(iswgrp_handoff[3], &sdr_ctrl->fpgaport_rst);
> writel(iswgrp_handoff[0], &reset_manager_base-
>> brg_mod_reset);
> writel(iswgrp_handoff[1], &nic301_regs->remap);
> break;
>
>>>
>>> +#endif
>>> }
>>> return;
>>> }
>>> diff --git a/arch/arm/mach-socfpga/system_manager_gen5.c
>>> b/arch/arm/mach-socfpga/system_manager_gen5.c
>>> index 3588a57..ee25496 100644
>>> --- a/arch/arm/mach-socfpga/system_manager_gen5.c
>>> +++ b/arch/arm/mach-socfpga/system_manager_gen5.c
>>> @@ -43,12 +43,6 @@ static void
>>> populate_sysmgr_fpgaintf_module(void)
>>> /* populate (not writing) the value for
>>> SYSMGR.FPGAINTF.MODULE
>>> based on pinmux setting */
>>> setbits_le32(&sysmgr_regs->iswgrp_handoff[2],
>>> handoff_val);
>>> -
>>> - handoff_val = readl(&sysmgr_regs->iswgrp_handoff[2]);
>>> - if (fpgamgr_test_fpga_ready()) {
>>> - /* Enable the required signals only */
>>> - writel(handoff_val, &sysmgr_regs-
>>>> fpgaintfgrp_module);
>>> - }
>>> }
>>>
>>> /*
>>> diff --git a/drivers/ddr/altera/sdram.c
>>> b/drivers/ddr/altera/sdram.c
>>> index e74c5b0..df16102 100644
>>> --- a/drivers/ddr/altera/sdram.c
>>> +++ b/drivers/ddr/altera/sdram.c
>>> @@ -233,6 +233,7 @@ static void sdram_dump_protection_config(void)
>>> }
>>> }
>>>
>>> +#ifndef CONFIG_SPL_BUILD
>>> /**
>>> * sdram_write_verify() - write to register and verify the write.
>>> * @addr: Register address
>>> @@ -259,6 +260,7 @@ static unsigned sdram_write_verify(const u32
>>> *addr, const u32 val)
>>> debug("correct!\n");
>>> return 0;
>>> }
>>> +#endif
>>>
>>> /**
>>> * sdr_get_ctrlcfg() - Get the value of DRAM CTRLCFG register
>>> @@ -435,7 +437,6 @@ int sdram_mmr_init_full(unsigned int
>>> sdr_phy_reg)
>>> const unsigned int rows =
>>> (cfg->dram_addrw &
>>> SDR_CTRLGRP_DRAMADDRW_ROWBITS_MASK) >>
>>> SDR_CTRLGRP_DRAMADDRW_ROWBITS_LSB;
>>> - int ret;
>>>
>>> writel(rows, &sysmgr_regs->iswgrp_handoff[4]);
>>>
>>> @@ -444,13 +445,18 @@ int sdram_mmr_init_full(unsigned int
>>> sdr_phy_reg)
>>> /* saving this value to SYSMGR.ISWGRP.HANDOFF.FPGA2SDR */
>>> writel(cfg->fpgaport_rst, &sysmgr_regs-
>>>> iswgrp_handoff[3]);
>>>
>>> + /* FPGA feature is not required in SPL, so no test on FPGA
>>> reset in SPL */
>>> +#ifndef CONFIG_SPL_BUILD
>>> /* only enable if the FPGA is programmed */
>>> + int ret;
>>> +
>>> if (fpgamgr_test_fpga_ready()) {
>>> ret = sdram_write_verify(&sdr_ctrl->fpgaport_rst,
>>> cfg->fpgaport_rst);
>>> if (ret)
>>> return ret;
>>> }
>>> +#endif
>>>
>>> /* Restore the SDR PHY Register if valid */
>>> if (sdr_phy_reg != 0xffffffff)
>>>
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list