blob: 1e5da94eb1fbac0d7780bdd3720143e9ebe9d3a8 [file] [log] [blame]
Tom Rini8b0c8a12018-05-06 18:27:01 -04001/* SPDX-License-Identifier: GPL 2.0+ OR BSD-3-Clause */
Thomas Gleixner820d24d2016-07-12 20:28:12 +02002/*
3 * Copyright (c) Thomas Gleixner <tglx@linutronix.de>
Thomas Gleixner820d24d2016-07-12 20:28:12 +02004 */
5#ifndef __UBOOT_UBISPL_H
6#define __UBOOT_UBISPL_H
7
8/*
9 * The following CONFIG options are relevant for UBISPL
10 *
11 * #define CONFIG_SPL_UBI_MAX_VOL_LEBS 256
12 *
13 * Defines the maximum number of logical erase blocks per loadable
14 * (static) volume to size the ubispl internal arrays.
15 *
16 * #define CONFIG_SPL_UBI_MAX_PEB_SIZE (256*1024)
17 *
18 * Defines the maximum physical erase block size to size the fastmap
19 * buffer for ubispl.
20 *
21 * #define CONFIG_SPL_UBI_MAX_PEBS 4096
22 *
23 * Define the maximum number of physical erase blocks to size the
24 * ubispl internal arrays.
25 *
26 * #define CONFIG_SPL_UBI_VOL_IDS 8
27 *
28 * Defines the maximum number of volumes in which UBISPL is
29 * interested. Limits the amount of memory for the scan data and
30 * speeds up the scan process as we simply ignore stuff which we dont
31 * want to load from the SPL anyway. So the volumes which can be
32 * loaded in the above example are ids 0 - 7
33 */
34
35/*
36 * The struct definition is in drivers/mtd/ubispl/ubispl.h. It does
37 * not fit into the BSS due to the large buffer requirement of the
38 * upstream fastmap code. So the caller of ubispl_load_volumes needs
39 * to hand in a pointer to a free memory area where ubispl will place
40 * its data. The area is not required to be initialized.
41 */
42struct ubi_scan_info;
43
44typedef int (*ubispl_read_flash)(int pnum, int offset, int len, void *dst);
45
46/**
47 * struct ubispl_info - description structure for fast ubi scan
48 * @ubi: Pointer to memory space for ubi scan info structure
49 * @peb_size: Physical erase block size
50 * @vid_offset: Offset of the VID header
51 * @leb_start: Start of the logical erase block, i.e. offset of data
52 * @peb_count: Number of physical erase blocks in the UBI FLASH area
53 * aka MTD partition.
54 * @peb_offset: Offset of PEB0 in the UBI FLASH area (aka MTD partition)
55 * to the real start of the FLASH in erase blocks.
56 * @fastmap: Enable fastmap attachment
57 * @read: Read function to access the flash
58 */
59struct ubispl_info {
60 struct ubi_scan_info *ubi;
61 u32 peb_size;
62 u32 vid_offset;
63 u32 leb_start;
64 u32 peb_count;
65 u32 peb_offset;
66 int fastmap;
67 ubispl_read_flash read;
68};
69
70/**
71 * struct ubispl_load - structure to describe a volume to load
72 * @vol_id: Volume id
73 * @load_addr: Load address of the volume
74 */
75struct ubispl_load {
76 int vol_id;
77 void *load_addr;
78};
79
80/**
81 * ubispl_load_volumes - Scan flash and load volumes
82 * @info: Pointer to the ubi scan info structure
83 * @lovls: Pointer to array of volumes to load
84 * @nrvols: Array size of @lovls
85 */
86int ubispl_load_volumes(struct ubispl_info *info,
87 struct ubispl_load *lvols, int nrvols);
88
89#endif