dm: Add support for RAM drivers
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>
This commit is contained in:
parent
10f5f5a90e
commit
6c51df6859
@ -34,6 +34,8 @@ source "drivers/gpio/Kconfig"
|
|||||||
|
|
||||||
source "drivers/power/Kconfig"
|
source "drivers/power/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/ram/Kconfig"
|
||||||
|
|
||||||
source "drivers/hwmon/Kconfig"
|
source "drivers/hwmon/Kconfig"
|
||||||
|
|
||||||
source "drivers/watchdog/Kconfig"
|
source "drivers/watchdog/Kconfig"
|
||||||
|
@ -11,6 +11,7 @@ obj-$(CONFIG_LED) += led/
|
|||||||
obj-y += misc/
|
obj-y += misc/
|
||||||
obj-y += pcmcia/
|
obj-y += pcmcia/
|
||||||
obj-y += dfu/
|
obj-y += dfu/
|
||||||
|
obj-$(CONFIG_RAM) += ram/
|
||||||
obj-y += rtc/
|
obj-y += rtc/
|
||||||
obj-y += sound/
|
obj-y += sound/
|
||||||
obj-y += tpm/
|
obj-y += tpm/
|
||||||
|
18
drivers/ram/Kconfig
Normal file
18
drivers/ram/Kconfig
Normal file
@ -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.
|
7
drivers/ram/Makefile
Normal file
7
drivers/ram/Makefile
Normal file
@ -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
|
28
drivers/ram/ram-uclass.c
Normal file
28
drivers/ram/ram-uclass.c
Normal file
@ -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",
|
||||||
|
};
|
@ -28,6 +28,7 @@ enum uclass_id {
|
|||||||
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 */
|
||||||
UCLASS_DISPLAY_PORT, /* Display port video */
|
UCLASS_DISPLAY_PORT, /* Display port video */
|
||||||
|
UCLASS_RAM, /* RAM controller */
|
||||||
UCLASS_ETH, /* Ethernet device */
|
UCLASS_ETH, /* Ethernet device */
|
||||||
UCLASS_GPIO, /* Bank of general-purpose I/O pins */
|
UCLASS_GPIO, /* Bank of general-purpose I/O pins */
|
||||||
UCLASS_I2C, /* I2C bus */
|
UCLASS_I2C, /* I2C bus */
|
||||||
|
38
include/ram.h
Normal file
38
include/ram.h
Normal file
@ -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
|
@ -78,6 +78,7 @@ libs-$(CONFIG_SPL_NET_SUPPORT) += net/
|
|||||||
libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/
|
libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/
|
||||||
libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/
|
libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/
|
||||||
libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/
|
libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/
|
||||||
|
libs-$(CONFIG_SPL_RAM_SUPPORT) += drivers/ram/
|
||||||
libs-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/
|
libs-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/
|
||||||
libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/
|
libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/
|
||||||
libs-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/
|
libs-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/
|
||||||
|
Loading…
Reference in New Issue
Block a user