This device is not "Power Reduction" but power reduction registers can be
implemented with it. All it does, whenever a bit is written the device
raises an interrupt / IRQ.
If you have a better name please advise.

On Mon, Dec 23, 2019 at 10:46 AM Aleksandar Markovic <
aleksandar.m.m...@gmail.com> wrote:

>
>
> On Wednesday, December 18, 2019, Michael Rolnik <mrol...@gmail.com> wrote:
>
>> Signed-off-by: Michael Rolnik <mrol...@gmail.com>
>> ---
>
>
> Hi, Michael.
>
> Please avoid empty commit messages.
>
> At the very beginning, there is a line:
>
> + * AVR Power Reduction
>
> Why is that? There is a power reduction register in the docs, but is it
> covered in this patch?
>
> Further, "mask" is too genetic word. Pkease use more specific name bot fir
> filename and variables within this patch. "interrupt controller",
> "irq_masq", "IrqMask", "irq" are justsome of ideas.
>
> Yours,
> Aleksandar
>
>
>>  include/hw/misc/avr_mask.h |  47 ++++++++++++++++
>>  hw/misc/avr_mask.c         | 112 +++++++++++++++++++++++++++++++++++++
>>  hw/misc/Kconfig            |   3 +
>>  hw/misc/Makefile.objs      |   2 +
>>  4 files changed, 164 insertions(+)
>>  create mode 100644 include/hw/misc/avr_mask.h
>>  create mode 100644 hw/misc/avr_mask.c
>>
>> diff --git a/include/hw/misc/avr_mask.h b/include/hw/misc/avr_mask.h
>> new file mode 100644
>> index 0000000000..d3e21972d8
>> --- /dev/null
>> +++ b/include/hw/misc/avr_mask.h
>> @@ -0,0 +1,47 @@
>> +/*
>> + * AVR Power Reduction
>> + *
>> + * Copyright (c) 2019 Michael Rolnik
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining
>> a copy
>> + * of this software and associated documentation files (the "Software"),
>> to deal
>> + * in the Software without restriction, including without limitation the
>> rights
>> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or
>> sell
>> + * copies of the Software, and to permit persons to whom the Software is
>> + * furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice shall be
>> included in
>> + * all copies or substantial portions of the Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
>> OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING FROM,
>> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> DEALINGS IN
>> + * THE SOFTWARE.
>> + */
>> +
>> +#ifndef HW_avr_mask_H
>> +#define HW_avr_mask_H
>> +
>> +#include "hw/sysbus.h"
>> +#include "chardev/char-fe.h"
>> +#include "hw/hw.h"
>> +
>> +
>> +#define TYPE_AVR_MASK "avr-mask"
>> +#define AVR_MASK(obj) OBJECT_CHECK(AVRMaskState, (obj), TYPE_AVR_MASK)
>> +
>> +typedef struct {
>> +    /* <private> */
>> +    SysBusDevice parent_obj;
>> +
>> +    /* <public> */
>> +    MemoryRegion iomem;
>> +
>> +    uint8_t val;
>> +    qemu_irq irq[8];
>> +} AVRMaskState;
>> +
>> +#endif /* HW_avr_mask_H */
>> diff --git a/hw/misc/avr_mask.c b/hw/misc/avr_mask.c
>> new file mode 100644
>> index 0000000000..3af82ed9c1
>> --- /dev/null
>> +++ b/hw/misc/avr_mask.c
>> @@ -0,0 +1,112 @@
>> +/*
>> + * AVR Power Reduction
>> + *
>> + * Copyright (c) 2019 Michael Rolnik
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining
>> a copy
>> + * of this software and associated documentation files (the "Software"),
>> to deal
>> + * in the Software without restriction, including without limitation the
>> rights
>> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or
>> sell
>> + * copies of the Software, and to permit persons to whom the Software is
>> + * furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice shall be
>> included in
>> + * all copies or substantial portions of the Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
>> OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING FROM,
>> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> DEALINGS IN
>> + * THE SOFTWARE.
>> + */
>> +
>> +#include "qemu/osdep.h"
>> +#include "hw/misc/avr_mask.h"
>> +#include "qemu/log.h"
>> +#include "hw/qdev-properties.h"
>> +#include "hw/irq.h"
>> +
>> +#define DB_PRINT(fmt, args...) /* Nothing */
>> +/*#define DB_PRINT(fmt, args...) printf("%s: " fmt "\n", __func__, ##
>> args)*/
>> +
>> +static void avr_mask_reset(DeviceState *dev)
>> +{
>> +    AVRMaskState *s = AVR_MASK(dev);
>> +
>> +    s->val = 0x00;
>> +
>> +    for (int i = 0; i < 8; i++) {
>> +        qemu_set_irq(s->irq[i], 0);
>> +    }
>> +}
>> +
>> +static uint64_t avr_mask_read(void *opaque, hwaddr offset, unsigned size)
>> +{
>> +    assert(size == 1);
>> +    assert(offset == 0);
>> +    AVRMaskState *s = opaque;
>> +
>> +    return (uint64_t)s->val;
>> +}
>> +
>> +static void avr_mask_write(void *opaque, hwaddr offset,
>> +                              uint64_t val64, unsigned size)
>> +{
>> +    assert(size == 1);
>> +    assert(offset == 0);
>> +    AVRMaskState *s = opaque;
>> +    uint8_t val8 = val64;
>> +
>> +    DB_PRINT("write %d to offset %d", val8, (uint8_t)offset);
>> +
>> +    s->val = val8;
>> +    for (int i = 0; i < 8; i++) {
>> +        qemu_set_irq(s->irq[i], (val8 & (1 << i)) != 0);
>> +    }
>> +}
>> +
>> +static const MemoryRegionOps avr_mask_ops = {
>> +    .read = avr_mask_read,
>> +    .write = avr_mask_write,
>> +    .endianness = DEVICE_NATIVE_ENDIAN,
>> +    .impl = {.max_access_size = 1}
>> +};
>> +
>> +static void avr_mask_init(Object *dev)
>> +{
>> +    AVRMaskState *s = AVR_MASK(dev);
>> +    SysBusDevice *busdev = SYS_BUS_DEVICE(dev);
>> +
>> +    memory_region_init_io(&s->iomem, dev, &avr_mask_ops, s,
>> TYPE_AVR_MASK,
>> +            0x01);
>> +    sysbus_init_mmio(busdev, &s->iomem);
>> +
>> +    for (int i = 0; i < 8; i++) {
>> +        sysbus_init_irq(busdev, &s->irq[i]);
>> +    }
>> +    s->val = 0x00;
>> +}
>> +
>> +static void avr_mask_class_init(ObjectClass *klass, void *data)
>> +{
>> +    DeviceClass *dc = DEVICE_CLASS(klass);
>> +
>> +    dc->reset = avr_mask_reset;
>> +}
>> +
>> +static const TypeInfo avr_mask_info = {
>> +    .name          = TYPE_AVR_MASK,
>> +    .parent        = TYPE_SYS_BUS_DEVICE,
>> +    .instance_size = sizeof(AVRMaskState),
>> +    .class_init    = avr_mask_class_init,
>> +    .instance_init = avr_mask_init,
>> +};
>> +
>> +static void avr_mask_register_types(void)
>> +{
>> +    type_register_static(&avr_mask_info);
>> +}
>> +
>> +type_init(avr_mask_register_types)
>> diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
>> index 2164646553..e79841e3a4 100644
>> --- a/hw/misc/Kconfig
>> +++ b/hw/misc/Kconfig
>> @@ -125,4 +125,7 @@ config MAC_VIA
>>      select MOS6522
>>      select ADB
>>
>> +config AVR_MASK
>> +    bool
>> +
>>  source macio/Kconfig
>> diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs
>> index ba898a5781..3a8093be6a 100644
>> --- a/hw/misc/Makefile.objs
>> +++ b/hw/misc/Makefile.objs
>> @@ -82,3 +82,5 @@ common-obj-$(CONFIG_NRF51_SOC) += nrf51_rng.o
>>  obj-$(CONFIG_MAC_VIA) += mac_via.o
>>
>>  common-obj-$(CONFIG_GRLIB) += grlib_ahb_apb_pnp.o
>> +
>> +obj-$(CONFIG_AVR_MASK) += avr_mask.o
>> --
>> 2.17.2 (Apple Git-113)
>>
>>

-- 
Best Regards,
Michael Rolnik

Reply via email to