Hello guys,

 

I am newbie here and need your kindly helpJ

 

When trying to use gcc-linaro-4.9 to build u-boot for ls1021atwr (ARM Cortex-A7 MPCore compliant with ARMv7-A architecture), we face issue. U-boot hangs at PCI-E.
After tracing the code, the issue is located at the line “*val = readl(addr);”.

 

u-boot/drivers/pci/pcie_layerscape.c: ls_pcie_read_config():

 

if (PCI_BUS(d) == hose->first_busno) {

...

} else {

...

      if (PCI_BUS(d) == hose->first_busno + 1) {                            #PCI_BUS(d) 1, hose->first_busno 0

                  ls_pcie_cfg0_set_busdev(pcie, busdev);

                  addr = pcie->va_cfg0 + (where & ~0x3);                    #pcie->va_cfg0 0x24000000, where 0xc

      } else {

....

      }

}

*val = readl(addr);

 

The gcc source we used is gcc-linaro-4.9-2015.02.tar.xz (link) which is based on FSF GCC 4.9.3-pre+svn220525.

Meanwhile, gcc-linaro-4.9-2015.01.tar.xz does not have this issue.

After Bisecting, we tracked down a gcc commit:

https://git.linaro.org/toolchain/gcc.git/commitdiff/e4f9e85e8152379aef373772b22075539920ffa2?hp=da278625cc33cbbc893cc50c2ac32fca31053ee8

2015-01-23  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/63637
PR rtl-optimization/60663
* cse.c (merge_equiv_classes): Set new_elt->cost to MAX_COST
if elt->cost is MAX_COST for ASM_OPERANDS.
(find_sets_in_insn): Fix up comment typo.
(cse_insn): Don't set src_volatile for all non-volatile
ASM_OPERANDS in PARALLELs, but just those with multiple outputs
or with "memory" clobber.  Set elt->cost to MAX_COST
for ASM_OPERANDS in PARALLEL.  Set src_elt->cost to MAX_COST
if new_src is ASM_OPERANDS and elt->cost is MAX_COST.

* gcc.dg/pr63637-1.c: New test.
* gcc.dg/pr63637-2.c: New test.
* gcc.dg/pr63637-3.c: New test.
* gcc.dg/pr63637-4.c: New test.
* gcc.dg/pr63637-5.c: New test.
* gcc.dg/pr63637-6.c: New test.
* gcc.target/i386/pr63637-1.c: New test.
* gcc.target/i386/pr63637-2.c: New test.
* gcc.target/i386/pr63637-3.c: New test.
* gcc.target/i386/pr63637-4.c: New test.
* gcc.target/i386/pr63637-5.c: New test.
* gcc.target/i386/pr63637-6.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@220323 
138bc75d-0d04-0410-961f-82ee72b054a4

 

Before this commit, u-boot can boot up.

 

So any hint/suggestion? if more details needed, please feel free to tell us.

 

Thank you in advance.

 

-Ting