* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
@ 2008-04-29 10:15 Jens Gehrlein
2008-04-29 14:43 ` Ben Warren
2008-04-29 20:10 ` Guennadi Liakhovetski
0 siblings, 2 replies; 8+ messages in thread
From: Jens Gehrlein @ 2008-04-29 10:15 UTC (permalink / raw)
To: u-boot
Hi Ben, Magnus,
here is my patch to enable 2x16 bit accesses to the LAN9x1x.
I still not have a HW, so may I ask you to test it and, if applicable,
fix the code?
Best Regards,
Jens
---
drivers/net/smc911x.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index d22c889..841a64d 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -30,6 +30,8 @@
#include <net.h>
#include <miiphy.h>
+#define CONFIG_DRIVER_SMC911X_16_BIT 1
+
#ifdef CONFIG_DRIVER_SMC911X_32_BIT
static inline u32 reg_read(u32 addr)
{
@@ -39,8 +41,21 @@ static inline void reg_write(u32 addr, u32 val)
{
*(volatile u32*)addr = val;
}
+#elif CONFIG_DRIVER_SMC911X_16_BIT
+static inline u32 reg_read(u32 addr)
+{
+ u32 val_lo = (u32)(*(volatile u16*)addr);
+ u32 val_hi = (u32)(*(volatile u16*)(addr | 2));
+
+ return (val_hi << 16) | val_lo;
+}
+static inline void reg_write(u32 addr, u32 val)
+{
+ *(volatile u16*)addr = (u16)val;
+ *(volatile u16*)(addr | 2) = (u16)(val >> 16);
+}
#else
-#error "SMC911X: Only 32-bit bus is supported"
+#error "SMC911X: undefined buswidth"
#endif
#define mdelay(n) udelay((n)*1000)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-29 10:15 [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x Jens Gehrlein
@ 2008-04-29 14:43 ` Ben Warren
2008-04-29 14:59 ` Magnus Lilja
2008-04-29 20:10 ` Guennadi Liakhovetski
1 sibling, 1 reply; 8+ messages in thread
From: Ben Warren @ 2008-04-29 14:43 UTC (permalink / raw)
To: u-boot
Hi Jens,
Jens Gehrlein wrote:
> Hi Ben, Magnus,
>
> here is my patch to enable 2x16 bit accesses to the LAN9x1x.
> I still not have a HW, so may I ask you to test it and, if applicable,
> fix the code?
>
> Best Regards,
> Jens
>
> ---
>
> drivers/net/smc911x.c | 17 ++++++++++++++++-
> 1 files changed, 16 insertions(+), 1 deletions(-)
>
>
> diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
> index d22c889..841a64d 100644
> --- a/drivers/net/smc911x.c
> +++ b/drivers/net/smc911x.c
> @@ -30,6 +30,8 @@
> #include <net.h>
> #include <miiphy.h>
>
> +#define CONFIG_DRIVER_SMC911X_16_BIT 1
> +
> #ifdef CONFIG_DRIVER_SMC911X_32_BIT
> static inline u32 reg_read(u32 addr)
> {
> @@ -39,8 +41,21 @@ static inline void reg_write(u32 addr, u32 val)
> {
> *(volatile u32*)addr = val;
> }
> +#elif CONFIG_DRIVER_SMC911X_16_BIT
> +static inline u32 reg_read(u32 addr)
> +{
> + u32 val_lo = (u32)(*(volatile u16*)addr);
> + u32 val_hi = (u32)(*(volatile u16*)(addr | 2));
> +
>
This won't work. Presumably addr will already be a multiple of 2, so
the bit-wise OR will make val_lo and val_hi identical. Here's how I'd
do it:
volatile u16 *addr_16 = (u16 *)addr;
return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 1) << 16));
Of course, this could be done as a 1-liner with castings, but it
becomes even more unreadable that way. The mask here might be
unnecessary too.
> + return (val_hi << 16) | val_lo;
> +}
> +static inline void reg_write(u32 addr, u32 val)
> +{
> + *(volatile u16*)addr = (u16)val;
> + *(volatile u16*)(addr | 2) = (u16)(val >> 16);
>
Same problem here with the bitwise OR. Second line should be:
*(volatile u16*)(addr + 2) = (u16)(val >> 16);
> +}
> #else
> -#error "SMC911X: Only 32-bit bus is supported"
> +#error "SMC911X: undefined buswidth"
> #endif
>
> #define mdelay(n) udelay((n)*1000)
>
>
Thanks for doing this! Hopefully Magnus will get a chance to try on
real hardware and we can put this issue to rest.
regards,
Ben
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-29 14:43 ` Ben Warren
@ 2008-04-29 14:59 ` Magnus Lilja
2008-04-29 17:23 ` Ben Warren
0 siblings, 1 reply; 8+ messages in thread
From: Magnus Lilja @ 2008-04-29 14:59 UTC (permalink / raw)
To: u-boot
> Thanks for doing this! Hopefully Magnus will get a chance to try on
> real hardware and we can put this issue to rest.
I'll try it later this week, definitely not today though.
/Magnus
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-29 14:59 ` Magnus Lilja
@ 2008-04-29 17:23 ` Ben Warren
0 siblings, 0 replies; 8+ messages in thread
From: Ben Warren @ 2008-04-29 17:23 UTC (permalink / raw)
To: u-boot
Magnus Lilja wrote:
>> Thanks for doing this! Hopefully Magnus will get a chance to try on
>> real hardware and we can put this issue to rest.
>>
>
>
> I'll try it later this week, definitely not today though.
>
>
> /Magnus
>
>
Cool! Thanks Magnus.
regards,
Ben
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-29 10:15 [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x Jens Gehrlein
2008-04-29 14:43 ` Ben Warren
@ 2008-04-29 20:10 ` Guennadi Liakhovetski
2008-04-30 5:20 ` Jens Gehrlein
1 sibling, 1 reply; 8+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-29 20:10 UTC (permalink / raw)
To: u-boot
On Tue, 29 Apr 2008, Jens Gehrlein wrote:
> Hi Ben, Magnus,
>
> here is my patch to enable 2x16 bit accesses to the LAN9x1x.
> I still not have a HW, so may I ask you to test it and, if applicable,
> fix the code?
>
> Best Regards,
> Jens
>
> ---
>
> drivers/net/smc911x.c | 17 ++++++++++++++++-
> 1 files changed, 16 insertions(+), 1 deletions(-)
>
>
> diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
> index d22c889..841a64d 100644
> --- a/drivers/net/smc911x.c
> +++ b/drivers/net/smc911x.c
> @@ -30,6 +30,8 @@
> #include <net.h>
> #include <miiphy.h>
>
> +#define CONFIG_DRIVER_SMC911X_16_BIT 1
> +
Looks like an obvious thing - you'll remove this define from the patch for
final submission, right?
Thanks
Guennadi
---
Guennadi Liakhovetski
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-29 20:10 ` Guennadi Liakhovetski
@ 2008-04-30 5:20 ` Jens Gehrlein
2008-04-30 6:11 ` Ben Warren
0 siblings, 1 reply; 8+ messages in thread
From: Jens Gehrlein @ 2008-04-30 5:20 UTC (permalink / raw)
To: u-boot
Guennadi Liakhovetski schrieb:
> On Tue, 29 Apr 2008, Jens Gehrlein wrote:
>
>> Hi Ben, Magnus,
>>
>> here is my patch to enable 2x16 bit accesses to the LAN9x1x.
>> I still not have a HW, so may I ask you to test it and, if applicable,
>> fix the code?
>>
>> Best Regards,
>> Jens
>>
>> ---
>>
>> drivers/net/smc911x.c | 17 ++++++++++++++++-
>> 1 files changed, 16 insertions(+), 1 deletions(-)
>>
>>
>> diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
>> index d22c889..841a64d 100644
>> --- a/drivers/net/smc911x.c
>> +++ b/drivers/net/smc911x.c
>> @@ -30,6 +30,8 @@
>> #include <net.h>
>> #include <miiphy.h>
>>
>> +#define CONFIG_DRIVER_SMC911X_16_BIT 1
>> +
>
> Looks like an obvious thing - you'll remove this define from the patch for
> final submission, right?
Oh, ah. You're right. I inserted this to do a compile test and to
inspect the generated assembler code. This define should be later moved
to the board specific header file.
Sorry.
Well spotted. Thank you.
Magnus, are you going to fix the code as proposed by Ben and Guennadi or
should I resubmit the patch?
Best Regards,
Jens
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-30 5:20 ` Jens Gehrlein
@ 2008-04-30 6:11 ` Ben Warren
2008-04-30 8:12 ` Magnus Lilja
0 siblings, 1 reply; 8+ messages in thread
From: Ben Warren @ 2008-04-30 6:11 UTC (permalink / raw)
To: u-boot
Hi Jens,
Jens Gehrlein wrote:
> Guennadi Liakhovetski schrieb:
>
>> On Tue, 29 Apr 2008, Jens Gehrlein wrote:
>>
>>
>>> Hi Ben, Magnus,
>>>
>>> here is my patch to enable 2x16 bit accesses to the LAN9x1x.
>>> I still not have a HW, so may I ask you to test it and, if applicable,
>>> fix the code?
>>>
>>> Best Regards,
>>> Jens
>>>
>>> ---
>>>
>>> drivers/net/smc911x.c | 17 ++++++++++++++++-
>>> 1 files changed, 16 insertions(+), 1 deletions(-)
>>>
>>>
>>> diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
>>> index d22c889..841a64d 100644
>>> --- a/drivers/net/smc911x.c
>>> +++ b/drivers/net/smc911x.c
>>> @@ -30,6 +30,8 @@
>>> #include <net.h>
>>> #include <miiphy.h>
>>>
>>> +#define CONFIG_DRIVER_SMC911X_16_BIT 1
>>> +
>>>
>> Looks like an obvious thing - you'll remove this define from the patch for
>> final submission, right?
>>
>
> Oh, ah. You're right. I inserted this to do a compile test and to
> inspect the generated assembler code. This define should be later moved
> to the board specific header file.
>
> Sorry.
>
> Well spotted. Thank you.
>
> Magnus, are you going to fix the code as proposed by Ben and Guennadi or
> should I resubmit the patch?
>
Ultimately, somebody needs to submit a patch. Since Magnus won't try it
til later this week, it would be best if you post a patch incorporating
changes. Then if it works, we're ready to go.
regards,
Ben
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x
2008-04-30 6:11 ` Ben Warren
@ 2008-04-30 8:12 ` Magnus Lilja
0 siblings, 0 replies; 8+ messages in thread
From: Magnus Lilja @ 2008-04-30 8:12 UTC (permalink / raw)
To: u-boot
Hi all
> > Magnus, are you going to fix the code as proposed by Ben and Guennadi or
> > should I resubmit the patch?
> >
> Ultimately, somebody needs to submit a patch. Since Magnus won't try it
> til later this week, it would be best if you post a patch incorporating
> changes. Then if it works, we're ready to go.
May I suggest adding something like this to the smc911x.c-patch as well:
#if defined(CONFIG_DRIVER_SMC911X_32_BIT) &&
defined(CONFIG_DRIVER_SMC911X_16_BIT)
#error "SMC911X: Only one of CONFIG_DRIVER_SMC911X_32_BIT and
CONFIG_DRIVER_SMC911X_16_BIT shall be set"
#endif
(but with the correct line wrapping, the above is written directly in
gmail and I don't know how gmail will mangle the code)
Just in case someone accidentally defines both in the config file.
Also, I tested the patch with Ben's modifications and it seems to work
on the i.MX31 Litekit board. Tried both ping and tftp file transfer
with the 16 bit option (and 32 bit option).
Regards, Magnus
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-04-30 8:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-29 10:15 [U-Boot-Users] [PATCH] net: add 16 bit support for smc911x Jens Gehrlein
2008-04-29 14:43 ` Ben Warren
2008-04-29 14:59 ` Magnus Lilja
2008-04-29 17:23 ` Ben Warren
2008-04-29 20:10 ` Guennadi Liakhovetski
2008-04-30 5:20 ` Jens Gehrlein
2008-04-30 6:11 ` Ben Warren
2008-04-30 8:12 ` Magnus Lilja
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox