Add support for a driver which sets up DRAM and can return information about the amount of RAM available. This is a first step towards moving RAM init to driver model. Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
10f5f5a90e
commit
6c51df6859
@ -0,0 +1,18 @@ |
|||||||
|
config RAM |
||||||
|
bool "Enable RAM drivers using Driver Model" |
||||||
|
depends on DM |
||||||
|
help |
||||||
|
This allows drivers to be provided for SDRAM and other RAM |
||||||
|
controllers and their type to be specified in the board's device |
||||||
|
tree. Generally some parameters are required to set up the RAM and |
||||||
|
the RAM size can either be statically defined or dynamically |
||||||
|
detected. |
||||||
|
|
||||||
|
config SPL_RAM_SUPPORT |
||||||
|
bool "Enable RAM support in SPL" |
||||||
|
depends on RAM |
||||||
|
help |
||||||
|
The RAM subsystem adds a small amount of overhead to the image. |
||||||
|
If this is acceptable and you have a need to use RAM drivers in |
||||||
|
SPL, enable this option. It might provide a cleaner interface to |
||||||
|
setting up RAM (e.g. SDRAM / DDR) within SPL. |
@ -0,0 +1,7 @@ |
|||||||
|
#
|
||||||
|
# Copyright (c) 2015 Google, Inc
|
||||||
|
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
obj-$(CONFIG_RAM) += ram-uclass.o
|
@ -0,0 +1,28 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Google, Inc |
||||||
|
* Written by Simon Glass <sjg@chromium.org> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <ram.h> |
||||||
|
#include <dm.h> |
||||||
|
#include <errno.h> |
||||||
|
#include <dm/lists.h> |
||||||
|
#include <dm/root.h> |
||||||
|
|
||||||
|
int ram_get_info(struct udevice *dev, struct ram_info *info) |
||||||
|
{ |
||||||
|
struct ram_ops *ops = ram_get_ops(dev); |
||||||
|
|
||||||
|
if (!ops->get_info) |
||||||
|
return -ENOSYS; |
||||||
|
|
||||||
|
return ops->get_info(dev, info); |
||||||
|
} |
||||||
|
|
||||||
|
UCLASS_DRIVER(ram) = { |
||||||
|
.id = UCLASS_RAM, |
||||||
|
.name = "ram", |
||||||
|
}; |
@ -0,0 +1,38 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 Google, Inc |
||||||
|
* Written by Simon Glass <sjg@chromium.org> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __RAM_H |
||||||
|
#define __RAM_H |
||||||
|
|
||||||
|
struct ram_info { |
||||||
|
phys_addr_t base; |
||||||
|
size_t size; |
||||||
|
}; |
||||||
|
|
||||||
|
struct ram_ops { |
||||||
|
/**
|
||||||
|
* get_info() - Get basic memory info |
||||||
|
* |
||||||
|
* @dev: Device to check (UCLASS_RAM) |
||||||
|
* @info: Place to put info |
||||||
|
* @return 0 if OK, -ve on error |
||||||
|
*/ |
||||||
|
int (*get_info)(struct udevice *dev, struct ram_info *info); |
||||||
|
}; |
||||||
|
|
||||||
|
#define ram_get_ops(dev) ((struct ram_ops *)(dev)->driver->ops) |
||||||
|
|
||||||
|
/**
|
||||||
|
* ram_get_info() - Get information about a RAM device |
||||||
|
* |
||||||
|
* @dev: Device to check (UCLASS_RAM) |
||||||
|
* @info: Returns RAM info |
||||||
|
* @return 0 if OK, -ve on error |
||||||
|
*/ |
||||||
|
int ram_get_info(struct udevice *dev, struct ram_info *info); |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue