- AST2500 Evaulation Board Build Image
- 1 Обзор
- 5.1
- 5.2 espi
- 5.2.1
- 5.2.2
- 5.2.3
- 5.2.4
- 5.3 ast_espi_isr
- 5.3.1 ESPI_ISR_HW_RESET(bit31)
- 5.3.2 ESPI_ISR_VIRTW_SYS(bit8)
- 5.3.3 ESPI_ISR_VIRTW_SYS1(bit22)
- ASPEED’s AST2500 Display To Be Supported By Linux 4.11’s DRM
- ASPEED’s AST2500 Display To Be Supported By Linux 4.11’s DRM
- Comment
- Comment
- Comment
- Comment
AST2500 Evaulation Board Build Image
Our final image is lacking OpenBMC features such as SSH, Web GUI, and IPMI We have a AST2500 evaluation board. We are using recommended build environment and setting: export TEMPLATECONF=meta-evb/meta-evb-aspeed/meta-evb-ast2500/conf We are using bitbake to build phosphor image: . oe-init-build-env bitbake obmc-phosphor-image The final image is in: openbmc/build/tmp/deploy/images/evb-ast2500 We put the following image (about 7.5 MB) in our TFTP server fitImage-aspeed-image-initramfs-evb-ast2500—5.3.1+git0+3ad520f93d-r0-evb-ast2500-20191030145446.bin -> evb.bin and then from uboot we can: dhcp evb.bin bootm System boots and we can log in as: root 0penBmc But we only get a minimal OS. There are no OpenBmc features (such as ssh, web server, ipmi stack, etc) in this final image What are we doing wrong? We also get the following tar file: obmc-phosphor-image-evb-ast2500-20191030145446.rootfs.tar.gz When we open the tar file, all these services are in /usr/bin of the tar file. But they are not in the /usr/bin file we loaded to AST2500 evaluation board. There are no error messages. The sshd daemon and other services are just not there. Thanks
We add the following line to b uild/conf/local.conf to create *.mtd build file «require conf/machine/include/obmc-bsp-common.inc». then we used the QEMU and used *.mtd file to start the simulator. It worked fine and /usr/bin has all the phosphor services and ssh. So we try to load *.mtd file to AST2500 evaluation board from UBoot (dhcp evb.mtd ; bootm 83080000) it finds the FIT image and start loading the Kernel. But it hangs after that. This is the output from the COM Port:
ast# bootm 83080000 ## Loading kernel from FIT Image at 83080000 . Using ‘conf@aspeed-ast2500-evb.dtb’ configuration Trying ‘kernel@1’ kernel subimage Description: Linux kernel Type: Kernel Image Compression: uncompressed Data Start: 0x8308012c Data Size: 2732016 Bytes = 2.6 MiB Architecture: ARM OS: Linux Load Address: 0x80001000 Entry Point: 0x80001000 Hash algo: sha256 Hash value: Verifying Hash Integrity . sha256+ OK
## Loading ramdisk from FIT Image at 83080000 . Using ‘conf@aspeed-ast2500-evb.dtb’ configuration Trying ‘ramdisk@1’ ramdisk subimage Description: obmc-phosphor-initramfs Type: RAMDisk Image Compression: uncompressed Data Start: 0x8332208c Data Size: 1115892 Bytes = 1.1 MiB Architecture: ARM OS: Linux Load Address: unavailable Entry Point: unavailable Hash algo: sha256 Hash value: Verifying Hash Integrity . sha256+ OK
## Loading fdt from FIT Image at 83080000 . Using ‘conf@aspeed-ast2500-evb.dtb’ configuration Trying ‘fdt@aspeed-ast2500-evb.dtb’ fdt subimage Description: Flattened Device Tree blob Type: Flat Device Tree Compression: uncompressed Data Start: 0x8331b230 Data Size: 28048 Bytes = 27.4 KiB Architecture: ARM Hash algo: sha256 Hash value: Verifying Hash Integrity . sha256+ OK Booting using the fdt blob at 0x8331b230
Loading Kernel Image . OK Loading Ramdisk to bc24f000, end bc35f6f4 . OK Loading Device Tree to bc245000, end bc24ed8f . OK Starting kernel .
1 Обзор
Enhanced SerialPeripheral Interface (eSPI) is an interface using pins of SPI, but runsdifferent protocol.
It interfacesupports peripheral, virtual wire, out-of-band, and flash sharing channels.
This controllersupports all 4 channels and operates at max frequency of 66MHz.
It alsosupports up to quad-io[4 IO] mode.
• Supports 66, 50,33, 25, and 20MHz of eSPI clock frequency.
• Supports Quad-,Dual-, and Single-IO mode.
• Supports both alertmode: shared IO or dedicated[ IO].
– Maximum payloadsize is 64 bytes.
– Maximum virtualwire count is 8.
– Support 32 GPIOs.These GPIOs can be connected to physical pins or software mode.
– Maximum payloadsize is 64 bytes.
• Run-time FlashSharing Channel:
– Maximum payloadsize is 64 bytes.
– Supports bothmaster- and slave-attached flash sharing.
Registers :Base Address = 0x1E6E E000
espi_drv.c espi , espiprobe、remove, 。
dev-espi.c aspeedast2500 CPU 。 , 。
5.1
static structresource ast_espi_resource[] =
.end = AST_ESPI_BASE + SZ_256-1,
static structplatform_device ast_espi_device =
5.2 espi
static structplatform_driver ast_espi_driver =
platform_device_register platform_driver_register 。 , platform_driver_register(&ast_espi_driver) , ast_espi_driver->driver.name structplatform_device , device->name 。 。
espi_drv.c static intast_espi_probe(struct platform_device *pdev) 。 platform_driver_register(&ast_espi_driver) , device , ast_espi_driver->probe, ast_espi_probe 。 structplatform_device *pdev , & ast_espi_device。
struct resource *res;
struct ast_espi_dev
void__iomem *reg_base;
espi_dev 。 , espi , 。espi_dev : 。
5.2.1
(1) espi_dev = kzalloc(sizeof(structast_espi_dev), GFP_KERNEL);
(2) res = platform_get_resource(pdev,IORESOURCE_MEM, 0);
(3) res =request_mem_region(res->start, resource_size(res), pdev->name);
(4) espi_dev->reg_base =ioremap(res->start, resource_size(res));
(5) espi_dev->irq =platform_get_irq(pdev, 0);
(1) espi_dev 。 (2) & ast_espi_device res。 (3)(4) 0x1E6EE000 , espi_dev->reg_base。 (5) & ast_espi_device espi_dev->irq。
5.2.2
ret =request_irq(espi_dev->irq, ast_espi_isr, IRQF_SHARED, «ast-espi»,espi_dev);
5.2.3
1) ast_espi_write(espi_dev,ast_espi_read(espi_dev, AST_ESPI_CTRL) | (0x1
This bit must be set to Tx/Rx OOB Channel.
2) ast_espi_write(espi_dev,ESPI_SYS_INT_T0, AST_ESPI_SYS_INT_T0);
0 RW Interrupttype 0 of NMI Out
9 RW Interrupttype 0 of SMI Out
8 RW Interrupttype 0 of Host Reset Warn
6 RW Interrupttype 0 of OOB Reset Warn
5 RW Interrupttype 0 of PLTRSTN
4 RW Interrupttype 0 of Suspend Status
2 RW Interrupttype 0 of S5 Sleep Control
1 RW Interrupttype 0 of S4 Sleep Control
0 RW Interrupttype 0 of S3 Sleep Control
3) ast_espi_write(espi_dev,ESPI_SYS_INT_T1, AST_ESPI_SYS_INT_T1);
10 RW Interrupttype 1 of NMI Out
9 RW Interrupttype 1 of SMI Out
8 RW Interrupttype 1 of Host Reset Warn
6 RW Interrupttype 1 of OOB Reset Warn
5 RW Interrupttype 1 of PLTRSTN
4 RW Interrupttype 1 of Suspend Status
2 RW Interrupttype 1 of S5 Sleep Control
1 RW Interrupttype 1 of S4 Sleep Control
0 RW Interrupttype 1 of S3 Sleep Control
4) ast_espi_write(espi_dev,ESPI_SYS_INT_T2, AST_ESPI_SYS_INT_T2);
10 RW Interrupttype 2 of NMI Out
9 RW Interrupttype 2 of SMI Out
8 RW Interrupttype 2 of Host Reset Warn
6 RW Interrupttype 2 of OOB Reset Warn
5 RW Interrupttype 2 of PLTRSTN
4 RW Interrupttype 2 of Suspend Status
2 RW Interrupttype 2 of S5 Sleep Control
1 RW Interrupttype 2 of S4 Sleep Control
0 RW Interrupttype 2 of S3 Sleep Control
5) ast_espi_write(espi_dev,ESPI_SYS_INT, AST_ESPI_SYS_IER);
10 RW EnableInterrupt of NMI Out
9 RW EnableInterrupt of SMI Out
8 RW Enable Interrupt of Host Reset Warn
6 RW Enable Interrupt of OOB Reset Warn
5 RW Enable Interrupt of PLTRSTN
4 RW EnableInterrupt of Suspend Status
2 RW EnableInterrupt of S5 Sleep Control
1 RW EnableInterrupt of S4 Sleep Control
0 RW EnableInterrupt of S3 Sleep Control
6) ast_espi_write(espi_dev,ESPI_SUS_WARN, AST_ESPI_SYS1_INT_T0);
16 RW Interrupttype 0 of Host C10
15: 8 RWInterrupt type 0 of PCH Generic
5 RW Interrupttype 0 of Wireless Lan Sleep Control
4 RW Interrupttype 0 of Lan Sleep Control
3 RW Interrupttype 0 of A# Sleep Control
1 RW Interrupttype 0 of Suspend PowerDown Ack
0 RW Interrupt type 0 of Suspend Warn
System Event 1 fromMaster 。
7) ast_espi_write(espi_dev,0x00000000, AST_ESPI_SYS1_INT_T1);
16 RW Interrupttype 1 of Host C10
15: 8 RWInterrupt type 1 of PCH Generic
5 RW Interrupttype 1 of Wireless Lan Sleep Control
4 RW Interrupttype 1 of Lan Sleep Control
3 RW Interrupttype 1 of A# Sleep Control
1 RW Interrupttype 1 of Suspend PowerDown Ack
0 RW Interrupttype 1 of Suspend Warn
System Event 1 fromMaster 。
8) ast_espi_write(espi_dev,0x00000000, AST_ESPI_SYS1_INT_T2);
16 RW Interrupttype 2 of Host C10
15: 8 RWInterrupt type 2 of PCH Generic
5 RW Interrupttype 2 of Wireless Lan Sleep Control
4 RW Interrupttype 2 of Lan Sleep Control
3 RW Interrupttype 2 of A# Sleep Control
1 RW Interrupttype 2 of Suspend PowerDown Ack
0 RW Interrupttype 2 of Suspend Warn
System Event 1 fromMaster 。
9) ast_espi_write(espi_dev,ESPI_SUS_WARN, AST_ESPI_SYS1_IER);
3 RW EnableInterrput of A# Sleep Control
1 RW EnableInterrput of Suspend PowerDown Ack
0 RW Enable Interrput of Suspend Warn
System Event 1 from Master 。
10) ast_espi_write(espi_dev,0xFFFFFFFF, AST_ESPI_IER);
31 RW Enable of Hardware Reset Event
21 RW Enable of Flash Channel Tx Error
20 RW Enable of OOB Channel Tx Error
19 RW Enable of Flash Channel Tx Abort
18 RW Enable of OOB Channel Tx Abort
17 RW Enable of Peripheral Channel Non-Posted Tx Abort
16 RW Enable of Peripheral Channel Posted Tx Abort
15 RW Enable of Flash Channel Rx Abort
14 RW Enable of OOB Channel Rx Abort
13 RW Enable of Peripheral Channel Non-Posted Rx Abort
12 RW Enable of Peripheral Channel Posted Rx Abort
11 RW Enable of Peripheral Channel Non-Posted Tx Error
10 RW Enable of Peripheral Channel Posted Tx Error
9 RW Enable of Virtual Wire GPIO Event
8 RW Enable of Virtual Wire System Event
7 RW Enable of Flash Channel Tx Complete
6 RW Enable of Flash Channel Rx Complete
5 RW Enable of OOB Channel Tx Complete
4 RW Enable of OOB Channel Rx Complete
3 RW Enable of Peripheral Channel Non-Posted Tx Complete
1 RW Enable of Peripheral Channel Posted Tx Complete
0 RW Enable of Peripheral Channel Posted Rx Complete
5.2.4
Suspend Ack Slave BootDone 。
espi_dev pdev。pdev & ast_espi_device。espi , , ( )。
5.3 ast_espi_isr
5.3.1 ESPI_ISR_HW_RESET(bit31)
31 RWHardware Reset Event
Setwhen Hardware Reset de-asserted.
5.3.2 ESPI_ISR_VIRTW_SYS(bit8)
8 RWVirtual Wire System Event
Setwhen System Event from Master is trigged.
5.3.3 ESPI_ISR_VIRTW_SYS1(bit22)
22 RWVirtual Wire System Event 1
Setwhen System Event 1 from Master is trigged.
ASPEED’s AST2500 Display To Be Supported By Linux 4.11’s DRM
ASPEED’s AST2500 Display To Be Supported By Linux 4.11’s DRM
Phoronix: ASPEED’s AST2500 Display To Be Supported By Linux 4.11’s DRM
David Airlie sent in another pull request of DRM material for Linux 4.11, which follows last week’s main DRM feature update for Linux 4.11.
Phoronix, Linux Hardware Reviews, Linux hardware benchmarks, Linux server benchmarks, Linux benchmarking, Desktop Linux, Linux performance, Open Source graphics, Linux How To, Ubuntu benchmarks, Ubuntu hardware, Phoronix Test Suite
So on which side of the display is this driver living? Don’t forget that we are talking host-cpu vs motherboard controller cpu, both running linux, the latter emulating a VGA card to the host.
Comment
By looking at the commit descriptions here, it seems a driver for the Linux running on the x86 processor(s), not for the BMC itself.
Although it seems that one of the commits allows the host system (Linux on x86 processor) to fully initialize the GPU on its own, in case the BMC firmware or the vBIOS didn’t initialize it.
This is used when the BMC isn’t running any code and thus has to be initialized by the host. The code originates from Aspeed (Y.C. Chen) and has been cleaned up for coding style purposes by Be.
Same for older gens, there is a commit that fixes the initialization of the GPU in case the BMC firmware didn’t initialize it https://github.com/ozbenh/linux-ast/. 3bd4d11450ee06
I’m a bit puzzled about how in the heck this thing works. It seems the GPU is actually shared and the host system can actually access it to pretty low level if it can initialize it from a cold state.
Comment
It has video-over-ip, maybe that’s why you can initialize it remotely. Sort of like wake on lan? Anyway, just guessing.
Comment
It has video-over-ip, maybe that’s why you can initialize it remotely. Sort of like wake on lan? Anyway, just guessing.
The code in those patches isn’t doing anything remotely. It’s acting on a local GPU, as if both host CPU and BMC CPU have same access to that GPU.
Comment
I’m a bit puzzled about how in the heck this thing works. It seems the GPU is actually shared and the host system can actually access it to pretty low level if it can initialize it from a cold state.
Afaik, the host thing is legit, and the BMC just can read the config and the VRAM is just shared memory. I really love those BMC’s, especially when I have ssh root access to them because then I can put my own serial console clients (picocom) on them instead of the crap IPMI implementations.
Anyway: having reviewed the binaries of the «remote KVM» (10 years ago 😉 )it is just a mangled version of VNC. It would have been nice if the BMC side had a H.264 encoder so it could do some more interesting stuff.
These days the BMC’s are unfortunately locked down and license riddled.