Does obmc-ikvm work with bmcweb?
Jae Hyun Yoo
jae.hyun.yoo at linux.intel.com
Wed Mar 20 05:04:38 AEDT 2019
Hi Xiuzhi,
Good to hear that. :)
For the mouse button mapping issue, try this patch:
https://gerrit.openbmc-project.xyz/c/openbmc/obmc-ikvm/+/19393
Cheers,
Jae
On 3/18/2019 8:05 PM, xiuzhi wrote:
> Hi Joe,
> The ikvm works now, thanks very much.
> One issue, the right button of mouse operation has no response on bmc
> ikvm website page.
> Best,
> xiuzhi
>
> ------------------ Original ------------------
> *From: * "jae.hyun.yoo";<jae.hyun.yoo at linux.intel.com>;
> *Send time:* Tuesday, Mar 19, 2019 1:33 AM
> *To:* "Lei YU"<mine260309 at gmail.com>;
> *Cc:* "xiuzhi"<1450335857 at qq.com>; "openbmc"<openbmc at lists.ozlabs.org>;
> "ed"<ed at tanous.net>; "Eddie James"<eajames at linux.vnet.ibm.com>;
> *Subject: * Re: Does obmc-ikvm work with bmcweb?
>
> Attaching a patch file for back porting of Eddie's aspeed-video driver.
> Diff in below doesn't include the newly created file so I'm attaching it
> as a patch.
>
> -Jae
>
> On 3/18/2019 10:21 AM, Jae Hyun Yoo wrote:
> > On 3/17/2019 7:25 PM, Lei YU wrote:
> >>> openbmc: ae29d00f227e55192a69f66c87633e1b53fc6e68
> >>>
> >>> I'm using a custom build config for my machine. As you already
> know, for
> >>> enabling the KVM feature, customization on kernel configs, adding a
> >>> 'start-ipkvm' service, adding of libvncserver package and back-porting
> >>> of aspeed video driver are also needed so there is no one-shot
> buildable
> >>> TEMPLATECONF for KVM test.
> >>
> >> Could you kindly put everything together on a branch so others could
> >> refer the
> >> branch to know what the changes are for KVM to work?
> >> Thanks a lot!
> >>
> >
> > Well, I've already shared SHAs that are relating to KVM in this email
> > thread, I'm sharing it again with some more details.
> >
> > openbmc: ae29d00f227e55192a69f66c87633e1b53fc6e68
> >
> > bmcweb: 9474b3788017bddd70e493e2b9b7674be30abc87
> >
> > phosphor-webui: 511a2bbc5540fccb883b8d0005c2b387a23c9d05
> > Cherry picked
> > https://gerrit.openbmc-project.xyz/#/c/openbmc/phosphor-webui/+/10268/
> >
> > libvncserver: 3348a7e42e86dfb98dd7458ad29def476cf6096f
> > Need to remove 'x11' and 'gtk+' to reduce package size so I made:
> > libvncserver_%.bbappend
> > ----------------------------------------------------------------
> > PACKAGECONFIG_remove = "gcrypt gnutls png sdl zlib"
> >
> > TARGET_CXXFLAGS += " -Dflto"
> >
> > do_install_append() {
> > rm -rf ${D}${libdir}/libvncclient*
> > }
> >
> > inherit cmake
> >
> > # Use the latest to support obmc-ikvm
> > DEPENDS += "openssl"
> > SRC_URI = "git://github.com/LibVNC/libvncserver"
> > SRCREV = "3348a7e42e86dfb98dd7458ad29def476cf6096f"
> > S = "${WORKDIR}/git"
> >
> > # Remove x11 and gtk+ that cause big image size
> > # Actually, these aren't needed to support obmc-ikvm
> > REQUIRED_DISTRO_FEATURES_remove = "x11"
> > DEPENDS_remove = "gtk+"
> > RDEPENDS_${PN}_remove = "gtk+"
> > ----------------------------------------------------------------
> >
> > start-ipkvm: Cherry pick
> > https://gerrit.openbmc-project.xyz/#/c/openbmc/meta-phosphor/+/13536/
> > After cherry picking it, I changed start-ipkvm.service file like below:
> > start-ipkvm.service
> > ----------------------------------------------------------------
> > [Unit]
> > Description=OpenBMC ipKVM daemon
> > StopWhenUnneeded=false
> >
> > [Service]
> > Restart=always
> > ExecStartPre=/usr/bin/create_usbhid.sh
> > ExecStart=/usr/bin/env obmc-ikvm -v /dev/video0 -f 10 -k /dev/hidg0 -p
> > /dev/hidg1
> >
> > [Install]
> > WantedBy=multi-user.target
> > -----------------------------------------------------------------
> >
> > obmc-ikvm: 2bc661d34abd1fda92a9d2b256ed88ca0e90d09a
> >
> > linux-aspeed: 7859d04be772a1d185de335a8e9d38ac03a89f3f
> > Added these kernel configs:
> > -----------------------------------------------------------------
> > CONFIG_FRAME_VECTOR=y
> > CONFIG_MEDIA_SUPPORT=y
> > CONFIG_MEDIA_CAMERA_SUPPORT=y
> > CONFIG_VIDEO_DEV=y
> > CONFIG_VIDEO_V4L2=y
> > CONFIG_V4L_PLATFORM_DRIVERS=y
> > CONFIG_VIDEO_ASPEED=y
> > CONFIG_VIDEOBUF2_CORE=y
> > CONFIG_VIDEOBUF2_V4L2=y
> > CONFIG_VIDEOBUF2_MEMOPS=y
> > CONFIG_VIDEOBUF2_DMA_CONTIG=y
> > CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
> > CONFIG_USB_GADGET_VBUS_DRAW=2
> > CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
> > CONFIG_USB_LIBCOMPOSITE=y
> > CONFIG_USB_F_HID=y
> > CONFIG_USB_GADGET=y
> > CONFIG_U_SERIAL_CONSOLE=y
> > CONFIG_USB_ASPEED_VHUB=y
> > CONFIG_USB_CONFIGFS=y
> > CONFIG_USB_CONFIGFS_MASS_STORAGE=y
> > CONFIG_USB_CONFIGFS_F_FS=y
> > CONFIG_USB_CONFIGFS_F_HID=y
> > -------------------------------------------------------------------
> > Back ported Eddie's aspeed-video driver
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index b98a5763f6c1..cdd8f824b6da 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -2358,6 +2358,14 @@ S: Maintained
> > F: Documentation/hwmon/asc7621
> > F: drivers/hwmon/asc7621.c
> >
> > +ASPEED VIDEO ENGINE DRIVER
> > +M: Eddie James <eajames at linux.ibm.com>
> > +L: linux-media at vger.kernel.org
> > +L: openbmc at lists.ozlabs.org (moderated for non-subscribers)
> > +S: Maintained
> > +F: drivers/media/platform/aspeed-video.c
> > +F: Documentation/devicetree/bindings/media/aspeed-video.txt
> > +
> > ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
> > M: Corentin Chary <corentin.chary at gmail.com>
> > L: acpi4asus-user at lists.sourceforge.net
> > diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi
> > b/arch/arm/boot/dts/aspeed-g5.dtsi
> > index d8a9d20cc4e0..d6da0a29ced3 100644
> > --- a/arch/arm/boot/dts/aspeed-g5.dtsi
> > +++ b/arch/arm/boot/dts/aspeed-g5.dtsi
> > @@ -243,6 +243,17 @@
> > interrupts = <0x19>;
> > };
> >
> > + video: video at 1e700000 {
> > + compatible = "aspeed,ast2500-video-engine";
> > + reg = <0x1e700000 0x20000>;
> > + clocks = <&syscon ASPEED_CLK_GATE_VCLK>,
> > + <&syscon ASPEED_CLK_GATE_ECLK>;
> > + clock-names = "vclk", "eclk";
> > + resets = <&syscon ASPEED_RESET_VIDEO>;
> > + interrupts = <7>;
> > + status = "disabled";
> > + };
> > +
> > adc: adc at 1e6e9000 {
> > compatible = "aspeed,ast2500-adc";
> > reg = <0x1e6e9000 0xb0>;
> > diff --git a/drivers/clk/clk-aspeed.c b/drivers/clk/clk-aspeed.c
> > index 596136793fc4..f16ce7dbd6ab 100644
> > --- a/drivers/clk/clk-aspeed.c
> > +++ b/drivers/clk/clk-aspeed.c
> > @@ -87,7 +87,7 @@ struct aspeed_clk_gate {
> > /* TODO: ask Aspeed about the actual parent data */
> > static const struct aspeed_gate_data aspeed_gates[] = {
> > /* clk rst name parent flags */
> > - [ASPEED_CLK_GATE_ECLK] = { 0, -1, "eclk-gate",
> > "eclk", 0 }, /* Video Engine */
> > + [ASPEED_CLK_GATE_ECLK] = { 0, 6, "eclk-gate",
> > "eclk", 0 }, /* Video Engine */
> > [ASPEED_CLK_GATE_GCLK] = { 1, 7, "gclk-gate", NULL,
> > 0 }, /* 2D engine */
> > [ASPEED_CLK_GATE_MCLK] = { 2, -1, "mclk-gate", "mpll",
> > CLK_IS_CRITICAL }, /* SDRAM */
> > [ASPEED_CLK_GATE_VCLK] = { 3, 6, "vclk-gate", NULL,
> > 0 }, /* Video Capture */
> > @@ -113,6 +113,24 @@ static const struct aspeed_gate_data aspeed_gates[]
> > = {
> > [ASPEED_CLK_GATE_LHCCLK] = { 28, -1, "lhclk-gate",
> > "lhclk", 0 }, /* LPC master/LPC+ */
> > };
> >
> > +static const char * const eclk_parent_names[] = {
> > + "mpll",
> > + "hpll",
> > + "dpll",
> > +};
> > +
> > +static const struct clk_div_table ast2500_eclk_div_table[] = {
> > + { 0x0, 2 },
> > + { 0x1, 2 },
> > + { 0x2, 3 },
> > + { 0x3, 4 },
> > + { 0x4, 5 },
> > + { 0x5, 6 },
> > + { 0x6, 7 },
> > + { 0x7, 8 },
> > + { 0 }
> > +};
> > +
> > static const struct clk_div_table ast2500_mac_div_table[] = {
> > { 0x0, 4 }, /* Yep, really. Aspeed confirmed this is correct */
> > { 0x1, 4 },
> > @@ -192,18 +210,21 @@ static struct clk_hw
> > *aspeed_ast2500_calc_pll(const char *name, u32 val)
> >
> > struct aspeed_clk_soc_data {
> > const struct clk_div_table *div_table;
> > + const struct clk_div_table *eclk_div_table;
> > const struct clk_div_table *mac_div_table;
> > struct clk_hw *(*calc_pll)(const char *name, u32 val);
> > };
> >
> > static const struct aspeed_clk_soc_data ast2500_data = {
> > .div_table = ast2500_div_table,
> > + .eclk_div_table = ast2500_eclk_div_table,
> > .mac_div_table = ast2500_mac_div_table,
> > .calc_pll = aspeed_ast2500_calc_pll,
> > };
> >
> > static const struct aspeed_clk_soc_data ast2400_data = {
> > .div_table = ast2400_div_table,
> > + .eclk_div_table = ast2400_div_table,
> > .mac_div_table = ast2400_div_table,
> > .calc_pll = aspeed_ast2400_calc_pll,
> > };
> > @@ -317,6 +338,7 @@ static const u8 aspeed_resets[] = {
> > [ASPEED_RESET_PECI] = 10,
> > [ASPEED_RESET_I2C] = 2,
> > [ASPEED_RESET_AHB] = 1,
> > + [ASPEED_RESET_VIDEO] = 6,
> >
> > /*
> > * SCUD4 resets start at an offset to separate them from
> > @@ -522,6 +544,22 @@ static int aspeed_clk_probe(struct platform_device
> > *pdev)
> > return PTR_ERR(hw);
> > aspeed_clk_data->hws[ASPEED_CLK_24M] = hw;
> >
> > + hw = clk_hw_register_mux(dev, "eclk-mux", eclk_parent_names,
> > + ARRAY_SIZE(eclk_parent_names), 0,
> > + scu_base + ASPEED_CLK_SELECTION, 2, 0x3, 0,
> > + &aspeed_clk_lock);
> > + if (IS_ERR(hw))
> > + return PTR_ERR(hw);
> > + aspeed_clk_data->hws[ASPEED_CLK_ECLK_MUX] = hw;
> > +
> > + hw = clk_hw_register_divider_table(dev, "eclk", "eclk-mux", 0,
> > + scu_base + ASPEED_CLK_SELECTION, 28,
> > + 3, 0, soc_data->eclk_div_table,
> > + &aspeed_clk_lock);
> > + if (IS_ERR(hw))
> > + return PTR_ERR(hw);
> > + aspeed_clk_data->hws[ASPEED_CLK_ECLK] = hw;
> > +
> > /*
> > * TODO: There are a number of clocks that not included in this
> > driver
> > * as more information is required:
> > @@ -531,7 +569,6 @@ static int aspeed_clk_probe(struct platform_device
> > *pdev)
> > * RGMII
> > * RMII
> > * UART[1..5] clock source mux
> > - * Video Engine (ECLK) mux and clock divider
> > */
> >
> > for (i = 0; i < ARRAY_SIZE(aspeed_gates); i++) {
> > diff --git a/drivers/media/platform/Kconfig
> > b/drivers/media/platform/Kconfig
> > index 54fe90acb5b2..d6edf2d28f9b 100644
> > --- a/drivers/media/platform/Kconfig
> > +++ b/drivers/media/platform/Kconfig
> > @@ -32,6 +32,15 @@ source "drivers/media/platform/davinci/Kconfig"
> >
> > source "drivers/media/platform/omap/Kconfig"
> >
> > +config VIDEO_ASPEED
> > + tristate "Aspeed AST2400 and AST2500 Video Engine driver"
> > + depends on VIDEO_V4L2
> > + select VIDEOBUF2_DMA_CONTIG
> > + help
> > + Support for the Aspeed Video Engine (VE) embedded in the Aspeed
> > + AST2400 and AST2500 SOCs. The VE can capture and compress
> video data
> > + from digital or analog sources.
> > +
> > config VIDEO_SH_VOU
> > tristate "SuperH VOU video output driver"
> > depends on MEDIA_CAMERA_SUPPORT
> > diff --git a/drivers/media/platform/Makefile
> > b/drivers/media/platform/Makefile
> > index 41322ab65802..205c33a004fc 100644
> > --- a/drivers/media/platform/Makefile
> > +++ b/drivers/media/platform/Makefile
> > @@ -3,6 +3,7 @@
> > # Makefile for the video capture/playback device drivers.
> > #
> >
> > +obj-$(CONFIG_VIDEO_ASPEED) += aspeed-video.o
> > obj-$(CONFIG_VIDEO_CADENCE) += cadence/
> > obj-$(CONFIG_VIDEO_VIA_CAMERA) += via-camera.o
> > obj-$(CONFIG_VIDEO_CAFE_CCIC) += marvell-ccic/
> > diff --git a/include/dt-bindings/clock/aspeed-clock.h
> > b/include/dt-bindings/clock/aspeed-clock.h
> > index f43738607d77..15a9059d0303 100644
> > --- a/include/dt-bindings/clock/aspeed-clock.h
> > +++ b/include/dt-bindings/clock/aspeed-clock.h
> > @@ -50,5 +50,6 @@
> > #define ASPEED_RESET_I2C 7
> > #define ASPEED_RESET_AHB 8
> > #define ASPEED_RESET_CRT1 9
> > +#define ASPEED_RESET_VIDEO 10
> >
> > #endif
> > ------------------------------------------------------------------
> >
> > These are all I did for testing KVM.
> >
> > Cheers,
> > Jae
>
More information about the openbmc
mailing list