[U-Boot] [PATCH v5 1/2] armv8/fsl-layerscape: fdt: fixup LS1043A rev1 GIC node
york sun
york.sun at nxp.com
Mon Oct 31 17:14:22 CET 2016
On 10/30/2016 07:10 PM, Wenbin Song wrote:
> Hi york:
>
>
> Best Regards
> Wenbin Song
>
>> -----Original Message-----
>> From: york sun
>> Sent: Friday, October 28, 2016 11:40 PM
>> To: Wenbin Song <wenbin.song at nxp.com>; albert.u.boot at aribaud.net;
>> Mingkai Hu <mingkai.hu at nxp.com>; u-boot at lists.denx.de
>> Subject: Re: [PATCH v5 1/2] armv8/fsl-layerscape: fdt: fixup LS1043A rev1 GIC
>> node
>>
>> On 10/27/2016 02:06 AM, Wenbin song wrote:
>>> The LS1043A rev1.1 silicon supports two types of GIC offset: 4K
>>> alignment and 64K alignment. The bit SCFG_GIC400_ALIGN[GIC_ADDR_BIT]
>>> is used to choose which offset will be used. If GIC_ADDR_BIT bit is
>>> set, 4K alignment is used, or else 64K alignment is used. The rev1.0
>>> silicon only supports the CIG offset with 4K alignment.
>>>
>>> GIC offset is decided by SVR and GIC_ADDR_BIT bit.
>>>
>>> Overriding the weak smp_kick_all_cpus, the new impletment is able to
>>> detect GIC offset.
>>>
>>> Signed-off-by: Wenbin Song <wenbin.song at nxp.com>
>>> Signed-off-by: Mingkai Hu <mingkai.hu at nxp.com>
>>> ---
>>> Changes in v5:
>>> Replace fix_gic_off with get_gic_off.
>>> Add #if condition to check CONFIG_GICV2 and CONFIG_GICV3 on
>> smp_kick_all_cpus.
>>> Fixup gic node with 64K alignment when running on rev1.1 with
>> GIC_ADDR_BIT cleared.
>>> ---
>>
>> <snip>
>>
>>>
>>> +#ifdef CONFIG_HAS_FEATURE_GIC4K_ALIGN static void fdt_fixup_gic(void
>>> +*blob) {
>>> + int offset, err;
>>> + u64 reg[8];
>>> + struct ccsr_gur __iomem *gur = (void
>> *)(CONFIG_SYS_FSL_GUTS_ADDR);
>>> + unsigned int rev;
>>> + struct ccsr_scfg __iomem *scfg = (void
>> *)CONFIG_SYS_FSL_SCFG_ADDR;
>>> + int align_4k = 1;
>>> +
>>> + rev = gur_in32(&gur->svr) & 0xff;
>>> +
>>> + if (rev > REV1_0) {
>>> + rev = scfg_in32(&scfg->gic_align) & (0x01 << GIC_ADDR_BIT);
>>> + if (!rev)
>>> + align_4k = 0;
>>> + }
>>> +
>>
>> Does this register scfg->gic_align exist for other SoCs? Can you get a consistent
>> reading from this register if not set by PBI? If yes, can you revert the logic in PBI
>> command to set this bit in backward compatible way?
>
>
> [] scfg->gic_align is a new added register on ls1043a rev1.1 or more higher to select the GIC offset by PBI.
> If it is set by PBI, GIC offset is 4K alignment.
> If it is cleared by PBI, GIC offset is 64K alignment.
> The reset value is cleared.
>
> So for ls1043a rev1.1 or more higher , we are be able to select the GIC offset by using different rcw.
> If not set by PBI, reading from it always gets 0.
>
> And the scfg->gic_align is reserved for other SoCs.
So it is hard-wired to 0 for 64K. Keep you code to check the revision
then. Maybe put a comment around checking the revision to warn later use
for other SoCs?
York
More information about the U-Boot
mailing list