blob: a905ca1ae54bc19eb02c666260b86ecafc76b8cc [file]
// Licensed under the Apache-2.0 license
// AST1060-EVB MCTP Echo Server + Client Configuration
// ARM Cortex-M4 @ 200 MHz
// 768KB SRAM (640KB usable), executes from RAM
//
// Memory Layout (PMSAv7-friendly, power-of-2 aligned regions):
// FIXED: Kernel RAM now comes BEFORE application RAM to avoid boot crashes
// 0x00000000 - 0x00000800: Vector table + kernel annotations (2048 bytes)
// 0x00000800 - 0x00020000: Kernel flash (~126KB)
// 0x00020000 - 0x00040000: i2c_server flash (128KB)
// 0x00040000 - 0x00060000: mctp_server flash (128KB)
// 0x00060000 - 0x00080000: Kernel RAM (128KB)
// 0x00080000 - 0x00090000: i2c_server RAM (64KB)
// 0x00090000 - 0x000A0000: mctp_server RAM (64KB)
//
// Total: 0xA0000 = 640KB (fits within the 640KB usable window of the AST1060's 768KB SRAM).
{
arch: {
type: "armv7m",
vector_table_start_address: 0x00000000,
vector_table_size_bytes: 2048, // 0x800 (vector table + process annotations for all 3 apps)
},
kernel: {
flash_start_address: 0x00000800, // After vector table + annotations
flash_size_bytes: 129024, // 0x1F800: ends at exactly 0x20000 (128KB boundary)
ram_start_address: 0x00060000, // Kernel RAM comes FIRST, before all app RAM
ram_size_bytes: 131072, // 128KB
},
apps: [
// ──── I2C Server ────
// Owns the AST1060 I2C controllers.
// The MCTP server uses I2C as its transport.
{
name: "i2c_server",
flash_size_bytes: 131072, // 128KB for server code
ram_size_bytes: 65536, // 64KB RAM (register maps + buffers)
processes: [
{
name: "i2c server process",
objects: [
{
name: "I2C",
type: "channel_handler", // Server side of client→server channel
},
//{
// // AST1060 I2C2 combined master+slave interrupt (IRQ 112).
// name: "I2C2_IRQ",
// type: "interrupt",
// irqs: [
// {
// name: "i2c2",
// number: 112,
// },
// ],
//},
{
name: "WG",
type: "wait_group",
},
],
threads: [
{
name: "i2c server thread",
stack_size_bytes: 4096, // 4KB stack
},
],
memory_mappings: [
{
// AST1060 I2C peripheral block: I2cglobal through I2cFilter
// Base: 0x7e7b0000, covers all 14 controllers + buffers + filter
name: "i2c_regs",
type: "device",
start_address: 0x7e7b0000,
size_bytes: 0x4000,
},
{
// SCU register block — scu310 at +0x310 is read by
// ClockConfig::from_hardware() to derive APB clock frequency.
name: "scu",
type: "device",
start_address: 0x7e6e2000,
size_bytes: 0x1000,
},
],
},
],
},
// ──── MCTP Server ────
// Runs the MCTP stack + in-process SPDM requester. Same footprint
// as the responder variant; only the app name differs.
{
name: "mctp_server_requester",
flash_size_bytes: 65536, // 64KB for MCTP server code
ram_size_bytes: 65536, // 64KB RAM (Router state + SPDM context + buffers)
processes: [
{
name: "mctp server process",
objects: [
{
name: "MCTP",
type: "channel_handler", // Server side: echo client → MCTP server
},
{
name: "I2C",
type: "channel_initiator", // Client side: MCTP server → I2C server
handler_process: "i2c server process",
handler_object_name: "I2C",
},
{
name: "WG",
type: "wait_group",
},
],
threads: [
{
name: "mctp server thread",
stack_size_bytes: 32768, // 8KB stack (Router + fragmentation buffers)
},
],
},
],
},
],
}