// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 2023 SiFive */ #include #include #include #include #include #include #define SIFIVE_PL2CHICKENBIT_OFFSET 0x1000 #define SIFIVE_PL2CHICKENBIT_REGIONCLOCKDISABLE_MASK BIT(3) static int sifive_pl2_probe(struct udevice *dev) { fdt_addr_t base; u32 val; base = dev_read_addr(dev); if (base == FDT_ADDR_T_NONE) return -EINVAL; /* Enable regionClockDisable bit */ val = readl((void __iomem *)(base + SIFIVE_PL2CHICKENBIT_OFFSET)); writel(val & ~SIFIVE_PL2CHICKENBIT_REGIONCLOCKDISABLE_MASK, (void __iomem *)(base + SIFIVE_PL2CHICKENBIT_OFFSET)); return 0; } static const struct udevice_id sifive_pl2_ids[] = { { .compatible = "sifive,pl2cache0" }, { .compatible = "sifive,pl2cache1" }, {} }; U_BOOT_DRIVER(sifive_pl2) = { .name = "sifive_pl2", .id = UCLASS_CACHE, .of_match = sifive_pl2_ids, .probe = sifive_pl2_probe, };