uboot/arch/x86/cpu/broadwell/lpc.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2016 Google, Inc
   3 *
   4 * From coreboot broadwell support
   5 *
   6 * SPDX-License-Identifier:     GPL-2.0
   7 */
   8
   9#include <common.h>
  10#include <dm.h>
  11#include <pch.h>
  12#include <asm/intel_regs.h>
  13#include <asm/io.h>
  14#include <asm/lpc_common.h>
  15#include <asm/arch/pch.h>
  16#include <asm/arch/spi.h>
  17
  18static void set_spi_speed(void)
  19{
  20        u32 fdod;
  21        u8 ssfc;
  22
  23        /* Observe SPI Descriptor Component Section 0 */
  24        writel(0x1000, SPI_REG(SPIBAR_FDOC));
  25
  26        /* Extract the Write/Erase SPI Frequency from descriptor */
  27        fdod = readl(SPI_REG(SPIBAR_FDOD));
  28        fdod >>= 24;
  29        fdod &= 7;
  30
  31        /* Set Software Sequence frequency to match */
  32        ssfc = readb(SPI_REG(SPIBAR_SSFC + 2));
  33        ssfc &= ~7;
  34        ssfc |= fdod;
  35        writeb(ssfc, SPI_REG(SPIBAR_SSFC + 2));
  36}
  37
  38static int broadwell_lpc_early_init(struct udevice *dev)
  39{
  40        set_spi_speed();
  41
  42        return 0;
  43}
  44
  45static int lpc_init_extra(struct udevice *dev)
  46{
  47        return 0;
  48}
  49
  50static int broadwell_lpc_probe(struct udevice *dev)
  51{
  52        int ret;
  53
  54        if (!(gd->flags & GD_FLG_RELOC)) {
  55                ret = lpc_common_early_init(dev);
  56                if (ret) {
  57                        debug("%s: lpc_early_init() failed\n", __func__);
  58                        return ret;
  59                }
  60
  61                return broadwell_lpc_early_init(dev);
  62        }
  63
  64        return lpc_init_extra(dev);
  65}
  66
  67static const struct udevice_id broadwell_lpc_ids[] = {
  68        { .compatible = "intel,broadwell-lpc" },
  69        { }
  70};
  71
  72U_BOOT_DRIVER(broadwell_lpc_drv) = {
  73        .name           = "lpc",
  74        .id             = UCLASS_LPC,
  75        .of_match       = broadwell_lpc_ids,
  76        .probe          = broadwell_lpc_probe,
  77};
  78