提交 1e104ac6 编写于 作者: T Tom Rini

Merge branch 'master' of https://gitlab.denx.de/u-boot/custodians/u-boot-net

- Fix phy_connect() call in two drivers
- fw_setenv bugfix
...@@ -50,7 +50,7 @@ static int bcm_sf2_eth_init(struct eth_device *dev) ...@@ -50,7 +50,7 @@ static int bcm_sf2_eth_init(struct eth_device *dev)
eth->port_num = 0; eth->port_num = 0;
debug("Connecting PHY 0...\n"); debug("Connecting PHY 0...\n");
phydev = phy_connect(miiphy_get_dev_by_name(dev->name), phydev = phy_connect(miiphy_get_dev_by_name(dev->name),
0, dev, eth->phy_interface); -1, dev, eth->phy_interface);
if (phydev != NULL) { if (phydev != NULL) {
eth->port[0] = phydev; eth->port[0] = phydev;
eth->port_num += 1; eth->port_num += 1;
......
...@@ -1045,7 +1045,7 @@ static int eqos_start(struct udevice *dev) ...@@ -1045,7 +1045,7 @@ static int eqos_start(struct udevice *dev)
* don't need to reconnect/reconfigure again * don't need to reconnect/reconfigure again
*/ */
if (!eqos->phy) { if (!eqos->phy) {
eqos->phy = phy_connect(eqos->mii, 0, dev, eqos->phy = phy_connect(eqos->mii, -1, dev,
eqos->config->interface(dev)); eqos->config->interface(dev));
if (!eqos->phy) { if (!eqos->phy) {
pr_err("phy_connect() failed"); pr_err("phy_connect() failed");
......
...@@ -112,6 +112,7 @@ struct environment { ...@@ -112,6 +112,7 @@ struct environment {
unsigned char *flags; unsigned char *flags;
char *data; char *data;
enum flag_scheme flag_scheme; enum flag_scheme flag_scheme;
int dirty;
}; };
static struct environment environment = { static struct environment environment = {
...@@ -506,6 +507,9 @@ int fw_env_flush(struct env_opts *opts) ...@@ -506,6 +507,9 @@ int fw_env_flush(struct env_opts *opts)
if (!opts) if (!opts)
opts = &default_opts; opts = &default_opts;
if (!environment.dirty)
return 0;
/* /*
* Update CRC * Update CRC
*/ */
...@@ -551,7 +555,8 @@ int fw_env_write(char *name, char *value) ...@@ -551,7 +555,8 @@ int fw_env_write(char *name, char *value)
deleting = (oldval && !(value && strlen(value))); deleting = (oldval && !(value && strlen(value)));
creating = (!oldval && (value && strlen(value))); creating = (!oldval && (value && strlen(value)));
overwriting = (oldval && (value && strlen(value))); overwriting = (oldval && (value && strlen(value) &&
strcmp(oldval, value)));
/* check for permission */ /* check for permission */
if (deleting) { if (deleting) {
...@@ -591,6 +596,7 @@ int fw_env_write(char *name, char *value) ...@@ -591,6 +596,7 @@ int fw_env_write(char *name, char *value)
/* Nothing to do */ /* Nothing to do */
return 0; return 0;
environment.dirty = 1;
if (deleting || overwriting) { if (deleting || overwriting) {
if (*++nxt == '\0') { if (*++nxt == '\0') {
*env = '\0'; *env = '\0';
...@@ -1440,6 +1446,7 @@ int fw_env_open(struct env_opts *opts) ...@@ -1440,6 +1446,7 @@ int fw_env_open(struct env_opts *opts)
"Warning: Bad CRC, using default environment\n"); "Warning: Bad CRC, using default environment\n");
memcpy(environment.data, default_environment, memcpy(environment.data, default_environment,
sizeof(default_environment)); sizeof(default_environment));
environment.dirty = 1;
} }
} else { } else {
flag0 = *environment.flags; flag0 = *environment.flags;
...@@ -1493,6 +1500,16 @@ int fw_env_open(struct env_opts *opts) ...@@ -1493,6 +1500,16 @@ int fw_env_open(struct env_opts *opts)
crc1_ok = (crc1 == redundant->crc); crc1_ok = (crc1 == redundant->crc);
flag1 = redundant->flags; flag1 = redundant->flags;
/*
* environment.data still points to ((struct
* env_image_redundant *)addr0)->data. If the two
* environments differ, or one has bad crc, force a
* write-out by marking the environment dirty.
*/
if (memcmp(environment.data, redundant->data, ENV_SIZE) ||
!crc0_ok || !crc1_ok)
environment.dirty = 1;
if (crc0_ok && !crc1_ok) { if (crc0_ok && !crc1_ok) {
dev_current = 0; dev_current = 0;
} else if (!crc0_ok && crc1_ok) { } else if (!crc0_ok && crc1_ok) {
...@@ -1502,6 +1519,7 @@ int fw_env_open(struct env_opts *opts) ...@@ -1502,6 +1519,7 @@ int fw_env_open(struct env_opts *opts)
"Warning: Bad CRC, using default environment\n"); "Warning: Bad CRC, using default environment\n");
memcpy(environment.data, default_environment, memcpy(environment.data, default_environment,
sizeof(default_environment)); sizeof(default_environment));
environment.dirty = 1;
dev_current = 0; dev_current = 0;
} else { } else {
switch (environment.flag_scheme) { switch (environment.flag_scheme) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册