Path: blob/master/arch/blackfin/kernel/debug-mmrs.c
10817 views
/*1* debugfs interface to core/system MMRs2*3* Copyright 2007-2011 Analog Devices Inc.4*5* Licensed under the GPL-2 or later6*/78#include <linux/debugfs.h>9#include <linux/fs.h>10#include <linux/kernel.h>11#include <linux/module.h>1213#include <asm/blackfin.h>14#include <asm/gpio.h>15#include <asm/gptimers.h>16#include <asm/bfin_can.h>17#include <asm/bfin_dma.h>18#include <asm/bfin_ppi.h>19#include <asm/bfin_serial.h>20#include <asm/bfin5xx_spi.h>21#include <asm/bfin_twi.h>2223/* Common code defines PORT_MUX on us, so redirect the MMR back locally */24#ifdef BFIN_PORT_MUX25#undef PORT_MUX26#define PORT_MUX BFIN_PORT_MUX27#endif2829#define _d(name, bits, addr, perms) debugfs_create_x##bits(name, perms, parent, (u##bits *)addr)30#define d(name, bits, addr) _d(name, bits, addr, S_IRUSR|S_IWUSR)31#define d_RO(name, bits, addr) _d(name, bits, addr, S_IRUSR)32#define d_WO(name, bits, addr) _d(name, bits, addr, S_IWUSR)3334#define D_RO(name, bits) d_RO(#name, bits, name)35#define D_WO(name, bits) d_WO(#name, bits, name)36#define D32(name) d(#name, 32, name)37#define D16(name) d(#name, 16, name)3839#define REGS_OFF(peri, mmr) offsetof(struct bfin_##peri##_regs, mmr)40#define __REGS(peri, sname, rname) \41do { \42struct bfin_##peri##_regs r; \43void *addr = (void *)(base + REGS_OFF(peri, rname)); \44strcpy(_buf, sname); \45if (sizeof(r.rname) == 2) \46debugfs_create_x16(buf, S_IRUSR|S_IWUSR, parent, addr); \47else \48debugfs_create_x32(buf, S_IRUSR|S_IWUSR, parent, addr); \49} while (0)50#define REGS_STR_PFX(buf, pfx, num) \51({ \52buf + (num >= 0 ? \53sprintf(buf, #pfx "%i_", num) : \54sprintf(buf, #pfx "_")); \55})56#define REGS_STR_PFX_C(buf, pfx, num) \57({ \58buf + (num >= 0 ? \59sprintf(buf, #pfx "%c_", 'A' + num) : \60sprintf(buf, #pfx "_")); \61})6263/*64* Core registers (not memory mapped)65*/66extern u32 last_seqstat;6768static int debug_cclk_get(void *data, u64 *val)69{70*val = get_cclk();71return 0;72}73DEFINE_SIMPLE_ATTRIBUTE(fops_debug_cclk, debug_cclk_get, NULL, "0x%08llx\n");7475static int debug_sclk_get(void *data, u64 *val)76{77*val = get_sclk();78return 0;79}80DEFINE_SIMPLE_ATTRIBUTE(fops_debug_sclk, debug_sclk_get, NULL, "0x%08llx\n");8182#define DEFINE_SYSREG(sr, pre, post) \83static int sysreg_##sr##_get(void *data, u64 *val) \84{ \85unsigned long tmp; \86pre; \87__asm__ __volatile__("%0 = " #sr ";" : "=d"(tmp)); \88*val = tmp; \89return 0; \90} \91static int sysreg_##sr##_set(void *data, u64 val) \92{ \93unsigned long tmp = val; \94__asm__ __volatile__(#sr " = %0;" : : "d"(tmp)); \95post; \96return 0; \97} \98DEFINE_SIMPLE_ATTRIBUTE(fops_sysreg_##sr, sysreg_##sr##_get, sysreg_##sr##_set, "0x%08llx\n")99100DEFINE_SYSREG(cycles, , );101DEFINE_SYSREG(cycles2, __asm__ __volatile__("%0 = cycles;" : "=d"(tmp)), );102DEFINE_SYSREG(emudat, , );103DEFINE_SYSREG(seqstat, , );104DEFINE_SYSREG(syscfg, , CSYNC());105#define D_SYSREG(sr) debugfs_create_file(#sr, S_IRUSR|S_IWUSR, parent, NULL, &fops_sysreg_##sr)106107/*108* CAN109*/110#define CAN_OFF(mmr) REGS_OFF(can, mmr)111#define __CAN(uname, lname) __REGS(can, #uname, lname)112static void __init __maybe_unused113bfin_debug_mmrs_can(struct dentry *parent, unsigned long base, int num)114{115static struct dentry *am, *mb;116int i, j;117char buf[32], *_buf = REGS_STR_PFX(buf, CAN, num);118119if (!am) {120am = debugfs_create_dir("am", parent);121mb = debugfs_create_dir("mb", parent);122}123124__CAN(MC1, mc1);125__CAN(MD1, md1);126__CAN(TRS1, trs1);127__CAN(TRR1, trr1);128__CAN(TA1, ta1);129__CAN(AA1, aa1);130__CAN(RMP1, rmp1);131__CAN(RML1, rml1);132__CAN(MBTIF1, mbtif1);133__CAN(MBRIF1, mbrif1);134__CAN(MBIM1, mbim1);135__CAN(RFH1, rfh1);136__CAN(OPSS1, opss1);137138__CAN(MC2, mc2);139__CAN(MD2, md2);140__CAN(TRS2, trs2);141__CAN(TRR2, trr2);142__CAN(TA2, ta2);143__CAN(AA2, aa2);144__CAN(RMP2, rmp2);145__CAN(RML2, rml2);146__CAN(MBTIF2, mbtif2);147__CAN(MBRIF2, mbrif2);148__CAN(MBIM2, mbim2);149__CAN(RFH2, rfh2);150__CAN(OPSS2, opss2);151152__CAN(CLOCK, clock);153__CAN(TIMING, timing);154__CAN(DEBUG, debug);155__CAN(STATUS, status);156__CAN(CEC, cec);157__CAN(GIS, gis);158__CAN(GIM, gim);159__CAN(GIF, gif);160__CAN(CONTROL, control);161__CAN(INTR, intr);162__CAN(VERSION, version);163__CAN(MBTD, mbtd);164__CAN(EWR, ewr);165__CAN(ESR, esr);166/*__CAN(UCREG, ucreg); no longer exists */167__CAN(UCCNT, uccnt);168__CAN(UCRC, ucrc);169__CAN(UCCNF, uccnf);170__CAN(VERSION2, version2);171172for (i = 0; i < 32; ++i) {173sprintf(_buf, "AM%02iL", i);174debugfs_create_x16(buf, S_IRUSR|S_IWUSR, am,175(u16 *)(base + CAN_OFF(msk[i].aml)));176sprintf(_buf, "AM%02iH", i);177debugfs_create_x16(buf, S_IRUSR|S_IWUSR, am,178(u16 *)(base + CAN_OFF(msk[i].amh)));179180for (j = 0; j < 3; ++j) {181sprintf(_buf, "MB%02i_DATA%i", i, j);182debugfs_create_x16(buf, S_IRUSR|S_IWUSR, mb,183(u16 *)(base + CAN_OFF(chl[i].data[j*2])));184}185sprintf(_buf, "MB%02i_LENGTH", i);186debugfs_create_x16(buf, S_IRUSR|S_IWUSR, mb,187(u16 *)(base + CAN_OFF(chl[i].dlc)));188sprintf(_buf, "MB%02i_TIMESTAMP", i);189debugfs_create_x16(buf, S_IRUSR|S_IWUSR, mb,190(u16 *)(base + CAN_OFF(chl[i].tsv)));191sprintf(_buf, "MB%02i_ID0", i);192debugfs_create_x16(buf, S_IRUSR|S_IWUSR, mb,193(u16 *)(base + CAN_OFF(chl[i].id0)));194sprintf(_buf, "MB%02i_ID1", i);195debugfs_create_x16(buf, S_IRUSR|S_IWUSR, mb,196(u16 *)(base + CAN_OFF(chl[i].id1)));197}198}199#define CAN(num) bfin_debug_mmrs_can(parent, CAN##num##_MC1, num)200201/*202* DMA203*/204#define __DMA(uname, lname) __REGS(dma, #uname, lname)205static void __init __maybe_unused206bfin_debug_mmrs_dma(struct dentry *parent, unsigned long base, int num, char mdma, const char *pfx)207{208char buf[32], *_buf;209210if (mdma)211_buf = buf + sprintf(buf, "%s_%c%i_", pfx, mdma, num);212else213_buf = buf + sprintf(buf, "%s%i_", pfx, num);214215__DMA(NEXT_DESC_PTR, next_desc_ptr);216__DMA(START_ADDR, start_addr);217__DMA(CONFIG, config);218__DMA(X_COUNT, x_count);219__DMA(X_MODIFY, x_modify);220__DMA(Y_COUNT, y_count);221__DMA(Y_MODIFY, y_modify);222__DMA(CURR_DESC_PTR, curr_desc_ptr);223__DMA(CURR_ADDR, curr_addr);224__DMA(IRQ_STATUS, irq_status);225__DMA(PERIPHERAL_MAP, peripheral_map);226__DMA(CURR_X_COUNT, curr_x_count);227__DMA(CURR_Y_COUNT, curr_y_count);228}229#define _DMA(num, base, mdma, pfx) bfin_debug_mmrs_dma(parent, base, num, mdma, pfx "DMA")230#define DMA(num) _DMA(num, DMA##num##_NEXT_DESC_PTR, 0, "")231#define _MDMA(num, x) \232do { \233_DMA(num, x##DMA_D##num##_NEXT_DESC_PTR, 'D', #x); \234_DMA(num, x##DMA_S##num##_NEXT_DESC_PTR, 'S', #x); \235} while (0)236#define MDMA(num) _MDMA(num, M)237#define IMDMA(num) _MDMA(num, IM)238239/*240* EPPI241*/242#define __EPPI(uname, lname) __REGS(eppi, #uname, lname)243static void __init __maybe_unused244bfin_debug_mmrs_eppi(struct dentry *parent, unsigned long base, int num)245{246char buf[32], *_buf = REGS_STR_PFX(buf, EPPI, num);247__EPPI(STATUS, status);248__EPPI(HCOUNT, hcount);249__EPPI(HDELAY, hdelay);250__EPPI(VCOUNT, vcount);251__EPPI(VDELAY, vdelay);252__EPPI(FRAME, frame);253__EPPI(LINE, line);254__EPPI(CLKDIV, clkdiv);255__EPPI(CONTROL, control);256__EPPI(FS1W_HBL, fs1w_hbl);257__EPPI(FS1P_AVPL, fs1p_avpl);258__EPPI(FS2W_LVB, fs2w_lvb);259__EPPI(FS2P_LAVF, fs2p_lavf);260__EPPI(CLIP, clip);261}262#define EPPI(num) bfin_debug_mmrs_eppi(parent, EPPI##num##_STATUS, num)263264/*265* General Purpose Timers266*/267#define __GPTIMER(uname, lname) __REGS(gptimer, #uname, lname)268static void __init __maybe_unused269bfin_debug_mmrs_gptimer(struct dentry *parent, unsigned long base, int num)270{271char buf[32], *_buf = REGS_STR_PFX(buf, TIMER, num);272__GPTIMER(CONFIG, config);273__GPTIMER(COUNTER, counter);274__GPTIMER(PERIOD, period);275__GPTIMER(WIDTH, width);276}277#define GPTIMER(num) bfin_debug_mmrs_gptimer(parent, TIMER##num##_CONFIG, num)278279/*280* Handshake MDMA281*/282#define __HMDMA(uname, lname) __REGS(hmdma, #uname, lname)283static void __init __maybe_unused284bfin_debug_mmrs_hmdma(struct dentry *parent, unsigned long base, int num)285{286char buf[32], *_buf = REGS_STR_PFX(buf, HMDMA, num);287__HMDMA(CONTROL, control);288__HMDMA(ECINIT, ecinit);289__HMDMA(BCINIT, bcinit);290__HMDMA(ECURGENT, ecurgent);291__HMDMA(ECOVERFLOW, ecoverflow);292__HMDMA(ECOUNT, ecount);293__HMDMA(BCOUNT, bcount);294}295#define HMDMA(num) bfin_debug_mmrs_hmdma(parent, HMDMA##num##_CONTROL, num)296297/*298* Port/GPIO299*/300#define bfin_gpio_regs gpio_port_t301#define __PORT(uname, lname) __REGS(gpio, #uname, lname)302static void __init __maybe_unused303bfin_debug_mmrs_port(struct dentry *parent, unsigned long base, int num)304{305char buf[32], *_buf;306#ifdef __ADSPBF54x__307_buf = REGS_STR_PFX_C(buf, PORT, num);308__PORT(FER, port_fer);309__PORT(SET, data_set);310__PORT(CLEAR, data_clear);311__PORT(DIR_SET, dir_set);312__PORT(DIR_CLEAR, dir_clear);313__PORT(INEN, inen);314__PORT(MUX, port_mux);315#else316_buf = buf + sprintf(buf, "PORT%cIO_", num);317__PORT(CLEAR, data_clear);318__PORT(SET, data_set);319__PORT(TOGGLE, toggle);320__PORT(MASKA, maska);321__PORT(MASKA_CLEAR, maska_clear);322__PORT(MASKA_SET, maska_set);323__PORT(MASKA_TOGGLE, maska_toggle);324__PORT(MASKB, maskb);325__PORT(MASKB_CLEAR, maskb_clear);326__PORT(MASKB_SET, maskb_set);327__PORT(MASKB_TOGGLE, maskb_toggle);328__PORT(DIR, dir);329__PORT(POLAR, polar);330__PORT(EDGE, edge);331__PORT(BOTH, both);332__PORT(INEN, inen);333#endif334_buf[-1] = '\0';335d(buf, 16, base + REGS_OFF(gpio, data));336}337#define PORT(base, num) bfin_debug_mmrs_port(parent, base, num)338339/*340* PPI341*/342#define __PPI(uname, lname) __REGS(ppi, #uname, lname)343static void __init __maybe_unused344bfin_debug_mmrs_ppi(struct dentry *parent, unsigned long base, int num)345{346char buf[32], *_buf = REGS_STR_PFX(buf, PPI, num);347__PPI(CONTROL, control);348__PPI(STATUS, status);349__PPI(COUNT, count);350__PPI(DELAY, delay);351__PPI(FRAME, frame);352}353#define PPI(num) bfin_debug_mmrs_ppi(parent, PPI##num##_CONTROL, num)354355/*356* SPI357*/358#define __SPI(uname, lname) __REGS(spi, #uname, lname)359static void __init __maybe_unused360bfin_debug_mmrs_spi(struct dentry *parent, unsigned long base, int num)361{362char buf[32], *_buf = REGS_STR_PFX(buf, SPI, num);363__SPI(CTL, ctl);364__SPI(FLG, flg);365__SPI(STAT, stat);366__SPI(TDBR, tdbr);367__SPI(RDBR, rdbr);368__SPI(BAUD, baud);369__SPI(SHADOW, shadow);370}371#define SPI(num) bfin_debug_mmrs_spi(parent, SPI##num##_REGBASE, num)372373/*374* SPORT375*/376static inline int sport_width(void *mmr)377{378unsigned long lmmr = (unsigned long)mmr;379if ((lmmr & 0xff) == 0x10)380/* SPORT#_TX has 0x10 offset -> SPORT#_TCR2 has 0x04 offset */381lmmr -= 0xc;382else383/* SPORT#_RX has 0x18 offset -> SPORT#_RCR2 has 0x24 offset */384lmmr += 0xc;385/* extract SLEN field from control register 2 and add 1 */386return (bfin_read16(lmmr) & 0x1f) + 1;387}388static int sport_set(void *mmr, u64 val)389{390unsigned long flags;391local_irq_save(flags);392if (sport_width(mmr) <= 16)393bfin_write16(mmr, val);394else395bfin_write32(mmr, val);396local_irq_restore(flags);397return 0;398}399static int sport_get(void *mmr, u64 *val)400{401unsigned long flags;402local_irq_save(flags);403if (sport_width(mmr) <= 16)404*val = bfin_read16(mmr);405else406*val = bfin_read32(mmr);407local_irq_restore(flags);408return 0;409}410DEFINE_SIMPLE_ATTRIBUTE(fops_sport, sport_get, sport_set, "0x%08llx\n");411/*DEFINE_SIMPLE_ATTRIBUTE(fops_sport_ro, sport_get, NULL, "0x%08llx\n");*/412DEFINE_SIMPLE_ATTRIBUTE(fops_sport_wo, NULL, sport_set, "0x%08llx\n");413#define SPORT_OFF(mmr) (SPORT0_##mmr - SPORT0_TCR1)414#define _D_SPORT(name, perms, fops) \415do { \416strcpy(_buf, #name); \417debugfs_create_file(buf, perms, parent, (void *)(base + SPORT_OFF(name)), fops); \418} while (0)419#define __SPORT_RW(name) _D_SPORT(name, S_IRUSR|S_IWUSR, &fops_sport)420#define __SPORT_RO(name) _D_SPORT(name, S_IRUSR, &fops_sport_ro)421#define __SPORT_WO(name) _D_SPORT(name, S_IWUSR, &fops_sport_wo)422#define __SPORT(name, bits) \423do { \424strcpy(_buf, #name); \425debugfs_create_x##bits(buf, S_IRUSR|S_IWUSR, parent, (u##bits *)(base + SPORT_OFF(name))); \426} while (0)427static void __init __maybe_unused428bfin_debug_mmrs_sport(struct dentry *parent, unsigned long base, int num)429{430char buf[32], *_buf = REGS_STR_PFX(buf, SPORT, num);431__SPORT(CHNL, 16);432__SPORT(MCMC1, 16);433__SPORT(MCMC2, 16);434__SPORT(MRCS0, 32);435__SPORT(MRCS1, 32);436__SPORT(MRCS2, 32);437__SPORT(MRCS3, 32);438__SPORT(MTCS0, 32);439__SPORT(MTCS1, 32);440__SPORT(MTCS2, 32);441__SPORT(MTCS3, 32);442__SPORT(RCLKDIV, 16);443__SPORT(RCR1, 16);444__SPORT(RCR2, 16);445__SPORT(RFSDIV, 16);446__SPORT_RW(RX);447__SPORT(STAT, 16);448__SPORT(TCLKDIV, 16);449__SPORT(TCR1, 16);450__SPORT(TCR2, 16);451__SPORT(TFSDIV, 16);452__SPORT_WO(TX);453}454#define SPORT(num) bfin_debug_mmrs_sport(parent, SPORT##num##_TCR1, num)455456/*457* TWI458*/459#define __TWI(uname, lname) __REGS(twi, #uname, lname)460static void __init __maybe_unused461bfin_debug_mmrs_twi(struct dentry *parent, unsigned long base, int num)462{463char buf[32], *_buf = REGS_STR_PFX(buf, TWI, num);464__TWI(CLKDIV, clkdiv);465__TWI(CONTROL, control);466__TWI(SLAVE_CTL, slave_ctl);467__TWI(SLAVE_STAT, slave_stat);468__TWI(SLAVE_ADDR, slave_addr);469__TWI(MASTER_CTL, master_ctl);470__TWI(MASTER_STAT, master_stat);471__TWI(MASTER_ADDR, master_addr);472__TWI(INT_STAT, int_stat);473__TWI(INT_MASK, int_mask);474__TWI(FIFO_CTL, fifo_ctl);475__TWI(FIFO_STAT, fifo_stat);476__TWI(XMT_DATA8, xmt_data8);477__TWI(XMT_DATA16, xmt_data16);478__TWI(RCV_DATA8, rcv_data8);479__TWI(RCV_DATA16, rcv_data16);480}481#define TWI(num) bfin_debug_mmrs_twi(parent, TWI##num##_CLKDIV, num)482483/*484* UART485*/486#define __UART(uname, lname) __REGS(uart, #uname, lname)487static void __init __maybe_unused488bfin_debug_mmrs_uart(struct dentry *parent, unsigned long base, int num)489{490char buf[32], *_buf = REGS_STR_PFX(buf, UART, num);491#ifdef BFIN_UART_BF54X_STYLE492__UART(DLL, dll);493__UART(DLH, dlh);494__UART(GCTL, gctl);495__UART(LCR, lcr);496__UART(MCR, mcr);497__UART(LSR, lsr);498__UART(MSR, msr);499__UART(SCR, scr);500__UART(IER_SET, ier_set);501__UART(IER_CLEAR, ier_clear);502__UART(THR, thr);503__UART(RBR, rbr);504#else505__UART(DLL, dll);506__UART(THR, thr);507__UART(RBR, rbr);508__UART(DLH, dlh);509__UART(IER, ier);510__UART(IIR, iir);511__UART(LCR, lcr);512__UART(MCR, mcr);513__UART(LSR, lsr);514__UART(MSR, msr);515__UART(SCR, scr);516__UART(GCTL, gctl);517#endif518}519#define UART(num) bfin_debug_mmrs_uart(parent, UART##num##_DLL, num)520521/*522* The actual debugfs generation523*/524static struct dentry *debug_mmrs_dentry;525526static int __init bfin_debug_mmrs_init(void)527{528struct dentry *top, *parent;529530pr_info("debug-mmrs: setting up Blackfin MMR debugfs\n");531532top = debugfs_create_dir("blackfin", NULL);533if (top == NULL)534return -1;535536parent = debugfs_create_dir("core_regs", top);537debugfs_create_file("cclk", S_IRUSR, parent, NULL, &fops_debug_cclk);538debugfs_create_file("sclk", S_IRUSR, parent, NULL, &fops_debug_sclk);539debugfs_create_x32("last_seqstat", S_IRUSR, parent, &last_seqstat);540D_SYSREG(cycles);541D_SYSREG(cycles2);542D_SYSREG(emudat);543D_SYSREG(seqstat);544D_SYSREG(syscfg);545546/* Core MMRs */547parent = debugfs_create_dir("ctimer", top);548D32(TCNTL);549D32(TCOUNT);550D32(TPERIOD);551D32(TSCALE);552553parent = debugfs_create_dir("cec", top);554D32(EVT0);555D32(EVT1);556D32(EVT2);557D32(EVT3);558D32(EVT4);559D32(EVT5);560D32(EVT6);561D32(EVT7);562D32(EVT8);563D32(EVT9);564D32(EVT10);565D32(EVT11);566D32(EVT12);567D32(EVT13);568D32(EVT14);569D32(EVT15);570D32(EVT_OVERRIDE);571D32(IMASK);572D32(IPEND);573D32(ILAT);574D32(IPRIO);575576parent = debugfs_create_dir("debug", top);577D32(DBGSTAT);578D32(DSPID);579580parent = debugfs_create_dir("mmu", top);581D32(SRAM_BASE_ADDRESS);582D32(DCPLB_ADDR0);583D32(DCPLB_ADDR10);584D32(DCPLB_ADDR11);585D32(DCPLB_ADDR12);586D32(DCPLB_ADDR13);587D32(DCPLB_ADDR14);588D32(DCPLB_ADDR15);589D32(DCPLB_ADDR1);590D32(DCPLB_ADDR2);591D32(DCPLB_ADDR3);592D32(DCPLB_ADDR4);593D32(DCPLB_ADDR5);594D32(DCPLB_ADDR6);595D32(DCPLB_ADDR7);596D32(DCPLB_ADDR8);597D32(DCPLB_ADDR9);598D32(DCPLB_DATA0);599D32(DCPLB_DATA10);600D32(DCPLB_DATA11);601D32(DCPLB_DATA12);602D32(DCPLB_DATA13);603D32(DCPLB_DATA14);604D32(DCPLB_DATA15);605D32(DCPLB_DATA1);606D32(DCPLB_DATA2);607D32(DCPLB_DATA3);608D32(DCPLB_DATA4);609D32(DCPLB_DATA5);610D32(DCPLB_DATA6);611D32(DCPLB_DATA7);612D32(DCPLB_DATA8);613D32(DCPLB_DATA9);614D32(DCPLB_FAULT_ADDR);615D32(DCPLB_STATUS);616D32(DMEM_CONTROL);617D32(DTEST_COMMAND);618D32(DTEST_DATA0);619D32(DTEST_DATA1);620621D32(ICPLB_ADDR0);622D32(ICPLB_ADDR1);623D32(ICPLB_ADDR2);624D32(ICPLB_ADDR3);625D32(ICPLB_ADDR4);626D32(ICPLB_ADDR5);627D32(ICPLB_ADDR6);628D32(ICPLB_ADDR7);629D32(ICPLB_ADDR8);630D32(ICPLB_ADDR9);631D32(ICPLB_ADDR10);632D32(ICPLB_ADDR11);633D32(ICPLB_ADDR12);634D32(ICPLB_ADDR13);635D32(ICPLB_ADDR14);636D32(ICPLB_ADDR15);637D32(ICPLB_DATA0);638D32(ICPLB_DATA1);639D32(ICPLB_DATA2);640D32(ICPLB_DATA3);641D32(ICPLB_DATA4);642D32(ICPLB_DATA5);643D32(ICPLB_DATA6);644D32(ICPLB_DATA7);645D32(ICPLB_DATA8);646D32(ICPLB_DATA9);647D32(ICPLB_DATA10);648D32(ICPLB_DATA11);649D32(ICPLB_DATA12);650D32(ICPLB_DATA13);651D32(ICPLB_DATA14);652D32(ICPLB_DATA15);653D32(ICPLB_FAULT_ADDR);654D32(ICPLB_STATUS);655D32(IMEM_CONTROL);656if (!ANOMALY_05000481) {657D32(ITEST_COMMAND);658D32(ITEST_DATA0);659D32(ITEST_DATA1);660}661662parent = debugfs_create_dir("perf", top);663D32(PFCNTR0);664D32(PFCNTR1);665D32(PFCTL);666667parent = debugfs_create_dir("trace", top);668D32(TBUF);669D32(TBUFCTL);670D32(TBUFSTAT);671672parent = debugfs_create_dir("watchpoint", top);673D32(WPIACTL);674D32(WPIA0);675D32(WPIA1);676D32(WPIA2);677D32(WPIA3);678D32(WPIA4);679D32(WPIA5);680D32(WPIACNT0);681D32(WPIACNT1);682D32(WPIACNT2);683D32(WPIACNT3);684D32(WPIACNT4);685D32(WPIACNT5);686D32(WPDACTL);687D32(WPDA0);688D32(WPDA1);689D32(WPDACNT0);690D32(WPDACNT1);691D32(WPSTAT);692693/* System MMRs */694#ifdef ATAPI_CONTROL695parent = debugfs_create_dir("atapi", top);696D16(ATAPI_CONTROL);697D16(ATAPI_DEV_ADDR);698D16(ATAPI_DEV_RXBUF);699D16(ATAPI_DEV_TXBUF);700D16(ATAPI_DMA_TFRCNT);701D16(ATAPI_INT_MASK);702D16(ATAPI_INT_STATUS);703D16(ATAPI_LINE_STATUS);704D16(ATAPI_MULTI_TIM_0);705D16(ATAPI_MULTI_TIM_1);706D16(ATAPI_MULTI_TIM_2);707D16(ATAPI_PIO_TFRCNT);708D16(ATAPI_PIO_TIM_0);709D16(ATAPI_PIO_TIM_1);710D16(ATAPI_REG_TIM_0);711D16(ATAPI_SM_STATE);712D16(ATAPI_STATUS);713D16(ATAPI_TERMINATE);714D16(ATAPI_UDMAOUT_TFRCNT);715D16(ATAPI_ULTRA_TIM_0);716D16(ATAPI_ULTRA_TIM_1);717D16(ATAPI_ULTRA_TIM_2);718D16(ATAPI_ULTRA_TIM_3);719D16(ATAPI_UMAIN_TFRCNT);720D16(ATAPI_XFER_LEN);721#endif722723#if defined(CAN_MC1) || defined(CAN0_MC1) || defined(CAN1_MC1)724parent = debugfs_create_dir("can", top);725# ifdef CAN_MC1726bfin_debug_mmrs_can(parent, CAN_MC1, -1);727# endif728# ifdef CAN0_MC1729CAN(0);730# endif731# ifdef CAN1_MC1732CAN(1);733# endif734#endif735736#ifdef CNT_COMMAND737parent = debugfs_create_dir("counter", top);738D16(CNT_COMMAND);739D16(CNT_CONFIG);740D32(CNT_COUNTER);741D16(CNT_DEBOUNCE);742D16(CNT_IMASK);743D32(CNT_MAX);744D32(CNT_MIN);745D16(CNT_STATUS);746#endif747748parent = debugfs_create_dir("dmac", top);749#ifdef DMA_TC_CNT750D16(DMAC_TC_CNT);751D16(DMAC_TC_PER);752#endif753#ifdef DMAC0_TC_CNT754D16(DMAC0_TC_CNT);755D16(DMAC0_TC_PER);756#endif757#ifdef DMAC1_TC_CNT758D16(DMAC1_TC_CNT);759D16(DMAC1_TC_PER);760#endif761#ifdef DMAC1_PERIMUX762D16(DMAC1_PERIMUX);763#endif764765#ifdef __ADSPBF561__766/* XXX: should rewrite the MMR map */767# define DMA0_NEXT_DESC_PTR DMA2_0_NEXT_DESC_PTR768# define DMA1_NEXT_DESC_PTR DMA2_1_NEXT_DESC_PTR769# define DMA2_NEXT_DESC_PTR DMA2_2_NEXT_DESC_PTR770# define DMA3_NEXT_DESC_PTR DMA2_3_NEXT_DESC_PTR771# define DMA4_NEXT_DESC_PTR DMA2_4_NEXT_DESC_PTR772# define DMA5_NEXT_DESC_PTR DMA2_5_NEXT_DESC_PTR773# define DMA6_NEXT_DESC_PTR DMA2_6_NEXT_DESC_PTR774# define DMA7_NEXT_DESC_PTR DMA2_7_NEXT_DESC_PTR775# define DMA8_NEXT_DESC_PTR DMA2_8_NEXT_DESC_PTR776# define DMA9_NEXT_DESC_PTR DMA2_9_NEXT_DESC_PTR777# define DMA10_NEXT_DESC_PTR DMA2_10_NEXT_DESC_PTR778# define DMA11_NEXT_DESC_PTR DMA2_11_NEXT_DESC_PTR779# define DMA12_NEXT_DESC_PTR DMA1_0_NEXT_DESC_PTR780# define DMA13_NEXT_DESC_PTR DMA1_1_NEXT_DESC_PTR781# define DMA14_NEXT_DESC_PTR DMA1_2_NEXT_DESC_PTR782# define DMA15_NEXT_DESC_PTR DMA1_3_NEXT_DESC_PTR783# define DMA16_NEXT_DESC_PTR DMA1_4_NEXT_DESC_PTR784# define DMA17_NEXT_DESC_PTR DMA1_5_NEXT_DESC_PTR785# define DMA18_NEXT_DESC_PTR DMA1_6_NEXT_DESC_PTR786# define DMA19_NEXT_DESC_PTR DMA1_7_NEXT_DESC_PTR787# define DMA20_NEXT_DESC_PTR DMA1_8_NEXT_DESC_PTR788# define DMA21_NEXT_DESC_PTR DMA1_9_NEXT_DESC_PTR789# define DMA22_NEXT_DESC_PTR DMA1_10_NEXT_DESC_PTR790# define DMA23_NEXT_DESC_PTR DMA1_11_NEXT_DESC_PTR791#endif792parent = debugfs_create_dir("dma", top);793DMA(0);794DMA(1);795DMA(1);796DMA(2);797DMA(3);798DMA(4);799DMA(5);800DMA(6);801DMA(7);802#ifdef DMA8_NEXT_DESC_PTR803DMA(8);804DMA(9);805DMA(10);806DMA(11);807#endif808#ifdef DMA12_NEXT_DESC_PTR809DMA(12);810DMA(13);811DMA(14);812DMA(15);813DMA(16);814DMA(17);815DMA(18);816DMA(19);817#endif818#ifdef DMA20_NEXT_DESC_PTR819DMA(20);820DMA(21);821DMA(22);822DMA(23);823#endif824825parent = debugfs_create_dir("ebiu_amc", top);826D32(EBIU_AMBCTL0);827D32(EBIU_AMBCTL1);828D16(EBIU_AMGCTL);829#ifdef EBIU_MBSCTL830D16(EBIU_MBSCTL);831D32(EBIU_ARBSTAT);832D32(EBIU_MODE);833D16(EBIU_FCTL);834#endif835836#ifdef EBIU_SDGCTL837parent = debugfs_create_dir("ebiu_sdram", top);838# ifdef __ADSPBF561__839D32(EBIU_SDBCTL);840# else841D16(EBIU_SDBCTL);842# endif843D32(EBIU_SDGCTL);844D16(EBIU_SDRRC);845D16(EBIU_SDSTAT);846#endif847848#ifdef EBIU_DDRACCT849parent = debugfs_create_dir("ebiu_ddr", top);850D32(EBIU_DDRACCT);851D32(EBIU_DDRARCT);852D32(EBIU_DDRBRC0);853D32(EBIU_DDRBRC1);854D32(EBIU_DDRBRC2);855D32(EBIU_DDRBRC3);856D32(EBIU_DDRBRC4);857D32(EBIU_DDRBRC5);858D32(EBIU_DDRBRC6);859D32(EBIU_DDRBRC7);860D32(EBIU_DDRBWC0);861D32(EBIU_DDRBWC1);862D32(EBIU_DDRBWC2);863D32(EBIU_DDRBWC3);864D32(EBIU_DDRBWC4);865D32(EBIU_DDRBWC5);866D32(EBIU_DDRBWC6);867D32(EBIU_DDRBWC7);868D32(EBIU_DDRCTL0);869D32(EBIU_DDRCTL1);870D32(EBIU_DDRCTL2);871D32(EBIU_DDRCTL3);872D32(EBIU_DDRGC0);873D32(EBIU_DDRGC1);874D32(EBIU_DDRGC2);875D32(EBIU_DDRGC3);876D32(EBIU_DDRMCCL);877D32(EBIU_DDRMCEN);878D32(EBIU_DDRQUE);879D32(EBIU_DDRTACT);880D32(EBIU_ERRADD);881D16(EBIU_ERRMST);882D16(EBIU_RSTCTL);883#endif884885#ifdef EMAC_ADDRHI886parent = debugfs_create_dir("emac", top);887D32(EMAC_ADDRHI);888D32(EMAC_ADDRLO);889D32(EMAC_FLC);890D32(EMAC_HASHHI);891D32(EMAC_HASHLO);892D32(EMAC_MMC_CTL);893D32(EMAC_MMC_RIRQE);894D32(EMAC_MMC_RIRQS);895D32(EMAC_MMC_TIRQE);896D32(EMAC_MMC_TIRQS);897D32(EMAC_OPMODE);898D32(EMAC_RXC_ALIGN);899D32(EMAC_RXC_ALLFRM);900D32(EMAC_RXC_ALLOCT);901D32(EMAC_RXC_BROAD);902D32(EMAC_RXC_DMAOVF);903D32(EMAC_RXC_EQ64);904D32(EMAC_RXC_FCS);905D32(EMAC_RXC_GE1024);906D32(EMAC_RXC_LNERRI);907D32(EMAC_RXC_LNERRO);908D32(EMAC_RXC_LONG);909D32(EMAC_RXC_LT1024);910D32(EMAC_RXC_LT128);911D32(EMAC_RXC_LT256);912D32(EMAC_RXC_LT512);913D32(EMAC_RXC_MACCTL);914D32(EMAC_RXC_MULTI);915D32(EMAC_RXC_OCTET);916D32(EMAC_RXC_OK);917D32(EMAC_RXC_OPCODE);918D32(EMAC_RXC_PAUSE);919D32(EMAC_RXC_SHORT);920D32(EMAC_RXC_TYPED);921D32(EMAC_RXC_UNICST);922D32(EMAC_RX_IRQE);923D32(EMAC_RX_STAT);924D32(EMAC_RX_STKY);925D32(EMAC_STAADD);926D32(EMAC_STADAT);927D32(EMAC_SYSCTL);928D32(EMAC_SYSTAT);929D32(EMAC_TXC_1COL);930D32(EMAC_TXC_ABORT);931D32(EMAC_TXC_ALLFRM);932D32(EMAC_TXC_ALLOCT);933D32(EMAC_TXC_BROAD);934D32(EMAC_TXC_CRSERR);935D32(EMAC_TXC_DEFER);936D32(EMAC_TXC_DMAUND);937D32(EMAC_TXC_EQ64);938D32(EMAC_TXC_GE1024);939D32(EMAC_TXC_GT1COL);940D32(EMAC_TXC_LATECL);941D32(EMAC_TXC_LT1024);942D32(EMAC_TXC_LT128);943D32(EMAC_TXC_LT256);944D32(EMAC_TXC_LT512);945D32(EMAC_TXC_MACCTL);946D32(EMAC_TXC_MULTI);947D32(EMAC_TXC_OCTET);948D32(EMAC_TXC_OK);949D32(EMAC_TXC_UNICST);950D32(EMAC_TXC_XS_COL);951D32(EMAC_TXC_XS_DFR);952D32(EMAC_TX_IRQE);953D32(EMAC_TX_STAT);954D32(EMAC_TX_STKY);955D32(EMAC_VLAN1);956D32(EMAC_VLAN2);957D32(EMAC_WKUP_CTL);958D32(EMAC_WKUP_FFCMD);959D32(EMAC_WKUP_FFCRC0);960D32(EMAC_WKUP_FFCRC1);961D32(EMAC_WKUP_FFMSK0);962D32(EMAC_WKUP_FFMSK1);963D32(EMAC_WKUP_FFMSK2);964D32(EMAC_WKUP_FFMSK3);965D32(EMAC_WKUP_FFOFF);966# ifdef EMAC_PTP_ACCR967D32(EMAC_PTP_ACCR);968D32(EMAC_PTP_ADDEND);969D32(EMAC_PTP_ALARMHI);970D32(EMAC_PTP_ALARMLO);971D16(EMAC_PTP_CTL);972D32(EMAC_PTP_FOFF);973D32(EMAC_PTP_FV1);974D32(EMAC_PTP_FV2);975D32(EMAC_PTP_FV3);976D16(EMAC_PTP_ID_OFF);977D32(EMAC_PTP_ID_SNAP);978D16(EMAC_PTP_IE);979D16(EMAC_PTP_ISTAT);980D32(EMAC_PTP_OFFSET);981D32(EMAC_PTP_PPS_PERIOD);982D32(EMAC_PTP_PPS_STARTHI);983D32(EMAC_PTP_PPS_STARTLO);984D32(EMAC_PTP_RXSNAPHI);985D32(EMAC_PTP_RXSNAPLO);986D32(EMAC_PTP_TIMEHI);987D32(EMAC_PTP_TIMELO);988D32(EMAC_PTP_TXSNAPHI);989D32(EMAC_PTP_TXSNAPLO);990# endif991#endif992993#if defined(EPPI0_STATUS) || defined(EPPI1_STATUS) || defined(EPPI2_STATUS)994parent = debugfs_create_dir("eppi", top);995# ifdef EPPI0_STATUS996EPPI(0);997# endif998# ifdef EPPI1_STATUS999EPPI(1);1000# endif1001# ifdef EPPI2_STATUS1002EPPI(2);1003# endif1004#endif10051006parent = debugfs_create_dir("gptimer", top);1007#ifdef TIMER_DISABLE1008D16(TIMER_DISABLE);1009D16(TIMER_ENABLE);1010D32(TIMER_STATUS);1011#endif1012#ifdef TIMER_DISABLE01013D16(TIMER_DISABLE0);1014D16(TIMER_ENABLE0);1015D32(TIMER_STATUS0);1016#endif1017#ifdef TIMER_DISABLE11018D16(TIMER_DISABLE1);1019D16(TIMER_ENABLE1);1020D32(TIMER_STATUS1);1021#endif1022/* XXX: Should convert BF561 MMR names */1023#ifdef TMRS4_DISABLE1024D16(TMRS4_DISABLE);1025D16(TMRS4_ENABLE);1026D32(TMRS4_STATUS);1027D16(TMRS8_DISABLE);1028D16(TMRS8_ENABLE);1029D32(TMRS8_STATUS);1030#endif1031GPTIMER(0);1032GPTIMER(1);1033GPTIMER(2);1034#ifdef TIMER3_CONFIG1035GPTIMER(3);1036GPTIMER(4);1037GPTIMER(5);1038GPTIMER(6);1039GPTIMER(7);1040#endif1041#ifdef TIMER8_CONFIG1042GPTIMER(8);1043GPTIMER(9);1044GPTIMER(10);1045#endif1046#ifdef TIMER11_CONFIG1047GPTIMER(11);1048#endif10491050#ifdef HMDMA0_CONTROL1051parent = debugfs_create_dir("hmdma", top);1052HMDMA(0);1053HMDMA(1);1054#endif10551056#ifdef HOST_CONTROL1057parent = debugfs_create_dir("hostdp", top);1058D16(HOST_CONTROL);1059D16(HOST_STATUS);1060D16(HOST_TIMEOUT);1061#endif10621063#ifdef IMDMA_S0_CONFIG1064parent = debugfs_create_dir("imdma", top);1065IMDMA(0);1066IMDMA(1);1067#endif10681069#ifdef KPAD_CTL1070parent = debugfs_create_dir("keypad", top);1071D16(KPAD_CTL);1072D16(KPAD_PRESCALE);1073D16(KPAD_MSEL);1074D16(KPAD_ROWCOL);1075D16(KPAD_STAT);1076D16(KPAD_SOFTEVAL);1077#endif10781079parent = debugfs_create_dir("mdma", top);1080MDMA(0);1081MDMA(1);1082#ifdef MDMA_D2_CONFIG1083MDMA(2);1084MDMA(3);1085#endif10861087#ifdef MXVR_CONFIG1088parent = debugfs_create_dir("mxvr", top);1089D16(MXVR_CONFIG);1090# ifdef MXVR_PLL_CTL_01091D32(MXVR_PLL_CTL_0);1092# endif1093D32(MXVR_STATE_0);1094D32(MXVR_STATE_1);1095D32(MXVR_INT_STAT_0);1096D32(MXVR_INT_STAT_1);1097D32(MXVR_INT_EN_0);1098D32(MXVR_INT_EN_1);1099D16(MXVR_POSITION);1100D16(MXVR_MAX_POSITION);1101D16(MXVR_DELAY);1102D16(MXVR_MAX_DELAY);1103D32(MXVR_LADDR);1104D16(MXVR_GADDR);1105D32(MXVR_AADDR);1106D32(MXVR_ALLOC_0);1107D32(MXVR_ALLOC_1);1108D32(MXVR_ALLOC_2);1109D32(MXVR_ALLOC_3);1110D32(MXVR_ALLOC_4);1111D32(MXVR_ALLOC_5);1112D32(MXVR_ALLOC_6);1113D32(MXVR_ALLOC_7);1114D32(MXVR_ALLOC_8);1115D32(MXVR_ALLOC_9);1116D32(MXVR_ALLOC_10);1117D32(MXVR_ALLOC_11);1118D32(MXVR_ALLOC_12);1119D32(MXVR_ALLOC_13);1120D32(MXVR_ALLOC_14);1121D32(MXVR_SYNC_LCHAN_0);1122D32(MXVR_SYNC_LCHAN_1);1123D32(MXVR_SYNC_LCHAN_2);1124D32(MXVR_SYNC_LCHAN_3);1125D32(MXVR_SYNC_LCHAN_4);1126D32(MXVR_SYNC_LCHAN_5);1127D32(MXVR_SYNC_LCHAN_6);1128D32(MXVR_SYNC_LCHAN_7);1129D32(MXVR_DMA0_CONFIG);1130D32(MXVR_DMA0_START_ADDR);1131D16(MXVR_DMA0_COUNT);1132D32(MXVR_DMA0_CURR_ADDR);1133D16(MXVR_DMA0_CURR_COUNT);1134D32(MXVR_DMA1_CONFIG);1135D32(MXVR_DMA1_START_ADDR);1136D16(MXVR_DMA1_COUNT);1137D32(MXVR_DMA1_CURR_ADDR);1138D16(MXVR_DMA1_CURR_COUNT);1139D32(MXVR_DMA2_CONFIG);1140D32(MXVR_DMA2_START_ADDR);1141D16(MXVR_DMA2_COUNT);1142D32(MXVR_DMA2_CURR_ADDR);1143D16(MXVR_DMA2_CURR_COUNT);1144D32(MXVR_DMA3_CONFIG);1145D32(MXVR_DMA3_START_ADDR);1146D16(MXVR_DMA3_COUNT);1147D32(MXVR_DMA3_CURR_ADDR);1148D16(MXVR_DMA3_CURR_COUNT);1149D32(MXVR_DMA4_CONFIG);1150D32(MXVR_DMA4_START_ADDR);1151D16(MXVR_DMA4_COUNT);1152D32(MXVR_DMA4_CURR_ADDR);1153D16(MXVR_DMA4_CURR_COUNT);1154D32(MXVR_DMA5_CONFIG);1155D32(MXVR_DMA5_START_ADDR);1156D16(MXVR_DMA5_COUNT);1157D32(MXVR_DMA5_CURR_ADDR);1158D16(MXVR_DMA5_CURR_COUNT);1159D32(MXVR_DMA6_CONFIG);1160D32(MXVR_DMA6_START_ADDR);1161D16(MXVR_DMA6_COUNT);1162D32(MXVR_DMA6_CURR_ADDR);1163D16(MXVR_DMA6_CURR_COUNT);1164D32(MXVR_DMA7_CONFIG);1165D32(MXVR_DMA7_START_ADDR);1166D16(MXVR_DMA7_COUNT);1167D32(MXVR_DMA7_CURR_ADDR);1168D16(MXVR_DMA7_CURR_COUNT);1169D16(MXVR_AP_CTL);1170D32(MXVR_APRB_START_ADDR);1171D32(MXVR_APRB_CURR_ADDR);1172D32(MXVR_APTB_START_ADDR);1173D32(MXVR_APTB_CURR_ADDR);1174D32(MXVR_CM_CTL);1175D32(MXVR_CMRB_START_ADDR);1176D32(MXVR_CMRB_CURR_ADDR);1177D32(MXVR_CMTB_START_ADDR);1178D32(MXVR_CMTB_CURR_ADDR);1179D32(MXVR_RRDB_START_ADDR);1180D32(MXVR_RRDB_CURR_ADDR);1181D32(MXVR_PAT_DATA_0);1182D32(MXVR_PAT_EN_0);1183D32(MXVR_PAT_DATA_1);1184D32(MXVR_PAT_EN_1);1185D16(MXVR_FRAME_CNT_0);1186D16(MXVR_FRAME_CNT_1);1187D32(MXVR_ROUTING_0);1188D32(MXVR_ROUTING_1);1189D32(MXVR_ROUTING_2);1190D32(MXVR_ROUTING_3);1191D32(MXVR_ROUTING_4);1192D32(MXVR_ROUTING_5);1193D32(MXVR_ROUTING_6);1194D32(MXVR_ROUTING_7);1195D32(MXVR_ROUTING_8);1196D32(MXVR_ROUTING_9);1197D32(MXVR_ROUTING_10);1198D32(MXVR_ROUTING_11);1199D32(MXVR_ROUTING_12);1200D32(MXVR_ROUTING_13);1201D32(MXVR_ROUTING_14);1202# ifdef MXVR_PLL_CTL_11203D32(MXVR_PLL_CTL_1);1204# endif1205D16(MXVR_BLOCK_CNT);1206# ifdef MXVR_CLK_CTL1207D32(MXVR_CLK_CTL);1208# endif1209# ifdef MXVR_CDRPLL_CTL1210D32(MXVR_CDRPLL_CTL);1211# endif1212# ifdef MXVR_FMPLL_CTL1213D32(MXVR_FMPLL_CTL);1214# endif1215# ifdef MXVR_PIN_CTL1216D16(MXVR_PIN_CTL);1217# endif1218# ifdef MXVR_SCLK_CNT1219D16(MXVR_SCLK_CNT);1220# endif1221#endif12221223#ifdef NFC_ADDR1224parent = debugfs_create_dir("nfc", top);1225D_WO(NFC_ADDR, 16);1226D_WO(NFC_CMD, 16);1227D_RO(NFC_COUNT, 16);1228D16(NFC_CTL);1229D_WO(NFC_DATA_RD, 16);1230D_WO(NFC_DATA_WR, 16);1231D_RO(NFC_ECC0, 16);1232D_RO(NFC_ECC1, 16);1233D_RO(NFC_ECC2, 16);1234D_RO(NFC_ECC3, 16);1235D16(NFC_IRQMASK);1236D16(NFC_IRQSTAT);1237D_WO(NFC_PGCTL, 16);1238D_RO(NFC_READ, 16);1239D16(NFC_RST);1240D_RO(NFC_STAT, 16);1241#endif12421243#ifdef OTP_CONTROL1244parent = debugfs_create_dir("otp", top);1245D16(OTP_CONTROL);1246D16(OTP_BEN);1247D16(OTP_STATUS);1248D32(OTP_TIMING);1249D32(OTP_DATA0);1250D32(OTP_DATA1);1251D32(OTP_DATA2);1252D32(OTP_DATA3);1253#endif12541255#ifdef PIXC_CTL1256parent = debugfs_create_dir("pixc", top);1257D16(PIXC_CTL);1258D16(PIXC_PPL);1259D16(PIXC_LPF);1260D16(PIXC_AHSTART);1261D16(PIXC_AHEND);1262D16(PIXC_AVSTART);1263D16(PIXC_AVEND);1264D16(PIXC_ATRANSP);1265D16(PIXC_BHSTART);1266D16(PIXC_BHEND);1267D16(PIXC_BVSTART);1268D16(PIXC_BVEND);1269D16(PIXC_BTRANSP);1270D16(PIXC_INTRSTAT);1271D32(PIXC_RYCON);1272D32(PIXC_GUCON);1273D32(PIXC_BVCON);1274D32(PIXC_CCBIAS);1275D32(PIXC_TC);1276#endif12771278parent = debugfs_create_dir("pll", top);1279D16(PLL_CTL);1280D16(PLL_DIV);1281D16(PLL_LOCKCNT);1282D16(PLL_STAT);1283D16(VR_CTL);1284D32(CHIPID); /* it's part of this hardware block */12851286#if defined(PPI_CONTROL) || defined(PPI0_CONTROL) || defined(PPI1_CONTROL)1287parent = debugfs_create_dir("ppi", top);1288# ifdef PPI_CONTROL1289bfin_debug_mmrs_ppi(parent, PPI_CONTROL, -1);1290# endif1291# ifdef PPI0_CONTROL1292PPI(0);1293# endif1294# ifdef PPI1_CONTROL1295PPI(1);1296# endif1297#endif12981299#ifdef PWM_CTRL1300parent = debugfs_create_dir("pwm", top);1301D16(PWM_CTRL);1302D16(PWM_STAT);1303D16(PWM_TM);1304D16(PWM_DT);1305D16(PWM_GATE);1306D16(PWM_CHA);1307D16(PWM_CHB);1308D16(PWM_CHC);1309D16(PWM_SEG);1310D16(PWM_SYNCWT);1311D16(PWM_CHAL);1312D16(PWM_CHBL);1313D16(PWM_CHCL);1314D16(PWM_LSI);1315D16(PWM_STAT2);1316#endif13171318#ifdef RSI_CONFIG1319parent = debugfs_create_dir("rsi", top);1320D32(RSI_ARGUMENT);1321D16(RSI_CEATA_CONTROL);1322D16(RSI_CLK_CONTROL);1323D16(RSI_COMMAND);1324D16(RSI_CONFIG);1325D16(RSI_DATA_CNT);1326D16(RSI_DATA_CONTROL);1327D16(RSI_DATA_LGTH);1328D32(RSI_DATA_TIMER);1329D16(RSI_EMASK);1330D16(RSI_ESTAT);1331D32(RSI_FIFO);1332D16(RSI_FIFO_CNT);1333D32(RSI_MASK0);1334D32(RSI_MASK1);1335D16(RSI_PID0);1336D16(RSI_PID1);1337D16(RSI_PID2);1338D16(RSI_PID3);1339D16(RSI_PID4);1340D16(RSI_PID5);1341D16(RSI_PID6);1342D16(RSI_PID7);1343D16(RSI_PWR_CONTROL);1344D16(RSI_RD_WAIT_EN);1345D32(RSI_RESPONSE0);1346D32(RSI_RESPONSE1);1347D32(RSI_RESPONSE2);1348D32(RSI_RESPONSE3);1349D16(RSI_RESP_CMD);1350D32(RSI_STATUS);1351D_WO(RSI_STATUSCL, 16);1352#endif13531354#ifdef RTC_ALARM1355parent = debugfs_create_dir("rtc", top);1356D32(RTC_ALARM);1357D16(RTC_ICTL);1358D16(RTC_ISTAT);1359D16(RTC_PREN);1360D32(RTC_STAT);1361D16(RTC_SWCNT);1362#endif13631364#ifdef SDH_CFG1365parent = debugfs_create_dir("sdh", top);1366D32(SDH_ARGUMENT);1367D16(SDH_CFG);1368D16(SDH_CLK_CTL);1369D16(SDH_COMMAND);1370D_RO(SDH_DATA_CNT, 16);1371D16(SDH_DATA_CTL);1372D16(SDH_DATA_LGTH);1373D32(SDH_DATA_TIMER);1374D16(SDH_E_MASK);1375D16(SDH_E_STATUS);1376D32(SDH_FIFO);1377D_RO(SDH_FIFO_CNT, 16);1378D32(SDH_MASK0);1379D32(SDH_MASK1);1380D_RO(SDH_PID0, 16);1381D_RO(SDH_PID1, 16);1382D_RO(SDH_PID2, 16);1383D_RO(SDH_PID3, 16);1384D_RO(SDH_PID4, 16);1385D_RO(SDH_PID5, 16);1386D_RO(SDH_PID6, 16);1387D_RO(SDH_PID7, 16);1388D16(SDH_PWR_CTL);1389D16(SDH_RD_WAIT_EN);1390D_RO(SDH_RESPONSE0, 32);1391D_RO(SDH_RESPONSE1, 32);1392D_RO(SDH_RESPONSE2, 32);1393D_RO(SDH_RESPONSE3, 32);1394D_RO(SDH_RESP_CMD, 16);1395D_RO(SDH_STATUS, 32);1396D_WO(SDH_STATUS_CLR, 16);1397#endif13981399#ifdef SECURE_CONTROL1400parent = debugfs_create_dir("security", top);1401D16(SECURE_CONTROL);1402D16(SECURE_STATUS);1403D32(SECURE_SYSSWT);1404#endif14051406parent = debugfs_create_dir("sic", top);1407D16(SWRST);1408D16(SYSCR);1409D16(SIC_RVECT);1410D32(SIC_IAR0);1411D32(SIC_IAR1);1412D32(SIC_IAR2);1413#ifdef SIC_IAR31414D32(SIC_IAR3);1415#endif1416#ifdef SIC_IAR41417D32(SIC_IAR4);1418D32(SIC_IAR5);1419D32(SIC_IAR6);1420#endif1421#ifdef SIC_IAR71422D32(SIC_IAR7);1423#endif1424#ifdef SIC_IAR81425D32(SIC_IAR8);1426D32(SIC_IAR9);1427D32(SIC_IAR10);1428D32(SIC_IAR11);1429#endif1430#ifdef SIC_IMASK1431D32(SIC_IMASK);1432D32(SIC_ISR);1433D32(SIC_IWR);1434#endif1435#ifdef SIC_IMASK01436D32(SIC_IMASK0);1437D32(SIC_IMASK1);1438D32(SIC_ISR0);1439D32(SIC_ISR1);1440D32(SIC_IWR0);1441D32(SIC_IWR1);1442#endif1443#ifdef SIC_IMASK21444D32(SIC_IMASK2);1445D32(SIC_ISR2);1446D32(SIC_IWR2);1447#endif1448#ifdef SICB_RVECT1449D16(SICB_SWRST);1450D16(SICB_SYSCR);1451D16(SICB_RVECT);1452D32(SICB_IAR0);1453D32(SICB_IAR1);1454D32(SICB_IAR2);1455D32(SICB_IAR3);1456D32(SICB_IAR4);1457D32(SICB_IAR5);1458D32(SICB_IAR6);1459D32(SICB_IAR7);1460D32(SICB_IMASK0);1461D32(SICB_IMASK1);1462D32(SICB_ISR0);1463D32(SICB_ISR1);1464D32(SICB_IWR0);1465D32(SICB_IWR1);1466#endif14671468parent = debugfs_create_dir("spi", top);1469#ifdef SPI0_REGBASE1470SPI(0);1471#endif1472#ifdef SPI1_REGBASE1473SPI(1);1474#endif1475#ifdef SPI2_REGBASE1476SPI(2);1477#endif14781479parent = debugfs_create_dir("sport", top);1480#ifdef SPORT0_STAT1481SPORT(0);1482#endif1483#ifdef SPORT1_STAT1484SPORT(1);1485#endif1486#ifdef SPORT2_STAT1487SPORT(2);1488#endif1489#ifdef SPORT3_STAT1490SPORT(3);1491#endif14921493#if defined(TWI_CLKDIV) || defined(TWI0_CLKDIV) || defined(TWI1_CLKDIV)1494parent = debugfs_create_dir("twi", top);1495# ifdef TWI_CLKDIV1496bfin_debug_mmrs_twi(parent, TWI_CLKDIV, -1);1497# endif1498# ifdef TWI0_CLKDIV1499TWI(0);1500# endif1501# ifdef TWI1_CLKDIV1502TWI(1);1503# endif1504#endif15051506parent = debugfs_create_dir("uart", top);1507#ifdef BFIN_UART_DLL1508bfin_debug_mmrs_uart(parent, BFIN_UART_DLL, -1);1509#endif1510#ifdef UART0_DLL1511UART(0);1512#endif1513#ifdef UART1_DLL1514UART(1);1515#endif1516#ifdef UART2_DLL1517UART(2);1518#endif1519#ifdef UART3_DLL1520UART(3);1521#endif15221523#ifdef USB_FADDR1524parent = debugfs_create_dir("usb", top);1525D16(USB_FADDR);1526D16(USB_POWER);1527D16(USB_INTRTX);1528D16(USB_INTRRX);1529D16(USB_INTRTXE);1530D16(USB_INTRRXE);1531D16(USB_INTRUSB);1532D16(USB_INTRUSBE);1533D16(USB_FRAME);1534D16(USB_INDEX);1535D16(USB_TESTMODE);1536D16(USB_GLOBINTR);1537D16(USB_GLOBAL_CTL);1538D16(USB_TX_MAX_PACKET);1539D16(USB_CSR0);1540D16(USB_TXCSR);1541D16(USB_RX_MAX_PACKET);1542D16(USB_RXCSR);1543D16(USB_COUNT0);1544D16(USB_RXCOUNT);1545D16(USB_TXTYPE);1546D16(USB_NAKLIMIT0);1547D16(USB_TXINTERVAL);1548D16(USB_RXTYPE);1549D16(USB_RXINTERVAL);1550D16(USB_TXCOUNT);1551D16(USB_EP0_FIFO);1552D16(USB_EP1_FIFO);1553D16(USB_EP2_FIFO);1554D16(USB_EP3_FIFO);1555D16(USB_EP4_FIFO);1556D16(USB_EP5_FIFO);1557D16(USB_EP6_FIFO);1558D16(USB_EP7_FIFO);1559D16(USB_OTG_DEV_CTL);1560D16(USB_OTG_VBUS_IRQ);1561D16(USB_OTG_VBUS_MASK);1562D16(USB_LINKINFO);1563D16(USB_VPLEN);1564D16(USB_HS_EOF1);1565D16(USB_FS_EOF1);1566D16(USB_LS_EOF1);1567D16(USB_APHY_CNTRL);1568D16(USB_APHY_CALIB);1569D16(USB_APHY_CNTRL2);1570D16(USB_PHY_TEST);1571D16(USB_PLLOSC_CTRL);1572D16(USB_SRP_CLKDIV);1573D16(USB_EP_NI0_TXMAXP);1574D16(USB_EP_NI0_TXCSR);1575D16(USB_EP_NI0_RXMAXP);1576D16(USB_EP_NI0_RXCSR);1577D16(USB_EP_NI0_RXCOUNT);1578D16(USB_EP_NI0_TXTYPE);1579D16(USB_EP_NI0_TXINTERVAL);1580D16(USB_EP_NI0_RXTYPE);1581D16(USB_EP_NI0_RXINTERVAL);1582D16(USB_EP_NI0_TXCOUNT);1583D16(USB_EP_NI1_TXMAXP);1584D16(USB_EP_NI1_TXCSR);1585D16(USB_EP_NI1_RXMAXP);1586D16(USB_EP_NI1_RXCSR);1587D16(USB_EP_NI1_RXCOUNT);1588D16(USB_EP_NI1_TXTYPE);1589D16(USB_EP_NI1_TXINTERVAL);1590D16(USB_EP_NI1_RXTYPE);1591D16(USB_EP_NI1_RXINTERVAL);1592D16(USB_EP_NI1_TXCOUNT);1593D16(USB_EP_NI2_TXMAXP);1594D16(USB_EP_NI2_TXCSR);1595D16(USB_EP_NI2_RXMAXP);1596D16(USB_EP_NI2_RXCSR);1597D16(USB_EP_NI2_RXCOUNT);1598D16(USB_EP_NI2_TXTYPE);1599D16(USB_EP_NI2_TXINTERVAL);1600D16(USB_EP_NI2_RXTYPE);1601D16(USB_EP_NI2_RXINTERVAL);1602D16(USB_EP_NI2_TXCOUNT);1603D16(USB_EP_NI3_TXMAXP);1604D16(USB_EP_NI3_TXCSR);1605D16(USB_EP_NI3_RXMAXP);1606D16(USB_EP_NI3_RXCSR);1607D16(USB_EP_NI3_RXCOUNT);1608D16(USB_EP_NI3_TXTYPE);1609D16(USB_EP_NI3_TXINTERVAL);1610D16(USB_EP_NI3_RXTYPE);1611D16(USB_EP_NI3_RXINTERVAL);1612D16(USB_EP_NI3_TXCOUNT);1613D16(USB_EP_NI4_TXMAXP);1614D16(USB_EP_NI4_TXCSR);1615D16(USB_EP_NI4_RXMAXP);1616D16(USB_EP_NI4_RXCSR);1617D16(USB_EP_NI4_RXCOUNT);1618D16(USB_EP_NI4_TXTYPE);1619D16(USB_EP_NI4_TXINTERVAL);1620D16(USB_EP_NI4_RXTYPE);1621D16(USB_EP_NI4_RXINTERVAL);1622D16(USB_EP_NI4_TXCOUNT);1623D16(USB_EP_NI5_TXMAXP);1624D16(USB_EP_NI5_TXCSR);1625D16(USB_EP_NI5_RXMAXP);1626D16(USB_EP_NI5_RXCSR);1627D16(USB_EP_NI5_RXCOUNT);1628D16(USB_EP_NI5_TXTYPE);1629D16(USB_EP_NI5_TXINTERVAL);1630D16(USB_EP_NI5_RXTYPE);1631D16(USB_EP_NI5_RXINTERVAL);1632D16(USB_EP_NI5_TXCOUNT);1633D16(USB_EP_NI6_TXMAXP);1634D16(USB_EP_NI6_TXCSR);1635D16(USB_EP_NI6_RXMAXP);1636D16(USB_EP_NI6_RXCSR);1637D16(USB_EP_NI6_RXCOUNT);1638D16(USB_EP_NI6_TXTYPE);1639D16(USB_EP_NI6_TXINTERVAL);1640D16(USB_EP_NI6_RXTYPE);1641D16(USB_EP_NI6_RXINTERVAL);1642D16(USB_EP_NI6_TXCOUNT);1643D16(USB_EP_NI7_TXMAXP);1644D16(USB_EP_NI7_TXCSR);1645D16(USB_EP_NI7_RXMAXP);1646D16(USB_EP_NI7_RXCSR);1647D16(USB_EP_NI7_RXCOUNT);1648D16(USB_EP_NI7_TXTYPE);1649D16(USB_EP_NI7_TXINTERVAL);1650D16(USB_EP_NI7_RXTYPE);1651D16(USB_EP_NI7_RXINTERVAL);1652D16(USB_EP_NI7_TXCOUNT);1653D16(USB_DMA_INTERRUPT);1654D16(USB_DMA0CONTROL);1655D16(USB_DMA0ADDRLOW);1656D16(USB_DMA0ADDRHIGH);1657D16(USB_DMA0COUNTLOW);1658D16(USB_DMA0COUNTHIGH);1659D16(USB_DMA1CONTROL);1660D16(USB_DMA1ADDRLOW);1661D16(USB_DMA1ADDRHIGH);1662D16(USB_DMA1COUNTLOW);1663D16(USB_DMA1COUNTHIGH);1664D16(USB_DMA2CONTROL);1665D16(USB_DMA2ADDRLOW);1666D16(USB_DMA2ADDRHIGH);1667D16(USB_DMA2COUNTLOW);1668D16(USB_DMA2COUNTHIGH);1669D16(USB_DMA3CONTROL);1670D16(USB_DMA3ADDRLOW);1671D16(USB_DMA3ADDRHIGH);1672D16(USB_DMA3COUNTLOW);1673D16(USB_DMA3COUNTHIGH);1674D16(USB_DMA4CONTROL);1675D16(USB_DMA4ADDRLOW);1676D16(USB_DMA4ADDRHIGH);1677D16(USB_DMA4COUNTLOW);1678D16(USB_DMA4COUNTHIGH);1679D16(USB_DMA5CONTROL);1680D16(USB_DMA5ADDRLOW);1681D16(USB_DMA5ADDRHIGH);1682D16(USB_DMA5COUNTLOW);1683D16(USB_DMA5COUNTHIGH);1684D16(USB_DMA6CONTROL);1685D16(USB_DMA6ADDRLOW);1686D16(USB_DMA6ADDRHIGH);1687D16(USB_DMA6COUNTLOW);1688D16(USB_DMA6COUNTHIGH);1689D16(USB_DMA7CONTROL);1690D16(USB_DMA7ADDRLOW);1691D16(USB_DMA7ADDRHIGH);1692D16(USB_DMA7COUNTLOW);1693D16(USB_DMA7COUNTHIGH);1694#endif16951696#ifdef WDOG_CNT1697parent = debugfs_create_dir("watchdog", top);1698D32(WDOG_CNT);1699D16(WDOG_CTL);1700D32(WDOG_STAT);1701#endif1702#ifdef WDOGA_CNT1703parent = debugfs_create_dir("watchdog", top);1704D32(WDOGA_CNT);1705D16(WDOGA_CTL);1706D32(WDOGA_STAT);1707D32(WDOGB_CNT);1708D16(WDOGB_CTL);1709D32(WDOGB_STAT);1710#endif17111712/* BF533 glue */1713#ifdef FIO_FLAG_D1714#define PORTFIO FIO_FLAG_D1715#endif1716/* BF561 glue */1717#ifdef FIO0_FLAG_D1718#define PORTFIO FIO0_FLAG_D1719#endif1720#ifdef FIO1_FLAG_D1721#define PORTGIO FIO1_FLAG_D1722#endif1723#ifdef FIO2_FLAG_D1724#define PORTHIO FIO2_FLAG_D1725#endif1726parent = debugfs_create_dir("port", top);1727#ifdef PORTFIO1728PORT(PORTFIO, 'F');1729#endif1730#ifdef PORTGIO1731PORT(PORTGIO, 'G');1732#endif1733#ifdef PORTHIO1734PORT(PORTHIO, 'H');1735#endif17361737#ifdef __ADSPBF51x__1738D16(PORTF_FER);1739D16(PORTF_DRIVE);1740D16(PORTF_HYSTERESIS);1741D16(PORTF_MUX);17421743D16(PORTG_FER);1744D16(PORTG_DRIVE);1745D16(PORTG_HYSTERESIS);1746D16(PORTG_MUX);17471748D16(PORTH_FER);1749D16(PORTH_DRIVE);1750D16(PORTH_HYSTERESIS);1751D16(PORTH_MUX);17521753D16(MISCPORT_DRIVE);1754D16(MISCPORT_HYSTERESIS);1755#endif /* BF51x */17561757#ifdef __ADSPBF52x__1758D16(PORTF_FER);1759D16(PORTF_DRIVE);1760D16(PORTF_HYSTERESIS);1761D16(PORTF_MUX);1762D16(PORTF_SLEW);17631764D16(PORTG_FER);1765D16(PORTG_DRIVE);1766D16(PORTG_HYSTERESIS);1767D16(PORTG_MUX);1768D16(PORTG_SLEW);17691770D16(PORTH_FER);1771D16(PORTH_DRIVE);1772D16(PORTH_HYSTERESIS);1773D16(PORTH_MUX);1774D16(PORTH_SLEW);17751776D16(MISCPORT_DRIVE);1777D16(MISCPORT_HYSTERESIS);1778D16(MISCPORT_SLEW);1779#endif /* BF52x */17801781#ifdef BF537_FAMILY1782D16(PORTF_FER);1783D16(PORTG_FER);1784D16(PORTH_FER);1785D16(PORT_MUX);1786#endif /* BF534 BF536 BF537 */17871788#ifdef BF538_FAMILY1789D16(PORTCIO_FER);1790D16(PORTCIO);1791D16(PORTCIO_CLEAR);1792D16(PORTCIO_SET);1793D16(PORTCIO_TOGGLE);1794D16(PORTCIO_DIR);1795D16(PORTCIO_INEN);17961797D16(PORTDIO);1798D16(PORTDIO_CLEAR);1799D16(PORTDIO_DIR);1800D16(PORTDIO_FER);1801D16(PORTDIO_INEN);1802D16(PORTDIO_SET);1803D16(PORTDIO_TOGGLE);18041805D16(PORTEIO);1806D16(PORTEIO_CLEAR);1807D16(PORTEIO_DIR);1808D16(PORTEIO_FER);1809D16(PORTEIO_INEN);1810D16(PORTEIO_SET);1811D16(PORTEIO_TOGGLE);1812#endif /* BF538 BF539 */18131814#ifdef __ADSPBF54x__1815{1816int num;1817unsigned long base;1818char *_buf, buf[32];18191820base = PORTA_FER;1821for (num = 0; num < 10; ++num) {1822PORT(base, num);1823base += sizeof(struct bfin_gpio_regs);1824}18251826#define __PINT(uname, lname) __REGS(pint, #uname, lname)1827parent = debugfs_create_dir("pint", top);1828base = PINT0_MASK_SET;1829for (num = 0; num < 4; ++num) {1830_buf = REGS_STR_PFX(buf, PINT, num);1831__PINT(MASK_SET, mask_set);1832__PINT(MASK_CLEAR, mask_clear);1833__PINT(IRQ, irq);1834__PINT(ASSIGN, assign);1835__PINT(EDGE_SET, edge_set);1836__PINT(EDGE_CLEAR, edge_clear);1837__PINT(INVERT_SET, invert_set);1838__PINT(INVERT_CLEAR, invert_clear);1839__PINT(PINSTATE, pinstate);1840__PINT(LATCH, latch);1841base += sizeof(struct bfin_pint_regs);1842}18431844}1845#endif /* BF54x */18461847debug_mmrs_dentry = top;18481849return 0;1850}1851module_init(bfin_debug_mmrs_init);18521853static void __exit bfin_debug_mmrs_exit(void)1854{1855debugfs_remove_recursive(debug_mmrs_dentry);1856}1857module_exit(bfin_debug_mmrs_exit);18581859MODULE_LICENSE("GPL");186018611862