Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b0f3f02
Model Mt. Jade class physical facts from OCP and Wiwynn SV328R.
Sep 17, 2026
8d500de
Separate Mt. Jade identity from one specimen's NIC and PSU.
Sep 17, 2026
1ac6fe4
Give shared PSU sensors measure carriers and a real ethernet consumer.
Sep 17, 2026
aba1d1c
Share OnboardNetworkController and stop encoding fans and BMC media a…
Sep 17, 2026
cfb1dea
Use one uncited-inlet standing and stop classifying the second BMC LA…
Sep 17, 2026
1bc568e
Do not widen BaseboardModel for Mt. Jade.
Sep 17, 2026
f15fe7d
Distinguish named vs unstated onboard NIC controllers.
Sep 17, 2026
3d77b4a
Climb Jade PSU count to Nat and type the SV328R OCP slot.
Sep 17, 2026
39f1ea9
Derive the Jade BMC PHY name from the reference-part row.
Sep 17, 2026
86acd29
Stop minting a second PcieCem/OcpNic3 on intake ethernet.
Sep 17, 2026
28906a9
Consume BmcFirmwareFamily and DimmBuffering instead of nicknames.
Sep 17, 2026
4ab90b9
Admit the six TargetChanged bindings this hoist produced.
Sep 18, 2026
c39b41a
Merge remote-tracking branch 'origin/main' into session/proud-owl-749…
Sep 18, 2026
e6b116e
Delete consumed namespace-wave admissions on this roster touch.
Sep 18, 2026
eceb14c
Stop calling dual-AC a redundant path, and stop calling a PHY a contr…
Sep 18, 2026
b855647
Restore the CRPS witness declaration the fan dual_rotor edit dropped.
Sep 18, 2026
b3c9c2e
Refuse unit identity from unobserved port prose, and decompose 1+1 in…
Sep 18, 2026
f5887a4
Bind Collins BMC ports to the unit key, and count SV328R cores as Phy…
Sep 18, 2026
b1fd2b6
Delete stale PHY/PSU namespace-wave admissions that never matched the…
Sep 18, 2026
1cbb0bb
Merge origin/main into session/proud-owl-749-mtjade-physical.
Sep 18, 2026
44a23cd
Refuse unobserved Ethernet functions as a third standing, not a Bool.
Sep 18, 2026
483096b
Fold Ethernet function identity onto coproduct ==, and drop unused SV…
Sep 18, 2026
8f4a324
Cite Ampere vendor, Altra family authority, and AArch64 on SV328R ins…
Sep 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import extdeps.external_authority { ExternalAuthority, ExternalModelScope, Exter
import extdeps.ampere.mt_collins_1u_product_brief.subject {
MtCollins1UPublicProductBrief, mt_collins_1u_public_product_brief, mt_collins_1u_brief_authority,
}
import extdeps.standards.nic_attachment { NamedOnboardController, NamedOnboardPhy, OnboardPhyUnstated, OnboardControllerUnstated, OnboardNetworkController }

data extdeps_external_authority_anchor: ExternalAuthority = mt_collins_1u_brief_authority

Expand All @@ -38,22 +39,21 @@ data mt_collins_1u_specifications_subject: MtCollins1UPublicProductBrief = mt_co
// OCP_OPT1_Temp and OCP_OPT2_Temp were read on 2026-09-06 - sensors that name a slot and an
// optical zone, which is evidence the chassis is wired for one, not evidence a card is fitted.

type OnboardNetworkController {
controller: NonEmptyStr
port_count: Nat
per_port_bandwidth: Bandwidth
purpose: NonEmptyStr
}

data mt_collins_1u_onboard_data_network: OnboardNetworkController = OnboardNetworkController {
controller: "Intel i350",
controller: NamedOnboardController { part: "Intel i350" },
phy: OnboardPhyUnstated {
read_obligation: "The Mt. Collins 1U brief names Intel i350 as the host data controller. It does not name a PHY OPN. Discriminator: a board silkscreen, FRU, or ethtool/lspci census of a unit of this class.",
},
port_count: 2,
per_port_bandwidth: bandwidth(count: 1000000000),
purpose: "host data networking",
}

data mt_collins_1u_bmc_manageability_network: OnboardNetworkController = OnboardNetworkController {
controller: "Realtek RTL8211E",
controller: OnboardControllerUnstated {
read_obligation: "The Mt. Collins 1U brief names Realtek RTL8211E on the BMC manageability port. That part is a PHY. The MAC/controller OPN is unstated. Discriminator: a board silkscreen, FRU, or lspci census of a unit of this class.",
},
phy: NamedOnboardPhy { part: "Realtek RTL8211E" },
port_count: 1,
per_port_bandwidth: bandwidth(count: 1000000000),
purpose: "BMC manageability port",
Expand Down
116 changes: 108 additions & 8 deletions dag/extdeps/ocp/mt_jade/platform.dag
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
module extdeps.ocp.mt_jade.platform

import std.types { String, NonEmptyStr, List }
import std.types { String, NonEmptyStr, List, Bool }
import std.integer { Int }
import std.nat { Nat }
import std.measure {
Bandwidth,
Hertz,
MegatransfersPerSecond,
Microsecond,
Micrometer,
Millimeter,
RackUnit,
bandwidth,
hertz,
megatransfers_per_second,
microsecond,
micrometer,
micrometer_count,
millimeter,
rack_unit,
}
import extdeps.external_authority { ExternalAuthority, ExternalModelScope }
import extdeps.standards.nic_attachment { NamedOnboardPhy, OnboardControllerUnstated, OnboardNetworkController }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, CitedFigureStanding, TranscribedUncited }
import extdeps.bmc.aspeed_ast2500 { AspeedAst2500CatalogRow, aspeed_ast2500_catalog }
import extdeps.bmc.endpoint { BmcFirmwareFamily, AmiMegaRac, OpenBmc }
import extdeps.ocp.mt_jade.subject {
mt_jade_subject_authority_anchor,
mt_jade_model_scope,
Expand All @@ -24,6 +33,10 @@ import extdeps.ocp.mt_jade.subject {

data extdeps_external_authority_anchor: ExternalAuthority = mt_jade_subject_authority_anchor

// This module does not widen extdeps.boards.types BaseboardModel. Mt. Jade identity lives here
// and in extdeps.ocp.mt_jade.subject; Wiwynn SV328R is a separate product. Adding a board must
// not edit a generic product enum (same standing as extdeps.ocp.mt_mitchell.platform).

data platform_subject_edge_note: String = "PLATFORM FACTS MUST JOIN THE ENTITY THEY DESCRIBE IN THE GRAPH, NOT ONLY THE SHARED OCP LOCATOR. extdeps.ocp.mt_jade.subject owns mt_jade_reference_platform; this row is the typed subject edge that binds every mechanical, sequencing, CPLD, clock and reference-part fact in this module to that declaration — the same pattern as extdeps.sec.issuer.gitlab_facts gitlab_facts_subject."

data mt_jade_platform_subject: MtJadeReferencePlatform = mt_jade_reference_platform
Expand Down Expand Up @@ -306,6 +319,13 @@ type MtJadeReferencePartRow {
// retyping the part number as the only source of chip identity.
data mt_jade_bmc_chip_catalog: AspeedAst2500CatalogRow = aspeed_ast2500_catalog

data mt_jade_bmc_ethernet_phy: MtJadeReferencePartRow = MtJadeReferencePartRow {
ordering_part_number: "RTL8211E",
vendor_label: "Realtek",
role: BmcEthernetPhy,
authority: mt_jade_subject_authority_anchor,
}

data mt_jade_reference_parts: List<MtJadeReferencePartRow> = [
MtJadeReferencePartRow {
ordering_part_number: "AST2500",
Expand All @@ -331,12 +351,7 @@ data mt_jade_reference_parts: List<MtJadeReferencePartRow> = [
role: BmcSpiFlash,
authority: mt_jade_subject_authority_anchor,
},
MtJadeReferencePartRow {
ordering_part_number: "RTL8211E",
vendor_label: "Realtek",
role: BmcEthernetPhy,
authority: mt_jade_subject_authority_anchor,
},
mt_jade_bmc_ethernet_phy,
MtJadeReferencePartRow {
ordering_part_number: "9FGV1006B",
vendor_label: "Renesas (IDT)",
Expand Down Expand Up @@ -373,4 +388,89 @@ fn reference_part_roles_include(rows: List<MtJadeReferencePartRow>, wanted: Refe
fold(rows, init: false, f: fn(acc, r) { acc || r.role == wanted })
}

// FEATURE LIST AND SECTION 7.2: FAN CONNECTOR POPULATIONS ARE CHASSIS-HEIGHT SPECIFIC. The
// motherboard carries both connector sets; a 2U chassis uses six 6056 dual-rotor fans and a 1U
// chassis uses eight 4056 dual-rotor fans. PWM/TACH in Table 9 restates the same split.
type MtJadeFanConnectorPopulation {
chassis_height: RackUnit
connector_count: Nat
frame_width: Millimeter
frame_thickness: Millimeter
dual_rotor: Bool
}

data mt_jade_fan_connectors_2u: MtJadeFanConnectorPopulation = MtJadeFanConnectorPopulation {
chassis_height: rack_unit(count: 2),
connector_count: 6,
frame_width: millimeter(count: 60),
frame_thickness: millimeter(count: 56),
dual_rotor: true,
}

data mt_jade_fan_connectors_1u: MtJadeFanConnectorPopulation = MtJadeFanConnectorPopulation {
chassis_height: rack_unit(count: 1),
connector_count: 8,
frame_width: millimeter(count: 40),
frame_thickness: millimeter(count: 56),
dual_rotor: true,
}

// FEATURE LIST: DUAL CRPS, 1+1, HOT-PLUG. "1+1" is required_count + spare_count, not a label.
// The specification names the PSU mechanical class and does not name IEC 60320 sheet, AC
// voltage range, or a wattage rating of any fitted module. Inventing C14 vs C20 from "CRPS"
// would be a fabricated inlet.
type MtJadeCrpsPower {
psu_count: Nat
required_count: Nat
spare_count: Nat
hot_plug: Bool
}

data mt_jade_crps_power: MtJadeCrpsPower = MtJadeCrpsPower {
psu_count: 2,
required_count: 1,
spare_count: 1,
hot_plug: true,
}

data mt_jade_crps_ac_inlet: CitedFigureStanding = TranscribedUncited {
read_obligation: "OCP Mt. Jade Rev 1.0 names two CRPS connectors and 1+1 hot-plug redundancy. It does not name an IEC 60320 inlet (C14 vs C20), a 120 V vs 200-240 V rating, or the cord the seller ships. Discriminator: a photograph or FRU of the fitted PSU face, or a PSU ordering part whose own datasheet names the inlet and AC range.",
}

// FEATURE LIST: "MGMT 1x 1GbE from BMC to Rear RJ45 Connector". Section 7.6.1 names BMC ETH at
// 10/100/1000 and RTL8211E as the PHY (already a reference-part row). Bottom-side I/O is common
// between 1U and 2U: BMC UART/ETH/VGA sit with the power-supply end of the board.
type MtJadeBmcManagementNetwork {
network: OnboardNetworkController
location_label: NonEmptyStr
}

data mt_jade_bmc_management_network: MtJadeBmcManagementNetwork = MtJadeBmcManagementNetwork {
network: OnboardNetworkController {
controller: OnboardControllerUnstated {
read_obligation: "OCP Mt. Jade Rev 1.0 names RTL8211E as the BMC Ethernet PHY and AST2500 as the BMC. It does not name a MAC/controller OPN for the manageability port. Discriminator: a board silkscreen, FRU, or lspci census of a unit of this class.",
},
phy: NamedOnboardPhy { part: mt_jade_bmc_ethernet_phy.ordering_part_number },
port_count: 1,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking — this joins a PHY into a controller field. mt_jade_bmc_ethernet_phy is explicitly a MtJadeReferencePartRow whose role is BmcEthernetPhy; assigning its OPN to OnboardControllerIdentity asserts that RTL8211E is the controller. Keep the controller unstated unless the cited source names the MAC/controller, or split the shared carrier into controller/MAC and PHY identities and bind AST2500/RTL8211E to their actual roles.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed: mt_jade_bmc_management_network.controller is OnboardControllerUnstated; RTL8211E is NamedOnboardPhy only. AST2500 stays on the BMC chip catalog row.

per_port_bandwidth: bandwidth(count: 1000000000),
purpose: "BMC manageability",
},
location_label: "rear RJ45, power-supply / bottom-side I/O",
}

// FEATURE LIST "BMC AMI MegaRAC, OpenBMC" IS A DISJUNCTION, NOT A DEFAULT. The specification
// names both stacks. A unit's family is a workflow observation (gunbc.machine_intake_access),
// never this row. megaRAC_* folds may run only after AmiMegaRac is observed.
data mt_jade_cited_bmc_firmware_options: List<BmcFirmwareFamily> = [
AmiMegaRac,
OpenBmc,
]

fn mt_jade_cited_bmc_firmware_options_include(
options: List<BmcFirmwareFamily>,
wanted: BmcFirmwareFamily,
) -> Bool {
fold(options, init: false, f: fn(acc, o) { acc || o == wanted })
}

data extdeps_model_scope: ExternalModelScope = mt_jade_model_scope
18 changes: 18 additions & 0 deletions dag/extdeps/standards/nic_attachment.dag
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
module extdeps.standards.nic_attachment

import std.types { NonEmptyStr }
import std.nat { Nat }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import std.measure { Bandwidth }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }
import extdeps.standards.ocp_nic_2_0 { OcpNic2PhysicalVariant }
Expand All @@ -23,6 +25,22 @@ type NicAttachmentClass
| PcieCem
| VendorDaughterCard { form_authority: ExternalAuthority, form_name: NonEmptyStr }

type OnboardControllerIdentity
= NamedOnboardController { part: NonEmptyStr }
| OnboardControllerUnstated { read_obligation: NonEmptyStr }

type OnboardPhyIdentity
= NamedOnboardPhy { part: NonEmptyStr }
| OnboardPhyUnstated { read_obligation: NonEmptyStr }

type OnboardNetworkController {
controller: OnboardControllerIdentity
phy: OnboardPhyIdentity
port_count: Nat
per_port_bandwidth: Bandwidth
purpose: NonEmptyStr
}

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef { declaration: DeclarationRef {
module_path: "extdeps.standards.nic_attachment", decl_name: "NicAttachmentClass", field: WholeDeclaration,
Expand Down
29 changes: 29 additions & 0 deletions dag/extdeps/vendor/wiwynn.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module extdeps.vendor.wiwynn

import extdeps.vendor { Vendor }
import extdeps.hardware { Hardware }

import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "www.wiwynn.com"
}
}

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.vendor.wiwynn",
decl_name: "wiwynn_vendor",
field: WholeDeclaration
}
},
first_citation: extdeps_external_authority_anchor,
further_citations: []
}

data wiwynn_vendor: Vendor<Hardware> = Vendor { legal_name: "Wiwynn Corporation" }
Loading
Loading