[U-Boot] [PATCH 42/57] x86: ivybridge: Use the I2C driver to perform SMbus init
Heiko Schocher
hs at denx.de
Tue Dec 8 06:48:50 CET 2015
Hello Simon,
Am 08.12.2015 um 04:39 schrieb Simon Glass:
> Move the init code into the I2C driver.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> arch/x86/cpu/ivybridge/cpu.c | 39 +++------------------------------------
> arch/x86/dts/chromebook_link.dts | 6 ++++++
> configs/chromebook_link_defconfig | 2 ++
> drivers/i2c/intel_i2c.c | 24 ++++++++++++++++++++++++
> 4 files changed, 35 insertions(+), 36 deletions(-)
Reviewed-by: Heiko Schocher <hs at denx.de>
Just only some nitpik, see below ...
> diff --git a/arch/x86/cpu/ivybridge/cpu.c b/arch/x86/cpu/ivybridge/cpu.c
> index ed90bb2..95a9db5 100644
> --- a/arch/x86/cpu/ivybridge/cpu.c
> +++ b/arch/x86/cpu/ivybridge/cpu.c
> @@ -121,41 +121,6 @@ int arch_cpu_init_dm(void)
> return 0;
> }
>
> -static int enable_smbus(void)
> -{
> - pci_dev_t dev;
> - uint16_t value;
> -
> - /* Set the SMBus device statically. */
> - dev = PCI_BDF(0x0, 0x1f, 0x3);
> -
> - /* Check to make sure we've got the right device. */
> - value = x86_pci_read_config16(dev, 0x0);
> - if (value != 0x8086) {
> - printf("SMBus controller not found\n");
> - return -ENOSYS;
> - }
> -
> - /* Set SMBus I/O base. */
> - x86_pci_write_config32(dev, SMB_BASE,
> - SMBUS_IO_BASE | PCI_BASE_ADDRESS_SPACE_IO);
> -
> - /* Set SMBus enable. */
> - x86_pci_write_config8(dev, HOSTC, HST_EN);
> -
> - /* Set SMBus I/O space enable. */
> - x86_pci_write_config16(dev, PCI_COMMAND, PCI_COMMAND_IO);
> -
> - /* Disable interrupt generation. */
> - outb(0, SMBUS_IO_BASE + SMBHSTCTL);
> -
> - /* Clear any lingering errors, so transactions can run. */
> - outb(inb(SMBUS_IO_BASE + SMBHSTSTAT), SMBUS_IO_BASE + SMBHSTSTAT);
> - debug("SMBus controller enabled\n");
> -
> - return 0;
> -}
> -
> #define PCH_EHCI0_TEMP_BAR0 0xe8000000
> #define PCH_EHCI1_TEMP_BAR0 0xe8000400
> #define PCH_XHCI_TEMP_BAR0 0xe8001000
> @@ -293,9 +258,11 @@ int print_cpuinfo(void)
> post_code(POST_EARLY_INIT);
>
> /* Enable SPD ROMs and DDR-III DRAM */
> - ret = enable_smbus();
> + ret = uclass_first_device(UCLASS_I2C, &dev);
> if (ret)
> return ret;
> + if (!dev)
> + return -ENODEV;
Hmm.. shouldn;t return uclass_first_device() -ENODEV in the
case it does not find a device?
>
> /* Prepare USB controller early in S3 resume */
> if (boot_mode == PEI_BOOT_RESUME)
[...]
bye,
Heiko
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
More information about the U-Boot
mailing list