@@ -348,7 +348,6 @@ enum elbc_amask_sizes {
348348
349349/* DDR */
350350/* DDR3: 512MB, 333.333 MHz (666.667 MT/s) */
351- #define DDR_SIZE (512 * 1024 * 1024)
352351#define DDR_CS0_BNDS_VAL 0x0000001F
353352#define DDR_CS0_CONFIG_VAL 0x80014202
354353#define DDR_CS_CONFIG_2_VAL 0x00000000
@@ -633,18 +632,6 @@ void hal_espi_deinit(void)
633632}
634633#endif /* ENABLE_ESPI */
635634
636-
637- static void set_law (uint8_t idx , uint32_t addr , uint32_t trgt_id ,
638- uint32_t law_sz )
639- {
640- set32 (LAWAR (idx ), 0 ); /* reset */
641- set32 (LAWBAR (idx ), addr >> 12 );
642- set32 (LAWAR (idx ), LAWAR_ENABLE | LAWAR_TRGT_ID (trgt_id ) | law_sz );
643-
644- /* Read back so that we sync the writes */
645- (void )get32 (LAWAR (idx ));
646- }
647-
648635/* ---- DUART Driver ---- */
649636#ifdef DEBUG_UART
650637
@@ -841,7 +828,7 @@ static int hal_flash_init(void)
841828 uint32_t flash_id [1 ] = {0 };
842829
843830 /* eLBC - NAND Flash */
844- set_law (4 , FLASH_BASE_ADDR , LAW_TRGT_ELBC , LAW_SIZE_1MB );
831+ set_law (4 , 0 , FLASH_BASE_ADDR , LAW_TRGT_ELBC , LAW_SIZE_1MB , 1 );
845832
846833#ifdef BOOT_ROM_ADDR
847834 /* if this code is executing from BOOT ROM we cannot init eLBC yet */
@@ -904,62 +891,64 @@ static void hal_ddr_init(void)
904891#ifdef ENABLE_DDR
905892 uint32_t reg ;
906893
894+ /* Map LAW for DDR */
895+ set_law (6 , 0 , DDR_ADDRESS , LAW_TRGT_DDR , LAW_SIZE_512MB , 0 );
896+
907897 /* If DDR is not already enabled */
908- if ((get32 (DDR_SDRAM_CFG ) & DDR_SDRAM_CFG_MEM_EN ) == 0 ) {
909- /* Map LAW for DDR */
910- set_law (6 , DDR_ADDRESS , LAW_TRGT_DDR , LAW_SIZE_512MB );
911-
912- /* Setup DDR CS (chip select) bounds */
913- set32 (DDR_CS_BNDS (0 ), DDR_CS0_BNDS_VAL );
914- set32 (DDR_CS_CONFIG (0 ), DDR_CS0_CONFIG_VAL );
915- set32 (DDR_CS_CONFIG_2 (0 ), DDR_CS_CONFIG_2_VAL );
916-
917- /* DDR SDRAM timing configuration */
918- set32 (DDR_TIMING_CFG_3 , DDR_TIMING_CFG_3_VAL );
919- set32 (DDR_TIMING_CFG_0 , DDR_TIMING_CFG_0_VAL );
920- set32 (DDR_TIMING_CFG_1 , DDR_TIMING_CFG_1_VAL );
921- set32 (DDR_TIMING_CFG_2 , DDR_TIMING_CFG_2_VAL );
922-
923- set32 (DDR_SDRAM_MODE , DDR_SDRAM_MODE_VAL );
924- set32 (DDR_SDRAM_MODE_2 , DDR_SDRAM_MODE_2_VAL );
925- set32 (DDR_SDRAM_MD_CNTL , DDR_SDRAM_MD_CNTL_VAL );
926- set32 (DDR_SDRAM_INTERVAL , DDR_SDRAM_INTERVAL_VAL );
927- set32 (DDR_DATA_INIT , DDR_DATA_INIT_VAL );
928- set32 (DDR_SDRAM_CLK_CNTL , DDR_SDRAM_CLK_CNTL_VAL );
929- set32 (DDR_TIMING_CFG_4 , DDR_TIMING_CFG_4_VAL );
930- set32 (DDR_TIMING_CFG_5 , DDR_TIMING_CFG_5_VAL );
931- set32 (DDR_ZQ_CNTL , DDR_ZQ_CNTL_VAL );
932- set32 (DDR_WRLVL_CNTL , DDR_WRLVL_CNTL_VAL );
933-
934- set32 (DDR_SR_CNTR , 0 );
935- set32 (DDR_SDRAM_RCW_1 , 0 );
936- set32 (DDR_SDRAM_RCW_2 , 0 );
937-
938- set32 (DDR_DDRCDR_1 , DDR_DDRCDR_1_VAL );
939-
940-
941- set32 (DDR_SDRAM_CFG_2 , DDR_SDRAM_CFG_2_VAL );
942- set32 (DDR_INIT_ADDR , 0 );
943- set32 (DDR_INIT_EXT_ADDR , 0 );
944- set32 (DDR_DDRCDR_2 , DDR_DDRCDR_2_VAL );
945-
946- /* Set values, but do not enable the DDR yet */
947- set32 (DDR_SDRAM_CFG , ((DDR_SDRAM_CFG_VAL & ~DDR_SDRAM_CFG_MEM_EN )));
948- asm volatile ("sync;isync" );
949-
950- /* busy wait for ~500us */
951- udelay (500 );
952-
953- /* Enable controller */
954- reg = get32 (DDR_SDRAM_CFG ) & ~DDR_SDRAM_CFG_BI ;
955- set32 (DDR_SDRAM_CFG , reg | DDR_SDRAM_CFG_MEM_EN );
956- asm volatile ("sync;isync" );
957-
958- /* Wait for data initialization to complete */
959- while (get32 (DDR_SDRAM_CFG_2 ) & DDR_SDRAM_CFG_2_D_INIT ) {
960- /* busy wait loop - throttle polling */
961- udelay (1 );
962- }
898+ if ((get32 (DDR_SDRAM_CFG ) & DDR_SDRAM_CFG_MEM_EN )) {
899+ return ;
900+ }
901+
902+ /* Setup DDR CS (chip select) bounds */
903+ set32 (DDR_CS_BNDS (0 ), DDR_CS0_BNDS_VAL );
904+ set32 (DDR_CS_CONFIG (0 ), DDR_CS0_CONFIG_VAL );
905+ set32 (DDR_CS_CONFIG_2 (0 ), DDR_CS_CONFIG_2_VAL );
906+
907+ /* DDR SDRAM timing configuration */
908+ set32 (DDR_TIMING_CFG_3 , DDR_TIMING_CFG_3_VAL );
909+ set32 (DDR_TIMING_CFG_0 , DDR_TIMING_CFG_0_VAL );
910+ set32 (DDR_TIMING_CFG_1 , DDR_TIMING_CFG_1_VAL );
911+ set32 (DDR_TIMING_CFG_2 , DDR_TIMING_CFG_2_VAL );
912+
913+ set32 (DDR_SDRAM_MODE , DDR_SDRAM_MODE_VAL );
914+ set32 (DDR_SDRAM_MODE_2 , DDR_SDRAM_MODE_2_VAL );
915+ set32 (DDR_SDRAM_MD_CNTL , DDR_SDRAM_MD_CNTL_VAL );
916+ set32 (DDR_SDRAM_INTERVAL , DDR_SDRAM_INTERVAL_VAL );
917+ set32 (DDR_DATA_INIT , DDR_DATA_INIT_VAL );
918+ set32 (DDR_SDRAM_CLK_CNTL , DDR_SDRAM_CLK_CNTL_VAL );
919+ set32 (DDR_TIMING_CFG_4 , DDR_TIMING_CFG_4_VAL );
920+ set32 (DDR_TIMING_CFG_5 , DDR_TIMING_CFG_5_VAL );
921+ set32 (DDR_ZQ_CNTL , DDR_ZQ_CNTL_VAL );
922+ set32 (DDR_WRLVL_CNTL , DDR_WRLVL_CNTL_VAL );
923+
924+ set32 (DDR_SR_CNTR , 0 );
925+ set32 (DDR_SDRAM_RCW_1 , 0 );
926+ set32 (DDR_SDRAM_RCW_2 , 0 );
927+
928+ set32 (DDR_DDRCDR_1 , DDR_DDRCDR_1_VAL );
929+
930+
931+ set32 (DDR_SDRAM_CFG_2 , DDR_SDRAM_CFG_2_VAL );
932+ set32 (DDR_INIT_ADDR , 0 );
933+ set32 (DDR_INIT_EXT_ADDR , 0 );
934+ set32 (DDR_DDRCDR_2 , DDR_DDRCDR_2_VAL );
935+
936+ /* Set values, but do not enable the DDR yet */
937+ set32 (DDR_SDRAM_CFG , ((DDR_SDRAM_CFG_VAL & ~DDR_SDRAM_CFG_MEM_EN )));
938+ asm volatile ("sync;isync" );
939+
940+ /* busy wait for ~500us */
941+ udelay (500 );
942+
943+ /* Enable controller */
944+ reg = get32 (DDR_SDRAM_CFG ) & ~DDR_SDRAM_CFG_BI ;
945+ set32 (DDR_SDRAM_CFG , reg | DDR_SDRAM_CFG_MEM_EN );
946+ asm volatile ("sync;isync" );
947+
948+ /* Wait for data initialization to complete */
949+ while (get32 (DDR_SDRAM_CFG_2 ) & DDR_SDRAM_CFG_2_D_INIT ) {
950+ /* busy wait loop - throttle polling */
951+ udelay (1 );
963952 }
964953#endif /* ENABLE_DDR */
965954}
@@ -983,10 +972,10 @@ void hal_early_init(void)
983972static int hal_pcie_init (void )
984973{
985974 /* Map LAW for PCIe */
986- set_law (0 , CONFIG_SYS_PCIE1_MEM_PHYS , LAW_TRGT_PCIE1 , LAW_SIZE_512MB ),
987- set_law (1 , CONFIG_SYS_PCIE1_IO_PHYS , LAW_TRGT_PCIE1 , LAW_SIZE_64KB ),
988- set_law (2 , CONFIG_SYS_PCIE2_MEM_PHYS , LAW_TRGT_PCIE2 , LAW_SIZE_512MB ),
989- set_law (3 , CONFIG_SYS_PCIE2_IO_PHYS , LAW_TRGT_PCIE2 , LAW_SIZE_64KB ),
975+ set_law (0 , 0 , CONFIG_SYS_PCIE1_MEM_PHYS , LAW_TRGT_PCIE1 , LAW_SIZE_512MB , 1 ),
976+ set_law (1 , 0 , CONFIG_SYS_PCIE1_IO_PHYS , LAW_TRGT_PCIE1 , LAW_SIZE_64KB , 1 ),
977+ set_law (2 , 0 , CONFIG_SYS_PCIE2_MEM_PHYS , LAW_TRGT_PCIE2 , LAW_SIZE_512MB , 1 ),
978+ set_law (3 , 0 , CONFIG_SYS_PCIE2_IO_PHYS , LAW_TRGT_PCIE2 , LAW_SIZE_64KB , 1 ),
990979
991980 /* Map TLB for PCIe */
992981 set_tlb (1 , 2 , CONFIG_SYS_PCIE2_MEM_VIRT , CONFIG_SYS_PCIE2_MEM_PHYS , 0 ,
@@ -1011,7 +1000,7 @@ static int hal_pcie_init(void)
10111000static int hal_cpld_init (void )
10121001{
10131002 /* Setup Local Access Window (LAW) for CPLD/BCSR */
1014- set_law (5 , BCSR_BASE , LAW_TRGT_ELBC , LAW_SIZE_256KB );
1003+ set_law (5 , 0 , BCSR_BASE , LAW_TRGT_ELBC , LAW_SIZE_256KB , 1 );
10151004 /* Setup TLB MMU (Translation Lookaside Buffer) for CPLD/BCSR */
10161005 set_tlb (1 , 8 , BCSR_BASE , BCSR_BASE , 0 , MAS3_SX | MAS3_SW | MAS3_SR ,
10171006 MAS2_I | MAS2_G , 0 , BOOKE_PAGESZ_256K , 1 );
0 commit comments