Skip to content
Snippets Groups Projects
Commit 84b124db authored by Dinh Nguyen's avatar Dinh Nguyen Committed by Tom Rini
Browse files

dm: cache: Create a uclass for cache


The cache UCLASS will be used for configure settings that can be found
in a CPU's L2 cache controller.

Add a uclass and a test for cache.

Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
Signed-off-by: default avatarDinh Nguyen <dinguyen@kernel.org>
parent 2bac27ce
No related branches found
No related tags found
No related merge requests found
...@@ -14,6 +14,8 @@ source "drivers/block/Kconfig" ...@@ -14,6 +14,8 @@ source "drivers/block/Kconfig"
source "drivers/bootcount/Kconfig" source "drivers/bootcount/Kconfig"
source "drivers/cache/Kconfig"
source "drivers/clk/Kconfig" source "drivers/clk/Kconfig"
source "drivers/cpu/Kconfig" source "drivers/cpu/Kconfig"
......
...@@ -77,6 +77,7 @@ obj-$(CONFIG_BIOSEMU) += bios_emulator/ ...@@ -77,6 +77,7 @@ obj-$(CONFIG_BIOSEMU) += bios_emulator/
obj-y += block/ obj-y += block/
obj-y += board/ obj-y += board/
obj-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount/ obj-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount/
obj-y += cache/
obj-$(CONFIG_CPU) += cpu/ obj-$(CONFIG_CPU) += cpu/
obj-y += crypto/ obj-y += crypto/
obj-$(CONFIG_FASTBOOT) += fastboot/ obj-$(CONFIG_FASTBOOT) += fastboot/
......
#
# Cache controllers
#
menu "Cache Controller drivers"
config CACHE
bool "Enable Driver Model for Cache controllers"
depends on DM
help
Enable driver model for cache controllers that are found on
most CPU's. Cache is memory that the CPU can access directly and
is usually located on the same chip. This uclass can be used for
configuring settings that be found from a device tree file.
endmenu
obj-$(CONFIG_CACHE) += cache-uclass.o
obj-$(CONFIG_SANDBOX) += sandbox_cache.o
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2019 Intel Corporation <www.intel.com>
*/
#include <common.h>
#include <cache.h>
#include <dm.h>
int cache_get_info(struct udevice *dev, struct cache_info *info)
{
struct cache_ops *ops = cache_get_ops(dev);
if (!ops->get_info)
return -ENOSYS;
return ops->get_info(dev, info);
}
UCLASS_DRIVER(cache) = {
.id = UCLASS_CACHE,
.name = "cache",
.post_bind = dm_scan_fdt_dev,
};
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 Intel Corporation <www.intel.com>
*/
#include <common.h>
#include <cache.h>
#include <dm.h>
#include <errno.h>
DECLARE_GLOBAL_DATA_PTR;
static int sandbox_get_info(struct udevice *dev, struct cache_info *info)
{
info->base = 0x11223344;
return 0;
}
static const struct cache_ops sandbox_cache_ops = {
.get_info = sandbox_get_info,
};
static const struct udevice_id sandbox_cache_ids[] = {
{ .compatible = "sandbox,cache" },
{ }
};
U_BOOT_DRIVER(cache_sandbox) = {
.name = "cache_sandbox",
.id = UCLASS_CACHE,
.of_match = sandbox_cache_ids,
.ops = &sandbox_cache_ops,
};
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 Intel Corporation <www.intel.com>
*/
#ifndef __CACHE_H
#define __CACHE_H
/*
* Structure for the cache controller
*/
struct cache_info {
phys_addr_t base; /* Base physical address of cache device. */
};
struct cache_ops {
/**
* get_info() - Get basic cache info
*
* @dev: Device to check (UCLASS_CACHE)
* @info: Place to put info
* @return 0 if OK, -ve on error
*/
int (*get_info)(struct udevice *dev, struct cache_info *info);
};
#define cache_get_ops(dev) ((struct cache_ops *)(dev)->driver->ops)
/**
* cache_get_info() - Get information about a cache controller
*
* @dev: Device to check (UCLASS_CACHE)
* @info: Returns cache info
* @return 0 if OK, -ve on error
*/
int cache_get_info(struct udevice *dev, struct cache_info *info);
#endif
...@@ -34,6 +34,7 @@ enum uclass_id { ...@@ -34,6 +34,7 @@ enum uclass_id {
UCLASS_BLK, /* Block device */ UCLASS_BLK, /* Block device */
UCLASS_BOARD, /* Device information from hardware */ UCLASS_BOARD, /* Device information from hardware */
UCLASS_BOOTCOUNT, /* Bootcount backing store */ UCLASS_BOOTCOUNT, /* Bootcount backing store */
UCLASS_CACHE, /* Cache controller */
UCLASS_CLK, /* Clock source, e.g. used by peripherals */ UCLASS_CLK, /* Clock source, e.g. used by peripherals */
UCLASS_CPU, /* CPU, typically part of an SoC */ UCLASS_CPU, /* CPU, typically part of an SoC */
UCLASS_CROS_EC, /* Chrome OS EC */ UCLASS_CROS_EC, /* Chrome OS EC */
......
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 Intel Corporation <www.intel.com>
*/
#include <common.h>
#include <dm.h>
#include <dm/test.h>
static int dm_test_reset(struct unit_test_state *uts)
{
struct udevice *dev_cache;
struct cache_info;
ut_assertok(uclass_get_device(UCLASS_CACHE, 0, &dev_cache));
ut_assertok(cache_get_info(dev, &info));
return 0;
}
DM_TEST(dm_test_reset, DM_TESTF_SCAN_FDT);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment