On Wed, Oct 30, 2013 at 12:34:52PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > > + > > +static int checkboard(void) > > +{ > > + void __iomem *lbc = LBC_BASE_ADDR; > > + void __iomem *ecm = IOMEM(MPC85xx_ECM_ADDR); > > + void __iomem *i2c = IOMEM(I2C1_BASE_ADDR); > > + int ret, board_type; > > + uint8_t id, rev; > > + > > + /* Clear LBC error interrupts */ > > + out_be32(lbc + FSL_LBC_LTESR_OFFSET, 0xffffffff); > > + /* Enable LBC error interrupts */ > > + out_be32(lbc + FSL_LBC_LTEIR_OFFSET, 0xffffffff); > > + /* Clear ecm errors */ > > + out_be32(ecm + MPC85xx_ECM_EEDR_OFFSET, 0xffffffff); > > + /* Enable ecm errors */ > > + out_be32(ecm + MPC85xx_ECM_EEER_OFFSET, 0xffffffff); > > + > > + fsl_i2c_init(0, 400000, 0x7f); > > + /* Read board id from offset 0. */ > > + ret = fsl_i2c_read(i2c, 0x3b, 0, 1, &id, sizeof(uint8_t)); > > + fsl_i2c_stop(i2c); > > + > > + if (ret == -1) { > > + /* Enable I2C bus on GBX460. */ > > + out_be16(IOMEM(0xfc010020), 0); > > + ret = fsl_i2c_read(i2c, 0x3b, 0, 1, &id, sizeof(uint8_t)); > > + fsl_i2c_stop(i2c); > why you do not simly use the standdard i2c AP? I think because the machine is still running from SRAM or flash here and I2C is needed to read out the SPD EEPROM for setting up SDRAM. > > + > > +core_initcall(da923rc_board_init_r); I just wonder that this function is called from initcall context. I would assume the initcalls start running from SDRAM. I wonder how this works. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox