mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-09-24 00:12:13 +00:00
Merge branch '2022-10-26-assorted-fixes-and-updates'
- Reduce memory usage in SPL in some cases, clarify some standalone API license issues, fix a Kconfig dependency, pin to a specific version of python setuptools for now, fix a signing problem in mkimage and add a memory uclass.
This commit is contained in:
commit
8bc87a4c55
25 changed files with 2128 additions and 26 deletions
|
@ -7,9 +7,13 @@ use U-Boot services by means of the jump table provided by U-Boot
|
|||
exactly for this purpose - this is merely considered normal use of
|
||||
U-Boot, and does *not* fall under the heading of "derived work".
|
||||
|
||||
The header files "include/image.h" and "arch/*/include/asm/u-boot.h"
|
||||
define interfaces to U-Boot. Including these (unmodified) header
|
||||
files in another file is considered normal use of U-Boot, and does
|
||||
*not* fall under the heading of "derived work".
|
||||
The following files define interfaces to U-Boot:
|
||||
* include/image.h
|
||||
* include/export.h
|
||||
* arch/*/include/asm/u-boot.h
|
||||
* examples/standalone/stubs.c
|
||||
|
||||
Including these (unmodified) files in another file is considered normal
|
||||
use of U-Boot, and does *not* fall under the heading of "derived work".
|
||||
-- Wolfgang Denk
|
||||
|
||||
|
|
|
@ -932,6 +932,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
memory-controller {
|
||||
compatible = "sandbox,memory";
|
||||
};
|
||||
|
||||
misc-test {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
|
|
@ -260,10 +260,10 @@ static int fit_config_check_sig(const void *fit, int noffset, int conf_noffset,
|
|||
char **err_msgp)
|
||||
{
|
||||
static char * const exc_prop[] = {
|
||||
"data",
|
||||
"data-size",
|
||||
"data-position",
|
||||
"data-offset"
|
||||
FIT_DATA_PROP,
|
||||
FIT_DATA_SIZE_PROP,
|
||||
FIT_DATA_POSITION_PROP,
|
||||
FIT_DATA_OFFSET_PROP,
|
||||
};
|
||||
|
||||
const char *prop, *end, *name;
|
||||
|
|
|
@ -796,6 +796,13 @@ config SPL_DM_MAILBOX
|
|||
this option to build the drivers in drivers/mailbox as part of
|
||||
SPL build.
|
||||
|
||||
config SPL_MEMORY
|
||||
bool "Support Memory controller drivers"
|
||||
help
|
||||
Enable support for Memory Controller drivers within SPL.
|
||||
These devices provide Memory bus interface to various devices like
|
||||
SRAM, Ethernet adapters, FPGAs, etc.
|
||||
|
||||
config SPL_MMC
|
||||
bool "Support MMC"
|
||||
depends on MMC
|
||||
|
|
|
@ -77,32 +77,29 @@ static inline int spl_image_get_comp(const struct legacy_img_hdr *hdr)
|
|||
|
||||
int spl_load_legacy_img(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev,
|
||||
struct spl_load_info *load, ulong header)
|
||||
struct spl_load_info *load, ulong offset,
|
||||
struct legacy_img_hdr *hdr)
|
||||
{
|
||||
__maybe_unused SizeT lzma_len;
|
||||
__maybe_unused void *src;
|
||||
struct legacy_img_hdr hdr;
|
||||
ulong dataptr;
|
||||
int ret;
|
||||
|
||||
/* Read header into local struct */
|
||||
load->read(load, header, sizeof(hdr), &hdr);
|
||||
|
||||
/*
|
||||
* If the payload is compressed, the decompressed data should be
|
||||
* directly write to its load address.
|
||||
*/
|
||||
if (spl_image_get_comp(&hdr) != IH_COMP_NONE)
|
||||
if (spl_image_get_comp(hdr) != IH_COMP_NONE)
|
||||
spl_image->flags |= SPL_COPY_PAYLOAD_ONLY;
|
||||
|
||||
ret = spl_parse_image_header(spl_image, bootdev, &hdr);
|
||||
ret = spl_parse_image_header(spl_image, bootdev, hdr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Read image */
|
||||
switch (spl_image_get_comp(&hdr)) {
|
||||
switch (spl_image_get_comp(hdr)) {
|
||||
case IH_COMP_NONE:
|
||||
dataptr = header;
|
||||
dataptr = offset;
|
||||
|
||||
/*
|
||||
* Image header will be skipped only if SPL_COPY_PAYLOAD_ONLY
|
||||
|
@ -119,7 +116,7 @@ int spl_load_legacy_img(struct spl_image_info *spl_image,
|
|||
lzma_len = LZMA_LEN;
|
||||
|
||||
/* dataptr points to compressed payload */
|
||||
dataptr = header + sizeof(hdr);
|
||||
dataptr = offset + sizeof(hdr);
|
||||
|
||||
debug("LZMA: Decompressing %08lx to %08lx\n",
|
||||
dataptr, spl_image->load_addr);
|
||||
|
@ -143,7 +140,7 @@ int spl_load_legacy_img(struct spl_image_info *spl_image,
|
|||
|
||||
default:
|
||||
debug("Compression method %s is not supported\n",
|
||||
genimg_get_comp_short_name(image_get_comp(&hdr)));
|
||||
genimg_get_comp_short_name(image_get_comp(hdr)));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image,
|
|||
load.bl_len = 1;
|
||||
load.read = spl_nand_legacy_read;
|
||||
|
||||
return spl_load_legacy_img(spl_image, bootdev, &load, offset);
|
||||
return spl_load_legacy_img(spl_image, bootdev, &load, offset, header);
|
||||
} else {
|
||||
err = spl_parse_image_header(spl_image, bootdev, header);
|
||||
if (err)
|
||||
|
|
|
@ -111,10 +111,14 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
|
|||
|
||||
/* Legacy image handling */
|
||||
if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT)) {
|
||||
struct legacy_img_hdr hdr;
|
||||
|
||||
load.bl_len = 1;
|
||||
load.read = spl_nor_load_read;
|
||||
spl_nor_load_read(&load, spl_nor_get_uboot_base(), sizeof(hdr), &hdr);
|
||||
return spl_load_legacy_img(spl_image, bootdev, &load,
|
||||
spl_nor_get_uboot_base());
|
||||
spl_nor_get_uboot_base(),
|
||||
&hdr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
252
doc/device-tree-bindings/memory/ti,gpmc-child.yaml
Normal file
252
doc/device-tree-bindings/memory/ti,gpmc-child.yaml
Normal file
|
@ -0,0 +1,252 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/memory-controllers/ti,gpmc-child.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: device tree bindings for children of the Texas Instruments GPMC
|
||||
|
||||
maintainers:
|
||||
- Tony Lindgren <tony@atomide.com>
|
||||
- Roger Quadros <rogerq@kernel.org>
|
||||
|
||||
description:
|
||||
This binding is meant for the child nodes of the GPMC node. The node
|
||||
represents any device connected to the GPMC bus. It may be a Flash chip,
|
||||
RAM chip or Ethernet controller, etc. These properties are meant for
|
||||
configuring the GPMC settings/timings and will accompany the bindings
|
||||
supported by the respective device.
|
||||
|
||||
properties:
|
||||
reg: true
|
||||
|
||||
# GPMC Timing properties for child nodes. All are optional and default to 0.
|
||||
gpmc,sync-clk-ps:
|
||||
description: Minimum clock period for synchronous mode
|
||||
default: 0
|
||||
|
||||
# Chip-select signal timings corresponding to GPMC_CONFIG2:
|
||||
gpmc,cs-on-ns:
|
||||
description: Assertion time
|
||||
default: 0
|
||||
|
||||
gpmc,cs-rd-off-ns:
|
||||
description: Read deassertion time
|
||||
default: 0
|
||||
|
||||
gpmc,cs-wr-off-ns:
|
||||
description: Write deassertion time
|
||||
default: 0
|
||||
|
||||
# ADV signal timings corresponding to GPMC_CONFIG3:
|
||||
gpmc,adv-on-ns:
|
||||
description: Assertion time
|
||||
default: 0
|
||||
|
||||
gpmc,adv-rd-off-ns:
|
||||
description: Read deassertion time
|
||||
default: 0
|
||||
|
||||
gpmc,adv-wr-off-ns:
|
||||
description: Write deassertion time
|
||||
default: 0
|
||||
|
||||
gpmc,adv-aad-mux-on-ns:
|
||||
description: Assertion time for AAD
|
||||
default: 0
|
||||
|
||||
gpmc,adv-aad-mux-rd-off-ns:
|
||||
description: Read deassertion time for AAD
|
||||
default: 0
|
||||
|
||||
gpmc,adv-aad-mux-wr-off-ns:
|
||||
description: Write deassertion time for AAD
|
||||
default: 0
|
||||
|
||||
# WE signals timings corresponding to GPMC_CONFIG4:
|
||||
gpmc,we-on-ns:
|
||||
description: Assertion time
|
||||
default: 0
|
||||
|
||||
gpmc,we-off-ns:
|
||||
description: Deassertion time
|
||||
default: 0
|
||||
|
||||
# OE signals timings corresponding to GPMC_CONFIG4:
|
||||
gpmc,oe-on-ns:
|
||||
description: Assertion time
|
||||
default: 0
|
||||
|
||||
gpmc,oe-off-ns:
|
||||
description: Deassertion time
|
||||
default: 0
|
||||
|
||||
gpmc,oe-aad-mux-on-ns:
|
||||
description: Assertion time for AAD
|
||||
default: 0
|
||||
|
||||
gpmc,oe-aad-mux-off-ns:
|
||||
description: Deassertion time for AAD
|
||||
default: 0
|
||||
|
||||
# Access time and cycle time timings (in nanoseconds) corresponding to
|
||||
# GPMC_CONFIG5:
|
||||
gpmc,page-burst-access-ns:
|
||||
description: Multiple access word delay
|
||||
default: 0
|
||||
|
||||
gpmc,access-ns:
|
||||
description: Start-cycle to first data valid delay
|
||||
default: 0
|
||||
|
||||
gpmc,rd-cycle-ns:
|
||||
description: Total read cycle time
|
||||
default: 0
|
||||
|
||||
gpmc,wr-cycle-ns:
|
||||
description: Total write cycle time
|
||||
default: 0
|
||||
|
||||
gpmc,bus-turnaround-ns:
|
||||
description: Turn-around time between successive accesses
|
||||
default: 0
|
||||
|
||||
gpmc,cycle2cycle-delay-ns:
|
||||
description: Delay between chip-select pulses
|
||||
default: 0
|
||||
|
||||
gpmc,clk-activation-ns:
|
||||
description: GPMC clock activation time
|
||||
default: 0
|
||||
|
||||
gpmc,wait-monitoring-ns:
|
||||
description: Start of wait monitoring with regard to valid data
|
||||
default: 0
|
||||
|
||||
# Boolean timing parameters. If property is present, parameter is enabled
|
||||
# otherwise disabled.
|
||||
gpmc,adv-extra-delay:
|
||||
description: ADV signal is delayed by half GPMC clock
|
||||
type: boolean
|
||||
|
||||
gpmc,cs-extra-delay:
|
||||
description: CS signal is delayed by half GPMC clock
|
||||
type: boolean
|
||||
|
||||
gpmc,cycle2cycle-diffcsen:
|
||||
description: |
|
||||
Add "cycle2cycle-delay" between successive accesses
|
||||
to a different CS
|
||||
type: boolean
|
||||
|
||||
gpmc,cycle2cycle-samecsen:
|
||||
description: |
|
||||
Add "cycle2cycle-delay" between successive accesses
|
||||
to the same CS
|
||||
type: boolean
|
||||
|
||||
gpmc,oe-extra-delay:
|
||||
description: OE signal is delayed by half GPMC clock
|
||||
type: boolean
|
||||
|
||||
gpmc,we-extra-delay:
|
||||
description: WE signal is delayed by half GPMC clock
|
||||
type: boolean
|
||||
|
||||
gpmc,time-para-granularity:
|
||||
description: Multiply all access times by 2
|
||||
type: boolean
|
||||
|
||||
# The following two properties are applicable only to OMAP3+ and AM335x:
|
||||
gpmc,wr-access-ns:
|
||||
description: |
|
||||
In synchronous write mode, for single or
|
||||
burst accesses, defines the number of
|
||||
GPMC_FCLK cycles from start access time
|
||||
to the GPMC_CLK rising edge used by the
|
||||
memory device for the first data capture.
|
||||
default: 0
|
||||
|
||||
gpmc,wr-data-mux-bus-ns:
|
||||
description: |
|
||||
In address-data multiplex mode, specifies
|
||||
the time when the first data is driven on
|
||||
the address-data bus.
|
||||
default: 0
|
||||
|
||||
# GPMC chip-select settings properties for child nodes. All are optional.
|
||||
gpmc,burst-length:
|
||||
description: Page/burst length.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [0, 4, 8, 16]
|
||||
default: 0
|
||||
|
||||
gpmc,burst-wrap:
|
||||
description: Enables wrap bursting
|
||||
type: boolean
|
||||
|
||||
gpmc,burst-read:
|
||||
description: Enables read page/burst mode
|
||||
type: boolean
|
||||
|
||||
gpmc,burst-write:
|
||||
description: Enables write page/burst mode
|
||||
type: boolean
|
||||
|
||||
gpmc,device-width:
|
||||
description: |
|
||||
Total width of device(s) connected to a GPMC
|
||||
chip-select in bytes. The GPMC supports 8-bit
|
||||
and 16-bit devices and so this property must be
|
||||
1 or 2.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [1, 2]
|
||||
default: 1
|
||||
|
||||
gpmc,mux-add-data:
|
||||
description: |
|
||||
Address and data multiplexing configuration.
|
||||
Valid values are
|
||||
0 for Non multiplexed mode
|
||||
1 for address-address-data multiplexing mode and
|
||||
2 for address-data multiplexing mode.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [0, 1, 2]
|
||||
|
||||
gpmc,sync-read:
|
||||
description: |
|
||||
Enables synchronous read. Defaults to asynchronous
|
||||
is this is not set.
|
||||
type: boolean
|
||||
|
||||
gpmc,sync-write:
|
||||
description: |
|
||||
Enables synchronous writes. Defaults to asynchronous
|
||||
is this is not set.
|
||||
type: boolean
|
||||
|
||||
gpmc,wait-pin:
|
||||
description: |
|
||||
Wait-pin used by client. Must be less than "gpmc,num-waitpins".
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
gpmc,wait-pin-polarity:
|
||||
description: |
|
||||
Set the desired polarity for the selected wait pin.
|
||||
0 for active low, 1 for active high.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [0, 1]
|
||||
|
||||
gpmc,wait-on-read:
|
||||
description: Enables wait monitoring on reads.
|
||||
type: boolean
|
||||
|
||||
gpmc,wait-on-write:
|
||||
description: Enables wait monitoring on writes.
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
- reg
|
||||
|
||||
# the GPMC child will have its own native properties
|
||||
additionalProperties: true
|
190
doc/device-tree-bindings/memory/ti,gpmc.yaml
Normal file
190
doc/device-tree-bindings/memory/ti,gpmc.yaml
Normal file
|
@ -0,0 +1,190 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/memory-controllers/ti,gpmc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Texas Instruments GPMC Memory Controller device-tree bindings
|
||||
|
||||
maintainers:
|
||||
- Tony Lindgren <tony@atomide.com>
|
||||
- Roger Quadros <rogerq@kernel.org>
|
||||
|
||||
description:
|
||||
The GPMC is a unified memory controller dedicated for interfacing
|
||||
with external memory devices like
|
||||
- Asynchronous SRAM-like memories and ASICs
|
||||
- Asynchronous, synchronous, and page mode burst NOR flash
|
||||
- NAND flash
|
||||
- Pseudo-SRAM devices
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- ti,am3352-gpmc
|
||||
- ti,am64-gpmc
|
||||
- ti,omap2420-gpmc
|
||||
- ti,omap2430-gpmc
|
||||
- ti,omap3430-gpmc
|
||||
- ti,omap4430-gpmc
|
||||
|
||||
reg:
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
reg-names:
|
||||
items:
|
||||
- const: cfg
|
||||
- const: data
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
description: |
|
||||
Functional clock. Used for bus timing calculations and
|
||||
GPMC configuration.
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: fck
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
|
||||
dmas:
|
||||
items:
|
||||
- description: DMA channel for GPMC NAND prefetch
|
||||
|
||||
dma-names:
|
||||
items:
|
||||
- const: rxtx
|
||||
|
||||
"#address-cells": true
|
||||
|
||||
"#size-cells": true
|
||||
|
||||
gpmc,num-cs:
|
||||
description: maximum number of supported chip-select lines.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
gpmc,num-waitpins:
|
||||
description: maximum number of supported wait pins.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
ranges:
|
||||
minItems: 1
|
||||
description: |
|
||||
Must be set up to reflect the memory layout with four
|
||||
integer values for each chip-select line in use,
|
||||
<cs-number> 0 <physical address of mapping> <size>
|
||||
items:
|
||||
- description: NAND bank 0
|
||||
- description: NOR/SRAM bank 0
|
||||
- description: NOR/SRAM bank 1
|
||||
|
||||
'#interrupt-cells':
|
||||
const: 2
|
||||
|
||||
interrupt-controller:
|
||||
description: |
|
||||
The GPMC driver implements and interrupt controller for
|
||||
the NAND events "fifoevent" and "termcount" plus the
|
||||
rising/falling edges on the GPMC_WAIT pins.
|
||||
The interrupt number mapping is as follows
|
||||
0 - NAND_fifoevent
|
||||
1 - NAND_termcount
|
||||
2 - GPMC_WAIT0 pin edge
|
||||
3 - GPMC_WAIT1 pin edge, and so on.
|
||||
|
||||
'#gpio-cells':
|
||||
const: 2
|
||||
|
||||
gpio-controller:
|
||||
description: |
|
||||
The GPMC driver implements a GPIO controller for the
|
||||
GPMC WAIT pins that can be used as general purpose inputs.
|
||||
0 maps to GPMC_WAIT0 pin.
|
||||
|
||||
ti,hwmods:
|
||||
description:
|
||||
Name of the HWMOD associated with GPMC. This is for legacy
|
||||
omap2/3 platforms only.
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
deprecated: true
|
||||
|
||||
ti,no-idle-on-init:
|
||||
description:
|
||||
Prevent idling the module at init. This is for legacy omap2/3
|
||||
platforms only.
|
||||
type: boolean
|
||||
deprecated: true
|
||||
|
||||
patternProperties:
|
||||
"@[0-7],[a-f0-9]+$":
|
||||
type: object
|
||||
description: |
|
||||
The child device node represents the device connected to the GPMC
|
||||
bus. The device can be a NAND chip, SRAM device, NOR device
|
||||
or an ASIC.
|
||||
$ref: "ti,gpmc-child.yaml"
|
||||
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- gpmc,num-cs
|
||||
- gpmc,num-waitpins
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: ti,am64-gpmc
|
||||
then:
|
||||
required:
|
||||
- reg-names
|
||||
- power-domains
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
gpmc: memory-controller@50000000 {
|
||||
compatible = "ti,am3352-gpmc";
|
||||
reg = <0x50000000 0x2000>;
|
||||
interrupts = <100>;
|
||||
clocks = <&l3s_clkctrl>;
|
||||
clock-names = "fck";
|
||||
dmas = <&edma 52 0>;
|
||||
dma-names = "rxtx";
|
||||
gpmc,num-cs = <8>;
|
||||
gpmc,num-waitpins = <2>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 0x08000000 0x10000000>; /* CS0 @addr 0x8000000, size 0x10000000 */
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
nand@0,0 {
|
||||
compatible = "ti,omap2-nand";
|
||||
reg = <0 0 4>;
|
||||
interrupt-parent = <&gpmc>;
|
||||
interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
|
||||
<1 IRQ_TYPE_NONE>; /* termcount */
|
||||
ti,nand-xfer-type = "prefetch-dma";
|
||||
ti,nand-ecc-opt = "bch16";
|
||||
ti,elm-id = <&elm>;
|
||||
rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 pin */
|
||||
};
|
||||
};
|
|
@ -10,7 +10,8 @@ config HASH_SOFTWARE
|
|||
depends on MD5
|
||||
depends on SHA1
|
||||
depends on SHA256
|
||||
depends on SHA512_ALGO
|
||||
depends on SHA384
|
||||
depends on SHA512
|
||||
help
|
||||
Enable driver for hashing operations in software. Currently
|
||||
it support multiple hash algorithm including CRC/MD5/SHA.
|
||||
|
|
|
@ -4,6 +4,23 @@
|
|||
|
||||
menu "Memory Controller drivers"
|
||||
|
||||
config MEMORY
|
||||
bool "Enable Driver Model for Memory Controller drivers"
|
||||
depends on DM
|
||||
help
|
||||
Enable driver model for Memory Controller devices.
|
||||
These devices provide Memory bus interface to various devices like
|
||||
SRAM, Ethernet adapters, FPGAs, etc.
|
||||
For now this uclass has no methods yet.
|
||||
|
||||
config SANDBOX_MEMORY
|
||||
bool "Enable Sandbox Memory Controller driver"
|
||||
depends on SANDBOX && MEMORY
|
||||
help
|
||||
This is a driver model based Memory Controller driver for sandbox.
|
||||
Currently it is a stub only, as there are no usable uclass methods
|
||||
yet.
|
||||
|
||||
config STM32_FMC2_EBI
|
||||
bool "Support for FMC2 External Bus Interface on STM32MP SoCs"
|
||||
depends on ARCH_STM32MP
|
||||
|
@ -24,4 +41,23 @@ config TI_AEMIF
|
|||
of 256M bytes of any of these memories can be accessed at a given
|
||||
time via four chip selects with 64M byte access per chip select.
|
||||
|
||||
config TI_GPMC
|
||||
bool "Texas Instruments GPMC driver"
|
||||
depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3
|
||||
depends on MEMORY && CLK && OF_CONTROL
|
||||
help
|
||||
This driver is for the General Purpose Memory Controller (GPMC)
|
||||
present on Texas Instruments SoCs (e.g. OMAP2+). GPMC allows
|
||||
interfacing to a variety of asynchronous as well as synchronous
|
||||
memory drives like NOR, NAND, OneNAND, SRAM.
|
||||
|
||||
if TI_GPMC
|
||||
config TI_GPMC_DEBUG
|
||||
bool "Debug Texas Instruments GPMC timings"
|
||||
default n
|
||||
help
|
||||
Enable this to print GPMC timings before and after the GPMC registers
|
||||
are programmed. This should not be left enabled on production systems.
|
||||
endif
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
|
||||
obj-$(CONFIG_MEMORY) += memory-uclass.o
|
||||
obj-$(CONFIG_SANDBOX_MEMORY) += memory-sandbox.o
|
||||
obj-$(CONFIG_STM32_FMC2_EBI) += stm32-fmc2-ebi.o
|
||||
obj-$(CONFIG_TI_AEMIF) += ti-aemif.o
|
||||
obj-$(CONFIG_TI_GPMC) += ti-gpmc.o
|
||||
|
|
18
drivers/memory/memory-sandbox.c
Normal file
18
drivers/memory/memory-sandbox.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* (C) Copyright 2022
|
||||
* Texas Instruments Incorporated, <www.ti.com>
|
||||
*/
|
||||
|
||||
#include <dm.h>
|
||||
|
||||
static const struct udevice_id sandbox_memory_match[] = {
|
||||
{ .compatible = "sandbox,memory" },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sandbox_memory) = {
|
||||
.name = "sandbox_memory",
|
||||
.id = UCLASS_MEMORY,
|
||||
.of_match = sandbox_memory_match,
|
||||
};
|
13
drivers/memory/memory-uclass.c
Normal file
13
drivers/memory/memory-uclass.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* (C) Copyright 2022
|
||||
* Texas Instruments Incorporated, <www.ti.com>
|
||||
*/
|
||||
|
||||
#include <dm.h>
|
||||
|
||||
UCLASS_DRIVER(memory) = {
|
||||
.name = "memory",
|
||||
.id = UCLASS_MEMORY,
|
||||
.post_bind = dm_scan_fdt_dev,
|
||||
};
|
1240
drivers/memory/ti-gpmc.c
Normal file
1240
drivers/memory/ti-gpmc.c
Normal file
File diff suppressed because it is too large
Load diff
298
drivers/memory/ti-gpmc.h
Normal file
298
drivers/memory/ti-gpmc.h
Normal file
|
@ -0,0 +1,298 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Texas Instruments GPMC Driver
|
||||
*
|
||||
* Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*/
|
||||
|
||||
/* GPMC register offsets */
|
||||
#define GPMC_REVISION 0x00
|
||||
#define GPMC_SYSCONFIG 0x10
|
||||
#define GPMC_SYSSTATUS 0x14
|
||||
#define GPMC_IRQSTATUS 0x18
|
||||
#define GPMC_IRQENABLE 0x1c
|
||||
#define GPMC_TIMEOUT_CONTROL 0x40
|
||||
#define GPMC_ERR_ADDRESS 0x44
|
||||
#define GPMC_ERR_TYPE 0x48
|
||||
#define GPMC_CONFIG 0x50
|
||||
#define GPMC_STATUS 0x54
|
||||
#define GPMC_PREFETCH_CONFIG1 0x1e0
|
||||
#define GPMC_PREFETCH_CONFIG2 0x1e4
|
||||
#define GPMC_PREFETCH_CONTROL 0x1ec
|
||||
#define GPMC_PREFETCH_STATUS 0x1f0
|
||||
#define GPMC_ECC_CONFIG 0x1f4
|
||||
#define GPMC_ECC_CONTROL 0x1f8
|
||||
#define GPMC_ECC_SIZE_CONFIG 0x1fc
|
||||
#define GPMC_ECC1_RESULT 0x200
|
||||
#define GPMC_ECC_BCH_RESULT_0 0x240 /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_1 0x244 /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_2 0x248 /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_3 0x24c /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_4 0x300 /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_5 0x304 /* not available on OMAP2 */
|
||||
#define GPMC_ECC_BCH_RESULT_6 0x308 /* not available on OMAP2 */
|
||||
|
||||
/* GPMC ECC control settings */
|
||||
#define GPMC_ECC_CTRL_ECCCLEAR 0x100
|
||||
#define GPMC_ECC_CTRL_ECCDISABLE 0x000
|
||||
#define GPMC_ECC_CTRL_ECCREG1 0x001
|
||||
#define GPMC_ECC_CTRL_ECCREG2 0x002
|
||||
#define GPMC_ECC_CTRL_ECCREG3 0x003
|
||||
#define GPMC_ECC_CTRL_ECCREG4 0x004
|
||||
#define GPMC_ECC_CTRL_ECCREG5 0x005
|
||||
#define GPMC_ECC_CTRL_ECCREG6 0x006
|
||||
#define GPMC_ECC_CTRL_ECCREG7 0x007
|
||||
#define GPMC_ECC_CTRL_ECCREG8 0x008
|
||||
#define GPMC_ECC_CTRL_ECCREG9 0x009
|
||||
|
||||
#define GPMC_CONFIG_LIMITEDADDRESS BIT(1)
|
||||
|
||||
#define GPMC_STATUS_EMPTYWRITEBUFFERSTATUS BIT(0)
|
||||
|
||||
#define GPMC_CONFIG2_CSEXTRADELAY BIT(7)
|
||||
#define GPMC_CONFIG3_ADVEXTRADELAY BIT(7)
|
||||
#define GPMC_CONFIG4_OEEXTRADELAY BIT(7)
|
||||
#define GPMC_CONFIG4_WEEXTRADELAY BIT(23)
|
||||
#define GPMC_CONFIG6_CYCLE2CYCLEDIFFCSEN BIT(6)
|
||||
#define GPMC_CONFIG6_CYCLE2CYCLESAMECSEN BIT(7)
|
||||
|
||||
#define GPMC_CS0_OFFSET 0x60
|
||||
#define GPMC_CS_SIZE 0x30
|
||||
#define GPMC_BCH_SIZE 0x10
|
||||
|
||||
/*
|
||||
* The first 1MB of GPMC address space is typically mapped to
|
||||
* the internal ROM. Never allocate the first page, to
|
||||
* facilitate bug detection; even if we didn't boot from ROM.
|
||||
* As GPMC minimum partition size is 16MB we can only start from
|
||||
* there.
|
||||
*/
|
||||
#define GPMC_MEM_START 0x1000000
|
||||
#define GPMC_MEM_END 0x3FFFFFFF
|
||||
|
||||
#define GPMC_CHUNK_SHIFT 24 /* 16 MB */
|
||||
#define GPMC_SECTION_SHIFT 28 /* 128 MB */
|
||||
|
||||
#define CS_NUM_SHIFT 24
|
||||
#define ENABLE_PREFETCH (0x1 << 7)
|
||||
#define DMA_MPU_MODE 2
|
||||
|
||||
#define GPMC_REVISION_MAJOR(l) (((l) >> 4) & 0xf)
|
||||
#define GPMC_REVISION_MINOR(l) ((l) & 0xf)
|
||||
|
||||
#define GPMC_HAS_WR_ACCESS 0x1
|
||||
#define GPMC_HAS_WR_DATA_MUX_BUS 0x2
|
||||
#define GPMC_HAS_MUX_AAD 0x4
|
||||
|
||||
#define GPMC_NR_WAITPINS 4
|
||||
|
||||
#define GPMC_CS_CONFIG1 0x00
|
||||
#define GPMC_CS_CONFIG2 0x04
|
||||
#define GPMC_CS_CONFIG3 0x08
|
||||
#define GPMC_CS_CONFIG4 0x0c
|
||||
#define GPMC_CS_CONFIG5 0x10
|
||||
#define GPMC_CS_CONFIG6 0x14
|
||||
#define GPMC_CS_CONFIG7 0x18
|
||||
#define GPMC_CS_NAND_COMMAND 0x1c
|
||||
#define GPMC_CS_NAND_ADDRESS 0x20
|
||||
#define GPMC_CS_NAND_DATA 0x24
|
||||
|
||||
/* Control Commands */
|
||||
#define GPMC_CONFIG_RDY_BSY 0x00000001
|
||||
#define GPMC_CONFIG_DEV_SIZE 0x00000002
|
||||
#define GPMC_CONFIG_DEV_TYPE 0x00000003
|
||||
|
||||
#define GPMC_CONFIG_WP 0x00000005
|
||||
|
||||
#define GPMC_CONFIG1_WRAPBURST_SUPP BIT(31)
|
||||
#define GPMC_CONFIG1_READMULTIPLE_SUPP BIT(30)
|
||||
#define GPMC_CONFIG1_READTYPE_ASYNC (0 << 29)
|
||||
#define GPMC_CONFIG1_READTYPE_SYNC BIT(29)
|
||||
#define GPMC_CONFIG1_WRITEMULTIPLE_SUPP BIT(28)
|
||||
#define GPMC_CONFIG1_WRITETYPE_ASYNC (0 << 27)
|
||||
#define GPMC_CONFIG1_WRITETYPE_SYNC BIT(27)
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME(val) (((val) & 3) << 25)
|
||||
/** CLKACTIVATIONTIME Max Ticks */
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME_MAX 2
|
||||
#define GPMC_CONFIG1_PAGE_LEN(val) (((val) & 3) << 23)
|
||||
/** ATTACHEDDEVICEPAGELENGTH Max Value */
|
||||
#define GPMC_CONFIG1_ATTACHEDDEVICEPAGELENGTH_MAX 2
|
||||
#define GPMC_CONFIG1_WAIT_READ_MON BIT(22)
|
||||
#define GPMC_CONFIG1_WAIT_WRITE_MON BIT(21)
|
||||
#define GPMC_CONFIG1_WAIT_MON_TIME(val) (((val) & 3) << 18)
|
||||
/** WAITMONITORINGTIME Max Ticks */
|
||||
#define GPMC_CONFIG1_WAITMONITORINGTIME_MAX 2
|
||||
#define GPMC_CONFIG1_WAIT_PIN_SEL(val) (((val) & 3) << 16)
|
||||
#define GPMC_CONFIG1_DEVICESIZE(val) (((val) & 3) << 12)
|
||||
#define GPMC_CONFIG1_DEVICESIZE_16 GPMC_CONFIG1_DEVICESIZE(1)
|
||||
/** DEVICESIZE Max Value */
|
||||
#define GPMC_CONFIG1_DEVICESIZE_MAX 1
|
||||
#define GPMC_CONFIG1_DEVICETYPE(val) (((val) & 3) << 10)
|
||||
#define GPMC_CONFIG1_DEVICETYPE_NOR GPMC_CONFIG1_DEVICETYPE(0)
|
||||
#define GPMC_CONFIG1_MUXTYPE(val) (((val) & 3) << 8)
|
||||
#define GPMC_CONFIG1_TIME_PARA_GRAN BIT(4)
|
||||
#define GPMC_CONFIG1_FCLK_DIV(val) ((val) & 3)
|
||||
#define GPMC_CONFIG1_FCLK_DIV2 (GPMC_CONFIG1_FCLK_DIV(1))
|
||||
#define GPMC_CONFIG1_FCLK_DIV3 (GPMC_CONFIG1_FCLK_DIV(2))
|
||||
#define GPMC_CONFIG1_FCLK_DIV4 (GPMC_CONFIG1_FCLK_DIV(3))
|
||||
#define GPMC_CONFIG7_CSVALID BIT(6)
|
||||
|
||||
#define GPMC_CONFIG7_BASEADDRESS_MASK 0x3f
|
||||
#define GPMC_CONFIG7_CSVALID_MASK BIT(6)
|
||||
#define GPMC_CONFIG7_MASKADDRESS_OFFSET 8
|
||||
#define GPMC_CONFIG7_MASKADDRESS_MASK (0xf << GPMC_CONFIG7_MASKADDRESS_OFFSET)
|
||||
/* All CONFIG7 bits except reserved bits */
|
||||
#define GPMC_CONFIG7_MASK (GPMC_CONFIG7_BASEADDRESS_MASK | \
|
||||
GPMC_CONFIG7_CSVALID_MASK | \
|
||||
GPMC_CONFIG7_MASKADDRESS_MASK)
|
||||
|
||||
#define GPMC_DEVICETYPE_NOR 0
|
||||
#define GPMC_DEVICETYPE_NAND 2
|
||||
#define GPMC_CONFIG_WRITEPROTECT 0x00000010
|
||||
#define WR_RD_PIN_MONITORING 0x00600000
|
||||
|
||||
/* ECC commands */
|
||||
#define GPMC_ECC_READ 0 /* Reset Hardware ECC for read */
|
||||
#define GPMC_ECC_WRITE 1 /* Reset Hardware ECC for write */
|
||||
#define GPMC_ECC_READSYN 2 /* Reset before syndrom is read back */
|
||||
|
||||
#define GPMC_NR_NAND_IRQS 2 /* number of NAND specific IRQs */
|
||||
|
||||
/* bool type time settings */
|
||||
struct gpmc_bool_timings {
|
||||
bool cycle2cyclediffcsen;
|
||||
bool cycle2cyclesamecsen;
|
||||
bool we_extra_delay;
|
||||
bool oe_extra_delay;
|
||||
bool adv_extra_delay;
|
||||
bool cs_extra_delay;
|
||||
bool time_para_granularity;
|
||||
};
|
||||
|
||||
/*
|
||||
* Note that all values in this struct are in nanoseconds except sync_clk
|
||||
* (which is in picoseconds), while the register values are in gpmc_fck cycles.
|
||||
*/
|
||||
struct gpmc_timings {
|
||||
/* Minimum clock period for synchronous mode (in picoseconds) */
|
||||
u32 sync_clk;
|
||||
|
||||
/* Chip-select signal timings corresponding to GPMC_CS_CONFIG2 */
|
||||
u32 cs_on; /* Assertion time */
|
||||
u32 cs_rd_off; /* Read deassertion time */
|
||||
u32 cs_wr_off; /* Write deassertion time */
|
||||
|
||||
/* ADV signal timings corresponding to GPMC_CONFIG3 */
|
||||
u32 adv_on; /* Assertion time */
|
||||
u32 adv_rd_off; /* Read deassertion time */
|
||||
u32 adv_wr_off; /* Write deassertion time */
|
||||
u32 adv_aad_mux_on; /* ADV assertion time for AAD */
|
||||
u32 adv_aad_mux_rd_off; /* ADV read deassertion time for AAD */
|
||||
u32 adv_aad_mux_wr_off; /* ADV write deassertion time for AAD */
|
||||
|
||||
/* WE signals timings corresponding to GPMC_CONFIG4 */
|
||||
u32 we_on; /* WE assertion time */
|
||||
u32 we_off; /* WE deassertion time */
|
||||
|
||||
/* OE signals timings corresponding to GPMC_CONFIG4 */
|
||||
u32 oe_on; /* OE assertion time */
|
||||
u32 oe_off; /* OE deassertion time */
|
||||
u32 oe_aad_mux_on; /* OE assertion time for AAD */
|
||||
u32 oe_aad_mux_off; /* OE deassertion time for AAD */
|
||||
|
||||
/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
|
||||
u32 page_burst_access; /* Multiple access word delay */
|
||||
u32 access; /* Start-cycle to first data valid delay */
|
||||
u32 rd_cycle; /* Total read cycle time */
|
||||
u32 wr_cycle; /* Total write cycle time */
|
||||
|
||||
u32 bus_turnaround;
|
||||
u32 cycle2cycle_delay;
|
||||
|
||||
u32 wait_monitoring;
|
||||
u32 clk_activation;
|
||||
|
||||
/* The following are only on OMAP3430 */
|
||||
u32 wr_access; /* WRACCESSTIME */
|
||||
u32 wr_data_mux_bus; /* WRDATAONADMUXBUS */
|
||||
|
||||
struct gpmc_bool_timings bool_timings;
|
||||
};
|
||||
|
||||
/* Device timings in picoseconds */
|
||||
struct gpmc_device_timings {
|
||||
u32 t_ceasu; /* address setup to CS valid */
|
||||
u32 t_avdasu; /* address setup to ADV valid */
|
||||
/* XXX: try to combine t_avdp_r & t_avdp_w. Issue is
|
||||
* of tusb using these timings even for sync whilst
|
||||
* ideally for adv_rd/(wr)_off it should have considered
|
||||
* t_avdh instead. This indirectly necessitates r/w
|
||||
* variations of t_avdp as it is possible to have one
|
||||
* sync & other async
|
||||
*/
|
||||
u32 t_avdp_r; /* ADV low time (what about t_cer ?) */
|
||||
u32 t_avdp_w;
|
||||
u32 t_aavdh; /* address hold time */
|
||||
u32 t_oeasu; /* address setup to OE valid */
|
||||
u32 t_aa; /* access time from ADV assertion */
|
||||
u32 t_iaa; /* initial access time */
|
||||
u32 t_oe; /* access time from OE assertion */
|
||||
u32 t_ce; /* access time from CS asertion */
|
||||
u32 t_rd_cycle; /* read cycle time */
|
||||
u32 t_cez_r; /* read CS deassertion to high Z */
|
||||
u32 t_cez_w; /* write CS deassertion to high Z */
|
||||
u32 t_oez; /* OE deassertion to high Z */
|
||||
u32 t_weasu; /* address setup to WE valid */
|
||||
u32 t_wpl; /* write assertion time */
|
||||
u32 t_wph; /* write deassertion time */
|
||||
u32 t_wr_cycle; /* write cycle time */
|
||||
|
||||
u32 clk;
|
||||
u32 t_bacc; /* burst access valid clock to output delay */
|
||||
u32 t_ces; /* CS setup time to clk */
|
||||
u32 t_avds; /* ADV setup time to clk */
|
||||
u32 t_avdh; /* ADV hold time from clk */
|
||||
u32 t_ach; /* address hold time from clk */
|
||||
u32 t_rdyo; /* clk to ready valid */
|
||||
|
||||
u32 t_ce_rdyz; /* XXX: description ?, or use t_cez instead */
|
||||
u32 t_ce_avd; /* CS on to ADV on delay */
|
||||
|
||||
/* XXX: check the possibility of combining
|
||||
* cyc_aavhd_oe & cyc_aavdh_we
|
||||
*/
|
||||
u8 cyc_aavdh_oe;/* read address hold time in cycles */
|
||||
u8 cyc_aavdh_we;/* write address hold time in cycles */
|
||||
u8 cyc_oe; /* access time from OE assertion in cycles */
|
||||
u8 cyc_wpl; /* write deassertion time in cycles */
|
||||
u32 cyc_iaa; /* initial access time in cycles */
|
||||
|
||||
/* extra delays */
|
||||
bool ce_xdelay;
|
||||
bool avd_xdelay;
|
||||
bool oe_xdelay;
|
||||
bool we_xdelay;
|
||||
};
|
||||
|
||||
#define GPMC_BURST_4 4 /* 4 word burst */
|
||||
#define GPMC_BURST_8 8 /* 8 word burst */
|
||||
#define GPMC_BURST_16 16 /* 16 word burst */
|
||||
#define GPMC_DEVWIDTH_8BIT 1 /* 8-bit device width */
|
||||
#define GPMC_DEVWIDTH_16BIT 2 /* 16-bit device width */
|
||||
#define GPMC_MUX_AAD 1 /* Addr-Addr-Data multiplex */
|
||||
#define GPMC_MUX_AD 2 /* Addr-Data multiplex */
|
||||
|
||||
struct gpmc_settings {
|
||||
bool burst_wrap; /* enables wrap bursting */
|
||||
bool burst_read; /* enables read page/burst mode */
|
||||
bool burst_write; /* enables write page/burst mode */
|
||||
bool device_nand; /* device is NAND */
|
||||
bool sync_read; /* enables synchronous reads */
|
||||
bool sync_write; /* enables synchronous writes */
|
||||
bool wait_on_read; /* monitor wait on reads */
|
||||
bool wait_on_write; /* monitor wait on writes */
|
||||
u32 burst_len; /* page/burst length */
|
||||
u32 device_width; /* device bus width (8 or 16 bit) */
|
||||
u32 mux_add_data; /* multiplex address & data */
|
||||
u32 wait_pin; /* wait-pin to be used */
|
||||
};
|
|
@ -4,7 +4,6 @@
|
|||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <exports.h>
|
||||
|
||||
int hello_world(int argc, char *const argv[])
|
||||
|
|
|
@ -77,6 +77,7 @@ enum uclass_id {
|
|||
UCLASS_MASS_STORAGE, /* Mass storage device */
|
||||
UCLASS_MDIO, /* MDIO bus */
|
||||
UCLASS_MDIO_MUX, /* MDIO MUX/switch */
|
||||
UCLASS_MEMORY, /* Memory Controller device */
|
||||
UCLASS_MISC, /* Miscellaneous device */
|
||||
UCLASS_MMC, /* SD / MMC card or chip */
|
||||
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
#ifndef __ASM_OMAP_GPMC_H
|
||||
#define __ASM_OMAP_GPMC_H
|
||||
|
||||
/* Maximum Number of Chip Selects */
|
||||
#define GPMC_CS_NUM 8
|
||||
|
||||
#define GPMC_BUF_EMPTY 0
|
||||
#define GPMC_BUF_FULL 1
|
||||
#define GPMC_MAX_SECTORS 8
|
||||
|
|
|
@ -353,7 +353,8 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
|
|||
* spl_load_legacy_img() - Loads a legacy image from a device.
|
||||
* @spl_image: Image description to set up
|
||||
* @load: Structure containing the information required to load data.
|
||||
* @header: Pointer to image header (including appended image)
|
||||
* @offset: Pointer to image
|
||||
* @hdr: Pointer to image header
|
||||
*
|
||||
* Reads an legacy image from the device. Loads u-boot image to
|
||||
* specified load address.
|
||||
|
@ -361,7 +362,9 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
|
|||
*/
|
||||
int spl_load_legacy_img(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev,
|
||||
struct spl_load_info *load, ulong header);
|
||||
struct spl_load_info *load, ulong offset,
|
||||
struct legacy_img_hdr *hdr);
|
||||
|
||||
|
||||
/**
|
||||
* spl_load_imx_container() - Loads a imx container image from a device.
|
||||
|
|
|
@ -114,6 +114,7 @@ libs-$(CONFIG_PARTITIONS) += disk/
|
|||
endif
|
||||
|
||||
libs-y += drivers/
|
||||
libs-$(CONFIG_SPL_MEMORY) += drivers/memory/
|
||||
libs-$(CONFIG_SPL_USB_GADGET) += drivers/usb/dwc3/
|
||||
libs-$(CONFIG_SPL_USB_GADGET) += drivers/usb/cdns3/
|
||||
libs-y += dts/
|
||||
|
|
|
@ -57,6 +57,7 @@ obj-$(CONFIG_LED) += led.o
|
|||
obj-$(CONFIG_DM_MAILBOX) += mailbox.o
|
||||
obj-$(CONFIG_DM_MDIO) += mdio.o
|
||||
obj-$(CONFIG_DM_MDIO_MUX) += mdio_mux.o
|
||||
obj-$(CONFIG_MEMORY) += memory.o
|
||||
obj-$(CONFIG_MISC) += misc.o
|
||||
obj-$(CONFIG_DM_MMC) += mmc.o
|
||||
obj-$(CONFIG_CMD_MUX) += mux-cmd.o
|
||||
|
|
21
test/dm/memory.c
Normal file
21
test/dm/memory.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* (C) Copyright 2022
|
||||
* Texas Instruments Incorporated, <www.ti.com>
|
||||
*/
|
||||
|
||||
#include <dm.h>
|
||||
#include <dm/test.h>
|
||||
#include <test/test.h>
|
||||
#include <test/ut.h>
|
||||
|
||||
static int dm_test_memory(struct unit_test_state *uts)
|
||||
{
|
||||
struct udevice *dev;
|
||||
|
||||
ut_assertok(uclass_first_device_err(UCLASS_MEMORY, &dev));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DM_TEST(dm_test_memory, UT_TESTF_SCAN_FDT);
|
|
@ -20,6 +20,7 @@ pytest-xdist==2.5.0
|
|||
python-mimeparse==1.6.0
|
||||
python-subunit==1.3.0
|
||||
requests==2.25.1
|
||||
setuptools==58.3.0
|
||||
six==1.12.0
|
||||
testtools==2.3.0
|
||||
traceback2==1.4.0
|
||||
|
|
|
@ -915,7 +915,12 @@ static int fit_config_get_regions(const void *fit, int conf_noffset,
|
|||
int *region_countp, char **region_propp,
|
||||
int *region_proplen)
|
||||
{
|
||||
char * const exc_prop[] = {"data"};
|
||||
char * const exc_prop[] = {
|
||||
FIT_DATA_PROP,
|
||||
FIT_DATA_SIZE_PROP,
|
||||
FIT_DATA_POSITION_PROP,
|
||||
FIT_DATA_OFFSET_PROP,
|
||||
};
|
||||
struct strlist node_inc;
|
||||
struct image_region *region;
|
||||
struct fdt_region fdt_regions[100];
|
||||
|
|
Loading…
Reference in a new issue