mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-09-23 23:01:28 +02:00
mmc: am654_sdhci: Add support for AM65x SR2.0
Add Support for AM65x PG2.0. Use the SoC bus framework to fixup the platform data and do DLL calibration if the revision is 1.0 Signed-off-by: Faiz Abbas <faiz_abbas@ti.com> Signed-off-by: Aswath Govindraju <a-govindraju@ti.com> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
This commit is contained in:
parent
5b29fd4a8d
commit
8c32b5f370
@ -12,6 +12,7 @@
|
|||||||
#include <power-domain.h>
|
#include <power-domain.h>
|
||||||
#include <regmap.h>
|
#include <regmap.h>
|
||||||
#include <sdhci.h>
|
#include <sdhci.h>
|
||||||
|
#include <soc.h>
|
||||||
#include <dm/device_compat.h>
|
#include <dm/device_compat.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
@ -292,6 +293,11 @@ const struct sdhci_ops am654_sdhci_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const struct am654_driver_data am654_drv_data = {
|
const struct am654_driver_data am654_drv_data = {
|
||||||
|
.ops = &am654_sdhci_ops,
|
||||||
|
.flags = DLL_PRESENT | IOMUX_PRESENT | FREQSEL_2_BIT | STRBSEL_4_BIT,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct am654_driver_data am654_sr1_drv_data = {
|
||||||
.ops = &am654_sdhci_ops,
|
.ops = &am654_sdhci_ops,
|
||||||
.flags = IOMUX_PRESENT | FREQSEL_2_BIT | DLL_PRESENT | DLL_CALIB |
|
.flags = IOMUX_PRESENT | FREQSEL_2_BIT | DLL_PRESENT | DLL_CALIB |
|
||||||
STRBSEL_4_BIT,
|
STRBSEL_4_BIT,
|
||||||
@ -326,6 +332,11 @@ const struct am654_driver_data j721e_4bit_drv_data = {
|
|||||||
.flags = IOMUX_PRESENT,
|
.flags = IOMUX_PRESENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const struct soc_attr am654_sdhci_soc_attr[] = {
|
||||||
|
{ .family = "AM65X", .revision = "SR1.0", .data = &am654_sr1_drv_data},
|
||||||
|
{/* sentinel */}
|
||||||
|
};
|
||||||
|
|
||||||
static int sdhci_am654_get_otap_delay(struct udevice *dev,
|
static int sdhci_am654_get_otap_delay(struct udevice *dev,
|
||||||
struct mmc_config *cfg)
|
struct mmc_config *cfg)
|
||||||
{
|
{
|
||||||
@ -365,6 +376,8 @@ static int am654_sdhci_probe(struct udevice *dev)
|
|||||||
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
|
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
|
||||||
struct sdhci_host *host = dev_get_priv(dev);
|
struct sdhci_host *host = dev_get_priv(dev);
|
||||||
struct mmc_config *cfg = &plat->cfg;
|
struct mmc_config *cfg = &plat->cfg;
|
||||||
|
const struct soc_attr *soc;
|
||||||
|
const struct am654_driver_data *soc_drv_data;
|
||||||
struct clk clk;
|
struct clk clk;
|
||||||
unsigned long clock;
|
unsigned long clock;
|
||||||
int ret;
|
int ret;
|
||||||
@ -394,6 +407,14 @@ static int am654_sdhci_probe(struct udevice *dev)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
host->ops = drv_data->ops;
|
host->ops = drv_data->ops;
|
||||||
|
|
||||||
|
/* Update ops based on SoC revision */
|
||||||
|
soc = soc_device_match(am654_sdhci_soc_attr);
|
||||||
|
if (soc && soc->data) {
|
||||||
|
soc_drv_data = soc->data;
|
||||||
|
host->ops = soc_drv_data->ops;
|
||||||
|
}
|
||||||
|
|
||||||
host->mmc->priv = host;
|
host->mmc->priv = host;
|
||||||
upriv->mmc = host->mmc;
|
upriv->mmc = host->mmc;
|
||||||
|
|
||||||
@ -458,9 +479,18 @@ static int am654_sdhci_bind(struct udevice *dev)
|
|||||||
struct am654_driver_data *drv_data =
|
struct am654_driver_data *drv_data =
|
||||||
(struct am654_driver_data *)dev_get_driver_data(dev);
|
(struct am654_driver_data *)dev_get_driver_data(dev);
|
||||||
struct am654_sdhci_plat *plat = dev_get_plat(dev);
|
struct am654_sdhci_plat *plat = dev_get_plat(dev);
|
||||||
|
const struct soc_attr *soc;
|
||||||
|
const struct am654_driver_data *soc_drv_data;
|
||||||
|
|
||||||
plat->flags = drv_data->flags;
|
plat->flags = drv_data->flags;
|
||||||
|
|
||||||
|
/* Update flags based on SoC revision */
|
||||||
|
soc = soc_device_match(am654_sdhci_soc_attr);
|
||||||
|
if (soc && soc->data) {
|
||||||
|
soc_drv_data = soc->data;
|
||||||
|
plat->flags = soc_drv_data->flags;
|
||||||
|
}
|
||||||
|
|
||||||
return sdhci_bind(dev, &plat->mmc, &plat->cfg);
|
return sdhci_bind(dev, &plat->mmc, &plat->cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user