| // SPDX-License-Identifier: GPL-2.0+ | |
| /* | |
| * Copyright (C) 2021 SiFive, Inc | |
| */ | |
| #include <cache.h> | |
| #include <cpu_func.h> | |
| #include <log.h> | |
| #include <dm.h> | |
| #include <dm/device-internal.h> | |
| #include <dm/uclass-internal.h> | |
| #ifndef CONFIG_SPL_BUILD | |
| void enable_caches(void) | |
| { | |
| struct udevice *dev; | |
| int ret; | |
| /* Enable ways of ccache */ | |
| ret = uclass_get_device_by_driver(UCLASS_CACHE, | |
| DM_DRIVER_GET(sifive_ccache), | |
| &dev); | |
| if (ret) { | |
| log_debug("Cannot enable cache ways"); | |
| } else { | |
| ret = cache_enable(dev); | |
| if (ret) | |
| log_debug("ccache enable failed"); | |
| } | |
| } | |
| #else | |
| static inline void probe_cache_device(struct driver *driver, struct udevice *dev) | |
| { | |
| for (uclass_find_first_device(UCLASS_CACHE, &dev); | |
| dev; | |
| uclass_find_next_device(&dev)) { | |
| if (dev->driver == driver) | |
| device_probe(dev); | |
| } | |
| } | |
| void enable_caches(void) | |
| { | |
| struct udevice *dev = NULL; | |
| probe_cache_device(DM_DRIVER_GET(sifive_pl2), dev); | |
| } | |
| #endif /* !CONFIG_SPL_BUILD */ |