Message ID | 20220630045133.32251-9-me@pjd.dev |
---|---|
State | New |
Headers | show |
Series | hw/i2c/aspeed: I2C slave mode DMA RX w/ new regs | expand |
On Wed, 29 Jun 2022 at 21:52, Peter Delevoryas <me@pjd.dev> wrote: > > From: Peter Delevoryas <pdel@fb.com> > > Signed-off-by: Peter Delevoryas <pdel@fb.com> > --- > hw/i2c/pmbus_device.c | 9 +++++++++ > include/hw/i2c/pmbus_device.h | 7 +++++++ > 2 files changed, 16 insertions(+) > > diff --git a/hw/i2c/pmbus_device.c b/hw/i2c/pmbus_device.c > index 62885fa6a1..f89fea65f3 100644 > --- a/hw/i2c/pmbus_device.c > +++ b/hw/i2c/pmbus_device.c > @@ -261,6 +261,11 @@ void pmbus_check_limits(PMBusDevice *pmdev) > } > } > > +void pmbus_idle(PMBusDevice *pmdev) > +{ > + pmdev->code = PMBUS_IDLE_STATE; > +} > + > /* assert the status_cml error upon receipt of malformed command */ > static void pmbus_cml_error(PMBusDevice *pmdev) > { > @@ -984,6 +989,10 @@ static uint8_t pmbus_receive_byte(SMBusDevice *smd) > } > break; > > + case PMBUS_IDLE_STATE: > + pmbus_send8(pmdev, PMBUS_ERR_BYTE); > + break; > + > case PMBUS_CLEAR_FAULTS: /* Send Byte */ > case PMBUS_PAGE_PLUS_WRITE: /* Block Write-only */ > case PMBUS_STORE_DEFAULT_ALL: /* Send Byte */ > diff --git a/include/hw/i2c/pmbus_device.h b/include/hw/i2c/pmbus_device.h > index 0f4d6b3fad..93f5d57c9d 100644 > --- a/include/hw/i2c/pmbus_device.h > +++ b/include/hw/i2c/pmbus_device.h > @@ -155,6 +155,7 @@ enum pmbus_registers { > PMBUS_MFR_MAX_TEMP_1 = 0xC0, /* R/W word */ > PMBUS_MFR_MAX_TEMP_2 = 0xC1, /* R/W word */ > PMBUS_MFR_MAX_TEMP_3 = 0xC2, /* R/W word */ > + PMBUS_IDLE_STATE = 0xFF, > }; > > /* STATUS_WORD */ > @@ -527,6 +528,12 @@ int pmbus_page_config(PMBusDevice *pmdev, uint8_t page_index, uint64_t flags); > */ > void pmbus_check_limits(PMBusDevice *pmdev); > > +/** > + * Enter an idle state where only the PMBUS_ERR_BYTE will be returned > + * indefinitely until a new command is issued. > + */ > +void pmbus_idle(PMBusDevice *pmdev); > + > extern const VMStateDescription vmstate_pmbus_device; > > #define VMSTATE_PMBUS_DEVICE(_field, _state) { \ > -- > 2.37.0 > Reviewed-by: Titus Rwantare <titusr@google.com>
diff --git a/hw/i2c/pmbus_device.c b/hw/i2c/pmbus_device.c index 62885fa6a1..f89fea65f3 100644 --- a/hw/i2c/pmbus_device.c +++ b/hw/i2c/pmbus_device.c @@ -261,6 +261,11 @@ void pmbus_check_limits(PMBusDevice *pmdev) } } +void pmbus_idle(PMBusDevice *pmdev) +{ + pmdev->code = PMBUS_IDLE_STATE; +} + /* assert the status_cml error upon receipt of malformed command */ static void pmbus_cml_error(PMBusDevice *pmdev) { @@ -984,6 +989,10 @@ static uint8_t pmbus_receive_byte(SMBusDevice *smd) } break; + case PMBUS_IDLE_STATE: + pmbus_send8(pmdev, PMBUS_ERR_BYTE); + break; + case PMBUS_CLEAR_FAULTS: /* Send Byte */ case PMBUS_PAGE_PLUS_WRITE: /* Block Write-only */ case PMBUS_STORE_DEFAULT_ALL: /* Send Byte */ diff --git a/include/hw/i2c/pmbus_device.h b/include/hw/i2c/pmbus_device.h index 0f4d6b3fad..93f5d57c9d 100644 --- a/include/hw/i2c/pmbus_device.h +++ b/include/hw/i2c/pmbus_device.h @@ -155,6 +155,7 @@ enum pmbus_registers { PMBUS_MFR_MAX_TEMP_1 = 0xC0, /* R/W word */ PMBUS_MFR_MAX_TEMP_2 = 0xC1, /* R/W word */ PMBUS_MFR_MAX_TEMP_3 = 0xC2, /* R/W word */ + PMBUS_IDLE_STATE = 0xFF, }; /* STATUS_WORD */ @@ -527,6 +528,12 @@ int pmbus_page_config(PMBusDevice *pmdev, uint8_t page_index, uint64_t flags); */ void pmbus_check_limits(PMBusDevice *pmdev); +/** + * Enter an idle state where only the PMBUS_ERR_BYTE will be returned + * indefinitely until a new command is issued. + */ +void pmbus_idle(PMBusDevice *pmdev); + extern const VMStateDescription vmstate_pmbus_device; #define VMSTATE_PMBUS_DEVICE(_field, _state) { \