コード例 #1
0
ファイル: fmc_ipmi.c プロジェクト: CprE488/Final
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;
   }
}
コード例 #2
0
ファイル: avnet_console.c プロジェクト: mdnanosoft/LAB_AEP
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;
}
コード例 #3
0
ファイル: demo.c プロジェクト: pbomel/hdl
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;
}