diff mbox series

mtd: rawnand: meson: Fix linking error on 32-bit platforms

Message ID 20190129214657.5877-1-natechancellor@gmail.com (mailing list archive)
State Not Applicable
Headers show
Series mtd: rawnand: meson: Fix linking error on 32-bit platforms | expand

Commit Message

Nathan Chancellor Jan. 29, 2019, 9:46 p.m. UTC
On arm little endian allyesconfig:

  ld.lld: error: undefined symbol: __aeabi_uldivmod
  >>> referenced by meson_nand.c
  >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a

The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
(which wraps do_div) to prevent the compiler from emitting
__aebi_uldivmod.

Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
---
 drivers/mtd/nand/raw/meson_nand.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Liang Yang Jan. 30, 2019, 5:20 a.m. UTC | #1
Hello Nathan,

On 2019/1/30 5:46, Nathan Chancellor wrote:
> On arm little endian allyesconfig:
> 
>    ld.lld: error: undefined symbol: __aeabi_uldivmod
>    >>> referenced by meson_nand.c
>    >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a
> 
> The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
> (which wraps do_div) to prevent the compiler from emitting
> __aebi_uldivmod.
> 

ok. thanks for your time.

> Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
>   drivers/mtd/nand/raw/meson_nand.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
> index e858d58d97b0..6f12a96195d1 100644
> --- a/drivers/mtd/nand/raw/meson_nand.c
> +++ b/drivers/mtd/nand/raw/meson_nand.c
> @@ -1116,8 +1116,8 @@ int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
>   				       div * NFC_CLK_CYCLE);
>   	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
>   					div * NFC_CLK_CYCLE);
> -	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
> -				    div * NFC_CLK_CYCLE);
> +	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
> +					div * NFC_CLK_CYCLE);
ok.
>   	meson_chip->tbers_max = ilog2(tbers_clocks);
>   	if (!is_power_of_2(tbers_clocks))
>   		meson_chip->tbers_max++;
>
Liang Yang Jan. 30, 2019, 9:26 a.m. UTC | #2
Hi Nathan,

On 2019/1/30 5:46, Nathan Chancellor wrote:
> On arm little endian allyesconfig:
> 
>    ld.lld: error: undefined symbol: __aeabi_uldivmod
>    >>> referenced by meson_nand.c
>    >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a
> 
> The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
> (which wraps do_div) to prevent the compiler from emitting
> __aebi_uldivmod.
> 
> Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
>   drivers/mtd/nand/raw/meson_nand.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
> index e858d58d97b0..6f12a96195d1 100644
> --- a/drivers/mtd/nand/raw/meson_nand.c
> +++ b/drivers/mtd/nand/raw/meson_nand.c
> @@ -1116,8 +1116,8 @@ int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
>   				       div * NFC_CLK_CYCLE);
>   	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
>   					div * NFC_CLK_CYCLE);
> -	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
> -				    div * NFC_CLK_CYCLE);
> +	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
> +					div * NFC_CLK_CYCLE);

Looks good to me:

Acked-by: Liang Yang <liang.yang@amlogic.com>

>   	meson_chip->tbers_max = ilog2(tbers_clocks);
>   	if (!is_power_of_2(tbers_clocks))
>   		meson_chip->tbers_max++;
>
Miquel Raynal Jan. 30, 2019, 9:32 a.m. UTC | #3
Hi Liang, Nathan,

Liang Yang <liang.yang@amlogic.com> wrote on Wed, 30 Jan 2019 17:26:39
+0800:

> Hi Nathan,
> 
> On 2019/1/30 5:46, Nathan Chancellor wrote:
> > On arm little endian allyesconfig:
> > 
> >    ld.lld: error: undefined symbol: __aeabi_uldivmod  
> >    >>> referenced by meson_nand.c
> >    >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a  
> > 
> > The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
> > (which wraps do_div) to prevent the compiler from emitting
> > __aebi_uldivmod.
> > 
> > Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > ---
> >   drivers/mtd/nand/raw/meson_nand.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
> > index e858d58d97b0..6f12a96195d1 100644
> > --- a/drivers/mtd/nand/raw/meson_nand.c
> > +++ b/drivers/mtd/nand/raw/meson_nand.c
> > @@ -1116,8 +1116,8 @@ int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
> >   				       div * NFC_CLK_CYCLE);
> >   	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
> >   					div * NFC_CLK_CYCLE);
> > -	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
> > -				    div * NFC_CLK_CYCLE);
> > +	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
> > +					div * NFC_CLK_CYCLE);  
> 
> Looks good to me:
> 
> Acked-by: Liang Yang <liang.yang@amlogic.com>

This is nand/next material, so if you don't mind I would like to squash
this fix into the original commit inserting the driver.


Thanks,
Miquèl
Nathan Chancellor Jan. 30, 2019, 3:27 p.m. UTC | #4
On Wed, Jan 30, 2019 at 10:32:20AM +0100, Miquel Raynal wrote:
> Hi Liang, Nathan,
> 
> Liang Yang <liang.yang@amlogic.com> wrote on Wed, 30 Jan 2019 17:26:39
> +0800:
> 
> > Hi Nathan,
> > 
> > On 2019/1/30 5:46, Nathan Chancellor wrote:
> > > On arm little endian allyesconfig:
> > > 
> > >    ld.lld: error: undefined symbol: __aeabi_uldivmod  
> > >    >>> referenced by meson_nand.c
> > >    >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a  
> > > 
> > > The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
> > > (which wraps do_div) to prevent the compiler from emitting
> > > __aebi_uldivmod.
> > > 
> > > Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
> > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > > ---
> > >   drivers/mtd/nand/raw/meson_nand.c | 4 ++--
> > >   1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
> > > index e858d58d97b0..6f12a96195d1 100644
> > > --- a/drivers/mtd/nand/raw/meson_nand.c
> > > +++ b/drivers/mtd/nand/raw/meson_nand.c
> > > @@ -1116,8 +1116,8 @@ int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
> > >   				       div * NFC_CLK_CYCLE);
> > >   	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
> > >   					div * NFC_CLK_CYCLE);
> > > -	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
> > > -				    div * NFC_CLK_CYCLE);
> > > +	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
> > > +					div * NFC_CLK_CYCLE);  
> > 
> > Looks good to me:
> > 
> > Acked-by: Liang Yang <liang.yang@amlogic.com>
> 
> This is nand/next material, so if you don't mind I would like to squash
> this fix into the original commit inserting the driver.
> 
> 
> Thanks,
> Miquèl

Hi Miquel,

That is totally fine by me, thanks for the quick response!

Nathan
Liang Yang Jan. 31, 2019, 2:42 a.m. UTC | #5
Hi Miquel, Nathan,

On 2019/1/30 23:27, Nathan Chancellor wrote:
> On Wed, Jan 30, 2019 at 10:32:20AM +0100, Miquel Raynal wrote:
>> Hi Liang, Nathan,
>>
>> Liang Yang <liang.yang@amlogic.com> wrote on Wed, 30 Jan 2019 17:26:39
>> +0800:
>>
>>> Hi Nathan,
>>>
>>> On 2019/1/30 5:46, Nathan Chancellor wrote:
>>>> On arm little endian allyesconfig:
>>>>
>>>>     ld.lld: error: undefined symbol: __aeabi_uldivmod
>>>>     >>> referenced by meson_nand.c
>>>>     >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a
>>>>
>>>> The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
>>>> (which wraps do_div) to prevent the compiler from emitting
>>>> __aebi_uldivmod.
>>>>
>>>> Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
>>>> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
>>>> ---
>>>>    drivers/mtd/nand/raw/meson_nand.c | 4 ++--
>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
>>>> index e858d58d97b0..6f12a96195d1 100644
>>>> --- a/drivers/mtd/nand/raw/meson_nand.c
>>>> +++ b/drivers/mtd/nand/raw/meson_nand.c
>>>> @@ -1116,8 +1116,8 @@ int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
>>>>    				       div * NFC_CLK_CYCLE);
>>>>    	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
>>>>    					div * NFC_CLK_CYCLE);
>>>> -	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
>>>> -				    div * NFC_CLK_CYCLE);
>>>> +	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
>>>> +					div * NFC_CLK_CYCLE);
>>>
>>> Looks good to me:
>>>
>>> Acked-by: Liang Yang <liang.yang@amlogic.com>
>>
>> This is nand/next material, so if you don't mind I would like to squash
>> this fix into the original commit inserting the driver.
>>
>>
>> Thanks,
>> Miquèl
> 
> Hi Miquel,
> 
> That is totally fine by me, thanks for the quick response!
> 
> Nathan
> 
it is ok with me.
> .
>
Miquel Raynal Feb. 5, 2019, 7:06 p.m. UTC | #6
Hi Nathan,

Nathan Chancellor <natechancellor@gmail.com> wrote on Tue, 29 Jan 2019
14:46:57 -0700:

> On arm little endian allyesconfig:
> 
>   ld.lld: error: undefined symbol: __aeabi_uldivmod
>   >>> referenced by meson_nand.c
>   >>> mtd/nand/raw/meson_nand.o:(meson_nfc_setup_data_interface) in archive drivers/built-in.a  
> 
> The dividend tBERS_max is u64, meaning we need to use DIV_ROUND_UP_ULL
> (which wraps do_div) to prevent the compiler from emitting
> __aebi_uldivmod.
> 
> Fixes: 2d570b34b41a ("mtd: rawnand: meson: add support for Amlogic NAND flash controller")
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---

Merged in nand/next with the original commit.


Thanks,
Miquèl
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index e858d58d97b0..6f12a96195d1 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -1116,8 +1116,8 @@  int meson_nfc_setup_data_interface(struct nand_chip *nand, int csline,
 				       div * NFC_CLK_CYCLE);
 	meson_chip->tadl = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tADL_min),
 					div * NFC_CLK_CYCLE);
-	tbers_clocks = DIV_ROUND_UP(PSEC_TO_NSEC(timings->tBERS_max),
-				    div * NFC_CLK_CYCLE);
+	tbers_clocks = DIV_ROUND_UP_ULL(PSEC_TO_NSEC(timings->tBERS_max),
+					div * NFC_CLK_CYCLE);
 	meson_chip->tbers_max = ilog2(tbers_clocks);
 	if (!is_power_of_2(tbers_clocks))
 		meson_chip->tbers_max++;