162306a36Sopenharmony_ci// SPDX-License-Identifier: ISC 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2010 Broadcom Corporation 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef _SBCHIPC_H 762306a36Sopenharmony_ci#define _SBCHIPC_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "defs.h" /* for PAD macro */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define CHIPCREGOFFS(field) offsetof(struct chipcregs, field) 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct chipcregs { 1462306a36Sopenharmony_ci u32 chipid; /* 0x0 */ 1562306a36Sopenharmony_ci u32 capabilities; 1662306a36Sopenharmony_ci u32 corecontrol; /* corerev >= 1 */ 1762306a36Sopenharmony_ci u32 bist; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci /* OTP */ 2062306a36Sopenharmony_ci u32 otpstatus; /* 0x10, corerev >= 10 */ 2162306a36Sopenharmony_ci u32 otpcontrol; 2262306a36Sopenharmony_ci u32 otpprog; 2362306a36Sopenharmony_ci u32 otplayout; /* corerev >= 23 */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci /* Interrupt control */ 2662306a36Sopenharmony_ci u32 intstatus; /* 0x20 */ 2762306a36Sopenharmony_ci u32 intmask; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* Chip specific regs */ 3062306a36Sopenharmony_ci u32 chipcontrol; /* 0x28, rev >= 11 */ 3162306a36Sopenharmony_ci u32 chipstatus; /* 0x2c, rev >= 11 */ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci /* Jtag Master */ 3462306a36Sopenharmony_ci u32 jtagcmd; /* 0x30, rev >= 10 */ 3562306a36Sopenharmony_ci u32 jtagir; 3662306a36Sopenharmony_ci u32 jtagdr; 3762306a36Sopenharmony_ci u32 jtagctrl; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci /* serial flash interface registers */ 4062306a36Sopenharmony_ci u32 flashcontrol; /* 0x40 */ 4162306a36Sopenharmony_ci u32 flashaddress; 4262306a36Sopenharmony_ci u32 flashdata; 4362306a36Sopenharmony_ci u32 PAD[1]; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci /* Silicon backplane configuration broadcast control */ 4662306a36Sopenharmony_ci u32 broadcastaddress; /* 0x50 */ 4762306a36Sopenharmony_ci u32 broadcastdata; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci /* gpio - cleared only by power-on-reset */ 5062306a36Sopenharmony_ci u32 gpiopullup; /* 0x58, corerev >= 20 */ 5162306a36Sopenharmony_ci u32 gpiopulldown; /* 0x5c, corerev >= 20 */ 5262306a36Sopenharmony_ci u32 gpioin; /* 0x60 */ 5362306a36Sopenharmony_ci u32 gpioout; /* 0x64 */ 5462306a36Sopenharmony_ci u32 gpioouten; /* 0x68 */ 5562306a36Sopenharmony_ci u32 gpiocontrol; /* 0x6C */ 5662306a36Sopenharmony_ci u32 gpiointpolarity; /* 0x70 */ 5762306a36Sopenharmony_ci u32 gpiointmask; /* 0x74 */ 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci /* GPIO events corerev >= 11 */ 6062306a36Sopenharmony_ci u32 gpioevent; 6162306a36Sopenharmony_ci u32 gpioeventintmask; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci /* Watchdog timer */ 6462306a36Sopenharmony_ci u32 watchdog; /* 0x80 */ 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci /* GPIO events corerev >= 11 */ 6762306a36Sopenharmony_ci u32 gpioeventintpolarity; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci /* GPIO based LED powersave registers corerev >= 16 */ 7062306a36Sopenharmony_ci u32 gpiotimerval; /* 0x88 */ 7162306a36Sopenharmony_ci u32 gpiotimeroutmask; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci /* clock control */ 7462306a36Sopenharmony_ci u32 clockcontrol_n; /* 0x90 */ 7562306a36Sopenharmony_ci u32 clockcontrol_sb; /* aka m0 */ 7662306a36Sopenharmony_ci u32 clockcontrol_pci; /* aka m1 */ 7762306a36Sopenharmony_ci u32 clockcontrol_m2; /* mii/uart/mipsref */ 7862306a36Sopenharmony_ci u32 clockcontrol_m3; /* cpu */ 7962306a36Sopenharmony_ci u32 clkdiv; /* corerev >= 3 */ 8062306a36Sopenharmony_ci u32 gpiodebugsel; /* corerev >= 28 */ 8162306a36Sopenharmony_ci u32 capabilities_ext; /* 0xac */ 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* pll delay registers (corerev >= 4) */ 8462306a36Sopenharmony_ci u32 pll_on_delay; /* 0xb0 */ 8562306a36Sopenharmony_ci u32 fref_sel_delay; 8662306a36Sopenharmony_ci u32 slow_clk_ctl; /* 5 < corerev < 10 */ 8762306a36Sopenharmony_ci u32 PAD; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci /* Instaclock registers (corerev >= 10) */ 9062306a36Sopenharmony_ci u32 system_clk_ctl; /* 0xc0 */ 9162306a36Sopenharmony_ci u32 clkstatestretch; 9262306a36Sopenharmony_ci u32 PAD[2]; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci /* Indirect backplane access (corerev >= 22) */ 9562306a36Sopenharmony_ci u32 bp_addrlow; /* 0xd0 */ 9662306a36Sopenharmony_ci u32 bp_addrhigh; 9762306a36Sopenharmony_ci u32 bp_data; 9862306a36Sopenharmony_ci u32 PAD; 9962306a36Sopenharmony_ci u32 bp_indaccess; 10062306a36Sopenharmony_ci u32 PAD[3]; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci /* More clock dividers (corerev >= 32) */ 10362306a36Sopenharmony_ci u32 clkdiv2; 10462306a36Sopenharmony_ci u32 PAD[2]; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci /* In AI chips, pointer to erom */ 10762306a36Sopenharmony_ci u32 eromptr; /* 0xfc */ 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci /* ExtBus control registers (corerev >= 3) */ 11062306a36Sopenharmony_ci u32 pcmcia_config; /* 0x100 */ 11162306a36Sopenharmony_ci u32 pcmcia_memwait; 11262306a36Sopenharmony_ci u32 pcmcia_attrwait; 11362306a36Sopenharmony_ci u32 pcmcia_iowait; 11462306a36Sopenharmony_ci u32 ide_config; 11562306a36Sopenharmony_ci u32 ide_memwait; 11662306a36Sopenharmony_ci u32 ide_attrwait; 11762306a36Sopenharmony_ci u32 ide_iowait; 11862306a36Sopenharmony_ci u32 prog_config; 11962306a36Sopenharmony_ci u32 prog_waitcount; 12062306a36Sopenharmony_ci u32 flash_config; 12162306a36Sopenharmony_ci u32 flash_waitcount; 12262306a36Sopenharmony_ci u32 SECI_config; /* 0x130 SECI configuration */ 12362306a36Sopenharmony_ci u32 PAD[3]; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci /* Enhanced Coexistence Interface (ECI) registers (corerev >= 21) */ 12662306a36Sopenharmony_ci u32 eci_output; /* 0x140 */ 12762306a36Sopenharmony_ci u32 eci_control; 12862306a36Sopenharmony_ci u32 eci_inputlo; 12962306a36Sopenharmony_ci u32 eci_inputmi; 13062306a36Sopenharmony_ci u32 eci_inputhi; 13162306a36Sopenharmony_ci u32 eci_inputintpolaritylo; 13262306a36Sopenharmony_ci u32 eci_inputintpolaritymi; 13362306a36Sopenharmony_ci u32 eci_inputintpolarityhi; 13462306a36Sopenharmony_ci u32 eci_intmasklo; 13562306a36Sopenharmony_ci u32 eci_intmaskmi; 13662306a36Sopenharmony_ci u32 eci_intmaskhi; 13762306a36Sopenharmony_ci u32 eci_eventlo; 13862306a36Sopenharmony_ci u32 eci_eventmi; 13962306a36Sopenharmony_ci u32 eci_eventhi; 14062306a36Sopenharmony_ci u32 eci_eventmasklo; 14162306a36Sopenharmony_ci u32 eci_eventmaskmi; 14262306a36Sopenharmony_ci u32 eci_eventmaskhi; 14362306a36Sopenharmony_ci u32 PAD[3]; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci /* SROM interface (corerev >= 32) */ 14662306a36Sopenharmony_ci u32 sromcontrol; /* 0x190 */ 14762306a36Sopenharmony_ci u32 sromaddress; 14862306a36Sopenharmony_ci u32 sromdata; 14962306a36Sopenharmony_ci u32 PAD[17]; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci /* Clock control and hardware workarounds (corerev >= 20) */ 15262306a36Sopenharmony_ci u32 clk_ctl_st; /* 0x1e0 */ 15362306a36Sopenharmony_ci u32 hw_war; 15462306a36Sopenharmony_ci u32 PAD[70]; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci /* UARTs */ 15762306a36Sopenharmony_ci u8 uart0data; /* 0x300 */ 15862306a36Sopenharmony_ci u8 uart0imr; 15962306a36Sopenharmony_ci u8 uart0fcr; 16062306a36Sopenharmony_ci u8 uart0lcr; 16162306a36Sopenharmony_ci u8 uart0mcr; 16262306a36Sopenharmony_ci u8 uart0lsr; 16362306a36Sopenharmony_ci u8 uart0msr; 16462306a36Sopenharmony_ci u8 uart0scratch; 16562306a36Sopenharmony_ci u8 PAD[248]; /* corerev >= 1 */ 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci u8 uart1data; /* 0x400 */ 16862306a36Sopenharmony_ci u8 uart1imr; 16962306a36Sopenharmony_ci u8 uart1fcr; 17062306a36Sopenharmony_ci u8 uart1lcr; 17162306a36Sopenharmony_ci u8 uart1mcr; 17262306a36Sopenharmony_ci u8 uart1lsr; 17362306a36Sopenharmony_ci u8 uart1msr; 17462306a36Sopenharmony_ci u8 uart1scratch; 17562306a36Sopenharmony_ci u32 PAD[62]; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci /* save/restore, corerev >= 48 */ 17862306a36Sopenharmony_ci u32 sr_capability; /* 0x500 */ 17962306a36Sopenharmony_ci u32 sr_control0; /* 0x504 */ 18062306a36Sopenharmony_ci u32 sr_control1; /* 0x508 */ 18162306a36Sopenharmony_ci u32 gpio_control; /* 0x50C */ 18262306a36Sopenharmony_ci u32 PAD[60]; 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci /* PMU registers (corerev >= 20) */ 18562306a36Sopenharmony_ci u32 pmucontrol; /* 0x600 */ 18662306a36Sopenharmony_ci u32 pmucapabilities; 18762306a36Sopenharmony_ci u32 pmustatus; 18862306a36Sopenharmony_ci u32 res_state; 18962306a36Sopenharmony_ci u32 res_pending; 19062306a36Sopenharmony_ci u32 pmutimer; 19162306a36Sopenharmony_ci u32 min_res_mask; 19262306a36Sopenharmony_ci u32 max_res_mask; 19362306a36Sopenharmony_ci u32 res_table_sel; 19462306a36Sopenharmony_ci u32 res_dep_mask; 19562306a36Sopenharmony_ci u32 res_updn_timer; 19662306a36Sopenharmony_ci u32 res_timer; 19762306a36Sopenharmony_ci u32 clkstretch; 19862306a36Sopenharmony_ci u32 pmuwatchdog; 19962306a36Sopenharmony_ci u32 gpiosel; /* 0x638, rev >= 1 */ 20062306a36Sopenharmony_ci u32 gpioenable; /* 0x63c, rev >= 1 */ 20162306a36Sopenharmony_ci u32 res_req_timer_sel; 20262306a36Sopenharmony_ci u32 res_req_timer; 20362306a36Sopenharmony_ci u32 res_req_mask; 20462306a36Sopenharmony_ci u32 pmucapabilities_ext; /* 0x64c, pmurev >=15 */ 20562306a36Sopenharmony_ci u32 chipcontrol_addr; /* 0x650 */ 20662306a36Sopenharmony_ci u32 chipcontrol_data; /* 0x654 */ 20762306a36Sopenharmony_ci u32 regcontrol_addr; 20862306a36Sopenharmony_ci u32 regcontrol_data; 20962306a36Sopenharmony_ci u32 pllcontrol_addr; 21062306a36Sopenharmony_ci u32 pllcontrol_data; 21162306a36Sopenharmony_ci u32 pmustrapopt; /* 0x668, corerev >= 28 */ 21262306a36Sopenharmony_ci u32 pmu_xtalfreq; /* 0x66C, pmurev >= 10 */ 21362306a36Sopenharmony_ci u32 retention_ctl; /* 0x670, pmurev >= 15 */ 21462306a36Sopenharmony_ci u32 PAD[3]; 21562306a36Sopenharmony_ci u32 retention_grpidx; /* 0x680 */ 21662306a36Sopenharmony_ci u32 retention_grpctl; /* 0x684 */ 21762306a36Sopenharmony_ci u32 PAD[94]; 21862306a36Sopenharmony_ci u16 sromotp[768]; 21962306a36Sopenharmony_ci}; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci/* chipid */ 22262306a36Sopenharmony_ci#define CID_ID_MASK 0x0000ffff /* Chip Id mask */ 22362306a36Sopenharmony_ci#define CID_REV_MASK 0x000f0000 /* Chip Revision mask */ 22462306a36Sopenharmony_ci#define CID_REV_SHIFT 16 /* Chip Revision shift */ 22562306a36Sopenharmony_ci#define CID_PKG_MASK 0x00f00000 /* Package Option mask */ 22662306a36Sopenharmony_ci#define CID_PKG_SHIFT 20 /* Package Option shift */ 22762306a36Sopenharmony_ci#define CID_CC_MASK 0x0f000000 /* CoreCount (corerev >= 4) */ 22862306a36Sopenharmony_ci#define CID_CC_SHIFT 24 22962306a36Sopenharmony_ci#define CID_TYPE_MASK 0xf0000000 /* Chip Type */ 23062306a36Sopenharmony_ci#define CID_TYPE_SHIFT 28 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci/* capabilities */ 23362306a36Sopenharmony_ci#define CC_CAP_UARTS_MASK 0x00000003 /* Number of UARTs */ 23462306a36Sopenharmony_ci#define CC_CAP_MIPSEB 0x00000004 /* MIPS is in big-endian mode */ 23562306a36Sopenharmony_ci#define CC_CAP_UCLKSEL 0x00000018 /* UARTs clock select */ 23662306a36Sopenharmony_ci/* UARTs are driven by internal divided clock */ 23762306a36Sopenharmony_ci#define CC_CAP_UINTCLK 0x00000008 23862306a36Sopenharmony_ci#define CC_CAP_UARTGPIO 0x00000020 /* UARTs own GPIOs 15:12 */ 23962306a36Sopenharmony_ci#define CC_CAP_EXTBUS_MASK 0x000000c0 /* External bus mask */ 24062306a36Sopenharmony_ci#define CC_CAP_EXTBUS_NONE 0x00000000 /* No ExtBus present */ 24162306a36Sopenharmony_ci#define CC_CAP_EXTBUS_FULL 0x00000040 /* ExtBus: PCMCIA, IDE & Prog */ 24262306a36Sopenharmony_ci#define CC_CAP_EXTBUS_PROG 0x00000080 /* ExtBus: ProgIf only */ 24362306a36Sopenharmony_ci#define CC_CAP_FLASH_MASK 0x00000700 /* Type of flash */ 24462306a36Sopenharmony_ci#define CC_CAP_PLL_MASK 0x00038000 /* Type of PLL */ 24562306a36Sopenharmony_ci#define CC_CAP_PWR_CTL 0x00040000 /* Power control */ 24662306a36Sopenharmony_ci#define CC_CAP_OTPSIZE 0x00380000 /* OTP Size (0 = none) */ 24762306a36Sopenharmony_ci#define CC_CAP_OTPSIZE_SHIFT 19 /* OTP Size shift */ 24862306a36Sopenharmony_ci#define CC_CAP_OTPSIZE_BASE 5 /* OTP Size base */ 24962306a36Sopenharmony_ci#define CC_CAP_JTAGP 0x00400000 /* JTAG Master Present */ 25062306a36Sopenharmony_ci#define CC_CAP_ROM 0x00800000 /* Internal boot rom active */ 25162306a36Sopenharmony_ci#define CC_CAP_BKPLN64 0x08000000 /* 64-bit backplane */ 25262306a36Sopenharmony_ci#define CC_CAP_PMU 0x10000000 /* PMU Present, rev >= 20 */ 25362306a36Sopenharmony_ci#define CC_CAP_SROM 0x40000000 /* Srom Present, rev >= 32 */ 25462306a36Sopenharmony_ci/* Nand flash present, rev >= 35 */ 25562306a36Sopenharmony_ci#define CC_CAP_NFLASH 0x80000000 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci#define CC_CAP2_SECI 0x00000001 /* SECI Present, rev >= 36 */ 25862306a36Sopenharmony_ci/* GSIO (spi/i2c) present, rev >= 37 */ 25962306a36Sopenharmony_ci#define CC_CAP2_GSIO 0x00000002 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci/* sr_control0, rev >= 48 */ 26262306a36Sopenharmony_ci#define CC_SR_CTL0_ENABLE_MASK BIT(0) 26362306a36Sopenharmony_ci#define CC_SR_CTL0_ENABLE_SHIFT 0 26462306a36Sopenharmony_ci#define CC_SR_CTL0_EN_SR_ENG_CLK_SHIFT 1 /* sr_clk to sr_memory enable */ 26562306a36Sopenharmony_ci#define CC_SR_CTL0_RSRC_TRIGGER_SHIFT 2 /* Rising edge resource trigger 0 to 26662306a36Sopenharmony_ci * sr_engine 26762306a36Sopenharmony_ci */ 26862306a36Sopenharmony_ci#define CC_SR_CTL0_MIN_DIV_SHIFT 6 /* Min division value for fast clk 26962306a36Sopenharmony_ci * in sr_engine 27062306a36Sopenharmony_ci */ 27162306a36Sopenharmony_ci#define CC_SR_CTL0_EN_SBC_STBY_SHIFT 16 27262306a36Sopenharmony_ci#define CC_SR_CTL0_EN_SR_ALP_CLK_MASK_SHIFT 18 27362306a36Sopenharmony_ci#define CC_SR_CTL0_EN_SR_HT_CLK_SHIFT 19 27462306a36Sopenharmony_ci#define CC_SR_CTL0_ALLOW_PIC_SHIFT 20 /* Allow pic to separate power 27562306a36Sopenharmony_ci * domains 27662306a36Sopenharmony_ci */ 27762306a36Sopenharmony_ci#define CC_SR_CTL0_MAX_SR_LQ_CLK_CNT_SHIFT 25 27862306a36Sopenharmony_ci#define CC_SR_CTL0_EN_MEM_DISABLE_FOR_SLEEP 30 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci/* pmucapabilities */ 28162306a36Sopenharmony_ci#define PCAP_REV_MASK 0x000000ff 28262306a36Sopenharmony_ci#define PCAP_RC_MASK 0x00001f00 28362306a36Sopenharmony_ci#define PCAP_RC_SHIFT 8 28462306a36Sopenharmony_ci#define PCAP_TC_MASK 0x0001e000 28562306a36Sopenharmony_ci#define PCAP_TC_SHIFT 13 28662306a36Sopenharmony_ci#define PCAP_PC_MASK 0x001e0000 28762306a36Sopenharmony_ci#define PCAP_PC_SHIFT 17 28862306a36Sopenharmony_ci#define PCAP_VC_MASK 0x01e00000 28962306a36Sopenharmony_ci#define PCAP_VC_SHIFT 21 29062306a36Sopenharmony_ci#define PCAP_CC_MASK 0x1e000000 29162306a36Sopenharmony_ci#define PCAP_CC_SHIFT 25 29262306a36Sopenharmony_ci#define PCAP5_PC_MASK 0x003e0000 /* PMU corerev >= 5 */ 29362306a36Sopenharmony_ci#define PCAP5_PC_SHIFT 17 29462306a36Sopenharmony_ci#define PCAP5_VC_MASK 0x07c00000 29562306a36Sopenharmony_ci#define PCAP5_VC_SHIFT 22 29662306a36Sopenharmony_ci#define PCAP5_CC_MASK 0xf8000000 29762306a36Sopenharmony_ci#define PCAP5_CC_SHIFT 27 29862306a36Sopenharmony_ci/* pmucapabilites_ext PMU rev >= 15 */ 29962306a36Sopenharmony_ci#define PCAPEXT_SR_SUPPORTED_MASK (1 << 1) 30062306a36Sopenharmony_ci/* retention_ctl PMU rev >= 15 */ 30162306a36Sopenharmony_ci#define PMU_RCTL_MACPHY_DISABLE_MASK (1 << 26) 30262306a36Sopenharmony_ci#define PMU_RCTL_LOGIC_DISABLE_MASK (1 << 27) 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci/* 30662306a36Sopenharmony_ci* Maximum delay for the PMU state transition in us. 30762306a36Sopenharmony_ci* This is an upper bound intended for spinwaits etc. 30862306a36Sopenharmony_ci*/ 30962306a36Sopenharmony_ci#define PMU_MAX_TRANSITION_DLY 15000 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci#endif /* _SBCHIPC_H */ 312