5050 #define ENABLE_CPLD
5151 #define ENABLE_QE /* QUICC Engine */
5252 #define ENABLE_FMAN
53+ #define ENABLE_MRAM
5354
5455 #if defined(WOLFBOOT_TPM ) || defined(TEST_TPM )
5556 #define ENABLE_ESPI /* SPI for TPM */
@@ -692,8 +693,13 @@ enum ifc_amask_sizes {
692693#define CPLD_OVERRIDE_MUX_EN 0x02 /* PCIE/2.5G-SGMII mux override enable */
693694
694695#define CPLD_DATA (n ) ((volatile uint16_t*)(CPLD_BASE + (n)))
695- #define CPLD_READ (reg ) get16(CPLD_DATA(((reg))))
696- #define CPLD_WRITE (reg , value ) set16(CPLD_DATA((reg), (value)))
696+ #define CPLD_READ (reg ) get16(CPLD_DATA(reg))
697+ #define CPLD_WRITE (reg , value ) set16(CPLD_DATA(reg), value)
698+
699+ /* MRAM */
700+ #define MRAM_BASE 0xFF800000
701+ #define MRAM_BASE_PHYS_HIGH 0xFULL
702+
697703
698704
699705/* eSPI */
@@ -1257,7 +1263,7 @@ static int hal_pcie_init(void)
12571263{
12581264 int ret ;
12591265 int bus , i ;
1260- int law_idx = 7 ;
1266+ int law_idx = 8 ;
12611267 int tlb_idx = 14 ; /* next available TLB (after DDR) */
12621268 struct pci_enum_info enum_info ;
12631269 uint64_t mem_phys_h , io_phys_h ;
@@ -1274,12 +1280,12 @@ static int hal_pcie_init(void)
12741280 cpld_pci , rcw4 , srds_prtcl_s1 );
12751281 if (srds_prtcl_s1 == 0x95 ) {
12761282 /* Route Lane B to PCIE */
1277- set16 ( CPLD_DATA ( PCI_STATUS_ADDR ) , cpld_pci & ~CPLD_PCIE_SGMII_MUX );
1283+ CPLD_WRITE ( PCI_STATUS_ADDR , cpld_pci & ~CPLD_PCIE_SGMII_MUX );
12781284 wolfBoot_printf ("Route Lane B->PCIE\n" );
12791285 }
12801286 else {
12811287 /* Route Lane B to SGMII */
1282- set16 ( CPLD_DATA ( PCI_STATUS_ADDR ) , cpld_pci | CPLD_PCIE_SGMII_MUX );
1288+ CPLD_WRITE ( PCI_STATUS_ADDR , cpld_pci | CPLD_PCIE_SGMII_MUX );
12831289 wolfBoot_printf ("Route Lane B->SGMII\n" );
12841290 }
12851291 cpld_pci = CPLD_READ (PCI_STATUS_ADDR );
@@ -1418,31 +1424,48 @@ static int hal_pcie_init(void)
14181424}
14191425#endif
14201426
1421- #ifdef ENABLE_CPLD
1422- static void hal_cpld_ifc_init (uint32_t base , uint32_t base_high , uint8_t ifc )
1427+ #if defined(ENABLE_CPLD ) || defined(ENABLE_MRAM )
1428+ static void hal_ifc_init (uint8_t ifc , uint32_t base , uint32_t base_high ,
1429+ uint32_t port_sz , uint32_t amask )
14231430{
14241431 /* CPLD IFC Timing Parameters */
14251432 set32 (IFC_FTIM0 (ifc ), (IFC_FTIM0_GPCM_TACSE (14UL ) |
1426- IFC_FTIM0_GPCM_TEADC (14UL ) |
1427- IFC_FTIM0_GPCM_TEAHC (14UL )));
1433+ IFC_FTIM0_GPCM_TEADC (14UL ) |
1434+ IFC_FTIM0_GPCM_TEAHC (14UL )));
14281435 set32 (IFC_FTIM1 (ifc ), (IFC_FTIM1_GPCM_TACO (14UL ) |
1429- IFC_FTIM1_GPCM_TRAD (31UL )));
1436+ IFC_FTIM1_GPCM_TRAD (31UL )));
14301437 set32 (IFC_FTIM2 (ifc ), (IFC_FTIM2_GPCM_TCS (14UL ) |
1431- IFC_FTIM2_GPCM_TCH (8UL ) |
1432- IFC_FTIM2_GPCM_TWP (31UL )));
1438+ IFC_FTIM2_GPCM_TCH (8UL ) |
1439+ IFC_FTIM2_GPCM_TWP (31UL )));
14331440 set32 (IFC_FTIM3 (ifc ), 0 );
14341441
14351442 /* CPLD IFC Definitions (CS2) */
14361443 set32 (IFC_CSPR_EXT (ifc ), base_high );
14371444 set32 (IFC_CSPR (ifc ), (IFC_CSPR_PHYS_ADDR (base ) |
1438- IFC_CSPR_PORT_SIZE_16 |
1439- IFC_CSPR_MSEL_GPCM |
1440- IFC_CSPR_V ));
1441- set32 (IFC_AMASK (ifc ), IFC_AMASK_64KB );
1445+ port_sz |
1446+ IFC_CSPR_MSEL_GPCM |
1447+ IFC_CSPR_V ));
1448+ set32 (IFC_AMASK (ifc ), amask );
14421449 set32 (IFC_CSOR (ifc ), 0 );
14431450}
14441451#endif
14451452
1453+ #ifdef ENABLE_MRAM
1454+ static void hal_mram_init (void )
1455+ {
1456+ /* MRAM IFC Timing Parameters */
1457+ hal_ifc_init (1 , MRAM_BASE , MRAM_BASE_PHYS_HIGH ,
1458+ IFC_CSPR_PORT_SIZE_8 , IFC_AMASK_1MB );
1459+
1460+ /* MRAM IFC 1 - LAW 7, TLB 1.4 */
1461+ set_law (7 , MRAM_BASE_PHYS_HIGH , MRAM_BASE , LAW_TRGT_IFC , LAW_SIZE_1MB , 1 );
1462+ set_tlb (1 , 4 , MRAM_BASE ,
1463+ MRAM_BASE , MRAM_BASE_PHYS_HIGH ,
1464+ (MAS3_SX | MAS3_SW | MAS3_SR ),
1465+ (MAS2_I | MAS2_G ), 0 , BOOKE_PAGESZ_1M , 1 );
1466+ }
1467+ #endif
1468+
14461469#if defined(ENABLE_CPLD ) && defined(DEBUG )
14471470void hal_cpld_dump (void )
14481471{
@@ -1470,15 +1493,17 @@ static void hal_cpld_init(void)
14701493 uint32_t reg ;
14711494
14721495 /* CPLD (APU) IFC 2 - LAW 2, TLB 1.11 */
1473- hal_cpld_ifc_init (CPLD_BASE , CPLD_BASE_PHYS_HIGH , 2 );
1496+ hal_ifc_init (2 , CPLD_BASE , CPLD_BASE_PHYS_HIGH ,
1497+ IFC_CSPR_PORT_SIZE_16 , IFC_AMASK_64KB );
14741498 set_law (2 , CPLD_BASE_PHYS_HIGH , CPLD_BASE , LAW_TRGT_IFC , LAW_SIZE_64KB , 1 );
14751499 set_tlb (1 , 11 , CPLD_BASE ,
14761500 CPLD_BASE , CPLD_BASE_PHYS_HIGH ,
14771501 (MAS3_SX | MAS3_SW | MAS3_SR ),
14781502 (MAS2_I | MAS2_G ), 0 , BOOKE_PAGESZ_256K , 1 );
14791503
14801504 /* CPLD (MPU) IFC 3 - LAW 6, TLB 1.10 */
1481- hal_cpld_ifc_init (CPLD_MPU_BASE , CPLD_MPU_BASE_PHYS_HIGH , 3 );
1505+ hal_ifc_init (3 , CPLD_MPU_BASE , CPLD_MPU_BASE_PHYS_HIGH ,
1506+ IFC_CSPR_PORT_SIZE_16 , IFC_AMASK_64KB );
14821507 set_law (6 , CPLD_MPU_BASE_PHYS_HIGH , CPLD_MPU_BASE , LAW_TRGT_IFC ,
14831508 LAW_SIZE_64KB , 1 );
14841509 set_tlb (1 , 10 , CPLD_MPU_BASE ,
@@ -2032,6 +2057,9 @@ void hal_init(void)
20322057 hal_liodn_init ();
20332058 hal_flash_init ();
20342059 hal_cpld_init ();
2060+ #ifdef ENABLE_MRAM
2061+ hal_mram_init ();
2062+ #endif
20352063#ifdef ENABLE_PCIE
20362064 if (hal_pcie_init () != 0 ) {
20372065 wolfBoot_printf ("PCIe: init failed!\n" );
0 commit comments