Message ID | 20230702154838.722809-12-mark.cave-ayland@ilande.co.uk |
---|---|
State | New |
Headers | show |
Series | q800: add support for booting MacOS Classic - part 2 | expand |
On 2/7/23 17:48, Mark Cave-Ayland wrote: > Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> > --- > hw/block/swim.c | 14 ++++++++++++++ > hw/block/trace-events | 7 +++++++ > 2 files changed, 21 insertions(+) > @@ -267,6 +275,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t value, > reg >>= REG_SHIFT; > > swimctrl->regs[reg >> 1] = reg & 1; > + trace_swim_iwmctrl_write((reg >> 1), size, (reg & 1)); > > if (swimctrl->regs[IWM_Q6] && > swimctrl->regs[IWM_Q7]) { > @@ -297,6 +306,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t value, > if (value == 0x57) { > swimctrl->mode = SWIM_MODE_SWIM; > swimctrl->iwm_switch = 0; > + trace_swim_iwm_switch(); > } > break; > } > @@ -312,6 +322,7 @@ static uint64_t iwmctrl_read(void *opaque, hwaddr reg, unsigned size) > > swimctrl->regs[reg >> 1] = reg & 1; > > + trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); > return 0; > } > +swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 > +swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 > +swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=%d size=%u value=0x%"PRIx64 > +swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=%d size=%u value=0x%"PRIx64 For these 2 functions, 'value' is 1 bit so could be 'unsigned' ;) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On 03/07/2023 09:26, Philippe Mathieu-Daudé wrote: > On 2/7/23 17:48, Mark Cave-Ayland wrote: >> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> >> --- >> hw/block/swim.c | 14 ++++++++++++++ >> hw/block/trace-events | 7 +++++++ >> 2 files changed, 21 insertions(+) > > >> @@ -267,6 +275,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t >> value, >> reg >>= REG_SHIFT; >> swimctrl->regs[reg >> 1] = reg & 1; >> + trace_swim_iwmctrl_write((reg >> 1), size, (reg & 1)); >> if (swimctrl->regs[IWM_Q6] && >> swimctrl->regs[IWM_Q7]) { >> @@ -297,6 +306,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t >> value, >> if (value == 0x57) { >> swimctrl->mode = SWIM_MODE_SWIM; >> swimctrl->iwm_switch = 0; >> + trace_swim_iwm_switch(); >> } >> break; >> } >> @@ -312,6 +322,7 @@ static uint64_t iwmctrl_read(void *opaque, hwaddr reg, unsigned >> size) >> swimctrl->regs[reg >> 1] = reg & 1; >> + trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); >> return 0; >> } > > >> +swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t value) >> "reg=%d [%s] size=%u value=0x%"PRIx64 >> +swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t value) >> "reg=%d [%s] size=%u value=0x%"PRIx64 >> +swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=%d size=%u >> value=0x%"PRIx64 >> +swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=%d size=%u >> value=0x%"PRIx64 > > For these 2 functions, 'value' is 1 bit so could be 'unsigned' ;) Indeed. In fact I'd be inclined to make them "unsigned int" just to be sure there is no confusion :) > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> ATB, Mark.
On 5/7/23 21:40, Mark Cave-Ayland wrote: > On 03/07/2023 09:26, Philippe Mathieu-Daudé wrote: > >> On 2/7/23 17:48, Mark Cave-Ayland wrote: >>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> >>> --- >>> hw/block/swim.c | 14 ++++++++++++++ >>> hw/block/trace-events | 7 +++++++ >>> 2 files changed, 21 insertions(+) >>> @@ -312,6 +322,7 @@ static uint64_t iwmctrl_read(void *opaque, hwaddr >>> reg, unsigned size) >>> swimctrl->regs[reg >> 1] = reg & 1; >>> + trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); >>> return 0; >>> } >> >> >>> +swim_swimctrl_read(int reg, const char *name, unsigned size, >>> uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 >>> +swim_swimctrl_write(int reg, const char *name, unsigned size, >>> uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 >>> +swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=%d >>> size=%u value=0x%"PRIx64 >>> +swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=%d >>> size=%u value=0x%"PRIx64 >> >> For these 2 functions, 'value' is 1 bit so could be 'unsigned' ;) > > Indeed. In fact I'd be inclined to make them "unsigned int" just to be > sure there is no confusion :) I thought the style was to just use "unsigned" but per docs/devel/style.rst we indeed recommend "unsigned int". TIL.
diff --git a/hw/block/swim.c b/hw/block/swim.c index 333da08ce0..7df36ea139 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -19,6 +19,7 @@ #include "hw/block/block.h" #include "hw/block/swim.h" #include "hw/qdev-properties.h" +#include "trace.h" /* IWM registers */ @@ -125,6 +126,13 @@ #define SWIM_HEDSEL 0x20 #define SWIM_MOTON 0x80 +static const char *swim_reg_names[] = { + "WRITE_DATA", "WRITE_MARK", "WRITE_CRC", "WRITE_PARAMETER", + "WRITE_PHASE", "WRITE_SETUP", "WRITE_MODE0", "WRITE_MODE1", + "READ_DATA", "READ_MARK", "READ_ERROR", "READ_PARAMETER", + "READ_PHASE", "READ_SETUP", "READ_STATUS", "READ_HANDSHAKE" +}; + static void fd_recalibrate(FDrive *drive) { } @@ -267,6 +275,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t value, reg >>= REG_SHIFT; swimctrl->regs[reg >> 1] = reg & 1; + trace_swim_iwmctrl_write((reg >> 1), size, (reg & 1)); if (swimctrl->regs[IWM_Q6] && swimctrl->regs[IWM_Q7]) { @@ -297,6 +306,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t value, if (value == 0x57) { swimctrl->mode = SWIM_MODE_SWIM; swimctrl->iwm_switch = 0; + trace_swim_iwm_switch(); } break; } @@ -312,6 +322,7 @@ static uint64_t iwmctrl_read(void *opaque, hwaddr reg, unsigned size) swimctrl->regs[reg >> 1] = reg & 1; + trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); return 0; } @@ -327,6 +338,8 @@ static void swimctrl_write(void *opaque, hwaddr reg, uint64_t value, reg >>= REG_SHIFT; + trace_swim_swimctrl_write(reg, swim_reg_names[reg], size, value); + switch (reg) { case SWIM_WRITE_PHASE: swimctrl->swim_phase = value; @@ -376,6 +389,7 @@ static uint64_t swimctrl_read(void *opaque, hwaddr reg, unsigned size) break; } + trace_swim_swimctrl_read(reg, swim_reg_names[reg], size, value); return value; } diff --git a/hw/block/trace-events b/hw/block/trace-events index 34be8b9135..c041ec45e3 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -90,3 +90,10 @@ m25p80_read_data(void *s, uint32_t pos, uint8_t v) "[%p] Read data 0x%"PRIx32"=0 m25p80_read_sfdp(void *s, uint32_t addr, uint8_t v) "[%p] Read SFDP 0x%"PRIx32"=0x%"PRIx8 m25p80_binding(void *s) "[%p] Binding to IF_MTD drive" m25p80_binding_no_bdrv(void *s) "[%p] No BDRV - binding to RAM" + +# swim.c +swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 +swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t value) "reg=%d [%s] size=%u value=0x%"PRIx64 +swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=%d size=%u value=0x%"PRIx64 +swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=%d size=%u value=0x%"PRIx64 +swim_iwm_switch(void) "switch from IWM to SWIM mode"
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> --- hw/block/swim.c | 14 ++++++++++++++ hw/block/trace-events | 7 +++++++ 2 files changed, 21 insertions(+)