[U-Boot] [PATCH] w1: fix build without CONFIG_W1_EEPROM

Building with CONFIG_W1 and CONFIG_CMD_W1 but without CONFIG_W1_EEPROM fails with drivers/w1/w1-uclass.c:104: undefined reference to `w1_eeprom_register_new_device' cmd/w1.c:93: undefined reference to `w1_eeprom_read_buf'
Fix this.
Signed-off-by: Martin Fuzzey martin.fuzzey@flowbird.group --- cmd/w1.c | 9 ++++++++- drivers/w1/w1-uclass.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/cmd/w1.c b/cmd/w1.c index 9c95fcf..9765bd6 100644 --- a/cmd/w1.c +++ b/cmd/w1.c @@ -41,6 +41,7 @@ static int w1_bus(void) return CMD_RET_SUCCESS; }
+#ifdef CONFIG_W1_EEPROM static int w1_read(int argc, char *const argv[]) { int bus_n = 0, dev_n = 0, offset = 0, len = 512; @@ -102,6 +103,7 @@ static int w1_read(int argc, char *const argv[])
return CMD_RET_SUCCESS; } +#endif
int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { @@ -111,8 +113,10 @@ int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (!strcmp(argv[1], "bus")) return w1_bus();
+#ifdef CONFIG_W1_EEPROM if (!strcmp(argv[1], "read")) return w1_read(argc, argv); +#endif
return CMD_RET_SUCCESS; } @@ -120,7 +124,10 @@ int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) U_BOOT_CMD(w1, 6, 0, do_w1, "onewire interface utility commands", "bus - show onewire bus info (all)\n" +#ifdef CONFIG_W1_EEPROM "w1 read [<bus> [<dev> [offset [length]]]]" " - read from onewire device 'dev' on onewire bus 'bus'" " starting from offset 'offset' and length 'length'\n" - " defaults: bus 0, dev 0, offset 0, length 512 bytes."); + " defaults: bus 0, dev 0, offset 0, length 512 bytes." +#endif + ); diff --git a/drivers/w1/w1-uclass.c b/drivers/w1/w1-uclass.c index cb41b68..5544b19 100644 --- a/drivers/w1/w1-uclass.c +++ b/drivers/w1/w1-uclass.c @@ -100,8 +100,10 @@ static int w1_enumerate(struct udevice *bus) debug("%s: Detected new device 0x%llx (family 0x%x)\n", bus->name, rn, (u8)(rn & 0xff));
+#ifdef CONFIG_W1_EEPROM /* attempt to register as w1-eeprom device */ w1_eeprom_register_new_device(rn); +#endif } }

On 22.10.2018 19:51, Martin Fuzzey wrote:
Building with CONFIG_W1 and CONFIG_CMD_W1 but without CONFIG_W1_EEPROM fails with drivers/w1/w1-uclass.c:104: undefined reference to `w1_eeprom_register_new_device' cmd/w1.c:93: undefined reference to `w1_eeprom_read_buf'
Fix this.
I would prefer if you let the w1 read command to be accessible regardless if CONFIG_W1_EEPROM is defined or not. Hence have only the w1 eeprom reads under the ifdef... The w1_read checks for devices anyway and for the bus, so it should print invalid bus/device if nothing is present there. Any opinion on this ?
Thanks, Eugen
Signed-off-by: Martin Fuzzey martin.fuzzey@flowbird.group
cmd/w1.c | 9 ++++++++- drivers/w1/w1-uclass.c | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/cmd/w1.c b/cmd/w1.c index 9c95fcf..9765bd6 100644 --- a/cmd/w1.c +++ b/cmd/w1.c @@ -41,6 +41,7 @@ static int w1_bus(void) return CMD_RET_SUCCESS; }
+#ifdef CONFIG_W1_EEPROM static int w1_read(int argc, char *const argv[]) { int bus_n = 0, dev_n = 0, offset = 0, len = 512; @@ -102,6 +103,7 @@ static int w1_read(int argc, char *const argv[])
return CMD_RET_SUCCESS; } +#endif
int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { @@ -111,8 +113,10 @@ int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (!strcmp(argv[1], "bus")) return w1_bus();
+#ifdef CONFIG_W1_EEPROM if (!strcmp(argv[1], "read")) return w1_read(argc, argv); +#endif
return CMD_RET_SUCCESS; } @@ -120,7 +124,10 @@ int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) U_BOOT_CMD(w1, 6, 0, do_w1, "onewire interface utility commands", "bus - show onewire bus info (all)\n" +#ifdef CONFIG_W1_EEPROM "w1 read [<bus> [<dev> [offset [length]]]]" " - read from onewire device 'dev' on onewire bus 'bus'" " starting from offset 'offset' and length 'length'\n"
" defaults: bus 0, dev 0, offset 0, length 512 bytes.");
" defaults: bus 0, dev 0, offset 0, length 512 bytes."
+#endif
);
diff --git a/drivers/w1/w1-uclass.c b/drivers/w1/w1-uclass.c index cb41b68..5544b19 100644 --- a/drivers/w1/w1-uclass.c +++ b/drivers/w1/w1-uclass.c @@ -100,8 +100,10 @@ static int w1_enumerate(struct udevice *bus) debug("%s: Detected new device 0x%llx (family 0x%x)\n", bus->name, rn, (u8)(rn & 0xff));
+#ifdef CONFIG_W1_EEPROM /* attempt to register as w1-eeprom device */ w1_eeprom_register_new_device(rn); +#endif } }

On 23/10/18 09:07, Eugen.Hristev@microchip.com wrote:
On 22.10.2018 19:51, Martin Fuzzey wrote:
Building with CONFIG_W1 and CONFIG_CMD_W1 but without CONFIG_W1_EEPROM fails with drivers/w1/w1-uclass.c:104: undefined reference to `w1_eeprom_register_new_device' cmd/w1.c:93: undefined reference to `w1_eeprom_read_buf'
Fix this.
I would prefer if you let the w1 read command to be accessible regardless if CONFIG_W1_EEPROM is defined or not. Hence have only the w1 eeprom reads under the ifdef... The w1_read checks for devices anyway and for the bus, so it should print invalid bus/device if nothing is present there. Any opinion on this ?
I don't really have a strong opinion on this.
Completely removing non implemented commands seems to be a common thing to do in u-boot (cmd/i2c.c for instance) presumably to keep the image size as small as possible. But for the one wire case the code space saving is likely to be small and, currently at least, there is little point buiding without CONFIG_W1_EEPROM, not sure if that will change some day - of course there are other types of one wire devices like various sensors but they are probably of less interest in the context of a bootloader.
Let's wait a bit and see what Maxime or anyone else has to say about this.
Regards,
Martin

On 23.10.2018 11:31, Martin Fuzzey wrote:
On 23/10/18 09:07, Eugen.Hristev@microchip.com wrote:
On 22.10.2018 19:51, Martin Fuzzey wrote:
Building with CONFIG_W1 and CONFIG_CMD_W1 but without CONFIG_W1_EEPROM fails with drivers/w1/w1-uclass.c:104: undefined reference to `w1_eeprom_register_new_device' cmd/w1.c:93: undefined reference to `w1_eeprom_read_buf'
Fix this.
I would prefer if you let the w1 read command to be accessible regardless if CONFIG_W1_EEPROM is defined or not. Hence have only the w1 eeprom reads under the ifdef... The w1_read checks for devices anyway and for the bus, so it should print invalid bus/device if nothing is present there. Any opinion on this ?
I don't really have a strong opinion on this.
Completely removing non implemented commands seems to be a common thing to do in u-boot (cmd/i2c.c for instance) presumably to keep the image size as small as possible. But for the one wire case the code space saving is likely to be small and, currently at least, there is little point buiding without CONFIG_W1_EEPROM, not sure if that will change some day - of course there are other types of one wire devices like various sensors but they are probably of less interest in the context of a bootloader.
Let's wait a bit and see what Maxime or anyone else has to say about this.
I tried as much as possible to decouple the W1 bus from the W1 EEPROM memories. It is possible that we will have a different framework for EEPROMs that will include both 1wire and i2c eeproms, and then the interfacing would be pretty easy to change to.
That's why I am thinking that w1 bus read should not be much affected if the 1w EEPROMs are unknown to U-boot
Regards,
Martin

On 23/10/18 10:40, Eugen.Hristev@microchip.com wrote:
I tried as much as possible to decouple the W1 bus from the W1 EEPROM memories. It is possible that we will have a different framework for EEPROMs that will include both 1wire and i2c eeproms, and then the interfacing would be pretty easy to change to.
That's why I am thinking that w1 bus read should not be much affected if the 1w EEPROMs are unknown to U-boot
Yes sure that's great.
Somewhat diverting this thread....
I noticed that currently "w1 read" displays the data in hex with "%x", which means it prints just one character if in range 00-0f. And as there is no seperator the output isn't currently useful.
That's a trivial fix of course but it got me thinking about what do we want to "w1 read" to do?
A lot of other storage reading commands use "read" to mean "read to memory" and take a destination RAM address parameter. Eg mmc read, sf read, ...
There are counter examples though like "mii read" or "pmic read" which just print the output but they don't read aribitary user defined data like an eeprom.
So I was wondering if it would be better to modify "w1 read" to mean "read to memory" and add a new "w1 dump" command to do what "w1 read" currently does (as it is much more convenient for quickly checking the eeprom contents than having to use md).
The type of use case I'm thinking of for "read to memory" is if someone wants to put a device tree blob on an eeprom.
What do you think?
Regards,
Martin
Regards,
Martin

Hi Martin, Eugen,
On 23/10/18 10:40, Eugen.Hristev@microchip.com wrote:
I tried as much as possible to decouple the W1 bus from the W1 EEPROM memories. It is possible that we will have a different framework for EEPROMs that will include both 1wire and i2c eeproms, and then the interfacing would be pretty easy to change to.
That's why I am thinking that w1 bus read should not be much affected if the 1w EEPROMs are unknown to U-boot
Yes sure that's great.
Somewhat diverting this thread....
I noticed that currently "w1 read" displays the data in hex with "%x", which means it prints just one character if in range 00-0f. And as there is no seperator the output isn't currently useful.
That's a trivial fix of course but it got me thinking about what do we want to "w1 read" to do?
A lot of other storage reading commands use "read" to mean "read to memory" and take a destination RAM address parameter. Eg mmc read, sf read, ...
There are counter examples though like "mii read" or "pmic read" which just print the output but they don't read aribitary user defined data like an eeprom.
So I was wondering if it would be better to modify "w1 read" to mean "read to memory" and add a new "w1 dump" command to do what "w1 read" currently does (as it is much more convenient for quickly checking the eeprom contents than having to use md).
The type of use case I'm thinking of for "read to memory" is if someone wants to put a device tree blob on an eeprom.
If I may add my 2cents.
I also would like to see the w1 command to load read data to memory (to be consistent with e.g. load), so we could use md.b, mw.b, etc.
What do you think?
Regards,
Martin
Regards,
Martin
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de

On 24.10.2018 01:31, Lukasz Majewski wrote:
Hi Martin, Eugen,
On 23/10/18 10:40, Eugen.Hristev@microchip.com wrote:
I tried as much as possible to decouple the W1 bus from the W1 EEPROM memories. It is possible that we will have a different framework for EEPROMs that will include both 1wire and i2c eeproms, and then the interfacing would be pretty easy to change to.
That's why I am thinking that w1 bus read should not be much affected if the 1w EEPROMs are unknown to U-boot
Yes sure that's great.
Somewhat diverting this thread....
I noticed that currently "w1 read" displays the data in hex with "%x", which means it prints just one character if in range 00-0f. And as there is no seperator the output isn't currently useful.
That's a trivial fix of course but it got me thinking about what do we want to "w1 read" to do?
A lot of other storage reading commands use "read" to mean "read to memory" and take a destination RAM address parameter. Eg mmc read, sf read, ...
There are counter examples though like "mii read" or "pmic read" which just print the output but they don't read aribitary user defined data like an eeprom.
So I was wondering if it would be better to modify "w1 read" to mean "read to memory" and add a new "w1 dump" command to do what "w1 read" currently does (as it is much more convenient for quickly checking the eeprom contents than having to use md).
The type of use case I'm thinking of for "read to memory" is if someone wants to put a device tree blob on an eeprom.
If I may add my 2cents.
I also would like to see the w1 command to load read data to memory (to be consistent with e.g. load), so we could use md.b, mw.b, etc.
What do you think?
I believe it's a good thing to have them as you said. The w1 support which I made was "initial" and "minimal" . I am happy to see it extended.
Eugen
Regards,
Martin
Regards,
Martin
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
participants (3)
-
Eugen.Hristev@microchip.com
-
Lukasz Majewski
-
Martin Fuzzey