mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-11 15:34:55 +00:00
driver: sifive ccache: enable TRUNKCLOCKGATE and REGIONCLOCKGATE
Enable the clock gating bit of ccache when the platform has the ccache0. Signed-off-by: Nick Hu <nick.hu@sifive.com> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
parent
56accc56b9
commit
33ddfc059e
1 changed files with 30 additions and 3 deletions
33
drivers/cache/cache-sifive-ccache.c
vendored
33
drivers/cache/cache-sifive-ccache.c
vendored
|
@ -14,8 +14,17 @@
|
|||
|
||||
#define SIFIVE_CCACHE_WAY_ENABLE 0x008
|
||||
|
||||
#define SIFIVE_CCACHE_TRUNKCLOCKGATE 0x1000
|
||||
#define SIFIVE_CCACHE_TRUNKCLOCKGATE_DISABLE BIT(0)
|
||||
#define SIFIVE_CCACHE_REGIONCLOCKGATE_DISABLE BIT(1)
|
||||
|
||||
struct sifive_ccache {
|
||||
void __iomem *base;
|
||||
bool has_cg;
|
||||
};
|
||||
|
||||
struct sifive_ccache_quirks {
|
||||
bool has_cg;
|
||||
};
|
||||
|
||||
static int sifive_ccache_enable(struct udevice *dev)
|
||||
|
@ -30,6 +39,14 @@ static int sifive_ccache_enable(struct udevice *dev)
|
|||
|
||||
writel(ways - 1, priv->base + SIFIVE_CCACHE_WAY_ENABLE);
|
||||
|
||||
if (priv->has_cg) {
|
||||
/* enable clock gating bits */
|
||||
config = readl(priv->base + SIFIVE_CCACHE_TRUNKCLOCKGATE);
|
||||
config &= ~(SIFIVE_CCACHE_TRUNKCLOCKGATE_DISABLE |
|
||||
SIFIVE_CCACHE_REGIONCLOCKGATE_DISABLE);
|
||||
writel(config, priv->base + SIFIVE_CCACHE_TRUNKCLOCKGATE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -50,7 +67,9 @@ static const struct cache_ops sifive_ccache_ops = {
|
|||
static int sifive_ccache_probe(struct udevice *dev)
|
||||
{
|
||||
struct sifive_ccache *priv = dev_get_priv(dev);
|
||||
const struct sifive_ccache_quirks *quirk = (void *)dev_get_driver_data(dev);
|
||||
|
||||
priv->has_cg = quirk->has_cg;
|
||||
priv->base = dev_read_addr_ptr(dev);
|
||||
if (!priv->base)
|
||||
return -EINVAL;
|
||||
|
@ -58,10 +77,18 @@ static int sifive_ccache_probe(struct udevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct sifive_ccache_quirks fu540_ccache = {
|
||||
.has_cg = false,
|
||||
};
|
||||
|
||||
static const struct sifive_ccache_quirks ccache0 = {
|
||||
.has_cg = true,
|
||||
};
|
||||
|
||||
static const struct udevice_id sifive_ccache_ids[] = {
|
||||
{ .compatible = "sifive,fu540-c000-ccache" },
|
||||
{ .compatible = "sifive,fu740-c000-ccache" },
|
||||
{ .compatible = "sifive,ccache0" },
|
||||
{ .compatible = "sifive,fu540-c000-ccache", .data = (ulong)&fu540_ccache },
|
||||
{ .compatible = "sifive,fu740-c000-ccache", .data = (ulong)&fu540_ccache },
|
||||
{ .compatible = "sifive,ccache0", .data = (ulong)&ccache0 },
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue