@ -167,6 +167,27 @@ static void ls_pcie_setup_atu(struct ls_pcie *pcie)
pci_get_regions ( pcie - > bus , & io , & mem , & pref ) ;
idx = PCIE_ATU_REGION_INDEX1 + 1 ;
/* Fix the pcie memory map for LS2088A series SoCs */
svr = ( svr > > SVR_VAR_PER_SHIFT ) & 0xFFFFFE ;
if ( svr = = SVR_LS2088A | | svr = = SVR_LS2084A | |
svr = = SVR_LS2048A | | svr = = SVR_LS2044A ) {
if ( io )
io - > phys_start = ( io - > phys_start &
( PCIE_PHYS_SIZE - 1 ) ) +
LS2088A_PCIE1_PHYS_ADDR +
LS2088A_PCIE_PHYS_SIZE * pcie - > idx ;
if ( mem )
mem - > phys_start = ( mem - > phys_start &
( PCIE_PHYS_SIZE - 1 ) ) +
LS2088A_PCIE1_PHYS_ADDR +
LS2088A_PCIE_PHYS_SIZE * pcie - > idx ;
if ( pref )
pref - > phys_start = ( pref - > phys_start &
( PCIE_PHYS_SIZE - 1 ) ) +
LS2088A_PCIE1_PHYS_ADDR +
LS2088A_PCIE_PHYS_SIZE * pcie - > idx ;
}
if ( io )
/* ATU : OUTBOUND : IO */
ls_pcie_atu_outbound_set ( pcie , idx + + ,
@ -449,6 +470,7 @@ static int ls_pcie_probe(struct udevice *dev)
u8 header_type ;
u16 link_sta ;
bool ep_mode ;
uint svr ;
int ret ;
pcie - > bus = dev ;
@ -502,6 +524,19 @@ static int ls_pcie_probe(struct udevice *dev)
return ret ;
}
/*
* Fix the pcie memory map address and PF control registers address
* for LS2088A series SoCs
*/
svr = get_svr ( ) ;
svr = ( svr > > SVR_VAR_PER_SHIFT ) & 0xFFFFFE ;
if ( svr = = SVR_LS2088A | | svr = = SVR_LS2084A | |
svr = = SVR_LS2048A | | svr = = SVR_LS2044A ) {
pcie - > cfg_res . start = LS2088A_PCIE1_PHYS_ADDR +
LS2088A_PCIE_PHYS_SIZE * pcie - > idx ;
pcie - > ctrl = pcie - > lut + 0x40000 ;
}
pcie - > cfg0 = map_physmem ( pcie - > cfg_res . start ,
fdt_resource_size ( & pcie - > cfg_res ) ,
MAP_NOCACHE ) ;