Blame view

env/fat.c 3.08 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
57210c7cc   Maximilian Schwerin   Add support for l...
2
3
4
5
6
  /*
   * (c) Copyright 2011 by Tigris Elektronik GmbH
   *
   * Author:
   *  Maximilian Schwerin <mvs@tigris.de>
57210c7cc   Maximilian Schwerin   Add support for l...
7
8
9
10
11
12
13
14
   */
  
  #include <common.h>
  
  #include <command.h>
  #include <environment.h>
  #include <linux/stddef.h>
  #include <malloc.h>
cf92e05c0   Simon Glass   Move ALLOC_CACHE_...
15
  #include <memalign.h>
57210c7cc   Maximilian Schwerin   Add support for l...
16
17
18
19
  #include <search.h>
  #include <errno.h>
  #include <fat.h>
  #include <mmc.h>
4415f1d1f   Simon Glass   env: Create a loc...
20
21
22
23
24
25
26
27
28
29
30
  #ifdef CONFIG_SPL_BUILD
  /* TODO(sjg@chromium.org): Figure out why this is needed */
  # if !defined(CONFIG_TARGET_AM335X_EVM) || defined(CONFIG_SPL_OS_BOOT)
  #  define LOADENV
  # endif
  #else
  # define LOADENV
  # if defined(CONFIG_CMD_SAVEENV)
  #  define CMD_SAVEENV
  # endif
  #endif
4415f1d1f   Simon Glass   env: Create a loc...
31
  #ifdef CMD_SAVEENV
e5bce247b   Simon Glass   env: Switch over ...
32
  static int env_fat_save(void)
57210c7cc   Maximilian Schwerin   Add support for l...
33
  {
cda87ec55   Alex Kiernan   Fix misaligned bu...
34
  	env_t __aligned(ARCH_DMA_MINALIGN) env_new;
4101f6879   Simon Glass   dm: Drop the bloc...
35
  	struct blk_desc *dev_desc = NULL;
be354c1a2   Wu, Josh   env_fat: use get_...
36
37
  	disk_partition_t info;
  	int dev, part;
9aa90c1df   Igor Grinberg   env: checkpatch c...
38
  	int err;
1ad0b98a0   Suriyan Ramasami   fat: Prepare API ...
39
  	loff_t size;
57210c7cc   Maximilian Schwerin   Add support for l...
40

7ce1526ed   Marek Vasut   env: Add env_expo...
41
42
43
  	err = env_export(&env_new);
  	if (err)
  		return err;
57210c7cc   Maximilian Schwerin   Add support for l...
44

43ba3c59c   Tom Rini   env: Migrate CONF...
45
46
  	part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
  					CONFIG_ENV_FAT_DEVICE_AND_PART,
be354c1a2   Wu, Josh   env_fat: use get_...
47
48
  					&dev_desc, &info, 1);
  	if (part < 0)
57210c7cc   Maximilian Schwerin   Add support for l...
49
  		return 1;
9aa90c1df   Igor Grinberg   env: checkpatch c...
50

bcce53d04   Simon Glass   dm: block: Rename...
51
  	dev = dev_desc->devnum;
be354c1a2   Wu, Josh   env_fat: use get_...
52
  	if (fat_set_blk_dev(dev_desc, &info) != 0) {
d0816da54   Maxime Ripard   env: fat: Make th...
53
54
55
56
57
58
  		/*
  		 * This printf is embedded in the messages from env_save that
  		 * will calling it. The missing 
   is intentional.
  		 */
  		printf("Unable to use %s %d:%d... ",
43ba3c59c   Tom Rini   env: Migrate CONF...
59
  		       CONFIG_ENV_FAT_INTERFACE, dev, part);
57210c7cc   Maximilian Schwerin   Add support for l...
60
61
  		return 1;
  	}
43ba3c59c   Tom Rini   env: Migrate CONF...
62
  	err = file_fat_write(CONFIG_ENV_FAT_FILE, (void *)&env_new, 0, sizeof(env_t),
1ad0b98a0   Suriyan Ramasami   fat: Prepare API ...
63
  			     &size);
9aa90c1df   Igor Grinberg   env: checkpatch c...
64
  	if (err == -1) {
d0816da54   Maxime Ripard   env: fat: Make th...
65
66
67
68
69
70
  		/*
  		 * This printf is embedded in the messages from env_save that
  		 * will calling it. The missing 
   is intentional.
  		 */
  		printf("Unable to write \"%s\" from %s%d:%d... ",
43ba3c59c   Tom Rini   env: Migrate CONF...
71
  			CONFIG_ENV_FAT_FILE, CONFIG_ENV_FAT_INTERFACE, dev, part);
57210c7cc   Maximilian Schwerin   Add support for l...
72
73
  		return 1;
  	}
57210c7cc   Maximilian Schwerin   Add support for l...
74
75
  	return 0;
  }
4415f1d1f   Simon Glass   env: Create a loc...
76
  #endif /* CMD_SAVEENV */
57210c7cc   Maximilian Schwerin   Add support for l...
77

4415f1d1f   Simon Glass   env: Create a loc...
78
  #ifdef LOADENV
c59519919   Simon Glass   env: Adjust the l...
79
  static int env_fat_load(void)
57210c7cc   Maximilian Schwerin   Add support for l...
80
  {
6d1966e12   Tom Rini   env_fat.c: Make s...
81
  	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
4101f6879   Simon Glass   dm: Drop the bloc...
82
  	struct blk_desc *dev_desc = NULL;
be354c1a2   Wu, Josh   env_fat: use get_...
83
84
  	disk_partition_t info;
  	int dev, part;
9aa90c1df   Igor Grinberg   env: checkpatch c...
85
  	int err;
57210c7cc   Maximilian Schwerin   Add support for l...
86

95058fbb9   Heinrich Schuchardt   env: mmc/fat/ext4...
87
  #ifdef CONFIG_MMC
26862b4a4   Faiz Abbas   env: mmc/fat/ext4...
88
89
  	if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc"))
  		mmc_initialize(NULL);
95058fbb9   Heinrich Schuchardt   env: mmc/fat/ext4...
90
  #endif
26862b4a4   Faiz Abbas   env: mmc/fat/ext4...
91

43ba3c59c   Tom Rini   env: Migrate CONF...
92
93
  	part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
  					CONFIG_ENV_FAT_DEVICE_AND_PART,
be354c1a2   Wu, Josh   env_fat: use get_...
94
95
96
  					&dev_desc, &info, 1);
  	if (part < 0)
  		goto err_env_relocate;
bcce53d04   Simon Glass   dm: block: Rename...
97
  	dev = dev_desc->devnum;
be354c1a2   Wu, Josh   env_fat: use get_...
98
  	if (fat_set_blk_dev(dev_desc, &info) != 0) {
d0816da54   Maxime Ripard   env: fat: Make th...
99
100
101
102
103
104
  		/*
  		 * This printf is embedded in the messages from env_save that
  		 * will calling it. The missing 
   is intentional.
  		 */
  		printf("Unable to use %s %d:%d... ",
43ba3c59c   Tom Rini   env: Migrate CONF...
105
  		       CONFIG_ENV_FAT_INTERFACE, dev, part);
be354c1a2   Wu, Josh   env_fat: use get_...
106
  		goto err_env_relocate;
57210c7cc   Maximilian Schwerin   Add support for l...
107
  	}
43ba3c59c   Tom Rini   env: Migrate CONF...
108
  	err = file_fat_read(CONFIG_ENV_FAT_FILE, buf, CONFIG_ENV_SIZE);
9aa90c1df   Igor Grinberg   env: checkpatch c...
109
  	if (err == -1) {
d0816da54   Maxime Ripard   env: fat: Make th...
110
111
112
113
114
115
  		/*
  		 * This printf is embedded in the messages from env_save that
  		 * will calling it. The missing 
   is intentional.
  		 */
  		printf("Unable to read \"%s\" from %s%d:%d... ",
43ba3c59c   Tom Rini   env: Migrate CONF...
116
  			CONFIG_ENV_FAT_FILE, CONFIG_ENV_FAT_INTERFACE, dev, part);
be354c1a2   Wu, Josh   env_fat: use get_...
117
  		goto err_env_relocate;
57210c7cc   Maximilian Schwerin   Add support for l...
118
  	}
2166ebf78   Simon Goldschmidt   env: make env dri...
119
  	return env_import(buf, 1);
be354c1a2   Wu, Josh   env_fat: use get_...
120
121
  
  err_env_relocate:
c5d548a9f   Yaniv Levinsky   env: common: acce...
122
  	set_default_env(NULL, 0);
c59519919   Simon Glass   env: Adjust the l...
123
124
  
  	return -EIO;
57210c7cc   Maximilian Schwerin   Add support for l...
125
  }
4415f1d1f   Simon Glass   env: Create a loc...
126
127
128
129
  #endif /* LOADENV */
  
  U_BOOT_ENV_LOCATION(fat) = {
  	.location	= ENVL_FAT,
ac358beb8   Simon Glass   env: Drop the env...
130
  	ENV_NAME("FAT")
4415f1d1f   Simon Glass   env: Create a loc...
131
  #ifdef LOADENV
e5bce247b   Simon Glass   env: Switch over ...
132
  	.load		= env_fat_load,
4415f1d1f   Simon Glass   env: Create a loc...
133
134
  #endif
  #ifdef CMD_SAVEENV
e5bce247b   Simon Glass   env: Switch over ...
135
  	.save		= env_save_ptr(env_fat_save),
4415f1d1f   Simon Glass   env: Create a loc...
136
  #endif
4415f1d1f   Simon Glass   env: Create a loc...
137
  };