/* SPDX-License-Identifier: GPL-2.0 */
/****************************************************************************/
/*
* m525xsim . h - - ColdFire 525 x System Integration Module support .
*
* ( C ) Copyright 2012 , Steven king < sfking @ fdwdc . com >
* ( C ) Copyright 2002 , Greg Ungerer ( gerg @ snapgear . com )
*/
/****************************************************************************/
#ifndef m525xsim_h
#define m525xsim_h
/****************************************************************************/
/*
* This header supports ColdFire 5249 , 5251 and 5253 . There are a few
* little differences between them , but most of the peripheral support
* can be used by all of them .
*/
#define CPU_NAME "COLDFIRE(m525x)"
#define CPU_INSTR_PER_JIFFY 3
#define MCF_BUSCLK (MCF_CLK / 2 )
#include <asm /m52xxacr.h>
/*
* The 525 x has a second MBAR region , define its address .
*/
#define MCF_MBAR2 0 x80000000
/*
* Define the 525 x SIM register set addresses .
*/
#define MCFSIM_RSR (MCF_MBAR + 0 x00) /* Reset Status */
#define MCFSIM_SYPCR (MCF_MBAR + 0 x01) /* System Protection */
#define MCFSIM_SWIVR (MCF_MBAR + 0 x02) /* SW Watchdog intr */
#define MCFSIM_SWSR (MCF_MBAR + 0 x03) /* SW Watchdog srv */
#define MCFSIM_MPARK (MCF_MBAR + 0 x0C) /* BUS Master Ctrl */
#define MCFSIM_IPR (MCF_MBAR + 0 x40) /* Interrupt Pending */
#define MCFSIM_IMR (MCF_MBAR + 0 x44) /* Interrupt Mask */
#define MCFSIM_ICR0 (MCF_MBAR + 0 x4c) /* Intr Ctrl reg 0 */
#define MCFSIM_ICR1 (MCF_MBAR + 0 x4d) /* Intr Ctrl reg 1 */
#define MCFSIM_ICR2 (MCF_MBAR + 0 x4e) /* Intr Ctrl reg 2 */
#define MCFSIM_ICR3 (MCF_MBAR + 0 x4f) /* Intr Ctrl reg 3 */
#define MCFSIM_ICR4 (MCF_MBAR + 0 x50) /* Intr Ctrl reg 4 */
#define MCFSIM_ICR5 (MCF_MBAR + 0 x51) /* Intr Ctrl reg 5 */
#define MCFSIM_ICR6 (MCF_MBAR + 0 x52) /* Intr Ctrl reg 6 */
#define MCFSIM_ICR7 (MCF_MBAR + 0 x53) /* Intr Ctrl reg 7 */
#define MCFSIM_ICR8 (MCF_MBAR + 0 x54) /* Intr Ctrl reg 8 */
#define MCFSIM_ICR9 (MCF_MBAR + 0 x55) /* Intr Ctrl reg 9 */
#define MCFSIM_ICR10 (MCF_MBAR + 0 x56) /* Intr Ctrl reg 10 */
#define MCFSIM_ICR11 (MCF_MBAR + 0 x57) /* Intr Ctrl reg 11 */
#define MCFSIM_CSAR0 (MCF_MBAR + 0 x80) /* CS 0 Address reg */
#define MCFSIM_CSMR0 (MCF_MBAR + 0 x84) /* CS 0 Mask reg */
#define MCFSIM_CSCR0 (MCF_MBAR + 0 x8a) /* CS 0 Control reg */
#define MCFSIM_CSAR1 (MCF_MBAR + 0 x8c) /* CS 1 Address reg */
#define MCFSIM_CSMR1 (MCF_MBAR + 0 x90) /* CS 1 Mask reg */
#define MCFSIM_CSCR1 (MCF_MBAR + 0 x96) /* CS 1 Control reg */
#define MCFSIM_CSAR2 (MCF_MBAR + 0 x98) /* CS 2 Address reg */
#define MCFSIM_CSMR2 (MCF_MBAR + 0 x9c) /* CS 2 Mask reg */
#define MCFSIM_CSCR2 (MCF_MBAR + 0 xa2) /* CS 2 Control reg */
#define MCFSIM_CSAR3 (MCF_MBAR + 0 xa4) /* CS 3 Address reg */
#define MCFSIM_CSMR3 (MCF_MBAR + 0 xa8) /* CS 3 Mask reg */
#define MCFSIM_CSCR3 (MCF_MBAR + 0 xae) /* CS 3 Control reg */
#define MCFSIM_CSAR4 (MCF_MBAR + 0 xb0) /* CS 4 Address reg */
#define MCFSIM_CSMR4 (MCF_MBAR + 0 xb4) /* CS 4 Mask reg */
#define MCFSIM_CSCR4 (MCF_MBAR + 0 xba) /* CS 4 Control reg */
#define MCFSIM_DCR (MCF_MBAR + 0 x100) /* DRAM Control */
#define MCFSIM_DACR0 (MCF_MBAR + 0 x108) /* DRAM 0 Addr/Ctrl */
#define MCFSIM_DMR0 (MCF_MBAR + 0 x10c) /* DRAM 0 Mask */
#define MCFSIM_DACR1 (MCF_MBAR + 0 x110) /* DRAM 1 Addr/Ctrl */
#define MCFSIM_DMR1 (MCF_MBAR + 0 x114) /* DRAM 1 Mask */
/*
* Secondary Interrupt Controller ( in MBAR2 )
*/
#define MCFINTC2_INTBASE (MCF_MBAR2 + 0 x168) /* Base Vector Reg */
#define MCFINTC2_INTPRI1 (MCF_MBAR2 + 0 x140) /* 0-7 priority */
#define MCFINTC2_INTPRI2 (MCF_MBAR2 + 0 x144) /* 8-15 priority */
#define MCFINTC2_INTPRI3 (MCF_MBAR2 + 0 x148) /* 16-23 priority */
#define MCFINTC2_INTPRI4 (MCF_MBAR2 + 0 x14c) /* 24-31 priority */
#define MCFINTC2_INTPRI5 (MCF_MBAR2 + 0 x150) /* 32-39 priority */
#define MCFINTC2_INTPRI6 (MCF_MBAR2 + 0 x154) /* 40-47 priority */
#define MCFINTC2_INTPRI7 (MCF_MBAR2 + 0 x158) /* 48-55 priority */
#define MCFINTC2_INTPRI8 (MCF_MBAR2 + 0 x15c) /* 56-63 priority */
#define MCFINTC2_INTPRI_REG(i) (MCFINTC2_INTPRI1 + \
((((i) - MCFINTC2_VECBASE) / 8 ) * 4 ))
#define MCFINTC2_INTPRI_BITS(b, i) ((b) << (((i) % 8 ) * 4 ))
/*
* Timer module .
*/
#define MCFTIMER_BASE1 (MCF_MBAR + 0 x140) /* Base of TIMER1 */
#define MCFTIMER_BASE2 (MCF_MBAR + 0 x180) /* Base of TIMER2 */
/*
* UART module .
*/
#define MCFUART_BASE0 (MCF_MBAR + 0 x1c0) /* Base address UART0 */
#define MCFUART_BASE1 (MCF_MBAR + 0 x200) /* Base address UART1 */
/*
* QSPI module .
*/
#define MCFQSPI_BASE (MCF_MBAR + 0 x400) /* Base address QSPI */
#define MCFQSPI_SIZE 0 x40 /* Register set size */
#ifdef CONFIG_M5249
#define MCFQSPI_CS0 29
#define MCFQSPI_CS1 24
#define MCFQSPI_CS2 21
#define MCFQSPI_CS3 22
#else
#define MCFQSPI_CS0 15
#define MCFQSPI_CS1 16
#define MCFQSPI_CS2 24
#define MCFQSPI_CS3 28
#endif
/*
* I2C module .
*/
#define MCFI2C_BASE0 (MCF_MBAR + 0 x280) /* Base address I2C0 */
#define MCFI2C_SIZE0 0 x20 /* Register set size */
#define MCFI2C_BASE1 (MCF_MBAR2 + 0 x440) /* Base address I2C1 */
#define MCFI2C_SIZE1 0 x20 /* Register set size */
/*
* DMA unit base addresses .
*/
#define MCFDMA_BASE0 (MCF_MBAR + 0 x300) /* Base address DMA 0 */
#define MCFDMA_BASE1 (MCF_MBAR + 0 x340) /* Base address DMA 1 */
#define MCFDMA_BASE2 (MCF_MBAR + 0 x380) /* Base address DMA 2 */
#define MCFDMA_BASE3 (MCF_MBAR + 0 x3C0) /* Base address DMA 3 */
/*
* Some symbol defines for the above . . .
*/
#define MCFSIM_SWDICR MCFSIM_ICR0 /* Watchdog timer ICR */
#define MCFSIM_TIMER1ICR MCFSIM_ICR1 /* Timer 1 ICR */
#define MCFSIM_TIMER2ICR MCFSIM_ICR2 /* Timer 2 ICR */
#define MCFSIM_I2CICR MCFSIM_ICR3 /* I2C ICR */
#define MCFSIM_UART1ICR MCFSIM_ICR4 /* UART 1 ICR */
#define MCFSIM_UART2ICR MCFSIM_ICR5 /* UART 2 ICR */
#define MCFSIM_DMA0ICR MCFSIM_ICR6 /* DMA 0 ICR */
#define MCFSIM_DMA1ICR MCFSIM_ICR7 /* DMA 1 ICR */
#define MCFSIM_DMA2ICR MCFSIM_ICR8 /* DMA 2 ICR */
#define MCFSIM_DMA3ICR MCFSIM_ICR9 /* DMA 3 ICR */
#define MCFSIM_QSPIICR MCFSIM_ICR10 /* QSPI ICR */
/*
* Define system peripheral IRQ usage .
*/
#define MCF_IRQ_QSPI 28 /* QSPI, Level 4 */
#define MCF_IRQ_I2C0 29
#define MCF_IRQ_TIMER 30 /* Timer0, Level 6 */
#define MCF_IRQ_PROFILER 31 /* Timer1, Level 7 */
#define MCF_IRQ_UART0 73 /* UART0 */
#define MCF_IRQ_UART1 74 /* UART1 */
/*
* Define the base interrupt for the second interrupt controller .
* We set it to 128 , out of the way of the base interrupts , and plenty
* of room for its 64 interrupts .
*/
#define MCFINTC2_VECBASE 128
#define MCF_IRQ_GPIO0 (MCFINTC2_VECBASE + 32 )
#define MCF_IRQ_GPIO1 (MCFINTC2_VECBASE + 33 )
#define MCF_IRQ_GPIO2 (MCFINTC2_VECBASE + 34 )
#define MCF_IRQ_GPIO3 (MCFINTC2_VECBASE + 35 )
#define MCF_IRQ_GPIO4 (MCFINTC2_VECBASE + 36 )
#define MCF_IRQ_GPIO5 (MCFINTC2_VECBASE + 37 )
#define MCF_IRQ_GPIO6 (MCFINTC2_VECBASE + 38 )
#define MCF_IRQ_GPIO7 (MCFINTC2_VECBASE + 39 )
#define MCF_IRQ_USBWUP (MCFINTC2_VECBASE + 40 )
#define MCF_IRQ_I2C1 (MCFINTC2_VECBASE + 62 )
/*
* General purpose IO registers ( in MBAR2 ) .
*/
#define MCFSIM2_GPIOREAD (MCF_MBAR2 + 0 x000) /* GPIO read values */
#define MCFSIM2_GPIOWRITE (MCF_MBAR2 + 0 x004) /* GPIO write values */
#define MCFSIM2_GPIOENABLE (MCF_MBAR2 + 0 x008) /* GPIO enabled */
#define MCFSIM2_GPIOFUNC (MCF_MBAR2 + 0 x00C) /* GPIO function */
#define MCFSIM2_GPIO1READ (MCF_MBAR2 + 0 x0B0) /* GPIO1 read values */
#define MCFSIM2_GPIO1WRITE (MCF_MBAR2 + 0 x0B4) /* GPIO1 write values */
#define MCFSIM2_GPIO1ENABLE (MCF_MBAR2 + 0 x0B8) /* GPIO1 enabled */
#define MCFSIM2_GPIO1FUNC (MCF_MBAR2 + 0 x0BC) /* GPIO1 function */
#define MCFSIM2_GPIOINTSTAT (MCF_MBAR2 + 0 xc0) /* GPIO intr status */
#define MCFSIM2_GPIOINTCLEAR (MCF_MBAR2 + 0 xc0) /* GPIO intr clear */
#define MCFSIM2_GPIOINTENABLE (MCF_MBAR2 + 0 xc4) /* GPIO intr enable */
#define MCFSIM2_DMAROUTE (MCF_MBAR2 + 0 x188) /* DMA routing */
#define MCFSIM2_IDECONFIG1 (MCF_MBAR2 + 0 x18c) /* IDEconfig1 */
#define MCFSIM2_IDECONFIG2 (MCF_MBAR2 + 0 x190) /* IDEconfig2 */
/*
* Generic GPIO support
*/
#define MCFGPIO_PIN_MAX 64
#ifdef CONFIG_M5249
#define MCFGPIO_IRQ_MAX -1
#define MCFGPIO_IRQ_VECBASE -1
#else
#define MCFGPIO_IRQ_MAX 7
#define MCFGPIO_IRQ_VECBASE MCF_IRQ_GPIO0
#endif
/****************************************************************************/
#ifdef __ASSEMBLER__
#ifdef CONFIG_M5249C3
/*
* The M5249C3 board needs a little help getting all its SIM devices
* initialized at kernel start time . dBUG doesn ' t set much up , so
* we need to do it manually .
*/
.macro m5249c3_setup
/*
* Set MBAR1 and MBAR2 , just incase they are not set .
*/
movel #0 x10000001,%a0
movec %a0,%MBAR /* map MBAR region */
subql #1 ,%a0 /* get MBAR address in a0 */
movel #0 x80000001,%a1
movec %a1,#3086 /* map MBAR2 region */
subql #1 ,%a1 /* get MBAR2 address in a1 */
/*
* Move secondary interrupts to their base ( 128 ) .
*/
moveb #MCFINTC2_VECBASE ,%d0
moveb %d0,0 x16b(%a1) /* interrupt base register */
/*
* Work around broken CSMR0 / DRAM vector problem .
*/
movel #0 x001F0021,%d0 /* disable C/I bit */
movel %d0,0 x84(%a0) /* set CSMR0 */
/*
* Disable the PLL firstly . ( Who knows what state it is
* in here ! ) .
*/
movel 0 x180(%a1),%d0 /* get current PLL value */
andl #0 xfffffffe,%d0 /* PLL bypass first */
movel %d0,0 x180(%a1) /* set PLL register */
nop
#if CONFIG_CLOCK_FREQ == 140000000
/*
* Set initial clock frequency . This assumes M5249C3 board
* is fitted with 11 . 2896 MHz crystal . It will program the
* PLL for 140 MHz . Lets go fast : - )
*/
movel #0 x125a40f0,%d0 /* set for 140MHz */
movel %d0,0 x180(%a1) /* set PLL register */
orl #0 x1,%d0
movel %d0,0 x180(%a1) /* set PLL register */
#endif
/*
* Setup CS1 for ethernet controller .
* ( Setup as per M5249C3 doco ) .
*/
movel #0 xe0000000,%d0 /* CS1 mapped at 0xe0000000 */
movel %d0,0 x8c(%a0)
movel #0 x001f0021,%d0 /* CS1 size of 1Mb */
movel %d0,0 x90(%a0)
movew #0 x0080,%d0 /* CS1 = 16bit port, AA */
movew %d0,0 x96(%a0)
/*
* Setup CS2 for IDE interface .
*/
movel #0 x50000000,%d0 /* CS2 mapped at 0x50000000 */
movel %d0,0 x98(%a0)
movel #0 x001f0001,%d0 /* CS2 size of 1MB */
movel %d0,0 x9c(%a0)
movew #0 x0080,%d0 /* CS2 = 16bit, TA */
movew %d0,0 xa2(%a0)
movel #0 x00107000,%d0 /* IDEconfig1 */
movel %d0,0 x18c(%a1)
movel #0 x000c0400,%d0 /* IDEconfig2 */
movel %d0,0 x190(%a1)
movel #0 x00080000,%d0 /* GPIO19, IDE reset bit */
orl %d0,0 xc(%a1) /* function GPIO19 */
orl %d0,0 x8(%a1) /* enable GPIO19 as output */
orl %d0,0 x4(%a1) /* de-assert IDE reset */
.endm
#define PLATFORM_SETUP m5249c3_setup
#endif /* CONFIG_M5249C3 */
#endif /* __ASSEMBLER__ */
/****************************************************************************/
#endif /* m525xsim_h */
Messung V0.5 in Prozent C=92 H=93 G=92
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-09-27)
¤
*© Formatika GbR, Deutschland