On Fri, Dec 11, 2020 at 4:16 PM Corey Minyard <miny...@acm.org> wrote:

> On Fri, Dec 11, 2020 at 12:56:07PM -0800, Hao Wu wrote:
> > Tl,dr: We'll remove the IPMI changes from the current patch set and
> > refactor
> >           them in a separate patch set.
> >
> > Thank you for your review! On high level, we are trying to emulate the
> BMC
> > side of the IPMI protocol. So we cannot directly use the existing IPMI
> code.
> > However, they do have a lot in duplication as you pointed out. So we'll
> > refactor
> > the existing IPMI code and update in a way that we only add the required
> > functionality.
>
> Ah, I didn't figure that out from what you posted.  So the idea is you
> can create the BMC side of the system in one qemu session with your
> changes and then you connect it to a host system running qemu with the
> host side of the interface.
>
> The wire protocol is basically symmetric, but the command handling will
> need to be separate.  So you probably want to split out the base
> protocol from ipmi_bmc_extern into its own file and use that from your
> own file, to avoid the duplication.
>
> You need to do proper ATTN handling on the BMC side.  And you will also
> need ties into GPIOs and whatnot for doing the reset, NMI, etc.
>
> "ipmi_host" is probably not the best name.  At least to me that implied
> the host side of the interface.  I'm not coming up with something I
> really like, though.  Maybe "bmc_host"?  That's more descriptive, though
> I'm sure a better name exists.  Then you could have "bmc_host_extern"
> for the protocol.  If you come up with a better naming scheme, the
> existing files can be renamed, too.
>

The naming is my fault.

My thinking was that ipmi-host-extern is to the BMC what ipmi-bmc-extern is
to the host. That is, the former represents the host as seen by the BMC,
and the latter represents the BMC as seen by the host.

I sent some docs to the list earlier this year, but sadly, I never got
around to follow up. You can see the generated docs here:

https://hskinnemoen.github.io/qemu/specs/ipmi.html

Hao, perhaps you should include my documentation patches in your next IPMI
series? If we come up with a better naming scheme for both sides, I can
update the docs accordingly.

Havard


> Thanks,
>
> -corey
>
> >
> > As for the KCS module, the BMC side of the protocol is the opposite
> > direction
> > of the existing ipmi_kcs.c code which is on the host/CPU side. For
> example,
> > in READ_STATE the CPU would read data while the BMC would write data.
> > So we can't directly use the same implementation. (They're different
> files
> > in
> > Linux either.) However, we can refactor it to re-use some of the common
> > definitions.
> >
> > We would like to remove the IPMI and KCS stuff from the current patch
> set.
> > We'll send the refactored code in a separate patch set after addressing
> > your concerns.
> >
> > Thanks again for the review!
> >
> > On Thu, Dec 10, 2020 at 7:04 PM Corey Minyard <miny...@acm.org> wrote:
> >
> > > On Thu, Dec 10, 2020 at 05:51:49PM -0800, Hao Wu wrote:
> > > > This patch series include a few more NPCM7XX devices including
> > > >
> > > > - Analog Digital Converter (ADC)
> > > > - Pulse Width Modulation (PWM)
> > > > - Keyboard Style Controller (KSC)
> > > >
> > > > To utilize these modules we also add two extra functionalities:
> > > >
> > > > 1. We modified the CLK module to generate clock values using
> qdev_clock.
> > > >    These clocks are used to determine various clocks in NPCM7XX
> devices.
> > > > 2. We added support for emulating IPMI responder devices in BMC
> machines,
> > > >    similar to the existing IPMI device support for CPU emulation.
> This
> > > allows
> > > >    a qemu instance running BMC firmware to serve as an external BMC
> for
> > > a qemu
> > > >    instance running server software. It utilizes the KCS module we
> > > implemented.
> > >
> > > Looking at the IPMI changes, why didn't you just re-use the existing
> > > IPMI infrastructure?  ipmi_host.[ch] is basically a subset of
> ipmi.[ch],
> > > and the ipmi_host_extern looks like a copy of of ipmi_bmc_extern with
> > > some names changed.  That kind of code duplication is not acceptable.
> > > Plus you copied my code and removed my copyrights, which is really
> > > not acceptable and illegal.
> > >
> > > I'm not exactly sure why you needed you own KCS interface, either.  It
> > > looks like the interface is somewhat different in some ways, but
> > > integrating it into the current KCS code is probably a better choice if
> > > that can be done.
> > >
> > > -corey
> > >
> > > >
> > > > Hao Wu (7):
> > > >   hw/misc: Add clock converter in NPCM7XX CLK module
> > > >   hw/timer: Refactor NPCM7XX Timer to use CLK clock
> > > >   hw/adc: Add an ADC module for NPCM7XX
> > > >   hw/misc: Add a PWM module for NPCM7XX
> > > >   hw/ipmi: Add an IPMI host interface
> > > >   hw/ipmi: Add a KCS Module for NPCM7XX
> > > >   hw/ipmi: Add an IPMI external host device
> > > >
> > > >  default-configs/devices/arm-softmmu.mak |   2 +
> > > >  docs/system/arm/nuvoton.rst             |   6 +-
> > > >  hw/adc/meson.build                      |   1 +
> > > >  hw/adc/npcm7xx_adc.c                    | 318 ++++++++++
> > > >  hw/arm/npcm7xx.c                        |  65 +-
> > > >  hw/ipmi/Kconfig                         |   5 +
> > > >  hw/ipmi/ipmi_host.c                     |  40 ++
> > > >  hw/ipmi/ipmi_host_extern.c              | 435 +++++++++++++
> > > >  hw/ipmi/meson.build                     |   3 +
> > > >  hw/ipmi/npcm7xx_kcs.c                   | 570 +++++++++++++++++
> > > >  hw/misc/meson.build                     |   1 +
> > > >  hw/misc/npcm7xx_clk.c                   | 795
> +++++++++++++++++++++++-
> > > >  hw/misc/npcm7xx_pwm.c                   | 535 ++++++++++++++++
> > > >  hw/timer/npcm7xx_timer.c                |  25 +-
> > > >  include/hw/adc/npcm7xx_adc.h            |  72 +++
> > > >  include/hw/arm/npcm7xx.h                |   6 +
> > > >  include/hw/ipmi/ipmi_host.h             |  56 ++
> > > >  include/hw/ipmi/ipmi_responder.h        |  66 ++
> > > >  include/hw/ipmi/npcm7xx_kcs.h           | 105 ++++
> > > >  include/hw/misc/npcm7xx_clk.h           | 146 ++++-
> > > >  include/hw/misc/npcm7xx_pwm.h           | 106 ++++
> > > >  include/hw/timer/npcm7xx_timer.h        |   1 +
> > > >  tests/qtest/meson.build                 |   4 +-
> > > >  tests/qtest/npcm7xx_adc-test.c          | 400 ++++++++++++
> > > >  tests/qtest/npcm7xx_pwm-test.c          | 490 +++++++++++++++
> > > >  25 files changed, 4221 insertions(+), 32 deletions(-)
> > > >  create mode 100644 hw/adc/npcm7xx_adc.c
> > > >  create mode 100644 hw/ipmi/ipmi_host.c
> > > >  create mode 100644 hw/ipmi/ipmi_host_extern.c
> > > >  create mode 100644 hw/ipmi/npcm7xx_kcs.c
> > > >  create mode 100644 hw/misc/npcm7xx_pwm.c
> > > >  create mode 100644 include/hw/adc/npcm7xx_adc.h
> > > >  create mode 100644 include/hw/ipmi/ipmi_host.h
> > > >  create mode 100644 include/hw/ipmi/ipmi_responder.h
> > > >  create mode 100644 include/hw/ipmi/npcm7xx_kcs.h
> > > >  create mode 100644 include/hw/misc/npcm7xx_pwm.h
> > > >  create mode 100644 tests/qtest/npcm7xx_adc-test.c
> > > >  create mode 100644 tests/qtest/npcm7xx_pwm-test.c
> > > >
> > > > --
> > > > 2.29.2.684.gfbc64c5ab5-goog
> > > >
> > >
>

Reply via email to