Adding common chip config structure which will be used to return data to common code. When common code requires soc data, code used to fetch entire soc config structure. With this change, common code will only get the data/structure which is required by common code and not entire config. For now, adding i2c, gspi and lockdown configuration which will be used by common code. BUG=none BRANCH=b:78109109 TEST=compile code for APL/SKL/CNL. Boot using SKL/APL/CNL and check values are returned properly using common structure. Change-Id: I7f1671e064782397d3ace066a08bf1333192b21a Signed-off-by: Subrata Banik <subrata.banik@intel.com> Signed-off-by: Maulik V Vaghela <maulik.v.vaghela@intel.com> Reviewed-on: https://review.coreboot.org/26189 Reviewed-by: Furquan Shaikh <furquan@google.com> Reviewed-by: Hannah Williams <hannah.williams@intel.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright 2016 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#include <console/console.h>
|
|
#include <device/device.h>
|
|
#include <device/pci_def.h>
|
|
#include <drivers/i2c/designware/dw_i2c.h>
|
|
#include <intelblocks/chip.h>
|
|
#include <soc/iomap.h>
|
|
#include <soc/pci_devs.h>
|
|
#include "chip.h"
|
|
|
|
const struct dw_i2c_bus_config *dw_i2c_get_soc_cfg(unsigned int bus)
|
|
{
|
|
const struct soc_intel_common_config *common_config;
|
|
common_config = chip_get_common_soc_structure();
|
|
|
|
return &common_config->i2c[bus];
|
|
}
|
|
|
|
uintptr_t dw_i2c_get_soc_early_base(unsigned int bus)
|
|
{
|
|
return PRERAM_I2C_BASE_ADDRESS(bus);
|
|
}
|
|
|
|
/* Convert I2C bus number to PCI device and function */
|
|
int dw_i2c_soc_bus_to_devfn(unsigned int bus)
|
|
{
|
|
if (bus <= 3)
|
|
return PCI_DEVFN(PCH_DEV_SLOT_SIO1, bus);
|
|
else if (bus >= 4 && bus <= 7)
|
|
return PCI_DEVFN(PCH_DEV_SLOT_SIO2, (bus - 4));
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
/* Convert PCI device and function to I2C bus number */
|
|
int dw_i2c_soc_devfn_to_bus(unsigned int devfn)
|
|
{
|
|
if (PCI_SLOT(devfn) == PCH_DEV_SLOT_SIO1)
|
|
return PCI_FUNC(devfn);
|
|
else if (PCI_SLOT(devfn) == PCH_DEV_SLOT_SIO2)
|
|
return PCI_FUNC(devfn) + 4;
|
|
else
|
|
return -1;
|
|
}
|