Hi, You're assuming every i2c bus appears as a PCI device - that's not always the case. In fact, those Synopsys devices usually arent (AFAIK). Thanks, Pedro On Tue, 6 Sept 2022, 12:09 , wrote: > Hi all, > My platform information is as follows: > Minnowboard Max. > I use i2cdetect under Linux to detect multiple I2c buses, such as: > > I2c-0 Synopsys DesignWare I2C adapter > I2c-10 SMBus I801 adapter at 2000 > > I can scan the I2c-10 SMbus slave address 0x50 from the SpdRead code in > the UEFI shell to have a slave device. Methods as below: > > UINT32 FindSmBusDev() > { > ... > Addr = 0x80000000; > for(Bus = 0x00; Bus < 0xFF; Bus++) { > for(Dev = 0x00; Dev <= 0x1F; Dev++) { > for(Fun = 0x00; Fun <= 0x07; Fun++) { > Addr &= 0xFF000000;//clean the address > Addr |= ((Bus << 16) | (Dev << 11) | (Fun << 8));//set the pci bus dev and fun IoWrite32(PCI_INDEX_IO_PORT, Addr); > if(IoRead32(PCI_DATA_IO_PORT) != 0xFFFFFFFF) { > Addr = Addr + 0x08;//read class code > IoWrite32(PCI_INDEX_IO_PORT, Addr); > if (IoRead32(PCI_DATA_IO_PORT) >> 16 == 0x0C05)//it's Smbus class code > { > return Addr - 0x08; > } > } > } > } > } > return Addr; > } > > > > My question is: > How to switch to I2c-0 bus under UEFI to perform I2C IO operation on the > slave device of Synopsys I2C controller? > Any suggestion is greatly appreciated! > >