diff mbox

[v2,08/23] pflash_cfi01: change to new-style MMIO accessors

Message ID 1433351328-23326-9-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini June 3, 2015, 5:08 p.m. UTC
This is a required step to implement read_with_attrs and write_with_attrs.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------
 1 file changed, 10 insertions(+), 86 deletions(-)

Comments

Peter Crosthwaite June 4, 2015, 6:19 a.m. UTC | #1
On Wed, Jun 3, 2015 at 10:08 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> This is a required step to implement read_with_attrs and write_with_attrs.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------

Nice stats.

>  1 file changed, 10 insertions(+), 86 deletions(-)
>
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index 7507a15..0b3667a 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -650,101 +650,25 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
>  }
>
>
> -static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
> -{
> -    return pflash_read(opaque, addr, 1, 1);
> -}
> -
> -static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
> -{
> -    return pflash_read(opaque, addr, 1, 0);
> -}
> -
> -static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
> +static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
>  {
>      pflash_t *pfl = opaque;
> +    bool be = !!(pfl->features & (1 << PFLASH_BE));

!!() not needed. Otherwise

Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.om>

>
> -    return pflash_read(pfl, addr, 2, 1);
> +    return pflash_read(pfl, addr, len, be);
>  }
>
> -static uint32_t pflash_readw_le(void *opaque, hwaddr addr)
> +static void pflash_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned len)
>  {
>      pflash_t *pfl = opaque;
> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>
> -    return pflash_read(pfl, addr, 2, 0);
> +    pflash_write(pfl, addr, value, len, be);
>  }
>
> -static uint32_t pflash_readl_be(void *opaque, hwaddr addr)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    return pflash_read(pfl, addr, 4, 1);
> -}
> -
> -static uint32_t pflash_readl_le(void *opaque, hwaddr addr)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    return pflash_read(pfl, addr, 4, 0);
> -}
> -
> -static void pflash_writeb_be(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_write(opaque, addr, value, 1, 1);
> -}
> -
> -static void pflash_writeb_le(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_write(opaque, addr, value, 1, 0);
> -}
> -
> -static void pflash_writew_be(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    pflash_write(pfl, addr, value, 2, 1);
> -}
> -
> -static void pflash_writew_le(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    pflash_write(pfl, addr, value, 2, 0);
> -}
> -
> -static void pflash_writel_be(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    pflash_write(pfl, addr, value, 4, 1);
> -}
> -
> -static void pflash_writel_le(void *opaque, hwaddr addr,
> -                             uint32_t value)
> -{
> -    pflash_t *pfl = opaque;
> -
> -    pflash_write(pfl, addr, value, 4, 0);
> -}
> -
> -static const MemoryRegionOps pflash_cfi01_ops_be = {
> -    .old_mmio = {
> -        .read = { pflash_readb_be, pflash_readw_be, pflash_readl_be, },
> -        .write = { pflash_writeb_be, pflash_writew_be, pflash_writel_be, },
> -    },
> -    .endianness = DEVICE_NATIVE_ENDIAN,
> -};
> -
> -static const MemoryRegionOps pflash_cfi01_ops_le = {
> -    .old_mmio = {
> -        .read = { pflash_readb_le, pflash_readw_le, pflash_readl_le, },
> -        .write = { pflash_writeb_le, pflash_writew_le, pflash_writel_le, },
> -    },
> +static const MemoryRegionOps pflash_cfi01_ops = {
> +    .read = pflash_mem_read,
> +    .write = pflash_mem_write,
>      .endianness = DEVICE_NATIVE_ENDIAN,
>  };
>
> @@ -775,7 +699,7 @@ static void pflash_cfi01_realize(DeviceState *dev, Error **errp)
>
>      memory_region_init_rom_device(
>          &pfl->mem, OBJECT(dev),
> -        pfl->features & (1 << PFLASH_BE) ? &pflash_cfi01_ops_be : &pflash_cfi01_ops_le,
> +        &pflash_cfi01_ops,
>          pfl,
>          pfl->name, total_len, &local_err);
>      if (local_err) {
> --
> 2.4.1
>
>
>
Paolo Bonzini June 4, 2015, 8:02 a.m. UTC | #2
On 04/06/2015 08:19, Peter Crosthwaite wrote:
> On Wed, Jun 3, 2015 at 10:08 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> This is a required step to implement read_with_attrs and write_with_attrs.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------
> 
> Nice stats.
> 
>>  1 file changed, 10 insertions(+), 86 deletions(-)
>>
>> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
>> index 7507a15..0b3667a 100644
>> --- a/hw/block/pflash_cfi01.c
>> +++ b/hw/block/pflash_cfi01.c
>> @@ -650,101 +650,25 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
>>  }
>>
>>
>> -static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
>> -{
>> -    return pflash_read(opaque, addr, 1, 1);
>> -}
>> -
>> -static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
>> -{
>> -    return pflash_read(opaque, addr, 1, 0);
>> -}
>> -
>> -static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
>> +static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
>>  {
>>      pflash_t *pfl = opaque;
>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
> 
> !!() not needed. Otherwise

I don't like magic bool-ification...  Is there a coding style item that
forbids this idiom in bool assignments?

Paolo

> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.om>
> 
>>
>> -    return pflash_read(pfl, addr, 2, 1);
>> +    return pflash_read(pfl, addr, len, be);
>>  }
>>
>> -static uint32_t pflash_readw_le(void *opaque, hwaddr addr)
>> +static void pflash_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned len)
>>  {
>>      pflash_t *pfl = opaque;
>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>>
>> -    return pflash_read(pfl, addr, 2, 0);
>> +    pflash_write(pfl, addr, value, len, be);
>>  }
>>
>> -static uint32_t pflash_readl_be(void *opaque, hwaddr addr)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    return pflash_read(pfl, addr, 4, 1);
>> -}
>> -
>> -static uint32_t pflash_readl_le(void *opaque, hwaddr addr)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    return pflash_read(pfl, addr, 4, 0);
>> -}
>> -
>> -static void pflash_writeb_be(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_write(opaque, addr, value, 1, 1);
>> -}
>> -
>> -static void pflash_writeb_le(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_write(opaque, addr, value, 1, 0);
>> -}
>> -
>> -static void pflash_writew_be(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    pflash_write(pfl, addr, value, 2, 1);
>> -}
>> -
>> -static void pflash_writew_le(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    pflash_write(pfl, addr, value, 2, 0);
>> -}
>> -
>> -static void pflash_writel_be(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    pflash_write(pfl, addr, value, 4, 1);
>> -}
>> -
>> -static void pflash_writel_le(void *opaque, hwaddr addr,
>> -                             uint32_t value)
>> -{
>> -    pflash_t *pfl = opaque;
>> -
>> -    pflash_write(pfl, addr, value, 4, 0);
>> -}
>> -
>> -static const MemoryRegionOps pflash_cfi01_ops_be = {
>> -    .old_mmio = {
>> -        .read = { pflash_readb_be, pflash_readw_be, pflash_readl_be, },
>> -        .write = { pflash_writeb_be, pflash_writew_be, pflash_writel_be, },
>> -    },
>> -    .endianness = DEVICE_NATIVE_ENDIAN,
>> -};
>> -
>> -static const MemoryRegionOps pflash_cfi01_ops_le = {
>> -    .old_mmio = {
>> -        .read = { pflash_readb_le, pflash_readw_le, pflash_readl_le, },
>> -        .write = { pflash_writeb_le, pflash_writew_le, pflash_writel_le, },
>> -    },
>> +static const MemoryRegionOps pflash_cfi01_ops = {
>> +    .read = pflash_mem_read,
>> +    .write = pflash_mem_write,
>>      .endianness = DEVICE_NATIVE_ENDIAN,
>>  };
>>
>> @@ -775,7 +699,7 @@ static void pflash_cfi01_realize(DeviceState *dev, Error **errp)
>>
>>      memory_region_init_rom_device(
>>          &pfl->mem, OBJECT(dev),
>> -        pfl->features & (1 << PFLASH_BE) ? &pflash_cfi01_ops_be : &pflash_cfi01_ops_le,
>> +        &pflash_cfi01_ops,
>>          pfl,
>>          pfl->name, total_len, &local_err);
>>      if (local_err) {
>> --
>> 2.4.1
>>
>>
>>
Laszlo Ersek June 4, 2015, 12:51 p.m. UTC | #3
On 06/04/15 10:02, Paolo Bonzini wrote:
> 
> 
> On 04/06/2015 08:19, Peter Crosthwaite wrote:
>> On Wed, Jun 3, 2015 at 10:08 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>> This is a required step to implement read_with_attrs and write_with_attrs.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> ---
>>>  hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------
>>
>> Nice stats.
>>
>>>  1 file changed, 10 insertions(+), 86 deletions(-)
>>>
>>> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
>>> index 7507a15..0b3667a 100644
>>> --- a/hw/block/pflash_cfi01.c
>>> +++ b/hw/block/pflash_cfi01.c
>>> @@ -650,101 +650,25 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
>>>  }
>>>
>>>
>>> -static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
>>> -{
>>> -    return pflash_read(opaque, addr, 1, 1);
>>> -}
>>> -
>>> -static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
>>> -{
>>> -    return pflash_read(opaque, addr, 1, 0);
>>> -}
>>> -
>>> -static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
>>> +static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
>>>  {
>>>      pflash_t *pfl = opaque;
>>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>>
>> !!() not needed. Otherwise
> 
> I don't like magic bool-ification...  Is there a coding style item that
> forbids this idiom in bool assignments?

(Side remark: in edk2, BOOLEAN is actually UINT8. !!(expr) -- or,
((expr) != 0) -- is a necessity there.)

Thanks
Laszlo


> 
> Paolo
> 
>> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.om>
>>
>>>
>>> -    return pflash_read(pfl, addr, 2, 1);
>>> +    return pflash_read(pfl, addr, len, be);
>>>  }
>>>
>>> -static uint32_t pflash_readw_le(void *opaque, hwaddr addr)
>>> +static void pflash_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned len)
>>>  {
>>>      pflash_t *pfl = opaque;
>>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>>>
>>> -    return pflash_read(pfl, addr, 2, 0);
>>> +    pflash_write(pfl, addr, value, len, be);
>>>  }
>>>
>>> -static uint32_t pflash_readl_be(void *opaque, hwaddr addr)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    return pflash_read(pfl, addr, 4, 1);
>>> -}
>>> -
>>> -static uint32_t pflash_readl_le(void *opaque, hwaddr addr)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    return pflash_read(pfl, addr, 4, 0);
>>> -}
>>> -
>>> -static void pflash_writeb_be(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_write(opaque, addr, value, 1, 1);
>>> -}
>>> -
>>> -static void pflash_writeb_le(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_write(opaque, addr, value, 1, 0);
>>> -}
>>> -
>>> -static void pflash_writew_be(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    pflash_write(pfl, addr, value, 2, 1);
>>> -}
>>> -
>>> -static void pflash_writew_le(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    pflash_write(pfl, addr, value, 2, 0);
>>> -}
>>> -
>>> -static void pflash_writel_be(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    pflash_write(pfl, addr, value, 4, 1);
>>> -}
>>> -
>>> -static void pflash_writel_le(void *opaque, hwaddr addr,
>>> -                             uint32_t value)
>>> -{
>>> -    pflash_t *pfl = opaque;
>>> -
>>> -    pflash_write(pfl, addr, value, 4, 0);
>>> -}
>>> -
>>> -static const MemoryRegionOps pflash_cfi01_ops_be = {
>>> -    .old_mmio = {
>>> -        .read = { pflash_readb_be, pflash_readw_be, pflash_readl_be, },
>>> -        .write = { pflash_writeb_be, pflash_writew_be, pflash_writel_be, },
>>> -    },
>>> -    .endianness = DEVICE_NATIVE_ENDIAN,
>>> -};
>>> -
>>> -static const MemoryRegionOps pflash_cfi01_ops_le = {
>>> -    .old_mmio = {
>>> -        .read = { pflash_readb_le, pflash_readw_le, pflash_readl_le, },
>>> -        .write = { pflash_writeb_le, pflash_writew_le, pflash_writel_le, },
>>> -    },
>>> +static const MemoryRegionOps pflash_cfi01_ops = {
>>> +    .read = pflash_mem_read,
>>> +    .write = pflash_mem_write,
>>>      .endianness = DEVICE_NATIVE_ENDIAN,
>>>  };
>>>
>>> @@ -775,7 +699,7 @@ static void pflash_cfi01_realize(DeviceState *dev, Error **errp)
>>>
>>>      memory_region_init_rom_device(
>>>          &pfl->mem, OBJECT(dev),
>>> -        pfl->features & (1 << PFLASH_BE) ? &pflash_cfi01_ops_be : &pflash_cfi01_ops_le,
>>> +        &pflash_cfi01_ops,
>>>          pfl,
>>>          pfl->name, total_len, &local_err);
>>>      if (local_err) {
>>> --
>>> 2.4.1
>>>
>>>
>>>
Richard Henderson June 9, 2015, 6:08 p.m. UTC | #4
On 06/04/2015 01:02 AM, Paolo Bonzini wrote:
> 
> 
> On 04/06/2015 08:19, Peter Crosthwaite wrote:
>> On Wed, Jun 3, 2015 at 10:08 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>> This is a required step to implement read_with_attrs and write_with_attrs.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> ---
>>>  hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------
>>
>> Nice stats.
>>
>>>  1 file changed, 10 insertions(+), 86 deletions(-)
>>>
>>> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
>>> index 7507a15..0b3667a 100644
>>> --- a/hw/block/pflash_cfi01.c
>>> +++ b/hw/block/pflash_cfi01.c
>>> @@ -650,101 +650,25 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
>>>  }
>>>
>>>
>>> -static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
>>> -{
>>> -    return pflash_read(opaque, addr, 1, 1);
>>> -}
>>> -
>>> -static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
>>> -{
>>> -    return pflash_read(opaque, addr, 1, 0);
>>> -}
>>> -
>>> -static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
>>> +static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
>>>  {
>>>      pflash_t *pfl = opaque;
>>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>>
>> !!() not needed. Otherwise
> 
> I don't like magic bool-ification...

I don't like !! just as much.  If you don't like implicit conversion, then use
!= 0.

> Is there a coding style item that
> forbids this idiom in bool assignments?

No.  Indeed, nothing in coding style about bool at all.


r~
Michael S. Tsirkin June 9, 2015, 6:47 p.m. UTC | #5
On Tue, Jun 09, 2015 at 11:08:31AM -0700, Richard Henderson wrote:
> On 06/04/2015 01:02 AM, Paolo Bonzini wrote:
> > 
> > 
> > On 04/06/2015 08:19, Peter Crosthwaite wrote:
> >> On Wed, Jun 3, 2015 at 10:08 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> >>> This is a required step to implement read_with_attrs and write_with_attrs.
> >>>
> >>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> >>> ---
> >>>  hw/block/pflash_cfi01.c | 96 ++++++-------------------------------------------
> >>
> >> Nice stats.
> >>
> >>>  1 file changed, 10 insertions(+), 86 deletions(-)
> >>>
> >>> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> >>> index 7507a15..0b3667a 100644
> >>> --- a/hw/block/pflash_cfi01.c
> >>> +++ b/hw/block/pflash_cfi01.c
> >>> @@ -650,101 +650,25 @@ static void pflash_write(pflash_t *pfl, hwaddr offset,
> >>>  }
> >>>
> >>>
> >>> -static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
> >>> -{
> >>> -    return pflash_read(opaque, addr, 1, 1);
> >>> -}
> >>> -
> >>> -static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
> >>> -{
> >>> -    return pflash_read(opaque, addr, 1, 0);
> >>> -}
> >>> -
> >>> -static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
> >>> +static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
> >>>  {
> >>>      pflash_t *pfl = opaque;
> >>> +    bool be = !!(pfl->features & (1 << PFLASH_BE));
> >>
> >> !!() not needed. Otherwise
> > 
> > I don't like magic bool-ification...
> 
> I don't like !! just as much.  If you don't like implicit conversion, then use
> != 0.
> > Is there a coding style item that
> > forbids this idiom in bool assignments?
> 
> No.  Indeed, nothing in coding style about bool at all.
> 
> 
> r~

Looks like it's a matter of taste.
FWIW I like !! or implicit conversions, and dislike != 0 as too verbose :)
Paolo Bonzini June 17, 2015, 7:56 a.m. UTC | #6
On 09/06/2015 20:08, Richard Henderson wrote:
> > > +    bool be = !!(pfl->features & (1 << PFLASH_BE));
> > >
> > > !!() not needed. Otherwise
> > 
> > I don't like magic bool-ification...
> 
> I don't like !! just as much.  If you don't like implicit conversion, then use
> != 0.

Fair enough, let's add to the coding still that we don't like !!.

Paolo
Markus Armbruster June 17, 2015, 8:22 a.m. UTC | #7
Paolo Bonzini <pbonzini@redhat.com> writes:

> On 09/06/2015 20:08, Richard Henderson wrote:
>> > > +    bool be = !!(pfl->features & (1 << PFLASH_BE));
>> > >
>> > > !!() not needed. Otherwise
>> > 
>> > I don't like magic bool-ification...
>> 
>> I don't like !! just as much.  If you don't like implicit conversion, then use
>> != 0.
>
> Fair enough, let's add to the coding still that we don't like !!.

$ git-grep '!!' | wc -l
369
$ git-grep -l '!!' | wc -l
170

Adding arbitrary rules to CODING_STYLE is one thing, adding rules that
are widely violated in existing code and not flagged by checkpatch.pl is
quite another.
diff mbox

Patch

diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index 7507a15..0b3667a 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -650,101 +650,25 @@  static void pflash_write(pflash_t *pfl, hwaddr offset,
 }
 
 
-static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
-{
-    return pflash_read(opaque, addr, 1, 1);
-}
-
-static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
-{
-    return pflash_read(opaque, addr, 1, 0);
-}
-
-static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
+static uint64_t pflash_mem_read(void *opaque, hwaddr addr, unsigned len)
 {
     pflash_t *pfl = opaque;
+    bool be = !!(pfl->features & (1 << PFLASH_BE));
 
-    return pflash_read(pfl, addr, 2, 1);
+    return pflash_read(pfl, addr, len, be);
 }
 
-static uint32_t pflash_readw_le(void *opaque, hwaddr addr)
+static void pflash_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned len)
 {
     pflash_t *pfl = opaque;
+    bool be = !!(pfl->features & (1 << PFLASH_BE));
 
-    return pflash_read(pfl, addr, 2, 0);
+    pflash_write(pfl, addr, value, len, be);
 }
 
-static uint32_t pflash_readl_be(void *opaque, hwaddr addr)
-{
-    pflash_t *pfl = opaque;
-
-    return pflash_read(pfl, addr, 4, 1);
-}
-
-static uint32_t pflash_readl_le(void *opaque, hwaddr addr)
-{
-    pflash_t *pfl = opaque;
-
-    return pflash_read(pfl, addr, 4, 0);
-}
-
-static void pflash_writeb_be(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_write(opaque, addr, value, 1, 1);
-}
-
-static void pflash_writeb_le(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_write(opaque, addr, value, 1, 0);
-}
-
-static void pflash_writew_be(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_t *pfl = opaque;
-
-    pflash_write(pfl, addr, value, 2, 1);
-}
-
-static void pflash_writew_le(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_t *pfl = opaque;
-
-    pflash_write(pfl, addr, value, 2, 0);
-}
-
-static void pflash_writel_be(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_t *pfl = opaque;
-
-    pflash_write(pfl, addr, value, 4, 1);
-}
-
-static void pflash_writel_le(void *opaque, hwaddr addr,
-                             uint32_t value)
-{
-    pflash_t *pfl = opaque;
-
-    pflash_write(pfl, addr, value, 4, 0);
-}
-
-static const MemoryRegionOps pflash_cfi01_ops_be = {
-    .old_mmio = {
-        .read = { pflash_readb_be, pflash_readw_be, pflash_readl_be, },
-        .write = { pflash_writeb_be, pflash_writew_be, pflash_writel_be, },
-    },
-    .endianness = DEVICE_NATIVE_ENDIAN,
-};
-
-static const MemoryRegionOps pflash_cfi01_ops_le = {
-    .old_mmio = {
-        .read = { pflash_readb_le, pflash_readw_le, pflash_readl_le, },
-        .write = { pflash_writeb_le, pflash_writew_le, pflash_writel_le, },
-    },
+static const MemoryRegionOps pflash_cfi01_ops = {
+    .read = pflash_mem_read,
+    .write = pflash_mem_write,
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
@@ -775,7 +699,7 @@  static void pflash_cfi01_realize(DeviceState *dev, Error **errp)
 
     memory_region_init_rom_device(
         &pfl->mem, OBJECT(dev),
-        pfl->features & (1 << PFLASH_BE) ? &pflash_cfi01_ops_be : &pflash_cfi01_ops_le,
+        &pflash_cfi01_ops,
         pfl,
         pfl->name, total_len, &local_err);
     if (local_err) {