int fmc_ipmi_detect( fmc_iic_t *pIIC, char *szExpected, int fmcId ) { Xuint8 ipmi_eeprom_address; struct fru_area_board board_info; int retval; xil_printf("FMC Module Validation\n\r" ); // I2C Address of IPMI EEPROM ipmi_eeprom_address = detect_ipmi_address( pIIC, fmcId ); //xil_printf( "IPMI EEPROM Address = 0x%02X\n\r", ipmi_eeprom_address ); // Read FRU Board Info from IPMI EEPROM retval = fmc_ipmi_get_board_info( pIIC, ipmi_eeprom_address, &board_info ); if ( retval == FRU_SUCCESS ) { // Display Board Information xil_printf( "Board Information:\n\r" ); xil_printf( "\tManufacturer = %s\n\r", board_info.mfg ); xil_printf( "\tProduct Name = %s\n\r", board_info.prod ); xil_printf( "\tSerial Number = %s\n\r", board_info.serial ); xil_printf( "\tPart Number = %s\n\r", board_info.part ); // Validate presence of FMC module if ( !strcmp( board_info.prod, szExpected ) ) { xil_printf( "SUCCESS : Detected %s module!\n\r", board_info.prod ); //fmc_ipmi_enable( pIIC, fmcId ); return 1; } else { // Error due to unexpected FMC module xil_printf( "ERROR : Unexpected %s module, Expected %s module\n\r", board_info.prod, szExpected ); //fmc_ipmi_disable( pIIC, fmcId ); return 0; } } else if ( retval == FRU_I2C_ERROR ) { // Error due to unpopulated FMC slot xil_printf( "ERROR : No FMC module detected\n\r" ); //fmc_ipmi_disable( pIIC, fmcId ); return 0; } else { // Error due to invalid IPMI EEPROM xil_printf( "ERROR : FMC module does not have valid FRU content in its IPMI EEPROM\n\r" ); //fmc_ipmi_disable( pIIC, fmcId ); return 0; } }
void avnet_console_test_ipmi_command( avnet_console_t *pConsole, int cargc, char ** cargv ) { int bDispSyntax = 0; struct fru_header write_common_info; struct fru_area_board write_board_info; struct fru_header read_common_info; struct fru_area_board read_board_info; int ret; int bTest = 0; int bRead = 0; int bPass = 0; if ( cargc > 1 && !strcmp(cargv[1],"help") ) { bDispSyntax = 1; } else if ( cargc == 2 && !strcmp(cargv[1],"read") ) { bRead = 1; } else if ( cargc == 2 && !strcmp(cargv[1],"test") ) { bTest = 1; } else { bDispSyntax = 1; } if ( bTest ) { pConsole->io_hprintf( pConsole->io_handle, "\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "---------------------------------------------------\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "---- TEST 1 : IPMI EEPROM I2C Chain ----\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "---------------------------------------------------\n\r" ); // Create common_info write_common_info.version = 0x01; write_common_info.offset.internal = 0x00; write_common_info.offset.chassis = 0x00; write_common_info.offset.board = 0x01; // offset = 8 bytes write_common_info.offset.product = 0x00; write_common_info.offset.multi = 0x00; write_common_info.pad = 0x00; write_common_info.checksum = 0x00; // will be calculated by driver ret = fmc_ipmi_set_common_info( pdemo->pfmc_ipmi_iic, 0xA0, &write_common_info ); if ( ret == FRU_SUCCESS ) { write_board_info.area_ver = 0x01; write_board_info.lang = 0x19; // english write_board_info.mfg_date_time = 0x00030201; // TBD write_board_info.mfg = "Avnet"; write_board_info.prod = "FMC-HDMI-CAM"; write_board_info.serial = " "; strcpy( write_board_info.serial, pdemo->fmc_hdmi_cam_board_info.serial ); write_board_info.part = "AES-FMCHDMICAM-G"; write_board_info.fru = ""; ret = fmc_ipmi_set_board_info( pdemo->pfmc_ipmi_iic, 0xA0, &write_board_info ); if ( ret == FRU_SUCCESS ) { if ( pConsole->verbose ) { pConsole->io_hprintf( pConsole->io_handle, "\tSuccessfully programmed IPMI EEPROM\n\r" ); } } else { pConsole->io_hprintf( pConsole->io_handle, "\tERROR : Failed to decode IPMI board information!\n\r" ); } } else { pConsole->io_hprintf( pConsole->io_handle, "\tERROR : Failed to decode IPMI common information!\n\r" ); } } if ( bTest || bRead ) { ret = fmc_ipmi_get_common_info( pdemo->pfmc_ipmi_iic, 0xA0, &read_common_info ); if ( ret == FRU_SUCCESS ) { ret = fmc_ipmi_get_board_info(pdemo->pfmc_ipmi_iic, 0xA0, &read_board_info ); if ( ret == FRU_SUCCESS ) { bPass = 1; if ( pConsole->verbose ) { pConsole->io_hprintf( pConsole->io_handle, "\tSuccessfully read IPMI EEPROM\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "\tCommon Info Area:\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.version = 0x%02X\n\r", read_common_info.version ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.offset.internal = 0x%02X\n\r", read_common_info.offset.internal * 8 ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.offset.chassis = 0x%02X\n\r", read_common_info.offset.chassis * 8 ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.offset.board = 0x%02X\n\r", read_common_info.offset.board * 8 ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.offset.product = 0x%02X\n\r", read_common_info.offset.product * 8 ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.offset.multi = 0x%02X\n\r", read_common_info.offset.multi * 8 ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.pad = 0x%02X\n\r", read_common_info.pad ); pConsole->io_hprintf( pConsole->io_handle, "\t\tcommon_info.checksum = 0x%02X\n\r", read_common_info.checksum ); pConsole->io_hprintf( pConsole->io_handle, "\tBoard Info Area:\n\r" ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.area_ver = 0x%02X\n\r", read_board_info.area_ver ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.mfg_date_time = 0x%08X\n\r", read_board_info.mfg_date_time ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.lang = 0x%02X\n\r", read_board_info.lang ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.mfg = %s\n\r" , read_board_info.mfg ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.prod = %s\n\r" , read_board_info.prod ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.serial = %s\n\r" , read_board_info.serial ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.part = %s\n\r" , read_board_info.part ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.fru = %s\n\r" , read_board_info.fru ); pConsole->io_hprintf( pConsole->io_handle, "\t\tboard_info.area_len = 0x%04X\n\r", read_board_info.area_len ); } } else { pConsole->io_hprintf( pConsole->io_handle, "\tERROR : Failed to decode IPMI board information!\n\r" ); } } else { pConsole->io_hprintf( pConsole->io_handle, "\tERROR : Failed to decode IPMI common information!\n\r" ); } } if ( bTest ) { if ( bPass ) { pConsole->io_hprintf( pConsole->io_handle, "IPMI EEPROM Write/Read Test .................. PASS!\n\r" ); } else { pConsole->io_hprintf( pConsole->io_handle, "IPMI EEPROM Write/Read Test .................. FAIL!\n\r" ); } } if ( bDispSyntax ) { pConsole->io_hprintf( pConsole->io_handle, "\tSyntax :\r\n" ); pConsole->io_hprintf( pConsole->io_handle, "\t\tipmi test => Test FMC-IPMI EEPROM\r\n" ); pConsole->io_hprintf( pConsole->io_handle, "\t\tipmi read => Display FMC-IPMI EEPROM contents\r\n" ); } return; }
int demo_init( demo_t *pdemo ) { int status; pdemo->paxivdma0 = &(pdemo->axivdma0); pdemo->paxivdma1 = &(pdemo->axivdma1); pdemo->posd = &(pdemo->osd); pdemo->pcfa = &(pdemo->cfa); pdemo->pfmc_ipmi_iic = &(pdemo->fmc_ipmi_iic); pdemo->pfmc_hdmi_cam_iic = &(pdemo->fmc_hdmi_cam_iic); pdemo->pfmc_hdmi_cam = &(pdemo->fmc_hdmi_cam); pdemo->ppython_receiver = &(pdemo->python_receiver); pdemo->cam_alpha = 0xFF; pdemo->hdmi_alpha = 0x00; pdemo->bVerbose = 0; pdemo->ipmi_info_valid = 0; pdemo->fmc_hdmi_cam_board_info.serial = "n/a"; XAxiVdma_Config *paxivdma_config; XOSD_Config *posd_config; XCfa_Config *pcfa_config; paxivdma_config = XAxiVdma_LookupConfig(XPAR_AXIVDMA_0_DEVICE_ID); XAxiVdma_CfgInitialize(pdemo->paxivdma0, paxivdma_config, paxivdma_config->BaseAddress); paxivdma_config = XAxiVdma_LookupConfig(XPAR_AXIVDMA_1_DEVICE_ID); XAxiVdma_CfgInitialize(pdemo->paxivdma1, paxivdma_config, paxivdma_config->BaseAddress); posd_config = XOSD_LookupConfig(XPAR_OSD_0_DEVICE_ID); XOSD_CfgInitialize(pdemo->posd, posd_config, posd_config->BaseAddress); pcfa_config = XCfa_LookupConfig(XPAR_V_CFA_0_DEVICE_ID); XCfa_CfgInitialize(pdemo->pcfa, pcfa_config, pcfa_config->BaseAddress); if ( pdemo->bVerbose ) { xil_printf( "FMC-IPMI Initialization ...\n\r" ); } status = fmc_iic_xps_init(pdemo->pfmc_ipmi_iic,"FMC-IPMI I2C Controller", XPAR_FMC_IPMI_IIC_0_BASEADDR ); if ( !status ) { xil_printf( "ERROR : Failed to open FMC-IIC driver\n\r" ); exit(0); } // FMC Module Validation if ( pdemo->bVerbose ) { xil_printf( "FMC-HDMI-CAM Identification ...\n\r" ); } //if ( fmc_ipmi_detect( pdemo->pfmc_ipmi_iic, "FMC-HDMI-CAM", FMC_ID_SLOT1 ) ) { int ret; ret = fmc_ipmi_get_common_info( pdemo->pfmc_ipmi_iic, 0xA0, &(pdemo->fmc_hdmi_cam_common_info) ); if ( ret == FRU_SUCCESS ) { ret = fmc_ipmi_get_board_info(pdemo->pfmc_ipmi_iic, 0xA0, &(pdemo->fmc_hdmi_cam_board_info) ); if ( ret == FRU_SUCCESS ) { pdemo->ipmi_info_valid = 1; } } //fmc_ipmi_enable(pdemo->pfmc_ipmi_iic, FMC_ID_SLOT1 ); } if ( pdemo->ipmi_info_valid == 1 ) { xil_printf( "FMC-IPMI programmed as %s (Serial Number = %s)\n\r", pdemo->fmc_hdmi_cam_board_info.part, pdemo->fmc_hdmi_cam_board_info.serial ); } else { xil_printf( "FMC-IPMI not programmed yet ...\n\r" ); } if ( pdemo->bVerbose ) { xil_printf( "FMC-HDMI-CAM Initialization ...\n\r" ); } status = fmc_iic_xps_init(pdemo->pfmc_hdmi_cam_iic,"FMC-HDMI-CAM I2C Controller", XPAR_FMC_HDMI_CAM_IIC_0_BASEADDR ); if ( !status ) { xil_printf( "ERROR : Failed to open FMC-IIC driver\n\r" ); exit(0); } fmc_hdmi_cam_init(pdemo->pfmc_hdmi_cam, "FMC-HDMI-CAM", pdemo->pfmc_hdmi_cam_iic); pdemo->pfmc_hdmi_cam->bVerbose = pdemo->bVerbose; // Configure Video Clock Synthesizer if ( pdemo->bVerbose ) { xil_printf( "Video Clock Synthesizer Configuration ...\n\r" ); } fmc_hdmi_cam_vclk_init( pdemo->pfmc_hdmi_cam ); fmc_hdmi_cam_vclk_config( pdemo->pfmc_hdmi_cam, FMC_HDMI_CAM_VCLK_FREQ_148_500_000); sleep(1); // Set HDMI output to 1080P60 pdemo->hdmio_width = 1920; pdemo->hdmio_height = 1080; //pDemo->hdmio_timing.IsHDMI = 1; // HDMI Mode pdemo->hdmio_timing.IsHDMI = 0; // DVI Mode pdemo->hdmio_timing.IsEncrypted = 0; pdemo->hdmio_timing.IsInterlaced = 0; pdemo->hdmio_timing.ColorDepth = 8; pdemo->hdmio_timing.HActiveVideo = 1920; pdemo->hdmio_timing.HFrontPorch = 88; pdemo->hdmio_timing.HSyncWidth = 44; pdemo->hdmio_timing.HSyncPolarity = 1; pdemo->hdmio_timing.HBackPorch = 148; pdemo->hdmio_timing.VBackPorch = 36; pdemo->hdmio_timing.VActiveVideo = 1080; pdemo->hdmio_timing.VFrontPorch = 4; pdemo->hdmio_timing.VSyncWidth = 5; pdemo->hdmio_timing.VSyncPolarity = 1; if ( pdemo->bVerbose ) { xil_printf( "HDMI Output Initialization ...\n\r" ); } status = fmc_hdmi_cam_hdmio_init( pdemo->pfmc_hdmi_cam, 1, // hdmioEnable = 1 &(pdemo->hdmio_timing), // pTiming 0 // waitHPD = 0 ); if ( !status ) { xil_printf( "ERROR : Failed to init HDMI Output Interface\n\r" ); return 0; } // Default HDMI input resolution pdemo->hdmii_width = pdemo->hdmio_width; pdemo->hdmii_height = pdemo->hdmio_height; return 1; }