diff mbox series

[U-Boot] w1: fix build without CONFIG_W1_EEPROM

Message ID 1540227116-25592-1-git-send-email-martin.fuzzey@flowbird.group
State Changes Requested
Delegated to: Tom Rini
Headers show
Series [U-Boot] w1: fix build without CONFIG_W1_EEPROM | expand

Commit Message

Martin Fuzzey Oct. 22, 2018, 4:51 p.m. UTC
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(-)

Comments

Eugen Hristev Oct. 23, 2018, 7:07 a.m. UTC | #1
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
>   		}
>   	}
>   
>
Martin Fuzzey Oct. 23, 2018, 8:31 a.m. UTC | #2
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
Eugen Hristev Oct. 23, 2018, 8:40 a.m. UTC | #3
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
> 
>
Martin Fuzzey Oct. 23, 2018, 2:09 p.m. UTC | #4
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
>>
>>
Lukasz Majewski Oct. 23, 2018, 10:31 p.m. UTC | #5
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
Eugen Hristev Oct. 24, 2018, 10:08 a.m. UTC | #6
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
>
diff mbox series

Patch

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
 		}
 	}