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