STRUCT IP30_HEART_REGS(9)
π NAME π
okay so welcome to the struct ip30_heart_regs(9) page from the Kernel API Manual, bestie β¨ β this is literally the struct that maps IP30 HEART registers π
β¨ SYNOPSIS β¨
no cap, hereβs the whole struct exactly as it is, every field in its little lane π«Ά
struct ip30_heart_regs {
u64 mode;
u64 sdram_mode;
u64 mem_refresh;
u64 mem_req_arb;
union {
u64 q[HEART_MEMORY_BANKS];
u32 l[HEART_MEMORY_BANKS * 2];
} mem_cfg;
u64 fc_mode;
u64 fc_timer_limit;
u64 fc_addr[2];
u64 fc_credit_cnt[2];
u64 fc_timer[2];
u64 status;
u64 bus_err_addr;
u64 bus_err_misc;
u64 mem_err_addr;
u64 mem_err_data;
u64 piur_acc_err;
u64 mlan_clock_div;
u64 mlan_ctrl;
u64 __pad0[0x01e8];
u64 undefined;
u64 __pad1[0x1dff];
u64 imr[HEART_MAX_CPUS];
u64 set_isr;
u64 clear_isr;
u64 isr;
u64 imsr;
u64 cause;
u64 __pad2[0x1ff7];
u64 count;
u64 __pad3[0x1fff];
u64 compare;
u64 __pad4[0x1fff];
u64 trigger;
u64 __pad5[0x1fff];
u64 cpuid;
u64 __pad6[0x1fff];
u64 sync;
};
π«Ά Members π«Ά
okay bestie, every single member, in order, with the lore π:
modeβ maps toHEART_MODE; Purpose Unknown, but machine reset gets called from here πsdram_modeβ maps toHEART_SDRAM_MODE; purpose unknown π¦mem_refreshβ maps toHEART_MEM_REF; purpose unknown πΈmem_req_arbβ maps toHEART_MEM_REQ_ARB; purpose unknown πmem_cfg.qβ union for 64bit access toHEART_MEMCFGβ4x64bit registers πmem_cfg.lβ union for 32bit access toHEART_MEMCFGβ8x32bit registers πfc_modeβ maps toHEART_FC_MODE; Purpose Unknown, possibly for GFX flow control πfc_timer_limitβ maps toHEART_FC_TIMER_LIMIT; purpose unknown β³fc_addrβ maps toHEART_FC0_ADDR,HEART_FC1_ADDR; purpose unknown πfc_credit_cntβ maps toHEART_FC0_CR_CNT,HEART_FC1_CR_CNT; purpose unknown πͺfc_timerβ maps toHEART_FC0_TIMER,HEART_FC1_TIMER; purpose unknown βstatusβ maps toHEART_STATUS; HEART status information πbus_err_addrβ maps toHEART_BERR_ADDR; likely contains addr of recentSIGBUSπbus_err_miscβ maps toHEART_BERR_MISC; purpose unknown πmem_err_addrβ maps toHEART_MEMERR_ADDR; likely contains addr of recent mem err πmem_err_dataβ maps toHEART_MEMERR_DATA; purpose unknown πpiur_acc_errβ maps toHEART_PIUR_ACC_ERR; likely for access err to HEART regs π¨mlan_clock_divβ maps toHEART_MLAN_CLK_DIV; MicroLAN clock divider π°οΈmlan_ctrlβ maps toHEART_MLAN_CTL; MicroLAN control ποΈ__pad0β0x0f40bytes of padding -> next HEART register0x01000π§undefinedβ Undefined/diag register, write to it triggersPIUR_ACC_ERRβ οΈ__pad1β0xeff8bytes of padding -> next HEART register0x10000π§imrβHEART_IMR0toHEART_IMR3β per-cpu interrupt mask register π‘οΈset_isrβ maps toHEART_SET_ISR; set interrupt status register βclear_isrβ maps toHEART_CLR_ISR; clear interrupt status register π§Ήisrβ maps toHEART_ISR; interrupt status register (read-only) πimsrβ maps toHEART_IMSR; purpose unknown π€·ββοΈcauseβ maps toHEART_CAUSE; HEART cause information π__pad2β0xffb8bytes of padding -> next HEART register0x20000π§countβ maps toHEART_COUNT;52-bitcounter π’__pad3β0xfff8bytes of padding -> next HEART register0x30000π§compareβ maps toHEART_COMPARE;24-bitcompare βοΈ__pad4β0xfff8bytes of padding -> next HEART register0x40000π§triggerβ maps toHEART_TRIGGER; purpose unknown π―__pad5β0xfff8bytes of padding -> next HEART register0x50000π§cpuidβ maps toHEART_PRID; contains CPU ID of CPU currently accessing HEART πͺͺ__pad6β0xfff8bytes of padding -> next HEART register0x60000π§syncβ maps toHEART_SYNC; purpose unknown π
πΈ DESCRIPTION πΈ
HEART is the main system controller ASIC for the IP30 system. It incorporates a memory controller, interrupt status/cause/set/clear management, basic timer with count/compare, and other functionality. For Linux, not all of HEARTβs functions are fully understood π
Implementation note: All HEART registers are 64bits-wide, but the mem_cfg register only reports correct values if queried in 32bits. Hence the need for a union. Even though mem_cfg.l has 8 array slots, we only ever query up to 4 of those. IP30 has 8 DIMM slots arranged into 4 banks, w/ 2 DIMMs per bank. Each 32bit read accesses one of these banks. Perhaps HEART was designed to address up to 8 banks (16 DIMMs)? We may never know π€π
π SEE ALSO π
- Kernel file
./arch/mips/include/asm/sgi/heart.hπβ¨
mwah π this page lives in ./arch/mips/include/asm/sgi, dated October 2026, and itβs literally the struct ip30_heart_regs(9) manual. byeee bestie π«Άπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms