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