Does obmc-ikvm work with bmcweb?

xiuzhi 1450335857 at qq.com
Tue Mar 19 14:05:58 AEDT 2019


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20190319/c3de701e/attachment-0001.htm>


More information about the openbmc mailing list