mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-10-28 23:08:52 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
18
arch/m68k/68000/Makefile
Normal file
18
arch/m68k/68000/Makefile
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
##################################################
|
||||
#
|
||||
# Makefile for 68000 core based cpus
|
||||
#
|
||||
# 2012.10.21, Luis Alves <ljalvs@gmail.com>
|
||||
# Merged all 68000 based cpu's config
|
||||
# files into a single directory.
|
||||
#
|
||||
|
||||
# 68328, 68EZ328, 68VZ328
|
||||
|
||||
obj-y += entry.o ints.o timers.o
|
||||
obj-$(CONFIG_M68328) += m68328.o
|
||||
obj-$(CONFIG_M68EZ328) += m68EZ328.o
|
||||
obj-$(CONFIG_M68VZ328) += m68VZ328.o
|
||||
obj-$(CONFIG_ROM) += romvec.o
|
||||
|
||||
extra-y := head.o
|
||||
3204
arch/m68k/68000/bootlogo-vz.h
Normal file
3204
arch/m68k/68000/bootlogo-vz.h
Normal file
File diff suppressed because it is too large
Load diff
270
arch/m68k/68000/bootlogo.h
Normal file
270
arch/m68k/68000/bootlogo.h
Normal file
|
|
@ -0,0 +1,270 @@
|
|||
#define bootlogo_width 160
|
||||
#define bootlogo_height 160
|
||||
unsigned char __attribute__ ((aligned(16))) bootlogo_bits[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x80, 0x08, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00,
|
||||
0x00, 0xff, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0xf8, 0x80, 0x0f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x50, 0x04, 0x00, 0x00, 0x00, 0x78, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x03, 0x00, 0x00,
|
||||
0x00, 0x78, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x40,
|
||||
0xa8, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x28, 0x01, 0x00, 0x00,
|
||||
0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x20, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70,
|
||||
0x54, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x80, 0x01, 0x3a, 0x78, 0x80, 0x0e,
|
||||
0x50, 0xc0, 0x03, 0x0e, 0x00, 0x20, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
|
||||
0x00, 0x3e, 0xf0, 0x83, 0x1f, 0xfc, 0xe0, 0x0f, 0x78, 0xf8, 0x87, 0x1f,
|
||||
0x00, 0x18, 0x00, 0x30, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf8, 0xc3,
|
||||
0x1f, 0xfc, 0xe0, 0x0f, 0x78, 0xf8, 0x87, 0x0f, 0x00, 0x20, 0x00, 0x10,
|
||||
0x55, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc0, 0x03, 0x9f, 0xf3, 0x80, 0x0f,
|
||||
0x78, 0x80, 0xc7, 0x0e, 0x00, 0x18, 0x00, 0x20, 0xaa, 0x00, 0x00, 0x00,
|
||||
0x00, 0x1e, 0xe0, 0x03, 0x9f, 0xf1, 0x80, 0x07, 0x78, 0x80, 0x67, 0x00,
|
||||
0x00, 0x24, 0x00, 0x18, 0x55, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x01,
|
||||
0x5e, 0xf0, 0x80, 0x07, 0x3c, 0x00, 0x2f, 0x00, 0x00, 0x14, 0x00, 0x20,
|
||||
0xaa, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x01, 0x7f, 0xf0, 0x80, 0x07,
|
||||
0x3c, 0x00, 0x3f, 0x00, 0x00, 0x08, 0x00, 0x18, 0x55, 0x00, 0x00, 0x00,
|
||||
0x00, 0x0f, 0xe0, 0x00, 0x3f, 0xf0, 0xc0, 0x03, 0x1e, 0x00, 0x1f, 0x00,
|
||||
0x00, 0x14, 0x00, 0x28, 0xaa, 0x00, 0x00, 0x00, 0x80, 0x0f, 0xf0, 0x00,
|
||||
0x1f, 0xf0, 0xc0, 0x03, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x0c,
|
||||
0x54, 0x00, 0x00, 0x00, 0x80, 0x07, 0x78, 0x00, 0x1f, 0x78, 0xc0, 0x03,
|
||||
0x1f, 0x00, 0x1e, 0x00, 0x00, 0x0a, 0x00, 0x12, 0xa8, 0x00, 0x00, 0x00,
|
||||
0x80, 0x07, 0x78, 0x00, 0x1f, 0x78, 0xe0, 0x03, 0x1f, 0x00, 0x1f, 0x00,
|
||||
0x00, 0x04, 0x00, 0x0a, 0x54, 0x00, 0x00, 0x00, 0x80, 0x07, 0x78, 0x80,
|
||||
0x0f, 0x78, 0xe0, 0x03, 0x1f, 0x00, 0x1e, 0x00, 0x00, 0x0a, 0x00, 0x08,
|
||||
0x50, 0x01, 0x00, 0x00, 0x84, 0x03, 0x78, 0x80, 0x07, 0x3c, 0xe0, 0xc1,
|
||||
0x0f, 0x00, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x06, 0xa8, 0x00, 0x00, 0x00,
|
||||
0xc0, 0x03, 0x78, 0xc0, 0x07, 0x3c, 0xe0, 0xc1, 0x0f, 0x00, 0x1f, 0x00,
|
||||
0x00, 0x0a, 0x00, 0x08, 0x50, 0x01, 0x00, 0x00, 0xc2, 0x01, 0x38, 0xc0,
|
||||
0x07, 0x3c, 0xe0, 0x60, 0x0f, 0x80, 0x1e, 0x00, 0x00, 0x05, 0x00, 0x07,
|
||||
0xa0, 0x00, 0x00, 0x80, 0xe0, 0x01, 0x3c, 0xc0, 0x07, 0x3c, 0xf0, 0xa0,
|
||||
0x07, 0xc0, 0x1c, 0x00, 0x00, 0x0a, 0x80, 0x08, 0xa0, 0x02, 0x00, 0xa0,
|
||||
0xe0, 0x21, 0x1c, 0xc0, 0x03, 0x1c, 0x71, 0x90, 0x47, 0x40, 0x3c, 0x04,
|
||||
0x00, 0x05, 0x80, 0x06, 0xa0, 0x02, 0x00, 0x20, 0xe0, 0x31, 0x1e, 0xc3,
|
||||
0x03, 0x1e, 0x79, 0x98, 0x47, 0x60, 0x38, 0x04, 0x00, 0x15, 0x40, 0x0a,
|
||||
0xa0, 0x0a, 0x00, 0x1a, 0xe0, 0x19, 0x9e, 0xe1, 0x01, 0x9e, 0x78, 0xcc,
|
||||
0xa7, 0x32, 0x78, 0x02, 0x80, 0x2a, 0x40, 0x05, 0x80, 0x2a, 0x00, 0x05,
|
||||
0xe0, 0x0d, 0x9e, 0xe0, 0x01, 0xde, 0x78, 0xc6, 0x97, 0x1b, 0x78, 0x03,
|
||||
0x80, 0x52, 0x30, 0x0a, 0x00, 0x95, 0xd2, 0x0a, 0xe0, 0x0f, 0xfe, 0xe0,
|
||||
0x00, 0x7e, 0xf8, 0x87, 0x9f, 0x0f, 0xf8, 0x01, 0x00, 0xa1, 0x0e, 0x15,
|
||||
0x80, 0x55, 0x55, 0x01, 0xe0, 0x01, 0x3c, 0xf0, 0x00, 0x3c, 0xf0, 0x80,
|
||||
0x8f, 0x0f, 0x70, 0x00, 0x00, 0x81, 0x02, 0x14, 0x00, 0x54, 0x55, 0x00,
|
||||
0xc0, 0x01, 0x3c, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x07, 0x03, 0x70, 0x00,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x01, 0x00, 0x11, 0x09, 0x00, 0x04, 0x00, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
|
||||
0x00, 0x20, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x49, 0x32, 0x49, 0x49, 0x91,
|
||||
0x24, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x20, 0x49, 0x0a, 0x09, 0xc9, 0x92, 0x14, 0x81, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x49,
|
||||
0x18, 0x01, 0x49, 0x92, 0x0c, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x49, 0x30, 0x01, 0x49, 0x92,
|
||||
0x14, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x08, 0x69, 0x22, 0x09, 0x49, 0xd2, 0x24, 0x24, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x51,
|
||||
0x1a, 0x09, 0x49, 0xa2, 0x44, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
|
||||
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x87, 0x08, 0x00, 0x00, 0x00,
|
||||
0xf2, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x88, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09,
|
||||
0x09, 0x01, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x80,
|
||||
0x88, 0x86, 0x48, 0x04, 0x09, 0x08, 0x01, 0x01, 0x09, 0x01, 0x10, 0x71,
|
||||
0x88, 0x66, 0x00, 0x00, 0x00, 0x40, 0x24, 0x80, 0x88, 0x89, 0x48, 0x84,
|
||||
0x08, 0x08, 0x01, 0x01, 0x09, 0x01, 0x10, 0x89, 0x88, 0x99, 0x00, 0x00,
|
||||
0x00, 0x40, 0x24, 0x80, 0x88, 0x88, 0x88, 0x82, 0xf8, 0xf0, 0xe0, 0x80,
|
||||
0xf0, 0xf8, 0x13, 0x81, 0x88, 0x88, 0x00, 0x00, 0x00, 0x40, 0x24, 0x80,
|
||||
0x88, 0x88, 0x08, 0x81, 0x08, 0x09, 0x01, 0x41, 0x08, 0x01, 0xf0, 0xf0,
|
||||
0x88, 0x88, 0x00, 0x00, 0x00, 0x40, 0x24, 0x80, 0x88, 0x88, 0x88, 0x42,
|
||||
0x08, 0x09, 0x01, 0x21, 0x08, 0x01, 0x10, 0x88, 0x88, 0x88, 0x00, 0x00,
|
||||
0x00, 0x40, 0x46, 0x88, 0x88, 0x88, 0x4c, 0x44, 0x08, 0x09, 0x09, 0x11,
|
||||
0x08, 0x01, 0x10, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x80, 0x85, 0x87,
|
||||
0x88, 0x08, 0x4b, 0x24, 0xf0, 0xf0, 0xf0, 0xf8, 0xf1, 0x00, 0x10, 0x70,
|
||||
0x89, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
|
||||
0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xff, 0x3f, 0x0f, 0x00, 0x00, 0x08, 0x02, 0x04, 0x00,
|
||||
0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0x1f, 0x00, 0x00, 0x48, 0x62, 0xc4, 0x31, 0x4a, 0x18, 0x3c, 0x03,
|
||||
0x21, 0x45, 0x92, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0x00,
|
||||
0x48, 0x92, 0x24, 0x48, 0xb6, 0x24, 0x88, 0x04, 0x21, 0x4b, 0x92, 0x00,
|
||||
0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xa8, 0xf2, 0x24, 0x48,
|
||||
0x92, 0x3c, 0x88, 0x04, 0x21, 0x49, 0x62, 0x00, 0x00, 0x00, 0x80, 0xff,
|
||||
0xff, 0x3f, 0x00, 0x00, 0x10, 0x11, 0x24, 0x48, 0x92, 0x04, 0x88, 0x04,
|
||||
0x21, 0x49, 0x62, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00,
|
||||
0x10, 0x11, 0x24, 0x48, 0x92, 0x04, 0x88, 0x04, 0x21, 0x49, 0x93, 0x00,
|
||||
0x00, 0x00, 0x80, 0xff, 0xcf, 0x7e, 0x00, 0x00, 0x10, 0xe1, 0xc4, 0x31,
|
||||
0x92, 0x38, 0x30, 0x03, 0x2f, 0x89, 0x92, 0x00, 0x00, 0x00, 0x80, 0xe3,
|
||||
0x07, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x03, 0x7e, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x80, 0xc9, 0x23, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x95,
|
||||
0x33, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xdd, 0xfb, 0x7e, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x80, 0x1d, 0xf8, 0x7e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x40, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9b,
|
||||
0x70, 0x7e, 0x00, 0x00, 0x08, 0x00, 0xe0, 0x00, 0x02, 0x00, 0x47, 0x80,
|
||||
0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x03, 0x00, 0x7e, 0x00, 0x00,
|
||||
0x3c, 0xa3, 0x20, 0x31, 0x52, 0x02, 0x49, 0xcc, 0x3f, 0xa3, 0x94, 0x08,
|
||||
0x00, 0x00, 0x00, 0x27, 0x02, 0x7e, 0x00, 0x00, 0x88, 0xe4, 0x20, 0x41,
|
||||
0xb2, 0x05, 0x49, 0x90, 0x88, 0xe4, 0x6c, 0x09, 0x00, 0x00, 0x00, 0x01,
|
||||
0x00, 0x7e, 0x00, 0x00, 0x88, 0x24, 0xe0, 0x70, 0x92, 0x04, 0x47, 0x9c,
|
||||
0x88, 0x24, 0x24, 0x09, 0x00, 0x00, 0x00, 0x13, 0x48, 0x7e, 0x00, 0x00,
|
||||
0x88, 0x24, 0x20, 0x48, 0x92, 0x04, 0x41, 0x92, 0x88, 0x24, 0x24, 0x01,
|
||||
0x00, 0x00, 0x00, 0x43, 0x00, 0xfe, 0x00, 0x00, 0x88, 0x24, 0x20, 0x48,
|
||||
0x92, 0x04, 0x41, 0x92, 0x88, 0x24, 0x24, 0x09, 0x00, 0x00, 0x00, 0x07,
|
||||
0x94, 0xce, 0x00, 0x00, 0x08, 0x23, 0x20, 0xb0, 0x92, 0x04, 0x41, 0x2c,
|
||||
0x0b, 0x23, 0x24, 0x09, 0x00, 0x00, 0x00, 0x49, 0x02, 0xce, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x11, 0x08, 0xdc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
|
||||
0x01, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf8, 0x07, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xc0, 0x01, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01,
|
||||
0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x1f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
|
||||
0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xe0, 0x7f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x3c, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00,
|
||||
0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
|
||||
0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00,
|
||||
0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xfe, 0x0f,
|
||||
0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80, 0x08, 0x00,
|
||||
0x00, 0xc0, 0x03, 0x00, 0x78, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x40, 0x10,
|
||||
0x12, 0x10, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00,
|
||||
0x84, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x20, 0x26, 0x0a, 0x10, 0x9d, 0x39,
|
||||
0xa6, 0xb2, 0x0a, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x02, 0x00, 0xfe, 0x0f,
|
||||
0x00, 0x00, 0x20, 0x21, 0x06, 0x28, 0x25, 0x4a, 0xa9, 0x8a, 0x09, 0x00,
|
||||
0x00, 0xe0, 0x01, 0x22, 0x02, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x20, 0x21,
|
||||
0x0e, 0x38, 0xa5, 0x4b, 0xa9, 0xb2, 0x09, 0x00, 0x00, 0xf0, 0x01, 0x22,
|
||||
0x02, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x20, 0x21, 0x12, 0x44, 0xa5, 0x4a,
|
||||
0x49, 0xa1, 0x0a, 0x00, 0x00, 0xf8, 0x01, 0x22, 0x02, 0x00, 0xfc, 0x1f,
|
||||
0x00, 0x00, 0x20, 0x26, 0x52, 0x44, 0x9d, 0x4d, 0x46, 0x99, 0x0a, 0x00,
|
||||
0x00, 0xfc, 0x01, 0x22, 0x02, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x40, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xb2,
|
||||
0x84, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x6e, 0x78, 0x00, 0xfc, 0x1f,
|
||||
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xfc, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x01, 0x02,
|
||||
0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0xfc, 0x0f,
|
||||
0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x20, 0x01, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x24, 0x06, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x40, 0x10,
|
||||
0x1e, 0x20, 0x90, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
|
||||
0x00, 0x80, 0xfc, 0x03, 0x00, 0x00, 0x20, 0x26, 0x22, 0x20, 0xf9, 0x89,
|
||||
0x32, 0xe7, 0x08, 0x00, 0x00, 0x92, 0x38, 0x00, 0x00, 0x00, 0xfc, 0x01,
|
||||
0x00, 0x00, 0x20, 0x21, 0x22, 0xa0, 0x92, 0x88, 0x4a, 0x29, 0x15, 0x00,
|
||||
0x00, 0x00, 0x78, 0x00, 0x00, 0x40, 0xfa, 0x04, 0x00, 0x00, 0x20, 0x21,
|
||||
0x22, 0xa0, 0x93, 0x88, 0x4a, 0x29, 0x1d, 0x00, 0x00, 0x11, 0xf2, 0x00,
|
||||
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x20, 0x21, 0x22, 0xa8, 0x90, 0x88,
|
||||
0x4a, 0x29, 0x05, 0x00, 0x48, 0x40, 0xf0, 0x01, 0x00, 0x80, 0x14, 0x04,
|
||||
0x00, 0x00, 0x20, 0x26, 0x9e, 0x10, 0x93, 0x78, 0x32, 0x29, 0x19, 0x00,
|
||||
0x00, 0x09, 0xe0, 0x03, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x40, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc5, 0x03,
|
||||
0x00, 0x40, 0x22, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0xc0, 0x07, 0x00, 0x20, 0x08, 0x04,
|
||||
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x50, 0x90, 0x03, 0x00, 0xb0, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
|
||||
0x00, 0x38, 0x22, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x48, 0x04, 0x44, 0x00, 0x00, 0x3c, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x20, 0x00, 0x00, 0x00, 0xbf, 0x40, 0x42, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x24, 0x80, 0x48, 0x02,
|
||||
0xc0, 0x1f, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x05, 0xf0, 0x3f, 0x09, 0x00,
|
||||
0x00, 0x10, 0x24, 0x48, 0x10, 0x12, 0x41, 0x52, 0x24, 0x09, 0x46, 0x71,
|
||||
0x90, 0x20, 0x02, 0xfc, 0xff, 0x1f, 0x80, 0x22, 0x00, 0x90, 0x24, 0x49,
|
||||
0x12, 0x92, 0x40, 0xb2, 0x24, 0x09, 0xc9, 0x49, 0x04, 0x80, 0x90, 0xfc,
|
||||
0xff, 0xbf, 0x24, 0x00, 0x00, 0x90, 0x24, 0x49, 0x12, 0x92, 0x40, 0x92,
|
||||
0x24, 0x06, 0x49, 0x48, 0x50, 0x0a, 0x02, 0xfe, 0xff, 0x3f, 0x00, 0x05,
|
||||
0x00, 0x50, 0xa5, 0x4a, 0x15, 0x92, 0x40, 0x92, 0x24, 0x06, 0x49, 0x48,
|
||||
0x80, 0x40, 0x48, 0xfe, 0xff, 0x3f, 0x49, 0x00, 0x00, 0x20, 0x42, 0x84,
|
||||
0x88, 0x1a, 0x41, 0x92, 0x34, 0x49, 0x49, 0x68, 0x00, 0x38, 0x10, 0x07,
|
||||
0x00, 0x60, 0x80, 0x00, 0x00, 0x20, 0x42, 0x84, 0x88, 0x14, 0x4e, 0x92,
|
||||
0x28, 0x49, 0x46, 0x50, 0x00, 0x80, 0x83, 0x01, 0x00, 0xa0, 0x6a, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
|
||||
0x00, 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, };
|
||||
244
arch/m68k/68000/entry.S
Normal file
244
arch/m68k/68000/entry.S
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
/*
|
||||
* entry.S -- non-mmu 68000 interrupt and exception entry points
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file README.legal in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Linux/m68k support by Hamish Macdonald
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/entry.h>
|
||||
|
||||
.text
|
||||
|
||||
.globl system_call
|
||||
.globl resume
|
||||
.globl ret_from_exception
|
||||
.globl ret_from_signal
|
||||
.globl sys_call_table
|
||||
.globl bad_interrupt
|
||||
.globl inthandler1
|
||||
.globl inthandler2
|
||||
.globl inthandler3
|
||||
.globl inthandler4
|
||||
.globl inthandler5
|
||||
.globl inthandler6
|
||||
.globl inthandler7
|
||||
|
||||
badsys:
|
||||
movel #-ENOSYS,%sp@(PT_OFF_D0)
|
||||
jra ret_from_exception
|
||||
|
||||
do_trace:
|
||||
movel #-ENOSYS,%sp@(PT_OFF_D0) /* needed for strace*/
|
||||
subql #4,%sp
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_enter
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
movel %sp@(PT_OFF_ORIG_D0),%d1
|
||||
movel #-ENOSYS,%d0
|
||||
cmpl #NR_syscalls,%d1
|
||||
jcc 1f
|
||||
lsl #2,%d1
|
||||
lea sys_call_table, %a0
|
||||
jbsr %a0@(%d1)
|
||||
|
||||
1: movel %d0,%sp@(PT_OFF_D0) /* save the return value */
|
||||
subql #4,%sp /* dummy return address */
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_leave
|
||||
|
||||
ret_from_signal:
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
jra ret_from_exception
|
||||
|
||||
ENTRY(system_call)
|
||||
SAVE_ALL_SYS
|
||||
|
||||
/* save top of frame*/
|
||||
pea %sp@
|
||||
jbsr set_esp0
|
||||
addql #4,%sp
|
||||
|
||||
movel %sp@(PT_OFF_ORIG_D0),%d0
|
||||
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1
|
||||
movel %d1,%a2
|
||||
btst #(TIF_SYSCALL_TRACE%8),%a2@(TINFO_FLAGS+(31-TIF_SYSCALL_TRACE)/8)
|
||||
jne do_trace
|
||||
cmpl #NR_syscalls,%d0
|
||||
jcc badsys
|
||||
lsl #2,%d0
|
||||
lea sys_call_table,%a0
|
||||
movel %a0@(%d0), %a0
|
||||
jbsr %a0@
|
||||
movel %d0,%sp@(PT_OFF_D0) /* save the return value*/
|
||||
|
||||
ret_from_exception:
|
||||
btst #5,%sp@(PT_OFF_SR) /* check if returning to kernel*/
|
||||
jeq Luser_return /* if so, skip resched, signals*/
|
||||
|
||||
Lkernel_return:
|
||||
RESTORE_ALL
|
||||
|
||||
Luser_return:
|
||||
/* only allow interrupts when we are really the last one on the*/
|
||||
/* kernel stack, otherwise stack overflow can occur during*/
|
||||
/* heavy interrupt load*/
|
||||
andw #ALLOWINT,%sr
|
||||
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1
|
||||
movel %d1,%a2
|
||||
1:
|
||||
move %a2@(TINFO_FLAGS),%d1 /* thread_info->flags */
|
||||
jne Lwork_to_do
|
||||
RESTORE_ALL
|
||||
|
||||
Lwork_to_do:
|
||||
movel %a2@(TINFO_FLAGS),%d1 /* thread_info->flags */
|
||||
btst #TIF_NEED_RESCHED,%d1
|
||||
jne reschedule
|
||||
|
||||
Lsignal_return:
|
||||
subql #4,%sp /* dummy return address*/
|
||||
SAVE_SWITCH_STACK
|
||||
pea %sp@(SWITCH_STACK_SIZE)
|
||||
bsrw do_notify_resume
|
||||
addql #4,%sp
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
jra 1b
|
||||
|
||||
/*
|
||||
* This is the main interrupt handler, responsible for calling process_int()
|
||||
*/
|
||||
inthandler1:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #65,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler2:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #66,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler3:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #67,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler4:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #68,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler5:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #69,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler6:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #70,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler7:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel #71,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
inthandler:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and #0x3ff, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel %d0,%sp@- /* put vector # on stack*/
|
||||
jbsr process_int /* process the IRQ*/
|
||||
3: addql #8,%sp /* pop parameters off stack*/
|
||||
bra ret_from_exception
|
||||
|
||||
/*
|
||||
* Handler for uninitialized and spurious interrupts.
|
||||
*/
|
||||
ENTRY(bad_interrupt)
|
||||
addql #1,irq_err_count
|
||||
rte
|
||||
|
||||
/*
|
||||
* Beware - when entering resume, prev (the current task) is
|
||||
* in a0, next (the new task) is in a1, so don't change these
|
||||
* registers until their contents are no longer needed.
|
||||
*/
|
||||
ENTRY(resume)
|
||||
movel %a0,%d1 /* save prev thread in d1 */
|
||||
movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */
|
||||
SAVE_SWITCH_STACK
|
||||
movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */
|
||||
movel %usp,%a3 /* save usp */
|
||||
movel %a3,%a0@(TASK_THREAD+THREAD_USP)
|
||||
|
||||
movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore user stack */
|
||||
movel %a3,%usp
|
||||
movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */
|
||||
RESTORE_SWITCH_STACK
|
||||
movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */
|
||||
rts
|
||||
|
||||
240
arch/m68k/68000/head.S
Normal file
240
arch/m68k/68000/head.S
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
/*
|
||||
* head.S - Common startup code for 68000 core based CPU's
|
||||
*
|
||||
* 2012.10.21, Luis Alves <ljalvs@gmail.com>, Single head.S file for all
|
||||
* 68000 core based CPU's. Based on the sources from:
|
||||
* Coldfire by Greg Ungerer <gerg@snapgear.com>
|
||||
* 68328 by D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>,
|
||||
* Kenneth Albanowski <kjahds@kjahds.com>,
|
||||
* The Silver Hammer Group, Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* UCSIMM and UCDIMM use CONFIG_MEMORY_RESERVE to reserve some RAM
|
||||
*****************************************************************************/
|
||||
#ifdef CONFIG_MEMORY_RESERVE
|
||||
#define RAMEND (CONFIG_RAMBASE+CONFIG_RAMSIZE)-(CONFIG_MEMORY_RESERVE*0x100000)
|
||||
#else
|
||||
#define RAMEND (CONFIG_RAMBASE+CONFIG_RAMSIZE)
|
||||
#endif
|
||||
/*****************************************************************************/
|
||||
|
||||
.global _start
|
||||
.global _rambase
|
||||
.global _ramvec
|
||||
.global _ramstart
|
||||
.global _ramend
|
||||
|
||||
#if defined(CONFIG_PILOT) || defined(CONFIG_INIT_LCD)
|
||||
.global bootlogo_bits
|
||||
#endif
|
||||
|
||||
/* Defining DEBUG_HEAD_CODE, serial port in 68x328 is inited */
|
||||
/* #define DEBUG_HEAD_CODE */
|
||||
#undef DEBUG_HEAD_CODE
|
||||
|
||||
.data
|
||||
|
||||
/*****************************************************************************
|
||||
* RAM setup pointers. Used by the kernel to determine RAM location and size.
|
||||
*****************************************************************************/
|
||||
|
||||
_rambase:
|
||||
.long 0
|
||||
_ramvec:
|
||||
.long 0
|
||||
_ramstart:
|
||||
.long 0
|
||||
_ramend:
|
||||
.long 0
|
||||
|
||||
__HEAD
|
||||
|
||||
/*****************************************************************************
|
||||
* Entry point, where all begins!
|
||||
*****************************************************************************/
|
||||
|
||||
_start:
|
||||
|
||||
/* Pilot need this specific signature at the start of ROM */
|
||||
#ifdef CONFIG_PILOT
|
||||
.byte 0x4e, 0xfa, 0x00, 0x0a /* bra opcode (jmp 10 bytes) */
|
||||
.byte 'b', 'o', 'o', 't'
|
||||
.word 10000
|
||||
nop
|
||||
moveq #0, %d0
|
||||
movew %d0, 0xfffff618 /* Watchdog off */
|
||||
movel #0x00011f07, 0xfffff114 /* CS A1 Mask */
|
||||
#endif /* CONFIG_PILOT */
|
||||
|
||||
movew #0x2700, %sr /* disable all interrupts */
|
||||
|
||||
/*****************************************************************************
|
||||
* Setup PLL and wait for it to settle (in 68x328 cpu's).
|
||||
* Also, if enabled, init serial port.
|
||||
*****************************************************************************/
|
||||
#if defined(CONFIG_M68328) || \
|
||||
defined(CONFIG_M68EZ328) || \
|
||||
defined(CONFIG_M68VZ328)
|
||||
|
||||
/* Serial port setup. Should only be needed if debugging this startup code. */
|
||||
#ifdef DEBUG_HEAD_CODE
|
||||
movew #0x0800, 0xfffff906 /* Ignore CTS */
|
||||
movew #0x010b, 0xfffff902 /* BAUD to 9600 */
|
||||
movew #0xe100, 0xfffff900 /* enable */
|
||||
#endif /* DEBUG_HEAD */
|
||||
|
||||
#ifdef CONFIG_PILOT
|
||||
movew #0x2410, 0xfffff200 /* PLLCR */
|
||||
#else
|
||||
movew #0x2400, 0xfffff200 /* PLLCR */
|
||||
#endif
|
||||
movew #0x0123, 0xfffff202 /* PLLFSR */
|
||||
moveq #0, %d0
|
||||
movew #16384, %d0 /* PLL settle wait loop */
|
||||
_pll_settle:
|
||||
subw #1, %d0
|
||||
bne _pll_settle
|
||||
#endif /* CONFIG_M68x328 */
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* If running kernel from ROM some specific initialization has to be done.
|
||||
* (Assuming that everything is already init'ed when running from RAM)
|
||||
*****************************************************************************/
|
||||
#ifdef CONFIG_ROMKERNEL
|
||||
|
||||
/*****************************************************************************
|
||||
* Init chip registers (uCsimm specific)
|
||||
*****************************************************************************/
|
||||
#ifdef CONFIG_UCSIMM
|
||||
moveb #0x00, 0xfffffb0b /* Watchdog off */
|
||||
moveb #0x10, 0xfffff000 /* SCR */
|
||||
moveb #0x00, 0xfffff40b /* enable chip select */
|
||||
moveb #0x00, 0xfffff423 /* enable /DWE */
|
||||
moveb #0x08, 0xfffffd0d /* disable hardmap */
|
||||
moveb #0x07, 0xfffffd0e /* level 7 interrupt clear */
|
||||
movew #0x8600, 0xfffff100 /* FLASH at 0x10c00000 */
|
||||
movew #0x018b, 0xfffff110 /* 2Meg, enable, 0ws */
|
||||
movew #0x8f00, 0xfffffc00 /* DRAM configuration */
|
||||
movew #0x9667, 0xfffffc02 /* DRAM control */
|
||||
movew #0x0000, 0xfffff106 /* DRAM at 0x00000000 */
|
||||
movew #0x068f, 0xfffff116 /* 8Meg, enable, 0ws */
|
||||
moveb #0x40, 0xfffff300 /* IVR */
|
||||
movel #0x007FFFFF, %d0 /* IMR */
|
||||
movel %d0, 0xfffff304
|
||||
moveb 0xfffff42b, %d0
|
||||
andb #0xe0, %d0
|
||||
moveb %d0, 0xfffff42b
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
* Init LCD controller.
|
||||
* (Assuming that LCD controller is already init'ed when running from RAM)
|
||||
*****************************************************************************/
|
||||
#ifdef CONFIG_INIT_LCD
|
||||
#ifdef CONFIG_PILOT
|
||||
moveb #0, 0xfffffA27 /* LCKCON */
|
||||
movel #_start, 0xfffffA00 /* LSSA */
|
||||
moveb #0xa, 0xfffffA05 /* LVPW */
|
||||
movew #0x9f, 0xFFFFFa08 /* LXMAX */
|
||||
movew #0x9f, 0xFFFFFa0a /* LYMAX */
|
||||
moveb #9, 0xfffffa29 /* LBAR */
|
||||
moveb #0, 0xfffffa25 /* LPXCD */
|
||||
moveb #0x04, 0xFFFFFa20 /* LPICF */
|
||||
moveb #0x58, 0xfffffA27 /* LCKCON */
|
||||
moveb #0x85, 0xfffff429 /* PFDATA */
|
||||
moveb #0xd8, 0xfffffA27 /* LCKCON */
|
||||
moveb #0xc5, 0xfffff429 /* PFDATA */
|
||||
moveb #0xd5, 0xfffff429 /* PFDATA */
|
||||
movel #bootlogo_bits, 0xFFFFFA00 /* LSSA */
|
||||
moveb #10, 0xFFFFFA05 /* LVPW */
|
||||
movew #160, 0xFFFFFA08 /* LXMAX */
|
||||
movew #160, 0xFFFFFA0A /* LYMAX */
|
||||
#else /* CONFIG_PILOT */
|
||||
movel #bootlogo_bits, 0xfffffA00 /* LSSA */
|
||||
moveb #0x28, 0xfffffA05 /* LVPW */
|
||||
movew #0x280, 0xFFFFFa08 /* LXMAX */
|
||||
movew #0x1df, 0xFFFFFa0a /* LYMAX */
|
||||
moveb #0, 0xfffffa29 /* LBAR */
|
||||
moveb #0, 0xfffffa25 /* LPXCD */
|
||||
moveb #0x08, 0xFFFFFa20 /* LPICF */
|
||||
moveb #0x01, 0xFFFFFA21 /* -ve pol */
|
||||
moveb #0x81, 0xfffffA27 /* LCKCON */
|
||||
movew #0xff00, 0xfffff412 /* LCD pins */
|
||||
#endif /* CONFIG_PILOT */
|
||||
#endif /* CONFIG_INIT_LCD */
|
||||
|
||||
/*****************************************************************************
|
||||
* Kernel is running from FLASH/ROM (XIP)
|
||||
* Copy init text & data to RAM
|
||||
*****************************************************************************/
|
||||
moveal #_etext, %a0
|
||||
moveal #_sdata, %a1
|
||||
moveal #__bss_start, %a2
|
||||
_copy_initmem:
|
||||
movel %a0@+, %a1@+
|
||||
cmpal %a1, %a2
|
||||
bhi _copy_initmem
|
||||
#endif /* CONFIG_ROMKERNEL */
|
||||
|
||||
/*****************************************************************************
|
||||
* Setup basic memory information for kernel
|
||||
*****************************************************************************/
|
||||
movel #CONFIG_VECTORBASE,_ramvec /* set vector base location */
|
||||
movel #CONFIG_RAMBASE,_rambase /* set the base of RAM */
|
||||
movel #RAMEND, _ramend /* set end ram addr */
|
||||
lea __bss_stop,%a1
|
||||
movel %a1,_ramstart
|
||||
|
||||
/*****************************************************************************
|
||||
* If the kernel is in RAM, move romfs to right above bss and
|
||||
* adjust _ramstart to where romfs ends.
|
||||
*
|
||||
* (Do this only if CONFIG_MTD_UCLINUX is true)
|
||||
*****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ROMFS_FS) && defined(CONFIG_RAMKERNEL) && \
|
||||
defined(CONFIG_MTD_UCLINUX)
|
||||
lea __bss_start, %a0 /* get start of bss */
|
||||
lea __bss_stop, %a1 /* set up destination */
|
||||
movel %a0, %a2 /* copy of bss start */
|
||||
|
||||
movel 8(%a0), %d0 /* get size of ROMFS */
|
||||
addql #8, %d0 /* allow for rounding */
|
||||
andl #0xfffffffc, %d0 /* whole words */
|
||||
|
||||
addl %d0, %a0 /* copy from end */
|
||||
addl %d0, %a1 /* copy from end */
|
||||
movel %a1, _ramstart /* set start of ram */
|
||||
_copy_romfs:
|
||||
movel -(%a0), -(%a1) /* copy dword */
|
||||
cmpl %a0, %a2 /* check if at end */
|
||||
bne _copy_romfs
|
||||
#endif /* CONFIG_ROMFS_FS && CONFIG_RAMKERNEL && CONFIG_MTD_UCLINUX */
|
||||
|
||||
/*****************************************************************************
|
||||
* Clear bss region
|
||||
*****************************************************************************/
|
||||
lea __bss_start, %a0 /* get start of bss */
|
||||
lea __bss_stop, %a1 /* get end of bss */
|
||||
_clear_bss:
|
||||
movel #0, (%a0)+ /* clear each word */
|
||||
cmpl %a0, %a1 /* check if at end */
|
||||
bne _clear_bss
|
||||
|
||||
/*****************************************************************************
|
||||
* Load the current task pointer and stack.
|
||||
*****************************************************************************/
|
||||
lea init_thread_union,%a0
|
||||
lea THREAD_SIZE(%a0),%sp
|
||||
jsr start_kernel /* start Linux kernel */
|
||||
_exit:
|
||||
jmp _exit /* should never get here */
|
||||
186
arch/m68k/68000/ints.c
Normal file
186
arch/m68k/68000/ints.c
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* ints.c - Generic interrupt controller support
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright 1996 Roman Zippel
|
||||
* Copyright 1999 D. Jeff Dionne <jeff@rt-control.com>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/machdep.h>
|
||||
|
||||
#if defined(CONFIG_M68328)
|
||||
#include <asm/MC68328.h>
|
||||
#elif defined(CONFIG_M68EZ328)
|
||||
#include <asm/MC68EZ328.h>
|
||||
#elif defined(CONFIG_M68VZ328)
|
||||
#include <asm/MC68VZ328.h>
|
||||
#endif
|
||||
|
||||
/* assembler routines */
|
||||
asmlinkage void system_call(void);
|
||||
asmlinkage void buserr(void);
|
||||
asmlinkage void trap(void);
|
||||
asmlinkage void trap3(void);
|
||||
asmlinkage void trap4(void);
|
||||
asmlinkage void trap5(void);
|
||||
asmlinkage void trap6(void);
|
||||
asmlinkage void trap7(void);
|
||||
asmlinkage void trap8(void);
|
||||
asmlinkage void trap9(void);
|
||||
asmlinkage void trap10(void);
|
||||
asmlinkage void trap11(void);
|
||||
asmlinkage void trap12(void);
|
||||
asmlinkage void trap13(void);
|
||||
asmlinkage void trap14(void);
|
||||
asmlinkage void trap15(void);
|
||||
asmlinkage void trap33(void);
|
||||
asmlinkage void trap34(void);
|
||||
asmlinkage void trap35(void);
|
||||
asmlinkage void trap36(void);
|
||||
asmlinkage void trap37(void);
|
||||
asmlinkage void trap38(void);
|
||||
asmlinkage void trap39(void);
|
||||
asmlinkage void trap40(void);
|
||||
asmlinkage void trap41(void);
|
||||
asmlinkage void trap42(void);
|
||||
asmlinkage void trap43(void);
|
||||
asmlinkage void trap44(void);
|
||||
asmlinkage void trap45(void);
|
||||
asmlinkage void trap46(void);
|
||||
asmlinkage void trap47(void);
|
||||
asmlinkage irqreturn_t bad_interrupt(int, void *);
|
||||
asmlinkage irqreturn_t inthandler(void);
|
||||
asmlinkage irqreturn_t inthandler1(void);
|
||||
asmlinkage irqreturn_t inthandler2(void);
|
||||
asmlinkage irqreturn_t inthandler3(void);
|
||||
asmlinkage irqreturn_t inthandler4(void);
|
||||
asmlinkage irqreturn_t inthandler5(void);
|
||||
asmlinkage irqreturn_t inthandler6(void);
|
||||
asmlinkage irqreturn_t inthandler7(void);
|
||||
|
||||
/* The 68k family did not have a good way to determine the source
|
||||
* of interrupts until later in the family. The EC000 core does
|
||||
* not provide the vector number on the stack, we vector everything
|
||||
* into one vector and look in the blasted mask register...
|
||||
* This code is designed to be fast, almost constant time, not clean!
|
||||
*/
|
||||
void process_int(int vec, struct pt_regs *fp)
|
||||
{
|
||||
int irq;
|
||||
int mask;
|
||||
|
||||
unsigned long pend = ISR;
|
||||
|
||||
while (pend) {
|
||||
if (pend & 0x0000ffff) {
|
||||
if (pend & 0x000000ff) {
|
||||
if (pend & 0x0000000f) {
|
||||
mask = 0x00000001;
|
||||
irq = 0;
|
||||
} else {
|
||||
mask = 0x00000010;
|
||||
irq = 4;
|
||||
}
|
||||
} else {
|
||||
if (pend & 0x00000f00) {
|
||||
mask = 0x00000100;
|
||||
irq = 8;
|
||||
} else {
|
||||
mask = 0x00001000;
|
||||
irq = 12;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (pend & 0x00ff0000) {
|
||||
if (pend & 0x000f0000) {
|
||||
mask = 0x00010000;
|
||||
irq = 16;
|
||||
} else {
|
||||
mask = 0x00100000;
|
||||
irq = 20;
|
||||
}
|
||||
} else {
|
||||
if (pend & 0x0f000000) {
|
||||
mask = 0x01000000;
|
||||
irq = 24;
|
||||
} else {
|
||||
mask = 0x10000000;
|
||||
irq = 28;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (! (mask & pend)) {
|
||||
mask <<=1;
|
||||
irq++;
|
||||
}
|
||||
|
||||
do_IRQ(irq, fp);
|
||||
pend &= ~mask;
|
||||
}
|
||||
}
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
IMR &= ~(1 << d->irq);
|
||||
}
|
||||
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
IMR |= (1 << d->irq);
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "M68K-INTC",
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
};
|
||||
|
||||
/*
|
||||
* This function should be called during kernel startup to initialize
|
||||
* the machine vector table.
|
||||
*/
|
||||
void __init trap_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* set up the vectors */
|
||||
for (i = 72; i < 256; ++i)
|
||||
_ramvec[i] = (e_vector) bad_interrupt;
|
||||
|
||||
_ramvec[32] = system_call;
|
||||
|
||||
_ramvec[65] = (e_vector) inthandler1;
|
||||
_ramvec[66] = (e_vector) inthandler2;
|
||||
_ramvec[67] = (e_vector) inthandler3;
|
||||
_ramvec[68] = (e_vector) inthandler4;
|
||||
_ramvec[69] = (e_vector) inthandler5;
|
||||
_ramvec[70] = (e_vector) inthandler6;
|
||||
_ramvec[71] = (e_vector) inthandler7;
|
||||
}
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
IVR = 0x40; /* Set DragonBall IVR (interrupt base) to 64 */
|
||||
|
||||
/* turn off all interrupts */
|
||||
IMR = ~0;
|
||||
|
||||
for (i = 0; (i < NR_IRQS); i++) {
|
||||
irq_set_chip(i, &intc_irq_chip);
|
||||
irq_set_handler(i, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
56
arch/m68k/68000/m68328.c
Normal file
56
arch/m68k/68000/m68328.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m68328.c - 68328 specific config
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
* Copyright (C) 1999 D. Jeff Dionne
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* VZ Support/Fixes Evan Stawnyczy <e@lineo.ca>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/MC68328.h>
|
||||
#if defined(CONFIG_PILOT) || defined(CONFIG_INIT_LCD)
|
||||
#include "bootlogo.h"
|
||||
#endif
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
int m68328_hwclk(int set, struct rtc_time *t);
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void m68328_reset (void)
|
||||
{
|
||||
local_irq_disable();
|
||||
asm volatile ("moveal #0x10c00000, %a0;\n\t"
|
||||
"moveb #0, 0xFFFFF300;\n\t"
|
||||
"moveal 0(%a0), %sp;\n\t"
|
||||
"moveal 4(%a0), %a0;\n\t"
|
||||
"jmp (%a0);");
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *command, int len)
|
||||
{
|
||||
printk(KERN_INFO "\n68328 support D. Jeff Dionne <jeff@uclinux.org>\n");
|
||||
printk(KERN_INFO "68328 support Kenneth Albanowski <kjahds@kjshds.com>\n");
|
||||
printk(KERN_INFO "68328/Pilot support Bernhard Kuhn <kuhn@lpr.e-technik.tu-muenchen.de>\n");
|
||||
|
||||
mach_hwclk = m68328_hwclk;
|
||||
mach_reset = m68328_reset;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
78
arch/m68k/68000/m68EZ328.c
Normal file
78
arch/m68k/68000/m68EZ328.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m68EZ328.c - 68EZ328 specific config
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
* Copyright (C) 1999 D. Jeff Dionne
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/MC68EZ328.h>
|
||||
#ifdef CONFIG_UCSIMM
|
||||
#include <asm/bootstd.h>
|
||||
#endif
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
int m68328_hwclk(int set, struct rtc_time *t);
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void m68ez328_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
asm volatile (
|
||||
"moveal #0x10c00000, %a0;\n"
|
||||
"moveb #0, 0xFFFFF300;\n"
|
||||
"moveal 0(%a0), %sp;\n"
|
||||
"moveal 4(%a0), %a0;\n"
|
||||
"jmp (%a0);\n"
|
||||
);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
unsigned char *cs8900a_hwaddr;
|
||||
static int errno;
|
||||
|
||||
#ifdef CONFIG_UCSIMM
|
||||
_bsc0(char *, getserialnum)
|
||||
_bsc1(unsigned char *, gethwaddr, int, a)
|
||||
_bsc1(char *, getbenv, char *, a)
|
||||
#endif
|
||||
|
||||
void __init config_BSP(char *command, int len)
|
||||
{
|
||||
unsigned char *p;
|
||||
|
||||
printk(KERN_INFO "\n68EZ328 DragonBallEZ support (C) 1999 Rt-Control, Inc\n");
|
||||
|
||||
#ifdef CONFIG_UCSIMM
|
||||
printk(KERN_INFO "uCsimm serial string [%s]\n",getserialnum());
|
||||
p = cs8900a_hwaddr = gethwaddr(0);
|
||||
printk(KERN_INFO "uCsimm hwaddr %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
|
||||
p[0], p[1], p[2], p[3], p[4], p[5]);
|
||||
|
||||
p = getbenv("APPEND");
|
||||
if (p) strcpy(p,command);
|
||||
else command[0] = 0;
|
||||
#endif
|
||||
|
||||
mach_sched_init = hw_timer_init;
|
||||
mach_hwclk = m68328_hwclk;
|
||||
mach_reset = m68ez328_reset;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
190
arch/m68k/68000/m68VZ328.c
Normal file
190
arch/m68k/68000/m68VZ328.c
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m68VZ328.c - 68VZ328 specific config
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
* Copyright (C) 1999 D. Jeff Dionne
|
||||
* Copyright (C) 2001 Georges Menie, Ken Desmet
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kd.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/rtc.h>
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/MC68VZ328.h>
|
||||
#include <asm/bootstd.h>
|
||||
|
||||
#ifdef CONFIG_INIT_LCD
|
||||
#include "bootlogo-vz.h"
|
||||
#endif
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
int m68328_hwclk(int set, struct rtc_time *t);
|
||||
|
||||
/***************************************************************************/
|
||||
/* Init Drangon Engine hardware */
|
||||
/***************************************************************************/
|
||||
#if defined(CONFIG_DRAGEN2)
|
||||
|
||||
static void m68vz328_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
#ifdef CONFIG_INIT_LCD
|
||||
PBDATA |= 0x20; /* disable CCFL light */
|
||||
PKDATA |= 0x4; /* disable LCD controller */
|
||||
LCKCON = 0;
|
||||
#endif
|
||||
|
||||
__asm__ __volatile__(
|
||||
"reset\n\t"
|
||||
"moveal #0x04000000, %a0\n\t"
|
||||
"moveal 0(%a0), %sp\n\t"
|
||||
"moveal 4(%a0), %a0\n\t"
|
||||
"jmp (%a0)"
|
||||
);
|
||||
}
|
||||
|
||||
static void __init init_hardware(char *command, int size)
|
||||
{
|
||||
#ifdef CONFIG_DIRECT_IO_ACCESS
|
||||
SCR = 0x10; /* allow user access to internal registers */
|
||||
#endif
|
||||
|
||||
/* CSGB Init */
|
||||
CSGBB = 0x4000;
|
||||
CSB = 0x1a1;
|
||||
|
||||
/* CS8900 init */
|
||||
/* PK3: hardware sleep function pin, active low */
|
||||
PKSEL |= PK(3); /* select pin as I/O */
|
||||
PKDIR |= PK(3); /* select pin as output */
|
||||
PKDATA |= PK(3); /* set pin high */
|
||||
|
||||
/* PF5: hardware reset function pin, active high */
|
||||
PFSEL |= PF(5); /* select pin as I/O */
|
||||
PFDIR |= PF(5); /* select pin as output */
|
||||
PFDATA &= ~PF(5); /* set pin low */
|
||||
|
||||
/* cs8900 hardware reset */
|
||||
PFDATA |= PF(5);
|
||||
{ int i; for (i = 0; i < 32000; ++i); }
|
||||
PFDATA &= ~PF(5);
|
||||
|
||||
/* INT1 enable (cs8900 IRQ) */
|
||||
PDPOL &= ~PD(1); /* active high signal */
|
||||
PDIQEG &= ~PD(1);
|
||||
PDIRQEN |= PD(1); /* IRQ enabled */
|
||||
|
||||
#ifdef CONFIG_INIT_LCD
|
||||
/* initialize LCD controller */
|
||||
LSSA = (long) screen_bits;
|
||||
LVPW = 0x14;
|
||||
LXMAX = 0x140;
|
||||
LYMAX = 0xef;
|
||||
LRRA = 0;
|
||||
LPXCD = 3;
|
||||
LPICF = 0x08;
|
||||
LPOLCF = 0;
|
||||
LCKCON = 0x80;
|
||||
PCPDEN = 0xff;
|
||||
PCSEL = 0;
|
||||
|
||||
/* Enable LCD controller */
|
||||
PKDIR |= 0x4;
|
||||
PKSEL |= 0x4;
|
||||
PKDATA &= ~0x4;
|
||||
|
||||
/* Enable CCFL backlighting circuit */
|
||||
PBDIR |= 0x20;
|
||||
PBSEL |= 0x20;
|
||||
PBDATA &= ~0x20;
|
||||
|
||||
/* contrast control register */
|
||||
PFDIR |= 0x1;
|
||||
PFSEL &= ~0x1;
|
||||
PWMR = 0x037F;
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
/* Init RT-Control uCdimm hardware */
|
||||
/***************************************************************************/
|
||||
#elif defined(CONFIG_UCDIMM)
|
||||
|
||||
static void m68vz328_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
asm volatile (
|
||||
"moveal #0x10c00000, %a0;\n\t"
|
||||
"moveb #0, 0xFFFFF300;\n\t"
|
||||
"moveal 0(%a0), %sp;\n\t"
|
||||
"moveal 4(%a0), %a0;\n\t"
|
||||
"jmp (%a0);\n"
|
||||
);
|
||||
}
|
||||
|
||||
unsigned char *cs8900a_hwaddr;
|
||||
static int errno;
|
||||
|
||||
_bsc0(char *, getserialnum)
|
||||
_bsc1(unsigned char *, gethwaddr, int, a)
|
||||
_bsc1(char *, getbenv, char *, a)
|
||||
|
||||
static void __init init_hardware(char *command, int size)
|
||||
{
|
||||
char *p;
|
||||
|
||||
printk(KERN_INFO "uCdimm serial string [%s]\n", getserialnum());
|
||||
p = cs8900a_hwaddr = gethwaddr(0);
|
||||
printk(KERN_INFO "uCdimm hwaddr %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
|
||||
p[0], p[1], p[2], p[3], p[4], p[5]);
|
||||
p = getbenv("APPEND");
|
||||
if (p)
|
||||
strcpy(p, command);
|
||||
else
|
||||
command[0] = 0;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
#else
|
||||
|
||||
static void m68vz328_reset(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void __init init_hardware(char *command, int size)
|
||||
{
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
#endif
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *command, int size)
|
||||
{
|
||||
printk(KERN_INFO "68VZ328 DragonBallVZ support (c) 2001 Lineo, Inc.\n");
|
||||
|
||||
init_hardware(command, size);
|
||||
|
||||
mach_sched_init = hw_timer_init;
|
||||
mach_hwclk = m68328_hwclk;
|
||||
mach_reset = m68vz328_reset;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
35
arch/m68k/68000/romvec.S
Normal file
35
arch/m68k/68000/romvec.S
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* romvec.S - Vector table for 68000 cpus
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright 1996 Roman Zippel
|
||||
* Copyright 1999 D. Jeff Dionne <jeff@rt-control.com>
|
||||
* Copyright 2006 Greg Ungerer <gerg@snapgear.com>
|
||||
*/
|
||||
|
||||
.global _start
|
||||
.global _buserr
|
||||
.global trap
|
||||
.global system_call
|
||||
|
||||
.section .romvec
|
||||
|
||||
e_vectors:
|
||||
.long CONFIG_RAMBASE+CONFIG_RAMSIZE-4, _start, buserr, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
/* TRAP #0-15 */
|
||||
.long system_call, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long trap, trap, trap, trap
|
||||
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
137
arch/m68k/68000/timers.c
Normal file
137
arch/m68k/68000/timers.c
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* timers.c - Generic hardware timer support.
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
* Copyright (C) 1999 D. Jeff Dionne
|
||||
* Copyright (C) 2001 Georges Menie, Ken Desmet
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/MC68VZ328.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#if defined(CONFIG_DRAGEN2)
|
||||
/* with a 33.16 MHz clock, this will give usec resolution to the time functions */
|
||||
#define CLOCK_SOURCE TCTL_CLKSOURCE_SYSCLK
|
||||
#define CLOCK_PRE 7
|
||||
#define TICKS_PER_JIFFY 41450
|
||||
|
||||
#elif defined(CONFIG_XCOPILOT_BUGS)
|
||||
/*
|
||||
* The only thing I know is that CLK32 is not available on Xcopilot
|
||||
* I have little idea about what frequency SYSCLK has on Xcopilot.
|
||||
* The values for prescaler and compare registers were simply
|
||||
* taken from the original source
|
||||
*/
|
||||
#define CLOCK_SOURCE TCTL_CLKSOURCE_SYSCLK
|
||||
#define CLOCK_PRE 2
|
||||
#define TICKS_PER_JIFFY 0xd7e4
|
||||
|
||||
#else
|
||||
/* default to using the 32Khz clock */
|
||||
#define CLOCK_SOURCE TCTL_CLKSOURCE_32KHZ
|
||||
#define CLOCK_PRE 31
|
||||
#define TICKS_PER_JIFFY 10
|
||||
#endif
|
||||
|
||||
static u32 m68328_tick_cnt;
|
||||
static irq_handler_t timer_interrupt;
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static irqreturn_t hw_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset Timer1 */
|
||||
TSTAT &= 0;
|
||||
|
||||
m68328_tick_cnt += TICKS_PER_JIFFY;
|
||||
return timer_interrupt(irq, dummy);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct irqaction m68328_timer_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = hw_tick,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static cycle_t m68328_read_clk(struct clocksource *cs)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 cycles;
|
||||
|
||||
local_irq_save(flags);
|
||||
cycles = m68328_tick_cnt + TCN;
|
||||
local_irq_restore(flags);
|
||||
|
||||
return cycles;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct clocksource m68328_clk = {
|
||||
.name = "timer",
|
||||
.rating = 250,
|
||||
.read = m68328_read_clk,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void hw_timer_init(irq_handler_t handler)
|
||||
{
|
||||
/* disable timer 1 */
|
||||
TCTL = 0;
|
||||
|
||||
/* set ISR */
|
||||
setup_irq(TMR_IRQ_NUM, &m68328_timer_irq);
|
||||
|
||||
/* Restart mode, Enable int, Set clock source */
|
||||
TCTL = TCTL_OM | TCTL_IRQEN | CLOCK_SOURCE;
|
||||
TPRER = CLOCK_PRE;
|
||||
TCMP = TICKS_PER_JIFFY;
|
||||
|
||||
/* Enable timer 1 */
|
||||
TCTL |= TCTL_TEN;
|
||||
clocksource_register_hz(&m68328_clk, TICKS_PER_JIFFY*HZ);
|
||||
timer_interrupt = handler;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
int m68328_hwclk(int set, struct rtc_time *t)
|
||||
{
|
||||
if (!set) {
|
||||
long now = RTCTIME;
|
||||
t->tm_year = t->tm_mon = t->tm_mday = 1;
|
||||
t->tm_hour = (now >> 24) % 24;
|
||||
t->tm_min = (now >> 16) % 60;
|
||||
t->tm_sec = now % 60;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
12
arch/m68k/68360/Makefile
Normal file
12
arch/m68k/68360/Makefile
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# Makefile for 68360 machines.
|
||||
#
|
||||
model-y := ram
|
||||
model-$(CONFIG_ROMKERNEL) := rom
|
||||
|
||||
obj-y := config.o commproc.o entry.o ints.o
|
||||
|
||||
extra-y := head.o
|
||||
|
||||
$(obj)/head.o: $(obj)/head-$(model-y).o
|
||||
ln -sf head-$(model-y).o $(obj)/head.o
|
||||
309
arch/m68k/68360/commproc.c
Normal file
309
arch/m68k/68360/commproc.c
Normal file
|
|
@ -0,0 +1,309 @@
|
|||
/*
|
||||
* General Purpose functions for the global management of the
|
||||
* Communication Processor Module.
|
||||
*
|
||||
* Copyright (c) 2000 Michael Leslie <mleslie@lineo.com>
|
||||
* Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
|
||||
*
|
||||
* In addition to the individual control of the communication
|
||||
* channels, there are a few functions that globally affect the
|
||||
* communication processor.
|
||||
*
|
||||
* Buffer descriptors must be allocated from the dual ported memory
|
||||
* space. The allocator for that is here. When the communication
|
||||
* process is reset, we reclaim the memory available. There is
|
||||
* currently no deallocator for this memory.
|
||||
* The amount of space available is platform dependent. On the
|
||||
* MBX, the EPPC software loads additional microcode into the
|
||||
* communication processor, and uses some of the DP ram for this
|
||||
* purpose. Current, the first 512 bytes and the last 256 bytes of
|
||||
* memory are used. Right now I am conservative and only use the
|
||||
* memory that can never be used for microcode. If there are
|
||||
* applications that require more DP ram, we can expand the boundaries
|
||||
* but then we have to be careful of any downloaded microcode.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Michael Leslie <mleslie@lineo.com>
|
||||
* adapted Dan Malek's ppc8xx drivers to M68360
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/m68360.h>
|
||||
#include <asm/commproc.h>
|
||||
|
||||
/* #include <asm/page.h> */
|
||||
/* #include <asm/pgtable.h> */
|
||||
extern void *_quicc_base;
|
||||
extern unsigned int system_clock;
|
||||
|
||||
|
||||
static uint dp_alloc_base; /* Starting offset in DP ram */
|
||||
static uint dp_alloc_top; /* Max offset + 1 */
|
||||
|
||||
#if 0
|
||||
static void *host_buffer; /* One page of host buffer */
|
||||
static void *host_end; /* end + 1 */
|
||||
#endif
|
||||
|
||||
/* struct cpm360_t *cpmp; */ /* Pointer to comm processor space */
|
||||
|
||||
QUICC *pquicc;
|
||||
/* QUICC *quicc_dpram; */ /* mleslie - temporary; use extern pquicc elsewhere instead */
|
||||
|
||||
|
||||
/* CPM interrupt vector functions. */
|
||||
struct cpm_action {
|
||||
void (*handler)(void *);
|
||||
void *dev_id;
|
||||
};
|
||||
static struct cpm_action cpm_vecs[CPMVEC_NR];
|
||||
static void cpm_interrupt(int irq, void * dev, struct pt_regs * regs);
|
||||
static void cpm_error_interrupt(void *);
|
||||
|
||||
/* prototypes: */
|
||||
void cpm_install_handler(int vec, void (*handler)(), void *dev_id);
|
||||
void m360_cpm_reset(void);
|
||||
|
||||
|
||||
|
||||
|
||||
void __init m360_cpm_reset()
|
||||
{
|
||||
/* pte_t *pte; */
|
||||
|
||||
pquicc = (struct quicc *)(_quicc_base); /* initialized in crt0_rXm.S */
|
||||
|
||||
/* Perform a CPM reset. */
|
||||
pquicc->cp_cr = (SOFTWARE_RESET | CMD_FLAG);
|
||||
|
||||
/* Wait for CPM to become ready (should be 2 clocks). */
|
||||
while (pquicc->cp_cr & CMD_FLAG);
|
||||
|
||||
/* On the recommendation of the 68360 manual, p. 7-60
|
||||
* - Set sdma interrupt service mask to 7
|
||||
* - Set sdma arbitration ID to 4
|
||||
*/
|
||||
pquicc->sdma_sdcr = 0x0740;
|
||||
|
||||
|
||||
/* Claim the DP memory for our use.
|
||||
*/
|
||||
dp_alloc_base = CPM_DATAONLY_BASE;
|
||||
dp_alloc_top = dp_alloc_base + CPM_DATAONLY_SIZE;
|
||||
|
||||
|
||||
/* Set the host page for allocation.
|
||||
*/
|
||||
/* host_buffer = host_page_addr; */
|
||||
/* host_end = host_page_addr + PAGE_SIZE; */
|
||||
|
||||
/* pte = find_pte(&init_mm, host_page_addr); */
|
||||
/* pte_val(*pte) |= _PAGE_NO_CACHE; */
|
||||
/* flush_tlb_page(current->mm->mmap, host_buffer); */
|
||||
|
||||
/* Tell everyone where the comm processor resides.
|
||||
*/
|
||||
/* cpmp = (cpm360_t *)commproc; */
|
||||
}
|
||||
|
||||
|
||||
/* This is called during init_IRQ. We used to do it above, but this
|
||||
* was too early since init_IRQ was not yet called.
|
||||
*/
|
||||
void
|
||||
cpm_interrupt_init(void)
|
||||
{
|
||||
/* Initialize the CPM interrupt controller.
|
||||
* NOTE THAT pquicc had better have been initialized!
|
||||
* reference: MC68360UM p. 7-377
|
||||
*/
|
||||
pquicc->intr_cicr =
|
||||
(CICR_SCD_SCC4 | CICR_SCC_SCC3 | CICR_SCB_SCC2 | CICR_SCA_SCC1) |
|
||||
(CPM_INTERRUPT << 13) |
|
||||
CICR_HP_MASK |
|
||||
(CPM_VECTOR_BASE << 5) |
|
||||
CICR_SPS;
|
||||
|
||||
/* mask all CPM interrupts from reaching the cpu32 core: */
|
||||
pquicc->intr_cimr = 0;
|
||||
|
||||
|
||||
/* mles - If I understand correctly, the 360 just pops over to the CPM
|
||||
* specific vector, obviating the necessity to vector through the IRQ
|
||||
* whose priority the CPM is set to. This needs a closer look, though.
|
||||
*/
|
||||
|
||||
/* Set our interrupt handler with the core CPU. */
|
||||
/* if (request_irq(CPM_INTERRUPT, cpm_interrupt, 0, "cpm", NULL) != 0) */
|
||||
/* panic("Could not allocate CPM IRQ!"); */
|
||||
|
||||
/* Install our own error handler.
|
||||
*/
|
||||
/* I think we want to hold off on this one for the moment - mles */
|
||||
/* cpm_install_handler(CPMVEC_ERROR, cpm_error_interrupt, NULL); */
|
||||
|
||||
/* master CPM interrupt enable */
|
||||
/* pquicc->intr_cicr |= CICR_IEN; */ /* no such animal for 360 */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* CPM interrupt controller interrupt.
|
||||
*/
|
||||
static void
|
||||
cpm_interrupt(int irq, void * dev, struct pt_regs * regs)
|
||||
{
|
||||
/* uint vec; */
|
||||
|
||||
/* mles: Note that this stuff is currently being performed by
|
||||
* M68360_do_irq(int vec, struct pt_regs *fp), in ../ints.c */
|
||||
|
||||
/* figure out the vector */
|
||||
/* call that vector's handler */
|
||||
/* clear the irq's bit in the service register */
|
||||
|
||||
#if 0 /* old 860 stuff: */
|
||||
/* Get the vector by setting the ACK bit and then reading
|
||||
* the register.
|
||||
*/
|
||||
((volatile immap_t *)IMAP_ADDR)->im_cpic.cpic_civr = 1;
|
||||
vec = ((volatile immap_t *)IMAP_ADDR)->im_cpic.cpic_civr;
|
||||
vec >>= 11;
|
||||
|
||||
|
||||
if (cpm_vecs[vec].handler != 0)
|
||||
(*cpm_vecs[vec].handler)(cpm_vecs[vec].dev_id);
|
||||
else
|
||||
((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr &= ~(1 << vec);
|
||||
|
||||
/* After servicing the interrupt, we have to remove the status
|
||||
* indicator.
|
||||
*/
|
||||
((immap_t *)IMAP_ADDR)->im_cpic.cpic_cisr |= (1 << vec);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* The CPM can generate the error interrupt when there is a race condition
|
||||
* between generating and masking interrupts. All we have to do is ACK it
|
||||
* and return. This is a no-op function so we don't need any special
|
||||
* tests in the interrupt handler.
|
||||
*/
|
||||
static void
|
||||
cpm_error_interrupt(void *dev)
|
||||
{
|
||||
}
|
||||
|
||||
/* Install a CPM interrupt handler.
|
||||
*/
|
||||
void
|
||||
cpm_install_handler(int vec, void (*handler)(), void *dev_id)
|
||||
{
|
||||
|
||||
request_irq(vec, handler, 0, "timer", dev_id);
|
||||
|
||||
/* if (cpm_vecs[vec].handler != 0) */
|
||||
/* printk(KERN_INFO "CPM interrupt %x replacing %x\n", */
|
||||
/* (uint)handler, (uint)cpm_vecs[vec].handler); */
|
||||
/* cpm_vecs[vec].handler = handler; */
|
||||
/* cpm_vecs[vec].dev_id = dev_id; */
|
||||
|
||||
/* ((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr |= (1 << vec); */
|
||||
/* pquicc->intr_cimr |= (1 << vec); */
|
||||
|
||||
}
|
||||
|
||||
/* Free a CPM interrupt handler.
|
||||
*/
|
||||
void
|
||||
cpm_free_handler(int vec)
|
||||
{
|
||||
cpm_vecs[vec].handler = NULL;
|
||||
cpm_vecs[vec].dev_id = NULL;
|
||||
/* ((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr &= ~(1 << vec); */
|
||||
pquicc->intr_cimr &= ~(1 << vec);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Allocate some memory from the dual ported ram. We may want to
|
||||
* enforce alignment restrictions, but right now everyone is a good
|
||||
* citizen.
|
||||
*/
|
||||
uint
|
||||
m360_cpm_dpalloc(uint size)
|
||||
{
|
||||
uint retloc;
|
||||
|
||||
if ((dp_alloc_base + size) >= dp_alloc_top)
|
||||
return(CPM_DP_NOSPACE);
|
||||
|
||||
retloc = dp_alloc_base;
|
||||
dp_alloc_base += size;
|
||||
|
||||
return(retloc);
|
||||
}
|
||||
|
||||
|
||||
#if 0 /* mleslie - for now these are simply kmalloc'd */
|
||||
/* We also own one page of host buffer space for the allocation of
|
||||
* UART "fifos" and the like.
|
||||
*/
|
||||
uint
|
||||
m360_cpm_hostalloc(uint size)
|
||||
{
|
||||
uint retloc;
|
||||
|
||||
if ((host_buffer + size) >= host_end)
|
||||
return(0);
|
||||
|
||||
retloc = host_buffer;
|
||||
host_buffer += size;
|
||||
|
||||
return(retloc);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Set a baud rate generator. This needs lots of work. There are
|
||||
* four BRGs, any of which can be wired to any channel.
|
||||
* The internal baud rate clock is the system clock divided by 16.
|
||||
* This assumes the baudrate is 16x oversampled by the uart.
|
||||
*/
|
||||
/* #define BRG_INT_CLK (((bd_t *)__res)->bi_intfreq * 1000000) */
|
||||
#define BRG_INT_CLK system_clock
|
||||
#define BRG_UART_CLK (BRG_INT_CLK/16)
|
||||
|
||||
void
|
||||
m360_cpm_setbrg(uint brg, uint rate)
|
||||
{
|
||||
volatile uint *bp;
|
||||
|
||||
/* This is good enough to get SMCs running.....
|
||||
*/
|
||||
/* bp = (uint *)&cpmp->cp_brgc1; */
|
||||
bp = (volatile uint *)(&pquicc->brgc[0].l);
|
||||
bp += brg;
|
||||
*bp = ((BRG_UART_CLK / rate - 1) << 1) | CPM_BRG_EN;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-indent-level: 4
|
||||
* c-basic-offset: 4
|
||||
* tab-width: 4
|
||||
* End:
|
||||
*/
|
||||
183
arch/m68k/68360/config.c
Normal file
183
arch/m68k/68360/config.c
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
/*
|
||||
* config.c - non-mmu 68360 platform initialization code
|
||||
*
|
||||
* Copyright (c) 2000 Michael Leslie <mleslie@lineo.com>
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
* Copyright (C) 1999 D. Jeff Dionne <jeff@uclinux.org>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/m68360.h>
|
||||
|
||||
#ifdef CONFIG_UCQUICC
|
||||
#include <asm/bootstd.h>
|
||||
#endif
|
||||
|
||||
extern void m360_cpm_reset(void);
|
||||
|
||||
// Mask to select if the PLL prescaler is enabled.
|
||||
#define MCU_PREEN ((unsigned short)(0x0001 << 13))
|
||||
|
||||
#if defined(CONFIG_UCQUICC)
|
||||
#define OSCILLATOR (unsigned long int)33000000
|
||||
#endif
|
||||
|
||||
static irq_handler_t timer_interrupt;
|
||||
unsigned long int system_clock;
|
||||
|
||||
extern QUICC *pquicc;
|
||||
|
||||
/* TODO DON"T Hard Code this */
|
||||
/* calculate properly using the right PLL and prescaller */
|
||||
// unsigned int system_clock = 33000000l;
|
||||
extern unsigned long int system_clock; //In kernel setup.c
|
||||
|
||||
|
||||
static irqreturn_t hw_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset Timer1 */
|
||||
/* TSTAT &= 0; */
|
||||
|
||||
pquicc->timer_ter1 = 0x0002; /* clear timer event */
|
||||
|
||||
return timer_interrupt(irq, dummy);
|
||||
}
|
||||
|
||||
static struct irqaction m68360_timer_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = hw_tick,
|
||||
};
|
||||
|
||||
void hw_timer_init(irq_handler_t handler)
|
||||
{
|
||||
unsigned char prescaler;
|
||||
unsigned short tgcr_save;
|
||||
|
||||
#if 0
|
||||
/* Restart mode, Enable int, 32KHz, Enable timer */
|
||||
TCTL = TCTL_OM | TCTL_IRQEN | TCTL_CLKSOURCE_32KHZ | TCTL_TEN;
|
||||
/* Set prescaler (Divide 32KHz by 32)*/
|
||||
TPRER = 31;
|
||||
/* Set compare register 32Khz / 32 / 10 = 100 */
|
||||
TCMP = 10;
|
||||
|
||||
request_irq(IRQ_MACHSPEC | 1, timer_routine, 0, "timer", NULL);
|
||||
#endif
|
||||
|
||||
/* General purpose quicc timers: MC68360UM p7-20 */
|
||||
|
||||
/* Set up timer 1 (in [1..4]) to do 100Hz */
|
||||
tgcr_save = pquicc->timer_tgcr & 0xfff0;
|
||||
pquicc->timer_tgcr = tgcr_save; /* stop and reset timer 1 */
|
||||
/* pquicc->timer_tgcr |= 0x4444; */ /* halt timers when FREEZE (ie bdm freeze) */
|
||||
|
||||
prescaler = 8;
|
||||
pquicc->timer_tmr1 = 0x001a | /* or=1, frr=1, iclk=01b */
|
||||
(unsigned short)((prescaler - 1) << 8);
|
||||
|
||||
pquicc->timer_tcn1 = 0x0000; /* initial count */
|
||||
/* calculate interval for 100Hz based on the _system_clock: */
|
||||
pquicc->timer_trr1 = (system_clock/ prescaler) / HZ; /* reference count */
|
||||
|
||||
pquicc->timer_ter1 = 0x0003; /* clear timer events */
|
||||
|
||||
timer_interrupt = handler;
|
||||
|
||||
/* enable timer 1 interrupt in CIMR */
|
||||
setup_irq(CPMVEC_TIMER1, &m68360_timer_irq);
|
||||
|
||||
/* Start timer 1: */
|
||||
tgcr_save = (pquicc->timer_tgcr & 0xfff0) | 0x0001;
|
||||
pquicc->timer_tgcr = tgcr_save;
|
||||
}
|
||||
|
||||
int BSP_set_clock_mmss(unsigned long nowtime)
|
||||
{
|
||||
#if 0
|
||||
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
|
||||
|
||||
tod->second1 = real_seconds / 10;
|
||||
tod->second2 = real_seconds % 10;
|
||||
tod->minute1 = real_minutes / 10;
|
||||
tod->minute2 = real_minutes % 10;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BSP_reset (void)
|
||||
{
|
||||
local_irq_disable();
|
||||
asm volatile (
|
||||
"moveal #_start, %a0;\n"
|
||||
"moveb #0, 0xFFFFF300;\n"
|
||||
"moveal 0(%a0), %sp;\n"
|
||||
"moveal 4(%a0), %a0;\n"
|
||||
"jmp (%a0);\n"
|
||||
);
|
||||
}
|
||||
|
||||
unsigned char *scc1_hwaddr;
|
||||
static int errno;
|
||||
|
||||
#if defined (CONFIG_UCQUICC)
|
||||
_bsc0(char *, getserialnum)
|
||||
_bsc1(unsigned char *, gethwaddr, int, a)
|
||||
_bsc1(char *, getbenv, char *, a)
|
||||
#endif
|
||||
|
||||
|
||||
void __init config_BSP(char *command, int len)
|
||||
{
|
||||
unsigned char *p;
|
||||
|
||||
m360_cpm_reset();
|
||||
|
||||
/* Calculate the real system clock value. */
|
||||
{
|
||||
unsigned int local_pllcr = (unsigned int)(pquicc->sim_pllcr);
|
||||
if( local_pllcr & MCU_PREEN ) // If the prescaler is dividing by 128
|
||||
{
|
||||
int mf = (int)(pquicc->sim_pllcr & 0x0fff);
|
||||
system_clock = (OSCILLATOR / 128) * (mf + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
int mf = (int)(pquicc->sim_pllcr & 0x0fff);
|
||||
system_clock = (OSCILLATOR) * (mf + 1);
|
||||
}
|
||||
}
|
||||
|
||||
printk(KERN_INFO "\n68360 QUICC support (C) 2000 Lineo Inc.\n");
|
||||
|
||||
#if defined(CONFIG_UCQUICC) && 0
|
||||
printk(KERN_INFO "uCquicc serial string [%s]\n",getserialnum());
|
||||
p = scc1_hwaddr = gethwaddr(0);
|
||||
printk(KERN_INFO "uCquicc hwaddr %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
|
||||
p[0], p[1], p[2], p[3], p[4], p[5]);
|
||||
|
||||
p = getbenv("APPEND");
|
||||
if (p)
|
||||
strcpy(p,command);
|
||||
else
|
||||
command[0] = 0;
|
||||
#else
|
||||
scc1_hwaddr = "\00\01\02\03\04\05";
|
||||
#endif
|
||||
|
||||
mach_reset = BSP_reset;
|
||||
}
|
||||
164
arch/m68k/68360/entry.S
Normal file
164
arch/m68k/68360/entry.S
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
* entry.S - non-mmu 68360 interrupt and exceptions entry points
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
* Copyright (C) 2001 SED Systems, a Division of Calian Ltd.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file README.legal in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Linux/m68k support by Hamish Macdonald
|
||||
* M68360 Port by SED Systems, and Lineo.
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/entry.h>
|
||||
|
||||
.text
|
||||
|
||||
.globl system_call
|
||||
.globl resume
|
||||
.globl ret_from_exception
|
||||
.globl ret_from_signal
|
||||
.globl sys_call_table
|
||||
.globl bad_interrupt
|
||||
.globl inthandler
|
||||
|
||||
badsys:
|
||||
movel #-ENOSYS,%sp@(PT_OFF_D0)
|
||||
jra ret_from_exception
|
||||
|
||||
do_trace:
|
||||
movel #-ENOSYS,%sp@(PT_OFF_D0) /* needed for strace*/
|
||||
subql #4,%sp
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_enter
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
movel %sp@(PT_OFF_ORIG_D0),%d1
|
||||
movel #-ENOSYS,%d0
|
||||
cmpl #NR_syscalls,%d1
|
||||
jcc 1f
|
||||
lsl #2,%d1
|
||||
lea sys_call_table, %a0
|
||||
jbsr %a0@(%d1)
|
||||
|
||||
1: movel %d0,%sp@(PT_OFF_D0) /* save the return value */
|
||||
subql #4,%sp /* dummy return address */
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_leave
|
||||
|
||||
ret_from_signal:
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
jra ret_from_exception
|
||||
|
||||
ENTRY(system_call)
|
||||
SAVE_ALL_SYS
|
||||
|
||||
/* save top of frame*/
|
||||
pea %sp@
|
||||
jbsr set_esp0
|
||||
addql #4,%sp
|
||||
|
||||
movel %sp@(PT_OFF_ORIG_D0),%d0
|
||||
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1
|
||||
movel %d1,%a2
|
||||
btst #(TIF_SYSCALL_TRACE%8),%a2@(TINFO_FLAGS+(31-TIF_SYSCALL_TRACE)/8)
|
||||
jne do_trace
|
||||
cmpl #NR_syscalls,%d0
|
||||
jcc badsys
|
||||
lsl #2,%d0
|
||||
lea sys_call_table,%a0
|
||||
movel %a0@(%d0), %a0
|
||||
jbsr %a0@
|
||||
movel %d0,%sp@(PT_OFF_D0) /* save the return value*/
|
||||
|
||||
ret_from_exception:
|
||||
btst #5,%sp@(PT_OFF_SR) /* check if returning to kernel*/
|
||||
jeq Luser_return /* if so, skip resched, signals*/
|
||||
|
||||
Lkernel_return:
|
||||
RESTORE_ALL
|
||||
|
||||
Luser_return:
|
||||
/* only allow interrupts when we are really the last one on the*/
|
||||
/* kernel stack, otherwise stack overflow can occur during*/
|
||||
/* heavy interrupt load*/
|
||||
andw #ALLOWINT,%sr
|
||||
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1
|
||||
movel %d1,%a2
|
||||
1:
|
||||
move %a2@(TINFO_FLAGS),%d1 /* thread_info->flags */
|
||||
jne Lwork_to_do
|
||||
RESTORE_ALL
|
||||
|
||||
Lwork_to_do:
|
||||
movel %a2@(TINFO_FLAGS),%d1 /* thread_info->flags */
|
||||
btst #TIF_NEED_RESCHED,%d1
|
||||
jne reschedule
|
||||
|
||||
Lsignal_return:
|
||||
subql #4,%sp /* dummy return address*/
|
||||
SAVE_SWITCH_STACK
|
||||
pea %sp@(SWITCH_STACK_SIZE)
|
||||
bsrw do_notify_resume
|
||||
addql #4,%sp
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
jra 1b
|
||||
|
||||
/*
|
||||
* This is the main interrupt handler, responsible for calling do_IRQ()
|
||||
*/
|
||||
inthandler:
|
||||
SAVE_ALL_INT
|
||||
movew %sp@(PT_OFF_FORMATVEC), %d0
|
||||
and.l #0x3ff, %d0
|
||||
lsr.l #0x02, %d0
|
||||
|
||||
movel %sp,%sp@-
|
||||
movel %d0,%sp@- /* put vector # on stack*/
|
||||
jbsr do_IRQ /* process the IRQ */
|
||||
addql #8,%sp /* pop parameters off stack*/
|
||||
jra ret_from_exception
|
||||
|
||||
/*
|
||||
* Handler for uninitialized and spurious interrupts.
|
||||
*/
|
||||
bad_interrupt:
|
||||
addql #1,irq_err_count
|
||||
rte
|
||||
|
||||
/*
|
||||
* Beware - when entering resume, prev (the current task) is
|
||||
* in a0, next (the new task) is in a1, so don't change these
|
||||
* registers until their contents are no longer needed.
|
||||
*/
|
||||
ENTRY(resume)
|
||||
movel %a0,%d1 /* save prev thread in d1 */
|
||||
movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */
|
||||
SAVE_SWITCH_STACK
|
||||
movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */
|
||||
movel %usp,%a3 /* save usp */
|
||||
movel %a3,%a0@(TASK_THREAD+THREAD_USP)
|
||||
|
||||
movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore user stack */
|
||||
movel %a3,%usp
|
||||
movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */
|
||||
RESTORE_SWITCH_STACK
|
||||
movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */
|
||||
rts
|
||||
|
||||
402
arch/m68k/68360/head-ram.S
Normal file
402
arch/m68k/68360/head-ram.S
Normal file
|
|
@ -0,0 +1,402 @@
|
|||
/*
|
||||
* head-ram.S - startup code for Motorola 68360
|
||||
*
|
||||
* Copyright 2001 (C) SED Systems, a Division of Calian Ltd.
|
||||
* Based on: arch/m68knommu/platform/68328/pilot/crt0_rom.S
|
||||
* Based on: arch/m68knommu/platform/68360/uCquicc/crt0_rom.S, 2.0.38.1.pre7
|
||||
* uClinux Kernel
|
||||
* Copyright (C) Michael Leslie <mleslie@lineo.com>
|
||||
* Based on: arch/m68knommu/platform/68EZ328/ucsimm/crt0_rom.S
|
||||
* Copyright (C) 1998 D. Jeff Dionne <jeff@uclinux.org>,
|
||||
*
|
||||
*/
|
||||
#define ASSEMBLY
|
||||
|
||||
.global _stext
|
||||
.global _start
|
||||
|
||||
.global _rambase
|
||||
.global _ramvec
|
||||
.global _ramstart
|
||||
.global _ramend
|
||||
|
||||
.global _quicc_base
|
||||
.global _periph_base
|
||||
|
||||
#define RAMEND (CONFIG_RAMBASE + CONFIG_RAMSIZE)
|
||||
#define ROMEND (CONFIG_ROMBASE + CONFIG_ROMSIZE)
|
||||
|
||||
#define REGB 0x1000
|
||||
#define PEPAR (_dprbase + REGB + 0x0016)
|
||||
#define GMR (_dprbase + REGB + 0x0040)
|
||||
#define OR0 (_dprbase + REGB + 0x0054)
|
||||
#define BR0 (_dprbase + REGB + 0x0050)
|
||||
#define OR1 (_dprbase + REGB + 0x0064)
|
||||
#define BR1 (_dprbase + REGB + 0x0060)
|
||||
#define OR4 (_dprbase + REGB + 0x0094)
|
||||
#define BR4 (_dprbase + REGB + 0x0090)
|
||||
#define OR6 (_dprbase + REGB + 0x00b4)
|
||||
#define BR6 (_dprbase + REGB + 0x00b0)
|
||||
#define OR7 (_dprbase + REGB + 0x00c4)
|
||||
#define BR7 (_dprbase + REGB + 0x00c0)
|
||||
|
||||
#define MCR (_dprbase + REGB + 0x0000)
|
||||
#define AVR (_dprbase + REGB + 0x0008)
|
||||
|
||||
#define SYPCR (_dprbase + REGB + 0x0022)
|
||||
|
||||
#define PLLCR (_dprbase + REGB + 0x0010)
|
||||
#define CLKOCR (_dprbase + REGB + 0x000C)
|
||||
#define CDVCR (_dprbase + REGB + 0x0014)
|
||||
|
||||
#define BKAR (_dprbase + REGB + 0x0030)
|
||||
#define BKCR (_dprbase + REGB + 0x0034)
|
||||
#define SWIV (_dprbase + REGB + 0x0023)
|
||||
#define PICR (_dprbase + REGB + 0x0026)
|
||||
#define PITR (_dprbase + REGB + 0x002A)
|
||||
|
||||
/* Define for all memory configuration */
|
||||
#define MCU_SIM_GMR 0x00000000
|
||||
#define SIM_OR_MASK 0x0fffffff
|
||||
|
||||
/* Defines for chip select zero - the flash */
|
||||
#define SIM_OR0_MASK 0x20000002
|
||||
#define SIM_BR0_MASK 0x00000001
|
||||
|
||||
|
||||
/* Defines for chip select one - the RAM */
|
||||
#define SIM_OR1_MASK 0x10000000
|
||||
#define SIM_BR1_MASK 0x00000001
|
||||
|
||||
#define MCU_SIM_MBAR_ADRS 0x0003ff00
|
||||
#define MCU_SIM_MBAR_BA_MASK 0xfffff000
|
||||
#define MCU_SIM_MBAR_AS_MASK 0x00000001
|
||||
|
||||
#define MCU_SIM_PEPAR 0x00B4
|
||||
|
||||
#define MCU_DISABLE_INTRPTS 0x2700
|
||||
#define MCU_SIM_AVR 0x00
|
||||
|
||||
#define MCU_SIM_MCR 0x00005cff
|
||||
|
||||
#define MCU_SIM_CLKOCR 0x00
|
||||
#define MCU_SIM_PLLCR 0x8000
|
||||
#define MCU_SIM_CDVCR 0x0000
|
||||
|
||||
#define MCU_SIM_SYPCR 0x0000
|
||||
#define MCU_SIM_SWIV 0x00
|
||||
#define MCU_SIM_PICR 0x0000
|
||||
#define MCU_SIM_PITR 0x0000
|
||||
|
||||
|
||||
#include <asm/m68360_regs.h>
|
||||
|
||||
|
||||
/*
|
||||
* By the time this RAM specific code begins to execute, DPRAM
|
||||
* and DRAM should already be mapped and accessible.
|
||||
*/
|
||||
|
||||
.text
|
||||
_start:
|
||||
_stext:
|
||||
nop
|
||||
ori.w #MCU_DISABLE_INTRPTS, %sr /* disable interrupts: */
|
||||
/* We should not need to setup the boot stack the reset should do it. */
|
||||
movea.l #RAMEND, %sp /*set up stack at the end of DRAM:*/
|
||||
|
||||
set_mbar_register:
|
||||
moveq.l #0x07, %d1 /* Setup MBAR */
|
||||
movec %d1, %dfc
|
||||
|
||||
lea.l MCU_SIM_MBAR_ADRS, %a0
|
||||
move.l #_dprbase, %d0
|
||||
andi.l #MCU_SIM_MBAR_BA_MASK, %d0
|
||||
ori.l #MCU_SIM_MBAR_AS_MASK, %d0
|
||||
moves.l %d0, %a0@
|
||||
|
||||
moveq.l #0x05, %d1
|
||||
movec.l %d1, %dfc
|
||||
|
||||
/* Now we can begin to access registers in DPRAM */
|
||||
|
||||
set_sim_mcr:
|
||||
/* Set Module Configuration Register */
|
||||
move.l #MCU_SIM_MCR, MCR
|
||||
|
||||
/* to do: Determine cause of reset */
|
||||
|
||||
/*
|
||||
* configure system clock MC68360 p. 6-40
|
||||
* (value +1)*osc/128 = system clock
|
||||
*/
|
||||
set_sim_clock:
|
||||
move.w #MCU_SIM_PLLCR, PLLCR
|
||||
move.b #MCU_SIM_CLKOCR, CLKOCR
|
||||
move.w #MCU_SIM_CDVCR, CDVCR
|
||||
|
||||
/* Wait for the PLL to settle */
|
||||
move.w #16384, %d0
|
||||
pll_settle_wait:
|
||||
subi.w #1, %d0
|
||||
bne pll_settle_wait
|
||||
|
||||
/* Setup the system protection register, and watchdog timer register */
|
||||
move.b #MCU_SIM_SWIV, SWIV
|
||||
move.w #MCU_SIM_PICR, PICR
|
||||
move.w #MCU_SIM_PITR, PITR
|
||||
move.w #MCU_SIM_SYPCR, SYPCR
|
||||
|
||||
/* Clear DPRAM - system + parameter */
|
||||
movea.l #_dprbase, %a0
|
||||
movea.l #_dprbase+0x2000, %a1
|
||||
|
||||
/* Copy 0 to %a0 until %a0 == %a1 */
|
||||
clear_dpram:
|
||||
movel #0, %a0@+
|
||||
cmpal %a0, %a1
|
||||
bhi clear_dpram
|
||||
|
||||
configure_memory_controller:
|
||||
/* Set up Global Memory Register (GMR) */
|
||||
move.l #MCU_SIM_GMR, %d0
|
||||
move.l %d0, GMR
|
||||
|
||||
configure_chip_select_0:
|
||||
move.l #RAMEND, %d0
|
||||
subi.l #__ramstart, %d0
|
||||
subq.l #0x01, %d0
|
||||
eori.l #SIM_OR_MASK, %d0
|
||||
ori.l #SIM_OR0_MASK, %d0
|
||||
move.l %d0, OR0
|
||||
|
||||
move.l #__ramstart, %d0
|
||||
ori.l #SIM_BR0_MASK, %d0
|
||||
move.l %d0, BR0
|
||||
|
||||
configure_chip_select_1:
|
||||
move.l #ROMEND, %d0
|
||||
subi.l #__rom_start, %d0
|
||||
subq.l #0x01, %d0
|
||||
eori.l #SIM_OR_MASK, %d0
|
||||
ori.l #SIM_OR1_MASK, %d0
|
||||
move.l %d0, OR1
|
||||
|
||||
move.l #__rom_start, %d0
|
||||
ori.l #SIM_BR1_MASK, %d0
|
||||
move.l %d0, BR1
|
||||
|
||||
move.w #MCU_SIM_PEPAR, PEPAR
|
||||
|
||||
/* point to vector table: */
|
||||
move.l #_romvec, %a0
|
||||
move.l #_ramvec, %a1
|
||||
copy_vectors:
|
||||
move.l %a0@, %d0
|
||||
move.l %d0, %a1@
|
||||
move.l %a0@, %a1@
|
||||
addq.l #0x04, %a0
|
||||
addq.l #0x04, %a1
|
||||
cmp.l #_start, %a0
|
||||
blt copy_vectors
|
||||
|
||||
move.l #_ramvec, %a1
|
||||
movec %a1, %vbr
|
||||
|
||||
|
||||
/* Copy data segment from ROM to RAM */
|
||||
moveal #_stext, %a0
|
||||
moveal #_sdata, %a1
|
||||
moveal #_edata, %a2
|
||||
|
||||
/* Copy %a0 to %a1 until %a1 == %a2 */
|
||||
LD1:
|
||||
move.l %a0@, %d0
|
||||
addq.l #0x04, %a0
|
||||
move.l %d0, %a1@
|
||||
addq.l #0x04, %a1
|
||||
cmp.l #_edata, %a1
|
||||
blt LD1
|
||||
|
||||
moveal #__bss_start, %a0
|
||||
moveal #__bss_stop, %a1
|
||||
|
||||
/* Copy 0 to %a0 until %a0 == %a1 */
|
||||
L1:
|
||||
movel #0, %a0@+
|
||||
cmpal %a0, %a1
|
||||
bhi L1
|
||||
|
||||
load_quicc:
|
||||
move.l #_dprbase, _quicc_base
|
||||
|
||||
store_ram_size:
|
||||
/* Set ram size information */
|
||||
move.l #_sdata, _rambase
|
||||
move.l #__bss_stop, _ramstart
|
||||
move.l #RAMEND, %d0
|
||||
sub.l #0x1000, %d0 /* Reserve 4K for stack space.*/
|
||||
move.l %d0, _ramend /* Different from RAMEND.*/
|
||||
|
||||
pea 0
|
||||
pea env
|
||||
pea %sp@(4)
|
||||
pea 0
|
||||
|
||||
lea init_thread_union, %a2
|
||||
lea 0x2000(%a2), %sp
|
||||
|
||||
lp:
|
||||
jsr start_kernel
|
||||
|
||||
_exit:
|
||||
jmp _exit
|
||||
|
||||
|
||||
.data
|
||||
.align 4
|
||||
env:
|
||||
.long 0
|
||||
_quicc_base:
|
||||
.long 0
|
||||
_periph_base:
|
||||
.long 0
|
||||
_ramvec:
|
||||
.long 0
|
||||
_rambase:
|
||||
.long 0
|
||||
_ramstart:
|
||||
.long 0
|
||||
_ramend:
|
||||
.long 0
|
||||
_dprbase:
|
||||
.long 0xffffe000
|
||||
|
||||
.text
|
||||
|
||||
/*
|
||||
* These are the exception vectors at boot up, they are copied into RAM
|
||||
* and then overwritten as needed.
|
||||
*/
|
||||
|
||||
.section ".data..initvect","awx"
|
||||
.long RAMEND /* Reset: Initial Stack Pointer - 0. */
|
||||
.long _start /* Reset: Initial Program Counter - 1. */
|
||||
.long buserr /* Bus Error - 2. */
|
||||
.long trap /* Address Error - 3. */
|
||||
.long trap /* Illegal Instruction - 4. */
|
||||
.long trap /* Divide by zero - 5. */
|
||||
.long trap /* CHK, CHK2 Instructions - 6. */
|
||||
.long trap /* TRAPcc, TRAPV Instructions - 7. */
|
||||
.long trap /* Privilege Violation - 8. */
|
||||
.long trap /* Trace - 9. */
|
||||
.long trap /* Line 1010 Emulator - 10. */
|
||||
.long trap /* Line 1111 Emualtor - 11. */
|
||||
.long trap /* Harware Breakpoint - 12. */
|
||||
.long trap /* (Reserved for Coprocessor Protocol Violation)- 13. */
|
||||
.long trap /* Format Error - 14. */
|
||||
.long trap /* Uninitialized Interrupt - 15. */
|
||||
.long trap /* (Unassigned, Reserver) - 16. */
|
||||
.long trap /* (Unassigned, Reserver) - 17. */
|
||||
.long trap /* (Unassigned, Reserver) - 18. */
|
||||
.long trap /* (Unassigned, Reserver) - 19. */
|
||||
.long trap /* (Unassigned, Reserver) - 20. */
|
||||
.long trap /* (Unassigned, Reserver) - 21. */
|
||||
.long trap /* (Unassigned, Reserver) - 22. */
|
||||
.long trap /* (Unassigned, Reserver) - 23. */
|
||||
.long trap /* Spurious Interrupt - 24. */
|
||||
.long trap /* Level 1 Interrupt Autovector - 25. */
|
||||
.long trap /* Level 2 Interrupt Autovector - 26. */
|
||||
.long trap /* Level 3 Interrupt Autovector - 27. */
|
||||
.long trap /* Level 4 Interrupt Autovector - 28. */
|
||||
.long trap /* Level 5 Interrupt Autovector - 29. */
|
||||
.long trap /* Level 6 Interrupt Autovector - 30. */
|
||||
.long trap /* Level 7 Interrupt Autovector - 31. */
|
||||
.long system_call /* Trap Instruction Vectors 0 - 32. */
|
||||
.long trap /* Trap Instruction Vectors 1 - 33. */
|
||||
.long trap /* Trap Instruction Vectors 2 - 34. */
|
||||
.long trap /* Trap Instruction Vectors 3 - 35. */
|
||||
.long trap /* Trap Instruction Vectors 4 - 36. */
|
||||
.long trap /* Trap Instruction Vectors 5 - 37. */
|
||||
.long trap /* Trap Instruction Vectors 6 - 38. */
|
||||
.long trap /* Trap Instruction Vectors 7 - 39. */
|
||||
.long trap /* Trap Instruction Vectors 8 - 40. */
|
||||
.long trap /* Trap Instruction Vectors 9 - 41. */
|
||||
.long trap /* Trap Instruction Vectors 10 - 42. */
|
||||
.long trap /* Trap Instruction Vectors 11 - 43. */
|
||||
.long trap /* Trap Instruction Vectors 12 - 44. */
|
||||
.long trap /* Trap Instruction Vectors 13 - 45. */
|
||||
.long trap /* Trap Instruction Vectors 14 - 46. */
|
||||
.long trap /* Trap Instruction Vectors 15 - 47. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 48. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 49. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 50. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 51. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 52. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 53. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 54. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 55. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 56. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 57. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 58. */
|
||||
.long 0 /* (Unassigned, Reserved) - 59. */
|
||||
.long 0 /* (Unassigned, Reserved) - 60. */
|
||||
.long 0 /* (Unassigned, Reserved) - 61. */
|
||||
.long 0 /* (Unassigned, Reserved) - 62. */
|
||||
.long 0 /* (Unassigned, Reserved) - 63. */
|
||||
/* The assignment of these vectors to the CPM is */
|
||||
/* dependent on the configuration of the CPM vba */
|
||||
/* fields. */
|
||||
.long 0 /* (User-Defined Vectors 1) CPM Error - 64. */
|
||||
.long 0 /* (User-Defined Vectors 2) CPM Parallel IO PC11- 65. */
|
||||
.long 0 /* (User-Defined Vectors 3) CPM Parallel IO PC10- 66. */
|
||||
.long 0 /* (User-Defined Vectors 4) CPM SMC2 / PIP - 67. */
|
||||
.long 0 /* (User-Defined Vectors 5) CPM SMC1 - 68. */
|
||||
.long 0 /* (User-Defined Vectors 6) CPM SPI - 69. */
|
||||
.long 0 /* (User-Defined Vectors 7) CPM Parallel IO PC9 - 70. */
|
||||
.long 0 /* (User-Defined Vectors 8) CPM Timer 4 - 71. */
|
||||
.long 0 /* (User-Defined Vectors 9) CPM Reserved - 72. */
|
||||
.long 0 /* (User-Defined Vectors 10) CPM Parallel IO PC8- 73. */
|
||||
.long 0 /* (User-Defined Vectors 11) CPM Parallel IO PC7- 74. */
|
||||
.long 0 /* (User-Defined Vectors 12) CPM Parallel IO PC6- 75. */
|
||||
.long 0 /* (User-Defined Vectors 13) CPM Timer 3 - 76. */
|
||||
.long 0 /* (User-Defined Vectors 14) CPM Reserved - 77. */
|
||||
.long 0 /* (User-Defined Vectors 15) CPM Parallel IO PC5- 78. */
|
||||
.long 0 /* (User-Defined Vectors 16) CPM Parallel IO PC4- 79. */
|
||||
.long 0 /* (User-Defined Vectors 17) CPM Reserved - 80. */
|
||||
.long 0 /* (User-Defined Vectors 18) CPM RISC Timer Tbl - 81. */
|
||||
.long 0 /* (User-Defined Vectors 19) CPM Timer 2 - 82. */
|
||||
.long 0 /* (User-Defined Vectors 21) CPM Reserved - 83. */
|
||||
.long 0 /* (User-Defined Vectors 22) CPM IDMA2 - 84. */
|
||||
.long 0 /* (User-Defined Vectors 23) CPM IDMA1 - 85. */
|
||||
.long 0 /* (User-Defined Vectors 24) CPM SDMA Bus Err - 86. */
|
||||
.long 0 /* (User-Defined Vectors 25) CPM Parallel IO PC3- 87. */
|
||||
.long 0 /* (User-Defined Vectors 26) CPM Parallel IO PC2- 88. */
|
||||
.long 0 /* (User-Defined Vectors 27) CPM Timer 1 - 89. */
|
||||
.long 0 /* (User-Defined Vectors 28) CPM Parallel IO PC1- 90. */
|
||||
.long 0 /* (User-Defined Vectors 29) CPM SCC 4 - 91. */
|
||||
.long 0 /* (User-Defined Vectors 30) CPM SCC 3 - 92. */
|
||||
.long 0 /* (User-Defined Vectors 31) CPM SCC 2 - 93. */
|
||||
.long 0 /* (User-Defined Vectors 32) CPM SCC 1 - 94. */
|
||||
.long 0 /* (User-Defined Vectors 33) CPM Parallel IO PC0- 95. */
|
||||
/* I don't think anything uses the vectors after here. */
|
||||
.long 0 /* (User-Defined Vectors 34) - 96. */
|
||||
.long 0,0,0,0,0 /* (User-Defined Vectors 35 - 39). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 40 - 49). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 50 - 59). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 60 - 69). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 70 - 79). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 80 - 89). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 90 - 99). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 100 - 109). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 110 - 119). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 120 - 129). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 130 - 139). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 140 - 149). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 150 - 159). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 160 - 169). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 170 - 179). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 180 - 189). */
|
||||
.long 0,0,0 /* (User-Defined Vectors 190 - 192). */
|
||||
.text
|
||||
ignore: rte
|
||||
413
arch/m68k/68360/head-rom.S
Normal file
413
arch/m68k/68360/head-rom.S
Normal file
|
|
@ -0,0 +1,413 @@
|
|||
/*
|
||||
* head-rom.S - startup code for Motorola 68360
|
||||
*
|
||||
* Copyright (C) SED Systems, a Division of Calian Ltd.
|
||||
* Based on: arch/m68knommu/platform/68328/pilot/crt0_rom.S
|
||||
* Based on: arch/m68knommu/platform/68360/uCquicc/crt0_rom.S, 2.0.38.1.pre7
|
||||
* uClinux Kernel
|
||||
* Copyright (C) Michael Leslie <mleslie@lineo.com>
|
||||
* Based on: arch/m68knommu/platform/68EZ328/ucsimm/crt0_rom.S
|
||||
* Copyright (C) 1998 D. Jeff Dionne <jeff@uclinux.org>,
|
||||
*
|
||||
*/
|
||||
|
||||
.global _stext
|
||||
.global __bss_start
|
||||
.global _start
|
||||
|
||||
.global _rambase
|
||||
.global _ramvec
|
||||
.global _ramstart
|
||||
.global _ramend
|
||||
|
||||
.global _quicc_base
|
||||
.global _periph_base
|
||||
|
||||
#define RAMEND (CONFIG_RAMBASE + CONFIG_RAMSIZE)
|
||||
|
||||
#define REGB 0x1000
|
||||
#define PEPAR (_dprbase + REGB + 0x0016)
|
||||
#define GMR (_dprbase + REGB + 0x0040)
|
||||
#define OR0 (_dprbase + REGB + 0x0054)
|
||||
#define BR0 (_dprbase + REGB + 0x0050)
|
||||
|
||||
#define OR1 (_dprbase + REGB + 0x0064)
|
||||
#define BR1 (_dprbase + REGB + 0x0060)
|
||||
|
||||
#define OR2 (_dprbase + REGB + 0x0074)
|
||||
#define BR2 (_dprbase + REGB + 0x0070)
|
||||
|
||||
#define OR3 (_dprbase + REGB + 0x0084)
|
||||
#define BR3 (_dprbase + REGB + 0x0080)
|
||||
|
||||
#define OR4 (_dprbase + REGB + 0x0094)
|
||||
#define BR4 (_dprbase + REGB + 0x0090)
|
||||
|
||||
#define OR5 (_dprbase + REGB + 0x00A4)
|
||||
#define BR5 (_dprbase + REGB + 0x00A0)
|
||||
|
||||
#define OR6 (_dprbase + REGB + 0x00b4)
|
||||
#define BR6 (_dprbase + REGB + 0x00b0)
|
||||
|
||||
#define OR7 (_dprbase + REGB + 0x00c4)
|
||||
#define BR7 (_dprbase + REGB + 0x00c0)
|
||||
|
||||
#define MCR (_dprbase + REGB + 0x0000)
|
||||
#define AVR (_dprbase + REGB + 0x0008)
|
||||
|
||||
#define SYPCR (_dprbase + REGB + 0x0022)
|
||||
|
||||
#define PLLCR (_dprbase + REGB + 0x0010)
|
||||
#define CLKOCR (_dprbase + REGB + 0x000C)
|
||||
#define CDVCR (_dprbase + REGB + 0x0014)
|
||||
|
||||
#define BKAR (_dprbase + REGB + 0x0030)
|
||||
#define BKCR (_dprbase + REGB + 0x0034)
|
||||
#define SWIV (_dprbase + REGB + 0x0023)
|
||||
#define PICR (_dprbase + REGB + 0x0026)
|
||||
#define PITR (_dprbase + REGB + 0x002A)
|
||||
|
||||
/* Define for all memory configuration */
|
||||
#define MCU_SIM_GMR 0x00000000
|
||||
#define SIM_OR_MASK 0x0fffffff
|
||||
|
||||
/* Defines for chip select zero - the flash */
|
||||
#define SIM_OR0_MASK 0x20000000
|
||||
#define SIM_BR0_MASK 0x00000001
|
||||
|
||||
/* Defines for chip select one - the RAM */
|
||||
#define SIM_OR1_MASK 0x10000000
|
||||
#define SIM_BR1_MASK 0x00000001
|
||||
|
||||
#define MCU_SIM_MBAR_ADRS 0x0003ff00
|
||||
#define MCU_SIM_MBAR_BA_MASK 0xfffff000
|
||||
#define MCU_SIM_MBAR_AS_MASK 0x00000001
|
||||
|
||||
#define MCU_SIM_PEPAR 0x00B4
|
||||
|
||||
#define MCU_DISABLE_INTRPTS 0x2700
|
||||
#define MCU_SIM_AVR 0x00
|
||||
|
||||
#define MCU_SIM_MCR 0x00005cff
|
||||
|
||||
#define MCU_SIM_CLKOCR 0x00
|
||||
#define MCU_SIM_PLLCR 0x8000
|
||||
#define MCU_SIM_CDVCR 0x0000
|
||||
|
||||
#define MCU_SIM_SYPCR 0x0000
|
||||
#define MCU_SIM_SWIV 0x00
|
||||
#define MCU_SIM_PICR 0x0000
|
||||
#define MCU_SIM_PITR 0x0000
|
||||
|
||||
|
||||
#include <asm/m68360_regs.h>
|
||||
|
||||
|
||||
/*
|
||||
* By the time this RAM specific code begins to execute, DPRAM
|
||||
* and DRAM should already be mapped and accessible.
|
||||
*/
|
||||
|
||||
.text
|
||||
_start:
|
||||
_stext:
|
||||
nop
|
||||
ori.w #MCU_DISABLE_INTRPTS, %sr /* disable interrupts: */
|
||||
/* We should not need to setup the boot stack the reset should do it. */
|
||||
movea.l #RAMEND, %sp /* set up stack at the end of DRAM:*/
|
||||
|
||||
|
||||
set_mbar_register:
|
||||
moveq.l #0x07, %d1 /* Setup MBAR */
|
||||
movec %d1, %dfc
|
||||
|
||||
lea.l MCU_SIM_MBAR_ADRS, %a0
|
||||
move.l #_dprbase, %d0
|
||||
andi.l #MCU_SIM_MBAR_BA_MASK, %d0
|
||||
ori.l #MCU_SIM_MBAR_AS_MASK, %d0
|
||||
moves.l %d0, %a0@
|
||||
|
||||
moveq.l #0x05, %d1
|
||||
movec.l %d1, %dfc
|
||||
|
||||
/* Now we can begin to access registers in DPRAM */
|
||||
|
||||
set_sim_mcr:
|
||||
/* Set Module Configuration Register */
|
||||
move.l #MCU_SIM_MCR, MCR
|
||||
|
||||
/* to do: Determine cause of reset */
|
||||
|
||||
/*
|
||||
* configure system clock MC68360 p. 6-40
|
||||
* (value +1)*osc/128 = system clock
|
||||
* or
|
||||
* (value + 1)*osc = system clock
|
||||
* You do not need to divide the oscillator by 128 unless you want to.
|
||||
*/
|
||||
set_sim_clock:
|
||||
move.w #MCU_SIM_PLLCR, PLLCR
|
||||
move.b #MCU_SIM_CLKOCR, CLKOCR
|
||||
move.w #MCU_SIM_CDVCR, CDVCR
|
||||
|
||||
/* Wait for the PLL to settle */
|
||||
move.w #16384, %d0
|
||||
pll_settle_wait:
|
||||
subi.w #1, %d0
|
||||
bne pll_settle_wait
|
||||
|
||||
/* Setup the system protection register, and watchdog timer register */
|
||||
move.b #MCU_SIM_SWIV, SWIV
|
||||
move.w #MCU_SIM_PICR, PICR
|
||||
move.w #MCU_SIM_PITR, PITR
|
||||
move.w #MCU_SIM_SYPCR, SYPCR
|
||||
|
||||
/* Clear DPRAM - system + parameter */
|
||||
movea.l #_dprbase, %a0
|
||||
movea.l #_dprbase+0x2000, %a1
|
||||
|
||||
/* Copy 0 to %a0 until %a0 == %a1 */
|
||||
clear_dpram:
|
||||
movel #0, %a0@+
|
||||
cmpal %a0, %a1
|
||||
bhi clear_dpram
|
||||
|
||||
configure_memory_controller:
|
||||
/* Set up Global Memory Register (GMR) */
|
||||
move.l #MCU_SIM_GMR, %d0
|
||||
move.l %d0, GMR
|
||||
|
||||
configure_chip_select_0:
|
||||
move.l #0x00400000, %d0
|
||||
subq.l #0x01, %d0
|
||||
eori.l #SIM_OR_MASK, %d0
|
||||
ori.l #SIM_OR0_MASK, %d0
|
||||
move.l %d0, OR0
|
||||
|
||||
move.l #__rom_start, %d0
|
||||
ori.l #SIM_BR0_MASK, %d0
|
||||
move.l %d0, BR0
|
||||
|
||||
move.l #0x0, BR1
|
||||
move.l #0x0, BR2
|
||||
move.l #0x0, BR3
|
||||
move.l #0x0, BR4
|
||||
move.l #0x0, BR5
|
||||
move.l #0x0, BR6
|
||||
move.l #0x0, BR7
|
||||
|
||||
move.w #MCU_SIM_PEPAR, PEPAR
|
||||
|
||||
/* point to vector table: */
|
||||
move.l #_romvec, %a0
|
||||
move.l #_ramvec, %a1
|
||||
copy_vectors:
|
||||
move.l %a0@, %d0
|
||||
move.l %d0, %a1@
|
||||
move.l %a0@, %a1@
|
||||
addq.l #0x04, %a0
|
||||
addq.l #0x04, %a1
|
||||
cmp.l #_start, %a0
|
||||
blt copy_vectors
|
||||
|
||||
move.l #_ramvec, %a1
|
||||
movec %a1, %vbr
|
||||
|
||||
|
||||
/* Copy data segment from ROM to RAM */
|
||||
moveal #_etext, %a0
|
||||
moveal #_sdata, %a1
|
||||
moveal #_edata, %a2
|
||||
|
||||
/* Copy %a0 to %a1 until %a1 == %a2 */
|
||||
LD1:
|
||||
move.l %a0@, %d0
|
||||
addq.l #0x04, %a0
|
||||
move.l %d0, %a1@
|
||||
addq.l #0x04, %a1
|
||||
cmp.l #_edata, %a1
|
||||
blt LD1
|
||||
|
||||
moveal #__bss_start, %a0
|
||||
moveal #__bss_stop, %a1
|
||||
|
||||
/* Copy 0 to %a0 until %a0 == %a1 */
|
||||
L1:
|
||||
movel #0, %a0@+
|
||||
cmpal %a0, %a1
|
||||
bhi L1
|
||||
|
||||
load_quicc:
|
||||
move.l #_dprbase, _quicc_base
|
||||
|
||||
store_ram_size:
|
||||
/* Set ram size information */
|
||||
move.l #_sdata, _rambase
|
||||
move.l #__bss_stop, _ramstart
|
||||
move.l #RAMEND, %d0
|
||||
sub.l #0x1000, %d0 /* Reserve 4K for stack space.*/
|
||||
move.l %d0, _ramend /* Different from RAMEND.*/
|
||||
|
||||
pea 0
|
||||
pea env
|
||||
pea %sp@(4)
|
||||
pea 0
|
||||
|
||||
lea init_thread_union, %a2
|
||||
lea 0x2000(%a2), %sp
|
||||
|
||||
lp:
|
||||
jsr start_kernel
|
||||
|
||||
_exit:
|
||||
jmp _exit
|
||||
|
||||
|
||||
.data
|
||||
.align 4
|
||||
env:
|
||||
.long 0
|
||||
_quicc_base:
|
||||
.long 0
|
||||
_periph_base:
|
||||
.long 0
|
||||
_ramvec:
|
||||
.long 0
|
||||
_rambase:
|
||||
.long 0
|
||||
_ramstart:
|
||||
.long 0
|
||||
_ramend:
|
||||
.long 0
|
||||
_dprbase:
|
||||
.long 0xffffe000
|
||||
|
||||
|
||||
.text
|
||||
|
||||
/*
|
||||
* These are the exception vectors at boot up, they are copied into RAM
|
||||
* and then overwritten as needed.
|
||||
*/
|
||||
|
||||
.section ".data..initvect","awx"
|
||||
.long RAMEND /* Reset: Initial Stack Pointer - 0. */
|
||||
.long _start /* Reset: Initial Program Counter - 1. */
|
||||
.long buserr /* Bus Error - 2. */
|
||||
.long trap /* Address Error - 3. */
|
||||
.long trap /* Illegal Instruction - 4. */
|
||||
.long trap /* Divide by zero - 5. */
|
||||
.long trap /* CHK, CHK2 Instructions - 6. */
|
||||
.long trap /* TRAPcc, TRAPV Instructions - 7. */
|
||||
.long trap /* Privilege Violation - 8. */
|
||||
.long trap /* Trace - 9. */
|
||||
.long trap /* Line 1010 Emulator - 10. */
|
||||
.long trap /* Line 1111 Emualtor - 11. */
|
||||
.long trap /* Harware Breakpoint - 12. */
|
||||
.long trap /* (Reserved for Coprocessor Protocol Violation)- 13. */
|
||||
.long trap /* Format Error - 14. */
|
||||
.long trap /* Uninitialized Interrupt - 15. */
|
||||
.long trap /* (Unassigned, Reserver) - 16. */
|
||||
.long trap /* (Unassigned, Reserver) - 17. */
|
||||
.long trap /* (Unassigned, Reserver) - 18. */
|
||||
.long trap /* (Unassigned, Reserver) - 19. */
|
||||
.long trap /* (Unassigned, Reserver) - 20. */
|
||||
.long trap /* (Unassigned, Reserver) - 21. */
|
||||
.long trap /* (Unassigned, Reserver) - 22. */
|
||||
.long trap /* (Unassigned, Reserver) - 23. */
|
||||
.long trap /* Spurious Interrupt - 24. */
|
||||
.long trap /* Level 1 Interrupt Autovector - 25. */
|
||||
.long trap /* Level 2 Interrupt Autovector - 26. */
|
||||
.long trap /* Level 3 Interrupt Autovector - 27. */
|
||||
.long trap /* Level 4 Interrupt Autovector - 28. */
|
||||
.long trap /* Level 5 Interrupt Autovector - 29. */
|
||||
.long trap /* Level 6 Interrupt Autovector - 30. */
|
||||
.long trap /* Level 7 Interrupt Autovector - 31. */
|
||||
.long system_call /* Trap Instruction Vectors 0 - 32. */
|
||||
.long trap /* Trap Instruction Vectors 1 - 33. */
|
||||
.long trap /* Trap Instruction Vectors 2 - 34. */
|
||||
.long trap /* Trap Instruction Vectors 3 - 35. */
|
||||
.long trap /* Trap Instruction Vectors 4 - 36. */
|
||||
.long trap /* Trap Instruction Vectors 5 - 37. */
|
||||
.long trap /* Trap Instruction Vectors 6 - 38. */
|
||||
.long trap /* Trap Instruction Vectors 7 - 39. */
|
||||
.long trap /* Trap Instruction Vectors 8 - 40. */
|
||||
.long trap /* Trap Instruction Vectors 9 - 41. */
|
||||
.long trap /* Trap Instruction Vectors 10 - 42. */
|
||||
.long trap /* Trap Instruction Vectors 11 - 43. */
|
||||
.long trap /* Trap Instruction Vectors 12 - 44. */
|
||||
.long trap /* Trap Instruction Vectors 13 - 45. */
|
||||
.long trap /* Trap Instruction Vectors 14 - 46. */
|
||||
.long trap /* Trap Instruction Vectors 15 - 47. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 48. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 49. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 50. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 51. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 52. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 53. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 54. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 55. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 56. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 57. */
|
||||
.long 0 /* (Reserved for Coprocessor) - 58. */
|
||||
.long 0 /* (Unassigned, Reserved) - 59. */
|
||||
.long 0 /* (Unassigned, Reserved) - 60. */
|
||||
.long 0 /* (Unassigned, Reserved) - 61. */
|
||||
.long 0 /* (Unassigned, Reserved) - 62. */
|
||||
.long 0 /* (Unassigned, Reserved) - 63. */
|
||||
/* The assignment of these vectors to the CPM is */
|
||||
/* dependent on the configuration of the CPM vba */
|
||||
/* fields. */
|
||||
.long 0 /* (User-Defined Vectors 1) CPM Error - 64. */
|
||||
.long 0 /* (User-Defined Vectors 2) CPM Parallel IO PC11- 65. */
|
||||
.long 0 /* (User-Defined Vectors 3) CPM Parallel IO PC10- 66. */
|
||||
.long 0 /* (User-Defined Vectors 4) CPM SMC2 / PIP - 67. */
|
||||
.long 0 /* (User-Defined Vectors 5) CPM SMC1 - 68. */
|
||||
.long 0 /* (User-Defined Vectors 6) CPM SPI - 69. */
|
||||
.long 0 /* (User-Defined Vectors 7) CPM Parallel IO PC9 - 70. */
|
||||
.long 0 /* (User-Defined Vectors 8) CPM Timer 4 - 71. */
|
||||
.long 0 /* (User-Defined Vectors 9) CPM Reserved - 72. */
|
||||
.long 0 /* (User-Defined Vectors 10) CPM Parallel IO PC8- 73. */
|
||||
.long 0 /* (User-Defined Vectors 11) CPM Parallel IO PC7- 74. */
|
||||
.long 0 /* (User-Defined Vectors 12) CPM Parallel IO PC6- 75. */
|
||||
.long 0 /* (User-Defined Vectors 13) CPM Timer 3 - 76. */
|
||||
.long 0 /* (User-Defined Vectors 14) CPM Reserved - 77. */
|
||||
.long 0 /* (User-Defined Vectors 15) CPM Parallel IO PC5- 78. */
|
||||
.long 0 /* (User-Defined Vectors 16) CPM Parallel IO PC4- 79. */
|
||||
.long 0 /* (User-Defined Vectors 17) CPM Reserved - 80. */
|
||||
.long 0 /* (User-Defined Vectors 18) CPM RISC Timer Tbl - 81. */
|
||||
.long 0 /* (User-Defined Vectors 19) CPM Timer 2 - 82. */
|
||||
.long 0 /* (User-Defined Vectors 21) CPM Reserved - 83. */
|
||||
.long 0 /* (User-Defined Vectors 22) CPM IDMA2 - 84. */
|
||||
.long 0 /* (User-Defined Vectors 23) CPM IDMA1 - 85. */
|
||||
.long 0 /* (User-Defined Vectors 24) CPM SDMA Bus Err - 86. */
|
||||
.long 0 /* (User-Defined Vectors 25) CPM Parallel IO PC3- 87. */
|
||||
.long 0 /* (User-Defined Vectors 26) CPM Parallel IO PC2- 88. */
|
||||
.long 0 /* (User-Defined Vectors 27) CPM Timer 1 - 89. */
|
||||
.long 0 /* (User-Defined Vectors 28) CPM Parallel IO PC1- 90. */
|
||||
.long 0 /* (User-Defined Vectors 29) CPM SCC 4 - 91. */
|
||||
.long 0 /* (User-Defined Vectors 30) CPM SCC 3 - 92. */
|
||||
.long 0 /* (User-Defined Vectors 31) CPM SCC 2 - 93. */
|
||||
.long 0 /* (User-Defined Vectors 32) CPM SCC 1 - 94. */
|
||||
.long 0 /* (User-Defined Vectors 33) CPM Parallel IO PC0- 95. */
|
||||
/* I don't think anything uses the vectors after here. */
|
||||
.long 0 /* (User-Defined Vectors 34) - 96. */
|
||||
.long 0,0,0,0,0 /* (User-Defined Vectors 35 - 39). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 40 - 49). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 50 - 59). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 60 - 69). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 70 - 79). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 80 - 89). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 90 - 99). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 100 - 109). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 110 - 119). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 120 - 129). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 130 - 139). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 140 - 149). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 150 - 159). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 160 - 169). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 170 - 179). */
|
||||
.long 0,0,0,0,0,0,0,0,0,0 /* (User-Defined Vectors 180 - 189). */
|
||||
.long 0,0,0 /* (User-Defined Vectors 190 - 192). */
|
||||
.text
|
||||
ignore: rte
|
||||
138
arch/m68k/68360/ints.c
Normal file
138
arch/m68k/68360/ints.c
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
/*
|
||||
* ints.c - first level interrupt handlers
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (c) 2000 Michael Leslie <mleslie@lineo.com>
|
||||
* Copyright (c) 1996 Roman Zippel
|
||||
* Copyright (c) 1999 D. Jeff Dionne <jeff@uclinux.org>
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/m68360.h>
|
||||
|
||||
/* from quicc/commproc.c: */
|
||||
extern QUICC *pquicc;
|
||||
extern void cpm_interrupt_init(void);
|
||||
|
||||
#define INTERNAL_IRQS (96)
|
||||
|
||||
/* assembler routines */
|
||||
asmlinkage void system_call(void);
|
||||
asmlinkage void buserr(void);
|
||||
asmlinkage void trap(void);
|
||||
asmlinkage void bad_interrupt(void);
|
||||
asmlinkage void inthandler(void);
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
pquicc->intr_cimr |= (1 << d->irq);
|
||||
}
|
||||
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
pquicc->intr_cimr &= ~(1 << d->irq);
|
||||
}
|
||||
|
||||
static void intc_irq_ack(struct irq_data *d)
|
||||
{
|
||||
pquicc->intr_cisr = (1 << d->irq);
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "M68K-INTC",
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
.irq_ack = intc_irq_ack,
|
||||
};
|
||||
|
||||
/*
|
||||
* This function should be called during kernel startup to initialize
|
||||
* the vector table.
|
||||
*/
|
||||
void __init trap_init(void)
|
||||
{
|
||||
int vba = (CPM_VECTOR_BASE<<4);
|
||||
|
||||
/* set up the vectors */
|
||||
_ramvec[2] = buserr;
|
||||
_ramvec[3] = trap;
|
||||
_ramvec[4] = trap;
|
||||
_ramvec[5] = trap;
|
||||
_ramvec[6] = trap;
|
||||
_ramvec[7] = trap;
|
||||
_ramvec[8] = trap;
|
||||
_ramvec[9] = trap;
|
||||
_ramvec[10] = trap;
|
||||
_ramvec[11] = trap;
|
||||
_ramvec[12] = trap;
|
||||
_ramvec[13] = trap;
|
||||
_ramvec[14] = trap;
|
||||
_ramvec[15] = trap;
|
||||
|
||||
_ramvec[32] = system_call;
|
||||
_ramvec[33] = trap;
|
||||
|
||||
cpm_interrupt_init();
|
||||
|
||||
/* set up CICR for vector base address and irq level */
|
||||
/* irl = 4, hp = 1f - see MC68360UM p 7-377 */
|
||||
pquicc->intr_cicr = 0x00e49f00 | vba;
|
||||
|
||||
/* CPM interrupt vectors: (p 7-376) */
|
||||
_ramvec[vba+CPMVEC_ERROR] = bad_interrupt; /* Error */
|
||||
_ramvec[vba+CPMVEC_PIO_PC11] = inthandler; /* pio - pc11 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC10] = inthandler; /* pio - pc10 */
|
||||
_ramvec[vba+CPMVEC_SMC2] = inthandler; /* smc2/pip */
|
||||
_ramvec[vba+CPMVEC_SMC1] = inthandler; /* smc1 */
|
||||
_ramvec[vba+CPMVEC_SPI] = inthandler; /* spi */
|
||||
_ramvec[vba+CPMVEC_PIO_PC9] = inthandler; /* pio - pc9 */
|
||||
_ramvec[vba+CPMVEC_TIMER4] = inthandler; /* timer 4 */
|
||||
_ramvec[vba+CPMVEC_RESERVED1] = inthandler; /* reserved */
|
||||
_ramvec[vba+CPMVEC_PIO_PC8] = inthandler; /* pio - pc8 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC7] = inthandler; /* pio - pc7 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC6] = inthandler; /* pio - pc6 */
|
||||
_ramvec[vba+CPMVEC_TIMER3] = inthandler; /* timer 3 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC5] = inthandler; /* pio - pc5 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC4] = inthandler; /* pio - pc4 */
|
||||
_ramvec[vba+CPMVEC_RESERVED2] = inthandler; /* reserved */
|
||||
_ramvec[vba+CPMVEC_RISCTIMER] = inthandler; /* timer table */
|
||||
_ramvec[vba+CPMVEC_TIMER2] = inthandler; /* timer 2 */
|
||||
_ramvec[vba+CPMVEC_RESERVED3] = inthandler; /* reserved */
|
||||
_ramvec[vba+CPMVEC_IDMA2] = inthandler; /* idma 2 */
|
||||
_ramvec[vba+CPMVEC_IDMA1] = inthandler; /* idma 1 */
|
||||
_ramvec[vba+CPMVEC_SDMA_CB_ERR] = inthandler; /* sdma channel bus error */
|
||||
_ramvec[vba+CPMVEC_PIO_PC3] = inthandler; /* pio - pc3 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC2] = inthandler; /* pio - pc2 */
|
||||
/* _ramvec[vba+CPMVEC_TIMER1] = cpm_isr_timer1; */ /* timer 1 */
|
||||
_ramvec[vba+CPMVEC_TIMER1] = inthandler; /* timer 1 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC1] = inthandler; /* pio - pc1 */
|
||||
_ramvec[vba+CPMVEC_SCC4] = inthandler; /* scc 4 */
|
||||
_ramvec[vba+CPMVEC_SCC3] = inthandler; /* scc 3 */
|
||||
_ramvec[vba+CPMVEC_SCC2] = inthandler; /* scc 2 */
|
||||
_ramvec[vba+CPMVEC_SCC1] = inthandler; /* scc 1 */
|
||||
_ramvec[vba+CPMVEC_PIO_PC0] = inthandler; /* pio - pc0 */
|
||||
|
||||
|
||||
/* turn off all CPM interrupts */
|
||||
pquicc->intr_cimr = 0x00000000;
|
||||
}
|
||||
|
||||
void init_IRQ(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; (i < NR_IRQS); i++) {
|
||||
irq_set_chip(i, &intc_irq_chip);
|
||||
irq_set_handler(i, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
166
arch/m68k/Kconfig
Normal file
166
arch/m68k/Kconfig
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
config M68K
|
||||
bool
|
||||
default y
|
||||
select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
|
||||
select HAVE_IDE
|
||||
select HAVE_AOUT if MMU
|
||||
select HAVE_DEBUG_BUGVERBOSE
|
||||
select GENERIC_IRQ_SHOW
|
||||
select GENERIC_ATOMIC64
|
||||
select HAVE_UID16
|
||||
select VIRT_TO_BUS
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS
|
||||
select GENERIC_CPU_DEVICES
|
||||
select GENERIC_IOMAP
|
||||
select GENERIC_STRNCPY_FROM_USER if MMU
|
||||
select GENERIC_STRNLEN_USER if MMU
|
||||
select FPU if MMU
|
||||
select ARCH_WANT_IPC_PARSE_VERSION
|
||||
select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
|
||||
select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
|
||||
select HAVE_MOD_ARCH_SPECIFIC
|
||||
select MODULES_USE_ELF_REL
|
||||
select MODULES_USE_ELF_RELA
|
||||
select OLD_SIGSUSPEND3
|
||||
select OLD_SIGACTION
|
||||
|
||||
config RWSEM_GENERIC_SPINLOCK
|
||||
bool
|
||||
default y
|
||||
|
||||
config RWSEM_XCHGADD_ALGORITHM
|
||||
bool
|
||||
|
||||
config ARCH_HAS_ILOG2_U32
|
||||
bool
|
||||
|
||||
config ARCH_HAS_ILOG2_U64
|
||||
bool
|
||||
|
||||
config GENERIC_HWEIGHT
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CSUM
|
||||
bool
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
config NO_IOPORT_MAP
|
||||
def_bool y
|
||||
|
||||
config NO_DMA
|
||||
def_bool (MMU && SUN3) || (!MMU && !COLDFIRE)
|
||||
|
||||
config ZONE_DMA
|
||||
bool
|
||||
default y
|
||||
|
||||
config HZ
|
||||
int
|
||||
default 1000 if CLEOPATRA
|
||||
default 100
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
source "kernel/Kconfig.freezer"
|
||||
|
||||
config MMU
|
||||
bool "MMU-based Paged Memory Management Support"
|
||||
default y
|
||||
help
|
||||
Select if you want MMU-based virtualised addressing space
|
||||
support by paged memory management. If unsure, say 'Y'.
|
||||
|
||||
config MMU_MOTOROLA
|
||||
bool
|
||||
|
||||
config MMU_COLDFIRE
|
||||
bool
|
||||
|
||||
config MMU_SUN3
|
||||
bool
|
||||
depends on MMU && !MMU_MOTOROLA && !MMU_COLDFIRE
|
||||
|
||||
config KEXEC
|
||||
bool "kexec system call"
|
||||
depends on M68KCLASSIC
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
but it is independent of the system firmware. And like a reboot
|
||||
you can start any kernel with it, not just Linux.
|
||||
|
||||
The name comes from the similarity to the exec system call.
|
||||
|
||||
It is an ongoing process to be certain the hardware in a machine
|
||||
is properly shutdown, so do not be surprised if this code does not
|
||||
initially work for you. As of this writing the exact hardware
|
||||
interface is strongly in flux, so no good recommendation can be
|
||||
made.
|
||||
|
||||
config BOOTINFO_PROC
|
||||
bool "Export bootinfo in procfs"
|
||||
depends on KEXEC && M68KCLASSIC
|
||||
help
|
||||
Say Y to export the bootinfo used to boot the kernel in a
|
||||
"bootinfo" file in procfs. This is useful with kexec.
|
||||
|
||||
menu "Platform setup"
|
||||
|
||||
source arch/m68k/Kconfig.cpu
|
||||
|
||||
source arch/m68k/Kconfig.machine
|
||||
|
||||
source arch/m68k/Kconfig.bus
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Kernel Features"
|
||||
|
||||
if COLDFIRE
|
||||
source "kernel/Kconfig.preempt"
|
||||
endif
|
||||
|
||||
source "mm/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Executable file formats"
|
||||
|
||||
source "fs/Kconfig.binfmt"
|
||||
|
||||
endmenu
|
||||
|
||||
if !MMU
|
||||
menu "Power management options"
|
||||
|
||||
config PM
|
||||
bool "Power Management support"
|
||||
help
|
||||
Support processor power management modes
|
||||
|
||||
endmenu
|
||||
endif
|
||||
|
||||
source "net/Kconfig"
|
||||
|
||||
source "drivers/Kconfig"
|
||||
|
||||
source "arch/m68k/Kconfig.devices"
|
||||
|
||||
source "fs/Kconfig"
|
||||
|
||||
source "arch/m68k/Kconfig.debug"
|
||||
|
||||
source "security/Kconfig"
|
||||
|
||||
source "crypto/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
81
arch/m68k/Kconfig.bus
Normal file
81
arch/m68k/Kconfig.bus
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
if MMU
|
||||
|
||||
comment "Bus Support"
|
||||
|
||||
config DIO
|
||||
bool "DIO bus support"
|
||||
depends on HP300
|
||||
default y
|
||||
help
|
||||
Say Y here to enable support for the "DIO" expansion bus used in
|
||||
HP300 machines. If you are using such a system you almost certainly
|
||||
want this.
|
||||
|
||||
config NUBUS
|
||||
bool
|
||||
depends on MAC
|
||||
default y
|
||||
|
||||
config ZORRO
|
||||
bool "Amiga Zorro (AutoConfig) bus support"
|
||||
depends on AMIGA
|
||||
help
|
||||
This enables support for the Zorro bus in the Amiga. If you have
|
||||
expansion cards in your Amiga that conform to the Amiga
|
||||
AutoConfig(tm) specification, say Y, otherwise N. Note that even
|
||||
expansion cards that do not fit in the Zorro slots but fit in e.g.
|
||||
the CPU slot may fall in this category, so you have to say Y to let
|
||||
Linux use these.
|
||||
|
||||
config AMIGA_PCMCIA
|
||||
bool "Amiga 1200/600 PCMCIA support"
|
||||
depends on AMIGA
|
||||
help
|
||||
Include support in the kernel for pcmcia on Amiga 1200 and Amiga
|
||||
600. If you intend to use pcmcia cards say Y; otherwise say N.
|
||||
|
||||
config ISA
|
||||
bool
|
||||
depends on Q40 || AMIGA_PCMCIA
|
||||
default y
|
||||
help
|
||||
Find out whether you have ISA slots on your motherboard. ISA is the
|
||||
name of a bus system, i.e. the way the CPU talks to the other stuff
|
||||
inside your box. Other bus systems are PCI, EISA, MicroChannel
|
||||
(MCA) or VESA. ISA is an older system, now being displaced by PCI;
|
||||
newer boards don't support it. If you have ISA, say Y, otherwise N.
|
||||
|
||||
config ATARI_ROM_ISA
|
||||
bool "Atari ROM port ISA adapter support"
|
||||
depends on ATARI
|
||||
help
|
||||
This option enables support for the ROM port ISA adapter used to
|
||||
operate ISA cards on Atari. Only 8 bit cards are supported, and
|
||||
no interrupt lines are connected.
|
||||
The only driver currently using this adapter is the EtherNEC
|
||||
driver for RTL8019AS based NE2000 compatible network cards.
|
||||
|
||||
config GENERIC_ISA_DMA
|
||||
def_bool ISA
|
||||
|
||||
config PCI
|
||||
bool "PCI support"
|
||||
depends on M54xx
|
||||
help
|
||||
Enable the PCI bus. Support for the PCI bus hardware built into the
|
||||
ColdFire 547x and 548x processors.
|
||||
|
||||
source "drivers/pci/Kconfig"
|
||||
|
||||
source "drivers/zorro/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
if !MMU
|
||||
|
||||
config ISA_DMA_API
|
||||
def_bool !M5272
|
||||
|
||||
source "drivers/pcmcia/Kconfig"
|
||||
|
||||
endif
|
||||
490
arch/m68k/Kconfig.cpu
Normal file
490
arch/m68k/Kconfig.cpu
Normal file
|
|
@ -0,0 +1,490 @@
|
|||
comment "Processor Type"
|
||||
|
||||
choice
|
||||
prompt "CPU family support"
|
||||
default M68KCLASSIC if MMU
|
||||
default COLDFIRE if !MMU
|
||||
help
|
||||
The Freescale (was Motorola) M68K family of processors implements
|
||||
the full 68000 processor instruction set.
|
||||
The Freescale ColdFire family of processors is a modern derivative
|
||||
of the 68000 processor family. They are mainly targeted at embedded
|
||||
applications, and are all System-On-Chip (SOC) devices, as opposed
|
||||
to stand alone CPUs. They implement a subset of the original 68000
|
||||
processor instruction set.
|
||||
If you anticipate running this kernel on a computer with a classic
|
||||
MC68xxx processor, select M68KCLASSIC.
|
||||
If you anticipate running this kernel on a computer with a ColdFire
|
||||
processor, select COLDFIRE.
|
||||
|
||||
config M68KCLASSIC
|
||||
bool "Classic M68K CPU family support"
|
||||
|
||||
config COLDFIRE
|
||||
bool "Coldfire CPU family support"
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_MULDIV64
|
||||
select GENERIC_CSUM
|
||||
select HAVE_CLK
|
||||
|
||||
endchoice
|
||||
|
||||
if M68KCLASSIC
|
||||
|
||||
config M68000
|
||||
bool "MC68000"
|
||||
depends on !MMU
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_MULDIV64
|
||||
select CPU_HAS_NO_UNALIGNED
|
||||
select GENERIC_CSUM
|
||||
help
|
||||
The Freescale (was Motorola) 68000 CPU is the first generation of
|
||||
the well known M68K family of processors. The CPU core as well as
|
||||
being available as a stand alone CPU was also used in many
|
||||
System-On-Chip devices (eg 68328, 68302, etc). It does not contain
|
||||
a paging MMU.
|
||||
|
||||
config MCPU32
|
||||
bool
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_UNALIGNED
|
||||
help
|
||||
The Freescale (was then Motorola) CPU32 is a CPU core that is
|
||||
based on the 68020 processor. For the most part it is used in
|
||||
System-On-Chip parts, and does not contain a paging MMU.
|
||||
|
||||
config M68020
|
||||
bool "68020 support"
|
||||
depends on MMU
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
If you anticipate running this kernel on a computer with a MC68020
|
||||
processor, say Y. Otherwise, say N. Note that the 68020 requires a
|
||||
68851 MMU (Memory Management Unit) to run Linux/m68k, except on the
|
||||
Sun 3, which provides its own version.
|
||||
|
||||
config M68030
|
||||
bool "68030 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
If you anticipate running this kernel on a computer with a MC68030
|
||||
processor, say Y. Otherwise, say N. Note that a MC68EC030 will not
|
||||
work, as it does not include an MMU (Memory Management Unit).
|
||||
|
||||
config M68040
|
||||
bool "68040 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
If you anticipate running this kernel on a computer with a MC68LC040
|
||||
or MC68040 processor, say Y. Otherwise, say N. Note that an
|
||||
MC68EC040 will not work, as it does not include an MMU (Memory
|
||||
Management Unit).
|
||||
|
||||
config M68060
|
||||
bool "68060 support"
|
||||
depends on MMU && !MMU_SUN3
|
||||
select CPU_HAS_ADDRESS_SPACES
|
||||
help
|
||||
If you anticipate running this kernel on a computer with a MC68060
|
||||
processor, say Y. Otherwise, say N.
|
||||
|
||||
config M68328
|
||||
bool "MC68328"
|
||||
depends on !MMU
|
||||
select M68000
|
||||
help
|
||||
Motorola 68328 processor support.
|
||||
|
||||
config M68EZ328
|
||||
bool "MC68EZ328"
|
||||
depends on !MMU
|
||||
select M68000
|
||||
help
|
||||
Motorola 68EX328 processor support.
|
||||
|
||||
config M68VZ328
|
||||
bool "MC68VZ328"
|
||||
depends on !MMU
|
||||
select M68000
|
||||
help
|
||||
Motorola 68VZ328 processor support.
|
||||
|
||||
config M68360
|
||||
bool "MC68360"
|
||||
depends on !MMU
|
||||
select MCPU32
|
||||
help
|
||||
Motorola 68360 processor support.
|
||||
|
||||
endif # M68KCLASSIC
|
||||
|
||||
if COLDFIRE
|
||||
|
||||
config M5206
|
||||
bool "MCF5206"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5206 processor support.
|
||||
|
||||
config M5206e
|
||||
bool "MCF5206e"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5206e processor support.
|
||||
|
||||
config M520x
|
||||
bool "MCF520x"
|
||||
depends on !MMU
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_CACHE_SPLIT
|
||||
help
|
||||
Freescale Coldfire 5207/5208 processor support.
|
||||
|
||||
config M523x
|
||||
bool "MCF523x"
|
||||
depends on !MMU
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_CACHE_SPLIT
|
||||
select HAVE_IPSBAR
|
||||
help
|
||||
Freescale Coldfire 5230/1/2/4/5 processor support
|
||||
|
||||
config M5249
|
||||
bool "MCF5249"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5249 processor support.
|
||||
|
||||
config M525x
|
||||
bool "MCF525x"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Freescale (Motorola) Coldfire 5251/5253 processor support.
|
||||
|
||||
config M527x
|
||||
bool
|
||||
|
||||
config M5271
|
||||
bool "MCF5271"
|
||||
depends on !MMU
|
||||
select M527x
|
||||
select HAVE_CACHE_SPLIT
|
||||
select HAVE_IPSBAR
|
||||
select GENERIC_CLOCKEVENTS
|
||||
help
|
||||
Freescale (Motorola) ColdFire 5270/5271 processor support.
|
||||
|
||||
config M5272
|
||||
bool "MCF5272"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5272 processor support.
|
||||
|
||||
config M5275
|
||||
bool "MCF5275"
|
||||
depends on !MMU
|
||||
select M527x
|
||||
select HAVE_CACHE_SPLIT
|
||||
select HAVE_IPSBAR
|
||||
select GENERIC_CLOCKEVENTS
|
||||
help
|
||||
Freescale (Motorola) ColdFire 5274/5275 processor support.
|
||||
|
||||
config M528x
|
||||
bool "MCF528x"
|
||||
depends on !MMU
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_CACHE_SPLIT
|
||||
select HAVE_IPSBAR
|
||||
help
|
||||
Motorola ColdFire 5280/5282 processor support.
|
||||
|
||||
config M5307
|
||||
bool "MCF5307"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_CACHE_CB
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5307 processor support.
|
||||
|
||||
config M53xx
|
||||
bool
|
||||
|
||||
config M532x
|
||||
bool "MCF532x"
|
||||
depends on !MMU
|
||||
select M53xx
|
||||
select HAVE_CACHE_CB
|
||||
help
|
||||
Freescale (Motorola) ColdFire 532x processor support.
|
||||
|
||||
config M537x
|
||||
bool "MCF537x"
|
||||
depends on !MMU
|
||||
select M53xx
|
||||
select HAVE_CACHE_CB
|
||||
help
|
||||
Freescale ColdFire 537x processor support.
|
||||
|
||||
config M5407
|
||||
bool "MCF5407"
|
||||
depends on !MMU
|
||||
select COLDFIRE_SW_A7
|
||||
select HAVE_CACHE_CB
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Motorola ColdFire 5407 processor support.
|
||||
|
||||
config M54xx
|
||||
bool
|
||||
|
||||
config M547x
|
||||
bool "MCF547x"
|
||||
select M54xx
|
||||
select MMU_COLDFIRE if MMU
|
||||
select HAVE_CACHE_CB
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Freescale ColdFire 5470/5471/5472/5473/5474/5475 processor support.
|
||||
|
||||
config M548x
|
||||
bool "MCF548x"
|
||||
select MMU_COLDFIRE if MMU
|
||||
select M54xx
|
||||
select HAVE_CACHE_CB
|
||||
select HAVE_MBAR
|
||||
help
|
||||
Freescale ColdFire 5480/5481/5482/5483/5484/5485 processor support.
|
||||
|
||||
config M5441x
|
||||
bool "MCF5441x"
|
||||
depends on !MMU
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_CACHE_CB
|
||||
help
|
||||
Freescale Coldfire 54410/54415/54416/54417/54418 processor support.
|
||||
|
||||
endif # COLDFIRE
|
||||
|
||||
|
||||
comment "Processor Specific Options"
|
||||
|
||||
config M68KFPU_EMU
|
||||
bool "Math emulation support"
|
||||
depends on MMU
|
||||
help
|
||||
At some point in the future, this will cause floating-point math
|
||||
instructions to be emulated by the kernel on machines that lack a
|
||||
floating-point math coprocessor. Thrill-seekers and chronically
|
||||
sleep-deprived psychotic hacker types can say Y now, everyone else
|
||||
should probably wait a while.
|
||||
|
||||
config M68KFPU_EMU_EXTRAPREC
|
||||
bool "Math emulation extra precision"
|
||||
depends on M68KFPU_EMU
|
||||
help
|
||||
The fpu uses normally a few bit more during calculations for
|
||||
correct rounding, the emulator can (often) do the same but this
|
||||
extra calculation can cost quite some time, so you can disable
|
||||
it here. The emulator will then "only" calculate with a 64 bit
|
||||
mantissa and round slightly incorrect, what is more than enough
|
||||
for normal usage.
|
||||
|
||||
config M68KFPU_EMU_ONLY
|
||||
bool "Math emulation only kernel"
|
||||
depends on M68KFPU_EMU
|
||||
help
|
||||
This option prevents any floating-point instructions from being
|
||||
compiled into the kernel, thereby the kernel doesn't save any
|
||||
floating point context anymore during task switches, so this
|
||||
kernel will only be usable on machines without a floating-point
|
||||
math coprocessor. This makes the kernel a bit faster as no tests
|
||||
needs to be executed whether a floating-point instruction in the
|
||||
kernel should be executed or not.
|
||||
|
||||
config ADVANCED
|
||||
bool "Advanced configuration options"
|
||||
depends on MMU
|
||||
---help---
|
||||
This gives you access to some advanced options for the CPU. The
|
||||
defaults should be fine for most users, but these options may make
|
||||
it possible for you to improve performance somewhat if you know what
|
||||
you are doing.
|
||||
|
||||
Note that the answer to this question won't directly affect the
|
||||
kernel: saying N will just cause the configurator to skip all
|
||||
the questions about these options.
|
||||
|
||||
Most users should say N to this question.
|
||||
|
||||
config RMW_INSNS
|
||||
bool "Use read-modify-write instructions"
|
||||
depends on ADVANCED
|
||||
---help---
|
||||
This allows to use certain instructions that work with indivisible
|
||||
read-modify-write bus cycles. While this is faster than the
|
||||
workaround of disabling interrupts, it can conflict with DMA
|
||||
( = direct memory access) on many Amiga systems, and it is also said
|
||||
to destabilize other machines. It is very likely that this will
|
||||
cause serious problems on any Amiga or Atari Medusa if set. The only
|
||||
configuration where it should work are 68030-based Ataris, where it
|
||||
apparently improves performance. But you've been warned! Unless you
|
||||
really know what you are doing, say N. Try Y only if you're quite
|
||||
adventurous.
|
||||
|
||||
config SINGLE_MEMORY_CHUNK
|
||||
bool "Use one physical chunk of memory only" if ADVANCED && !SUN3
|
||||
depends on MMU
|
||||
default y if SUN3
|
||||
select NEED_MULTIPLE_NODES
|
||||
help
|
||||
Ignore all but the first contiguous chunk of physical memory for VM
|
||||
purposes. This will save a few bytes kernel size and may speed up
|
||||
some operations. Say N if not sure.
|
||||
|
||||
config ARCH_DISCONTIGMEM_ENABLE
|
||||
def_bool MMU && !SINGLE_MEMORY_CHUNK
|
||||
|
||||
config 060_WRITETHROUGH
|
||||
bool "Use write-through caching for 68060 supervisor accesses"
|
||||
depends on ADVANCED && M68060
|
||||
---help---
|
||||
The 68060 generally uses copyback caching of recently accessed data.
|
||||
Copyback caching means that memory writes will be held in an on-chip
|
||||
cache and only written back to memory some time later. Saying Y
|
||||
here will force supervisor (kernel) accesses to use writethrough
|
||||
caching. Writethrough caching means that data is written to memory
|
||||
straight away, so that cache and memory data always agree.
|
||||
Writethrough caching is less efficient, but is needed for some
|
||||
drivers on 68060 based systems where the 68060 bus snooping signal
|
||||
is hardwired on. The 53c710 SCSI driver is known to suffer from
|
||||
this problem.
|
||||
|
||||
config M68K_L2_CACHE
|
||||
bool
|
||||
depends on MAC
|
||||
default y
|
||||
|
||||
config NODES_SHIFT
|
||||
int
|
||||
default "3"
|
||||
depends on !SINGLE_MEMORY_CHUNK
|
||||
|
||||
config CPU_HAS_NO_BITFIELDS
|
||||
bool
|
||||
|
||||
config CPU_HAS_NO_MULDIV64
|
||||
bool
|
||||
|
||||
config CPU_HAS_NO_UNALIGNED
|
||||
bool
|
||||
|
||||
config CPU_HAS_ADDRESS_SPACES
|
||||
bool
|
||||
|
||||
config FPU
|
||||
bool
|
||||
|
||||
config COLDFIRE_SW_A7
|
||||
bool
|
||||
|
||||
config HAVE_CACHE_SPLIT
|
||||
bool
|
||||
|
||||
config HAVE_CACHE_CB
|
||||
bool
|
||||
|
||||
config HAVE_MBAR
|
||||
bool
|
||||
|
||||
config HAVE_IPSBAR
|
||||
bool
|
||||
|
||||
config CLOCK_SET
|
||||
bool "Enable setting the CPU clock frequency"
|
||||
depends on COLDFIRE
|
||||
default n
|
||||
help
|
||||
On some CPU's you do not need to know what the core CPU clock
|
||||
frequency is. On these you can disable clock setting. On some
|
||||
traditional 68K parts, and on all ColdFire parts you need to set
|
||||
the appropriate CPU clock frequency. On these devices many of the
|
||||
onboard peripherals derive their timing from the master CPU clock
|
||||
frequency.
|
||||
|
||||
config CLOCK_FREQ
|
||||
int "Set the core clock frequency"
|
||||
default "66666666"
|
||||
depends on CLOCK_SET
|
||||
help
|
||||
Define the CPU clock frequency in use. This is the core clock
|
||||
frequency, it may or may not be the same as the external clock
|
||||
crystal fitted to your board. Some processors have an internal
|
||||
PLL and can have their frequency programmed at run time, others
|
||||
use internal dividers. In general the kernel won't setup a PLL
|
||||
if it is fitted (there are some exceptions). This value will be
|
||||
specific to the exact CPU that you are using.
|
||||
|
||||
config OLDMASK
|
||||
bool "Old mask 5307 (1H55J) silicon"
|
||||
depends on M5307
|
||||
help
|
||||
Build support for the older revision ColdFire 5307 silicon.
|
||||
Specifically this is the 1H55J mask revision.
|
||||
|
||||
if HAVE_CACHE_SPLIT
|
||||
choice
|
||||
prompt "Split Cache Configuration"
|
||||
default CACHE_I
|
||||
|
||||
config CACHE_I
|
||||
bool "Instruction"
|
||||
help
|
||||
Use all of the ColdFire CPU cache memory as an instruction cache.
|
||||
|
||||
config CACHE_D
|
||||
bool "Data"
|
||||
help
|
||||
Use all of the ColdFire CPU cache memory as a data cache.
|
||||
|
||||
config CACHE_BOTH
|
||||
bool "Both"
|
||||
help
|
||||
Split the ColdFire CPU cache, and use half as an instruction cache
|
||||
and half as a data cache.
|
||||
endchoice
|
||||
endif
|
||||
|
||||
if HAVE_CACHE_CB
|
||||
choice
|
||||
prompt "Data cache mode"
|
||||
default CACHE_WRITETHRU
|
||||
|
||||
config CACHE_WRITETHRU
|
||||
bool "Write-through"
|
||||
help
|
||||
The ColdFire CPU cache is set into Write-through mode.
|
||||
|
||||
config CACHE_COPYBACK
|
||||
bool "Copy-back"
|
||||
help
|
||||
The ColdFire CPU cache is set into Copy-back mode.
|
||||
endchoice
|
||||
endif
|
||||
|
||||
54
arch/m68k/Kconfig.debug
Normal file
54
arch/m68k/Kconfig.debug
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
menu "Kernel hacking"
|
||||
|
||||
source "lib/Kconfig.debug"
|
||||
|
||||
config BOOTPARAM
|
||||
bool 'Compiled-in Kernel Boot Parameter'
|
||||
|
||||
config BOOTPARAM_STRING
|
||||
string 'Kernel Boot Parameter'
|
||||
default 'console=ttyS0,19200'
|
||||
depends on BOOTPARAM
|
||||
|
||||
config EARLY_PRINTK
|
||||
bool "Early printk"
|
||||
depends on !(SUN3 || M68360 || M68000 || COLDFIRE)
|
||||
help
|
||||
Write kernel log output directly to a serial port.
|
||||
Where implemented, output goes to the framebuffer as well.
|
||||
PROM console functionality on Sun 3x is not affected by this option.
|
||||
|
||||
Pass "earlyprintk" on the kernel command line to get a
|
||||
boot console.
|
||||
|
||||
This is useful for kernel debugging when your machine crashes very
|
||||
early, i.e. before the normal console driver is loaded.
|
||||
You should normally say N here, unless you want to debug such a crash.
|
||||
|
||||
if !MMU
|
||||
|
||||
config FULLDEBUG
|
||||
bool "Full Symbolic/Source Debugging support"
|
||||
help
|
||||
Enable debugging symbols on kernel build.
|
||||
|
||||
config HIGHPROFILE
|
||||
bool "Use fast second timer for profiling"
|
||||
depends on COLDFIRE
|
||||
help
|
||||
Use a fast secondary clock to produce profiling information.
|
||||
|
||||
config NO_KERNEL_MSG
|
||||
bool "Suppress Kernel BUG Messages"
|
||||
help
|
||||
Do not output any debug BUG messages within the kernel.
|
||||
|
||||
config BDM_DISABLE
|
||||
bool "Disable BDM signals"
|
||||
depends on COLDFIRE
|
||||
help
|
||||
Disable the ColdFire CPU's BDM signals.
|
||||
|
||||
endif
|
||||
|
||||
endmenu
|
||||
144
arch/m68k/Kconfig.devices
Normal file
144
arch/m68k/Kconfig.devices
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
if MMU
|
||||
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
depends on BROKEN && (Q40 || SUN3X)
|
||||
default y
|
||||
|
||||
menu "Platform devices"
|
||||
|
||||
config HEARTBEAT
|
||||
bool "Use power LED as a heartbeat" if AMIGA || APOLLO || ATARI || Q40
|
||||
default y if !AMIGA && !APOLLO && !ATARI && !Q40 && HP300
|
||||
help
|
||||
Use the power-on LED on your machine as a load meter. The exact
|
||||
behavior is platform-dependent, but normally the flash frequency is
|
||||
a hyperbolic function of the 5-minute load average.
|
||||
|
||||
# We have a dedicated heartbeat LED. :-)
|
||||
config PROC_HARDWARE
|
||||
bool "/proc/hardware support"
|
||||
help
|
||||
Say Y here to support the /proc/hardware file, which gives you
|
||||
access to information about the machine you're running on,
|
||||
including the model, CPU, MMU, clock speed, BogoMIPS rating,
|
||||
and memory size.
|
||||
|
||||
config NATFEAT
|
||||
bool "ARAnyM emulator support"
|
||||
depends on ATARI
|
||||
help
|
||||
This option enables support for ARAnyM native features, such as
|
||||
access to a disk image as /dev/hda.
|
||||
|
||||
config NFBLOCK
|
||||
tristate "NatFeat block device support"
|
||||
depends on BLOCK && NATFEAT
|
||||
help
|
||||
Say Y to include support for the ARAnyM NatFeat block device
|
||||
which allows direct access to the hard drives without using
|
||||
the hardware emulation.
|
||||
|
||||
config NFCON
|
||||
tristate "NatFeat console driver"
|
||||
depends on TTY && NATFEAT
|
||||
help
|
||||
Say Y to include support for the ARAnyM NatFeat console driver
|
||||
which allows the console output to be redirected to the stderr
|
||||
output of ARAnyM.
|
||||
|
||||
config NFETH
|
||||
tristate "NatFeat Ethernet support"
|
||||
depends on ETHERNET && NATFEAT
|
||||
help
|
||||
Say Y to include support for the ARAnyM NatFeat network device
|
||||
which will emulate a regular ethernet device while presenting an
|
||||
ethertap device to the host system.
|
||||
|
||||
config ATARI_ETHERNAT
|
||||
bool "Atari EtherNAT Ethernet support"
|
||||
depends on ATARI
|
||||
---help---
|
||||
Say Y to include support for the EtherNAT network adapter for the
|
||||
CT/60 extension port.
|
||||
|
||||
To compile the actual ethernet driver, choose Y or M for the SMC91X
|
||||
option in the network device section; the module will be called smc91x.
|
||||
|
||||
config ATARI_ETHERNEC
|
||||
bool "Atari EtherNEC Ethernet support"
|
||||
depends on ATARI_ROM_ISA
|
||||
---help---
|
||||
Say Y to include support for the EtherNEC network adapter for the
|
||||
ROM port. The driver works by polling instead of interrupts, so it
|
||||
is quite slow.
|
||||
|
||||
This driver also supports the ethernet part of the NetUSBee ROM
|
||||
port combined Ethernet/USB adapter.
|
||||
|
||||
To compile the actual ethernet driver, choose Y or M in for the NE2000
|
||||
option in the network device section; the module will be called ne.
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Character devices"
|
||||
|
||||
config ATARI_DSP56K
|
||||
tristate "Atari DSP56k support"
|
||||
depends on ATARI
|
||||
help
|
||||
If you want to be able to use the DSP56001 in Falcons, say Y. This
|
||||
driver is still experimental, and if you don't know what it is, or
|
||||
if you don't have this processor, just say N.
|
||||
|
||||
To compile this driver as a module, choose M here.
|
||||
|
||||
config AMIGA_BUILTIN_SERIAL
|
||||
tristate "Amiga builtin serial support"
|
||||
depends on AMIGA && TTY
|
||||
help
|
||||
If you want to use your Amiga's built-in serial port in Linux,
|
||||
answer Y.
|
||||
|
||||
To compile this driver as a module, choose M here.
|
||||
|
||||
config HPDCA
|
||||
tristate "HP DCA serial support"
|
||||
depends on DIO && SERIAL_8250
|
||||
help
|
||||
If you want to use the internal "DCA" serial ports on an HP300
|
||||
machine, say Y here.
|
||||
|
||||
config HPAPCI
|
||||
tristate "HP APCI serial support"
|
||||
depends on HP300 && SERIAL_8250
|
||||
help
|
||||
If you want to use the internal "APCI" serial ports on an HP400
|
||||
machine, say Y here.
|
||||
|
||||
config SERIAL_CONSOLE
|
||||
bool "Support for serial port console"
|
||||
depends on AMIGA_BUILTIN_SERIAL=y
|
||||
---help---
|
||||
If you say Y here, it will be possible to use a serial port as the
|
||||
system console (the system console is the device which receives all
|
||||
kernel messages and warnings and which allows logins in single user
|
||||
mode). This could be useful if some terminal or printer is connected
|
||||
to that serial port.
|
||||
|
||||
Even if you say Y here, the currently visible virtual console
|
||||
(/dev/tty0) will still be used as the system console by default, but
|
||||
you can alter that using a kernel command line option such as
|
||||
"console=ttyS1". (Try "man bootparam" or see the documentation of
|
||||
your boot loader about how to pass options to the kernel at boot
|
||||
time.)
|
||||
|
||||
If you don't have a graphical console and you say Y here, the
|
||||
kernel will automatically use the first serial line, /dev/ttyS0, as
|
||||
system console.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
endmenu
|
||||
|
||||
endif
|
||||
450
arch/m68k/Kconfig.machine
Normal file
450
arch/m68k/Kconfig.machine
Normal file
|
|
@ -0,0 +1,450 @@
|
|||
comment "Machine Types"
|
||||
|
||||
if M68KCLASSIC
|
||||
|
||||
config AMIGA
|
||||
bool "Amiga support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
This option enables support for the Amiga series of computers. If
|
||||
you plan to use this kernel on an Amiga, say Y here and browse the
|
||||
material available in <file:Documentation/m68k>; otherwise say N.
|
||||
|
||||
config ATARI
|
||||
bool "Atari support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
This option enables support for the 68000-based Atari series of
|
||||
computers (including the TT, Falcon and Medusa). If you plan to use
|
||||
this kernel on an Atari, say Y here and browse the material
|
||||
available in <file:Documentation/m68k>; otherwise say N.
|
||||
|
||||
config MAC
|
||||
bool "Macintosh support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
This option enables support for the Apple Macintosh series of
|
||||
computers (yes, there is experimental support now, at least for part
|
||||
of the series).
|
||||
|
||||
Say N unless you're willing to code the remaining necessary support.
|
||||
;)
|
||||
|
||||
config APOLLO
|
||||
bool "Apollo support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
Say Y here if you want to run Linux on an MC680x0-based Apollo
|
||||
Domain workstation such as the DN3500.
|
||||
|
||||
config VME
|
||||
bool "VME (Motorola and BVM) support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
Say Y here if you want to build a kernel for a 680x0 based VME
|
||||
board. Boards currently supported include Motorola boards MVME147,
|
||||
MVME162, MVME166, MVME167, MVME172, and MVME177. BVME4000 and
|
||||
BVME6000 boards from BVM Ltd are also supported.
|
||||
|
||||
config MVME147
|
||||
bool "MVME147 support"
|
||||
depends on MMU
|
||||
depends on VME
|
||||
help
|
||||
Say Y to include support for early Motorola VME boards. This will
|
||||
build a kernel which can run on MVME147 single-board computers. If
|
||||
you select this option you will have to select the appropriate
|
||||
drivers for SCSI, Ethernet and serial ports later on.
|
||||
|
||||
config MVME16x
|
||||
bool "MVME162, 166 and 167 support"
|
||||
depends on MMU
|
||||
depends on VME
|
||||
help
|
||||
Say Y to include support for Motorola VME boards. This will build a
|
||||
kernel which can run on MVME162, MVME166, MVME167, MVME172, and
|
||||
MVME177 boards. If you select this option you will have to select
|
||||
the appropriate drivers for SCSI, Ethernet and serial ports later
|
||||
on.
|
||||
|
||||
config BVME6000
|
||||
bool "BVME4000 and BVME6000 support"
|
||||
depends on MMU
|
||||
depends on VME
|
||||
help
|
||||
Say Y to include support for VME boards from BVM Ltd. This will
|
||||
build a kernel which can run on BVME4000 and BVME6000 boards. If
|
||||
you select this option you will have to select the appropriate
|
||||
drivers for SCSI, Ethernet and serial ports later on.
|
||||
|
||||
config HP300
|
||||
bool "HP9000/300 and HP9000/400 support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
This option enables support for the HP9000/300 and HP9000/400 series
|
||||
of workstations. Support for these machines is still somewhat
|
||||
experimental. If you plan to try to use the kernel on such a machine
|
||||
say Y here.
|
||||
Everybody else says N.
|
||||
|
||||
config SUN3X
|
||||
bool "Sun3x support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
select M68030
|
||||
help
|
||||
This option enables support for the Sun 3x series of workstations.
|
||||
Be warned that this support is very experimental.
|
||||
Note that Sun 3x kernels are not compatible with Sun 3 hardware.
|
||||
General Linux information on the Sun 3x series (now discontinued)
|
||||
is at <http://www.angelfire.com/ca2/tech68k/sun3.html>.
|
||||
|
||||
If you don't want to compile a kernel for a Sun 3x, say N.
|
||||
|
||||
config Q40
|
||||
bool "Q40/Q60 support"
|
||||
depends on MMU
|
||||
select MMU_MOTOROLA if MMU
|
||||
help
|
||||
The Q40 is a Motorola 68040-based successor to the Sinclair QL
|
||||
manufactured in Germany. There is an official Q40 home page at
|
||||
<http://www.q40.de/>. This option enables support for the Q40 and
|
||||
Q60. Select your CPU below. For 68LC060 don't forget to enable FPU
|
||||
emulation.
|
||||
|
||||
config SUN3
|
||||
bool "Sun3 support"
|
||||
depends on MMU
|
||||
depends on !MMU_MOTOROLA
|
||||
select MMU_SUN3 if MMU
|
||||
select M68020
|
||||
help
|
||||
This option enables support for the Sun 3 series of workstations
|
||||
(3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires
|
||||
that all other hardware types must be disabled, as Sun 3 kernels
|
||||
are incompatible with all other m68k targets (including Sun 3x!).
|
||||
|
||||
If you don't want to compile a kernel exclusively for a Sun 3, say N.
|
||||
|
||||
endif # M68KCLASSIC
|
||||
|
||||
config PILOT
|
||||
bool
|
||||
|
||||
config PILOT3
|
||||
bool "Pilot 1000/5000, PalmPilot Personal/Pro, or PalmIII support"
|
||||
depends on M68328
|
||||
select PILOT
|
||||
help
|
||||
Support for the Palm Pilot 1000/5000, Personal/Pro and PalmIII.
|
||||
|
||||
config XCOPILOT_BUGS
|
||||
bool "(X)Copilot support"
|
||||
depends on PILOT3
|
||||
help
|
||||
Support the bugs of Xcopilot.
|
||||
|
||||
config UCSIMM
|
||||
bool "uCsimm module support"
|
||||
depends on M68EZ328
|
||||
help
|
||||
Support for the Arcturus Networks uCsimm module.
|
||||
|
||||
config UCDIMM
|
||||
bool "uDsimm module support"
|
||||
depends on M68VZ328
|
||||
help
|
||||
Support for the Arcturus Networks uDsimm module.
|
||||
|
||||
config DRAGEN2
|
||||
bool "DragenEngine II board support"
|
||||
depends on M68VZ328
|
||||
help
|
||||
Support for the DragenEngine II board.
|
||||
|
||||
config DIRECT_IO_ACCESS
|
||||
bool "Allow user to access IO directly"
|
||||
depends on (UCSIMM || UCDIMM || DRAGEN2)
|
||||
help
|
||||
Disable the CPU internal registers protection in user mode,
|
||||
to allow a user application to read/write them.
|
||||
|
||||
config INIT_LCD
|
||||
bool "Initialize LCD"
|
||||
depends on (UCSIMM || UCDIMM || DRAGEN2)
|
||||
help
|
||||
Initialize the LCD controller of the 68x328 processor.
|
||||
|
||||
config MEMORY_RESERVE
|
||||
int "Memory reservation (MiB)"
|
||||
depends on (UCSIMM || UCDIMM)
|
||||
help
|
||||
Reserve certain memory regions on 68x328 based boards.
|
||||
|
||||
config UCQUICC
|
||||
bool "Lineo uCquicc board support"
|
||||
depends on M68360
|
||||
help
|
||||
Support for the Lineo uCquicc board.
|
||||
|
||||
config ARN5206
|
||||
bool "Arnewsh 5206 board support"
|
||||
depends on M5206
|
||||
help
|
||||
Support for the Arnewsh 5206 board.
|
||||
|
||||
config M5206eC3
|
||||
bool "Motorola M5206eC3 board support"
|
||||
depends on M5206e
|
||||
help
|
||||
Support for the Motorola M5206eC3 board.
|
||||
|
||||
config ELITE
|
||||
bool "Motorola M5206eLITE board support"
|
||||
depends on M5206e
|
||||
help
|
||||
Support for the Motorola M5206eLITE board.
|
||||
|
||||
config M5235EVB
|
||||
bool "Freescale M5235EVB support"
|
||||
depends on M523x
|
||||
help
|
||||
Support for the Freescale M5235EVB board.
|
||||
|
||||
config M5249C3
|
||||
bool "Motorola M5249C3 board support"
|
||||
depends on M5249
|
||||
help
|
||||
Support for the Motorola M5249C3 board.
|
||||
|
||||
config M5272C3
|
||||
bool "Motorola M5272C3 board support"
|
||||
depends on M5272
|
||||
help
|
||||
Support for the Motorola M5272C3 board.
|
||||
|
||||
config WILDFIRE
|
||||
bool "Intec Automation Inc. WildFire board support"
|
||||
depends on M528x
|
||||
help
|
||||
Support for the Intec Automation Inc. WildFire.
|
||||
|
||||
config WILDFIREMOD
|
||||
bool "Intec Automation Inc. WildFire module support"
|
||||
depends on M528x
|
||||
help
|
||||
Support for the Intec Automation Inc. WildFire module.
|
||||
|
||||
config ARN5307
|
||||
bool "Arnewsh 5307 board support"
|
||||
depends on M5307
|
||||
help
|
||||
Support for the Arnewsh 5307 board.
|
||||
|
||||
config M5307C3
|
||||
bool "Motorola M5307C3 board support"
|
||||
depends on M5307
|
||||
help
|
||||
Support for the Motorola M5307C3 board.
|
||||
|
||||
config SECUREEDGEMP3
|
||||
bool "SnapGear SecureEdge/MP3 platform support"
|
||||
depends on M5307
|
||||
help
|
||||
Support for the SnapGear SecureEdge/MP3 platform.
|
||||
|
||||
config M5407C3
|
||||
bool "Motorola M5407C3 board support"
|
||||
depends on M5407
|
||||
help
|
||||
Support for the Motorola M5407C3 board.
|
||||
|
||||
config FIREBEE
|
||||
bool "FireBee board support"
|
||||
depends on M547x
|
||||
help
|
||||
Support for the FireBee ColdFire 5475 based board.
|
||||
|
||||
config CLEOPATRA
|
||||
bool "Feith CLEOPATRA board support"
|
||||
depends on (M5307 || M5407)
|
||||
help
|
||||
Support for the Feith Cleopatra boards.
|
||||
|
||||
config CANCam
|
||||
bool "Feith CANCam board support"
|
||||
depends on M5272
|
||||
help
|
||||
Support for the Feith CANCam board.
|
||||
|
||||
config SCALES
|
||||
bool "Feith SCALES board support"
|
||||
depends on M5272
|
||||
help
|
||||
Support for the Feith SCALES board.
|
||||
|
||||
config NETtel
|
||||
bool "SecureEdge/NETtel board support"
|
||||
depends on (M5206e || M5272 || M5307)
|
||||
help
|
||||
Support for the SnapGear NETtel/SecureEdge/SnapGear boards.
|
||||
|
||||
config MOD5272
|
||||
bool "Netburner MOD-5272 board support"
|
||||
depends on M5272
|
||||
help
|
||||
Support for the Netburner MOD-5272 board.
|
||||
|
||||
if !MMU || COLDFIRE
|
||||
|
||||
comment "Machine Options"
|
||||
|
||||
config UBOOT
|
||||
bool "Support for U-Boot command line parameters"
|
||||
help
|
||||
If you say Y here kernel will try to collect command
|
||||
line parameters from the initial u-boot stack.
|
||||
default n
|
||||
|
||||
config 4KSTACKS
|
||||
bool "Use 4Kb for kernel stacks instead of 8Kb"
|
||||
default y
|
||||
help
|
||||
If you say Y here the kernel will use a 4Kb stacksize for the
|
||||
kernel stack attached to each process/thread. This facilitates
|
||||
running more threads on a system and also reduces the pressure
|
||||
on the VM subsystem for higher order allocations.
|
||||
|
||||
comment "RAM configuration"
|
||||
|
||||
config RAMBASE
|
||||
hex "Address of the base of RAM"
|
||||
default "0"
|
||||
help
|
||||
Define the address that RAM starts at. On many platforms this is
|
||||
0, the base of the address space. And this is the default. Some
|
||||
platforms choose to setup their RAM at other addresses within the
|
||||
processor address space.
|
||||
|
||||
config RAMSIZE
|
||||
hex "Size of RAM (in bytes), or 0 for automatic"
|
||||
default "0x400000"
|
||||
help
|
||||
Define the size of the system RAM. If you select 0 then the
|
||||
kernel will try to probe the RAM size at runtime. This is not
|
||||
supported on all CPU types.
|
||||
|
||||
config VECTORBASE
|
||||
hex "Address of the base of system vectors"
|
||||
default "0"
|
||||
help
|
||||
Define the address of the system vectors. Commonly this is
|
||||
put at the start of RAM, but it doesn't have to be. On ColdFire
|
||||
platforms this address is programmed into the VBR register, thus
|
||||
actually setting the address to use.
|
||||
|
||||
config MBAR
|
||||
hex "Address of the MBAR (internal peripherals)"
|
||||
default "0x10000000"
|
||||
depends on HAVE_MBAR
|
||||
help
|
||||
Define the address of the internal system peripherals. This value
|
||||
is set in the processors MBAR register. This is generally setup by
|
||||
the boot loader, and will not be written by the kernel. By far most
|
||||
ColdFire boards use the default 0x10000000 value, so if unsure then
|
||||
use this.
|
||||
|
||||
config IPSBAR
|
||||
hex "Address of the IPSBAR (internal peripherals)"
|
||||
default "0x40000000"
|
||||
depends on HAVE_IPSBAR
|
||||
help
|
||||
Define the address of the internal system peripherals. This value
|
||||
is set in the processors IPSBAR register. This is generally setup by
|
||||
the boot loader, and will not be written by the kernel. By far most
|
||||
ColdFire boards use the default 0x40000000 value, so if unsure then
|
||||
use this.
|
||||
|
||||
config KERNELBASE
|
||||
hex "Address of the base of kernel code"
|
||||
default "0x400"
|
||||
help
|
||||
Typically on m68k systems the kernel will not start at the base
|
||||
of RAM, but usually some small offset from it. Define the start
|
||||
address of the kernel here. The most common setup will have the
|
||||
processor vectors at the base of RAM and then the start of the
|
||||
kernel. On some platforms some RAM is reserved for boot loaders
|
||||
and the kernel starts after that. The 0x400 default was based on
|
||||
a system with the RAM based at address 0, and leaving enough room
|
||||
for the theoretical maximum number of 256 vectors.
|
||||
|
||||
comment "ROM configuration"
|
||||
|
||||
config ROM
|
||||
bool "Specify ROM linker regions"
|
||||
default n
|
||||
help
|
||||
Define a ROM region for the linker script. This creates a kernel
|
||||
that can be stored in flash, with possibly the text, and data
|
||||
regions being copied out to RAM at startup.
|
||||
|
||||
config ROMBASE
|
||||
hex "Address of the base of ROM device"
|
||||
default "0"
|
||||
depends on ROM
|
||||
help
|
||||
Define the address that the ROM region starts at. Some platforms
|
||||
use this to set their chip select region accordingly for the boot
|
||||
device.
|
||||
|
||||
config ROMVEC
|
||||
hex "Address of the base of the ROM vectors"
|
||||
default "0"
|
||||
depends on ROM
|
||||
help
|
||||
This is almost always the same as the base of the ROM. Since on all
|
||||
68000 type variants the vectors are at the base of the boot device
|
||||
on system startup.
|
||||
|
||||
config ROMSTART
|
||||
hex "Address of the base of system image in ROM"
|
||||
default "0x400"
|
||||
depends on ROM
|
||||
help
|
||||
Define the start address of the system image in ROM. Commonly this
|
||||
is strait after the ROM vectors.
|
||||
|
||||
config ROMSIZE
|
||||
hex "Size of the ROM device"
|
||||
default "0x100000"
|
||||
depends on ROM
|
||||
help
|
||||
Size of the ROM device. On some platforms this is used to setup
|
||||
the chip select that controls the boot ROM device.
|
||||
|
||||
choice
|
||||
prompt "Kernel executes from"
|
||||
---help---
|
||||
Choose the memory type that the kernel will be running in.
|
||||
|
||||
config RAMKERNEL
|
||||
bool "RAM"
|
||||
help
|
||||
The kernel will be resident in RAM when running.
|
||||
|
||||
config ROMKERNEL
|
||||
bool "ROM"
|
||||
help
|
||||
The kernel will be resident in FLASH/ROM when running. This is
|
||||
often referred to as Execute-in-Place (XIP), since the kernel
|
||||
code executes from the position it is stored in the FLASH/ROM.
|
||||
|
||||
endchoice
|
||||
|
||||
endif
|
||||
161
arch/m68k/Makefile
Normal file
161
arch/m68k/Makefile
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
#
|
||||
# m68k/Makefile
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
# for more details.
|
||||
#
|
||||
# Copyright (C) 1994 by Hamish Macdonald
|
||||
# Copyright (C) 2002,2011 Greg Ungerer <gerg@snapgear.com>
|
||||
#
|
||||
|
||||
KBUILD_DEFCONFIG := multi_defconfig
|
||||
|
||||
ifneq ($(SUBARCH),$(ARCH))
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
CROSS_COMPILE := $(call cc-cross-prefix, \
|
||||
m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-)
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Enable processor type. Ordering of these is important - we want to
|
||||
# use the minimum processor type of the range we support. The logic
|
||||
# for 680x0 will only allow use of the -m68060 or -m68040 if no other
|
||||
# 680x0 type is specified - and no option is specified for 68030 or
|
||||
# 68020. The other m68k/ColdFire types always specify some type of
|
||||
# compiler cpu type flag.
|
||||
#
|
||||
ifndef CONFIG_M68040
|
||||
cpuflags-$(CONFIG_M68060) := -m68060
|
||||
endif
|
||||
ifndef CONFIG_M68060
|
||||
cpuflags-$(CONFIG_M68040) := -m68040
|
||||
endif
|
||||
cpuflags-$(CONFIG_M68030) :=
|
||||
cpuflags-$(CONFIG_M68020) :=
|
||||
cpuflags-$(CONFIG_M68360) := -m68332
|
||||
cpuflags-$(CONFIG_M68000) := -m68000
|
||||
cpuflags-$(CONFIG_M5441x) := $(call cc-option,-mcpu=54455,-mcfv4e)
|
||||
cpuflags-$(CONFIG_M54xx) := $(call cc-option,-mcpu=5475,-m5200)
|
||||
cpuflags-$(CONFIG_M5407) := $(call cc-option,-mcpu=5407,-m5200)
|
||||
cpuflags-$(CONFIG_M532x) := $(call cc-option,-mcpu=532x,-m5307)
|
||||
cpuflags-$(CONFIG_M537x) := $(call cc-option,-mcpu=537x,-m5307)
|
||||
cpuflags-$(CONFIG_M5307) := $(call cc-option,-mcpu=5307,-m5200)
|
||||
cpuflags-$(CONFIG_M528x) := $(call cc-option,-mcpu=528x,-m5307)
|
||||
cpuflags-$(CONFIG_M5275) := $(call cc-option,-mcpu=5275,-m5307)
|
||||
cpuflags-$(CONFIG_M5272) := $(call cc-option,-mcpu=5272,-m5307)
|
||||
cpuflags-$(CONFIG_M5271) := $(call cc-option,-mcpu=5271,-m5307)
|
||||
cpuflags-$(CONFIG_M523x) := $(call cc-option,-mcpu=523x,-m5307)
|
||||
cpuflags-$(CONFIG_M525x) := $(call cc-option,-mcpu=5253,-m5200)
|
||||
cpuflags-$(CONFIG_M5249) := $(call cc-option,-mcpu=5249,-m5200)
|
||||
cpuflags-$(CONFIG_M520x) := $(call cc-option,-mcpu=5208,-m5200)
|
||||
cpuflags-$(CONFIG_M5206e) := $(call cc-option,-mcpu=5206e,-m5200)
|
||||
cpuflags-$(CONFIG_M5206) := $(call cc-option,-mcpu=5206,-m5200)
|
||||
|
||||
KBUILD_AFLAGS += $(cpuflags-y)
|
||||
KBUILD_CFLAGS += $(cpuflags-y) -pipe
|
||||
ifdef CONFIG_MMU
|
||||
# without -fno-strength-reduce the 53c7xx.c driver fails ;-(
|
||||
KBUILD_CFLAGS += -fno-strength-reduce -ffixed-a2
|
||||
else
|
||||
# we can use a m68k-linux-gcc toolchain with these in place
|
||||
KBUILD_CFLAGS += -DUTS_SYSNAME=\"uClinux\"
|
||||
KBUILD_CFLAGS += -D__uClinux__
|
||||
KBUILD_AFLAGS += -D__uClinux__
|
||||
endif
|
||||
|
||||
LDFLAGS := -m m68kelf
|
||||
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/m68k/kernel/module.lds
|
||||
|
||||
ifdef CONFIG_SUN3
|
||||
LDFLAGS_vmlinux = -N
|
||||
endif
|
||||
|
||||
CHECKFLAGS += -D__mc68000__
|
||||
|
||||
|
||||
ifdef CONFIG_KGDB
|
||||
# If configured for kgdb support, include debugging infos and keep the
|
||||
# frame pointer
|
||||
KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g
|
||||
endif
|
||||
|
||||
#
|
||||
# Select the assembler head startup code. Order is important. The default
|
||||
# head code is first, processor specific selections can override it after.
|
||||
#
|
||||
head-y := arch/m68k/kernel/head.o
|
||||
head-$(CONFIG_SUN3) := arch/m68k/kernel/sun3-head.o
|
||||
head-$(CONFIG_M68360) := arch/m68k/68360/head.o
|
||||
head-$(CONFIG_M68000) := arch/m68k/68000/head.o
|
||||
head-$(CONFIG_COLDFIRE) := arch/m68k/coldfire/head.o
|
||||
|
||||
core-y += arch/m68k/kernel/ arch/m68k/mm/
|
||||
libs-y += arch/m68k/lib/
|
||||
|
||||
core-$(CONFIG_Q40) += arch/m68k/q40/
|
||||
core-$(CONFIG_AMIGA) += arch/m68k/amiga/
|
||||
core-$(CONFIG_ATARI) += arch/m68k/atari/
|
||||
core-$(CONFIG_MAC) += arch/m68k/mac/
|
||||
core-$(CONFIG_HP300) += arch/m68k/hp300/
|
||||
core-$(CONFIG_APOLLO) += arch/m68k/apollo/
|
||||
core-$(CONFIG_MVME147) += arch/m68k/mvme147/
|
||||
core-$(CONFIG_MVME16x) += arch/m68k/mvme16x/
|
||||
core-$(CONFIG_BVME6000) += arch/m68k/bvme6000/
|
||||
core-$(CONFIG_SUN3X) += arch/m68k/sun3x/ arch/m68k/sun3/
|
||||
core-$(CONFIG_SUN3) += arch/m68k/sun3/ arch/m68k/sun3/prom/
|
||||
core-$(CONFIG_NATFEAT) += arch/m68k/emu/
|
||||
core-$(CONFIG_M68040) += arch/m68k/fpsp040/
|
||||
core-$(CONFIG_M68060) += arch/m68k/ifpsp060/
|
||||
core-$(CONFIG_M68KFPU_EMU) += arch/m68k/math-emu/
|
||||
core-$(CONFIG_M68360) += arch/m68k/68360/
|
||||
core-$(CONFIG_M68000) += arch/m68k/68000/
|
||||
core-$(CONFIG_COLDFIRE) += arch/m68k/coldfire/
|
||||
|
||||
|
||||
all: zImage
|
||||
|
||||
lilo: vmlinux
|
||||
if [ -f $(INSTALL_PATH)/vmlinux ]; then mv -f $(INSTALL_PATH)/vmlinux $(INSTALL_PATH)/vmlinux.old; fi
|
||||
if [ -f $(INSTALL_PATH)/System.map ]; then mv -f $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi
|
||||
cat vmlinux > $(INSTALL_PATH)/vmlinux
|
||||
cp System.map $(INSTALL_PATH)/System.map
|
||||
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
|
||||
|
||||
zImage compressed: vmlinux.gz
|
||||
|
||||
vmlinux.gz: vmlinux
|
||||
|
||||
ifndef CONFIG_KGDB
|
||||
cp vmlinux vmlinux.tmp
|
||||
$(STRIP) vmlinux.tmp
|
||||
gzip -9c vmlinux.tmp >vmlinux.gz
|
||||
rm vmlinux.tmp
|
||||
else
|
||||
gzip -9c vmlinux >vmlinux.gz
|
||||
endif
|
||||
|
||||
bzImage: vmlinux.bz2
|
||||
|
||||
vmlinux.bz2: vmlinux
|
||||
|
||||
ifndef CONFIG_KGDB
|
||||
cp vmlinux vmlinux.tmp
|
||||
$(STRIP) vmlinux.tmp
|
||||
bzip2 -1c vmlinux.tmp >vmlinux.bz2
|
||||
rm vmlinux.tmp
|
||||
else
|
||||
bzip2 -1c vmlinux >vmlinux.bz2
|
||||
endif
|
||||
|
||||
archclean:
|
||||
rm -f vmlinux.gz vmlinux.bz2
|
||||
|
||||
install:
|
||||
sh $(srctree)/arch/m68k/install.sh $(KERNELRELEASE) vmlinux.gz System.map "$(INSTALL_PATH)"
|
||||
7
arch/m68k/amiga/Makefile
Normal file
7
arch/m68k/amiga/Makefile
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#
|
||||
# Makefile for Linux arch/m68k/amiga source directory
|
||||
#
|
||||
|
||||
obj-y := config.o amiints.o cia.o chipram.o amisound.o platform.o
|
||||
|
||||
obj-$(CONFIG_AMIGA_PCMCIA) += pcmcia.o
|
||||
174
arch/m68k/amiga/amiints.c
Normal file
174
arch/m68k/amiga/amiints.c
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* Amiga Linux interrupt handling code
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigaints.h>
|
||||
#include <asm/amipcmcia.h>
|
||||
|
||||
|
||||
/*
|
||||
* Enable/disable a particular machine specific interrupt source.
|
||||
* Note that this may affect other interrupts in case of a shared interrupt.
|
||||
* This function should only be called for a _very_ short time to change some
|
||||
* internal data, that may not be changed by the interrupt at the same time.
|
||||
*/
|
||||
|
||||
static void amiga_irq_enable(struct irq_data *data)
|
||||
{
|
||||
amiga_custom.intena = IF_SETCLR | (1 << (data->irq - IRQ_USER));
|
||||
}
|
||||
|
||||
static void amiga_irq_disable(struct irq_data *data)
|
||||
{
|
||||
amiga_custom.intena = 1 << (data->irq - IRQ_USER);
|
||||
}
|
||||
|
||||
static struct irq_chip amiga_irq_chip = {
|
||||
.name = "amiga",
|
||||
.irq_enable = amiga_irq_enable,
|
||||
.irq_disable = amiga_irq_disable,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* The builtin Amiga hardware interrupt handlers.
|
||||
*/
|
||||
|
||||
static void ami_int1(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
|
||||
|
||||
/* if serial transmit buffer empty, interrupt */
|
||||
if (ints & IF_TBE) {
|
||||
amiga_custom.intreq = IF_TBE;
|
||||
generic_handle_irq(IRQ_AMIGA_TBE);
|
||||
}
|
||||
|
||||
/* if floppy disk transfer complete, interrupt */
|
||||
if (ints & IF_DSKBLK) {
|
||||
amiga_custom.intreq = IF_DSKBLK;
|
||||
generic_handle_irq(IRQ_AMIGA_DSKBLK);
|
||||
}
|
||||
|
||||
/* if software interrupt set, interrupt */
|
||||
if (ints & IF_SOFT) {
|
||||
amiga_custom.intreq = IF_SOFT;
|
||||
generic_handle_irq(IRQ_AMIGA_SOFT);
|
||||
}
|
||||
}
|
||||
|
||||
static void ami_int3(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
|
||||
|
||||
/* if a blitter interrupt */
|
||||
if (ints & IF_BLIT) {
|
||||
amiga_custom.intreq = IF_BLIT;
|
||||
generic_handle_irq(IRQ_AMIGA_BLIT);
|
||||
}
|
||||
|
||||
/* if a copper interrupt */
|
||||
if (ints & IF_COPER) {
|
||||
amiga_custom.intreq = IF_COPER;
|
||||
generic_handle_irq(IRQ_AMIGA_COPPER);
|
||||
}
|
||||
|
||||
/* if a vertical blank interrupt */
|
||||
if (ints & IF_VERTB) {
|
||||
amiga_custom.intreq = IF_VERTB;
|
||||
generic_handle_irq(IRQ_AMIGA_VERTB);
|
||||
}
|
||||
}
|
||||
|
||||
static void ami_int4(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
|
||||
|
||||
/* if audio 0 interrupt */
|
||||
if (ints & IF_AUD0) {
|
||||
amiga_custom.intreq = IF_AUD0;
|
||||
generic_handle_irq(IRQ_AMIGA_AUD0);
|
||||
}
|
||||
|
||||
/* if audio 1 interrupt */
|
||||
if (ints & IF_AUD1) {
|
||||
amiga_custom.intreq = IF_AUD1;
|
||||
generic_handle_irq(IRQ_AMIGA_AUD1);
|
||||
}
|
||||
|
||||
/* if audio 2 interrupt */
|
||||
if (ints & IF_AUD2) {
|
||||
amiga_custom.intreq = IF_AUD2;
|
||||
generic_handle_irq(IRQ_AMIGA_AUD2);
|
||||
}
|
||||
|
||||
/* if audio 3 interrupt */
|
||||
if (ints & IF_AUD3) {
|
||||
amiga_custom.intreq = IF_AUD3;
|
||||
generic_handle_irq(IRQ_AMIGA_AUD3);
|
||||
}
|
||||
}
|
||||
|
||||
static void ami_int5(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;
|
||||
|
||||
/* if serial receive buffer full interrupt */
|
||||
if (ints & IF_RBF) {
|
||||
/* acknowledge of IF_RBF must be done by the serial interrupt */
|
||||
generic_handle_irq(IRQ_AMIGA_RBF);
|
||||
}
|
||||
|
||||
/* if a disk sync interrupt */
|
||||
if (ints & IF_DSKSYN) {
|
||||
amiga_custom.intreq = IF_DSKSYN;
|
||||
generic_handle_irq(IRQ_AMIGA_DSKSYN);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* void amiga_init_IRQ(void)
|
||||
*
|
||||
* Parameters: None
|
||||
*
|
||||
* Returns: Nothing
|
||||
*
|
||||
* This function should be called during kernel startup to initialize
|
||||
* the amiga IRQ handling routines.
|
||||
*/
|
||||
|
||||
void __init amiga_init_IRQ(void)
|
||||
{
|
||||
m68k_setup_irq_controller(&amiga_irq_chip, handle_simple_irq, IRQ_USER,
|
||||
AMI_STD_IRQS);
|
||||
|
||||
irq_set_chained_handler(IRQ_AUTO_1, ami_int1);
|
||||
irq_set_chained_handler(IRQ_AUTO_3, ami_int3);
|
||||
irq_set_chained_handler(IRQ_AUTO_4, ami_int4);
|
||||
irq_set_chained_handler(IRQ_AUTO_5, ami_int5);
|
||||
|
||||
/* turn off PCMCIA interrupts */
|
||||
if (AMIGAHW_PRESENT(PCMCIA))
|
||||
gayle.inten = GAYLE_IRQ_IDE;
|
||||
|
||||
/* turn off all interrupts and enable the master interrupt bit */
|
||||
amiga_custom.intena = 0x7fff;
|
||||
amiga_custom.intreq = 0x7fff;
|
||||
amiga_custom.intena = IF_SETCLR | IF_INTEN;
|
||||
|
||||
cia_init_IRQ(&ciaa_base);
|
||||
cia_init_IRQ(&ciab_base);
|
||||
}
|
||||
116
arch/m68k/amiga/amisound.c
Normal file
116
arch/m68k/amiga/amisound.c
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* linux/arch/m68k/amiga/amisound.c
|
||||
*
|
||||
* amiga sound driver for Linux/m68k
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/amigahw.h>
|
||||
|
||||
static unsigned short *snd_data;
|
||||
static const signed char sine_data[] = {
|
||||
0, 39, 75, 103, 121, 127, 121, 103, 75, 39,
|
||||
0, -39, -75, -103, -121, -127, -121, -103, -75, -39
|
||||
};
|
||||
#define DATA_SIZE ARRAY_SIZE(sine_data)
|
||||
|
||||
#define custom amiga_custom
|
||||
|
||||
/*
|
||||
* The minimum period for audio may be modified by the frame buffer
|
||||
* device since it depends on htotal (for OCS/ECS/AGA)
|
||||
*/
|
||||
|
||||
volatile unsigned short amiga_audio_min_period = 124; /* Default for pre-OCS */
|
||||
EXPORT_SYMBOL(amiga_audio_min_period);
|
||||
|
||||
#define MAX_PERIOD (65535)
|
||||
|
||||
|
||||
/*
|
||||
* Current period (set by dmasound.c)
|
||||
*/
|
||||
|
||||
unsigned short amiga_audio_period = MAX_PERIOD;
|
||||
EXPORT_SYMBOL(amiga_audio_period);
|
||||
|
||||
static unsigned long clock_constant;
|
||||
|
||||
void __init amiga_init_sound(void)
|
||||
{
|
||||
static struct resource beep_res = { .name = "Beep" };
|
||||
|
||||
snd_data = amiga_chip_alloc_res(sizeof(sine_data), &beep_res);
|
||||
if (!snd_data) {
|
||||
pr_crit("amiga init_sound: failed to allocate chipmem\n");
|
||||
return;
|
||||
}
|
||||
memcpy (snd_data, sine_data, sizeof(sine_data));
|
||||
|
||||
/* setup divisor */
|
||||
clock_constant = (amiga_colorclock+DATA_SIZE/2)/DATA_SIZE;
|
||||
|
||||
/* without amifb, turn video off and enable high quality sound */
|
||||
#ifndef CONFIG_FB_AMIGA
|
||||
amifb_video_off();
|
||||
#endif
|
||||
}
|
||||
|
||||
static void nosound( unsigned long ignored );
|
||||
static DEFINE_TIMER(sound_timer, nosound, 0, 0);
|
||||
|
||||
void amiga_mksound( unsigned int hz, unsigned int ticks )
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!snd_data)
|
||||
return;
|
||||
|
||||
local_irq_save(flags);
|
||||
del_timer( &sound_timer );
|
||||
|
||||
if (hz > 20 && hz < 32767) {
|
||||
unsigned long period = (clock_constant / hz);
|
||||
|
||||
if (period < amiga_audio_min_period)
|
||||
period = amiga_audio_min_period;
|
||||
if (period > MAX_PERIOD)
|
||||
period = MAX_PERIOD;
|
||||
|
||||
/* setup pointer to data, period, length and volume */
|
||||
custom.aud[2].audlc = snd_data;
|
||||
custom.aud[2].audlen = sizeof(sine_data)/2;
|
||||
custom.aud[2].audper = (unsigned short)period;
|
||||
custom.aud[2].audvol = 32; /* 50% of maxvol */
|
||||
|
||||
if (ticks) {
|
||||
sound_timer.expires = jiffies + ticks;
|
||||
add_timer( &sound_timer );
|
||||
}
|
||||
|
||||
/* turn on DMA for audio channel 2 */
|
||||
custom.dmacon = DMAF_SETCLR | DMAF_AUD2;
|
||||
|
||||
} else
|
||||
nosound( 0 );
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
||||
static void nosound( unsigned long ignored )
|
||||
{
|
||||
/* turn off DMA for audio channel 2 */
|
||||
custom.dmacon = DMAF_AUD2;
|
||||
/* restore period to previous value after beeping */
|
||||
custom.aud[2].audper = amiga_audio_period;
|
||||
}
|
||||
123
arch/m68k/amiga/chipram.c
Normal file
123
arch/m68k/amiga/chipram.c
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
** linux/amiga/chipram.c
|
||||
**
|
||||
** Modified 03-May-94 by Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
** - 64-bit aligned allocations for full AGA compatibility
|
||||
**
|
||||
** Rewritten 15/9/2000 by Geert to use resource management
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/amigahw.h>
|
||||
|
||||
unsigned long amiga_chip_size;
|
||||
EXPORT_SYMBOL(amiga_chip_size);
|
||||
|
||||
static struct resource chipram_res = {
|
||||
.name = "Chip RAM", .start = CHIP_PHYSADDR
|
||||
};
|
||||
static atomic_t chipavail;
|
||||
|
||||
|
||||
void __init amiga_chip_init(void)
|
||||
{
|
||||
if (!AMIGAHW_PRESENT(CHIP_RAM))
|
||||
return;
|
||||
|
||||
chipram_res.end = CHIP_PHYSADDR + amiga_chip_size - 1;
|
||||
request_resource(&iomem_resource, &chipram_res);
|
||||
|
||||
atomic_set(&chipavail, amiga_chip_size);
|
||||
}
|
||||
|
||||
|
||||
void *amiga_chip_alloc(unsigned long size, const char *name)
|
||||
{
|
||||
struct resource *res;
|
||||
void *p;
|
||||
|
||||
res = kzalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
if (!res)
|
||||
return NULL;
|
||||
|
||||
res->name = name;
|
||||
p = amiga_chip_alloc_res(size, res);
|
||||
if (!p) {
|
||||
kfree(res);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
EXPORT_SYMBOL(amiga_chip_alloc);
|
||||
|
||||
|
||||
/*
|
||||
* Warning:
|
||||
* amiga_chip_alloc_res is meant only for drivers that need to
|
||||
* allocate Chip RAM before kmalloc() is functional. As a consequence,
|
||||
* those drivers must not free that Chip RAM afterwards.
|
||||
*/
|
||||
|
||||
void *amiga_chip_alloc_res(unsigned long size, struct resource *res)
|
||||
{
|
||||
int error;
|
||||
|
||||
/* round up */
|
||||
size = PAGE_ALIGN(size);
|
||||
|
||||
pr_debug("amiga_chip_alloc_res: allocate %lu bytes\n", size);
|
||||
error = allocate_resource(&chipram_res, res, size, 0, UINT_MAX,
|
||||
PAGE_SIZE, NULL, NULL);
|
||||
if (error < 0) {
|
||||
pr_err("amiga_chip_alloc_res: allocate_resource() failed %d!\n",
|
||||
error);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
atomic_sub(size, &chipavail);
|
||||
pr_debug("amiga_chip_alloc_res: returning %pR\n", res);
|
||||
return ZTWO_VADDR(res->start);
|
||||
}
|
||||
|
||||
void amiga_chip_free(void *ptr)
|
||||
{
|
||||
unsigned long start = ZTWO_PADDR(ptr);
|
||||
struct resource *res;
|
||||
unsigned long size;
|
||||
|
||||
res = lookup_resource(&chipram_res, start);
|
||||
if (!res) {
|
||||
pr_err("amiga_chip_free: trying to free nonexistent region at "
|
||||
"%p\n", ptr);
|
||||
return;
|
||||
}
|
||||
|
||||
size = resource_size(res);
|
||||
pr_debug("amiga_chip_free: free %lu bytes at %p\n", size, ptr);
|
||||
atomic_add(size, &chipavail);
|
||||
release_resource(res);
|
||||
kfree(res);
|
||||
}
|
||||
EXPORT_SYMBOL(amiga_chip_free);
|
||||
|
||||
|
||||
unsigned long amiga_chip_avail(void)
|
||||
{
|
||||
unsigned long n = atomic_read(&chipavail);
|
||||
|
||||
pr_debug("amiga_chip_avail : %lu bytes\n", n);
|
||||
return n;
|
||||
}
|
||||
EXPORT_SYMBOL(amiga_chip_avail);
|
||||
|
||||
186
arch/m68k/amiga/cia.c
Normal file
186
arch/m68k/amiga/cia.c
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* linux/arch/m68k/amiga/cia.c - CIA support
|
||||
*
|
||||
* Copyright (C) 1996 Roman Zippel
|
||||
*
|
||||
* The concept of some functions bases on the original Amiga OS function
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigaints.h>
|
||||
|
||||
struct ciabase {
|
||||
volatile struct CIA *cia;
|
||||
unsigned char icr_mask, icr_data;
|
||||
unsigned short int_mask;
|
||||
int handler_irq, cia_irq, server_irq;
|
||||
char *name;
|
||||
} ciaa_base = {
|
||||
.cia = &ciaa,
|
||||
.int_mask = IF_PORTS,
|
||||
.handler_irq = IRQ_AMIGA_PORTS,
|
||||
.cia_irq = IRQ_AMIGA_CIAA,
|
||||
.name = "CIAA"
|
||||
}, ciab_base = {
|
||||
.cia = &ciab,
|
||||
.int_mask = IF_EXTER,
|
||||
.handler_irq = IRQ_AMIGA_EXTER,
|
||||
.cia_irq = IRQ_AMIGA_CIAB,
|
||||
.name = "CIAB"
|
||||
};
|
||||
|
||||
/*
|
||||
* Cause or clear CIA interrupts, return old interrupt status.
|
||||
*/
|
||||
|
||||
unsigned char cia_set_irq(struct ciabase *base, unsigned char mask)
|
||||
{
|
||||
unsigned char old;
|
||||
|
||||
old = (base->icr_data |= base->cia->icr);
|
||||
if (mask & CIA_ICR_SETCLR)
|
||||
base->icr_data |= mask;
|
||||
else
|
||||
base->icr_data &= ~mask;
|
||||
if (base->icr_data & base->icr_mask)
|
||||
amiga_custom.intreq = IF_SETCLR | base->int_mask;
|
||||
return old & base->icr_mask;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable or disable CIA interrupts, return old interrupt mask,
|
||||
*/
|
||||
|
||||
unsigned char cia_able_irq(struct ciabase *base, unsigned char mask)
|
||||
{
|
||||
unsigned char old;
|
||||
|
||||
old = base->icr_mask;
|
||||
base->icr_data |= base->cia->icr;
|
||||
base->cia->icr = mask;
|
||||
if (mask & CIA_ICR_SETCLR)
|
||||
base->icr_mask |= mask;
|
||||
else
|
||||
base->icr_mask &= ~mask;
|
||||
base->icr_mask &= CIA_ICR_ALL;
|
||||
if (base->icr_data & base->icr_mask)
|
||||
amiga_custom.intreq = IF_SETCLR | base->int_mask;
|
||||
return old;
|
||||
}
|
||||
|
||||
static irqreturn_t cia_handler(int irq, void *dev_id)
|
||||
{
|
||||
struct ciabase *base = dev_id;
|
||||
int mach_irq;
|
||||
unsigned char ints;
|
||||
|
||||
mach_irq = base->cia_irq;
|
||||
ints = cia_set_irq(base, CIA_ICR_ALL);
|
||||
amiga_custom.intreq = base->int_mask;
|
||||
for (; ints; mach_irq++, ints >>= 1) {
|
||||
if (ints & 1)
|
||||
generic_handle_irq(mach_irq);
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void cia_irq_enable(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned char mask;
|
||||
|
||||
if (irq >= IRQ_AMIGA_CIAB) {
|
||||
mask = 1 << (irq - IRQ_AMIGA_CIAB);
|
||||
cia_set_irq(&ciab_base, mask);
|
||||
cia_able_irq(&ciab_base, CIA_ICR_SETCLR | mask);
|
||||
} else {
|
||||
mask = 1 << (irq - IRQ_AMIGA_CIAA);
|
||||
cia_set_irq(&ciaa_base, mask);
|
||||
cia_able_irq(&ciaa_base, CIA_ICR_SETCLR | mask);
|
||||
}
|
||||
}
|
||||
|
||||
static void cia_irq_disable(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
|
||||
if (irq >= IRQ_AMIGA_CIAB)
|
||||
cia_able_irq(&ciab_base, 1 << (irq - IRQ_AMIGA_CIAB));
|
||||
else
|
||||
cia_able_irq(&ciaa_base, 1 << (irq - IRQ_AMIGA_CIAA));
|
||||
}
|
||||
|
||||
static struct irq_chip cia_irq_chip = {
|
||||
.name = "cia",
|
||||
.irq_enable = cia_irq_enable,
|
||||
.irq_disable = cia_irq_disable,
|
||||
};
|
||||
|
||||
/*
|
||||
* Override auto irq 2 & 6 and use them as general chain
|
||||
* for external interrupts, we link the CIA interrupt sources
|
||||
* into this chain.
|
||||
*/
|
||||
|
||||
static void auto_irq_enable(struct irq_data *data)
|
||||
{
|
||||
switch (data->irq) {
|
||||
case IRQ_AUTO_2:
|
||||
amiga_custom.intena = IF_SETCLR | IF_PORTS;
|
||||
break;
|
||||
case IRQ_AUTO_6:
|
||||
amiga_custom.intena = IF_SETCLR | IF_EXTER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void auto_irq_disable(struct irq_data *data)
|
||||
{
|
||||
switch (data->irq) {
|
||||
case IRQ_AUTO_2:
|
||||
amiga_custom.intena = IF_PORTS;
|
||||
break;
|
||||
case IRQ_AUTO_6:
|
||||
amiga_custom.intena = IF_EXTER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct irq_chip auto_irq_chip = {
|
||||
.name = "auto",
|
||||
.irq_enable = auto_irq_enable,
|
||||
.irq_disable = auto_irq_disable,
|
||||
};
|
||||
|
||||
void __init cia_init_IRQ(struct ciabase *base)
|
||||
{
|
||||
m68k_setup_irq_controller(&cia_irq_chip, handle_simple_irq,
|
||||
base->cia_irq, CIA_IRQS);
|
||||
|
||||
/* clear any pending interrupt and turn off all interrupts */
|
||||
cia_set_irq(base, CIA_ICR_ALL);
|
||||
cia_able_irq(base, CIA_ICR_ALL);
|
||||
|
||||
/* override auto int and install CIA handler */
|
||||
m68k_setup_irq_controller(&auto_irq_chip, handle_simple_irq,
|
||||
base->handler_irq, 1);
|
||||
m68k_irq_startup_irq(base->handler_irq);
|
||||
if (request_irq(base->handler_irq, cia_handler, IRQF_SHARED,
|
||||
base->name, base))
|
||||
pr_err("Couldn't register %s interrupt\n", base->name);
|
||||
}
|
||||
838
arch/m68k/amiga/config.c
Normal file
838
arch/m68k/amiga/config.c
Normal file
|
|
@ -0,0 +1,838 @@
|
|||
/*
|
||||
* linux/arch/m68k/amiga/config.c
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Miscellaneous Amiga stuff
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/vt_kern.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/zorro.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/keyboard.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/bootinfo-amiga.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigaints.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/rtc.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
static unsigned long amiga_model;
|
||||
|
||||
unsigned long amiga_eclock;
|
||||
EXPORT_SYMBOL(amiga_eclock);
|
||||
|
||||
unsigned long amiga_colorclock;
|
||||
EXPORT_SYMBOL(amiga_colorclock);
|
||||
|
||||
unsigned long amiga_chipset;
|
||||
EXPORT_SYMBOL(amiga_chipset);
|
||||
|
||||
unsigned char amiga_vblank;
|
||||
EXPORT_SYMBOL(amiga_vblank);
|
||||
|
||||
static unsigned char amiga_psfreq;
|
||||
|
||||
struct amiga_hw_present amiga_hw_present;
|
||||
EXPORT_SYMBOL(amiga_hw_present);
|
||||
|
||||
static char s_a500[] __initdata = "A500";
|
||||
static char s_a500p[] __initdata = "A500+";
|
||||
static char s_a600[] __initdata = "A600";
|
||||
static char s_a1000[] __initdata = "A1000";
|
||||
static char s_a1200[] __initdata = "A1200";
|
||||
static char s_a2000[] __initdata = "A2000";
|
||||
static char s_a2500[] __initdata = "A2500";
|
||||
static char s_a3000[] __initdata = "A3000";
|
||||
static char s_a3000t[] __initdata = "A3000T";
|
||||
static char s_a3000p[] __initdata = "A3000+";
|
||||
static char s_a4000[] __initdata = "A4000";
|
||||
static char s_a4000t[] __initdata = "A4000T";
|
||||
static char s_cdtv[] __initdata = "CDTV";
|
||||
static char s_cd32[] __initdata = "CD32";
|
||||
static char s_draco[] __initdata = "Draco";
|
||||
static char *amiga_models[] __initdata = {
|
||||
[AMI_500-AMI_500] = s_a500,
|
||||
[AMI_500PLUS-AMI_500] = s_a500p,
|
||||
[AMI_600-AMI_500] = s_a600,
|
||||
[AMI_1000-AMI_500] = s_a1000,
|
||||
[AMI_1200-AMI_500] = s_a1200,
|
||||
[AMI_2000-AMI_500] = s_a2000,
|
||||
[AMI_2500-AMI_500] = s_a2500,
|
||||
[AMI_3000-AMI_500] = s_a3000,
|
||||
[AMI_3000T-AMI_500] = s_a3000t,
|
||||
[AMI_3000PLUS-AMI_500] = s_a3000p,
|
||||
[AMI_4000-AMI_500] = s_a4000,
|
||||
[AMI_4000T-AMI_500] = s_a4000t,
|
||||
[AMI_CDTV-AMI_500] = s_cdtv,
|
||||
[AMI_CD32-AMI_500] = s_cd32,
|
||||
[AMI_DRACO-AMI_500] = s_draco,
|
||||
};
|
||||
|
||||
static char amiga_model_name[13] = "Amiga ";
|
||||
|
||||
static void amiga_sched_init(irq_handler_t handler);
|
||||
static void amiga_get_model(char *model);
|
||||
static void amiga_get_hardware_list(struct seq_file *m);
|
||||
/* amiga specific timer functions */
|
||||
static u32 amiga_gettimeoffset(void);
|
||||
extern void amiga_mksound(unsigned int count, unsigned int ticks);
|
||||
static void amiga_reset(void);
|
||||
extern void amiga_init_sound(void);
|
||||
static void amiga_mem_console_write(struct console *co, const char *b,
|
||||
unsigned int count);
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void amiga_heartbeat(int on);
|
||||
#endif
|
||||
|
||||
static struct console amiga_console_driver = {
|
||||
.name = "debug",
|
||||
.flags = CON_PRINTBUFFER,
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Motherboard Resources present in all Amiga models
|
||||
*/
|
||||
|
||||
static struct {
|
||||
struct resource _ciab, _ciaa, _custom, _kickstart;
|
||||
} mb_resources = {
|
||||
._ciab = {
|
||||
.name = "CIA B", .start = 0x00bfd000, .end = 0x00bfdfff
|
||||
},
|
||||
._ciaa = {
|
||||
.name = "CIA A", .start = 0x00bfe000, .end = 0x00bfefff
|
||||
},
|
||||
._custom = {
|
||||
.name = "Custom I/O", .start = 0x00dff000, .end = 0x00dfffff
|
||||
},
|
||||
._kickstart = {
|
||||
.name = "Kickstart ROM", .start = 0x00f80000, .end = 0x00ffffff
|
||||
}
|
||||
};
|
||||
|
||||
static struct resource ram_resource[NUM_MEMINFO];
|
||||
|
||||
|
||||
/*
|
||||
* Parse an Amiga-specific record in the bootinfo
|
||||
*/
|
||||
|
||||
int __init amiga_parse_bootinfo(const struct bi_record *record)
|
||||
{
|
||||
int unknown = 0;
|
||||
const void *data = record->data;
|
||||
|
||||
switch (be16_to_cpu(record->tag)) {
|
||||
case BI_AMIGA_MODEL:
|
||||
amiga_model = be32_to_cpup(data);
|
||||
break;
|
||||
|
||||
case BI_AMIGA_ECLOCK:
|
||||
amiga_eclock = be32_to_cpup(data);
|
||||
break;
|
||||
|
||||
case BI_AMIGA_CHIPSET:
|
||||
amiga_chipset = be32_to_cpup(data);
|
||||
break;
|
||||
|
||||
case BI_AMIGA_CHIP_SIZE:
|
||||
amiga_chip_size = be32_to_cpup(data);
|
||||
break;
|
||||
|
||||
case BI_AMIGA_VBLANK:
|
||||
amiga_vblank = *(const __u8 *)data;
|
||||
break;
|
||||
|
||||
case BI_AMIGA_PSFREQ:
|
||||
amiga_psfreq = *(const __u8 *)data;
|
||||
break;
|
||||
|
||||
case BI_AMIGA_AUTOCON:
|
||||
#ifdef CONFIG_ZORRO
|
||||
if (zorro_num_autocon < ZORRO_NUM_AUTO) {
|
||||
const struct ConfigDev *cd = data;
|
||||
struct zorro_dev_init *dev = &zorro_autocon_init[zorro_num_autocon++];
|
||||
dev->rom = cd->cd_Rom;
|
||||
dev->slotaddr = be16_to_cpu(cd->cd_SlotAddr);
|
||||
dev->slotsize = be16_to_cpu(cd->cd_SlotSize);
|
||||
dev->boardaddr = be32_to_cpu(cd->cd_BoardAddr);
|
||||
dev->boardsize = be32_to_cpu(cd->cd_BoardSize);
|
||||
} else
|
||||
pr_warn("amiga_parse_bootinfo: too many AutoConfig devices\n");
|
||||
#endif /* CONFIG_ZORRO */
|
||||
break;
|
||||
|
||||
case BI_AMIGA_SERPER:
|
||||
/* serial port period: ignored here */
|
||||
break;
|
||||
|
||||
default:
|
||||
unknown = 1;
|
||||
}
|
||||
return unknown;
|
||||
}
|
||||
|
||||
/*
|
||||
* Identify builtin hardware
|
||||
*/
|
||||
|
||||
static void __init amiga_identify(void)
|
||||
{
|
||||
/* Fill in some default values, if necessary */
|
||||
if (amiga_eclock == 0)
|
||||
amiga_eclock = 709379;
|
||||
|
||||
memset(&amiga_hw_present, 0, sizeof(amiga_hw_present));
|
||||
|
||||
pr_info("Amiga hardware found: ");
|
||||
if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO) {
|
||||
pr_cont("[%s] ", amiga_models[amiga_model-AMI_500]);
|
||||
strcat(amiga_model_name, amiga_models[amiga_model-AMI_500]);
|
||||
}
|
||||
|
||||
switch (amiga_model) {
|
||||
case AMI_UNKNOWN:
|
||||
goto Generic;
|
||||
|
||||
case AMI_600:
|
||||
case AMI_1200:
|
||||
AMIGAHW_SET(A1200_IDE);
|
||||
AMIGAHW_SET(PCMCIA);
|
||||
case AMI_500:
|
||||
case AMI_500PLUS:
|
||||
case AMI_1000:
|
||||
case AMI_2000:
|
||||
case AMI_2500:
|
||||
AMIGAHW_SET(A2000_CLK); /* Is this correct for all models? */
|
||||
goto Generic;
|
||||
|
||||
case AMI_3000:
|
||||
case AMI_3000T:
|
||||
AMIGAHW_SET(AMBER_FF);
|
||||
AMIGAHW_SET(MAGIC_REKICK);
|
||||
/* fall through */
|
||||
case AMI_3000PLUS:
|
||||
AMIGAHW_SET(A3000_SCSI);
|
||||
AMIGAHW_SET(A3000_CLK);
|
||||
AMIGAHW_SET(ZORRO3);
|
||||
goto Generic;
|
||||
|
||||
case AMI_4000T:
|
||||
AMIGAHW_SET(A4000_SCSI);
|
||||
/* fall through */
|
||||
case AMI_4000:
|
||||
AMIGAHW_SET(A4000_IDE);
|
||||
AMIGAHW_SET(A3000_CLK);
|
||||
AMIGAHW_SET(ZORRO3);
|
||||
goto Generic;
|
||||
|
||||
case AMI_CDTV:
|
||||
case AMI_CD32:
|
||||
AMIGAHW_SET(CD_ROM);
|
||||
AMIGAHW_SET(A2000_CLK); /* Is this correct? */
|
||||
goto Generic;
|
||||
|
||||
Generic:
|
||||
AMIGAHW_SET(AMI_VIDEO);
|
||||
AMIGAHW_SET(AMI_BLITTER);
|
||||
AMIGAHW_SET(AMI_AUDIO);
|
||||
AMIGAHW_SET(AMI_FLOPPY);
|
||||
AMIGAHW_SET(AMI_KEYBOARD);
|
||||
AMIGAHW_SET(AMI_MOUSE);
|
||||
AMIGAHW_SET(AMI_SERIAL);
|
||||
AMIGAHW_SET(AMI_PARALLEL);
|
||||
AMIGAHW_SET(CHIP_RAM);
|
||||
AMIGAHW_SET(PAULA);
|
||||
|
||||
switch (amiga_chipset) {
|
||||
case CS_OCS:
|
||||
case CS_ECS:
|
||||
case CS_AGA:
|
||||
switch (amiga_custom.deniseid & 0xf) {
|
||||
case 0x0c:
|
||||
AMIGAHW_SET(DENISE_HR);
|
||||
break;
|
||||
case 0x08:
|
||||
AMIGAHW_SET(LISA);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
AMIGAHW_SET(DENISE);
|
||||
break;
|
||||
}
|
||||
switch ((amiga_custom.vposr>>8) & 0x7f) {
|
||||
case 0x00:
|
||||
AMIGAHW_SET(AGNUS_PAL);
|
||||
break;
|
||||
case 0x10:
|
||||
AMIGAHW_SET(AGNUS_NTSC);
|
||||
break;
|
||||
case 0x20:
|
||||
case 0x21:
|
||||
AMIGAHW_SET(AGNUS_HR_PAL);
|
||||
break;
|
||||
case 0x30:
|
||||
case 0x31:
|
||||
AMIGAHW_SET(AGNUS_HR_NTSC);
|
||||
break;
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
AMIGAHW_SET(ALICE_PAL);
|
||||
break;
|
||||
case 0x32:
|
||||
case 0x33:
|
||||
AMIGAHW_SET(ALICE_NTSC);
|
||||
break;
|
||||
}
|
||||
AMIGAHW_SET(ZORRO);
|
||||
break;
|
||||
|
||||
case AMI_DRACO:
|
||||
panic("No support for Draco yet");
|
||||
|
||||
default:
|
||||
panic("Unknown Amiga Model");
|
||||
}
|
||||
|
||||
#define AMIGAHW_ANNOUNCE(name, str) \
|
||||
if (AMIGAHW_PRESENT(name)) \
|
||||
pr_cont(str)
|
||||
|
||||
AMIGAHW_ANNOUNCE(AMI_VIDEO, "VIDEO ");
|
||||
AMIGAHW_ANNOUNCE(AMI_BLITTER, "BLITTER ");
|
||||
AMIGAHW_ANNOUNCE(AMBER_FF, "AMBER_FF ");
|
||||
AMIGAHW_ANNOUNCE(AMI_AUDIO, "AUDIO ");
|
||||
AMIGAHW_ANNOUNCE(AMI_FLOPPY, "FLOPPY ");
|
||||
AMIGAHW_ANNOUNCE(A3000_SCSI, "A3000_SCSI ");
|
||||
AMIGAHW_ANNOUNCE(A4000_SCSI, "A4000_SCSI ");
|
||||
AMIGAHW_ANNOUNCE(A1200_IDE, "A1200_IDE ");
|
||||
AMIGAHW_ANNOUNCE(A4000_IDE, "A4000_IDE ");
|
||||
AMIGAHW_ANNOUNCE(CD_ROM, "CD_ROM ");
|
||||
AMIGAHW_ANNOUNCE(AMI_KEYBOARD, "KEYBOARD ");
|
||||
AMIGAHW_ANNOUNCE(AMI_MOUSE, "MOUSE ");
|
||||
AMIGAHW_ANNOUNCE(AMI_SERIAL, "SERIAL ");
|
||||
AMIGAHW_ANNOUNCE(AMI_PARALLEL, "PARALLEL ");
|
||||
AMIGAHW_ANNOUNCE(A2000_CLK, "A2000_CLK ");
|
||||
AMIGAHW_ANNOUNCE(A3000_CLK, "A3000_CLK ");
|
||||
AMIGAHW_ANNOUNCE(CHIP_RAM, "CHIP_RAM ");
|
||||
AMIGAHW_ANNOUNCE(PAULA, "PAULA ");
|
||||
AMIGAHW_ANNOUNCE(DENISE, "DENISE ");
|
||||
AMIGAHW_ANNOUNCE(DENISE_HR, "DENISE_HR ");
|
||||
AMIGAHW_ANNOUNCE(LISA, "LISA ");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_PAL, "AGNUS_PAL ");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_NTSC, "AGNUS_NTSC ");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_HR_PAL, "AGNUS_HR_PAL ");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_HR_NTSC, "AGNUS_HR_NTSC ");
|
||||
AMIGAHW_ANNOUNCE(ALICE_PAL, "ALICE_PAL ");
|
||||
AMIGAHW_ANNOUNCE(ALICE_NTSC, "ALICE_NTSC ");
|
||||
AMIGAHW_ANNOUNCE(MAGIC_REKICK, "MAGIC_REKICK ");
|
||||
AMIGAHW_ANNOUNCE(PCMCIA, "PCMCIA ");
|
||||
if (AMIGAHW_PRESENT(ZORRO))
|
||||
pr_cont("ZORRO%s ", AMIGAHW_PRESENT(ZORRO3) ? "3" : "");
|
||||
pr_cont("\n");
|
||||
|
||||
#undef AMIGAHW_ANNOUNCE
|
||||
}
|
||||
|
||||
|
||||
static unsigned long amiga_random_get_entropy(void)
|
||||
{
|
||||
/* VPOSR/VHPOSR provide at least 17 bits of data changing at 1.79 MHz */
|
||||
return *(unsigned long *)&amiga_custom.vposr;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Setup the Amiga configuration info
|
||||
*/
|
||||
|
||||
void __init config_amiga(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
amiga_identify();
|
||||
|
||||
/* Yuk, we don't have PCI memory */
|
||||
iomem_resource.name = "Memory";
|
||||
for (i = 0; i < 4; i++)
|
||||
request_resource(&iomem_resource, &((struct resource *)&mb_resources)[i]);
|
||||
|
||||
mach_sched_init = amiga_sched_init;
|
||||
mach_init_IRQ = amiga_init_IRQ;
|
||||
mach_get_model = amiga_get_model;
|
||||
mach_get_hardware_list = amiga_get_hardware_list;
|
||||
arch_gettimeoffset = amiga_gettimeoffset;
|
||||
|
||||
/*
|
||||
* default MAX_DMA=0xffffffff on all machines. If we don't do so, the SCSI
|
||||
* code will not be able to allocate any mem for transfers, unless we are
|
||||
* dealing with a Z2 mem only system. /Jes
|
||||
*/
|
||||
mach_max_dma_address = 0xffffffff;
|
||||
|
||||
mach_reset = amiga_reset;
|
||||
#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE)
|
||||
mach_beep = amiga_mksound;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
mach_heartbeat = amiga_heartbeat;
|
||||
#endif
|
||||
|
||||
mach_random_get_entropy = amiga_random_get_entropy;
|
||||
|
||||
/* Fill in the clock value (based on the 700 kHz E-Clock) */
|
||||
amiga_colorclock = 5*amiga_eclock; /* 3.5 MHz */
|
||||
|
||||
/* clear all DMA bits */
|
||||
amiga_custom.dmacon = DMAF_ALL;
|
||||
/* ensure that the DMA master bit is set */
|
||||
amiga_custom.dmacon = DMAF_SETCLR | DMAF_MASTER;
|
||||
|
||||
/* don't use Z2 RAM as system memory on Z3 capable machines */
|
||||
if (AMIGAHW_PRESENT(ZORRO3)) {
|
||||
int i, j;
|
||||
u32 disabled_z2mem = 0;
|
||||
|
||||
for (i = 0; i < m68k_num_memory; i++) {
|
||||
if (m68k_memory[i].addr < 16*1024*1024) {
|
||||
if (i == 0) {
|
||||
/* don't cut off the branch we're sitting on */
|
||||
pr_warn("Warning: kernel runs in Zorro II memory\n");
|
||||
continue;
|
||||
}
|
||||
disabled_z2mem += m68k_memory[i].size;
|
||||
m68k_num_memory--;
|
||||
for (j = i; j < m68k_num_memory; j++)
|
||||
m68k_memory[j] = m68k_memory[j+1];
|
||||
i--;
|
||||
}
|
||||
}
|
||||
if (disabled_z2mem)
|
||||
pr_info("%dK of Zorro II memory will not be used as system memory\n",
|
||||
disabled_z2mem>>10);
|
||||
}
|
||||
|
||||
/* request all RAM */
|
||||
for (i = 0; i < m68k_num_memory; i++) {
|
||||
ram_resource[i].name =
|
||||
(m68k_memory[i].addr >= 0x01000000) ? "32-bit Fast RAM" :
|
||||
(m68k_memory[i].addr < 0x00c00000) ? "16-bit Fast RAM" :
|
||||
"16-bit Slow RAM";
|
||||
ram_resource[i].start = m68k_memory[i].addr;
|
||||
ram_resource[i].end = m68k_memory[i].addr+m68k_memory[i].size-1;
|
||||
request_resource(&iomem_resource, &ram_resource[i]);
|
||||
}
|
||||
|
||||
/* initialize chipram allocator */
|
||||
amiga_chip_init();
|
||||
|
||||
/* our beloved beeper */
|
||||
if (AMIGAHW_PRESENT(AMI_AUDIO))
|
||||
amiga_init_sound();
|
||||
|
||||
/*
|
||||
* if it is an A3000, set the magic bit that forces
|
||||
* a hard rekick
|
||||
*/
|
||||
if (AMIGAHW_PRESENT(MAGIC_REKICK))
|
||||
*(unsigned char *)ZTWO_VADDR(0xde0002) |= 0x80;
|
||||
}
|
||||
|
||||
static unsigned short jiffy_ticks;
|
||||
|
||||
static void __init amiga_sched_init(irq_handler_t timer_routine)
|
||||
{
|
||||
static struct resource sched_res = {
|
||||
.name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff,
|
||||
};
|
||||
jiffy_ticks = DIV_ROUND_CLOSEST(amiga_eclock, HZ);
|
||||
|
||||
if (request_resource(&mb_resources._ciab, &sched_res))
|
||||
pr_warn("Cannot allocate ciab.ta{lo,hi}\n");
|
||||
ciab.cra &= 0xC0; /* turn off timer A, continuous mode, from Eclk */
|
||||
ciab.talo = jiffy_ticks % 256;
|
||||
ciab.tahi = jiffy_ticks / 256;
|
||||
|
||||
/* install interrupt service routine for CIAB Timer A
|
||||
*
|
||||
* Please don't change this to use ciaa, as it interferes with the
|
||||
* SCSI code. We'll have to take a look at this later
|
||||
*/
|
||||
if (request_irq(IRQ_AMIGA_CIAB_TA, timer_routine, 0, "timer", NULL))
|
||||
pr_err("Couldn't register timer interrupt\n");
|
||||
/* start timer */
|
||||
ciab.cra |= 0x11;
|
||||
}
|
||||
|
||||
#define TICK_SIZE 10000
|
||||
|
||||
/* This is always executed with interrupts disabled. */
|
||||
static u32 amiga_gettimeoffset(void)
|
||||
{
|
||||
unsigned short hi, lo, hi2;
|
||||
u32 ticks, offset = 0;
|
||||
|
||||
/* read CIA B timer A current value */
|
||||
hi = ciab.tahi;
|
||||
lo = ciab.talo;
|
||||
hi2 = ciab.tahi;
|
||||
|
||||
if (hi != hi2) {
|
||||
lo = ciab.talo;
|
||||
hi = hi2;
|
||||
}
|
||||
|
||||
ticks = hi << 8 | lo;
|
||||
|
||||
if (ticks > jiffy_ticks / 2)
|
||||
/* check for pending interrupt */
|
||||
if (cia_set_irq(&ciab_base, 0) & CIA_ICR_TA)
|
||||
offset = 10000;
|
||||
|
||||
ticks = jiffy_ticks - ticks;
|
||||
ticks = (10000 * ticks) / jiffy_ticks;
|
||||
|
||||
return (ticks + offset) * 1000;
|
||||
}
|
||||
|
||||
static void amiga_reset(void) __noreturn;
|
||||
|
||||
static void amiga_reset(void)
|
||||
{
|
||||
unsigned long jmp_addr040 = virt_to_phys(&&jmp_addr_label040);
|
||||
unsigned long jmp_addr = virt_to_phys(&&jmp_addr_label);
|
||||
|
||||
local_irq_disable();
|
||||
if (CPU_IS_040_OR_060)
|
||||
/* Setup transparent translation registers for mapping
|
||||
* of 16 MB kernel segment before disabling translation
|
||||
*/
|
||||
asm volatile ("\n"
|
||||
" move.l %0,%%d0\n"
|
||||
" and.l #0xff000000,%%d0\n"
|
||||
" or.w #0xe020,%%d0\n" /* map 16 MB, enable, cacheable */
|
||||
" .chip 68040\n"
|
||||
" movec %%d0,%%itt0\n"
|
||||
" movec %%d0,%%dtt0\n"
|
||||
" .chip 68k\n"
|
||||
" jmp %0@\n"
|
||||
: /* no outputs */
|
||||
: "a" (jmp_addr040)
|
||||
: "d0");
|
||||
else
|
||||
/* for 680[23]0, just disable translation and jump to the physical
|
||||
* address of the label
|
||||
*/
|
||||
asm volatile ("\n"
|
||||
" pmove %%tc,%@\n"
|
||||
" bclr #7,%@\n"
|
||||
" pmove %@,%%tc\n"
|
||||
" jmp %0@\n"
|
||||
: /* no outputs */
|
||||
: "a" (jmp_addr));
|
||||
jmp_addr_label040:
|
||||
/* disable translation on '040 now */
|
||||
asm volatile ("\n"
|
||||
" moveq #0,%%d0\n"
|
||||
" .chip 68040\n"
|
||||
" movec %%d0,%%tc\n" /* disable MMU */
|
||||
" .chip 68k\n"
|
||||
: /* no outputs */
|
||||
: /* no inputs */
|
||||
: "d0");
|
||||
|
||||
jmp_addr_label:
|
||||
/* pickup reset address from AmigaOS ROM, reset devices and jump
|
||||
* to reset address
|
||||
*/
|
||||
asm volatile ("\n"
|
||||
" move.w #0x2700,%sr\n"
|
||||
" lea 0x01000000,%a0\n"
|
||||
" sub.l %a0@(-0x14),%a0\n"
|
||||
" move.l %a0@(4),%a0\n"
|
||||
" subq.l #2,%a0\n"
|
||||
" jra 1f\n"
|
||||
/* align on a longword boundary */
|
||||
" " __ALIGN_STR "\n"
|
||||
"1:\n"
|
||||
" reset\n"
|
||||
" jmp %a0@");
|
||||
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Debugging
|
||||
*/
|
||||
|
||||
#define SAVEKMSG_MAXMEM 128*1024
|
||||
|
||||
#define SAVEKMSG_MAGIC1 0x53415645 /* 'SAVE' */
|
||||
#define SAVEKMSG_MAGIC2 0x4B4D5347 /* 'KMSG' */
|
||||
|
||||
struct savekmsg {
|
||||
unsigned long magic1; /* SAVEKMSG_MAGIC1 */
|
||||
unsigned long magic2; /* SAVEKMSG_MAGIC2 */
|
||||
unsigned long magicptr; /* address of magic1 */
|
||||
unsigned long size;
|
||||
char data[0];
|
||||
};
|
||||
|
||||
static struct savekmsg *savekmsg;
|
||||
|
||||
static void amiga_mem_console_write(struct console *co, const char *s,
|
||||
unsigned int count)
|
||||
{
|
||||
if (savekmsg->size + count <= SAVEKMSG_MAXMEM-sizeof(struct savekmsg)) {
|
||||
memcpy(savekmsg->data + savekmsg->size, s, count);
|
||||
savekmsg->size += count;
|
||||
}
|
||||
}
|
||||
|
||||
static int __init amiga_savekmsg_setup(char *arg)
|
||||
{
|
||||
bool registered;
|
||||
|
||||
if (!MACH_IS_AMIGA || strcmp(arg, "mem"))
|
||||
return 0;
|
||||
|
||||
if (amiga_chip_size < SAVEKMSG_MAXMEM) {
|
||||
pr_err("Not enough chipram for debugging\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Just steal the block, the chipram allocator isn't functional yet */
|
||||
amiga_chip_size -= SAVEKMSG_MAXMEM;
|
||||
savekmsg = ZTWO_VADDR(CHIP_PHYSADDR + amiga_chip_size);
|
||||
savekmsg->magic1 = SAVEKMSG_MAGIC1;
|
||||
savekmsg->magic2 = SAVEKMSG_MAGIC2;
|
||||
savekmsg->magicptr = ZTWO_PADDR(savekmsg);
|
||||
savekmsg->size = 0;
|
||||
|
||||
registered = !!amiga_console_driver.write;
|
||||
amiga_console_driver.write = amiga_mem_console_write;
|
||||
if (!registered)
|
||||
register_console(&amiga_console_driver);
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("debug", amiga_savekmsg_setup);
|
||||
|
||||
static void amiga_serial_putc(char c)
|
||||
{
|
||||
amiga_custom.serdat = (unsigned char)c | 0x100;
|
||||
while (!(amiga_custom.serdatr & 0x2000))
|
||||
;
|
||||
}
|
||||
|
||||
static void amiga_serial_console_write(struct console *co, const char *s,
|
||||
unsigned int count)
|
||||
{
|
||||
while (count--) {
|
||||
if (*s == '\n')
|
||||
amiga_serial_putc('\r');
|
||||
amiga_serial_putc(*s++);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void amiga_serial_puts(const char *s)
|
||||
{
|
||||
amiga_serial_console_write(NULL, s, strlen(s));
|
||||
}
|
||||
|
||||
int amiga_serial_console_wait_key(struct console *co)
|
||||
{
|
||||
int ch;
|
||||
|
||||
while (!(amiga_custom.intreqr & IF_RBF))
|
||||
barrier();
|
||||
ch = amiga_custom.serdatr & 0xff;
|
||||
/* clear the interrupt, so that another character can be read */
|
||||
amiga_custom.intreq = IF_RBF;
|
||||
return ch;
|
||||
}
|
||||
|
||||
void amiga_serial_gets(struct console *co, char *s, int len)
|
||||
{
|
||||
int ch, cnt = 0;
|
||||
|
||||
while (1) {
|
||||
ch = amiga_serial_console_wait_key(co);
|
||||
|
||||
/* Check for backspace. */
|
||||
if (ch == 8 || ch == 127) {
|
||||
if (cnt == 0) {
|
||||
amiga_serial_putc('\007');
|
||||
continue;
|
||||
}
|
||||
cnt--;
|
||||
amiga_serial_puts("\010 \010");
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check for enter. */
|
||||
if (ch == 10 || ch == 13)
|
||||
break;
|
||||
|
||||
/* See if line is too long. */
|
||||
if (cnt >= len + 1) {
|
||||
amiga_serial_putc(7);
|
||||
cnt--;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Store and echo character. */
|
||||
s[cnt++] = ch;
|
||||
amiga_serial_putc(ch);
|
||||
}
|
||||
/* Print enter. */
|
||||
amiga_serial_puts("\r\n");
|
||||
s[cnt] = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init amiga_debug_setup(char *arg)
|
||||
{
|
||||
bool registered;
|
||||
|
||||
if (!MACH_IS_AMIGA || strcmp(arg, "ser"))
|
||||
return 0;
|
||||
|
||||
/* no initialization required (?) */
|
||||
registered = !!amiga_console_driver.write;
|
||||
amiga_console_driver.write = amiga_serial_console_write;
|
||||
if (!registered)
|
||||
register_console(&amiga_console_driver);
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("debug", amiga_debug_setup);
|
||||
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void amiga_heartbeat(int on)
|
||||
{
|
||||
if (on)
|
||||
ciaa.pra &= ~2;
|
||||
else
|
||||
ciaa.pra |= 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Amiga specific parts of /proc
|
||||
*/
|
||||
|
||||
static void amiga_get_model(char *model)
|
||||
{
|
||||
strcpy(model, amiga_model_name);
|
||||
}
|
||||
|
||||
|
||||
static void amiga_get_hardware_list(struct seq_file *m)
|
||||
{
|
||||
if (AMIGAHW_PRESENT(CHIP_RAM))
|
||||
seq_printf(m, "Chip RAM:\t%ldK\n", amiga_chip_size>>10);
|
||||
seq_printf(m, "PS Freq:\t%dHz\nEClock Freq:\t%ldHz\n",
|
||||
amiga_psfreq, amiga_eclock);
|
||||
if (AMIGAHW_PRESENT(AMI_VIDEO)) {
|
||||
char *type;
|
||||
switch (amiga_chipset) {
|
||||
case CS_OCS:
|
||||
type = "OCS";
|
||||
break;
|
||||
case CS_ECS:
|
||||
type = "ECS";
|
||||
break;
|
||||
case CS_AGA:
|
||||
type = "AGA";
|
||||
break;
|
||||
default:
|
||||
type = "Old or Unknown";
|
||||
break;
|
||||
}
|
||||
seq_printf(m, "Graphics:\t%s\n", type);
|
||||
}
|
||||
|
||||
#define AMIGAHW_ANNOUNCE(name, str) \
|
||||
if (AMIGAHW_PRESENT(name)) \
|
||||
seq_printf (m, "\t%s\n", str)
|
||||
|
||||
seq_printf (m, "Detected hardware:\n");
|
||||
|
||||
AMIGAHW_ANNOUNCE(AMI_VIDEO, "Amiga Video");
|
||||
AMIGAHW_ANNOUNCE(AMI_BLITTER, "Blitter");
|
||||
AMIGAHW_ANNOUNCE(AMBER_FF, "Amber Flicker Fixer");
|
||||
AMIGAHW_ANNOUNCE(AMI_AUDIO, "Amiga Audio");
|
||||
AMIGAHW_ANNOUNCE(AMI_FLOPPY, "Floppy Controller");
|
||||
AMIGAHW_ANNOUNCE(A3000_SCSI, "SCSI Controller WD33C93 (A3000 style)");
|
||||
AMIGAHW_ANNOUNCE(A4000_SCSI, "SCSI Controller NCR53C710 (A4000T style)");
|
||||
AMIGAHW_ANNOUNCE(A1200_IDE, "IDE Interface (A1200 style)");
|
||||
AMIGAHW_ANNOUNCE(A4000_IDE, "IDE Interface (A4000 style)");
|
||||
AMIGAHW_ANNOUNCE(CD_ROM, "Internal CD ROM drive");
|
||||
AMIGAHW_ANNOUNCE(AMI_KEYBOARD, "Keyboard");
|
||||
AMIGAHW_ANNOUNCE(AMI_MOUSE, "Mouse Port");
|
||||
AMIGAHW_ANNOUNCE(AMI_SERIAL, "Serial Port");
|
||||
AMIGAHW_ANNOUNCE(AMI_PARALLEL, "Parallel Port");
|
||||
AMIGAHW_ANNOUNCE(A2000_CLK, "Hardware Clock (A2000 style)");
|
||||
AMIGAHW_ANNOUNCE(A3000_CLK, "Hardware Clock (A3000 style)");
|
||||
AMIGAHW_ANNOUNCE(CHIP_RAM, "Chip RAM");
|
||||
AMIGAHW_ANNOUNCE(PAULA, "Paula 8364");
|
||||
AMIGAHW_ANNOUNCE(DENISE, "Denise 8362");
|
||||
AMIGAHW_ANNOUNCE(DENISE_HR, "Denise 8373");
|
||||
AMIGAHW_ANNOUNCE(LISA, "Lisa 8375");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_PAL, "Normal/Fat PAL Agnus 8367/8371");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_NTSC, "Normal/Fat NTSC Agnus 8361/8370");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_HR_PAL, "Fat Hires PAL Agnus 8372");
|
||||
AMIGAHW_ANNOUNCE(AGNUS_HR_NTSC, "Fat Hires NTSC Agnus 8372");
|
||||
AMIGAHW_ANNOUNCE(ALICE_PAL, "PAL Alice 8374");
|
||||
AMIGAHW_ANNOUNCE(ALICE_NTSC, "NTSC Alice 8374");
|
||||
AMIGAHW_ANNOUNCE(MAGIC_REKICK, "Magic Hard Rekick");
|
||||
AMIGAHW_ANNOUNCE(PCMCIA, "PCMCIA Slot");
|
||||
#ifdef CONFIG_ZORRO
|
||||
if (AMIGAHW_PRESENT(ZORRO))
|
||||
seq_printf(m, "\tZorro II%s AutoConfig: %d Expansion "
|
||||
"Device%s\n",
|
||||
AMIGAHW_PRESENT(ZORRO3) ? "I" : "",
|
||||
zorro_num_autocon, zorro_num_autocon == 1 ? "" : "s");
|
||||
#endif /* CONFIG_ZORRO */
|
||||
|
||||
#undef AMIGAHW_ANNOUNCE
|
||||
}
|
||||
|
||||
/*
|
||||
* The Amiga keyboard driver needs key_maps, but we cannot export it in
|
||||
* drivers/char/defkeymap.c, as it is autogenerated
|
||||
*/
|
||||
#ifdef CONFIG_HW_CONSOLE
|
||||
EXPORT_SYMBOL_GPL(key_maps);
|
||||
#endif
|
||||
122
arch/m68k/amiga/pcmcia.c
Normal file
122
arch/m68k/amiga/pcmcia.c
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
** asm-m68k/pcmcia.c -- Amiga Linux PCMCIA support
|
||||
** most information was found by disassembling card.resource
|
||||
** I'm still looking for an official doc !
|
||||
**
|
||||
** Copyright 1997 by Alain Malek
|
||||
**
|
||||
** This file is subject to the terms and conditions of the GNU General Public
|
||||
** License. See the file COPYING in the main directory of this archive
|
||||
** for more details.
|
||||
**
|
||||
** Created: 12/10/97 by Alain Malek
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/amigayle.h>
|
||||
#include <asm/amipcmcia.h>
|
||||
|
||||
/* gayle config byte for program voltage and access speed */
|
||||
static unsigned char cfg_byte = GAYLE_CFG_0V|GAYLE_CFG_150NS;
|
||||
|
||||
void pcmcia_reset(void)
|
||||
{
|
||||
unsigned long reset_start_time = jiffies;
|
||||
unsigned char b;
|
||||
|
||||
gayle_reset = 0x00;
|
||||
while (time_before(jiffies, reset_start_time + 1*HZ/100));
|
||||
b = gayle_reset;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_reset);
|
||||
|
||||
|
||||
/* copy a tuple, including tuple header. return nb bytes copied */
|
||||
/* be careful as this may trigger a GAYLE_IRQ_WR interrupt ! */
|
||||
|
||||
int pcmcia_copy_tuple(unsigned char tuple_id, void *tuple, int max_len)
|
||||
{
|
||||
unsigned char id, *dest;
|
||||
int cnt, pos, len;
|
||||
|
||||
dest = tuple;
|
||||
pos = 0;
|
||||
|
||||
id = gayle_attribute[pos];
|
||||
|
||||
while((id != CISTPL_END) && (pos < 0x10000)) {
|
||||
len = (int)gayle_attribute[pos+2] + 2;
|
||||
if (id == tuple_id) {
|
||||
len = (len > max_len)?max_len:len;
|
||||
for (cnt = 0; cnt < len; cnt++) {
|
||||
*dest++ = gayle_attribute[pos+(cnt<<1)];
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
pos += len<<1;
|
||||
id = gayle_attribute[pos];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_copy_tuple);
|
||||
|
||||
void pcmcia_program_voltage(int voltage)
|
||||
{
|
||||
unsigned char v;
|
||||
|
||||
switch (voltage) {
|
||||
case PCMCIA_0V:
|
||||
v = GAYLE_CFG_0V;
|
||||
break;
|
||||
case PCMCIA_5V:
|
||||
v = GAYLE_CFG_5V;
|
||||
break;
|
||||
case PCMCIA_12V:
|
||||
v = GAYLE_CFG_12V;
|
||||
break;
|
||||
default:
|
||||
v = GAYLE_CFG_0V;
|
||||
}
|
||||
|
||||
cfg_byte = (cfg_byte & 0xfc) | v;
|
||||
gayle.config = cfg_byte;
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_program_voltage);
|
||||
|
||||
void pcmcia_access_speed(int speed)
|
||||
{
|
||||
unsigned char s;
|
||||
|
||||
if (speed <= PCMCIA_SPEED_100NS)
|
||||
s = GAYLE_CFG_100NS;
|
||||
else if (speed <= PCMCIA_SPEED_150NS)
|
||||
s = GAYLE_CFG_150NS;
|
||||
else if (speed <= PCMCIA_SPEED_250NS)
|
||||
s = GAYLE_CFG_250NS;
|
||||
else
|
||||
s = GAYLE_CFG_720NS;
|
||||
|
||||
cfg_byte = (cfg_byte & 0xf3) | s;
|
||||
gayle.config = cfg_byte;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_access_speed);
|
||||
|
||||
void pcmcia_write_enable(void)
|
||||
{
|
||||
gayle.cardstatus = GAYLE_CS_WR|GAYLE_CS_DA;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_write_enable);
|
||||
|
||||
void pcmcia_write_disable(void)
|
||||
{
|
||||
gayle.cardstatus = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_write_disable);
|
||||
|
||||
255
arch/m68k/amiga/platform.c
Normal file
255
arch/m68k/amiga/platform.c
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2009 Geert Uytterhoeven
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/zorro.h>
|
||||
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigayle.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
|
||||
#ifdef CONFIG_ZORRO
|
||||
|
||||
static const struct resource zorro_resources[] __initconst = {
|
||||
/* Zorro II regions (on Zorro II/III) */
|
||||
{
|
||||
.name = "Zorro II exp",
|
||||
.start = 0x00e80000,
|
||||
.end = 0x00efffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "Zorro II mem",
|
||||
.start = 0x00200000,
|
||||
.end = 0x009fffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
/* Zorro III regions (on Zorro III only) */
|
||||
{
|
||||
.name = "Zorro III exp",
|
||||
.start = 0xff000000,
|
||||
.end = 0xffffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "Zorro III cfg",
|
||||
.start = 0x40000000,
|
||||
.end = 0x7fffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static int __init amiga_init_bus(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
unsigned int n;
|
||||
|
||||
if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO))
|
||||
return -ENODEV;
|
||||
|
||||
n = AMIGAHW_PRESENT(ZORRO3) ? 4 : 2;
|
||||
pdev = platform_device_register_simple("amiga-zorro", -1,
|
||||
zorro_resources, n);
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
|
||||
subsys_initcall(amiga_init_bus);
|
||||
|
||||
|
||||
static int __init z_dev_present(zorro_id id)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < zorro_num_autocon; i++) {
|
||||
const struct ExpansionRom *rom = &zorro_autocon_init[i].rom;
|
||||
if (be16_to_cpu(rom->er_Manufacturer) == ZORRO_MANUF(id) &&
|
||||
rom->er_Product == ZORRO_PROD(id))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_ZORRO */
|
||||
|
||||
static inline int z_dev_present(zorro_id id) { return 0; }
|
||||
|
||||
#endif /* !CONFIG_ZORRO */
|
||||
|
||||
|
||||
static const struct resource a3000_scsi_resource __initconst = {
|
||||
.start = 0xdd0000,
|
||||
.end = 0xdd00ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
|
||||
static const struct resource a4000t_scsi_resource __initconst = {
|
||||
.start = 0xdd0000,
|
||||
.end = 0xdd0fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
|
||||
static const struct resource a1200_ide_resource __initconst = {
|
||||
.start = 0xda0000,
|
||||
.end = 0xda1fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static const struct gayle_ide_platform_data a1200_ide_pdata __initconst = {
|
||||
.base = 0xda0000,
|
||||
.irqport = 0xda9000,
|
||||
.explicit_ack = 1,
|
||||
};
|
||||
|
||||
|
||||
static const struct resource a4000_ide_resource __initconst = {
|
||||
.start = 0xdd2000,
|
||||
.end = 0xdd3fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = {
|
||||
.base = 0xdd2020,
|
||||
.irqport = 0xdd3020,
|
||||
.explicit_ack = 0,
|
||||
};
|
||||
|
||||
|
||||
static const struct resource amiga_rtc_resource __initconst = {
|
||||
.start = 0x00dc0000,
|
||||
.end = 0x00dcffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
|
||||
static int __init amiga_init_devices(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int error;
|
||||
|
||||
if (!MACH_IS_AMIGA)
|
||||
return -ENODEV;
|
||||
|
||||
/* video hardware */
|
||||
if (AMIGAHW_PRESENT(AMI_VIDEO)) {
|
||||
pdev = platform_device_register_simple("amiga-video", -1, NULL,
|
||||
0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
|
||||
/* sound hardware */
|
||||
if (AMIGAHW_PRESENT(AMI_AUDIO)) {
|
||||
pdev = platform_device_register_simple("amiga-audio", -1, NULL,
|
||||
0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
|
||||
/* storage interfaces */
|
||||
if (AMIGAHW_PRESENT(AMI_FLOPPY)) {
|
||||
pdev = platform_device_register_simple("amiga-floppy", -1,
|
||||
NULL, 0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(A3000_SCSI)) {
|
||||
pdev = platform_device_register_simple("amiga-a3000-scsi", -1,
|
||||
&a3000_scsi_resource, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(A4000_SCSI)) {
|
||||
pdev = platform_device_register_simple("amiga-a4000t-scsi", -1,
|
||||
&a4000t_scsi_resource,
|
||||
1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(A1200_IDE) ||
|
||||
z_dev_present(ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE)) {
|
||||
pdev = platform_device_register_simple("amiga-gayle-ide", -1,
|
||||
&a1200_ide_resource, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
error = platform_device_add_data(pdev, &a1200_ide_pdata,
|
||||
sizeof(a1200_ide_pdata));
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(A4000_IDE)) {
|
||||
pdev = platform_device_register_simple("amiga-gayle-ide", -1,
|
||||
&a4000_ide_resource, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
error = platform_device_add_data(pdev, &a4000_ide_pdata,
|
||||
sizeof(a4000_ide_pdata));
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/* other I/O hardware */
|
||||
if (AMIGAHW_PRESENT(AMI_KEYBOARD)) {
|
||||
pdev = platform_device_register_simple("amiga-keyboard", -1,
|
||||
NULL, 0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(AMI_MOUSE)) {
|
||||
pdev = platform_device_register_simple("amiga-mouse", -1, NULL,
|
||||
0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(AMI_SERIAL)) {
|
||||
pdev = platform_device_register_simple("amiga-serial", -1,
|
||||
NULL, 0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(AMI_PARALLEL)) {
|
||||
pdev = platform_device_register_simple("amiga-parallel", -1,
|
||||
NULL, 0);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
|
||||
/* real time clocks */
|
||||
if (AMIGAHW_PRESENT(A2000_CLK)) {
|
||||
pdev = platform_device_register_simple("rtc-msm6242", -1,
|
||||
&amiga_rtc_resource, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
if (AMIGAHW_PRESENT(A3000_CLK)) {
|
||||
pdev = platform_device_register_simple("rtc-rp5c01", -1,
|
||||
&amiga_rtc_resource, 1);
|
||||
if (IS_ERR(pdev))
|
||||
return PTR_ERR(pdev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(amiga_init_devices);
|
||||
5
arch/m68k/apollo/Makefile
Normal file
5
arch/m68k/apollo/Makefile
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#
|
||||
# Makefile for Linux arch/m68k/amiga source directory
|
||||
#
|
||||
|
||||
obj-y := config.o dn_ints.o
|
||||
284
arch/m68k/apollo/config.c
Normal file
284
arch/m68k/apollo/config.c
Normal file
|
|
@ -0,0 +1,284 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/vt_kern.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/bootinfo-apollo.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/apollohw.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/rtc.h>
|
||||
#include <asm/machdep.h>
|
||||
|
||||
u_long sio01_physaddr;
|
||||
u_long sio23_physaddr;
|
||||
u_long rtc_physaddr;
|
||||
u_long pica_physaddr;
|
||||
u_long picb_physaddr;
|
||||
u_long cpuctrl_physaddr;
|
||||
u_long timer_physaddr;
|
||||
u_long apollo_model;
|
||||
|
||||
extern void dn_sched_init(irq_handler_t handler);
|
||||
extern void dn_init_IRQ(void);
|
||||
extern u32 dn_gettimeoffset(void);
|
||||
extern int dn_dummy_hwclk(int, struct rtc_time *);
|
||||
extern int dn_dummy_set_clock_mmss(unsigned long);
|
||||
extern void dn_dummy_reset(void);
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void dn_heartbeat(int on);
|
||||
#endif
|
||||
static irqreturn_t dn_timer_int(int irq,void *);
|
||||
static void dn_get_model(char *model);
|
||||
static const char *apollo_models[] = {
|
||||
[APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)",
|
||||
[APOLLO_DN3010-APOLLO_DN3000] = "DN3010 (Otter)",
|
||||
[APOLLO_DN3500-APOLLO_DN3000] = "DN3500 (Cougar II)",
|
||||
[APOLLO_DN4000-APOLLO_DN3000] = "DN4000 (Mink)",
|
||||
[APOLLO_DN4500-APOLLO_DN3000] = "DN4500 (Roadrunner)"
|
||||
};
|
||||
|
||||
int __init apollo_parse_bootinfo(const struct bi_record *record)
|
||||
{
|
||||
int unknown = 0;
|
||||
const void *data = record->data;
|
||||
|
||||
switch (be16_to_cpu(record->tag)) {
|
||||
case BI_APOLLO_MODEL:
|
||||
apollo_model = be32_to_cpup(data);
|
||||
break;
|
||||
|
||||
default:
|
||||
unknown=1;
|
||||
}
|
||||
|
||||
return unknown;
|
||||
}
|
||||
|
||||
static void __init dn_setup_model(void)
|
||||
{
|
||||
pr_info("Apollo hardware found: [%s]\n",
|
||||
apollo_models[apollo_model - APOLLO_DN3000]);
|
||||
|
||||
switch(apollo_model) {
|
||||
case APOLLO_UNKNOWN:
|
||||
panic("Unknown apollo model");
|
||||
break;
|
||||
case APOLLO_DN3000:
|
||||
case APOLLO_DN3010:
|
||||
sio01_physaddr=SAU8_SIO01_PHYSADDR;
|
||||
rtc_physaddr=SAU8_RTC_PHYSADDR;
|
||||
pica_physaddr=SAU8_PICA;
|
||||
picb_physaddr=SAU8_PICB;
|
||||
cpuctrl_physaddr=SAU8_CPUCTRL;
|
||||
timer_physaddr=SAU8_TIMER;
|
||||
break;
|
||||
case APOLLO_DN4000:
|
||||
sio01_physaddr=SAU7_SIO01_PHYSADDR;
|
||||
sio23_physaddr=SAU7_SIO23_PHYSADDR;
|
||||
rtc_physaddr=SAU7_RTC_PHYSADDR;
|
||||
pica_physaddr=SAU7_PICA;
|
||||
picb_physaddr=SAU7_PICB;
|
||||
cpuctrl_physaddr=SAU7_CPUCTRL;
|
||||
timer_physaddr=SAU7_TIMER;
|
||||
break;
|
||||
case APOLLO_DN4500:
|
||||
panic("Apollo model not yet supported");
|
||||
break;
|
||||
case APOLLO_DN3500:
|
||||
sio01_physaddr=SAU7_SIO01_PHYSADDR;
|
||||
sio23_physaddr=SAU7_SIO23_PHYSADDR;
|
||||
rtc_physaddr=SAU7_RTC_PHYSADDR;
|
||||
pica_physaddr=SAU7_PICA;
|
||||
picb_physaddr=SAU7_PICB;
|
||||
cpuctrl_physaddr=SAU7_CPUCTRL;
|
||||
timer_physaddr=SAU7_TIMER;
|
||||
break;
|
||||
default:
|
||||
panic("Undefined apollo model");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
int dn_serial_console_wait_key(struct console *co) {
|
||||
|
||||
while(!(sio01.srb_csrb & 1))
|
||||
barrier();
|
||||
return sio01.rhrb_thrb;
|
||||
}
|
||||
|
||||
void dn_serial_console_write (struct console *co, const char *str,unsigned int count)
|
||||
{
|
||||
while(count--) {
|
||||
if (*str == '\n') {
|
||||
sio01.rhrb_thrb = (unsigned char)'\r';
|
||||
while (!(sio01.srb_csrb & 0x4))
|
||||
;
|
||||
}
|
||||
sio01.rhrb_thrb = (unsigned char)*str++;
|
||||
while (!(sio01.srb_csrb & 0x4))
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void dn_serial_print (const char *str)
|
||||
{
|
||||
while (*str) {
|
||||
if (*str == '\n') {
|
||||
sio01.rhrb_thrb = (unsigned char)'\r';
|
||||
while (!(sio01.srb_csrb & 0x4))
|
||||
;
|
||||
}
|
||||
sio01.rhrb_thrb = (unsigned char)*str++;
|
||||
while (!(sio01.srb_csrb & 0x4))
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void __init config_apollo(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
dn_setup_model();
|
||||
|
||||
mach_sched_init=dn_sched_init; /* */
|
||||
mach_init_IRQ=dn_init_IRQ;
|
||||
arch_gettimeoffset = dn_gettimeoffset;
|
||||
mach_max_dma_address = 0xffffffff;
|
||||
mach_hwclk = dn_dummy_hwclk; /* */
|
||||
mach_set_clock_mmss = dn_dummy_set_clock_mmss; /* */
|
||||
mach_reset = dn_dummy_reset; /* */
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
mach_heartbeat = dn_heartbeat;
|
||||
#endif
|
||||
mach_get_model = dn_get_model;
|
||||
|
||||
cpuctrl=0xaa00;
|
||||
|
||||
/* clear DMA translation table */
|
||||
for(i=0;i<0x400;i++)
|
||||
addr_xlat_map[i]=0;
|
||||
|
||||
}
|
||||
|
||||
irqreturn_t dn_timer_int(int irq, void *dev_id)
|
||||
{
|
||||
irq_handler_t timer_handler = dev_id;
|
||||
|
||||
volatile unsigned char x;
|
||||
|
||||
timer_handler(irq, dev_id);
|
||||
|
||||
x = *(volatile unsigned char *)(apollo_timer + 3);
|
||||
x = *(volatile unsigned char *)(apollo_timer + 5);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
void dn_sched_init(irq_handler_t timer_routine)
|
||||
{
|
||||
/* program timer 1 */
|
||||
*(volatile unsigned char *)(apollo_timer + 3) = 0x01;
|
||||
*(volatile unsigned char *)(apollo_timer + 1) = 0x40;
|
||||
*(volatile unsigned char *)(apollo_timer + 5) = 0x09;
|
||||
*(volatile unsigned char *)(apollo_timer + 7) = 0xc4;
|
||||
|
||||
/* enable IRQ of PIC B */
|
||||
*(volatile unsigned char *)(pica+1)&=(~8);
|
||||
|
||||
#if 0
|
||||
pr_info("*(0x10803) %02x\n",
|
||||
*(volatile unsigned char *)(apollo_timer + 0x3));
|
||||
pr_info("*(0x10803) %02x\n",
|
||||
*(volatile unsigned char *)(apollo_timer + 0x3));
|
||||
#endif
|
||||
|
||||
if (request_irq(IRQ_APOLLO, dn_timer_int, 0, "time", timer_routine))
|
||||
pr_err("Couldn't register timer interrupt\n");
|
||||
}
|
||||
|
||||
u32 dn_gettimeoffset(void)
|
||||
{
|
||||
return 0xdeadbeef;
|
||||
}
|
||||
|
||||
int dn_dummy_hwclk(int op, struct rtc_time *t) {
|
||||
|
||||
|
||||
if(!op) { /* read */
|
||||
t->tm_sec=rtc->second;
|
||||
t->tm_min=rtc->minute;
|
||||
t->tm_hour=rtc->hours;
|
||||
t->tm_mday=rtc->day_of_month;
|
||||
t->tm_wday=rtc->day_of_week;
|
||||
t->tm_mon=rtc->month;
|
||||
t->tm_year=rtc->year;
|
||||
} else {
|
||||
rtc->second=t->tm_sec;
|
||||
rtc->minute=t->tm_min;
|
||||
rtc->hours=t->tm_hour;
|
||||
rtc->day_of_month=t->tm_mday;
|
||||
if(t->tm_wday!=-1)
|
||||
rtc->day_of_week=t->tm_wday;
|
||||
rtc->month=t->tm_mon;
|
||||
rtc->year=t->tm_year;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int dn_dummy_set_clock_mmss(unsigned long nowtime)
|
||||
{
|
||||
pr_info("set_clock_mmss\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dn_dummy_reset(void) {
|
||||
|
||||
dn_serial_print("The end !\n");
|
||||
|
||||
for(;;);
|
||||
|
||||
}
|
||||
|
||||
void dn_dummy_waitbut(void) {
|
||||
|
||||
dn_serial_print("waitbut\n");
|
||||
|
||||
}
|
||||
|
||||
static void dn_get_model(char *model)
|
||||
{
|
||||
strcpy(model, "Apollo ");
|
||||
if (apollo_model >= APOLLO_DN3000 && apollo_model <= APOLLO_DN4500)
|
||||
strcat(model, apollo_models[apollo_model - APOLLO_DN3000]);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static int dn_cpuctrl=0xff00;
|
||||
|
||||
static void dn_heartbeat(int on) {
|
||||
|
||||
if(on) {
|
||||
dn_cpuctrl&=~0x100;
|
||||
cpuctrl=dn_cpuctrl;
|
||||
}
|
||||
else {
|
||||
dn_cpuctrl&=~0x100;
|
||||
dn_cpuctrl|=0x100;
|
||||
cpuctrl=dn_cpuctrl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
47
arch/m68k/apollo/dn_ints.c
Normal file
47
arch/m68k/apollo/dn_ints.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/traps.h>
|
||||
#include <asm/apollohw.h>
|
||||
|
||||
unsigned int apollo_irq_startup(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
|
||||
if (irq < 8)
|
||||
*(volatile unsigned char *)(pica+1) &= ~(1 << irq);
|
||||
else
|
||||
*(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void apollo_irq_shutdown(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
|
||||
if (irq < 8)
|
||||
*(volatile unsigned char *)(pica+1) |= (1 << irq);
|
||||
else
|
||||
*(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
|
||||
}
|
||||
|
||||
void apollo_irq_eoi(struct irq_data *data)
|
||||
{
|
||||
*(volatile unsigned char *)(pica) = 0x20;
|
||||
*(volatile unsigned char *)(picb) = 0x20;
|
||||
}
|
||||
|
||||
static struct irq_chip apollo_irq_chip = {
|
||||
.name = "apollo",
|
||||
.irq_startup = apollo_irq_startup,
|
||||
.irq_shutdown = apollo_irq_shutdown,
|
||||
.irq_eoi = apollo_irq_eoi,
|
||||
};
|
||||
|
||||
|
||||
void __init dn_init_IRQ(void)
|
||||
{
|
||||
m68k_setup_user_interrupt(VEC_USER + 96, 16);
|
||||
m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq,
|
||||
IRQ_APOLLO, 16);
|
||||
}
|
||||
8
arch/m68k/atari/Makefile
Normal file
8
arch/m68k/atari/Makefile
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#
|
||||
# Makefile for Linux arch/m68k/atari source directory
|
||||
#
|
||||
|
||||
obj-y := config.o time.o debug.o ataints.o stdma.o \
|
||||
atasound.o stram.o
|
||||
|
||||
obj-$(CONFIG_ATARI_KBD_CORE) += atakeyb.o
|
||||
391
arch/m68k/atari/ataints.c
Normal file
391
arch/m68k/atari/ataints.c
Normal file
|
|
@ -0,0 +1,391 @@
|
|||
/*
|
||||
* arch/m68k/atari/ataints.c -- Atari Linux interrupt handling code
|
||||
*
|
||||
* 5/2/94 Roman Hodek:
|
||||
* Added support for TT interrupts; setup for TT SCU (may someone has
|
||||
* twiddled there and we won't get the right interrupts :-()
|
||||
*
|
||||
* Major change: The device-independent code in m68k/ints.c didn't know
|
||||
* about non-autovec ints yet. It hardcoded the number of possible ints to
|
||||
* 7 (IRQ1...IRQ7). But the Atari has lots of non-autovec ints! I made the
|
||||
* number of possible ints a constant defined in interrupt.h, which is
|
||||
* 47 for the Atari. So we can call request_irq() for all Atari interrupts
|
||||
* just the normal way. Additionally, all vectors >= 48 are initialized to
|
||||
* call trap() instead of inthandler(). This must be changed here, too.
|
||||
*
|
||||
* 1995-07-16 Lars Brinkhoff <f93labr@dd.chalmers.se>:
|
||||
* Corrected a bug in atari_add_isr() which rejected all SCC
|
||||
* interrupt sources if there were no TT MFP!
|
||||
*
|
||||
* 12/13/95: New interface functions atari_level_triggered_int() and
|
||||
* atari_register_vme_int() as support for level triggered VME interrupts.
|
||||
*
|
||||
* 02/12/96: (Roman)
|
||||
* Total rewrite of Atari interrupt handling, for new scheme see comments
|
||||
* below.
|
||||
*
|
||||
* 1996-09-03 lars brinkhoff <f93labr@dd.chalmers.se>:
|
||||
* Added new function atari_unregister_vme_int(), and
|
||||
* modified atari_register_vme_int() as well as IS_VALID_INTNO()
|
||||
* to work with it.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/traps.h>
|
||||
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atariints.h>
|
||||
#include <asm/atari_stdma.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/entry.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
|
||||
/*
|
||||
* Atari interrupt handling scheme:
|
||||
* --------------------------------
|
||||
*
|
||||
* All interrupt source have an internal number (defined in
|
||||
* <asm/atariints.h>): Autovector interrupts are 1..7, then follow ST-MFP,
|
||||
* TT-MFP, SCC, and finally VME interrupts. Vector numbers for the latter can
|
||||
* be allocated by atari_register_vme_int().
|
||||
*/
|
||||
|
||||
/*
|
||||
* Bitmap for free interrupt vector numbers
|
||||
* (new vectors starting from 0x70 can be allocated by
|
||||
* atari_register_vme_int())
|
||||
*/
|
||||
static int free_vme_vec_bitmap;
|
||||
|
||||
/* GK:
|
||||
* HBL IRQ handler for Falcon. Nobody needs it :-)
|
||||
* ++andreas: raise ipl to disable further HBLANK interrupts.
|
||||
*/
|
||||
asmlinkage void falcon_hblhandler(void);
|
||||
asm(".text\n"
|
||||
__ALIGN_STR "\n\t"
|
||||
"falcon_hblhandler:\n\t"
|
||||
"orw #0x200,%sp@\n\t" /* set saved ipl to 2 */
|
||||
"rte");
|
||||
|
||||
extern void atari_microwire_cmd(int cmd);
|
||||
|
||||
static unsigned int atari_irq_startup(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
|
||||
m68k_irq_startup(data);
|
||||
atari_turnon_irq(irq);
|
||||
atari_enable_irq(irq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void atari_irq_shutdown(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
|
||||
atari_disable_irq(irq);
|
||||
atari_turnoff_irq(irq);
|
||||
m68k_irq_shutdown(data);
|
||||
|
||||
if (irq == IRQ_AUTO_4)
|
||||
vectors[VEC_INT4] = falcon_hblhandler;
|
||||
}
|
||||
|
||||
static void atari_irq_enable(struct irq_data *data)
|
||||
{
|
||||
atari_enable_irq(data->irq);
|
||||
}
|
||||
|
||||
static void atari_irq_disable(struct irq_data *data)
|
||||
{
|
||||
atari_disable_irq(data->irq);
|
||||
}
|
||||
|
||||
static struct irq_chip atari_irq_chip = {
|
||||
.name = "atari",
|
||||
.irq_startup = atari_irq_startup,
|
||||
.irq_shutdown = atari_irq_shutdown,
|
||||
.irq_enable = atari_irq_enable,
|
||||
.irq_disable = atari_irq_disable,
|
||||
};
|
||||
|
||||
/*
|
||||
* ST-MFP timer D chained interrupts - each driver gets its own timer
|
||||
* interrupt instance.
|
||||
*/
|
||||
|
||||
struct mfptimerbase {
|
||||
volatile struct MFP *mfp;
|
||||
unsigned char mfp_mask, mfp_data;
|
||||
unsigned short int_mask;
|
||||
int handler_irq, mfptimer_irq, server_irq;
|
||||
char *name;
|
||||
} stmfp_base = {
|
||||
.mfp = &st_mfp,
|
||||
.int_mask = 0x0,
|
||||
.handler_irq = IRQ_MFP_TIMD,
|
||||
.mfptimer_irq = IRQ_MFP_TIMER1,
|
||||
.name = "MFP Timer D"
|
||||
};
|
||||
|
||||
static irqreturn_t mfptimer_handler(int irq, void *dev_id)
|
||||
{
|
||||
struct mfptimerbase *base = dev_id;
|
||||
int mach_irq;
|
||||
unsigned char ints;
|
||||
|
||||
mach_irq = base->mfptimer_irq;
|
||||
ints = base->int_mask;
|
||||
for (; ints; mach_irq++, ints >>= 1) {
|
||||
if (ints & 1)
|
||||
generic_handle_irq(mach_irq);
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
||||
static void atari_mfptimer_enable(struct irq_data *data)
|
||||
{
|
||||
int mfp_num = data->irq - IRQ_MFP_TIMER1;
|
||||
stmfp_base.int_mask |= 1 << mfp_num;
|
||||
atari_enable_irq(IRQ_MFP_TIMD);
|
||||
}
|
||||
|
||||
static void atari_mfptimer_disable(struct irq_data *data)
|
||||
{
|
||||
int mfp_num = data->irq - IRQ_MFP_TIMER1;
|
||||
stmfp_base.int_mask &= ~(1 << mfp_num);
|
||||
if (!stmfp_base.int_mask)
|
||||
atari_disable_irq(IRQ_MFP_TIMD);
|
||||
}
|
||||
|
||||
static struct irq_chip atari_mfptimer_chip = {
|
||||
.name = "timer_d",
|
||||
.irq_enable = atari_mfptimer_enable,
|
||||
.irq_disable = atari_mfptimer_disable,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* EtherNAT CPLD interrupt handling
|
||||
* CPLD interrupt register is at phys. 0x80000023
|
||||
* Need this mapped in at interrupt startup time
|
||||
* Possibly need this mapped on demand anyway -
|
||||
* EtherNAT USB driver needs to disable IRQ before
|
||||
* startup!
|
||||
*/
|
||||
|
||||
static unsigned char *enat_cpld;
|
||||
|
||||
static unsigned int atari_ethernat_startup(struct irq_data *data)
|
||||
{
|
||||
int enat_num = 140 - data->irq + 1;
|
||||
|
||||
m68k_irq_startup(data);
|
||||
/*
|
||||
* map CPLD interrupt register
|
||||
*/
|
||||
if (!enat_cpld)
|
||||
enat_cpld = (unsigned char *)ioremap((ATARI_ETHERNAT_PHYS_ADDR+0x23), 0x2);
|
||||
/*
|
||||
* do _not_ enable the USB chip interrupt here - causes interrupt storm
|
||||
* and triggers dead interrupt watchdog
|
||||
* Need to reset the USB chip to a sane state in early startup before
|
||||
* removing this hack
|
||||
*/
|
||||
if (enat_num == 1)
|
||||
*enat_cpld |= 1 << enat_num;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void atari_ethernat_enable(struct irq_data *data)
|
||||
{
|
||||
int enat_num = 140 - data->irq + 1;
|
||||
/*
|
||||
* map CPLD interrupt register
|
||||
*/
|
||||
if (!enat_cpld)
|
||||
enat_cpld = (unsigned char *)ioremap((ATARI_ETHERNAT_PHYS_ADDR+0x23), 0x2);
|
||||
*enat_cpld |= 1 << enat_num;
|
||||
}
|
||||
|
||||
static void atari_ethernat_disable(struct irq_data *data)
|
||||
{
|
||||
int enat_num = 140 - data->irq + 1;
|
||||
/*
|
||||
* map CPLD interrupt register
|
||||
*/
|
||||
if (!enat_cpld)
|
||||
enat_cpld = (unsigned char *)ioremap((ATARI_ETHERNAT_PHYS_ADDR+0x23), 0x2);
|
||||
*enat_cpld &= ~(1 << enat_num);
|
||||
}
|
||||
|
||||
static void atari_ethernat_shutdown(struct irq_data *data)
|
||||
{
|
||||
int enat_num = 140 - data->irq + 1;
|
||||
if (enat_cpld) {
|
||||
*enat_cpld &= ~(1 << enat_num);
|
||||
iounmap(enat_cpld);
|
||||
enat_cpld = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static struct irq_chip atari_ethernat_chip = {
|
||||
.name = "ethernat",
|
||||
.irq_startup = atari_ethernat_startup,
|
||||
.irq_shutdown = atari_ethernat_shutdown,
|
||||
.irq_enable = atari_ethernat_enable,
|
||||
.irq_disable = atari_ethernat_disable,
|
||||
};
|
||||
|
||||
/*
|
||||
* void atari_init_IRQ (void)
|
||||
*
|
||||
* Parameters: None
|
||||
*
|
||||
* Returns: Nothing
|
||||
*
|
||||
* This function should be called during kernel startup to initialize
|
||||
* the atari IRQ handling routines.
|
||||
*/
|
||||
|
||||
void __init atari_init_IRQ(void)
|
||||
{
|
||||
m68k_setup_user_interrupt(VEC_USER, NUM_ATARI_SOURCES - IRQ_USER);
|
||||
m68k_setup_irq_controller(&atari_irq_chip, handle_simple_irq, 1,
|
||||
NUM_ATARI_SOURCES - 1);
|
||||
|
||||
/* Initialize the MFP(s) */
|
||||
|
||||
#ifdef ATARI_USE_SOFTWARE_EOI
|
||||
st_mfp.vec_adr = 0x48; /* Software EOI-Mode */
|
||||
#else
|
||||
st_mfp.vec_adr = 0x40; /* Automatic EOI-Mode */
|
||||
#endif
|
||||
st_mfp.int_en_a = 0x00; /* turn off MFP-Ints */
|
||||
st_mfp.int_en_b = 0x00;
|
||||
st_mfp.int_mk_a = 0xff; /* no Masking */
|
||||
st_mfp.int_mk_b = 0xff;
|
||||
|
||||
if (ATARIHW_PRESENT(TT_MFP)) {
|
||||
#ifdef ATARI_USE_SOFTWARE_EOI
|
||||
tt_mfp.vec_adr = 0x58; /* Software EOI-Mode */
|
||||
#else
|
||||
tt_mfp.vec_adr = 0x50; /* Automatic EOI-Mode */
|
||||
#endif
|
||||
tt_mfp.int_en_a = 0x00; /* turn off MFP-Ints */
|
||||
tt_mfp.int_en_b = 0x00;
|
||||
tt_mfp.int_mk_a = 0xff; /* no Masking */
|
||||
tt_mfp.int_mk_b = 0xff;
|
||||
}
|
||||
|
||||
if (ATARIHW_PRESENT(SCC) && !atari_SCC_reset_done) {
|
||||
atari_scc.cha_a_ctrl = 9;
|
||||
MFPDELAY();
|
||||
atari_scc.cha_a_ctrl = (char) 0xc0; /* hardware reset */
|
||||
}
|
||||
|
||||
if (ATARIHW_PRESENT(SCU)) {
|
||||
/* init the SCU if present */
|
||||
tt_scu.sys_mask = 0x10; /* enable VBL (for the cursor) and
|
||||
* disable HSYNC interrupts (who
|
||||
* needs them?) MFP and SCC are
|
||||
* enabled in VME mask
|
||||
*/
|
||||
tt_scu.vme_mask = 0x60; /* enable MFP and SCC ints */
|
||||
} else {
|
||||
/* If no SCU and no Hades, the HSYNC interrupt needs to be
|
||||
* disabled this way. (Else _inthandler in kernel/sys_call.S
|
||||
* gets overruns)
|
||||
*/
|
||||
|
||||
vectors[VEC_INT2] = falcon_hblhandler;
|
||||
vectors[VEC_INT4] = falcon_hblhandler;
|
||||
}
|
||||
|
||||
if (ATARIHW_PRESENT(PCM_8BIT) && ATARIHW_PRESENT(MICROWIRE)) {
|
||||
/* Initialize the LM1992 Sound Controller to enable
|
||||
the PSG sound. This is misplaced here, it should
|
||||
be in an atasound_init(), that doesn't exist yet. */
|
||||
atari_microwire_cmd(MW_LM1992_PSG_HIGH);
|
||||
}
|
||||
|
||||
stdma_init();
|
||||
|
||||
/* Initialize the PSG: all sounds off, both ports output */
|
||||
sound_ym.rd_data_reg_sel = 7;
|
||||
sound_ym.wd_data = 0xff;
|
||||
|
||||
m68k_setup_irq_controller(&atari_mfptimer_chip, handle_simple_irq,
|
||||
IRQ_MFP_TIMER1, 8);
|
||||
|
||||
irq_set_status_flags(IRQ_MFP_TIMER1, IRQ_IS_POLLED);
|
||||
irq_set_status_flags(IRQ_MFP_TIMER2, IRQ_IS_POLLED);
|
||||
|
||||
/* prepare timer D data for use as poll interrupt */
|
||||
/* set Timer D data Register - needs to be > 0 */
|
||||
st_mfp.tim_dt_d = 254; /* < 100 Hz */
|
||||
/* start timer D, div = 1:100 */
|
||||
st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 0xf0) | 0x6;
|
||||
|
||||
/* request timer D dispatch handler */
|
||||
if (request_irq(IRQ_MFP_TIMD, mfptimer_handler, IRQF_SHARED,
|
||||
stmfp_base.name, &stmfp_base))
|
||||
pr_err("Couldn't register %s interrupt\n", stmfp_base.name);
|
||||
|
||||
/*
|
||||
* EtherNAT ethernet / USB interrupt handlers
|
||||
*/
|
||||
|
||||
m68k_setup_irq_controller(&atari_ethernat_chip, handle_simple_irq,
|
||||
139, 2);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* atari_register_vme_int() returns the number of a free interrupt vector for
|
||||
* hardware with a programmable int vector (probably a VME board).
|
||||
*/
|
||||
|
||||
unsigned int atari_register_vme_int(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
if ((free_vme_vec_bitmap & (1 << i)) == 0)
|
||||
break;
|
||||
|
||||
if (i == 16)
|
||||
return 0;
|
||||
|
||||
free_vme_vec_bitmap |= 1 << i;
|
||||
return VME_SOURCE_BASE + i;
|
||||
}
|
||||
EXPORT_SYMBOL(atari_register_vme_int);
|
||||
|
||||
|
||||
void atari_unregister_vme_int(unsigned int irq)
|
||||
{
|
||||
if (irq >= VME_SOURCE_BASE && irq < VME_SOURCE_BASE + VME_MAX_SOURCES) {
|
||||
irq -= VME_SOURCE_BASE;
|
||||
free_vme_vec_bitmap &= ~(1 << irq);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(atari_unregister_vme_int);
|
||||
|
||||
|
||||
638
arch/m68k/atari/atakeyb.c
Normal file
638
arch/m68k/atari/atakeyb.c
Normal file
|
|
@ -0,0 +1,638 @@
|
|||
/*
|
||||
* Atari Keyboard driver for 680x0 Linux
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Atari support by Robert de Vries
|
||||
* enhanced by Bjoern Brauel and Roman Hodek
|
||||
*
|
||||
* 2.6 and input cleanup (removed autorepeat stuff) for 2.6.21
|
||||
* 06/07 Michael Schmitz
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/keyboard.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/kd.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kbd_kern.h>
|
||||
|
||||
#include <asm/atariints.h>
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atarikb.h>
|
||||
#include <asm/atari_joystick.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
|
||||
/* Hook for MIDI serial driver */
|
||||
void (*atari_MIDI_interrupt_hook) (void);
|
||||
/* Hook for keyboard inputdev driver */
|
||||
void (*atari_input_keyboard_interrupt_hook) (unsigned char, char);
|
||||
/* Hook for mouse inputdev driver */
|
||||
void (*atari_input_mouse_interrupt_hook) (char *);
|
||||
EXPORT_SYMBOL(atari_input_keyboard_interrupt_hook);
|
||||
EXPORT_SYMBOL(atari_input_mouse_interrupt_hook);
|
||||
|
||||
/* variables for IKBD self test: */
|
||||
|
||||
/* state: 0: off; >0: in progress; >1: 0xf1 received */
|
||||
static volatile int ikbd_self_test;
|
||||
/* timestamp when last received a char */
|
||||
static volatile unsigned long self_test_last_rcv;
|
||||
/* bitmap of keys reported as broken */
|
||||
static unsigned long broken_keys[128/(sizeof(unsigned long)*8)] = { 0, };
|
||||
|
||||
#define BREAK_MASK (0x80)
|
||||
|
||||
/*
|
||||
* ++roman: The following changes were applied manually:
|
||||
*
|
||||
* - The Alt (= Meta) key works in combination with Shift and
|
||||
* Control, e.g. Alt+Shift+a sends Meta-A (0xc1), Alt+Control+A sends
|
||||
* Meta-Ctrl-A (0x81) ...
|
||||
*
|
||||
* - The parentheses on the keypad send '(' and ')' with all
|
||||
* modifiers (as would do e.g. keypad '+'), but they cannot be used as
|
||||
* application keys (i.e. sending Esc O c).
|
||||
*
|
||||
* - HELP and UNDO are mapped to be F21 and F24, resp, that send the
|
||||
* codes "\E[M" and "\E[P". (This is better than the old mapping to
|
||||
* F11 and F12, because these codes are on Shift+F1/2 anyway.) This
|
||||
* way, applications that allow their own keyboard mappings
|
||||
* (e.g. tcsh, X Windows) can be configured to use them in the way
|
||||
* the label suggests (providing help or undoing).
|
||||
*
|
||||
* - Console switching is done with Alt+Fx (consoles 1..10) and
|
||||
* Shift+Alt+Fx (consoles 11..20).
|
||||
*
|
||||
* - The misc. special function implemented in the kernel are mapped
|
||||
* to the following key combinations:
|
||||
*
|
||||
* ClrHome -> Home/Find
|
||||
* Shift + ClrHome -> End/Select
|
||||
* Shift + Up -> Page Up
|
||||
* Shift + Down -> Page Down
|
||||
* Alt + Help -> show system status
|
||||
* Shift + Help -> show memory info
|
||||
* Ctrl + Help -> show registers
|
||||
* Ctrl + Alt + Del -> Reboot
|
||||
* Alt + Undo -> switch to last console
|
||||
* Shift + Undo -> send interrupt
|
||||
* Alt + Insert -> stop/start output (same as ^S/^Q)
|
||||
* Alt + Up -> Scroll back console (if implemented)
|
||||
* Alt + Down -> Scroll forward console (if implemented)
|
||||
* Alt + CapsLock -> NumLock
|
||||
*
|
||||
* ++Andreas:
|
||||
*
|
||||
* - Help mapped to K_HELP
|
||||
* - Undo mapped to K_UNDO (= K_F246)
|
||||
* - Keypad Left/Right Parenthesis mapped to new K_PPAREN[LR]
|
||||
*/
|
||||
|
||||
typedef enum kb_state_t {
|
||||
KEYBOARD, AMOUSE, RMOUSE, JOYSTICK, CLOCK, RESYNC
|
||||
} KB_STATE_T;
|
||||
|
||||
#define IS_SYNC_CODE(sc) ((sc) >= 0x04 && (sc) <= 0xfb)
|
||||
|
||||
typedef struct keyboard_state {
|
||||
unsigned char buf[6];
|
||||
int len;
|
||||
KB_STATE_T state;
|
||||
} KEYBOARD_STATE;
|
||||
|
||||
KEYBOARD_STATE kb_state;
|
||||
|
||||
/* ++roman: If a keyboard overrun happened, we can't tell in general how much
|
||||
* bytes have been lost and in which state of the packet structure we are now.
|
||||
* This usually causes keyboards bytes to be interpreted as mouse movements
|
||||
* and vice versa, which is very annoying. It seems better to throw away some
|
||||
* bytes (that are usually mouse bytes) than to misinterpret them. Therefore I
|
||||
* introduced the RESYNC state for IKBD data. In this state, the bytes up to
|
||||
* one that really looks like a key event (0x04..0xf2) or the start of a mouse
|
||||
* packet (0xf8..0xfb) are thrown away, but at most 2 bytes. This at least
|
||||
* speeds up the resynchronization of the event structure, even if maybe a
|
||||
* mouse movement is lost. However, nothing is perfect. For bytes 0x01..0x03,
|
||||
* it's really hard to decide whether they're mouse or keyboard bytes. Since
|
||||
* overruns usually occur when moving the Atari mouse rapidly, they're seen as
|
||||
* mouse bytes here. If this is wrong, only a make code of the keyboard gets
|
||||
* lost, which isn't too bad. Losing a break code would be disastrous,
|
||||
* because then the keyboard repeat strikes...
|
||||
*/
|
||||
|
||||
static irqreturn_t atari_keyboard_interrupt(int irq, void *dummy)
|
||||
{
|
||||
u_char acia_stat;
|
||||
int scancode;
|
||||
int break_flag;
|
||||
|
||||
repeat:
|
||||
if (acia.mid_ctrl & ACIA_IRQ)
|
||||
if (atari_MIDI_interrupt_hook)
|
||||
atari_MIDI_interrupt_hook();
|
||||
acia_stat = acia.key_ctrl;
|
||||
/* check out if the interrupt came from this ACIA */
|
||||
if (!((acia_stat | acia.mid_ctrl) & ACIA_IRQ))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
if (acia_stat & ACIA_OVRN) {
|
||||
/* a very fast typist or a slow system, give a warning */
|
||||
/* ...happens often if interrupts were disabled for too long */
|
||||
printk(KERN_DEBUG "Keyboard overrun\n");
|
||||
scancode = acia.key_data;
|
||||
if (ikbd_self_test)
|
||||
/* During self test, don't do resyncing, just process the code */
|
||||
goto interpret_scancode;
|
||||
else if (IS_SYNC_CODE(scancode)) {
|
||||
/* This code seem already to be the start of a new packet or a
|
||||
* single scancode */
|
||||
kb_state.state = KEYBOARD;
|
||||
goto interpret_scancode;
|
||||
} else {
|
||||
/* Go to RESYNC state and skip this byte */
|
||||
kb_state.state = RESYNC;
|
||||
kb_state.len = 1; /* skip max. 1 another byte */
|
||||
goto repeat;
|
||||
}
|
||||
}
|
||||
|
||||
if (acia_stat & ACIA_RDRF) {
|
||||
/* received a character */
|
||||
scancode = acia.key_data; /* get it or reset the ACIA, I'll get it! */
|
||||
tasklet_schedule(&keyboard_tasklet);
|
||||
interpret_scancode:
|
||||
switch (kb_state.state) {
|
||||
case KEYBOARD:
|
||||
switch (scancode) {
|
||||
case 0xF7:
|
||||
kb_state.state = AMOUSE;
|
||||
kb_state.len = 0;
|
||||
break;
|
||||
|
||||
case 0xF8:
|
||||
case 0xF9:
|
||||
case 0xFA:
|
||||
case 0xFB:
|
||||
kb_state.state = RMOUSE;
|
||||
kb_state.len = 1;
|
||||
kb_state.buf[0] = scancode;
|
||||
break;
|
||||
|
||||
case 0xFC:
|
||||
kb_state.state = CLOCK;
|
||||
kb_state.len = 0;
|
||||
break;
|
||||
|
||||
case 0xFE:
|
||||
case 0xFF:
|
||||
kb_state.state = JOYSTICK;
|
||||
kb_state.len = 1;
|
||||
kb_state.buf[0] = scancode;
|
||||
break;
|
||||
|
||||
case 0xF1:
|
||||
/* during self-test, note that 0xf1 received */
|
||||
if (ikbd_self_test) {
|
||||
++ikbd_self_test;
|
||||
self_test_last_rcv = jiffies;
|
||||
break;
|
||||
}
|
||||
/* FALL THROUGH */
|
||||
|
||||
default:
|
||||
break_flag = scancode & BREAK_MASK;
|
||||
scancode &= ~BREAK_MASK;
|
||||
if (ikbd_self_test) {
|
||||
/* Scancodes sent during the self-test stand for broken
|
||||
* keys (keys being down). The code *should* be a break
|
||||
* code, but nevertheless some AT keyboard interfaces send
|
||||
* make codes instead. Therefore, simply ignore
|
||||
* break_flag...
|
||||
*/
|
||||
int keyval, keytyp;
|
||||
|
||||
set_bit(scancode, broken_keys);
|
||||
self_test_last_rcv = jiffies;
|
||||
/* new Linux scancodes; approx. */
|
||||
keyval = scancode;
|
||||
keytyp = KTYP(keyval) - 0xf0;
|
||||
keyval = KVAL(keyval);
|
||||
|
||||
printk(KERN_WARNING "Key with scancode %d ", scancode);
|
||||
if (keytyp == KT_LATIN || keytyp == KT_LETTER) {
|
||||
if (keyval < ' ')
|
||||
printk("('^%c') ", keyval + '@');
|
||||
else
|
||||
printk("('%c') ", keyval);
|
||||
}
|
||||
printk("is broken -- will be ignored.\n");
|
||||
break;
|
||||
} else if (test_bit(scancode, broken_keys))
|
||||
break;
|
||||
|
||||
if (atari_input_keyboard_interrupt_hook)
|
||||
atari_input_keyboard_interrupt_hook((unsigned char)scancode, !break_flag);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case AMOUSE:
|
||||
kb_state.buf[kb_state.len++] = scancode;
|
||||
if (kb_state.len == 5) {
|
||||
kb_state.state = KEYBOARD;
|
||||
/* not yet used */
|
||||
/* wake up someone waiting for this */
|
||||
}
|
||||
break;
|
||||
|
||||
case RMOUSE:
|
||||
kb_state.buf[kb_state.len++] = scancode;
|
||||
if (kb_state.len == 3) {
|
||||
kb_state.state = KEYBOARD;
|
||||
if (atari_input_mouse_interrupt_hook)
|
||||
atari_input_mouse_interrupt_hook(kb_state.buf);
|
||||
}
|
||||
break;
|
||||
|
||||
case JOYSTICK:
|
||||
kb_state.buf[1] = scancode;
|
||||
kb_state.state = KEYBOARD;
|
||||
#ifdef FIXED_ATARI_JOYSTICK
|
||||
atari_joystick_interrupt(kb_state.buf);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case CLOCK:
|
||||
kb_state.buf[kb_state.len++] = scancode;
|
||||
if (kb_state.len == 6) {
|
||||
kb_state.state = KEYBOARD;
|
||||
/* wake up someone waiting for this.
|
||||
But will this ever be used, as Linux keeps its own time.
|
||||
Perhaps for synchronization purposes? */
|
||||
/* wake_up_interruptible(&clock_wait); */
|
||||
}
|
||||
break;
|
||||
|
||||
case RESYNC:
|
||||
if (kb_state.len <= 0 || IS_SYNC_CODE(scancode)) {
|
||||
kb_state.state = KEYBOARD;
|
||||
goto interpret_scancode;
|
||||
}
|
||||
kb_state.len--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (acia_stat & ACIA_CTS)
|
||||
/* cannot happen */;
|
||||
#endif
|
||||
|
||||
if (acia_stat & (ACIA_FE | ACIA_PE)) {
|
||||
printk("Error in keyboard communication\n");
|
||||
}
|
||||
|
||||
/* handle_scancode() can take a lot of time, so check again if
|
||||
* some character arrived
|
||||
*/
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
/*
|
||||
* I write to the keyboard without using interrupts, I poll instead.
|
||||
* This takes for the maximum length string allowed (7) at 7812.5 baud
|
||||
* 8 data 1 start 1 stop bit: 9.0 ms
|
||||
* If this takes too long for normal operation, interrupt driven writing
|
||||
* is the solution. (I made a feeble attempt in that direction but I
|
||||
* kept it simple for now.)
|
||||
*/
|
||||
void ikbd_write(const char *str, int len)
|
||||
{
|
||||
u_char acia_stat;
|
||||
|
||||
if ((len < 1) || (len > 7))
|
||||
panic("ikbd: maximum string length exceeded");
|
||||
while (len) {
|
||||
acia_stat = acia.key_ctrl;
|
||||
if (acia_stat & ACIA_TDRE) {
|
||||
acia.key_data = *str++;
|
||||
len--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Reset (without touching the clock) */
|
||||
void ikbd_reset(void)
|
||||
{
|
||||
static const char cmd[2] = { 0x80, 0x01 };
|
||||
|
||||
ikbd_write(cmd, 2);
|
||||
|
||||
/*
|
||||
* if all's well code 0xF1 is returned, else the break codes of
|
||||
* all keys making contact
|
||||
*/
|
||||
}
|
||||
|
||||
/* Set mouse button action */
|
||||
void ikbd_mouse_button_action(int mode)
|
||||
{
|
||||
char cmd[2] = { 0x07, mode };
|
||||
|
||||
ikbd_write(cmd, 2);
|
||||
}
|
||||
|
||||
/* Set relative mouse position reporting */
|
||||
void ikbd_mouse_rel_pos(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x08 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(ikbd_mouse_rel_pos);
|
||||
|
||||
/* Set absolute mouse position reporting */
|
||||
void ikbd_mouse_abs_pos(int xmax, int ymax)
|
||||
{
|
||||
char cmd[5] = { 0x09, xmax>>8, xmax&0xFF, ymax>>8, ymax&0xFF };
|
||||
|
||||
ikbd_write(cmd, 5);
|
||||
}
|
||||
|
||||
/* Set mouse keycode mode */
|
||||
void ikbd_mouse_kbd_mode(int dx, int dy)
|
||||
{
|
||||
char cmd[3] = { 0x0A, dx, dy };
|
||||
|
||||
ikbd_write(cmd, 3);
|
||||
}
|
||||
|
||||
/* Set mouse threshold */
|
||||
void ikbd_mouse_thresh(int x, int y)
|
||||
{
|
||||
char cmd[3] = { 0x0B, x, y };
|
||||
|
||||
ikbd_write(cmd, 3);
|
||||
}
|
||||
EXPORT_SYMBOL(ikbd_mouse_thresh);
|
||||
|
||||
/* Set mouse scale */
|
||||
void ikbd_mouse_scale(int x, int y)
|
||||
{
|
||||
char cmd[3] = { 0x0C, x, y };
|
||||
|
||||
ikbd_write(cmd, 3);
|
||||
}
|
||||
|
||||
/* Interrogate mouse position */
|
||||
void ikbd_mouse_pos_get(int *x, int *y)
|
||||
{
|
||||
static const char cmd[1] = { 0x0D };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
|
||||
/* wait for returning bytes */
|
||||
}
|
||||
|
||||
/* Load mouse position */
|
||||
void ikbd_mouse_pos_set(int x, int y)
|
||||
{
|
||||
char cmd[6] = { 0x0E, 0x00, x>>8, x&0xFF, y>>8, y&0xFF };
|
||||
|
||||
ikbd_write(cmd, 6);
|
||||
}
|
||||
|
||||
/* Set Y=0 at bottom */
|
||||
void ikbd_mouse_y0_bot(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x0F };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Set Y=0 at top */
|
||||
void ikbd_mouse_y0_top(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x10 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(ikbd_mouse_y0_top);
|
||||
|
||||
/* Resume */
|
||||
void ikbd_resume(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x11 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Disable mouse */
|
||||
void ikbd_mouse_disable(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x12 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(ikbd_mouse_disable);
|
||||
|
||||
/* Pause output */
|
||||
void ikbd_pause(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x13 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Set joystick event reporting */
|
||||
void ikbd_joystick_event_on(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x14 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Set joystick interrogation mode */
|
||||
void ikbd_joystick_event_off(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x15 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Joystick interrogation */
|
||||
void ikbd_joystick_get_state(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x16 };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* This disables all other ikbd activities !!!! */
|
||||
/* Set joystick monitoring */
|
||||
void ikbd_joystick_monitor(int rate)
|
||||
{
|
||||
static const char cmd[2] = { 0x17, rate };
|
||||
|
||||
ikbd_write(cmd, 2);
|
||||
|
||||
kb_state.state = JOYSTICK_MONITOR;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* some joystick routines not in yet (0x18-0x19) */
|
||||
|
||||
/* Disable joysticks */
|
||||
void ikbd_joystick_disable(void)
|
||||
{
|
||||
static const char cmd[1] = { 0x1A };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Time-of-day clock set */
|
||||
void ikbd_clock_set(int year, int month, int day, int hour, int minute, int second)
|
||||
{
|
||||
char cmd[7] = { 0x1B, year, month, day, hour, minute, second };
|
||||
|
||||
ikbd_write(cmd, 7);
|
||||
}
|
||||
|
||||
/* Interrogate time-of-day clock */
|
||||
void ikbd_clock_get(int *year, int *month, int *day, int *hour, int *minute, int second)
|
||||
{
|
||||
static const char cmd[1] = { 0x1C };
|
||||
|
||||
ikbd_write(cmd, 1);
|
||||
}
|
||||
|
||||
/* Memory load */
|
||||
void ikbd_mem_write(int address, int size, char *data)
|
||||
{
|
||||
panic("Attempt to write data into keyboard memory");
|
||||
}
|
||||
|
||||
/* Memory read */
|
||||
void ikbd_mem_read(int address, char data[6])
|
||||
{
|
||||
char cmd[3] = { 0x21, address>>8, address&0xFF };
|
||||
|
||||
ikbd_write(cmd, 3);
|
||||
|
||||
/* receive data and put it in data */
|
||||
}
|
||||
|
||||
/* Controller execute */
|
||||
void ikbd_exec(int address)
|
||||
{
|
||||
char cmd[3] = { 0x22, address>>8, address&0xFF };
|
||||
|
||||
ikbd_write(cmd, 3);
|
||||
}
|
||||
|
||||
/* Status inquiries (0x87-0x9A) not yet implemented */
|
||||
|
||||
/* Set the state of the caps lock led. */
|
||||
void atari_kbd_leds(unsigned int leds)
|
||||
{
|
||||
char cmd[6] = {32, 0, 4, 1, 254 + ((leds & 4) != 0), 0};
|
||||
|
||||
ikbd_write(cmd, 6);
|
||||
}
|
||||
|
||||
/*
|
||||
* The original code sometimes left the interrupt line of
|
||||
* the ACIAs low forever. I hope, it is fixed now.
|
||||
*
|
||||
* Martin Rogge, 20 Aug 1995
|
||||
*/
|
||||
|
||||
static int atari_keyb_done = 0;
|
||||
|
||||
int atari_keyb_init(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (atari_keyb_done)
|
||||
return 0;
|
||||
|
||||
kb_state.state = KEYBOARD;
|
||||
kb_state.len = 0;
|
||||
|
||||
error = request_irq(IRQ_MFP_ACIA, atari_keyboard_interrupt,
|
||||
IRQ_TYPE_SLOW, "keyboard,mouse,MIDI",
|
||||
atari_keyboard_interrupt);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
atari_turnoff_irq(IRQ_MFP_ACIA);
|
||||
do {
|
||||
/* reset IKBD ACIA */
|
||||
acia.key_ctrl = ACIA_RESET |
|
||||
((atari_switches & ATARI_SWITCH_IKBD) ?
|
||||
ACIA_RHTID : 0);
|
||||
(void)acia.key_ctrl;
|
||||
(void)acia.key_data;
|
||||
|
||||
/* reset MIDI ACIA */
|
||||
acia.mid_ctrl = ACIA_RESET |
|
||||
((atari_switches & ATARI_SWITCH_MIDI) ?
|
||||
ACIA_RHTID : 0);
|
||||
(void)acia.mid_ctrl;
|
||||
(void)acia.mid_data;
|
||||
|
||||
/* divide 500kHz by 64 gives 7812.5 baud */
|
||||
/* 8 data no parity 1 start 1 stop bit */
|
||||
/* receive interrupt enabled */
|
||||
/* RTS low (except if switch selected), transmit interrupt disabled */
|
||||
acia.key_ctrl = (ACIA_DIV64|ACIA_D8N1S|ACIA_RIE) |
|
||||
((atari_switches & ATARI_SWITCH_IKBD) ?
|
||||
ACIA_RHTID : ACIA_RLTID);
|
||||
|
||||
acia.mid_ctrl = ACIA_DIV16 | ACIA_D8N1S |
|
||||
((atari_switches & ATARI_SWITCH_MIDI) ?
|
||||
ACIA_RHTID : 0);
|
||||
|
||||
/* make sure the interrupt line is up */
|
||||
} while ((st_mfp.par_dt_reg & 0x10) == 0);
|
||||
|
||||
/* enable ACIA Interrupts */
|
||||
st_mfp.active_edge &= ~0x10;
|
||||
atari_turnon_irq(IRQ_MFP_ACIA);
|
||||
|
||||
ikbd_self_test = 1;
|
||||
ikbd_reset();
|
||||
/* wait for a period of inactivity (here: 0.25s), then assume the IKBD's
|
||||
* self-test is finished */
|
||||
self_test_last_rcv = jiffies;
|
||||
while (time_before(jiffies, self_test_last_rcv + HZ/4))
|
||||
barrier();
|
||||
/* if not incremented: no 0xf1 received */
|
||||
if (ikbd_self_test == 1)
|
||||
printk(KERN_ERR "WARNING: keyboard self test failed!\n");
|
||||
ikbd_self_test = 0;
|
||||
|
||||
ikbd_mouse_disable();
|
||||
ikbd_joystick_disable();
|
||||
|
||||
#ifdef FIXED_ATARI_JOYSTICK
|
||||
atari_joystick_init();
|
||||
#endif
|
||||
|
||||
// flag init done
|
||||
atari_keyb_done = 1;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(atari_keyb_init);
|
||||
110
arch/m68k/atari/atasound.c
Normal file
110
arch/m68k/atari/atasound.c
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* linux/arch/m68k/atari/atasound.c
|
||||
*
|
||||
* ++Geert: Moved almost all stuff to linux/drivers/sound/
|
||||
*
|
||||
* The author of atari_nosound, atari_mksound and atari_microwire_cmd is
|
||||
* unknown. (++roman: That's me... :-)
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* 1998-05-31 ++andreas: atari_mksound rewritten to always use the envelope,
|
||||
* no timer, atari_nosound removed.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/atariints.h>
|
||||
|
||||
|
||||
/*
|
||||
* stuff from the old atasound.c
|
||||
*/
|
||||
|
||||
void atari_microwire_cmd (int cmd)
|
||||
{
|
||||
tt_microwire.mask = 0x7ff;
|
||||
tt_microwire.data = MW_LM1992_ADDR | cmd;
|
||||
|
||||
/* Busy wait for data being completely sent :-( */
|
||||
while( tt_microwire.mask != 0x7ff)
|
||||
;
|
||||
}
|
||||
EXPORT_SYMBOL(atari_microwire_cmd);
|
||||
|
||||
|
||||
/* PSG base frequency */
|
||||
#define PSG_FREQ 125000
|
||||
/* PSG envelope base frequency times 10 */
|
||||
#define PSG_ENV_FREQ_10 78125
|
||||
|
||||
void atari_mksound (unsigned int hz, unsigned int ticks)
|
||||
{
|
||||
/* Generates sound of some frequency for some number of clock
|
||||
ticks. */
|
||||
unsigned long flags;
|
||||
unsigned char tmp;
|
||||
int period;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
|
||||
/* Disable generator A in mixer control. */
|
||||
sound_ym.rd_data_reg_sel = 7;
|
||||
tmp = sound_ym.rd_data_reg_sel;
|
||||
tmp |= 011;
|
||||
sound_ym.wd_data = tmp;
|
||||
|
||||
if (hz) {
|
||||
/* Convert from frequency value to PSG period value (base
|
||||
frequency 125 kHz). */
|
||||
|
||||
period = PSG_FREQ / hz;
|
||||
|
||||
if (period > 0xfff) period = 0xfff;
|
||||
|
||||
/* Set generator A frequency to hz. */
|
||||
sound_ym.rd_data_reg_sel = 0;
|
||||
sound_ym.wd_data = period & 0xff;
|
||||
sound_ym.rd_data_reg_sel = 1;
|
||||
sound_ym.wd_data = (period >> 8) & 0xf;
|
||||
if (ticks) {
|
||||
/* Set length of envelope (max 8 sec). */
|
||||
int length = (ticks * PSG_ENV_FREQ_10) / HZ / 10;
|
||||
|
||||
if (length > 0xffff) length = 0xffff;
|
||||
sound_ym.rd_data_reg_sel = 11;
|
||||
sound_ym.wd_data = length & 0xff;
|
||||
sound_ym.rd_data_reg_sel = 12;
|
||||
sound_ym.wd_data = length >> 8;
|
||||
/* Envelope form: max -> min single. */
|
||||
sound_ym.rd_data_reg_sel = 13;
|
||||
sound_ym.wd_data = 0;
|
||||
/* Use envelope for generator A. */
|
||||
sound_ym.rd_data_reg_sel = 8;
|
||||
sound_ym.wd_data = 0x10;
|
||||
} else {
|
||||
/* Set generator A level to maximum, no envelope. */
|
||||
sound_ym.rd_data_reg_sel = 8;
|
||||
sound_ym.wd_data = 15;
|
||||
}
|
||||
/* Turn on generator A in mixer control. */
|
||||
sound_ym.rd_data_reg_sel = 7;
|
||||
tmp &= ~1;
|
||||
sound_ym.wd_data = tmp;
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
898
arch/m68k/atari/config.c
Normal file
898
arch/m68k/atari/config.c
Normal file
|
|
@ -0,0 +1,898 @@
|
|||
/*
|
||||
* linux/arch/m68k/atari/config.c
|
||||
*
|
||||
* Copyright (C) 1994 Bjoern Brauel
|
||||
*
|
||||
* 5/2/94 Roman Hodek:
|
||||
* Added setting of time_adj to get a better clock.
|
||||
*
|
||||
* 5/14/94 Roman Hodek:
|
||||
* gettod() for TT
|
||||
*
|
||||
* 5/15/94 Roman Hodek:
|
||||
* hard_reset_now() for Atari (and others?)
|
||||
*
|
||||
* 94/12/30 Andreas Schwab:
|
||||
* atari_sched_init fixed to get precise clock.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Miscellaneous atari stuff
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/usb/isp116x.h>
|
||||
#include <linux/vt_kern.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/bootinfo-atari.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atariints.h>
|
||||
#include <asm/atari_stram.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/hwtest.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
u_long atari_mch_cookie;
|
||||
EXPORT_SYMBOL(atari_mch_cookie);
|
||||
|
||||
u_long atari_mch_type;
|
||||
EXPORT_SYMBOL(atari_mch_type);
|
||||
|
||||
struct atari_hw_present atari_hw_present;
|
||||
EXPORT_SYMBOL(atari_hw_present);
|
||||
|
||||
u_long atari_switches;
|
||||
EXPORT_SYMBOL(atari_switches);
|
||||
|
||||
int atari_dont_touch_floppy_select;
|
||||
EXPORT_SYMBOL(atari_dont_touch_floppy_select);
|
||||
|
||||
int atari_rtc_year_offset;
|
||||
|
||||
/* local function prototypes */
|
||||
static void atari_reset(void);
|
||||
static void atari_get_model(char *model);
|
||||
static void atari_get_hardware_list(struct seq_file *m);
|
||||
|
||||
/* atari specific irq functions */
|
||||
extern void atari_init_IRQ (void);
|
||||
extern void atari_mksound(unsigned int count, unsigned int ticks);
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void atari_heartbeat(int on);
|
||||
#endif
|
||||
|
||||
/* atari specific timer functions (in time.c) */
|
||||
extern void atari_sched_init(irq_handler_t);
|
||||
extern u32 atari_gettimeoffset(void);
|
||||
extern int atari_mste_hwclk (int, struct rtc_time *);
|
||||
extern int atari_tt_hwclk (int, struct rtc_time *);
|
||||
extern int atari_mste_set_clock_mmss (unsigned long);
|
||||
extern int atari_tt_set_clock_mmss (unsigned long);
|
||||
|
||||
|
||||
/* ++roman: This is a more elaborate test for an SCC chip, since the plain
|
||||
* Medusa board generates DTACK at the SCC's standard addresses, but a SCC
|
||||
* board in the Medusa is possible. Also, the addresses where the ST_ESCC
|
||||
* resides generate DTACK without the chip, too.
|
||||
* The method is to write values into the interrupt vector register, that
|
||||
* should be readable without trouble (from channel A!).
|
||||
*/
|
||||
|
||||
static int __init scc_test(volatile char *ctla)
|
||||
{
|
||||
if (!hwreg_present(ctla))
|
||||
return 0;
|
||||
MFPDELAY();
|
||||
|
||||
*ctla = 2;
|
||||
MFPDELAY();
|
||||
*ctla = 0x40;
|
||||
MFPDELAY();
|
||||
|
||||
*ctla = 2;
|
||||
MFPDELAY();
|
||||
if (*ctla != 0x40)
|
||||
return 0;
|
||||
MFPDELAY();
|
||||
|
||||
*ctla = 2;
|
||||
MFPDELAY();
|
||||
*ctla = 0x60;
|
||||
MFPDELAY();
|
||||
|
||||
*ctla = 2;
|
||||
MFPDELAY();
|
||||
if (*ctla != 0x60)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse an Atari-specific record in the bootinfo
|
||||
*/
|
||||
|
||||
int __init atari_parse_bootinfo(const struct bi_record *record)
|
||||
{
|
||||
int unknown = 0;
|
||||
const void *data = record->data;
|
||||
|
||||
switch (be16_to_cpu(record->tag)) {
|
||||
case BI_ATARI_MCH_COOKIE:
|
||||
atari_mch_cookie = be32_to_cpup(data);
|
||||
break;
|
||||
case BI_ATARI_MCH_TYPE:
|
||||
atari_mch_type = be32_to_cpup(data);
|
||||
break;
|
||||
default:
|
||||
unknown = 1;
|
||||
break;
|
||||
}
|
||||
return unknown;
|
||||
}
|
||||
|
||||
|
||||
/* Parse the Atari-specific switches= option. */
|
||||
static int __init atari_switches_setup(char *str)
|
||||
{
|
||||
char switches[strlen(str) + 1];
|
||||
char *p;
|
||||
int ovsc_shift;
|
||||
char *args = switches;
|
||||
|
||||
if (!MACH_IS_ATARI)
|
||||
return 0;
|
||||
|
||||
/* copy string to local array, strsep works destructively... */
|
||||
strcpy(switches, str);
|
||||
atari_switches = 0;
|
||||
|
||||
/* parse the options */
|
||||
while ((p = strsep(&args, ",")) != NULL) {
|
||||
if (!*p)
|
||||
continue;
|
||||
ovsc_shift = 0;
|
||||
if (strncmp(p, "ov_", 3) == 0) {
|
||||
p += 3;
|
||||
ovsc_shift = ATARI_SWITCH_OVSC_SHIFT;
|
||||
}
|
||||
|
||||
if (strcmp(p, "ikbd") == 0) {
|
||||
/* RTS line of IKBD ACIA */
|
||||
atari_switches |= ATARI_SWITCH_IKBD << ovsc_shift;
|
||||
} else if (strcmp(p, "midi") == 0) {
|
||||
/* RTS line of MIDI ACIA */
|
||||
atari_switches |= ATARI_SWITCH_MIDI << ovsc_shift;
|
||||
} else if (strcmp(p, "snd6") == 0) {
|
||||
atari_switches |= ATARI_SWITCH_SND6 << ovsc_shift;
|
||||
} else if (strcmp(p, "snd7") == 0) {
|
||||
atari_switches |= ATARI_SWITCH_SND7 << ovsc_shift;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("switches", atari_switches_setup);
|
||||
|
||||
|
||||
/*
|
||||
* Setup the Atari configuration info
|
||||
*/
|
||||
|
||||
void __init config_atari(void)
|
||||
{
|
||||
unsigned short tos_version;
|
||||
|
||||
memset(&atari_hw_present, 0, sizeof(atari_hw_present));
|
||||
|
||||
/* Change size of I/O space from 64KB to 4GB. */
|
||||
ioport_resource.end = 0xFFFFFFFF;
|
||||
|
||||
mach_sched_init = atari_sched_init;
|
||||
mach_init_IRQ = atari_init_IRQ;
|
||||
mach_get_model = atari_get_model;
|
||||
mach_get_hardware_list = atari_get_hardware_list;
|
||||
arch_gettimeoffset = atari_gettimeoffset;
|
||||
mach_reset = atari_reset;
|
||||
mach_max_dma_address = 0xffffff;
|
||||
#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE)
|
||||
mach_beep = atari_mksound;
|
||||
#endif
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
mach_heartbeat = atari_heartbeat;
|
||||
#endif
|
||||
|
||||
/* Set switches as requested by the user */
|
||||
if (atari_switches & ATARI_SWITCH_IKBD)
|
||||
acia.key_ctrl = ACIA_DIV64 | ACIA_D8N1S | ACIA_RHTID;
|
||||
if (atari_switches & ATARI_SWITCH_MIDI)
|
||||
acia.mid_ctrl = ACIA_DIV16 | ACIA_D8N1S | ACIA_RHTID;
|
||||
if (atari_switches & (ATARI_SWITCH_SND6|ATARI_SWITCH_SND7)) {
|
||||
sound_ym.rd_data_reg_sel = 14;
|
||||
sound_ym.wd_data = sound_ym.rd_data_reg_sel |
|
||||
((atari_switches&ATARI_SWITCH_SND6) ? 0x40 : 0) |
|
||||
((atari_switches&ATARI_SWITCH_SND7) ? 0x80 : 0);
|
||||
}
|
||||
|
||||
/* ++bjoern:
|
||||
* Determine hardware present
|
||||
*/
|
||||
|
||||
printk("Atari hardware found: ");
|
||||
if (MACH_IS_MEDUSA) {
|
||||
/* There's no Atari video hardware on the Medusa, but all the
|
||||
* addresses below generate a DTACK so no bus error occurs! */
|
||||
} else if (hwreg_present(f030_xreg)) {
|
||||
ATARIHW_SET(VIDEL_SHIFTER);
|
||||
printk("VIDEL ");
|
||||
/* This is a temporary hack: If there is Falcon video
|
||||
* hardware, we assume that the ST-DMA serves SCSI instead of
|
||||
* ACSI. In the future, there should be a better method for
|
||||
* this...
|
||||
*/
|
||||
ATARIHW_SET(ST_SCSI);
|
||||
printk("STDMA-SCSI ");
|
||||
} else if (hwreg_present(tt_palette)) {
|
||||
ATARIHW_SET(TT_SHIFTER);
|
||||
printk("TT_SHIFTER ");
|
||||
} else if (hwreg_present(&shifter.bas_hi)) {
|
||||
if (hwreg_present(&shifter.bas_lo) &&
|
||||
(shifter.bas_lo = 0x0aau, shifter.bas_lo == 0x0aau)) {
|
||||
ATARIHW_SET(EXTD_SHIFTER);
|
||||
printk("EXTD_SHIFTER ");
|
||||
} else {
|
||||
ATARIHW_SET(STND_SHIFTER);
|
||||
printk("STND_SHIFTER ");
|
||||
}
|
||||
}
|
||||
if (hwreg_present(&st_mfp.par_dt_reg)) {
|
||||
ATARIHW_SET(ST_MFP);
|
||||
printk("ST_MFP ");
|
||||
}
|
||||
if (hwreg_present(&tt_mfp.par_dt_reg)) {
|
||||
ATARIHW_SET(TT_MFP);
|
||||
printk("TT_MFP ");
|
||||
}
|
||||
if (hwreg_present(&tt_scsi_dma.dma_addr_hi)) {
|
||||
ATARIHW_SET(SCSI_DMA);
|
||||
printk("TT_SCSI_DMA ");
|
||||
}
|
||||
/*
|
||||
* The ST-DMA address registers aren't readable
|
||||
* on all Medusas, so the test below may fail
|
||||
*/
|
||||
if (MACH_IS_MEDUSA ||
|
||||
(hwreg_present(&st_dma.dma_vhi) &&
|
||||
(st_dma.dma_vhi = 0x55) && (st_dma.dma_hi = 0xaa) &&
|
||||
st_dma.dma_vhi == 0x55 && st_dma.dma_hi == 0xaa &&
|
||||
(st_dma.dma_vhi = 0xaa) && (st_dma.dma_hi = 0x55) &&
|
||||
st_dma.dma_vhi == 0xaa && st_dma.dma_hi == 0x55)) {
|
||||
ATARIHW_SET(EXTD_DMA);
|
||||
printk("EXTD_DMA ");
|
||||
}
|
||||
if (hwreg_present(&tt_scsi.scsi_data)) {
|
||||
ATARIHW_SET(TT_SCSI);
|
||||
printk("TT_SCSI ");
|
||||
}
|
||||
if (hwreg_present(&sound_ym.rd_data_reg_sel)) {
|
||||
ATARIHW_SET(YM_2149);
|
||||
printk("YM2149 ");
|
||||
}
|
||||
if (!MACH_IS_MEDUSA && hwreg_present(&tt_dmasnd.ctrl)) {
|
||||
ATARIHW_SET(PCM_8BIT);
|
||||
printk("PCM ");
|
||||
}
|
||||
if (hwreg_present(&falcon_codec.unused5)) {
|
||||
ATARIHW_SET(CODEC);
|
||||
printk("CODEC ");
|
||||
}
|
||||
if (hwreg_present(&dsp56k_host_interface.icr)) {
|
||||
ATARIHW_SET(DSP56K);
|
||||
printk("DSP56K ");
|
||||
}
|
||||
if (hwreg_present(&tt_scc_dma.dma_ctrl) &&
|
||||
#if 0
|
||||
/* This test sucks! Who knows some better? */
|
||||
(tt_scc_dma.dma_ctrl = 0x01, (tt_scc_dma.dma_ctrl & 1) == 1) &&
|
||||
(tt_scc_dma.dma_ctrl = 0x00, (tt_scc_dma.dma_ctrl & 1) == 0)
|
||||
#else
|
||||
!MACH_IS_MEDUSA
|
||||
#endif
|
||||
) {
|
||||
ATARIHW_SET(SCC_DMA);
|
||||
printk("SCC_DMA ");
|
||||
}
|
||||
if (scc_test(&atari_scc.cha_a_ctrl)) {
|
||||
ATARIHW_SET(SCC);
|
||||
printk("SCC ");
|
||||
}
|
||||
if (scc_test(&st_escc.cha_b_ctrl)) {
|
||||
ATARIHW_SET(ST_ESCC);
|
||||
printk("ST_ESCC ");
|
||||
}
|
||||
if (hwreg_present(&tt_scu.sys_mask)) {
|
||||
ATARIHW_SET(SCU);
|
||||
/* Assume a VME bus if there's a SCU */
|
||||
ATARIHW_SET(VME);
|
||||
printk("VME SCU ");
|
||||
}
|
||||
if (hwreg_present((void *)(0xffff9210))) {
|
||||
ATARIHW_SET(ANALOG_JOY);
|
||||
printk("ANALOG_JOY ");
|
||||
}
|
||||
if (hwreg_present(blitter.halftone)) {
|
||||
ATARIHW_SET(BLITTER);
|
||||
printk("BLITTER ");
|
||||
}
|
||||
if (hwreg_present((void *)0xfff00039)) {
|
||||
ATARIHW_SET(IDE);
|
||||
printk("IDE ");
|
||||
}
|
||||
#if 1 /* This maybe wrong */
|
||||
if (!MACH_IS_MEDUSA && hwreg_present(&tt_microwire.data) &&
|
||||
hwreg_present(&tt_microwire.mask) &&
|
||||
(tt_microwire.mask = 0x7ff,
|
||||
udelay(1),
|
||||
tt_microwire.data = MW_LM1992_PSG_HIGH | MW_LM1992_ADDR,
|
||||
udelay(1),
|
||||
tt_microwire.data != 0)) {
|
||||
ATARIHW_SET(MICROWIRE);
|
||||
while (tt_microwire.mask != 0x7ff)
|
||||
;
|
||||
printk("MICROWIRE ");
|
||||
}
|
||||
#endif
|
||||
if (hwreg_present(&tt_rtc.regsel)) {
|
||||
ATARIHW_SET(TT_CLK);
|
||||
printk("TT_CLK ");
|
||||
mach_hwclk = atari_tt_hwclk;
|
||||
mach_set_clock_mmss = atari_tt_set_clock_mmss;
|
||||
}
|
||||
if (hwreg_present(&mste_rtc.sec_ones)) {
|
||||
ATARIHW_SET(MSTE_CLK);
|
||||
printk("MSTE_CLK ");
|
||||
mach_hwclk = atari_mste_hwclk;
|
||||
mach_set_clock_mmss = atari_mste_set_clock_mmss;
|
||||
}
|
||||
if (!MACH_IS_MEDUSA && hwreg_present(&dma_wd.fdc_speed) &&
|
||||
hwreg_write(&dma_wd.fdc_speed, 0)) {
|
||||
ATARIHW_SET(FDCSPEED);
|
||||
printk("FDC_SPEED ");
|
||||
}
|
||||
if (!ATARIHW_PRESENT(ST_SCSI)) {
|
||||
ATARIHW_SET(ACSI);
|
||||
printk("ACSI ");
|
||||
}
|
||||
printk("\n");
|
||||
|
||||
if (CPU_IS_040_OR_060)
|
||||
/* Now it seems to be safe to turn of the tt0 transparent
|
||||
* translation (the one that must not be turned off in
|
||||
* head.S...)
|
||||
*/
|
||||
asm volatile ("\n"
|
||||
" moveq #0,%%d0\n"
|
||||
" .chip 68040\n"
|
||||
" movec %%d0,%%itt0\n"
|
||||
" movec %%d0,%%dtt0\n"
|
||||
" .chip 68k"
|
||||
: /* no outputs */
|
||||
: /* no inputs */
|
||||
: "d0");
|
||||
|
||||
/* allocator for memory that must reside in st-ram */
|
||||
atari_stram_init();
|
||||
|
||||
/* Set up a mapping for the VMEbus address region:
|
||||
*
|
||||
* VME is either at phys. 0xfexxxxxx (TT) or 0xa00000..0xdfffff
|
||||
* (MegaSTE) In both cases, the whole 16 MB chunk is mapped at
|
||||
* 0xfe000000 virt., because this can be done with a single
|
||||
* transparent translation. On the 68040, lots of often unused
|
||||
* page tables would be needed otherwise. On a MegaSTE or similar,
|
||||
* the highest byte is stripped off by hardware due to the 24 bit
|
||||
* design of the bus.
|
||||
*/
|
||||
|
||||
if (CPU_IS_020_OR_030) {
|
||||
unsigned long tt1_val;
|
||||
tt1_val = 0xfe008543; /* Translate 0xfexxxxxx, enable, cache
|
||||
* inhibit, read and write, FDC mask = 3,
|
||||
* FDC val = 4 -> Supervisor only */
|
||||
asm volatile ("\n"
|
||||
" .chip 68030\n"
|
||||
" pmove %0,%/tt1\n"
|
||||
" .chip 68k"
|
||||
: : "m" (tt1_val));
|
||||
} else {
|
||||
asm volatile ("\n"
|
||||
" .chip 68040\n"
|
||||
" movec %0,%%itt1\n"
|
||||
" movec %0,%%dtt1\n"
|
||||
" .chip 68k"
|
||||
:
|
||||
: "d" (0xfe00a040)); /* Translate 0xfexxxxxx, enable,
|
||||
* supervisor only, non-cacheable/
|
||||
* serialized, writable */
|
||||
|
||||
}
|
||||
|
||||
/* Fetch tos version at Physical 2 */
|
||||
/*
|
||||
* We my not be able to access this address if the kernel is
|
||||
* loaded to st ram, since the first page is unmapped. On the
|
||||
* Medusa this is always the case and there is nothing we can do
|
||||
* about this, so we just assume the smaller offset. For the TT
|
||||
* we use the fact that in head.S we have set up a mapping
|
||||
* 0xFFxxxxxx -> 0x00xxxxxx, so that the first 16MB is accessible
|
||||
* in the last 16MB of the address space.
|
||||
*/
|
||||
tos_version = (MACH_IS_MEDUSA) ?
|
||||
0xfff : *(unsigned short *)0xff000002;
|
||||
atari_rtc_year_offset = (tos_version < 0x306) ? 70 : 68;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void atari_heartbeat(int on)
|
||||
{
|
||||
unsigned char tmp;
|
||||
unsigned long flags;
|
||||
|
||||
if (atari_dont_touch_floppy_select)
|
||||
return;
|
||||
|
||||
local_irq_save(flags);
|
||||
sound_ym.rd_data_reg_sel = 14; /* Select PSG Port A */
|
||||
tmp = sound_ym.rd_data_reg_sel;
|
||||
sound_ym.wd_data = on ? (tmp & ~0x02) : (tmp | 0x02);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* ++roman:
|
||||
*
|
||||
* This function does a reset on machines that lack the ability to
|
||||
* assert the processor's _RESET signal somehow via hardware. It is
|
||||
* based on the fact that you can find the initial SP and PC values
|
||||
* after a reset at physical addresses 0 and 4. This works pretty well
|
||||
* for Atari machines, since the lowest 8 bytes of physical memory are
|
||||
* really ROM (mapped by hardware). For other 680x0 machines: don't
|
||||
* know if it works...
|
||||
*
|
||||
* To get the values at addresses 0 and 4, the MMU better is turned
|
||||
* off first. After that, we have to jump into physical address space
|
||||
* (the PC before the pmove statement points to the virtual address of
|
||||
* the code). Getting that physical address is not hard, but the code
|
||||
* becomes a bit complex since I've tried to ensure that the jump
|
||||
* statement after the pmove is in the cache already (otherwise the
|
||||
* processor can't fetch it!). For that, the code first jumps to the
|
||||
* jump statement with the (virtual) address of the pmove section in
|
||||
* an address register . The jump statement is surely in the cache
|
||||
* now. After that, that physical address of the reset code is loaded
|
||||
* into the same address register, pmove is done and the same jump
|
||||
* statements goes to the reset code. Since there are not many
|
||||
* statements between the two jumps, I hope it stays in the cache.
|
||||
*
|
||||
* The C code makes heavy use of the GCC features that you can get the
|
||||
* address of a C label. No hope to compile this with another compiler
|
||||
* than GCC!
|
||||
*/
|
||||
|
||||
/* ++andreas: no need for complicated code, just depend on prefetch */
|
||||
|
||||
static void atari_reset(void)
|
||||
{
|
||||
long tc_val = 0;
|
||||
long reset_addr;
|
||||
|
||||
/*
|
||||
* On the Medusa, phys. 0x4 may contain garbage because it's no
|
||||
* ROM. See above for explanation why we cannot use PTOV(4).
|
||||
*/
|
||||
reset_addr = MACH_IS_MEDUSA || MACH_IS_AB40 ? 0xe00030 :
|
||||
*(unsigned long *) 0xff000004;
|
||||
|
||||
/* reset ACIA for switch off OverScan, if it's active */
|
||||
if (atari_switches & ATARI_SWITCH_OVSC_IKBD)
|
||||
acia.key_ctrl = ACIA_RESET;
|
||||
if (atari_switches & ATARI_SWITCH_OVSC_MIDI)
|
||||
acia.mid_ctrl = ACIA_RESET;
|
||||
|
||||
/* processor independent: turn off interrupts and reset the VBR;
|
||||
* the caches must be left enabled, else prefetching the final jump
|
||||
* instruction doesn't work.
|
||||
*/
|
||||
local_irq_disable();
|
||||
asm volatile ("movec %0,%%vbr"
|
||||
: : "d" (0));
|
||||
|
||||
if (CPU_IS_040_OR_060) {
|
||||
unsigned long jmp_addr040 = virt_to_phys(&&jmp_addr_label040);
|
||||
if (CPU_IS_060) {
|
||||
/* 68060: clear PCR to turn off superscalar operation */
|
||||
asm volatile ("\n"
|
||||
" .chip 68060\n"
|
||||
" movec %0,%%pcr\n"
|
||||
" .chip 68k"
|
||||
: : "d" (0));
|
||||
}
|
||||
|
||||
asm volatile ("\n"
|
||||
" move.l %0,%%d0\n"
|
||||
" and.l #0xff000000,%%d0\n"
|
||||
" or.w #0xe020,%%d0\n" /* map 16 MB, enable, cacheable */
|
||||
" .chip 68040\n"
|
||||
" movec %%d0,%%itt0\n"
|
||||
" movec %%d0,%%dtt0\n"
|
||||
" .chip 68k\n"
|
||||
" jmp %0@"
|
||||
: : "a" (jmp_addr040)
|
||||
: "d0");
|
||||
jmp_addr_label040:
|
||||
asm volatile ("\n"
|
||||
" moveq #0,%%d0\n"
|
||||
" nop\n"
|
||||
" .chip 68040\n"
|
||||
" cinva %%bc\n"
|
||||
" nop\n"
|
||||
" pflusha\n"
|
||||
" nop\n"
|
||||
" movec %%d0,%%tc\n"
|
||||
" nop\n"
|
||||
/* the following setup of transparent translations is needed on the
|
||||
* Afterburner040 to successfully reboot. Other machines shouldn't
|
||||
* care about a different tt regs setup, they also didn't care in
|
||||
* the past that the regs weren't turned off. */
|
||||
" move.l #0xffc000,%%d0\n" /* whole insn space cacheable */
|
||||
" movec %%d0,%%itt0\n"
|
||||
" movec %%d0,%%itt1\n"
|
||||
" or.w #0x40,%/d0\n" /* whole data space non-cacheable/ser. */
|
||||
" movec %%d0,%%dtt0\n"
|
||||
" movec %%d0,%%dtt1\n"
|
||||
" .chip 68k\n"
|
||||
" jmp %0@"
|
||||
: /* no outputs */
|
||||
: "a" (reset_addr)
|
||||
: "d0");
|
||||
} else
|
||||
asm volatile ("\n"
|
||||
" pmove %0,%%tc\n"
|
||||
" jmp %1@"
|
||||
: /* no outputs */
|
||||
: "m" (tc_val), "a" (reset_addr));
|
||||
}
|
||||
|
||||
|
||||
static void atari_get_model(char *model)
|
||||
{
|
||||
strcpy(model, "Atari ");
|
||||
switch (atari_mch_cookie >> 16) {
|
||||
case ATARI_MCH_ST:
|
||||
if (ATARIHW_PRESENT(MSTE_CLK))
|
||||
strcat(model, "Mega ST");
|
||||
else
|
||||
strcat(model, "ST");
|
||||
break;
|
||||
case ATARI_MCH_STE:
|
||||
if (MACH_IS_MSTE)
|
||||
strcat(model, "Mega STE");
|
||||
else
|
||||
strcat(model, "STE");
|
||||
break;
|
||||
case ATARI_MCH_TT:
|
||||
if (MACH_IS_MEDUSA)
|
||||
/* Medusa has TT _MCH cookie */
|
||||
strcat(model, "Medusa");
|
||||
else
|
||||
strcat(model, "TT");
|
||||
break;
|
||||
case ATARI_MCH_FALCON:
|
||||
strcat(model, "Falcon");
|
||||
if (MACH_IS_AB40)
|
||||
strcat(model, " (with Afterburner040)");
|
||||
break;
|
||||
default:
|
||||
sprintf(model + strlen(model), "(unknown mach cookie 0x%lx)",
|
||||
atari_mch_cookie);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void atari_get_hardware_list(struct seq_file *m)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < m68k_num_memory; i++)
|
||||
seq_printf(m, "\t%3ld MB at 0x%08lx (%s)\n",
|
||||
m68k_memory[i].size >> 20, m68k_memory[i].addr,
|
||||
(m68k_memory[i].addr & 0xff000000 ?
|
||||
"alternate RAM" : "ST-RAM"));
|
||||
|
||||
#define ATARIHW_ANNOUNCE(name, str) \
|
||||
if (ATARIHW_PRESENT(name)) \
|
||||
seq_printf(m, "\t%s\n", str)
|
||||
|
||||
seq_printf(m, "Detected hardware:\n");
|
||||
ATARIHW_ANNOUNCE(STND_SHIFTER, "ST Shifter");
|
||||
ATARIHW_ANNOUNCE(EXTD_SHIFTER, "STe Shifter");
|
||||
ATARIHW_ANNOUNCE(TT_SHIFTER, "TT Shifter");
|
||||
ATARIHW_ANNOUNCE(VIDEL_SHIFTER, "Falcon Shifter");
|
||||
ATARIHW_ANNOUNCE(YM_2149, "Programmable Sound Generator");
|
||||
ATARIHW_ANNOUNCE(PCM_8BIT, "PCM 8 Bit Sound");
|
||||
ATARIHW_ANNOUNCE(CODEC, "CODEC Sound");
|
||||
ATARIHW_ANNOUNCE(TT_SCSI, "SCSI Controller NCR5380 (TT style)");
|
||||
ATARIHW_ANNOUNCE(ST_SCSI, "SCSI Controller NCR5380 (Falcon style)");
|
||||
ATARIHW_ANNOUNCE(ACSI, "ACSI Interface");
|
||||
ATARIHW_ANNOUNCE(IDE, "IDE Interface");
|
||||
ATARIHW_ANNOUNCE(FDCSPEED, "8/16 Mhz Switch for FDC");
|
||||
ATARIHW_ANNOUNCE(ST_MFP, "Multi Function Peripheral MFP 68901");
|
||||
ATARIHW_ANNOUNCE(TT_MFP, "Second Multi Function Peripheral MFP 68901");
|
||||
ATARIHW_ANNOUNCE(SCC, "Serial Communications Controller SCC 8530");
|
||||
ATARIHW_ANNOUNCE(ST_ESCC, "Extended Serial Communications Controller SCC 85230");
|
||||
ATARIHW_ANNOUNCE(ANALOG_JOY, "Paddle Interface");
|
||||
ATARIHW_ANNOUNCE(MICROWIRE, "MICROWIRE(tm) Interface");
|
||||
ATARIHW_ANNOUNCE(STND_DMA, "DMA Controller (24 bit)");
|
||||
ATARIHW_ANNOUNCE(EXTD_DMA, "DMA Controller (32 bit)");
|
||||
ATARIHW_ANNOUNCE(SCSI_DMA, "DMA Controller for NCR5380");
|
||||
ATARIHW_ANNOUNCE(SCC_DMA, "DMA Controller for SCC");
|
||||
ATARIHW_ANNOUNCE(TT_CLK, "Clock Chip MC146818A");
|
||||
ATARIHW_ANNOUNCE(MSTE_CLK, "Clock Chip RP5C15");
|
||||
ATARIHW_ANNOUNCE(SCU, "System Control Unit");
|
||||
ATARIHW_ANNOUNCE(BLITTER, "Blitter");
|
||||
ATARIHW_ANNOUNCE(VME, "VME Bus");
|
||||
ATARIHW_ANNOUNCE(DSP56K, "DSP56001 processor");
|
||||
}
|
||||
|
||||
/*
|
||||
* MSch: initial platform device support for Atari,
|
||||
* required for EtherNAT/EtherNEC/NetUSBee drivers
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ATARI_ETHERNAT) || defined(CONFIG_ATARI_ETHERNEC)
|
||||
static void isp1160_delay(struct device *dev, int delay)
|
||||
{
|
||||
ndelay(delay);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ATARI_ETHERNAT
|
||||
/*
|
||||
* EtherNAT: SMC91C111 Ethernet chipset, handled by smc91x driver
|
||||
*/
|
||||
|
||||
#define ATARI_ETHERNAT_IRQ 140
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.name = "smc91x-regs",
|
||||
.start = ATARI_ETHERNAT_PHYS_ADDR,
|
||||
.end = ATARI_ETHERNAT_PHYS_ADDR + 0xfffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.name = "smc91x-irq",
|
||||
.start = ATARI_ETHERNAT_IRQ,
|
||||
.end = ATARI_ETHERNAT_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* ISP 1160 - using the isp116x-hcd module
|
||||
*/
|
||||
|
||||
#define ATARI_USB_PHYS_ADDR 0x80000012
|
||||
#define ATARI_USB_IRQ 139
|
||||
|
||||
static struct resource isp1160_resources[] = {
|
||||
[0] = {
|
||||
.name = "isp1160-data",
|
||||
.start = ATARI_USB_PHYS_ADDR,
|
||||
.end = ATARI_USB_PHYS_ADDR + 0x1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.name = "isp1160-regs",
|
||||
.start = ATARI_USB_PHYS_ADDR + 0x4,
|
||||
.end = ATARI_USB_PHYS_ADDR + 0x5,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.name = "isp1160-irq",
|
||||
.start = ATARI_USB_IRQ,
|
||||
.end = ATARI_USB_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
/* (DataBusWidth16|AnalogOCEnable|DREQOutputPolarity|DownstreamPort15KRSel ) */
|
||||
static struct isp116x_platform_data isp1160_platform_data = {
|
||||
/* Enable internal resistors on downstream ports */
|
||||
.sel15Kres = 1,
|
||||
/* On-chip overcurrent protection */
|
||||
.oc_enable = 1,
|
||||
/* INT output polarity */
|
||||
.int_act_high = 1,
|
||||
/* INT edge or level triggered */
|
||||
.int_edge_triggered = 0,
|
||||
|
||||
/* WAKEUP pin connected - NOT SUPPORTED */
|
||||
/* .remote_wakeup_connected = 0, */
|
||||
/* Wakeup by devices on usb bus enabled */
|
||||
.remote_wakeup_enable = 0,
|
||||
.delay = isp1160_delay,
|
||||
};
|
||||
|
||||
static struct platform_device isp1160_device = {
|
||||
.name = "isp116x-hcd",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(isp1160_resources),
|
||||
.resource = isp1160_resources,
|
||||
.dev = {
|
||||
.platform_data = &isp1160_platform_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *atari_ethernat_devices[] __initdata = {
|
||||
&smc91x_device,
|
||||
&isp1160_device
|
||||
};
|
||||
#endif /* CONFIG_ATARI_ETHERNAT */
|
||||
|
||||
#ifdef CONFIG_ATARI_ETHERNEC
|
||||
/*
|
||||
* EtherNEC: RTL8019 (NE2000 compatible) Ethernet chipset,
|
||||
* handled by ne.c driver
|
||||
*/
|
||||
|
||||
#define ATARI_ETHERNEC_PHYS_ADDR 0xfffa0000
|
||||
#define ATARI_ETHERNEC_BASE 0x300
|
||||
#define ATARI_ETHERNEC_IRQ IRQ_MFP_TIMER1
|
||||
|
||||
static struct resource rtl8019_resources[] = {
|
||||
[0] = {
|
||||
.name = "rtl8019-regs",
|
||||
.start = ATARI_ETHERNEC_BASE,
|
||||
.end = ATARI_ETHERNEC_BASE + 0x20 - 1,
|
||||
.flags = IORESOURCE_IO,
|
||||
},
|
||||
[1] = {
|
||||
.name = "rtl8019-irq",
|
||||
.start = ATARI_ETHERNEC_IRQ,
|
||||
.end = ATARI_ETHERNEC_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device rtl8019_device = {
|
||||
.name = "ne",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(rtl8019_resources),
|
||||
.resource = rtl8019_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* NetUSBee: ISP1160 USB host adapter via ROM-port adapter
|
||||
*/
|
||||
|
||||
#define ATARI_NETUSBEE_PHYS_ADDR 0xfffa8000
|
||||
#define ATARI_NETUSBEE_BASE 0x340
|
||||
#define ATARI_NETUSBEE_IRQ IRQ_MFP_TIMER2
|
||||
|
||||
static struct resource netusbee_resources[] = {
|
||||
[0] = {
|
||||
.name = "isp1160-data",
|
||||
.start = ATARI_NETUSBEE_BASE,
|
||||
.end = ATARI_NETUSBEE_BASE + 0x1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.name = "isp1160-regs",
|
||||
.start = ATARI_NETUSBEE_BASE + 0x20,
|
||||
.end = ATARI_NETUSBEE_BASE + 0x21,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.name = "isp1160-irq",
|
||||
.start = ATARI_NETUSBEE_IRQ,
|
||||
.end = ATARI_NETUSBEE_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
/* (DataBusWidth16|AnalogOCEnable|DREQOutputPolarity|DownstreamPort15KRSel ) */
|
||||
static struct isp116x_platform_data netusbee_platform_data = {
|
||||
/* Enable internal resistors on downstream ports */
|
||||
.sel15Kres = 1,
|
||||
/* On-chip overcurrent protection */
|
||||
.oc_enable = 1,
|
||||
/* INT output polarity */
|
||||
.int_act_high = 1,
|
||||
/* INT edge or level triggered */
|
||||
.int_edge_triggered = 0,
|
||||
|
||||
/* WAKEUP pin connected - NOT SUPPORTED */
|
||||
/* .remote_wakeup_connected = 0, */
|
||||
/* Wakeup by devices on usb bus enabled */
|
||||
.remote_wakeup_enable = 0,
|
||||
.delay = isp1160_delay,
|
||||
};
|
||||
|
||||
static struct platform_device netusbee_device = {
|
||||
.name = "isp116x-hcd",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(netusbee_resources),
|
||||
.resource = netusbee_resources,
|
||||
.dev = {
|
||||
.platform_data = &netusbee_platform_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *atari_netusbee_devices[] __initdata = {
|
||||
&rtl8019_device,
|
||||
&netusbee_device
|
||||
};
|
||||
#endif /* CONFIG_ATARI_ETHERNEC */
|
||||
|
||||
int __init atari_platform_init(void)
|
||||
{
|
||||
int rv = 0;
|
||||
|
||||
if (!MACH_IS_ATARI)
|
||||
return -ENODEV;
|
||||
|
||||
#ifdef CONFIG_ATARI_ETHERNAT
|
||||
{
|
||||
unsigned char *enatc_virt;
|
||||
enatc_virt = (unsigned char *)ioremap((ATARI_ETHERNAT_PHYS_ADDR+0x23), 0xf);
|
||||
if (hwreg_present(enatc_virt)) {
|
||||
rv = platform_add_devices(atari_ethernat_devices,
|
||||
ARRAY_SIZE(atari_ethernat_devices));
|
||||
}
|
||||
iounmap(enatc_virt);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ATARI_ETHERNEC
|
||||
{
|
||||
int error;
|
||||
unsigned char *enec_virt;
|
||||
enec_virt = (unsigned char *)ioremap((ATARI_ETHERNEC_PHYS_ADDR), 0xf);
|
||||
if (hwreg_present(enec_virt)) {
|
||||
error = platform_add_devices(atari_netusbee_devices,
|
||||
ARRAY_SIZE(atari_netusbee_devices));
|
||||
if (error && !rv)
|
||||
rv = error;
|
||||
}
|
||||
iounmap(enec_virt);
|
||||
}
|
||||
#endif
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
arch_initcall(atari_platform_init);
|
||||
329
arch/m68k/atari/debug.c
Normal file
329
arch/m68k/atari/debug.c
Normal file
|
|
@ -0,0 +1,329 @@
|
|||
/*
|
||||
* linux/arch/m68k/atari/debug.c
|
||||
*
|
||||
* Atari debugging and serial console stuff
|
||||
*
|
||||
* Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atariints.h>
|
||||
|
||||
/* Can be set somewhere, if a SCC master reset has already be done and should
|
||||
* not be repeated; used by kgdb */
|
||||
int atari_SCC_reset_done;
|
||||
EXPORT_SYMBOL(atari_SCC_reset_done);
|
||||
|
||||
static struct console atari_console_driver = {
|
||||
.name = "debug",
|
||||
.flags = CON_PRINTBUFFER,
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
|
||||
static inline void ata_mfp_out(char c)
|
||||
{
|
||||
while (!(st_mfp.trn_stat & 0x80)) /* wait for tx buf empty */
|
||||
barrier();
|
||||
st_mfp.usart_dta = c;
|
||||
}
|
||||
|
||||
static void atari_mfp_console_write(struct console *co, const char *str,
|
||||
unsigned int count)
|
||||
{
|
||||
while (count--) {
|
||||
if (*str == '\n')
|
||||
ata_mfp_out('\r');
|
||||
ata_mfp_out(*str++);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void ata_scc_out(char c)
|
||||
{
|
||||
do {
|
||||
MFPDELAY();
|
||||
} while (!(atari_scc.cha_b_ctrl & 0x04)); /* wait for tx buf empty */
|
||||
MFPDELAY();
|
||||
atari_scc.cha_b_data = c;
|
||||
}
|
||||
|
||||
static void atari_scc_console_write(struct console *co, const char *str,
|
||||
unsigned int count)
|
||||
{
|
||||
while (count--) {
|
||||
if (*str == '\n')
|
||||
ata_scc_out('\r');
|
||||
ata_scc_out(*str++);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void ata_midi_out(char c)
|
||||
{
|
||||
while (!(acia.mid_ctrl & ACIA_TDRE)) /* wait for tx buf empty */
|
||||
barrier();
|
||||
acia.mid_data = c;
|
||||
}
|
||||
|
||||
static void atari_midi_console_write(struct console *co, const char *str,
|
||||
unsigned int count)
|
||||
{
|
||||
while (count--) {
|
||||
if (*str == '\n')
|
||||
ata_midi_out('\r');
|
||||
ata_midi_out(*str++);
|
||||
}
|
||||
}
|
||||
|
||||
static int ata_par_out(char c)
|
||||
{
|
||||
unsigned char tmp;
|
||||
/* This a some-seconds timeout in case no printer is connected */
|
||||
unsigned long i = loops_per_jiffy > 1 ? loops_per_jiffy : 10000000/HZ;
|
||||
|
||||
while ((st_mfp.par_dt_reg & 1) && --i) /* wait for BUSY == L */
|
||||
;
|
||||
if (!i)
|
||||
return 0;
|
||||
|
||||
sound_ym.rd_data_reg_sel = 15; /* select port B */
|
||||
sound_ym.wd_data = c; /* put char onto port */
|
||||
sound_ym.rd_data_reg_sel = 14; /* select port A */
|
||||
tmp = sound_ym.rd_data_reg_sel;
|
||||
sound_ym.wd_data = tmp & ~0x20; /* set strobe L */
|
||||
MFPDELAY(); /* wait a bit */
|
||||
sound_ym.wd_data = tmp | 0x20; /* set strobe H */
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void atari_par_console_write(struct console *co, const char *str,
|
||||
unsigned int count)
|
||||
{
|
||||
static int printer_present = 1;
|
||||
|
||||
if (!printer_present)
|
||||
return;
|
||||
|
||||
while (count--) {
|
||||
if (*str == '\n') {
|
||||
if (!ata_par_out('\r')) {
|
||||
printer_present = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!ata_par_out(*str++)) {
|
||||
printer_present = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
int atari_mfp_console_wait_key(struct console *co)
|
||||
{
|
||||
while (!(st_mfp.rcv_stat & 0x80)) /* wait for rx buf filled */
|
||||
barrier();
|
||||
return st_mfp.usart_dta;
|
||||
}
|
||||
|
||||
int atari_scc_console_wait_key(struct console *co)
|
||||
{
|
||||
do {
|
||||
MFPDELAY();
|
||||
} while (!(atari_scc.cha_b_ctrl & 0x01)); /* wait for rx buf filled */
|
||||
MFPDELAY();
|
||||
return atari_scc.cha_b_data;
|
||||
}
|
||||
|
||||
int atari_midi_console_wait_key(struct console *co)
|
||||
{
|
||||
while (!(acia.mid_ctrl & ACIA_RDRF)) /* wait for rx buf filled */
|
||||
barrier();
|
||||
return acia.mid_data;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following two functions do a quick'n'dirty initialization of the MFP or
|
||||
* SCC serial ports. They're used by the debugging interface, kgdb, and the
|
||||
* serial console code.
|
||||
*/
|
||||
static void __init atari_init_mfp_port(int cflag)
|
||||
{
|
||||
/*
|
||||
* timer values for 1200...115200 bps; > 38400 select 110, 134, or 150
|
||||
* bps, resp., and work only correct if there's a RSVE or RSSPEED
|
||||
*/
|
||||
static int baud_table[9] = { 16, 11, 8, 4, 2, 1, 175, 143, 128 };
|
||||
int baud = cflag & CBAUD;
|
||||
int parity = (cflag & PARENB) ? ((cflag & PARODD) ? 0x04 : 0x06) : 0;
|
||||
int csize = ((cflag & CSIZE) == CS7) ? 0x20 : 0x00;
|
||||
|
||||
if (cflag & CBAUDEX)
|
||||
baud += B38400;
|
||||
if (baud < B1200 || baud > B38400+2)
|
||||
baud = B9600; /* use default 9600bps for non-implemented rates */
|
||||
baud -= B1200; /* baud_table[] starts at 1200bps */
|
||||
|
||||
st_mfp.trn_stat &= ~0x01; /* disable TX */
|
||||
st_mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */
|
||||
st_mfp.tim_ct_cd &= 0x70; /* stop timer D */
|
||||
st_mfp.tim_dt_d = baud_table[baud];
|
||||
st_mfp.tim_ct_cd |= 0x01; /* start timer D, 1:4 */
|
||||
st_mfp.trn_stat |= 0x01; /* enable TX */
|
||||
}
|
||||
|
||||
#define SCC_WRITE(reg, val) \
|
||||
do { \
|
||||
atari_scc.cha_b_ctrl = (reg); \
|
||||
MFPDELAY(); \
|
||||
atari_scc.cha_b_ctrl = (val); \
|
||||
MFPDELAY(); \
|
||||
} while (0)
|
||||
|
||||
/* loops_per_jiffy isn't initialized yet, so we can't use udelay(). This does a
|
||||
* delay of ~ 60us. */
|
||||
#define LONG_DELAY() \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 100; i > 0; --i) \
|
||||
MFPDELAY(); \
|
||||
} while (0)
|
||||
|
||||
static void __init atari_init_scc_port(int cflag)
|
||||
{
|
||||
static int clksrc_table[9] =
|
||||
/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
|
||||
{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
|
||||
static int brgsrc_table[9] =
|
||||
/* reg 14: 0 = RTxC, 2 = PCLK */
|
||||
{ 2, 2, 2, 2, 2, 2, 0, 2, 2 };
|
||||
static int clkmode_table[9] =
|
||||
/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
|
||||
{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
|
||||
static int div_table[9] =
|
||||
/* reg12 (BRG low) */
|
||||
{ 208, 138, 103, 50, 24, 11, 1, 0, 0 };
|
||||
|
||||
int baud = cflag & CBAUD;
|
||||
int clksrc, clkmode, div, reg3, reg5;
|
||||
|
||||
if (cflag & CBAUDEX)
|
||||
baud += B38400;
|
||||
if (baud < B1200 || baud > B38400+2)
|
||||
baud = B9600; /* use default 9600bps for non-implemented rates */
|
||||
baud -= B1200; /* tables starts at 1200bps */
|
||||
|
||||
clksrc = clksrc_table[baud];
|
||||
clkmode = clkmode_table[baud];
|
||||
div = div_table[baud];
|
||||
if (ATARIHW_PRESENT(TT_MFP) && baud >= 6) {
|
||||
/* special treatment for TT, where rates >= 38400 are done via TRxC */
|
||||
clksrc = 0x28; /* TRxC */
|
||||
clkmode = baud == 6 ? 0xc0 :
|
||||
baud == 7 ? 0x80 : /* really 76800bps */
|
||||
0x40; /* really 153600bps */
|
||||
div = 0;
|
||||
}
|
||||
|
||||
reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40;
|
||||
reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */;
|
||||
|
||||
(void)atari_scc.cha_b_ctrl; /* reset reg pointer */
|
||||
SCC_WRITE(9, 0xc0); /* reset */
|
||||
LONG_DELAY(); /* extra delay after WR9 access */
|
||||
SCC_WRITE(4, (cflag & PARENB) ? ((cflag & PARODD) ? 0x01 : 0x03)
|
||||
: 0 | 0x04 /* 1 stopbit */ | clkmode);
|
||||
SCC_WRITE(3, reg3);
|
||||
SCC_WRITE(5, reg5);
|
||||
SCC_WRITE(9, 0); /* no interrupts */
|
||||
LONG_DELAY(); /* extra delay after WR9 access */
|
||||
SCC_WRITE(10, 0); /* NRZ mode */
|
||||
SCC_WRITE(11, clksrc); /* main clock source */
|
||||
SCC_WRITE(12, div); /* BRG value */
|
||||
SCC_WRITE(13, 0); /* BRG high byte */
|
||||
SCC_WRITE(14, brgsrc_table[baud]);
|
||||
SCC_WRITE(14, brgsrc_table[baud] | (div ? 1 : 0));
|
||||
SCC_WRITE(3, reg3 | 1);
|
||||
SCC_WRITE(5, reg5 | 8);
|
||||
|
||||
atari_SCC_reset_done = 1;
|
||||
}
|
||||
|
||||
static void __init atari_init_midi_port(int cflag)
|
||||
{
|
||||
int baud = cflag & CBAUD;
|
||||
int csize = ((cflag & CSIZE) == CS8) ? 0x10 : 0x00;
|
||||
/* warning 7N1 isn't possible! (instead 7O2 is used...) */
|
||||
int parity = (cflag & PARENB) ? ((cflag & PARODD) ? 0x0c : 0x08) : 0x04;
|
||||
int div;
|
||||
|
||||
/* 4800 selects 7812.5, 115200 selects 500000, all other (incl. 9600 as
|
||||
* default) the standard MIDI speed 31250. */
|
||||
if (cflag & CBAUDEX)
|
||||
baud += B38400;
|
||||
if (baud == B4800)
|
||||
div = ACIA_DIV64; /* really 7812.5 bps */
|
||||
else if (baud == B38400+2 /* 115200 */)
|
||||
div = ACIA_DIV1; /* really 500 kbps (does that work??) */
|
||||
else
|
||||
div = ACIA_DIV16; /* 31250 bps, standard for MIDI */
|
||||
|
||||
/* RTS low, ints disabled */
|
||||
acia.mid_ctrl = div | csize | parity |
|
||||
((atari_switches & ATARI_SWITCH_MIDI) ?
|
||||
ACIA_RHTID : ACIA_RLTID);
|
||||
}
|
||||
|
||||
static int __init atari_debug_setup(char *arg)
|
||||
{
|
||||
bool registered;
|
||||
|
||||
if (!MACH_IS_ATARI)
|
||||
return 0;
|
||||
|
||||
if (!strcmp(arg, "ser"))
|
||||
/* defaults to ser2 for a Falcon and ser1 otherwise */
|
||||
arg = MACH_IS_FALCON ? "ser2" : "ser1";
|
||||
|
||||
registered = !!atari_console_driver.write;
|
||||
if (!strcmp(arg, "ser1")) {
|
||||
/* ST-MFP Modem1 serial port */
|
||||
atari_init_mfp_port(B9600|CS8);
|
||||
atari_console_driver.write = atari_mfp_console_write;
|
||||
} else if (!strcmp(arg, "ser2")) {
|
||||
/* SCC Modem2 serial port */
|
||||
atari_init_scc_port(B9600|CS8);
|
||||
atari_console_driver.write = atari_scc_console_write;
|
||||
} else if (!strcmp(arg, "midi")) {
|
||||
/* MIDI port */
|
||||
atari_init_midi_port(B9600|CS8);
|
||||
atari_console_driver.write = atari_midi_console_write;
|
||||
} else if (!strcmp(arg, "par")) {
|
||||
/* parallel printer */
|
||||
atari_turnoff_irq(IRQ_MFP_BUSY); /* avoid ints */
|
||||
sound_ym.rd_data_reg_sel = 7; /* select mixer control */
|
||||
sound_ym.wd_data = 0xff; /* sound off, ports are output */
|
||||
sound_ym.rd_data_reg_sel = 15; /* select port B */
|
||||
sound_ym.wd_data = 0; /* no char */
|
||||
sound_ym.rd_data_reg_sel = 14; /* select port A */
|
||||
sound_ym.wd_data = sound_ym.rd_data_reg_sel | 0x20; /* strobe H */
|
||||
atari_console_driver.write = atari_par_console_write;
|
||||
}
|
||||
if (atari_console_driver.write && !registered)
|
||||
register_console(&atari_console_driver);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("debug", atari_debug_setup);
|
||||
201
arch/m68k/atari/stdma.c
Normal file
201
arch/m68k/atari/stdma.c
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
/*
|
||||
* linux/arch/m68k/atari/stmda.c
|
||||
*
|
||||
* Copyright (C) 1994 Roman Hodek
|
||||
*
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
|
||||
/* This file contains some function for controlling the access to the */
|
||||
/* ST-DMA chip that may be shared between devices. Currently we have: */
|
||||
/* TT: Floppy and ACSI bus */
|
||||
/* Falcon: Floppy and SCSI */
|
||||
/* */
|
||||
/* The controlling functions set up a wait queue for access to the */
|
||||
/* ST-DMA chip. Callers to stdma_lock() that cannot granted access are */
|
||||
/* put onto a queue and waked up later if the owner calls */
|
||||
/* stdma_release(). Additionally, the caller gives his interrupt */
|
||||
/* service routine to stdma_lock(). */
|
||||
/* */
|
||||
/* On the Falcon, the IDE bus uses just the ACSI/Floppy interrupt, but */
|
||||
/* not the ST-DMA chip itself. So falhd.c needs not to lock the */
|
||||
/* chip. The interrupt is routed to falhd.c if IDE is configured, the */
|
||||
/* model is a Falcon and the interrupt was caused by the HD controller */
|
||||
/* (can be determined by looking at its status register). */
|
||||
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/atari_stdma.h>
|
||||
#include <asm/atariints.h>
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
static int stdma_locked; /* the semaphore */
|
||||
/* int func to be called */
|
||||
static irq_handler_t stdma_isr;
|
||||
static void *stdma_isr_data; /* data passed to isr */
|
||||
static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************** Prototypes *****************************/
|
||||
|
||||
static irqreturn_t stdma_int (int irq, void *dummy);
|
||||
|
||||
/************************* End of Prototypes **************************/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Function: void stdma_lock( isrfunc isr, void *data )
|
||||
*
|
||||
* Purpose: Tries to get a lock on the ST-DMA chip that is used by more
|
||||
* then one device driver. Waits on stdma_wait until lock is free.
|
||||
* stdma_lock() may not be called from an interrupt! You have to
|
||||
* get the lock in your main routine and release it when your
|
||||
* request is finished.
|
||||
*
|
||||
* Inputs: A interrupt function that is called until the lock is
|
||||
* released.
|
||||
*
|
||||
* Returns: nothing
|
||||
*
|
||||
*/
|
||||
|
||||
void stdma_lock(irq_handler_t handler, void *data)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags); /* protect lock */
|
||||
|
||||
/* Since the DMA is used for file system purposes, we
|
||||
have to sleep uninterruptible (there may be locked
|
||||
buffers) */
|
||||
wait_event(stdma_wait, !stdma_locked);
|
||||
|
||||
stdma_locked = 1;
|
||||
stdma_isr = handler;
|
||||
stdma_isr_data = data;
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(stdma_lock);
|
||||
|
||||
|
||||
/*
|
||||
* Function: void stdma_release( void )
|
||||
*
|
||||
* Purpose: Releases the lock on the ST-DMA chip.
|
||||
*
|
||||
* Inputs: none
|
||||
*
|
||||
* Returns: nothing
|
||||
*
|
||||
*/
|
||||
|
||||
void stdma_release(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
stdma_locked = 0;
|
||||
stdma_isr = NULL;
|
||||
stdma_isr_data = NULL;
|
||||
wake_up(&stdma_wait);
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL(stdma_release);
|
||||
|
||||
|
||||
/*
|
||||
* Function: int stdma_others_waiting( void )
|
||||
*
|
||||
* Purpose: Check if someone waits for the ST-DMA lock.
|
||||
*
|
||||
* Inputs: none
|
||||
*
|
||||
* Returns: 0 if no one is waiting, != 0 otherwise
|
||||
*
|
||||
*/
|
||||
|
||||
int stdma_others_waiting(void)
|
||||
{
|
||||
return waitqueue_active(&stdma_wait);
|
||||
}
|
||||
EXPORT_SYMBOL(stdma_others_waiting);
|
||||
|
||||
|
||||
/*
|
||||
* Function: int stdma_islocked( void )
|
||||
*
|
||||
* Purpose: Check if the ST-DMA is currently locked.
|
||||
* Note: Returned status is only valid if ints are disabled while calling and
|
||||
* as long as they remain disabled.
|
||||
* If called with ints enabled, status can change only from locked to
|
||||
* unlocked, because ints may not lock the ST-DMA.
|
||||
*
|
||||
* Inputs: none
|
||||
*
|
||||
* Returns: != 0 if locked, 0 otherwise
|
||||
*
|
||||
*/
|
||||
|
||||
int stdma_islocked(void)
|
||||
{
|
||||
return stdma_locked;
|
||||
}
|
||||
EXPORT_SYMBOL(stdma_islocked);
|
||||
|
||||
|
||||
/*
|
||||
* Function: void stdma_init( void )
|
||||
*
|
||||
* Purpose: Initialize the ST-DMA chip access controlling.
|
||||
* It sets up the interrupt and its service routine. The int is registered
|
||||
* as slow int, client devices have to live with that (no problem
|
||||
* currently).
|
||||
*
|
||||
* Inputs: none
|
||||
*
|
||||
* Return: nothing
|
||||
*
|
||||
*/
|
||||
|
||||
void __init stdma_init(void)
|
||||
{
|
||||
stdma_isr = NULL;
|
||||
if (request_irq(IRQ_MFP_FDC, stdma_int, IRQ_TYPE_SLOW | IRQF_SHARED,
|
||||
"ST-DMA floppy,ACSI,IDE,Falcon-SCSI", stdma_int))
|
||||
pr_err("Couldn't register ST-DMA interrupt\n");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Function: void stdma_int()
|
||||
*
|
||||
* Purpose: The interrupt routine for the ST-DMA. It calls the isr
|
||||
* registered by stdma_lock().
|
||||
*
|
||||
*/
|
||||
|
||||
static irqreturn_t stdma_int(int irq, void *dummy)
|
||||
{
|
||||
if (stdma_isr)
|
||||
(*stdma_isr)(irq, stdma_isr_data);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
198
arch/m68k/atari/stram.c
Normal file
198
arch/m68k/atari/stram.c
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
/*
|
||||
* Functions for ST-RAM allocations
|
||||
*
|
||||
* Copyright 1994-97 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/ioport.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atari_stram.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
|
||||
/*
|
||||
* The ST-RAM allocator allocates memory from a pool of reserved ST-RAM of
|
||||
* configurable size, set aside on ST-RAM init.
|
||||
* As long as this pool is not exhausted, allocation of real ST-RAM can be
|
||||
* guaranteed.
|
||||
*/
|
||||
|
||||
/* set if kernel is in ST-RAM */
|
||||
static int kernel_in_stram;
|
||||
|
||||
static struct resource stram_pool = {
|
||||
.name = "ST-RAM Pool"
|
||||
};
|
||||
|
||||
static unsigned long pool_size = 1024*1024;
|
||||
|
||||
static unsigned long stram_virt_offset;
|
||||
|
||||
static int __init atari_stram_setup(char *arg)
|
||||
{
|
||||
if (!MACH_IS_ATARI)
|
||||
return 0;
|
||||
|
||||
pool_size = memparse(arg, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("stram_pool", atari_stram_setup);
|
||||
|
||||
|
||||
/*
|
||||
* This init function is called very early by atari/config.c
|
||||
* It initializes some internal variables needed for stram_alloc()
|
||||
*/
|
||||
void __init atari_stram_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* determine whether kernel code resides in ST-RAM
|
||||
* (then ST-RAM is the first memory block at virtual 0x0)
|
||||
*/
|
||||
kernel_in_stram = (m68k_memory[0].addr == 0);
|
||||
|
||||
for (i = 0; i < m68k_num_memory; ++i) {
|
||||
if (m68k_memory[i].addr == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Should never come here! (There is always ST-Ram!) */
|
||||
panic("atari_stram_init: no ST-RAM found!");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function is called from setup_arch() to reserve the pages needed for
|
||||
* ST-RAM management, if the kernel resides in ST-RAM.
|
||||
*/
|
||||
void __init atari_stram_reserve_pages(void *start_mem)
|
||||
{
|
||||
if (kernel_in_stram) {
|
||||
pr_debug("atari_stram pool: kernel in ST-RAM, using alloc_bootmem!\n");
|
||||
stram_pool.start = (resource_size_t)alloc_bootmem_low_pages(pool_size);
|
||||
stram_pool.end = stram_pool.start + pool_size - 1;
|
||||
request_resource(&iomem_resource, &stram_pool);
|
||||
stram_virt_offset = 0;
|
||||
pr_debug("atari_stram pool: size = %lu bytes, resource = %pR\n",
|
||||
pool_size, &stram_pool);
|
||||
pr_debug("atari_stram pool: stram_virt_offset = %lx\n",
|
||||
stram_virt_offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function is called as arch initcall to reserve the pages needed for
|
||||
* ST-RAM management, if the kernel does not reside in ST-RAM.
|
||||
*/
|
||||
int __init atari_stram_map_pages(void)
|
||||
{
|
||||
if (!kernel_in_stram) {
|
||||
/*
|
||||
* Skip page 0, as the fhe first 2 KiB are supervisor-only!
|
||||
*/
|
||||
pr_debug("atari_stram pool: kernel not in ST-RAM, using ioremap!\n");
|
||||
stram_pool.start = PAGE_SIZE;
|
||||
stram_pool.end = stram_pool.start + pool_size - 1;
|
||||
request_resource(&iomem_resource, &stram_pool);
|
||||
stram_virt_offset = (unsigned long) ioremap(stram_pool.start,
|
||||
resource_size(&stram_pool)) - stram_pool.start;
|
||||
pr_debug("atari_stram pool: size = %lu bytes, resource = %pR\n",
|
||||
pool_size, &stram_pool);
|
||||
pr_debug("atari_stram pool: stram_virt_offset = %lx\n",
|
||||
stram_virt_offset);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(atari_stram_map_pages);
|
||||
|
||||
|
||||
void *atari_stram_to_virt(unsigned long phys)
|
||||
{
|
||||
return (void *)(phys + stram_virt_offset);
|
||||
}
|
||||
EXPORT_SYMBOL(atari_stram_to_virt);
|
||||
|
||||
|
||||
unsigned long atari_stram_to_phys(void *virt)
|
||||
{
|
||||
return (unsigned long)(virt - stram_virt_offset);
|
||||
}
|
||||
EXPORT_SYMBOL(atari_stram_to_phys);
|
||||
|
||||
|
||||
void *atari_stram_alloc(unsigned long size, const char *owner)
|
||||
{
|
||||
struct resource *res;
|
||||
int error;
|
||||
|
||||
pr_debug("atari_stram_alloc: allocate %lu bytes\n", size);
|
||||
|
||||
/* round up */
|
||||
size = PAGE_ALIGN(size);
|
||||
|
||||
res = kzalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
if (!res)
|
||||
return NULL;
|
||||
|
||||
res->name = owner;
|
||||
error = allocate_resource(&stram_pool, res, size, 0, UINT_MAX,
|
||||
PAGE_SIZE, NULL, NULL);
|
||||
if (error < 0) {
|
||||
pr_err("atari_stram_alloc: allocate_resource() failed %d!\n",
|
||||
error);
|
||||
kfree(res);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pr_debug("atari_stram_alloc: returning %pR\n", res);
|
||||
return atari_stram_to_virt(res->start);
|
||||
}
|
||||
EXPORT_SYMBOL(atari_stram_alloc);
|
||||
|
||||
|
||||
void atari_stram_free(void *addr)
|
||||
{
|
||||
unsigned long start = atari_stram_to_phys(addr);
|
||||
struct resource *res;
|
||||
unsigned long size;
|
||||
|
||||
res = lookup_resource(&stram_pool, start);
|
||||
if (!res) {
|
||||
pr_err("atari_stram_free: trying to free nonexistent region "
|
||||
"at %p\n", addr);
|
||||
return;
|
||||
}
|
||||
|
||||
size = resource_size(res);
|
||||
pr_debug("atari_stram_free: free %lu bytes at %p\n", size, addr);
|
||||
release_resource(res);
|
||||
kfree(res);
|
||||
}
|
||||
EXPORT_SYMBOL(atari_stram_free);
|
||||
357
arch/m68k/atari/time.c
Normal file
357
arch/m68k/atari/time.c
Normal file
|
|
@ -0,0 +1,357 @@
|
|||
/*
|
||||
* linux/arch/m68k/atari/time.c
|
||||
*
|
||||
* Atari time and real time clock stuff
|
||||
*
|
||||
* Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/export.h>
|
||||
|
||||
#include <asm/atariints.h>
|
||||
|
||||
DEFINE_SPINLOCK(rtc_lock);
|
||||
EXPORT_SYMBOL_GPL(rtc_lock);
|
||||
|
||||
void __init
|
||||
atari_sched_init(irq_handler_t timer_routine)
|
||||
{
|
||||
/* set Timer C data Register */
|
||||
st_mfp.tim_dt_c = INT_TICKS;
|
||||
/* start timer C, div = 1:100 */
|
||||
st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 15) | 0x60;
|
||||
/* install interrupt service routine for MFP Timer C */
|
||||
if (request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,
|
||||
"timer", timer_routine))
|
||||
pr_err("Couldn't register timer interrupt\n");
|
||||
}
|
||||
|
||||
/* ++andreas: gettimeoffset fixed to check for pending interrupt */
|
||||
|
||||
#define TICK_SIZE 10000
|
||||
|
||||
/* This is always executed with interrupts disabled. */
|
||||
u32 atari_gettimeoffset(void)
|
||||
{
|
||||
u32 ticks, offset = 0;
|
||||
|
||||
/* read MFP timer C current value */
|
||||
ticks = st_mfp.tim_dt_c;
|
||||
/* The probability of underflow is less than 2% */
|
||||
if (ticks > INT_TICKS - INT_TICKS / 50)
|
||||
/* Check for pending timer interrupt */
|
||||
if (st_mfp.int_pn_b & (1 << 5))
|
||||
offset = TICK_SIZE;
|
||||
|
||||
ticks = INT_TICKS - ticks;
|
||||
ticks = ticks * 10000L / INT_TICKS;
|
||||
|
||||
return (ticks + offset) * 1000;
|
||||
}
|
||||
|
||||
|
||||
static void mste_read(struct MSTE_RTC *val)
|
||||
{
|
||||
#define COPY(v) val->v=(mste_rtc.v & 0xf)
|
||||
do {
|
||||
COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;
|
||||
COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;
|
||||
COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;
|
||||
COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;
|
||||
COPY(year_tens) ;
|
||||
/* prevent from reading the clock while it changed */
|
||||
} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));
|
||||
#undef COPY
|
||||
}
|
||||
|
||||
static void mste_write(struct MSTE_RTC *val)
|
||||
{
|
||||
#define COPY(v) mste_rtc.v=val->v
|
||||
do {
|
||||
COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;
|
||||
COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;
|
||||
COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;
|
||||
COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;
|
||||
COPY(year_tens) ;
|
||||
/* prevent from writing the clock while it changed */
|
||||
} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));
|
||||
#undef COPY
|
||||
}
|
||||
|
||||
#define RTC_READ(reg) \
|
||||
({ unsigned char __val; \
|
||||
(void) atari_writeb(reg,&tt_rtc.regsel); \
|
||||
__val = tt_rtc.data; \
|
||||
__val; \
|
||||
})
|
||||
|
||||
#define RTC_WRITE(reg,val) \
|
||||
do { \
|
||||
atari_writeb(reg,&tt_rtc.regsel); \
|
||||
tt_rtc.data = (val); \
|
||||
} while(0)
|
||||
|
||||
|
||||
#define HWCLK_POLL_INTERVAL 5
|
||||
|
||||
int atari_mste_hwclk( int op, struct rtc_time *t )
|
||||
{
|
||||
int hour, year;
|
||||
int hr24=0;
|
||||
struct MSTE_RTC val;
|
||||
|
||||
mste_rtc.mode=(mste_rtc.mode | 1);
|
||||
hr24=mste_rtc.mon_tens & 1;
|
||||
mste_rtc.mode=(mste_rtc.mode & ~1);
|
||||
|
||||
if (op) {
|
||||
/* write: prepare values */
|
||||
|
||||
val.sec_ones = t->tm_sec % 10;
|
||||
val.sec_tens = t->tm_sec / 10;
|
||||
val.min_ones = t->tm_min % 10;
|
||||
val.min_tens = t->tm_min / 10;
|
||||
hour = t->tm_hour;
|
||||
if (!hr24) {
|
||||
if (hour > 11)
|
||||
hour += 20 - 12;
|
||||
if (hour == 0 || hour == 20)
|
||||
hour += 12;
|
||||
}
|
||||
val.hr_ones = hour % 10;
|
||||
val.hr_tens = hour / 10;
|
||||
val.day_ones = t->tm_mday % 10;
|
||||
val.day_tens = t->tm_mday / 10;
|
||||
val.mon_ones = (t->tm_mon+1) % 10;
|
||||
val.mon_tens = (t->tm_mon+1) / 10;
|
||||
year = t->tm_year - 80;
|
||||
val.year_ones = year % 10;
|
||||
val.year_tens = year / 10;
|
||||
val.weekday = t->tm_wday;
|
||||
mste_write(&val);
|
||||
mste_rtc.mode=(mste_rtc.mode | 1);
|
||||
val.year_ones = (year % 4); /* leap year register */
|
||||
mste_rtc.mode=(mste_rtc.mode & ~1);
|
||||
}
|
||||
else {
|
||||
mste_read(&val);
|
||||
t->tm_sec = val.sec_ones + val.sec_tens * 10;
|
||||
t->tm_min = val.min_ones + val.min_tens * 10;
|
||||
hour = val.hr_ones + val.hr_tens * 10;
|
||||
if (!hr24) {
|
||||
if (hour == 12 || hour == 12 + 20)
|
||||
hour -= 12;
|
||||
if (hour >= 20)
|
||||
hour += 12 - 20;
|
||||
}
|
||||
t->tm_hour = hour;
|
||||
t->tm_mday = val.day_ones + val.day_tens * 10;
|
||||
t->tm_mon = val.mon_ones + val.mon_tens * 10 - 1;
|
||||
t->tm_year = val.year_ones + val.year_tens * 10 + 80;
|
||||
t->tm_wday = val.weekday;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atari_tt_hwclk( int op, struct rtc_time *t )
|
||||
{
|
||||
int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0;
|
||||
unsigned long flags;
|
||||
unsigned char ctrl;
|
||||
int pm = 0;
|
||||
|
||||
ctrl = RTC_READ(RTC_CONTROL); /* control registers are
|
||||
* independent from the UIP */
|
||||
|
||||
if (op) {
|
||||
/* write: prepare values */
|
||||
|
||||
sec = t->tm_sec;
|
||||
min = t->tm_min;
|
||||
hour = t->tm_hour;
|
||||
day = t->tm_mday;
|
||||
mon = t->tm_mon + 1;
|
||||
year = t->tm_year - atari_rtc_year_offset;
|
||||
wday = t->tm_wday + (t->tm_wday >= 0);
|
||||
|
||||
if (!(ctrl & RTC_24H)) {
|
||||
if (hour > 11) {
|
||||
pm = 0x80;
|
||||
if (hour != 12)
|
||||
hour -= 12;
|
||||
}
|
||||
else if (hour == 0)
|
||||
hour = 12;
|
||||
}
|
||||
|
||||
if (!(ctrl & RTC_DM_BINARY)) {
|
||||
sec = bin2bcd(sec);
|
||||
min = bin2bcd(min);
|
||||
hour = bin2bcd(hour);
|
||||
day = bin2bcd(day);
|
||||
mon = bin2bcd(mon);
|
||||
year = bin2bcd(year);
|
||||
if (wday >= 0)
|
||||
wday = bin2bcd(wday);
|
||||
}
|
||||
}
|
||||
|
||||
/* Reading/writing the clock registers is a bit critical due to
|
||||
* the regular update cycle of the RTC. While an update is in
|
||||
* progress, registers 0..9 shouldn't be touched.
|
||||
* The problem is solved like that: If an update is currently in
|
||||
* progress (the UIP bit is set), the process sleeps for a while
|
||||
* (50ms). This really should be enough, since the update cycle
|
||||
* normally needs 2 ms.
|
||||
* If the UIP bit reads as 0, we have at least 244 usecs until the
|
||||
* update starts. This should be enough... But to be sure,
|
||||
* additionally the RTC_SET bit is set to prevent an update cycle.
|
||||
*/
|
||||
|
||||
while( RTC_READ(RTC_FREQ_SELECT) & RTC_UIP ) {
|
||||
if (in_atomic() || irqs_disabled())
|
||||
mdelay(1);
|
||||
else
|
||||
schedule_timeout_interruptible(HWCLK_POLL_INTERVAL);
|
||||
}
|
||||
|
||||
local_irq_save(flags);
|
||||
RTC_WRITE( RTC_CONTROL, ctrl | RTC_SET );
|
||||
if (!op) {
|
||||
sec = RTC_READ( RTC_SECONDS );
|
||||
min = RTC_READ( RTC_MINUTES );
|
||||
hour = RTC_READ( RTC_HOURS );
|
||||
day = RTC_READ( RTC_DAY_OF_MONTH );
|
||||
mon = RTC_READ( RTC_MONTH );
|
||||
year = RTC_READ( RTC_YEAR );
|
||||
wday = RTC_READ( RTC_DAY_OF_WEEK );
|
||||
}
|
||||
else {
|
||||
RTC_WRITE( RTC_SECONDS, sec );
|
||||
RTC_WRITE( RTC_MINUTES, min );
|
||||
RTC_WRITE( RTC_HOURS, hour + pm);
|
||||
RTC_WRITE( RTC_DAY_OF_MONTH, day );
|
||||
RTC_WRITE( RTC_MONTH, mon );
|
||||
RTC_WRITE( RTC_YEAR, year );
|
||||
if (wday >= 0) RTC_WRITE( RTC_DAY_OF_WEEK, wday );
|
||||
}
|
||||
RTC_WRITE( RTC_CONTROL, ctrl & ~RTC_SET );
|
||||
local_irq_restore(flags);
|
||||
|
||||
if (!op) {
|
||||
/* read: adjust values */
|
||||
|
||||
if (hour & 0x80) {
|
||||
hour &= ~0x80;
|
||||
pm = 1;
|
||||
}
|
||||
|
||||
if (!(ctrl & RTC_DM_BINARY)) {
|
||||
sec = bcd2bin(sec);
|
||||
min = bcd2bin(min);
|
||||
hour = bcd2bin(hour);
|
||||
day = bcd2bin(day);
|
||||
mon = bcd2bin(mon);
|
||||
year = bcd2bin(year);
|
||||
wday = bcd2bin(wday);
|
||||
}
|
||||
|
||||
if (!(ctrl & RTC_24H)) {
|
||||
if (!pm && hour == 12)
|
||||
hour = 0;
|
||||
else if (pm && hour != 12)
|
||||
hour += 12;
|
||||
}
|
||||
|
||||
t->tm_sec = sec;
|
||||
t->tm_min = min;
|
||||
t->tm_hour = hour;
|
||||
t->tm_mday = day;
|
||||
t->tm_mon = mon - 1;
|
||||
t->tm_year = year + atari_rtc_year_offset;
|
||||
t->tm_wday = wday - 1;
|
||||
}
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
|
||||
int atari_mste_set_clock_mmss (unsigned long nowtime)
|
||||
{
|
||||
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
|
||||
struct MSTE_RTC val;
|
||||
unsigned char rtc_minutes;
|
||||
|
||||
mste_read(&val);
|
||||
rtc_minutes= val.min_ones + val.min_tens * 10;
|
||||
if ((rtc_minutes < real_minutes
|
||||
? real_minutes - rtc_minutes
|
||||
: rtc_minutes - real_minutes) < 30)
|
||||
{
|
||||
val.sec_ones = real_seconds % 10;
|
||||
val.sec_tens = real_seconds / 10;
|
||||
val.min_ones = real_minutes % 10;
|
||||
val.min_tens = real_minutes / 10;
|
||||
mste_write(&val);
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atari_tt_set_clock_mmss (unsigned long nowtime)
|
||||
{
|
||||
int retval = 0;
|
||||
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
|
||||
unsigned char save_control, save_freq_select, rtc_minutes;
|
||||
|
||||
save_control = RTC_READ (RTC_CONTROL); /* tell the clock it's being set */
|
||||
RTC_WRITE (RTC_CONTROL, save_control | RTC_SET);
|
||||
|
||||
save_freq_select = RTC_READ (RTC_FREQ_SELECT); /* stop and reset prescaler */
|
||||
RTC_WRITE (RTC_FREQ_SELECT, save_freq_select | RTC_DIV_RESET2);
|
||||
|
||||
rtc_minutes = RTC_READ (RTC_MINUTES);
|
||||
if (!(save_control & RTC_DM_BINARY))
|
||||
rtc_minutes = bcd2bin(rtc_minutes);
|
||||
|
||||
/* Since we're only adjusting minutes and seconds, don't interfere
|
||||
with hour overflow. This avoids messing with unknown time zones
|
||||
but requires your RTC not to be off by more than 30 minutes. */
|
||||
if ((rtc_minutes < real_minutes
|
||||
? real_minutes - rtc_minutes
|
||||
: rtc_minutes - real_minutes) < 30)
|
||||
{
|
||||
if (!(save_control & RTC_DM_BINARY))
|
||||
{
|
||||
real_seconds = bin2bcd(real_seconds);
|
||||
real_minutes = bin2bcd(real_minutes);
|
||||
}
|
||||
RTC_WRITE (RTC_SECONDS, real_seconds);
|
||||
RTC_WRITE (RTC_MINUTES, real_minutes);
|
||||
}
|
||||
else
|
||||
retval = -1;
|
||||
|
||||
RTC_WRITE (RTC_FREQ_SELECT, save_freq_select);
|
||||
RTC_WRITE (RTC_CONTROL, save_control);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-indent-level: 4
|
||||
* tab-width: 8
|
||||
* End:
|
||||
*/
|
||||
5
arch/m68k/bvme6000/Makefile
Normal file
5
arch/m68k/bvme6000/Makefile
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#
|
||||
# Makefile for Linux arch/m68k/bvme6000 source directory
|
||||
#
|
||||
|
||||
obj-y := config.o rtc.o
|
||||
351
arch/m68k/bvme6000/config.c
Normal file
351
arch/m68k/bvme6000/config.c
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
/*
|
||||
* arch/m68k/bvme6000/config.c
|
||||
*
|
||||
* Copyright (C) 1997 Richard Hirst [richard@sleepie.demon.co.uk]
|
||||
*
|
||||
* Based on:
|
||||
*
|
||||
* linux/amiga/config.c
|
||||
*
|
||||
* Copyright (C) 1993 Hamish Macdonald
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file README.legal in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/bcd.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/bootinfo-vme.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/rtc.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/bvme6000hw.h>
|
||||
|
||||
static void bvme6000_get_model(char *model);
|
||||
extern void bvme6000_sched_init(irq_handler_t handler);
|
||||
extern u32 bvme6000_gettimeoffset(void);
|
||||
extern int bvme6000_hwclk (int, struct rtc_time *);
|
||||
extern int bvme6000_set_clock_mmss (unsigned long);
|
||||
extern void bvme6000_reset (void);
|
||||
void bvme6000_set_vectors (void);
|
||||
|
||||
/* Save tick handler routine pointer, will point to xtime_update() in
|
||||
* kernel/timer/timekeeping.c, called via bvme6000_process_int() */
|
||||
|
||||
static irq_handler_t tick_handler;
|
||||
|
||||
|
||||
int __init bvme6000_parse_bootinfo(const struct bi_record *bi)
|
||||
{
|
||||
if (be16_to_cpu(bi->tag) == BI_VME_TYPE)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
void bvme6000_reset(void)
|
||||
{
|
||||
volatile PitRegsPtr pit = (PitRegsPtr)BVME_PIT_BASE;
|
||||
|
||||
printk ("\r\n\nCalled bvme6000_reset\r\n"
|
||||
"\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r");
|
||||
/* The string of returns is to delay the reset until the whole
|
||||
* message is output. */
|
||||
/* Enable the watchdog, via PIT port C bit 4 */
|
||||
|
||||
pit->pcddr |= 0x10; /* WDOG enable */
|
||||
|
||||
while(1)
|
||||
;
|
||||
}
|
||||
|
||||
static void bvme6000_get_model(char *model)
|
||||
{
|
||||
sprintf(model, "BVME%d000", m68k_cputype == CPU_68060 ? 6 : 4);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is called during kernel startup to initialize
|
||||
* the bvme6000 IRQ handling routines.
|
||||
*/
|
||||
static void __init bvme6000_init_IRQ(void)
|
||||
{
|
||||
m68k_setup_user_interrupt(VEC_USER, 192);
|
||||
}
|
||||
|
||||
void __init config_bvme6000(void)
|
||||
{
|
||||
volatile PitRegsPtr pit = (PitRegsPtr)BVME_PIT_BASE;
|
||||
|
||||
/* Board type is only set by newer versions of vmelilo/tftplilo */
|
||||
if (!vme_brdtype) {
|
||||
if (m68k_cputype == CPU_68060)
|
||||
vme_brdtype = VME_TYPE_BVME6000;
|
||||
else
|
||||
vme_brdtype = VME_TYPE_BVME4000;
|
||||
}
|
||||
#if 0
|
||||
/* Call bvme6000_set_vectors() so ABORT will work, along with BVMBug
|
||||
* debugger. Note trap_init() will splat the abort vector, but
|
||||
* bvme6000_init_IRQ() will put it back again. Hopefully. */
|
||||
|
||||
bvme6000_set_vectors();
|
||||
#endif
|
||||
|
||||
mach_max_dma_address = 0xffffffff;
|
||||
mach_sched_init = bvme6000_sched_init;
|
||||
mach_init_IRQ = bvme6000_init_IRQ;
|
||||
arch_gettimeoffset = bvme6000_gettimeoffset;
|
||||
mach_hwclk = bvme6000_hwclk;
|
||||
mach_set_clock_mmss = bvme6000_set_clock_mmss;
|
||||
mach_reset = bvme6000_reset;
|
||||
mach_get_model = bvme6000_get_model;
|
||||
|
||||
printk ("Board is %sconfigured as a System Controller\n",
|
||||
*config_reg_ptr & BVME_CONFIG_SW1 ? "" : "not ");
|
||||
|
||||
/* Now do the PIT configuration */
|
||||
|
||||
pit->pgcr = 0x00; /* Unidirectional 8 bit, no handshake for now */
|
||||
pit->psrr = 0x18; /* PIACK and PIRQ functions enabled */
|
||||
pit->pacr = 0x00; /* Sub Mode 00, H2 i/p, no DMA */
|
||||
pit->padr = 0x00; /* Just to be tidy! */
|
||||
pit->paddr = 0x00; /* All inputs for now (safest) */
|
||||
pit->pbcr = 0x80; /* Sub Mode 1x, H4 i/p, no DMA */
|
||||
pit->pbdr = 0xbc | (*config_reg_ptr & BVME_CONFIG_SW1 ? 0 : 0x40);
|
||||
/* PRI, SYSCON?, Level3, SCC clks from xtal */
|
||||
pit->pbddr = 0xf3; /* Mostly outputs */
|
||||
pit->pcdr = 0x01; /* PA transceiver disabled */
|
||||
pit->pcddr = 0x03; /* WDOG disable */
|
||||
|
||||
/* Disable snooping for Ethernet and VME accesses */
|
||||
|
||||
bvme_acr_addrctl = 0;
|
||||
}
|
||||
|
||||
|
||||
irqreturn_t bvme6000_abort_int (int irq, void *dev_id)
|
||||
{
|
||||
unsigned long *new = (unsigned long *)vectors;
|
||||
unsigned long *old = (unsigned long *)0xf8000000;
|
||||
|
||||
/* Wait for button release */
|
||||
while (*(volatile unsigned char *)BVME_LOCAL_IRQ_STAT & BVME_ABORT_STATUS)
|
||||
;
|
||||
|
||||
*(new+4) = *(old+4); /* Illegal instruction */
|
||||
*(new+9) = *(old+9); /* Trace */
|
||||
*(new+47) = *(old+47); /* Trap #15 */
|
||||
*(new+0x1f) = *(old+0x1f); /* ABORT switch */
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
||||
static irqreturn_t bvme6000_timer_int (int irq, void *dev_id)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr = rtc->msr & 0xc0;
|
||||
|
||||
rtc->msr = msr | 0x20; /* Ack the interrupt */
|
||||
|
||||
return tick_handler(irq, dev_id);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up the RTC timer 1 to mode 2, so T1 output toggles every 5ms
|
||||
* (40000 x 125ns). It will interrupt every 10ms, when T1 goes low.
|
||||
* So, when reading the elapsed time, you should read timer1,
|
||||
* subtract it from 39999, and then add 40000 if T1 is high.
|
||||
* That gives you the number of 125ns ticks in to the 10ms period,
|
||||
* so divide by 8 to get the microsecond result.
|
||||
*/
|
||||
|
||||
void bvme6000_sched_init (irq_handler_t timer_routine)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr = rtc->msr & 0xc0;
|
||||
|
||||
rtc->msr = 0; /* Ensure timer registers accessible */
|
||||
|
||||
tick_handler = timer_routine;
|
||||
if (request_irq(BVME_IRQ_RTC, bvme6000_timer_int, 0,
|
||||
"timer", bvme6000_timer_int))
|
||||
panic ("Couldn't register timer int");
|
||||
|
||||
rtc->t1cr_omr = 0x04; /* Mode 2, ext clk */
|
||||
rtc->t1msb = 39999 >> 8;
|
||||
rtc->t1lsb = 39999 & 0xff;
|
||||
rtc->irr_icr1 &= 0xef; /* Route timer 1 to INTR pin */
|
||||
rtc->msr = 0x40; /* Access int.cntrl, etc */
|
||||
rtc->pfr_icr0 = 0x80; /* Just timer 1 ints enabled */
|
||||
rtc->irr_icr1 = 0;
|
||||
rtc->t1cr_omr = 0x0a; /* INTR+T1 active lo, push-pull */
|
||||
rtc->t0cr_rtmr &= 0xdf; /* Stop timers in standby */
|
||||
rtc->msr = 0; /* Access timer 1 control */
|
||||
rtc->t1cr_omr = 0x05; /* Mode 2, ext clk, GO */
|
||||
|
||||
rtc->msr = msr;
|
||||
|
||||
if (request_irq(BVME_IRQ_ABORT, bvme6000_abort_int, 0,
|
||||
"abort", bvme6000_abort_int))
|
||||
panic ("Couldn't register abort int");
|
||||
}
|
||||
|
||||
|
||||
/* This is always executed with interrupts disabled. */
|
||||
|
||||
/*
|
||||
* NOTE: Don't accept any readings within 5us of rollover, as
|
||||
* the T1INT bit may be a little slow getting set. There is also
|
||||
* a fault in the chip, meaning that reads may produce invalid
|
||||
* results...
|
||||
*/
|
||||
|
||||
u32 bvme6000_gettimeoffset(void)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
volatile PitRegsPtr pit = (PitRegsPtr)BVME_PIT_BASE;
|
||||
unsigned char msr = rtc->msr & 0xc0;
|
||||
unsigned char t1int, t1op;
|
||||
u32 v = 800000, ov;
|
||||
|
||||
rtc->msr = 0; /* Ensure timer registers accessible */
|
||||
|
||||
do {
|
||||
ov = v;
|
||||
t1int = rtc->msr & 0x20;
|
||||
t1op = pit->pcdr & 0x04;
|
||||
rtc->t1cr_omr |= 0x40; /* Latch timer1 */
|
||||
v = rtc->t1msb << 8; /* Read timer1 */
|
||||
v |= rtc->t1lsb; /* Read timer1 */
|
||||
} while (t1int != (rtc->msr & 0x20) ||
|
||||
t1op != (pit->pcdr & 0x04) ||
|
||||
abs(ov-v) > 80 ||
|
||||
v > 39960);
|
||||
|
||||
v = 39999 - v;
|
||||
if (!t1op) /* If in second half cycle.. */
|
||||
v += 40000;
|
||||
v /= 8; /* Convert ticks to microseconds */
|
||||
if (t1int)
|
||||
v += 10000; /* Int pending, + 10ms */
|
||||
rtc->msr = msr;
|
||||
|
||||
return v * 1000;
|
||||
}
|
||||
|
||||
/*
|
||||
* Looks like op is non-zero for setting the clock, and zero for
|
||||
* reading the clock.
|
||||
*
|
||||
* struct hwclk_time {
|
||||
* unsigned sec; 0..59
|
||||
* unsigned min; 0..59
|
||||
* unsigned hour; 0..23
|
||||
* unsigned day; 1..31
|
||||
* unsigned mon; 0..11
|
||||
* unsigned year; 00...
|
||||
* int wday; 0..6, 0 is Sunday, -1 means unknown/don't set
|
||||
* };
|
||||
*/
|
||||
|
||||
int bvme6000_hwclk(int op, struct rtc_time *t)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr = rtc->msr & 0xc0;
|
||||
|
||||
rtc->msr = 0x40; /* Ensure clock and real-time-mode-register
|
||||
* are accessible */
|
||||
if (op)
|
||||
{ /* Write.... */
|
||||
rtc->t0cr_rtmr = t->tm_year%4;
|
||||
rtc->bcd_tenms = 0;
|
||||
rtc->bcd_sec = bin2bcd(t->tm_sec);
|
||||
rtc->bcd_min = bin2bcd(t->tm_min);
|
||||
rtc->bcd_hr = bin2bcd(t->tm_hour);
|
||||
rtc->bcd_dom = bin2bcd(t->tm_mday);
|
||||
rtc->bcd_mth = bin2bcd(t->tm_mon + 1);
|
||||
rtc->bcd_year = bin2bcd(t->tm_year%100);
|
||||
if (t->tm_wday >= 0)
|
||||
rtc->bcd_dow = bin2bcd(t->tm_wday+1);
|
||||
rtc->t0cr_rtmr = t->tm_year%4 | 0x08;
|
||||
}
|
||||
else
|
||||
{ /* Read.... */
|
||||
do {
|
||||
t->tm_sec = bcd2bin(rtc->bcd_sec);
|
||||
t->tm_min = bcd2bin(rtc->bcd_min);
|
||||
t->tm_hour = bcd2bin(rtc->bcd_hr);
|
||||
t->tm_mday = bcd2bin(rtc->bcd_dom);
|
||||
t->tm_mon = bcd2bin(rtc->bcd_mth)-1;
|
||||
t->tm_year = bcd2bin(rtc->bcd_year);
|
||||
if (t->tm_year < 70)
|
||||
t->tm_year += 100;
|
||||
t->tm_wday = bcd2bin(rtc->bcd_dow)-1;
|
||||
} while (t->tm_sec != bcd2bin(rtc->bcd_sec));
|
||||
}
|
||||
|
||||
rtc->msr = msr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the minutes and seconds from seconds value 'nowtime'. Fail if
|
||||
* clock is out by > 30 minutes. Logic lifted from atari code.
|
||||
* Algorithm is to wait for the 10ms register to change, and then to
|
||||
* wait a short while, and then set it.
|
||||
*/
|
||||
|
||||
int bvme6000_set_clock_mmss (unsigned long nowtime)
|
||||
{
|
||||
int retval = 0;
|
||||
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
|
||||
unsigned char rtc_minutes, rtc_tenms;
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr = rtc->msr & 0xc0;
|
||||
unsigned long flags;
|
||||
volatile int i;
|
||||
|
||||
rtc->msr = 0; /* Ensure clock accessible */
|
||||
rtc_minutes = bcd2bin (rtc->bcd_min);
|
||||
|
||||
if ((rtc_minutes < real_minutes
|
||||
? real_minutes - rtc_minutes
|
||||
: rtc_minutes - real_minutes) < 30)
|
||||
{
|
||||
local_irq_save(flags);
|
||||
rtc_tenms = rtc->bcd_tenms;
|
||||
while (rtc_tenms == rtc->bcd_tenms)
|
||||
;
|
||||
for (i = 0; i < 1000; i++)
|
||||
;
|
||||
rtc->bcd_min = bin2bcd(real_minutes);
|
||||
rtc->bcd_sec = bin2bcd(real_seconds);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
else
|
||||
retval = -1;
|
||||
|
||||
rtc->msr = msr;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
174
arch/m68k/bvme6000/rtc.c
Normal file
174
arch/m68k/bvme6000/rtc.c
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* Real Time Clock interface for Linux on the BVME6000
|
||||
*
|
||||
* Based on the PC driver by Paul Gortmaker.
|
||||
*/
|
||||
|
||||
#define RTC_VERSION "1.00"
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mc146818rtc.h> /* For struct rtc_time and ioctls, etc */
|
||||
#include <linux/bcd.h>
|
||||
#include <asm/bvme6000hw.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
/*
|
||||
* We sponge a minor off of the misc major. No need slurping
|
||||
* up another valuable major dev number for this. If you add
|
||||
* an ioctl, make sure you don't conflict with SPARC's RTC
|
||||
* ioctls.
|
||||
*/
|
||||
|
||||
static unsigned char days_in_mo[] =
|
||||
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
|
||||
static atomic_t rtc_status = ATOMIC_INIT(1);
|
||||
|
||||
static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
|
||||
unsigned char msr;
|
||||
unsigned long flags;
|
||||
struct rtc_time wtime;
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
switch (cmd) {
|
||||
case RTC_RD_TIME: /* Read the time/date from RTC */
|
||||
{
|
||||
local_irq_save(flags);
|
||||
/* Ensure clock and real-time-mode-register are accessible */
|
||||
msr = rtc->msr & 0xc0;
|
||||
rtc->msr = 0x40;
|
||||
memset(&wtime, 0, sizeof(struct rtc_time));
|
||||
do {
|
||||
wtime.tm_sec = bcd2bin(rtc->bcd_sec);
|
||||
wtime.tm_min = bcd2bin(rtc->bcd_min);
|
||||
wtime.tm_hour = bcd2bin(rtc->bcd_hr);
|
||||
wtime.tm_mday = bcd2bin(rtc->bcd_dom);
|
||||
wtime.tm_mon = bcd2bin(rtc->bcd_mth)-1;
|
||||
wtime.tm_year = bcd2bin(rtc->bcd_year);
|
||||
if (wtime.tm_year < 70)
|
||||
wtime.tm_year += 100;
|
||||
wtime.tm_wday = bcd2bin(rtc->bcd_dow)-1;
|
||||
} while (wtime.tm_sec != bcd2bin(rtc->bcd_sec));
|
||||
rtc->msr = msr;
|
||||
local_irq_restore(flags);
|
||||
return copy_to_user(argp, &wtime, sizeof wtime) ?
|
||||
-EFAULT : 0;
|
||||
}
|
||||
case RTC_SET_TIME: /* Set the RTC */
|
||||
{
|
||||
struct rtc_time rtc_tm;
|
||||
unsigned char mon, day, hrs, min, sec, leap_yr;
|
||||
unsigned int yrs;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EACCES;
|
||||
|
||||
if (copy_from_user(&rtc_tm, argp, sizeof(struct rtc_time)))
|
||||
return -EFAULT;
|
||||
|
||||
yrs = rtc_tm.tm_year;
|
||||
if (yrs < 1900)
|
||||
yrs += 1900;
|
||||
mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */
|
||||
day = rtc_tm.tm_mday;
|
||||
hrs = rtc_tm.tm_hour;
|
||||
min = rtc_tm.tm_min;
|
||||
sec = rtc_tm.tm_sec;
|
||||
|
||||
leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
|
||||
|
||||
if ((mon > 12) || (mon < 1) || (day == 0))
|
||||
return -EINVAL;
|
||||
|
||||
if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr)))
|
||||
return -EINVAL;
|
||||
|
||||
if ((hrs >= 24) || (min >= 60) || (sec >= 60))
|
||||
return -EINVAL;
|
||||
|
||||
if (yrs >= 2070)
|
||||
return -EINVAL;
|
||||
|
||||
local_irq_save(flags);
|
||||
/* Ensure clock and real-time-mode-register are accessible */
|
||||
msr = rtc->msr & 0xc0;
|
||||
rtc->msr = 0x40;
|
||||
|
||||
rtc->t0cr_rtmr = yrs%4;
|
||||
rtc->bcd_tenms = 0;
|
||||
rtc->bcd_sec = bin2bcd(sec);
|
||||
rtc->bcd_min = bin2bcd(min);
|
||||
rtc->bcd_hr = bin2bcd(hrs);
|
||||
rtc->bcd_dom = bin2bcd(day);
|
||||
rtc->bcd_mth = bin2bcd(mon);
|
||||
rtc->bcd_year = bin2bcd(yrs%100);
|
||||
if (rtc_tm.tm_wday >= 0)
|
||||
rtc->bcd_dow = bin2bcd(rtc_tm.tm_wday+1);
|
||||
rtc->t0cr_rtmr = yrs%4 | 0x08;
|
||||
|
||||
rtc->msr = msr;
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We enforce only one user at a time here with the open/close.
|
||||
*/
|
||||
static int rtc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
if (!atomic_dec_and_test(&rtc_status)) {
|
||||
atomic_inc(&rtc_status);
|
||||
return -EBUSY;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtc_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
atomic_inc(&rtc_status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The various file operations we support.
|
||||
*/
|
||||
|
||||
static const struct file_operations rtc_fops = {
|
||||
.unlocked_ioctl = rtc_ioctl,
|
||||
.open = rtc_open,
|
||||
.release = rtc_release,
|
||||
.llseek = noop_llseek,
|
||||
};
|
||||
|
||||
static struct miscdevice rtc_dev = {
|
||||
.minor = RTC_MINOR,
|
||||
.name = "rtc",
|
||||
.fops = &rtc_fops
|
||||
};
|
||||
|
||||
static int __init rtc_DP8570A_init(void)
|
||||
{
|
||||
if (!MACH_IS_BVME6000)
|
||||
return -ENODEV;
|
||||
|
||||
printk(KERN_INFO "DP8570A Real Time Clock Driver v%s\n", RTC_VERSION);
|
||||
return misc_register(&rtc_dev);
|
||||
}
|
||||
module_init(rtc_DP8570A_init);
|
||||
41
arch/m68k/coldfire/Makefile
Normal file
41
arch/m68k/coldfire/Makefile
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#
|
||||
# Makefile for the m68knommu kernel.
|
||||
#
|
||||
|
||||
#
|
||||
# If you want to play with the HW breakpoints then you will
|
||||
# need to add define this, which will give you a stack backtrace
|
||||
# on the console port whenever a DBG interrupt occurs. You have to
|
||||
# set up you HW breakpoints to trigger a DBG interrupt:
|
||||
#
|
||||
# ccflags-y := -DTRAP_DBG_INTERRUPT
|
||||
# asflags-y := -DTRAP_DBG_INTERRUPT
|
||||
#
|
||||
|
||||
asflags-$(CONFIG_FULLDEBUG) := -DDEBUGGER_COMPATIBLE_CACHE=1
|
||||
|
||||
obj-$(CONFIG_COLDFIRE) += cache.o clk.o device.o dma.o entry.o vectors.o
|
||||
obj-$(CONFIG_M5206) += m5206.o timers.o intc.o reset.o
|
||||
obj-$(CONFIG_M5206e) += m5206.o timers.o intc.o reset.o
|
||||
obj-$(CONFIG_M520x) += m520x.o pit.o intc-simr.o reset.o
|
||||
obj-$(CONFIG_M523x) += m523x.o pit.o dma_timer.o intc-2.o reset.o
|
||||
obj-$(CONFIG_M5249) += m5249.o timers.o intc.o intc-5249.o reset.o
|
||||
obj-$(CONFIG_M525x) += m525x.o timers.o intc.o intc-525x.o reset.o
|
||||
obj-$(CONFIG_M527x) += m527x.o pit.o intc-2.o reset.o
|
||||
obj-$(CONFIG_M5272) += m5272.o intc-5272.o timers.o
|
||||
obj-$(CONFIG_M528x) += m528x.o pit.o intc-2.o reset.o
|
||||
obj-$(CONFIG_M5307) += m5307.o timers.o intc.o reset.o
|
||||
obj-$(CONFIG_M53xx) += m53xx.o timers.o intc-simr.o reset.o
|
||||
obj-$(CONFIG_M5407) += m5407.o timers.o intc.o reset.o
|
||||
obj-$(CONFIG_M54xx) += m54xx.o sltimers.o intc-2.o
|
||||
obj-$(CONFIG_M5441x) += m5441x.o pit.o intc-simr.o reset.o
|
||||
|
||||
obj-$(CONFIG_NETtel) += nettel.o
|
||||
obj-$(CONFIG_CLEOPATRA) += nettel.o
|
||||
obj-$(CONFIG_FIREBEE) += firebee.o
|
||||
obj-$(CONFIG_MCF8390) += mcf8390.o
|
||||
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
|
||||
obj-y += gpio.o
|
||||
extra-y := head.o
|
||||
48
arch/m68k/coldfire/cache.c
Normal file
48
arch/m68k/coldfire/cache.c
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* cache.c -- general ColdFire Cache maintenance code
|
||||
*
|
||||
* Copyright (C) 2010, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/***************************************************************************/
|
||||
#ifdef CACHE_PUSH
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Use cpushl to push all dirty cache lines back to memory.
|
||||
* Older versions of GAS don't seem to know how to generate the
|
||||
* ColdFire cpushl instruction... Oh well, bit stuff it for now.
|
||||
*/
|
||||
|
||||
void mcf_cache_push(void)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"clrl %%d0\n\t"
|
||||
"1:\n\t"
|
||||
"movel %%d0,%%a0\n\t"
|
||||
"2:\n\t"
|
||||
".word 0xf468\n\t"
|
||||
"addl %0,%%a0\n\t"
|
||||
"cmpl %1,%%a0\n\t"
|
||||
"blt 2b\n\t"
|
||||
"addql #1,%%d0\n\t"
|
||||
"cmpil %2,%%d0\n\t"
|
||||
"bne 1b\n\t"
|
||||
: /* No output */
|
||||
: "i" (CACHE_LINE_SIZE),
|
||||
"i" (DCACHE_SIZE / CACHE_WAYS),
|
||||
"i" (CACHE_WAYS)
|
||||
: "d0", "a0" );
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
#endif /* CACHE_PUSH */
|
||||
/***************************************************************************/
|
||||
124
arch/m68k/coldfire/clk.c
Normal file
124
arch/m68k/coldfire/clk.c
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* clk.c -- general ColdFire CPU kernel clk handling
|
||||
*
|
||||
* Copyright (C) 2009, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
static DEFINE_SPINLOCK(clk_lock);
|
||||
|
||||
#ifdef MCFPM_PPMCR0
|
||||
/*
|
||||
* For more advanced ColdFire parts that have clocks that can be enabled
|
||||
* we supply enable/disable functions. These must properly define their
|
||||
* clocks in their platform specific code.
|
||||
*/
|
||||
void __clk_init_enabled(struct clk *clk)
|
||||
{
|
||||
clk->enabled = 1;
|
||||
clk->clk_ops->enable(clk);
|
||||
}
|
||||
|
||||
void __clk_init_disabled(struct clk *clk)
|
||||
{
|
||||
clk->enabled = 0;
|
||||
clk->clk_ops->disable(clk);
|
||||
}
|
||||
|
||||
static void __clk_enable0(struct clk *clk)
|
||||
{
|
||||
__raw_writeb(clk->slot, MCFPM_PPMCR0);
|
||||
}
|
||||
|
||||
static void __clk_disable0(struct clk *clk)
|
||||
{
|
||||
__raw_writeb(clk->slot, MCFPM_PPMSR0);
|
||||
}
|
||||
|
||||
struct clk_ops clk_ops0 = {
|
||||
.enable = __clk_enable0,
|
||||
.disable = __clk_disable0,
|
||||
};
|
||||
|
||||
#ifdef MCFPM_PPMCR1
|
||||
static void __clk_enable1(struct clk *clk)
|
||||
{
|
||||
__raw_writeb(clk->slot, MCFPM_PPMCR1);
|
||||
}
|
||||
|
||||
static void __clk_disable1(struct clk *clk)
|
||||
{
|
||||
__raw_writeb(clk->slot, MCFPM_PPMSR1);
|
||||
}
|
||||
|
||||
struct clk_ops clk_ops1 = {
|
||||
.enable = __clk_enable1,
|
||||
.disable = __clk_disable1,
|
||||
};
|
||||
#endif /* MCFPM_PPMCR1 */
|
||||
#endif /* MCFPM_PPMCR0 */
|
||||
|
||||
struct clk *clk_get(struct device *dev, const char *id)
|
||||
{
|
||||
const char *clk_name = dev ? dev_name(dev) : id ? id : NULL;
|
||||
struct clk *clk;
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; (clk = mcf_clks[i]) != NULL; ++i)
|
||||
if (!strcmp(clk->name, clk_name))
|
||||
return clk;
|
||||
pr_warn("clk_get: didn't find clock %s\n", clk_name);
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get);
|
||||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&clk_lock, flags);
|
||||
if ((clk->enabled++ == 0) && clk->clk_ops)
|
||||
clk->clk_ops->enable(clk);
|
||||
spin_unlock_irqrestore(&clk_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_enable);
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&clk_lock, flags);
|
||||
if ((--clk->enabled == 0) && clk->clk_ops)
|
||||
clk->clk_ops->disable(clk);
|
||||
spin_unlock_irqrestore(&clk_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_disable);
|
||||
|
||||
void clk_put(struct clk *clk)
|
||||
{
|
||||
if (clk->enabled != 0)
|
||||
pr_warn("clk_put %s still enabled\n", clk->name);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_put);
|
||||
|
||||
unsigned long clk_get_rate(struct clk *clk)
|
||||
{
|
||||
return clk->rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
/***************************************************************************/
|
||||
369
arch/m68k/coldfire/device.c
Normal file
369
arch/m68k/coldfire/device.c
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
/*
|
||||
* device.c -- common ColdFire SoC device support
|
||||
*
|
||||
* (C) Copyright 2011, Greg Ungerer <gerg@uclinux.org>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/fec.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfqspi.h>
|
||||
|
||||
/*
|
||||
* All current ColdFire parts contain from 2, 3, 4 or 10 UARTS.
|
||||
*/
|
||||
static struct mcf_platform_uart mcf_uart_platform_data[] = {
|
||||
{
|
||||
.mapbase = MCFUART_BASE0,
|
||||
.irq = MCF_IRQ_UART0,
|
||||
},
|
||||
{
|
||||
.mapbase = MCFUART_BASE1,
|
||||
.irq = MCF_IRQ_UART1,
|
||||
},
|
||||
#ifdef MCFUART_BASE2
|
||||
{
|
||||
.mapbase = MCFUART_BASE2,
|
||||
.irq = MCF_IRQ_UART2,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE3
|
||||
{
|
||||
.mapbase = MCFUART_BASE3,
|
||||
.irq = MCF_IRQ_UART3,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE4
|
||||
{
|
||||
.mapbase = MCFUART_BASE4,
|
||||
.irq = MCF_IRQ_UART4,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE5
|
||||
{
|
||||
.mapbase = MCFUART_BASE5,
|
||||
.irq = MCF_IRQ_UART5,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE6
|
||||
{
|
||||
.mapbase = MCFUART_BASE6,
|
||||
.irq = MCF_IRQ_UART6,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE7
|
||||
{
|
||||
.mapbase = MCFUART_BASE7,
|
||||
.irq = MCF_IRQ_UART7,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE8
|
||||
{
|
||||
.mapbase = MCFUART_BASE8,
|
||||
.irq = MCF_IRQ_UART8,
|
||||
},
|
||||
#endif
|
||||
#ifdef MCFUART_BASE9
|
||||
{
|
||||
.mapbase = MCFUART_BASE9,
|
||||
.irq = MCF_IRQ_UART9,
|
||||
},
|
||||
#endif
|
||||
{ },
|
||||
};
|
||||
|
||||
static struct platform_device mcf_uart = {
|
||||
.name = "mcfuart",
|
||||
.id = 0,
|
||||
.dev.platform_data = mcf_uart_platform_data,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FEC
|
||||
|
||||
#ifdef CONFIG_M5441x
|
||||
#define FEC_NAME "enet-fec"
|
||||
static struct fec_platform_data fec_pdata = {
|
||||
.phy = PHY_INTERFACE_MODE_RMII,
|
||||
};
|
||||
#define FEC_PDATA (&fec_pdata)
|
||||
#else
|
||||
#define FEC_NAME "fec"
|
||||
#define FEC_PDATA NULL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some ColdFire cores contain the Fast Ethernet Controller (FEC)
|
||||
* block. It is Freescale's own hardware block. Some ColdFires
|
||||
* have 2 of these.
|
||||
*/
|
||||
static struct resource mcf_fec0_resources[] = {
|
||||
{
|
||||
.start = MCFFEC_BASE0,
|
||||
.end = MCFFEC_BASE0 + MCFFEC_SIZE0 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECRX0,
|
||||
.end = MCF_IRQ_FECRX0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECTX0,
|
||||
.end = MCF_IRQ_FECTX0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECENTC0,
|
||||
.end = MCF_IRQ_FECENTC0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device mcf_fec0 = {
|
||||
.name = FEC_NAME,
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(mcf_fec0_resources),
|
||||
.resource = mcf_fec0_resources,
|
||||
.dev.platform_data = FEC_PDATA,
|
||||
};
|
||||
|
||||
#ifdef MCFFEC_BASE1
|
||||
static struct resource mcf_fec1_resources[] = {
|
||||
{
|
||||
.start = MCFFEC_BASE1,
|
||||
.end = MCFFEC_BASE1 + MCFFEC_SIZE1 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECRX1,
|
||||
.end = MCF_IRQ_FECRX1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECTX1,
|
||||
.end = MCF_IRQ_FECTX1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_FECENTC1,
|
||||
.end = MCF_IRQ_FECENTC1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device mcf_fec1 = {
|
||||
.name = FEC_NAME,
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(mcf_fec1_resources),
|
||||
.resource = mcf_fec1_resources,
|
||||
.dev.platform_data = FEC_PDATA,
|
||||
};
|
||||
#endif /* MCFFEC_BASE1 */
|
||||
#endif /* CONFIG_FEC */
|
||||
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/*
|
||||
* The ColdFire QSPI module is an SPI protocol hardware block used
|
||||
* on a number of different ColdFire CPUs.
|
||||
*/
|
||||
static struct resource mcf_qspi_resources[] = {
|
||||
{
|
||||
.start = MCFQSPI_BASE,
|
||||
.end = MCFQSPI_BASE + MCFQSPI_SIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_QSPI,
|
||||
.end = MCF_IRQ_QSPI,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static int mcf_cs_setup(struct mcfqspi_cs_control *cs_control)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = gpio_request(MCFQSPI_CS0, "MCFQSPI_CS0");
|
||||
if (status) {
|
||||
pr_debug("gpio_request for MCFQSPI_CS0 failed\n");
|
||||
goto fail0;
|
||||
}
|
||||
status = gpio_direction_output(MCFQSPI_CS0, 1);
|
||||
if (status) {
|
||||
pr_debug("gpio_direction_output for MCFQSPI_CS0 failed\n");
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
status = gpio_request(MCFQSPI_CS1, "MCFQSPI_CS1");
|
||||
if (status) {
|
||||
pr_debug("gpio_request for MCFQSPI_CS1 failed\n");
|
||||
goto fail1;
|
||||
}
|
||||
status = gpio_direction_output(MCFQSPI_CS1, 1);
|
||||
if (status) {
|
||||
pr_debug("gpio_direction_output for MCFQSPI_CS1 failed\n");
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
status = gpio_request(MCFQSPI_CS2, "MCFQSPI_CS2");
|
||||
if (status) {
|
||||
pr_debug("gpio_request for MCFQSPI_CS2 failed\n");
|
||||
goto fail2;
|
||||
}
|
||||
status = gpio_direction_output(MCFQSPI_CS2, 1);
|
||||
if (status) {
|
||||
pr_debug("gpio_direction_output for MCFQSPI_CS2 failed\n");
|
||||
goto fail3;
|
||||
}
|
||||
|
||||
#ifdef MCFQSPI_CS3
|
||||
status = gpio_request(MCFQSPI_CS3, "MCFQSPI_CS3");
|
||||
if (status) {
|
||||
pr_debug("gpio_request for MCFQSPI_CS3 failed\n");
|
||||
goto fail3;
|
||||
}
|
||||
status = gpio_direction_output(MCFQSPI_CS3, 1);
|
||||
if (status) {
|
||||
pr_debug("gpio_direction_output for MCFQSPI_CS3 failed\n");
|
||||
gpio_free(MCFQSPI_CS3);
|
||||
goto fail3;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
fail3:
|
||||
gpio_free(MCFQSPI_CS2);
|
||||
fail2:
|
||||
gpio_free(MCFQSPI_CS1);
|
||||
fail1:
|
||||
gpio_free(MCFQSPI_CS0);
|
||||
fail0:
|
||||
return status;
|
||||
}
|
||||
|
||||
static void mcf_cs_teardown(struct mcfqspi_cs_control *cs_control)
|
||||
{
|
||||
#ifdef MCFQSPI_CS3
|
||||
gpio_free(MCFQSPI_CS3);
|
||||
#endif
|
||||
gpio_free(MCFQSPI_CS2);
|
||||
gpio_free(MCFQSPI_CS1);
|
||||
gpio_free(MCFQSPI_CS0);
|
||||
}
|
||||
|
||||
static void mcf_cs_select(struct mcfqspi_cs_control *cs_control,
|
||||
u8 chip_select, bool cs_high)
|
||||
{
|
||||
switch (chip_select) {
|
||||
case 0:
|
||||
gpio_set_value(MCFQSPI_CS0, cs_high);
|
||||
break;
|
||||
case 1:
|
||||
gpio_set_value(MCFQSPI_CS1, cs_high);
|
||||
break;
|
||||
case 2:
|
||||
gpio_set_value(MCFQSPI_CS2, cs_high);
|
||||
break;
|
||||
#ifdef MCFQSPI_CS3
|
||||
case 3:
|
||||
gpio_set_value(MCFQSPI_CS3, cs_high);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void mcf_cs_deselect(struct mcfqspi_cs_control *cs_control,
|
||||
u8 chip_select, bool cs_high)
|
||||
{
|
||||
switch (chip_select) {
|
||||
case 0:
|
||||
gpio_set_value(MCFQSPI_CS0, !cs_high);
|
||||
break;
|
||||
case 1:
|
||||
gpio_set_value(MCFQSPI_CS1, !cs_high);
|
||||
break;
|
||||
case 2:
|
||||
gpio_set_value(MCFQSPI_CS2, !cs_high);
|
||||
break;
|
||||
#ifdef MCFQSPI_CS3
|
||||
case 3:
|
||||
gpio_set_value(MCFQSPI_CS3, !cs_high);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static struct mcfqspi_cs_control mcf_cs_control = {
|
||||
.setup = mcf_cs_setup,
|
||||
.teardown = mcf_cs_teardown,
|
||||
.select = mcf_cs_select,
|
||||
.deselect = mcf_cs_deselect,
|
||||
};
|
||||
|
||||
static struct mcfqspi_platform_data mcf_qspi_data = {
|
||||
.bus_num = 0,
|
||||
.num_chipselect = 4,
|
||||
.cs_control = &mcf_cs_control,
|
||||
};
|
||||
|
||||
static struct platform_device mcf_qspi = {
|
||||
.name = "mcfqspi",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(mcf_qspi_resources),
|
||||
.resource = mcf_qspi_resources,
|
||||
.dev.platform_data = &mcf_qspi_data,
|
||||
};
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
|
||||
static struct platform_device *mcf_devices[] __initdata = {
|
||||
&mcf_uart,
|
||||
#ifdef CONFIG_FEC
|
||||
&mcf_fec0,
|
||||
#ifdef MCFFEC_BASE1
|
||||
&mcf_fec1,
|
||||
#endif
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
&mcf_qspi,
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Some ColdFire UARTs let you set the IRQ line to use.
|
||||
*/
|
||||
static void __init mcf_uart_set_irq(void)
|
||||
{
|
||||
#ifdef MCFUART_UIVR
|
||||
/* UART0 interrupt setup */
|
||||
writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCFSIM_UART1ICR);
|
||||
writeb(MCF_IRQ_UART0, MCFUART_BASE0 + MCFUART_UIVR);
|
||||
mcf_mapirq2imr(MCF_IRQ_UART0, MCFINTC_UART0);
|
||||
|
||||
/* UART1 interrupt setup */
|
||||
writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCFSIM_UART2ICR);
|
||||
writeb(MCF_IRQ_UART1, MCFUART_BASE1 + MCFUART_UIVR);
|
||||
mcf_mapirq2imr(MCF_IRQ_UART1, MCFINTC_UART1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int __init mcf_init_devices(void)
|
||||
{
|
||||
mcf_uart_set_irq();
|
||||
platform_add_devices(mcf_devices, ARRAY_SIZE(mcf_devices));
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(mcf_init_devices);
|
||||
|
||||
42
arch/m68k/coldfire/dma.c
Normal file
42
arch/m68k/coldfire/dma.c
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* dma.c -- Freescale ColdFire DMA support
|
||||
*
|
||||
* Copyright (C) 2007, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfdma.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* DMA channel base address table.
|
||||
*/
|
||||
unsigned int dma_base_addr[MAX_M68K_DMA_CHANNELS] = {
|
||||
#ifdef MCFDMA_BASE0
|
||||
MCFDMA_BASE0,
|
||||
#endif
|
||||
#ifdef MCFDMA_BASE1
|
||||
MCFDMA_BASE1,
|
||||
#endif
|
||||
#ifdef MCFDMA_BASE2
|
||||
MCFDMA_BASE2,
|
||||
#endif
|
||||
#ifdef MCFDMA_BASE3
|
||||
MCFDMA_BASE3,
|
||||
#endif
|
||||
};
|
||||
EXPORT_SYMBOL(dma_base_addr);
|
||||
|
||||
unsigned int dma_device_address[MAX_M68K_DMA_CHANNELS];
|
||||
EXPORT_SYMBOL(dma_device_address);
|
||||
|
||||
/***************************************************************************/
|
||||
81
arch/m68k/coldfire/dma_timer.c
Normal file
81
arch/m68k/coldfire/dma_timer.c
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* dma_timer.c -- Freescale ColdFire DMA Timer.
|
||||
*
|
||||
* Copyright (C) 2007, Benedikt Spranger <b.spranger@linutronix.de>
|
||||
* Copyright (C) 2008. Sebastian Siewior, Linutronix
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfpit.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
#define DMA_TIMER_0 (0x00)
|
||||
#define DMA_TIMER_1 (0x40)
|
||||
#define DMA_TIMER_2 (0x80)
|
||||
#define DMA_TIMER_3 (0xc0)
|
||||
|
||||
#define DTMR0 (MCF_IPSBAR + DMA_TIMER_0 + 0x400)
|
||||
#define DTXMR0 (MCF_IPSBAR + DMA_TIMER_0 + 0x402)
|
||||
#define DTER0 (MCF_IPSBAR + DMA_TIMER_0 + 0x403)
|
||||
#define DTRR0 (MCF_IPSBAR + DMA_TIMER_0 + 0x404)
|
||||
#define DTCR0 (MCF_IPSBAR + DMA_TIMER_0 + 0x408)
|
||||
#define DTCN0 (MCF_IPSBAR + DMA_TIMER_0 + 0x40c)
|
||||
|
||||
#define DMA_FREQ ((MCF_CLK / 2) / 16)
|
||||
|
||||
/* DTMR */
|
||||
#define DMA_DTMR_RESTART (1 << 3)
|
||||
#define DMA_DTMR_CLK_DIV_1 (1 << 1)
|
||||
#define DMA_DTMR_CLK_DIV_16 (2 << 1)
|
||||
#define DMA_DTMR_ENABLE (1 << 0)
|
||||
|
||||
static cycle_t cf_dt_get_cycles(struct clocksource *cs)
|
||||
{
|
||||
return __raw_readl(DTCN0);
|
||||
}
|
||||
|
||||
static struct clocksource clocksource_cf_dt = {
|
||||
.name = "coldfire_dma_timer",
|
||||
.rating = 200,
|
||||
.read = cf_dt_get_cycles,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
static int __init init_cf_dt_clocksource(void)
|
||||
{
|
||||
/*
|
||||
* We setup DMA timer 0 in free run mode. This incrementing counter is
|
||||
* used as a highly precious clock source. With MCF_CLOCK = 150 MHz we
|
||||
* get a ~213 ns resolution and the 32bit register will overflow almost
|
||||
* every 15 minutes.
|
||||
*/
|
||||
__raw_writeb(0x00, DTXMR0);
|
||||
__raw_writeb(0x00, DTER0);
|
||||
__raw_writel(0x00000000, DTRR0);
|
||||
__raw_writew(DMA_DTMR_CLK_DIV_16 | DMA_DTMR_ENABLE, DTMR0);
|
||||
return clocksource_register_hz(&clocksource_cf_dt, DMA_FREQ);
|
||||
}
|
||||
|
||||
arch_initcall(init_cf_dt_clocksource);
|
||||
|
||||
#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
|
||||
#define CYC2NS_SCALE ((1000000 << CYC2NS_SCALE_FACTOR) / (DMA_FREQ / 1000))
|
||||
|
||||
static unsigned long long cycles2ns(unsigned long cycl)
|
||||
{
|
||||
return (unsigned long long) ((unsigned long long)cycl *
|
||||
CYC2NS_SCALE) >> CYC2NS_SCALE_FACTOR;
|
||||
}
|
||||
|
||||
unsigned long long sched_clock(void)
|
||||
{
|
||||
unsigned long cycl = __raw_readl(DTCN0);
|
||||
|
||||
return cycles2ns(cycl);
|
||||
}
|
||||
203
arch/m68k/coldfire/entry.S
Normal file
203
arch/m68k/coldfire/entry.S
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
* entry.S -- interrupt and exception processing for ColdFire
|
||||
*
|
||||
* Copyright (C) 1999-2007, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>,
|
||||
* Kenneth Albanowski <kjahds@kjahds.com>,
|
||||
* Copyright (C) 2000 Lineo Inc. (www.lineo.com)
|
||||
* Copyright (C) 2004-2006 Macq Electronique SA. (www.macqel.com)
|
||||
*
|
||||
* Based on:
|
||||
*
|
||||
* linux/arch/m68k/kernel/entry.S
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file README.legal in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Linux/m68k support by Hamish Macdonald
|
||||
*
|
||||
* 68060 fixes by Jesper Skov
|
||||
* ColdFire support by Greg Ungerer (gerg@snapgear.com)
|
||||
* 5307 fixes by David W. Miller
|
||||
* linux 2.4 support David McCullough <davidm@snapgear.com>
|
||||
* Bug, speed and maintainability fixes by Philippe De Muyter <phdm@macqel.be>
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/entry.h>
|
||||
|
||||
#ifdef CONFIG_COLDFIRE_SW_A7
|
||||
/*
|
||||
* Define software copies of the supervisor and user stack pointers.
|
||||
*/
|
||||
.bss
|
||||
sw_ksp:
|
||||
.long 0
|
||||
sw_usp:
|
||||
.long 0
|
||||
#endif /* CONFIG_COLDFIRE_SW_A7 */
|
||||
|
||||
.text
|
||||
|
||||
.globl system_call
|
||||
.globl resume
|
||||
.globl ret_from_exception
|
||||
.globl ret_from_signal
|
||||
.globl sys_call_table
|
||||
.globl inthandler
|
||||
|
||||
enosys:
|
||||
mov.l #sys_ni_syscall,%d3
|
||||
bra 1f
|
||||
|
||||
ENTRY(system_call)
|
||||
SAVE_ALL_SYS
|
||||
move #0x2000,%sr /* enable intrs again */
|
||||
GET_CURRENT(%d2)
|
||||
|
||||
cmpl #NR_syscalls,%d0
|
||||
jcc enosys
|
||||
lea sys_call_table,%a0
|
||||
lsll #2,%d0 /* movel %a0@(%d0:l:4),%d3 */
|
||||
movel %a0@(%d0),%d3
|
||||
jeq enosys
|
||||
|
||||
1:
|
||||
movel %sp,%d2 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d2 /* at start of kernel stack */
|
||||
movel %d2,%a0
|
||||
movel %a0@,%a1 /* save top of frame */
|
||||
movel %sp,%a1@(TASK_THREAD+THREAD_ESP0)
|
||||
btst #(TIF_SYSCALL_TRACE%8),%a0@(TINFO_FLAGS+(31-TIF_SYSCALL_TRACE)/8)
|
||||
bnes 1f
|
||||
|
||||
movel %d3,%a0
|
||||
jbsr %a0@
|
||||
movel %d0,%sp@(PT_OFF_D0) /* save the return value */
|
||||
jra ret_from_exception
|
||||
1:
|
||||
movel #-ENOSYS,%d2 /* strace needs -ENOSYS in PT_OFF_D0 */
|
||||
movel %d2,PT_OFF_D0(%sp) /* on syscall entry */
|
||||
subql #4,%sp
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_enter
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
movel %d3,%a0
|
||||
jbsr %a0@
|
||||
movel %d0,%sp@(PT_OFF_D0) /* save the return value */
|
||||
subql #4,%sp /* dummy return address */
|
||||
SAVE_SWITCH_STACK
|
||||
jbsr syscall_trace_leave
|
||||
|
||||
ret_from_signal:
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
|
||||
ret_from_exception:
|
||||
move #0x2700,%sr /* disable intrs */
|
||||
btst #5,%sp@(PT_OFF_SR) /* check if returning to kernel */
|
||||
jeq Luser_return /* if so, skip resched, signals */
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1 /* at base of kernel stack */
|
||||
movel %d1,%a0
|
||||
movel %a0@(TINFO_FLAGS),%d1 /* get thread_info->flags */
|
||||
andl #(1<<TIF_NEED_RESCHED),%d1
|
||||
jeq Lkernel_return
|
||||
|
||||
movel %a0@(TINFO_PREEMPT),%d1
|
||||
cmpl #0,%d1
|
||||
jne Lkernel_return
|
||||
|
||||
pea Lkernel_return
|
||||
jmp preempt_schedule_irq /* preempt the kernel */
|
||||
#endif
|
||||
|
||||
Lkernel_return:
|
||||
moveml %sp@,%d1-%d5/%a0-%a2
|
||||
lea %sp@(32),%sp /* space for 8 regs */
|
||||
movel %sp@+,%d0
|
||||
addql #4,%sp /* orig d0 */
|
||||
addl %sp@+,%sp /* stk adj */
|
||||
rte
|
||||
|
||||
Luser_return:
|
||||
movel %sp,%d1 /* get thread_info pointer */
|
||||
andl #-THREAD_SIZE,%d1 /* at base of kernel stack */
|
||||
movel %d1,%a0
|
||||
moveb %a0@(TINFO_FLAGS+3),%d1 /* thread_info->flags (low 8 bits) */
|
||||
jne Lwork_to_do /* still work to do */
|
||||
|
||||
Lreturn:
|
||||
RESTORE_USER
|
||||
|
||||
Lwork_to_do:
|
||||
movel %a0@(TINFO_FLAGS),%d1 /* get thread_info->flags */
|
||||
move #0x2000,%sr /* enable intrs again */
|
||||
btst #TIF_NEED_RESCHED,%d1
|
||||
jne reschedule
|
||||
|
||||
Lsignal_return:
|
||||
subql #4,%sp /* dummy return address */
|
||||
SAVE_SWITCH_STACK
|
||||
pea %sp@(SWITCH_STACK_SIZE)
|
||||
jsr do_notify_resume
|
||||
addql #4,%sp
|
||||
RESTORE_SWITCH_STACK
|
||||
addql #4,%sp
|
||||
jmp Luser_return
|
||||
|
||||
/*
|
||||
* This is the generic interrupt handler (for all hardware interrupt
|
||||
* sources). Calls up to high level code to do all the work.
|
||||
*/
|
||||
ENTRY(inthandler)
|
||||
SAVE_ALL_INT
|
||||
GET_CURRENT(%d2)
|
||||
|
||||
movew %sp@(PT_OFF_FORMATVEC),%d0 /* put exception # in d0 */
|
||||
andl #0x03fc,%d0 /* mask out vector only */
|
||||
|
||||
movel %sp,%sp@- /* push regs arg */
|
||||
lsrl #2,%d0 /* calculate real vector # */
|
||||
movel %d0,%sp@- /* push vector number */
|
||||
jbsr do_IRQ /* call high level irq handler */
|
||||
lea %sp@(8),%sp /* pop args off stack */
|
||||
|
||||
bra ret_from_exception
|
||||
|
||||
/*
|
||||
* Beware - when entering resume, prev (the current task) is
|
||||
* in a0, next (the new task) is in a1, so don't change these
|
||||
* registers until their contents are no longer needed.
|
||||
*/
|
||||
ENTRY(resume)
|
||||
movew %sr,%d1 /* save current status */
|
||||
movew %d1,%a0@(TASK_THREAD+THREAD_SR)
|
||||
movel %a0,%d1 /* get prev thread in d1 */
|
||||
SAVE_SWITCH_STACK
|
||||
movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack pointer */
|
||||
RDUSP /* movel %usp,%a3 */
|
||||
movel %a3,%a0@(TASK_THREAD+THREAD_USP) /* save thread user stack */
|
||||
#ifdef CONFIG_MMU
|
||||
movel %a1,%a2 /* set new current */
|
||||
#endif
|
||||
movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore thread user stack */
|
||||
WRUSP /* movel %a3,%usp */
|
||||
movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new kernel stack */
|
||||
movew %a1@(TASK_THREAD+THREAD_SR),%d7 /* restore new status */
|
||||
movew %d7,%sr
|
||||
RESTORE_SWITCH_STACK
|
||||
rts
|
||||
|
||||
86
arch/m68k/coldfire/firebee.c
Normal file
86
arch/m68k/coldfire/firebee.c
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* firebee.c -- extra startup code support for the FireBee boards
|
||||
*
|
||||
* Copyright (C) 2011, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* 8MB of NOR flash fitted to the FireBee board.
|
||||
*/
|
||||
#define FLASH_PHYS_ADDR 0xe0000000 /* Physical address of flash */
|
||||
#define FLASH_PHYS_SIZE 0x00800000 /* Size of flash */
|
||||
|
||||
#define PART_BOOT_START 0x00000000 /* Start at bottom of flash */
|
||||
#define PART_BOOT_SIZE 0x00040000 /* 256k in size */
|
||||
#define PART_IMAGE_START 0x00040000 /* Start after boot loader */
|
||||
#define PART_IMAGE_SIZE 0x006c0000 /* Most of flash */
|
||||
#define PART_FPGA_START 0x00700000 /* Start at offset 7MB */
|
||||
#define PART_FPGA_SIZE 0x00100000 /* 1MB in size */
|
||||
|
||||
static struct mtd_partition firebee_flash_parts[] = {
|
||||
{
|
||||
.name = "dBUG",
|
||||
.offset = PART_BOOT_START,
|
||||
.size = PART_BOOT_SIZE,
|
||||
},
|
||||
{
|
||||
.name = "FPGA",
|
||||
.offset = PART_FPGA_START,
|
||||
.size = PART_FPGA_SIZE,
|
||||
},
|
||||
{
|
||||
.name = "image",
|
||||
.offset = PART_IMAGE_START,
|
||||
.size = PART_IMAGE_SIZE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct physmap_flash_data firebee_flash_data = {
|
||||
.width = 2,
|
||||
.nr_parts = ARRAY_SIZE(firebee_flash_parts),
|
||||
.parts = firebee_flash_parts,
|
||||
};
|
||||
|
||||
static struct resource firebee_flash_resource = {
|
||||
.start = FLASH_PHYS_ADDR,
|
||||
.end = FLASH_PHYS_ADDR + FLASH_PHYS_SIZE,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device firebee_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &firebee_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &firebee_flash_resource,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static int __init init_firebee(void)
|
||||
{
|
||||
platform_device_register(&firebee_flash);
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(init_firebee);
|
||||
|
||||
/***************************************************************************/
|
||||
186
arch/m68k/coldfire/gpio.c
Normal file
186
arch/m68k/coldfire/gpio.c
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* Coldfire generic GPIO support.
|
||||
*
|
||||
* (C) Copyright 2009, Steven King <sfking@fdwdc.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfgpio.h>
|
||||
|
||||
int __mcfgpio_get_value(unsigned gpio)
|
||||
{
|
||||
return mcfgpio_read(__mcfgpio_ppdr(gpio)) & mcfgpio_bit(gpio);
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_get_value);
|
||||
|
||||
void __mcfgpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
if (gpio < MCFGPIO_SCR_START) {
|
||||
unsigned long flags;
|
||||
MCFGPIO_PORTTYPE data;
|
||||
|
||||
local_irq_save(flags);
|
||||
data = mcfgpio_read(__mcfgpio_podr(gpio));
|
||||
if (value)
|
||||
data |= mcfgpio_bit(gpio);
|
||||
else
|
||||
data &= ~mcfgpio_bit(gpio);
|
||||
mcfgpio_write(data, __mcfgpio_podr(gpio));
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
if (value)
|
||||
mcfgpio_write(mcfgpio_bit(gpio),
|
||||
MCFGPIO_SETR_PORT(gpio));
|
||||
else
|
||||
mcfgpio_write(~mcfgpio_bit(gpio),
|
||||
MCFGPIO_CLRR_PORT(gpio));
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_set_value);
|
||||
|
||||
int __mcfgpio_direction_input(unsigned gpio)
|
||||
{
|
||||
unsigned long flags;
|
||||
MCFGPIO_PORTTYPE dir;
|
||||
|
||||
local_irq_save(flags);
|
||||
dir = mcfgpio_read(__mcfgpio_pddr(gpio));
|
||||
dir &= ~mcfgpio_bit(gpio);
|
||||
mcfgpio_write(dir, __mcfgpio_pddr(gpio));
|
||||
local_irq_restore(flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_direction_input);
|
||||
|
||||
int __mcfgpio_direction_output(unsigned gpio, int value)
|
||||
{
|
||||
unsigned long flags;
|
||||
MCFGPIO_PORTTYPE data;
|
||||
|
||||
local_irq_save(flags);
|
||||
data = mcfgpio_read(__mcfgpio_pddr(gpio));
|
||||
data |= mcfgpio_bit(gpio);
|
||||
mcfgpio_write(data, __mcfgpio_pddr(gpio));
|
||||
|
||||
/* now set the data to output */
|
||||
if (gpio < MCFGPIO_SCR_START) {
|
||||
data = mcfgpio_read(__mcfgpio_podr(gpio));
|
||||
if (value)
|
||||
data |= mcfgpio_bit(gpio);
|
||||
else
|
||||
data &= ~mcfgpio_bit(gpio);
|
||||
mcfgpio_write(data, __mcfgpio_podr(gpio));
|
||||
} else {
|
||||
if (value)
|
||||
mcfgpio_write(mcfgpio_bit(gpio),
|
||||
MCFGPIO_SETR_PORT(gpio));
|
||||
else
|
||||
mcfgpio_write(~mcfgpio_bit(gpio),
|
||||
MCFGPIO_CLRR_PORT(gpio));
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_direction_output);
|
||||
|
||||
int __mcfgpio_request(unsigned gpio)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_request);
|
||||
|
||||
void __mcfgpio_free(unsigned gpio)
|
||||
{
|
||||
__mcfgpio_direction_input(gpio);
|
||||
}
|
||||
EXPORT_SYMBOL(__mcfgpio_free);
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
static int mcfgpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return __mcfgpio_direction_input(offset);
|
||||
}
|
||||
|
||||
static int mcfgpio_get_value(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return __mcfgpio_get_value(offset);
|
||||
}
|
||||
|
||||
static int mcfgpio_direction_output(struct gpio_chip *chip, unsigned offset,
|
||||
int value)
|
||||
{
|
||||
return __mcfgpio_direction_output(offset, value);
|
||||
}
|
||||
|
||||
static void mcfgpio_set_value(struct gpio_chip *chip, unsigned offset,
|
||||
int value)
|
||||
{
|
||||
__mcfgpio_set_value(offset, value);
|
||||
}
|
||||
|
||||
static int mcfgpio_request(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return __mcfgpio_request(offset);
|
||||
}
|
||||
|
||||
static void mcfgpio_free(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
__mcfgpio_free(offset);
|
||||
}
|
||||
|
||||
static int mcfgpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
#if defined(MCFGPIO_IRQ_MIN)
|
||||
if ((offset >= MCFGPIO_IRQ_MIN) && (offset < MCFGPIO_IRQ_MAX))
|
||||
#else
|
||||
if (offset < MCFGPIO_IRQ_MAX)
|
||||
#endif
|
||||
return MCFGPIO_IRQ_VECBASE + offset;
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static struct bus_type mcfgpio_subsys = {
|
||||
.name = "gpio",
|
||||
.dev_name = "gpio",
|
||||
};
|
||||
|
||||
static struct gpio_chip mcfgpio_chip = {
|
||||
.label = "mcfgpio",
|
||||
.request = mcfgpio_request,
|
||||
.free = mcfgpio_free,
|
||||
.direction_input = mcfgpio_direction_input,
|
||||
.direction_output = mcfgpio_direction_output,
|
||||
.get = mcfgpio_get_value,
|
||||
.set = mcfgpio_set_value,
|
||||
.to_irq = mcfgpio_to_irq,
|
||||
.base = 0,
|
||||
.ngpio = MCFGPIO_PIN_MAX,
|
||||
};
|
||||
|
||||
static int __init mcfgpio_sysinit(void)
|
||||
{
|
||||
gpiochip_add(&mcfgpio_chip);
|
||||
return subsys_system_register(&mcfgpio_subsys, NULL);
|
||||
}
|
||||
|
||||
core_initcall(mcfgpio_sysinit);
|
||||
#endif
|
||||
298
arch/m68k/coldfire/head.S
Normal file
298
arch/m68k/coldfire/head.S
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* head.S -- common startup code for ColdFire CPUs.
|
||||
*
|
||||
* (C) Copyright 1999-2011, Greg Ungerer <gerg@snapgear.com>.
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfmmu.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* If we don't have a fixed memory size, then lets build in code
|
||||
* to auto detect the DRAM size. Obviously this is the preferred
|
||||
* method, and should work for most boards. It won't work for those
|
||||
* that do not have their RAM starting at address 0, and it only
|
||||
* works on SDRAM (not boards fitted with SRAM).
|
||||
*/
|
||||
#if CONFIG_RAMSIZE != 0
|
||||
.macro GET_MEM_SIZE
|
||||
movel #CONFIG_RAMSIZE,%d0 /* hard coded memory size */
|
||||
.endm
|
||||
|
||||
#elif defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
|
||||
defined(CONFIG_M5249) || defined(CONFIG_M525x) || \
|
||||
defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
|
||||
defined(CONFIG_M5307) || defined(CONFIG_M5407)
|
||||
/*
|
||||
* Not all these devices have exactly the same DRAM controller,
|
||||
* but the DCMR register is virtually identical - give or take
|
||||
* a couple of bits. The only exception is the 5272 devices, their
|
||||
* DRAM controller is quite different.
|
||||
*/
|
||||
.macro GET_MEM_SIZE
|
||||
movel MCFSIM_DMR0,%d0 /* get mask for 1st bank */
|
||||
btst #0,%d0 /* check if region enabled */
|
||||
beq 1f
|
||||
andl #0xfffc0000,%d0
|
||||
beq 1f
|
||||
addl #0x00040000,%d0 /* convert mask to size */
|
||||
1:
|
||||
movel MCFSIM_DMR1,%d1 /* get mask for 2nd bank */
|
||||
btst #0,%d1 /* check if region enabled */
|
||||
beq 2f
|
||||
andl #0xfffc0000,%d1
|
||||
beq 2f
|
||||
addl #0x00040000,%d1
|
||||
addl %d1,%d0 /* total mem size in d0 */
|
||||
2:
|
||||
.endm
|
||||
|
||||
#elif defined(CONFIG_M5272)
|
||||
.macro GET_MEM_SIZE
|
||||
movel MCFSIM_CSOR7,%d0 /* get SDRAM address mask */
|
||||
andil #0xfffff000,%d0 /* mask out chip select options */
|
||||
negl %d0 /* negate bits */
|
||||
.endm
|
||||
|
||||
#elif defined(CONFIG_M520x)
|
||||
.macro GET_MEM_SIZE
|
||||
clrl %d0
|
||||
movel MCFSIM_SDCS0, %d2 /* Get SDRAM chip select 0 config */
|
||||
andl #0x1f, %d2 /* Get only the chip select size */
|
||||
beq 3f /* Check if it is enabled */
|
||||
addql #1, %d2 /* Form exponent */
|
||||
moveql #1, %d0
|
||||
lsll %d2, %d0 /* 2 ^ exponent */
|
||||
3:
|
||||
movel MCFSIM_SDCS1, %d2 /* Get SDRAM chip select 1 config */
|
||||
andl #0x1f, %d2 /* Get only the chip select size */
|
||||
beq 4f /* Check if it is enabled */
|
||||
addql #1, %d2 /* Form exponent */
|
||||
moveql #1, %d1
|
||||
lsll %d2, %d1 /* 2 ^ exponent */
|
||||
addl %d1, %d0 /* Total size of SDRAM in d0 */
|
||||
4:
|
||||
.endm
|
||||
|
||||
#else
|
||||
#error "ERROR: I don't know how to probe your boards memory size?"
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Boards and platforms can do specific early hardware setup if
|
||||
* they need to. Most don't need this, define away if not required.
|
||||
*/
|
||||
#ifndef PLATFORM_SETUP
|
||||
#define PLATFORM_SETUP
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
.global _start
|
||||
.global _rambase
|
||||
.global _ramvec
|
||||
.global _ramstart
|
||||
.global _ramend
|
||||
#if defined(CONFIG_UBOOT)
|
||||
.global _init_sp
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
.data
|
||||
|
||||
/*
|
||||
* During startup we store away the RAM setup. These are not in the
|
||||
* bss, since their values are determined and written before the bss
|
||||
* has been cleared.
|
||||
*/
|
||||
_rambase:
|
||||
.long 0
|
||||
_ramvec:
|
||||
.long 0
|
||||
_ramstart:
|
||||
.long 0
|
||||
_ramend:
|
||||
.long 0
|
||||
#if defined(CONFIG_UBOOT)
|
||||
_init_sp:
|
||||
.long 0
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
__HEAD
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
_start0:
|
||||
jmp _start
|
||||
.global kernel_pg_dir
|
||||
.equ kernel_pg_dir,_start0
|
||||
.equ .,_start0+0x1000
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is the codes first entry point. This is where it all
|
||||
* begins...
|
||||
*/
|
||||
|
||||
_start:
|
||||
nop /* filler */
|
||||
movew #0x2700, %sr /* no interrupts */
|
||||
movel #CACHE_INIT,%d0 /* disable cache */
|
||||
movec %d0,%CACR
|
||||
nop
|
||||
#if defined(CONFIG_UBOOT)
|
||||
movel %sp,_init_sp /* save initial stack pointer */
|
||||
#endif
|
||||
#ifdef CONFIG_MBAR
|
||||
movel #CONFIG_MBAR+1,%d0 /* configured MBAR address */
|
||||
movec %d0,%MBAR /* set it */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do any platform or board specific setup now. Most boards
|
||||
* don't need anything. Those exceptions are define this in
|
||||
* their board specific includes.
|
||||
*/
|
||||
PLATFORM_SETUP
|
||||
|
||||
/*
|
||||
* Create basic memory configuration. Set VBR accordingly,
|
||||
* and size memory.
|
||||
*/
|
||||
movel #CONFIG_VECTORBASE,%a7
|
||||
movec %a7,%VBR /* set vectors addr */
|
||||
movel %a7,_ramvec
|
||||
|
||||
movel #CONFIG_RAMBASE,%a7 /* mark the base of RAM */
|
||||
movel %a7,_rambase
|
||||
|
||||
GET_MEM_SIZE /* macro code determines size */
|
||||
addl %a7,%d0
|
||||
movel %d0,_ramend /* set end ram addr */
|
||||
|
||||
/*
|
||||
* Now that we know what the memory is, lets enable cache
|
||||
* and get things moving. This is Coldfire CPU specific. Not
|
||||
* all version cores have identical cache register setup. But
|
||||
* it is very similar. Define the exact settings in the headers
|
||||
* then the code here is the same for all.
|
||||
*/
|
||||
movel #ACR0_MODE,%d0 /* set RAM region for caching */
|
||||
movec %d0,%ACR0
|
||||
movel #ACR1_MODE,%d0 /* anything else to cache? */
|
||||
movec %d0,%ACR1
|
||||
#ifdef ACR2_MODE
|
||||
movel #ACR2_MODE,%d0
|
||||
movec %d0,%ACR2
|
||||
movel #ACR3_MODE,%d0
|
||||
movec %d0,%ACR3
|
||||
#endif
|
||||
movel #CACHE_MODE,%d0 /* enable cache */
|
||||
movec %d0,%CACR
|
||||
nop
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* Identity mapping for the kernel region.
|
||||
*/
|
||||
movel #(MMUBASE+1),%d0 /* enable MMUBAR registers */
|
||||
movec %d0,%MMUBAR
|
||||
movel #MMUOR_CA,%d0 /* clear TLB entries */
|
||||
movel %d0,MMUOR
|
||||
movel #0,%d0 /* set ASID to 0 */
|
||||
movec %d0,%asid
|
||||
|
||||
movel #MMUCR_EN,%d0 /* Enable the identity map */
|
||||
movel %d0,MMUCR
|
||||
nop /* sync i-pipeline */
|
||||
|
||||
movel #_vstart,%a0 /* jump to "virtual" space */
|
||||
jmp %a0@
|
||||
_vstart:
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
#ifdef CONFIG_ROMFS_FS
|
||||
/*
|
||||
* Move ROM filesystem above bss :-)
|
||||
*/
|
||||
lea __bss_start,%a0 /* get start of bss */
|
||||
lea __bss_stop,%a1 /* set up destination */
|
||||
movel %a0,%a2 /* copy of bss start */
|
||||
|
||||
movel 8(%a0),%d0 /* get size of ROMFS */
|
||||
addql #8,%d0 /* allow for rounding */
|
||||
andl #0xfffffffc, %d0 /* whole words */
|
||||
|
||||
addl %d0,%a0 /* copy from end */
|
||||
addl %d0,%a1 /* copy from end */
|
||||
movel %a1,_ramstart /* set start of ram */
|
||||
|
||||
_copy_romfs:
|
||||
movel -(%a0),%d0 /* copy dword */
|
||||
movel %d0,-(%a1)
|
||||
cmpl %a0,%a2 /* check if at end */
|
||||
bne _copy_romfs
|
||||
|
||||
#else /* CONFIG_ROMFS_FS */
|
||||
lea __bss_stop,%a1
|
||||
movel %a1,_ramstart
|
||||
#endif /* CONFIG_ROMFS_FS */
|
||||
|
||||
|
||||
/*
|
||||
* Zero out the bss region.
|
||||
*/
|
||||
lea __bss_start,%a0 /* get start of bss */
|
||||
lea __bss_stop,%a1 /* get end of bss */
|
||||
clrl %d0 /* set value */
|
||||
_clear_bss:
|
||||
movel %d0,(%a0)+ /* clear each word */
|
||||
cmpl %a0,%a1 /* check if at end */
|
||||
bne _clear_bss
|
||||
|
||||
/*
|
||||
* Load the current task pointer and stack.
|
||||
*/
|
||||
lea init_thread_union,%a0
|
||||
lea THREAD_SIZE(%a0),%sp
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
.global m68k_cputype
|
||||
.global m68k_mmutype
|
||||
.global m68k_fputype
|
||||
.global m68k_machtype
|
||||
movel #CPU_COLDFIRE,%d0
|
||||
movel %d0,m68k_cputype /* Mark us as a ColdFire */
|
||||
movel #MMU_COLDFIRE,%d0
|
||||
movel %d0,m68k_mmutype
|
||||
movel #FPU_COLDFIRE,%d0
|
||||
movel %d0,m68k_fputype
|
||||
movel #MACH_M54XX,%d0
|
||||
movel %d0,m68k_machtype /* Mark us as a 54xx machine */
|
||||
lea init_task,%a2 /* Set "current" init task */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Assember start up done, start code proper.
|
||||
*/
|
||||
jsr start_kernel /* start Linux kernel */
|
||||
|
||||
_exit:
|
||||
jmp _exit /* should never get here */
|
||||
|
||||
/*****************************************************************************/
|
||||
212
arch/m68k/coldfire/intc-2.c
Normal file
212
arch/m68k/coldfire/intc-2.c
Normal file
|
|
@ -0,0 +1,212 @@
|
|||
/*
|
||||
* intc-2.c
|
||||
*
|
||||
* General interrupt controller code for the many ColdFire cores that use
|
||||
* interrupt controllers with 63 interrupt sources, organized as 56 fully-
|
||||
* programmable + 7 fixed-level interrupt sources. This includes the 523x
|
||||
* family, the 5270, 5271, 5274, 5275, and the 528x family which have two such
|
||||
* controllers, and the 547x and 548x families which have only one of them.
|
||||
*
|
||||
* The external 7 fixed interrupts are part the the Edge Port unit of these
|
||||
* ColdFire parts. They can be configured as level or edge triggered.
|
||||
*
|
||||
* (C) Copyright 2009-2011, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
/*
|
||||
* Bit definitions for the ICR family of registers.
|
||||
*/
|
||||
#define MCFSIM_ICR_LEVEL(l) ((l)<<3) /* Level l intr */
|
||||
#define MCFSIM_ICR_PRI(p) (p) /* Priority p intr */
|
||||
|
||||
/*
|
||||
* The EDGE Port interrupts are the fixed 7 external interrupts.
|
||||
* They need some special treatment, for example they need to be acked.
|
||||
*/
|
||||
#define EINT0 64 /* Is not actually used, but spot reserved for it */
|
||||
#define EINT1 65 /* EDGE Port interrupt 1 */
|
||||
#define EINT7 71 /* EDGE Port interrupt 7 */
|
||||
|
||||
#ifdef MCFICM_INTC1
|
||||
#define NR_VECS 128
|
||||
#else
|
||||
#define NR_VECS 64
|
||||
#endif
|
||||
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq - MCFINT_VECBASE;
|
||||
unsigned long imraddr;
|
||||
u32 val, imrbit;
|
||||
|
||||
#ifdef MCFICM_INTC1
|
||||
imraddr = (irq & 0x40) ? MCFICM_INTC1 : MCFICM_INTC0;
|
||||
#else
|
||||
imraddr = MCFICM_INTC0;
|
||||
#endif
|
||||
imraddr += (irq & 0x20) ? MCFINTC_IMRH : MCFINTC_IMRL;
|
||||
imrbit = 0x1 << (irq & 0x1f);
|
||||
|
||||
val = __raw_readl(imraddr);
|
||||
__raw_writel(val | imrbit, imraddr);
|
||||
}
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq - MCFINT_VECBASE;
|
||||
unsigned long imraddr;
|
||||
u32 val, imrbit;
|
||||
|
||||
#ifdef MCFICM_INTC1
|
||||
imraddr = (irq & 0x40) ? MCFICM_INTC1 : MCFICM_INTC0;
|
||||
#else
|
||||
imraddr = MCFICM_INTC0;
|
||||
#endif
|
||||
imraddr += ((irq & 0x20) ? MCFINTC_IMRH : MCFINTC_IMRL);
|
||||
imrbit = 0x1 << (irq & 0x1f);
|
||||
|
||||
/* Don't set the "maskall" bit! */
|
||||
if ((irq & 0x20) == 0)
|
||||
imrbit |= 0x1;
|
||||
|
||||
val = __raw_readl(imraddr);
|
||||
__raw_writel(val & ~imrbit, imraddr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Only the external (or EDGE Port) interrupts need to be acknowledged
|
||||
* here, as part of the IRQ handler. They only really need to be ack'ed
|
||||
* if they are in edge triggered mode, but there is no harm in doing it
|
||||
* for all types.
|
||||
*/
|
||||
static void intc_irq_ack(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
__raw_writeb(0x1 << (irq - EINT0), MCFEPORT_EPFR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Each vector needs a unique priority and level associated with it.
|
||||
* We don't really care so much what they are, we don't rely on the
|
||||
* traditional priority interrupt scheme of the m68k/ColdFire. This
|
||||
* only needs to be set once for an interrupt, and we will never change
|
||||
* these values once we have set them.
|
||||
*/
|
||||
static u8 intc_intpri = MCFSIM_ICR_LEVEL(6) | MCFSIM_ICR_PRI(6);
|
||||
|
||||
static unsigned int intc_irq_startup(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq - MCFINT_VECBASE;
|
||||
unsigned long icraddr;
|
||||
|
||||
#ifdef MCFICM_INTC1
|
||||
icraddr = (irq & 0x40) ? MCFICM_INTC1 : MCFICM_INTC0;
|
||||
#else
|
||||
icraddr = MCFICM_INTC0;
|
||||
#endif
|
||||
icraddr += MCFINTC_ICR0 + (irq & 0x3f);
|
||||
if (__raw_readb(icraddr) == 0)
|
||||
__raw_writeb(intc_intpri--, icraddr);
|
||||
|
||||
irq = d->irq;
|
||||
if ((irq >= EINT1) && (irq <= EINT7)) {
|
||||
u8 v;
|
||||
|
||||
irq -= EINT0;
|
||||
|
||||
/* Set EPORT line as input */
|
||||
v = __raw_readb(MCFEPORT_EPDDR);
|
||||
__raw_writeb(v & ~(0x1 << irq), MCFEPORT_EPDDR);
|
||||
|
||||
/* Set EPORT line as interrupt source */
|
||||
v = __raw_readb(MCFEPORT_EPIER);
|
||||
__raw_writeb(v | (0x1 << irq), MCFEPORT_EPIER);
|
||||
}
|
||||
|
||||
intc_irq_unmask(d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int intc_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
u16 pa, tb;
|
||||
|
||||
switch (type) {
|
||||
case IRQ_TYPE_EDGE_RISING:
|
||||
tb = 0x1;
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_FALLING:
|
||||
tb = 0x2;
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_BOTH:
|
||||
tb = 0x3;
|
||||
break;
|
||||
default:
|
||||
/* Level triggered */
|
||||
tb = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (tb)
|
||||
irq_set_handler(irq, handle_edge_irq);
|
||||
|
||||
irq -= EINT0;
|
||||
pa = __raw_readw(MCFEPORT_EPPAR);
|
||||
pa = (pa & ~(0x3 << (irq * 2))) | (tb << (irq * 2));
|
||||
__raw_writew(pa, MCFEPORT_EPPAR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "CF-INTC",
|
||||
.irq_startup = intc_irq_startup,
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
};
|
||||
|
||||
static struct irq_chip intc_irq_chip_edge_port = {
|
||||
.name = "CF-INTC-EP",
|
||||
.irq_startup = intc_irq_startup,
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
.irq_ack = intc_irq_ack,
|
||||
.irq_set_type = intc_irq_set_type,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
/* Mask all interrupt sources */
|
||||
__raw_writel(0x1, MCFICM_INTC0 + MCFINTC_IMRL);
|
||||
#ifdef MCFICM_INTC1
|
||||
__raw_writel(0x1, MCFICM_INTC1 + MCFINTC_IMRL);
|
||||
#endif
|
||||
|
||||
for (irq = MCFINT_VECBASE; (irq < MCFINT_VECBASE + NR_VECS); irq++) {
|
||||
if ((irq >= EINT1) && (irq <=EINT7))
|
||||
irq_set_chip(irq, &intc_irq_chip_edge_port);
|
||||
else
|
||||
irq_set_chip(irq, &intc_irq_chip);
|
||||
irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH);
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
61
arch/m68k/coldfire/intc-5249.c
Normal file
61
arch/m68k/coldfire/intc-5249.c
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* intc2.c -- support for the 2nd INTC controller of the 5249
|
||||
*
|
||||
* (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
static void intc2_irq_gpio_mask(struct irq_data *d)
|
||||
{
|
||||
u32 imr;
|
||||
imr = readl(MCFSIM2_GPIOINTENABLE);
|
||||
imr &= ~(0x1 << (d->irq - MCF_IRQ_GPIO0));
|
||||
writel(imr, MCFSIM2_GPIOINTENABLE);
|
||||
}
|
||||
|
||||
static void intc2_irq_gpio_unmask(struct irq_data *d)
|
||||
{
|
||||
u32 imr;
|
||||
imr = readl(MCFSIM2_GPIOINTENABLE);
|
||||
imr |= (0x1 << (d->irq - MCF_IRQ_GPIO0));
|
||||
writel(imr, MCFSIM2_GPIOINTENABLE);
|
||||
}
|
||||
|
||||
static void intc2_irq_gpio_ack(struct irq_data *d)
|
||||
{
|
||||
writel(0x1 << (d->irq - MCF_IRQ_GPIO0), MCFSIM2_GPIOINTCLEAR);
|
||||
}
|
||||
|
||||
static struct irq_chip intc2_irq_gpio_chip = {
|
||||
.name = "CF-INTC2",
|
||||
.irq_mask = intc2_irq_gpio_mask,
|
||||
.irq_unmask = intc2_irq_gpio_unmask,
|
||||
.irq_ack = intc2_irq_gpio_ack,
|
||||
};
|
||||
|
||||
static int __init mcf_intc2_init(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
/* GPIO interrupt sources */
|
||||
for (irq = MCF_IRQ_GPIO0; (irq <= MCF_IRQ_GPIO7); irq++) {
|
||||
irq_set_chip(irq, &intc2_irq_gpio_chip);
|
||||
irq_set_handler(irq, handle_edge_irq);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(mcf_intc2_init);
|
||||
91
arch/m68k/coldfire/intc-525x.c
Normal file
91
arch/m68k/coldfire/intc-525x.c
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* intc2.c -- support for the 2nd INTC controller of the 525x
|
||||
*
|
||||
* (C) Copyright 2012, Steven King <sfking@fdwdc.com>
|
||||
* (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
static void intc2_irq_gpio_mask(struct irq_data *d)
|
||||
{
|
||||
u32 imr = readl(MCFSIM2_GPIOINTENABLE);
|
||||
u32 type = irqd_get_trigger_type(d);
|
||||
int irq = d->irq - MCF_IRQ_GPIO0;
|
||||
|
||||
if (type & IRQ_TYPE_EDGE_RISING)
|
||||
imr &= ~(0x001 << irq);
|
||||
if (type & IRQ_TYPE_EDGE_FALLING)
|
||||
imr &= ~(0x100 << irq);
|
||||
writel(imr, MCFSIM2_GPIOINTENABLE);
|
||||
}
|
||||
|
||||
static void intc2_irq_gpio_unmask(struct irq_data *d)
|
||||
{
|
||||
u32 imr = readl(MCFSIM2_GPIOINTENABLE);
|
||||
u32 type = irqd_get_trigger_type(d);
|
||||
int irq = d->irq - MCF_IRQ_GPIO0;
|
||||
|
||||
if (type & IRQ_TYPE_EDGE_RISING)
|
||||
imr |= (0x001 << irq);
|
||||
if (type & IRQ_TYPE_EDGE_FALLING)
|
||||
imr |= (0x100 << irq);
|
||||
writel(imr, MCFSIM2_GPIOINTENABLE);
|
||||
}
|
||||
|
||||
static void intc2_irq_gpio_ack(struct irq_data *d)
|
||||
{
|
||||
u32 imr = 0;
|
||||
u32 type = irqd_get_trigger_type(d);
|
||||
int irq = d->irq - MCF_IRQ_GPIO0;
|
||||
|
||||
if (type & IRQ_TYPE_EDGE_RISING)
|
||||
imr |= (0x001 << irq);
|
||||
if (type & IRQ_TYPE_EDGE_FALLING)
|
||||
imr |= (0x100 << irq);
|
||||
writel(imr, MCFSIM2_GPIOINTCLEAR);
|
||||
}
|
||||
|
||||
static int intc2_irq_gpio_set_type(struct irq_data *d, unsigned int f)
|
||||
{
|
||||
if (f & ~IRQ_TYPE_EDGE_BOTH)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip intc2_irq_gpio_chip = {
|
||||
.name = "CF-INTC2",
|
||||
.irq_mask = intc2_irq_gpio_mask,
|
||||
.irq_unmask = intc2_irq_gpio_unmask,
|
||||
.irq_ack = intc2_irq_gpio_ack,
|
||||
.irq_set_type = intc2_irq_gpio_set_type,
|
||||
};
|
||||
|
||||
static int __init mcf_intc2_init(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
/* set the interrupt base for the second interrupt controller */
|
||||
writel(MCFINTC2_VECBASE, MCFINTC2_INTBASE);
|
||||
|
||||
/* GPIO interrupt sources */
|
||||
for (irq = MCF_IRQ_GPIO0; (irq <= MCF_IRQ_GPIO6); irq++) {
|
||||
irq_set_chip(irq, &intc2_irq_gpio_chip);
|
||||
irq_set_handler(irq, handle_edge_irq);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(mcf_intc2_init);
|
||||
185
arch/m68k/coldfire/intc-5272.c
Normal file
185
arch/m68k/coldfire/intc-5272.c
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
/*
|
||||
* intc.c -- interrupt controller or ColdFire 5272 SoC
|
||||
*
|
||||
* (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
/*
|
||||
* The 5272 ColdFire interrupt controller is nothing like any other
|
||||
* ColdFire interrupt controller - it truly is completely different.
|
||||
* Given its age it is unlikely to be used on any other ColdFire CPU.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The masking and priproty setting of interrupts on the 5272 is done
|
||||
* via a set of 4 "Interrupt Controller Registers" (ICR). There is a
|
||||
* loose mapping of vector number to register and internal bits, but
|
||||
* a table is the easiest and quickest way to map them.
|
||||
*
|
||||
* Note that the external interrupts are edge triggered (unlike the
|
||||
* internal interrupt sources which are level triggered). Which means
|
||||
* they also need acknowledging via acknowledge bits.
|
||||
*/
|
||||
struct irqmap {
|
||||
unsigned int icr;
|
||||
unsigned char index;
|
||||
unsigned char ack;
|
||||
};
|
||||
|
||||
static struct irqmap intc_irqmap[MCFINT_VECMAX - MCFINT_VECBASE] = {
|
||||
/*MCF_IRQ_SPURIOUS*/ { .icr = 0, .index = 0, .ack = 0, },
|
||||
/*MCF_IRQ_EINT1*/ { .icr = MCFSIM_ICR1, .index = 28, .ack = 1, },
|
||||
/*MCF_IRQ_EINT2*/ { .icr = MCFSIM_ICR1, .index = 24, .ack = 1, },
|
||||
/*MCF_IRQ_EINT3*/ { .icr = MCFSIM_ICR1, .index = 20, .ack = 1, },
|
||||
/*MCF_IRQ_EINT4*/ { .icr = MCFSIM_ICR1, .index = 16, .ack = 1, },
|
||||
/*MCF_IRQ_TIMER1*/ { .icr = MCFSIM_ICR1, .index = 12, .ack = 0, },
|
||||
/*MCF_IRQ_TIMER2*/ { .icr = MCFSIM_ICR1, .index = 8, .ack = 0, },
|
||||
/*MCF_IRQ_TIMER3*/ { .icr = MCFSIM_ICR1, .index = 4, .ack = 0, },
|
||||
/*MCF_IRQ_TIMER4*/ { .icr = MCFSIM_ICR1, .index = 0, .ack = 0, },
|
||||
/*MCF_IRQ_UART1*/ { .icr = MCFSIM_ICR2, .index = 28, .ack = 0, },
|
||||
/*MCF_IRQ_UART2*/ { .icr = MCFSIM_ICR2, .index = 24, .ack = 0, },
|
||||
/*MCF_IRQ_PLIP*/ { .icr = MCFSIM_ICR2, .index = 20, .ack = 0, },
|
||||
/*MCF_IRQ_PLIA*/ { .icr = MCFSIM_ICR2, .index = 16, .ack = 0, },
|
||||
/*MCF_IRQ_USB0*/ { .icr = MCFSIM_ICR2, .index = 12, .ack = 0, },
|
||||
/*MCF_IRQ_USB1*/ { .icr = MCFSIM_ICR2, .index = 8, .ack = 0, },
|
||||
/*MCF_IRQ_USB2*/ { .icr = MCFSIM_ICR2, .index = 4, .ack = 0, },
|
||||
/*MCF_IRQ_USB3*/ { .icr = MCFSIM_ICR2, .index = 0, .ack = 0, },
|
||||
/*MCF_IRQ_USB4*/ { .icr = MCFSIM_ICR3, .index = 28, .ack = 0, },
|
||||
/*MCF_IRQ_USB5*/ { .icr = MCFSIM_ICR3, .index = 24, .ack = 0, },
|
||||
/*MCF_IRQ_USB6*/ { .icr = MCFSIM_ICR3, .index = 20, .ack = 0, },
|
||||
/*MCF_IRQ_USB7*/ { .icr = MCFSIM_ICR3, .index = 16, .ack = 0, },
|
||||
/*MCF_IRQ_DMA*/ { .icr = MCFSIM_ICR3, .index = 12, .ack = 0, },
|
||||
/*MCF_IRQ_ERX*/ { .icr = MCFSIM_ICR3, .index = 8, .ack = 0, },
|
||||
/*MCF_IRQ_ETX*/ { .icr = MCFSIM_ICR3, .index = 4, .ack = 0, },
|
||||
/*MCF_IRQ_ENTC*/ { .icr = MCFSIM_ICR3, .index = 0, .ack = 0, },
|
||||
/*MCF_IRQ_QSPI*/ { .icr = MCFSIM_ICR4, .index = 28, .ack = 0, },
|
||||
/*MCF_IRQ_EINT5*/ { .icr = MCFSIM_ICR4, .index = 24, .ack = 1, },
|
||||
/*MCF_IRQ_EINT6*/ { .icr = MCFSIM_ICR4, .index = 20, .ack = 1, },
|
||||
/*MCF_IRQ_SWTO*/ { .icr = MCFSIM_ICR4, .index = 16, .ack = 0, },
|
||||
};
|
||||
|
||||
/*
|
||||
* The act of masking the interrupt also has a side effect of 'ack'ing
|
||||
* an interrupt on this irq (for the external irqs). So this mask function
|
||||
* is also an ack_mask function.
|
||||
*/
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
if ((irq >= MCFINT_VECBASE) && (irq <= MCFINT_VECMAX)) {
|
||||
u32 v;
|
||||
irq -= MCFINT_VECBASE;
|
||||
v = 0x8 << intc_irqmap[irq].index;
|
||||
writel(v, intc_irqmap[irq].icr);
|
||||
}
|
||||
}
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
if ((irq >= MCFINT_VECBASE) && (irq <= MCFINT_VECMAX)) {
|
||||
u32 v;
|
||||
irq -= MCFINT_VECBASE;
|
||||
v = 0xd << intc_irqmap[irq].index;
|
||||
writel(v, intc_irqmap[irq].icr);
|
||||
}
|
||||
}
|
||||
|
||||
static void intc_irq_ack(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
/* Only external interrupts are acked */
|
||||
if ((irq >= MCFINT_VECBASE) && (irq <= MCFINT_VECMAX)) {
|
||||
irq -= MCFINT_VECBASE;
|
||||
if (intc_irqmap[irq].ack) {
|
||||
u32 v;
|
||||
v = readl(intc_irqmap[irq].icr);
|
||||
v &= (0x7 << intc_irqmap[irq].index);
|
||||
v |= (0x8 << intc_irqmap[irq].index);
|
||||
writel(v, intc_irqmap[irq].icr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int intc_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
if ((irq >= MCFINT_VECBASE) && (irq <= MCFINT_VECMAX)) {
|
||||
irq -= MCFINT_VECBASE;
|
||||
if (intc_irqmap[irq].ack) {
|
||||
u32 v;
|
||||
v = readl(MCFSIM_PITR);
|
||||
if (type == IRQ_TYPE_EDGE_FALLING)
|
||||
v &= ~(0x1 << (32 - irq));
|
||||
else
|
||||
v |= (0x1 << (32 - irq));
|
||||
writel(v, MCFSIM_PITR);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Simple flow handler to deal with the external edge triggered interrupts.
|
||||
* We need to be careful with the masking/acking due to the side effects
|
||||
* of masking an interrupt.
|
||||
*/
|
||||
static void intc_external_irq(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
irq_desc_get_chip(desc)->irq_ack(&desc->irq_data);
|
||||
handle_simple_irq(irq, desc);
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "CF-INTC",
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
.irq_mask_ack = intc_irq_mask,
|
||||
.irq_ack = intc_irq_ack,
|
||||
.irq_set_type = intc_irq_set_type,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
int irq, edge;
|
||||
|
||||
/* Mask all interrupt sources */
|
||||
writel(0x88888888, MCFSIM_ICR1);
|
||||
writel(0x88888888, MCFSIM_ICR2);
|
||||
writel(0x88888888, MCFSIM_ICR3);
|
||||
writel(0x88888888, MCFSIM_ICR4);
|
||||
|
||||
for (irq = 0; (irq < NR_IRQS); irq++) {
|
||||
irq_set_chip(irq, &intc_irq_chip);
|
||||
edge = 0;
|
||||
if ((irq >= MCFINT_VECBASE) && (irq <= MCFINT_VECMAX))
|
||||
edge = intc_irqmap[irq - MCFINT_VECBASE].ack;
|
||||
if (edge) {
|
||||
irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
|
||||
irq_set_handler(irq, intc_external_irq);
|
||||
} else {
|
||||
irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH);
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
199
arch/m68k/coldfire/intc-simr.c
Normal file
199
arch/m68k/coldfire/intc-simr.c
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* intc-simr.c
|
||||
*
|
||||
* Interrupt controller code for the ColdFire 5208, 5207 & 532x parts.
|
||||
*
|
||||
* (C) Copyright 2009-2011, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
/*
|
||||
* The EDGE Port interrupts are the fixed 7 external interrupts.
|
||||
* They need some special treatment, for example they need to be acked.
|
||||
*/
|
||||
#ifdef CONFIG_M520x
|
||||
/*
|
||||
* The 520x parts only support a limited range of these external
|
||||
* interrupts, only 1, 4 and 7 (as interrupts 65, 66 and 67).
|
||||
*/
|
||||
#define EINT0 64 /* Is not actually used, but spot reserved for it */
|
||||
#define EINT1 65 /* EDGE Port interrupt 1 */
|
||||
#define EINT4 66 /* EDGE Port interrupt 4 */
|
||||
#define EINT7 67 /* EDGE Port interrupt 7 */
|
||||
|
||||
static unsigned int irqebitmap[] = { 0, 1, 4, 7 };
|
||||
static unsigned int inline irq2ebit(unsigned int irq)
|
||||
{
|
||||
return irqebitmap[irq - EINT0];
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* Most of the ColdFire parts with the EDGE Port module just have
|
||||
* a strait direct mapping of the 7 external interrupts. Although
|
||||
* there is a bit reserved for 0, it is not used.
|
||||
*/
|
||||
#define EINT0 64 /* Is not actually used, but spot reserved for it */
|
||||
#define EINT1 65 /* EDGE Port interrupt 1 */
|
||||
#define EINT7 71 /* EDGE Port interrupt 7 */
|
||||
|
||||
static unsigned int inline irq2ebit(unsigned int irq)
|
||||
{
|
||||
return irq - EINT0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* There maybe one, two or three interrupt control units, each has 64
|
||||
* interrupts. If there is no second or third unit then MCFINTC1_* or
|
||||
* MCFINTC2_* defines will be 0 (and code for them optimized away).
|
||||
*/
|
||||
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq - MCFINT_VECBASE;
|
||||
|
||||
if (MCFINTC2_SIMR && (irq > 128))
|
||||
__raw_writeb(irq - 128, MCFINTC2_SIMR);
|
||||
else if (MCFINTC1_SIMR && (irq > 64))
|
||||
__raw_writeb(irq - 64, MCFINTC1_SIMR);
|
||||
else
|
||||
__raw_writeb(irq, MCFINTC0_SIMR);
|
||||
}
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq - MCFINT_VECBASE;
|
||||
|
||||
if (MCFINTC2_CIMR && (irq > 128))
|
||||
__raw_writeb(irq - 128, MCFINTC2_CIMR);
|
||||
else if (MCFINTC1_CIMR && (irq > 64))
|
||||
__raw_writeb(irq - 64, MCFINTC1_CIMR);
|
||||
else
|
||||
__raw_writeb(irq, MCFINTC0_CIMR);
|
||||
}
|
||||
|
||||
static void intc_irq_ack(struct irq_data *d)
|
||||
{
|
||||
unsigned int ebit = irq2ebit(d->irq);
|
||||
|
||||
__raw_writeb(0x1 << ebit, MCFEPORT_EPFR);
|
||||
}
|
||||
|
||||
static unsigned int intc_irq_startup(struct irq_data *d)
|
||||
{
|
||||
unsigned int irq = d->irq;
|
||||
|
||||
if ((irq >= EINT1) && (irq <= EINT7)) {
|
||||
unsigned int ebit = irq2ebit(irq);
|
||||
u8 v;
|
||||
|
||||
#if defined(MCFEPORT_EPDDR)
|
||||
/* Set EPORT line as input */
|
||||
v = __raw_readb(MCFEPORT_EPDDR);
|
||||
__raw_writeb(v & ~(0x1 << ebit), MCFEPORT_EPDDR);
|
||||
#endif
|
||||
|
||||
/* Set EPORT line as interrupt source */
|
||||
v = __raw_readb(MCFEPORT_EPIER);
|
||||
__raw_writeb(v | (0x1 << ebit), MCFEPORT_EPIER);
|
||||
}
|
||||
|
||||
irq -= MCFINT_VECBASE;
|
||||
if (MCFINTC2_ICR0 && (irq > 128))
|
||||
__raw_writeb(5, MCFINTC2_ICR0 + irq - 128);
|
||||
else if (MCFINTC1_ICR0 && (irq > 64))
|
||||
__raw_writeb(5, MCFINTC1_ICR0 + irq - 64);
|
||||
else
|
||||
__raw_writeb(5, MCFINTC0_ICR0 + irq);
|
||||
|
||||
intc_irq_unmask(d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int intc_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
unsigned int ebit, irq = d->irq;
|
||||
u16 pa, tb;
|
||||
|
||||
switch (type) {
|
||||
case IRQ_TYPE_EDGE_RISING:
|
||||
tb = 0x1;
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_FALLING:
|
||||
tb = 0x2;
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_BOTH:
|
||||
tb = 0x3;
|
||||
break;
|
||||
default:
|
||||
/* Level triggered */
|
||||
tb = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (tb)
|
||||
irq_set_handler(irq, handle_edge_irq);
|
||||
|
||||
ebit = irq2ebit(irq) * 2;
|
||||
pa = __raw_readw(MCFEPORT_EPPAR);
|
||||
pa = (pa & ~(0x3 << ebit)) | (tb << ebit);
|
||||
__raw_writew(pa, MCFEPORT_EPPAR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "CF-INTC",
|
||||
.irq_startup = intc_irq_startup,
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
};
|
||||
|
||||
static struct irq_chip intc_irq_chip_edge_port = {
|
||||
.name = "CF-INTC-EP",
|
||||
.irq_startup = intc_irq_startup,
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
.irq_ack = intc_irq_ack,
|
||||
.irq_set_type = intc_irq_set_type,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
int irq, eirq;
|
||||
|
||||
/* Mask all interrupt sources */
|
||||
__raw_writeb(0xff, MCFINTC0_SIMR);
|
||||
if (MCFINTC1_SIMR)
|
||||
__raw_writeb(0xff, MCFINTC1_SIMR);
|
||||
if (MCFINTC2_SIMR)
|
||||
__raw_writeb(0xff, MCFINTC2_SIMR);
|
||||
|
||||
eirq = MCFINT_VECBASE + 64 + (MCFINTC1_ICR0 ? 64 : 0) +
|
||||
(MCFINTC2_ICR0 ? 64 : 0);
|
||||
for (irq = MCFINT_VECBASE; (irq < eirq); irq++) {
|
||||
if ((irq >= EINT1) && (irq <= EINT7))
|
||||
irq_set_chip(irq, &intc_irq_chip_edge_port);
|
||||
else
|
||||
irq_set_chip(irq, &intc_irq_chip);
|
||||
irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH);
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
150
arch/m68k/coldfire/intc.c
Normal file
150
arch/m68k/coldfire/intc.c
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
/*
|
||||
* intc.c -- support for the old ColdFire interrupt controller
|
||||
*
|
||||
* (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/*
|
||||
* The mapping of irq number to a mask register bit is not one-to-one.
|
||||
* The irq numbers are either based on "level" of interrupt or fixed
|
||||
* for an autovector-able interrupt. So we keep a local data structure
|
||||
* that maps from irq to mask register. Not all interrupts will have
|
||||
* an IMR bit.
|
||||
*/
|
||||
unsigned char mcf_irq2imr[NR_IRQS];
|
||||
|
||||
/*
|
||||
* Define the miniumun and maximum external interrupt numbers.
|
||||
* This is also used as the "level" interrupt numbers.
|
||||
*/
|
||||
#define EIRQ1 25
|
||||
#define EIRQ7 31
|
||||
|
||||
/*
|
||||
* In the early version 2 core ColdFire parts the IMR register was 16 bits
|
||||
* in size. Version 3 (and later version 2) core parts have a 32 bit
|
||||
* sized IMR register. Provide some size independent methods to access the
|
||||
* IMR register.
|
||||
*/
|
||||
#ifdef MCFSIM_IMR_IS_16BITS
|
||||
|
||||
void mcf_setimr(int index)
|
||||
{
|
||||
u16 imr;
|
||||
imr = __raw_readw(MCFSIM_IMR);
|
||||
__raw_writew(imr | (0x1 << index), MCFSIM_IMR);
|
||||
}
|
||||
|
||||
void mcf_clrimr(int index)
|
||||
{
|
||||
u16 imr;
|
||||
imr = __raw_readw(MCFSIM_IMR);
|
||||
__raw_writew(imr & ~(0x1 << index), MCFSIM_IMR);
|
||||
}
|
||||
|
||||
void mcf_maskimr(unsigned int mask)
|
||||
{
|
||||
u16 imr;
|
||||
imr = __raw_readw(MCFSIM_IMR);
|
||||
imr |= mask;
|
||||
__raw_writew(imr, MCFSIM_IMR);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void mcf_setimr(int index)
|
||||
{
|
||||
u32 imr;
|
||||
imr = __raw_readl(MCFSIM_IMR);
|
||||
__raw_writel(imr | (0x1 << index), MCFSIM_IMR);
|
||||
}
|
||||
|
||||
void mcf_clrimr(int index)
|
||||
{
|
||||
u32 imr;
|
||||
imr = __raw_readl(MCFSIM_IMR);
|
||||
__raw_writel(imr & ~(0x1 << index), MCFSIM_IMR);
|
||||
}
|
||||
|
||||
void mcf_maskimr(unsigned int mask)
|
||||
{
|
||||
u32 imr;
|
||||
imr = __raw_readl(MCFSIM_IMR);
|
||||
imr |= mask;
|
||||
__raw_writel(imr, MCFSIM_IMR);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Interrupts can be "vectored" on the ColdFire cores that support this old
|
||||
* interrupt controller. That is, the device raising the interrupt can also
|
||||
* supply the vector number to interrupt through. The AVR register of the
|
||||
* interrupt controller enables or disables this for each external interrupt,
|
||||
* so provide generic support for this. Setting this up is out-of-band for
|
||||
* the interrupt system API's, and needs to be done by the driver that
|
||||
* supports this device. Very few devices actually use this.
|
||||
*/
|
||||
void mcf_autovector(int irq)
|
||||
{
|
||||
#ifdef MCFSIM_AVR
|
||||
if ((irq >= EIRQ1) && (irq <= EIRQ7)) {
|
||||
u8 avec;
|
||||
avec = __raw_readb(MCFSIM_AVR);
|
||||
avec |= (0x1 << (irq - EIRQ1 + 1));
|
||||
__raw_writeb(avec, MCFSIM_AVR);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void intc_irq_mask(struct irq_data *d)
|
||||
{
|
||||
if (mcf_irq2imr[d->irq])
|
||||
mcf_setimr(mcf_irq2imr[d->irq]);
|
||||
}
|
||||
|
||||
static void intc_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
if (mcf_irq2imr[d->irq])
|
||||
mcf_clrimr(mcf_irq2imr[d->irq]);
|
||||
}
|
||||
|
||||
static int intc_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip intc_irq_chip = {
|
||||
.name = "CF-INTC",
|
||||
.irq_mask = intc_irq_mask,
|
||||
.irq_unmask = intc_irq_unmask,
|
||||
.irq_set_type = intc_irq_set_type,
|
||||
};
|
||||
|
||||
void __init init_IRQ(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
mcf_maskimr(0xffffffff);
|
||||
|
||||
for (irq = 0; (irq < NR_IRQS); irq++) {
|
||||
irq_set_chip(irq, &intc_irq_chip);
|
||||
irq_set_irq_type(irq, IRQ_TYPE_LEVEL_HIGH);
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
58
arch/m68k/coldfire/m5206.c
Normal file
58
arch/m68k/coldfire/m5206.c
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m5206.c -- platform support for ColdFire 5206 based boards
|
||||
*
|
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2000-2001, Lineo Inc. (www.lineo.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#if defined(CONFIG_NETtel)
|
||||
/* Copy command line from FLASH to local buffer... */
|
||||
memcpy(commandp, (char *) 0xf0004000, size);
|
||||
commandp[size-1] = 0;
|
||||
#endif /* CONFIG_NETtel */
|
||||
|
||||
mach_sched_init = hw_timer_init;
|
||||
|
||||
/* Only support the external interrupts on their primary level */
|
||||
mcf_mapirq2imr(25, MCFINTC_EINT1);
|
||||
mcf_mapirq2imr(28, MCFINTC_EINT4);
|
||||
mcf_mapirq2imr(31, MCFINTC_EINT7);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
180
arch/m68k/coldfire/m520x.c
Normal file
180
arch/m68k/coldfire/m520x.c
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m520x.c -- platform support for ColdFire 520x based boards
|
||||
*
|
||||
* Copyright (C) 2005, Freescale (www.freescale.com)
|
||||
* Copyright (C) 2005, Intec Automation (mike@steroidmicros.com)
|
||||
* Copyright (C) 1999-2007, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2003, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(0, "flexbus", 2, MCF_CLK);
|
||||
DEFINE_CLK(0, "fec.0", 12, MCF_CLK);
|
||||
DEFINE_CLK(0, "edma", 17, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.0", 18, MCF_CLK);
|
||||
DEFINE_CLK(0, "iack.0", 21, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfi2c.0", 22, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfqspi.0", 23, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfuart.0", 24, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.1", 25, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.2", 26, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcftmr.0", 28, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.1", 29, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.2", 30, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.3", 31, MCF_CLK);
|
||||
|
||||
DEFINE_CLK(0, "mcfpit.0", 32, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.1", 33, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfeport.0", 34, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfwdt.0", 35, MCF_CLK);
|
||||
DEFINE_CLK(0, "pll.0", 36, MCF_CLK);
|
||||
DEFINE_CLK(0, "sys.0", 40, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "gpio.0", 41, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "sdram.0", 42, MCF_CLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&__clk_0_2, /* flexbus */
|
||||
&__clk_0_12, /* fec.0 */
|
||||
&__clk_0_17, /* edma */
|
||||
&__clk_0_18, /* intc.0 */
|
||||
&__clk_0_21, /* iack.0 */
|
||||
&__clk_0_22, /* mcfi2c.0 */
|
||||
&__clk_0_23, /* mcfqspi.0 */
|
||||
&__clk_0_24, /* mcfuart.0 */
|
||||
&__clk_0_25, /* mcfuart.1 */
|
||||
&__clk_0_26, /* mcfuart.2 */
|
||||
&__clk_0_28, /* mcftmr.0 */
|
||||
&__clk_0_29, /* mcftmr.1 */
|
||||
&__clk_0_30, /* mcftmr.2 */
|
||||
&__clk_0_31, /* mcftmr.3 */
|
||||
|
||||
&__clk_0_32, /* mcfpit.0 */
|
||||
&__clk_0_33, /* mcfpit.1 */
|
||||
&__clk_0_34, /* mcfeport.0 */
|
||||
&__clk_0_35, /* mcfwdt.0 */
|
||||
&__clk_0_36, /* pll.0 */
|
||||
&__clk_0_40, /* sys.0 */
|
||||
&__clk_0_41, /* gpio.0 */
|
||||
&__clk_0_42, /* sdram.0 */
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct clk * const enable_clks[] __initconst = {
|
||||
&__clk_0_2, /* flexbus */
|
||||
&__clk_0_18, /* intc.0 */
|
||||
&__clk_0_21, /* iack.0 */
|
||||
&__clk_0_24, /* mcfuart.0 */
|
||||
&__clk_0_25, /* mcfuart.1 */
|
||||
&__clk_0_26, /* mcfuart.2 */
|
||||
|
||||
&__clk_0_32, /* mcfpit.0 */
|
||||
&__clk_0_33, /* mcfpit.1 */
|
||||
&__clk_0_34, /* mcfeport.0 */
|
||||
&__clk_0_36, /* pll.0 */
|
||||
&__clk_0_40, /* sys.0 */
|
||||
&__clk_0_41, /* gpio.0 */
|
||||
&__clk_0_42, /* sdram.0 */
|
||||
};
|
||||
|
||||
static struct clk * const disable_clks[] __initconst = {
|
||||
&__clk_0_12, /* fec.0 */
|
||||
&__clk_0_17, /* edma */
|
||||
&__clk_0_22, /* mcfi2c.0 */
|
||||
&__clk_0_23, /* mcfqspi.0 */
|
||||
&__clk_0_28, /* mcftmr.0 */
|
||||
&__clk_0_29, /* mcftmr.1 */
|
||||
&__clk_0_30, /* mcftmr.2 */
|
||||
&__clk_0_31, /* mcftmr.3 */
|
||||
&__clk_0_35, /* mcfwdt.0 */
|
||||
};
|
||||
|
||||
|
||||
static void __init m520x_clk_init(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
/* make sure these clocks are enabled */
|
||||
for (i = 0; i < ARRAY_SIZE(enable_clks); ++i)
|
||||
__clk_init_enabled(enable_clks[i]);
|
||||
/* make sure these clocks are disabled */
|
||||
for (i = 0; i < ARRAY_SIZE(disable_clks); ++i)
|
||||
__clk_init_disabled(disable_clks[i]);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m520x_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
u16 par;
|
||||
/* setup Port QS for QSPI with gpio CS control */
|
||||
writeb(0x3f, MCF_GPIO_PAR_QSPI);
|
||||
/* make U1CTS and U2RTS gpio for cs_control */
|
||||
par = readw(MCF_GPIO_PAR_UART);
|
||||
par &= 0x00ff;
|
||||
writew(par, MCF_GPIO_PAR_UART);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m520x_uarts_init(void)
|
||||
{
|
||||
u16 par;
|
||||
u8 par2;
|
||||
|
||||
/* UART0 and UART1 GPIO pin setup */
|
||||
par = readw(MCF_GPIO_PAR_UART);
|
||||
par |= MCF_GPIO_PAR_UART_PAR_UTXD0 | MCF_GPIO_PAR_UART_PAR_URXD0;
|
||||
par |= MCF_GPIO_PAR_UART_PAR_UTXD1 | MCF_GPIO_PAR_UART_PAR_URXD1;
|
||||
writew(par, MCF_GPIO_PAR_UART);
|
||||
|
||||
/* UART1 GPIO pin setup */
|
||||
par2 = readb(MCF_GPIO_PAR_FECI2C);
|
||||
par2 &= ~0x0F;
|
||||
par2 |= MCF_GPIO_PAR_FECI2C_PAR_SCL_UTXD2 |
|
||||
MCF_GPIO_PAR_FECI2C_PAR_SDA_URXD2;
|
||||
writeb(par2, MCF_GPIO_PAR_FECI2C);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m520x_fec_init(void)
|
||||
{
|
||||
u8 v;
|
||||
|
||||
/* Set multi-function pins to ethernet mode */
|
||||
v = readb(MCF_GPIO_PAR_FEC);
|
||||
writeb(v | 0xf0, MCF_GPIO_PAR_FEC);
|
||||
|
||||
v = readb(MCF_GPIO_PAR_FECI2C);
|
||||
writeb(v | 0x0f, MCF_GPIO_PAR_FECI2C);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
m520x_clk_init();
|
||||
m520x_uarts_init();
|
||||
m520x_fec_init();
|
||||
m520x_qspi_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
86
arch/m68k/coldfire/m523x.c
Normal file
86
arch/m68k/coldfire/m523x.c
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m523x.c -- platform support for ColdFire 523x based boards
|
||||
*
|
||||
* Sub-architcture dependent initialization code for the Freescale
|
||||
* 523x CPUs.
|
||||
*
|
||||
* Copyright (C) 1999-2005, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2003, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfpit0, "mcfpit.0", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit1, "mcfpit.1", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit2, "mcfpit.2", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit3, "mcfpit.3", MCF_CLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart2, "mcfuart.2", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(fec0, "fec.0", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcfpit0,
|
||||
&clk_mcfpit1,
|
||||
&clk_mcfpit2,
|
||||
&clk_mcfpit3,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfuart2,
|
||||
&clk_mcfqspi0,
|
||||
&clk_fec0,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m523x_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
u16 par;
|
||||
|
||||
/* setup QSPS pins for QSPI with gpio CS control */
|
||||
writeb(0x1f, MCFGPIO_PAR_QSPI);
|
||||
/* and CS2 & CS3 as gpio */
|
||||
par = readw(MCFGPIO_PAR_TIMER);
|
||||
par &= 0x3f3f;
|
||||
writew(par, MCFGPIO_PAR_TIMER);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m523x_fec_init(void)
|
||||
{
|
||||
/* Set multi-function pins to ethernet use */
|
||||
writeb(readb(MCFGPIO_PAR_FECI2C) | 0xf0, MCFGPIO_PAR_FECI2C);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
m523x_fec_init();
|
||||
m523x_qspi_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
126
arch/m68k/coldfire/m5249.c
Normal file
126
arch/m68k/coldfire/m5249.c
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m5249.c -- platform support for ColdFire 5249 based boards
|
||||
*
|
||||
* Copyright (C) 2002, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfqspi0,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef CONFIG_M5249C3
|
||||
|
||||
static struct resource m5249_smc91x_resources[] = {
|
||||
{
|
||||
.start = 0xe0000300,
|
||||
.end = 0xe0000300 + 0x100,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_GPIO6,
|
||||
.end = MCF_IRQ_GPIO6,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device m5249_smc91x = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(m5249_smc91x_resources),
|
||||
.resource = m5249_smc91x_resources,
|
||||
};
|
||||
|
||||
#endif /* CONFIG_M5249C3 */
|
||||
|
||||
static struct platform_device *m5249_devices[] __initdata = {
|
||||
#ifdef CONFIG_M5249C3
|
||||
&m5249_smc91x,
|
||||
#endif
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m5249_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/* QSPI irq setup */
|
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI0,
|
||||
MCFSIM_QSPIICR);
|
||||
mcf_mapirq2imr(MCF_IRQ_QSPI, MCFINTC_QSPI);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef CONFIG_M5249C3
|
||||
|
||||
static void __init m5249_smc91x_init(void)
|
||||
{
|
||||
u32 gpio;
|
||||
|
||||
/* Set the GPIO line as interrupt source for smc91x device */
|
||||
gpio = readl(MCFSIM2_GPIOINTENABLE);
|
||||
writel(gpio | 0x40, MCFSIM2_GPIOINTENABLE);
|
||||
|
||||
gpio = readl(MCFINTC2_INTPRI5);
|
||||
writel(gpio | 0x04000000, MCFINTC2_INTPRI5);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_M5249C3 */
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
|
||||
#ifdef CONFIG_M5249C3
|
||||
m5249_smc91x_init();
|
||||
#endif
|
||||
m5249_qspi_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static int __init init_BSP(void)
|
||||
{
|
||||
platform_add_devices(m5249_devices, ARRAY_SIZE(m5249_devices));
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(init_BSP);
|
||||
|
||||
/***************************************************************************/
|
||||
88
arch/m68k/coldfire/m525x.c
Normal file
88
arch/m68k/coldfire/m525x.c
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* 525x.c -- platform support for ColdFire 525x based boards
|
||||
*
|
||||
* Copyright (C) 2012, Steven King <sfking@fdwdc.com>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfqspi0,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m525x_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/* set the GPIO function for the qspi cs gpios */
|
||||
/* FIXME: replace with pinmux/pinctl support */
|
||||
u32 f = readl(MCFSIM2_GPIOFUNC);
|
||||
f |= (1 << MCFQSPI_CS2) | (1 << MCFQSPI_CS1) | (1 << MCFQSPI_CS0);
|
||||
writel(f, MCFSIM2_GPIOFUNC);
|
||||
|
||||
/* QSPI irq setup */
|
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL4 | MCFSIM_ICR_PRI0,
|
||||
MCFSIM_QSPIICR);
|
||||
mcf_mapirq2imr(MCF_IRQ_QSPI, MCFINTC_QSPI);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
static void __init m525x_i2c_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_I2C_COLDFIRE)
|
||||
u32 r;
|
||||
|
||||
/* first I2C controller uses regular irq setup */
|
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL5 | MCFSIM_ICR_PRI0,
|
||||
MCFSIM_I2CICR);
|
||||
mcf_mapirq2imr(MCF_IRQ_I2C0, MCFINTC_I2C);
|
||||
|
||||
/* second I2C controller is completely different */
|
||||
r = readl(MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1));
|
||||
r &= ~MCFINTC2_INTPRI_BITS(0xf, MCF_IRQ_I2C1);
|
||||
r |= MCFINTC2_INTPRI_BITS(0x5, MCF_IRQ_I2C1);
|
||||
writel(r, MCFINTC2_INTPRI_REG(MCF_IRQ_I2C1));
|
||||
#endif /* IS_ENABLED(CONFIG_I2C_COLDFIRE) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
|
||||
m525x_qspi_init();
|
||||
m525x_i2c_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
135
arch/m68k/coldfire/m5272.c
Normal file
135
arch/m68k/coldfire/m5272.c
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m5272.c -- platform support for ColdFire 5272 based boards
|
||||
*
|
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2002, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/phy_fixed.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Some platforms need software versions of the GPIO data registers.
|
||||
*/
|
||||
unsigned short ppdata;
|
||||
unsigned char ledbank = 0xff;
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr2, "mcftmr.2", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr3, "mcftmr.3", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(fec0, "fec.0", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcftmr2,
|
||||
&clk_mcftmr3,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfqspi0,
|
||||
&clk_fec0,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m5272_uarts_init(void)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
/* Enable the output lines for the serial ports */
|
||||
v = readl(MCFSIM_PBCNT);
|
||||
v = (v & ~0x000000ff) | 0x00000055;
|
||||
writel(v, MCFSIM_PBCNT);
|
||||
|
||||
v = readl(MCFSIM_PDCNT);
|
||||
v = (v & ~0x000003fc) | 0x000002a8;
|
||||
writel(v, MCFSIM_PDCNT);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void m5272_cpu_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
/* Set watchdog to reset, and enabled */
|
||||
__raw_writew(0, MCFSIM_WIRR);
|
||||
__raw_writew(1, MCFSIM_WRRR);
|
||||
__raw_writew(0, MCFSIM_WCR);
|
||||
for (;;)
|
||||
/* wait for watchdog to timeout */;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#if defined (CONFIG_MOD5272)
|
||||
/* Set base of device vectors to be 64 */
|
||||
writeb(0x40, MCFSIM_PIVR);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NETtel) || defined(CONFIG_SCALES)
|
||||
/* Copy command line from FLASH to local buffer... */
|
||||
memcpy(commandp, (char *) 0xf0004000, size);
|
||||
commandp[size-1] = 0;
|
||||
#elif defined(CONFIG_CANCam)
|
||||
/* Copy command line from FLASH to local buffer... */
|
||||
memcpy(commandp, (char *) 0xf0010000, size);
|
||||
commandp[size-1] = 0;
|
||||
#endif
|
||||
|
||||
mach_reset = m5272_cpu_reset;
|
||||
mach_sched_init = hw_timer_init;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Some 5272 based boards have the FEC ethernet diectly connected to
|
||||
* an ethernet switch. In this case we need to use the fixed phy type,
|
||||
* and we need to declare it early in boot.
|
||||
*/
|
||||
static struct fixed_phy_status nettel_fixed_phy_status __initdata = {
|
||||
.link = 1,
|
||||
.speed = 100,
|
||||
.duplex = 0,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static int __init init_BSP(void)
|
||||
{
|
||||
m5272_uarts_init();
|
||||
fixed_phy_add(PHY_POLL, 0, &nettel_fixed_phy_status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(init_BSP);
|
||||
|
||||
/***************************************************************************/
|
||||
126
arch/m68k/coldfire/m527x.c
Normal file
126
arch/m68k/coldfire/m527x.c
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m527x.c -- platform support for ColdFire 527x based boards
|
||||
*
|
||||
* Sub-architcture dependent initialization code for the Freescale
|
||||
* 5270/5271 and 5274/5275 CPUs.
|
||||
*
|
||||
* Copyright (C) 1999-2004, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2004, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfpit0, "mcfpit.0", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit1, "mcfpit.1", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit2, "mcfpit.2", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit3, "mcfpit.3", MCF_CLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart2, "mcfuart.2", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(fec0, "fec.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(fec1, "fec.1", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcfpit0,
|
||||
&clk_mcfpit1,
|
||||
&clk_mcfpit2,
|
||||
&clk_mcfpit3,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfuart2,
|
||||
&clk_mcfqspi0,
|
||||
&clk_fec0,
|
||||
&clk_fec1,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m527x_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
#if defined(CONFIG_M5271)
|
||||
u16 par;
|
||||
|
||||
/* setup QSPS pins for QSPI with gpio CS control */
|
||||
writeb(0x1f, MCFGPIO_PAR_QSPI);
|
||||
/* and CS2 & CS3 as gpio */
|
||||
par = readw(MCFGPIO_PAR_TIMER);
|
||||
par &= 0x3f3f;
|
||||
writew(par, MCFGPIO_PAR_TIMER);
|
||||
#elif defined(CONFIG_M5275)
|
||||
/* setup QSPS pins for QSPI with gpio CS control */
|
||||
writew(0x003e, MCFGPIO_PAR_QSPI);
|
||||
#endif
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m527x_uarts_init(void)
|
||||
{
|
||||
u16 sepmask;
|
||||
|
||||
/*
|
||||
* External Pin Mask Setting & Enable External Pin for Interface
|
||||
*/
|
||||
sepmask = readw(MCFGPIO_PAR_UART);
|
||||
sepmask |= UART0_ENABLE_MASK | UART1_ENABLE_MASK | UART2_ENABLE_MASK;
|
||||
writew(sepmask, MCFGPIO_PAR_UART);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m527x_fec_init(void)
|
||||
{
|
||||
u16 par;
|
||||
u8 v;
|
||||
|
||||
/* Set multi-function pins to ethernet mode for fec0 */
|
||||
#if defined(CONFIG_M5271)
|
||||
v = readb(MCFGPIO_PAR_FECI2C);
|
||||
writeb(v | 0xf0, MCFGPIO_PAR_FECI2C);
|
||||
#else
|
||||
par = readw(MCFGPIO_PAR_FECI2C);
|
||||
writew(par | 0xf00, MCFGPIO_PAR_FECI2C);
|
||||
v = readb(MCFGPIO_PAR_FEC0HL);
|
||||
writeb(v | 0xc0, MCFGPIO_PAR_FEC0HL);
|
||||
|
||||
/* Set multi-function pins to ethernet mode for fec1 */
|
||||
par = readw(MCFGPIO_PAR_FECI2C);
|
||||
writew(par | 0xa0, MCFGPIO_PAR_FECI2C);
|
||||
v = readb(MCFGPIO_PAR_FEC1HL);
|
||||
writeb(v | 0xc0, MCFGPIO_PAR_FEC1HL);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
m527x_uarts_init();
|
||||
m527x_fec_init();
|
||||
m527x_qspi_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
132
arch/m68k/coldfire/m528x.c
Normal file
132
arch/m68k/coldfire/m528x.c
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m528x.c -- platform support for ColdFire 528x based boards
|
||||
*
|
||||
* Sub-architcture dependent initialization code for the Freescale
|
||||
* 5280, 5281 and 5282 CPUs.
|
||||
*
|
||||
* Copyright (C) 1999-2003, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2003, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfpit0, "mcfpit.0", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit1, "mcfpit.1", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit2, "mcfpit.2", MCF_CLK);
|
||||
DEFINE_CLK(mcfpit3, "mcfpit.3", MCF_CLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart2, "mcfuart.2", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfqspi0, "mcfqspi.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(fec0, "fec.0", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcfpit0,
|
||||
&clk_mcfpit1,
|
||||
&clk_mcfpit2,
|
||||
&clk_mcfpit3,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfuart2,
|
||||
&clk_mcfqspi0,
|
||||
&clk_fec0,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m528x_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/* setup Port QS for QSPI with gpio CS control */
|
||||
__raw_writeb(0x07, MCFGPIO_PQSPAR);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m528x_uarts_init(void)
|
||||
{
|
||||
u8 port;
|
||||
|
||||
/* make sure PUAPAR is set for UART0 and UART1 */
|
||||
port = readb(MCFGPIO_PUAPAR);
|
||||
port |= 0x03 | (0x03 << 2);
|
||||
writeb(port, MCFGPIO_PUAPAR);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m528x_fec_init(void)
|
||||
{
|
||||
u16 v16;
|
||||
|
||||
/* Set multi-function pins to ethernet mode for fec0 */
|
||||
v16 = readw(MCFGPIO_PASPAR);
|
||||
writew(v16 | 0xf00, MCFGPIO_PASPAR);
|
||||
writeb(0xc0, MCFGPIO_PEHLPAR);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef CONFIG_WILDFIRE
|
||||
void wildfire_halt(void)
|
||||
{
|
||||
writeb(0, 0x30000007);
|
||||
writeb(0x2, 0x30000007);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_WILDFIREMOD
|
||||
void wildfiremod_halt(void)
|
||||
{
|
||||
printk(KERN_INFO "WildFireMod hibernating...\n");
|
||||
|
||||
/* Set portE.5 to Digital IO */
|
||||
MCF5282_GPIO_PEPAR &= ~(1 << (5 * 2));
|
||||
|
||||
/* Make portE.5 an output */
|
||||
MCF5282_GPIO_DDRE |= (1 << 5);
|
||||
|
||||
/* Now toggle portE.5 from low to high */
|
||||
MCF5282_GPIO_PORTE &= ~(1 << 5);
|
||||
MCF5282_GPIO_PORTE |= (1 << 5);
|
||||
|
||||
printk(KERN_EMERG "Failed to hibernate. Halting!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#ifdef CONFIG_WILDFIRE
|
||||
mach_halt = wildfire_halt;
|
||||
#endif
|
||||
#ifdef CONFIG_WILDFIREMOD
|
||||
mach_halt = wildfiremod_halt;
|
||||
#endif
|
||||
mach_sched_init = hw_timer_init;
|
||||
m528x_uarts_init();
|
||||
m528x_fec_init();
|
||||
m528x_qspi_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
78
arch/m68k/coldfire/m5307.c
Normal file
78
arch/m68k/coldfire/m5307.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m5307.c -- platform support for ColdFire 5307 based boards
|
||||
*
|
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2000, Lineo (www.lineo.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfwdebug.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Some platforms need software versions of the GPIO data registers.
|
||||
*/
|
||||
unsigned short ppdata;
|
||||
unsigned char ledbank = 0xff;
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#if defined(CONFIG_NETtel) || \
|
||||
defined(CONFIG_SECUREEDGEMP3) || defined(CONFIG_CLEOPATRA)
|
||||
/* Copy command line from FLASH to local buffer... */
|
||||
memcpy(commandp, (char *) 0xf0004000, size);
|
||||
commandp[size-1] = 0;
|
||||
#endif
|
||||
|
||||
mach_sched_init = hw_timer_init;
|
||||
|
||||
/* Only support the external interrupts on their primary level */
|
||||
mcf_mapirq2imr(25, MCFINTC_EINT1);
|
||||
mcf_mapirq2imr(27, MCFINTC_EINT3);
|
||||
mcf_mapirq2imr(29, MCFINTC_EINT5);
|
||||
mcf_mapirq2imr(31, MCFINTC_EINT7);
|
||||
|
||||
#ifdef CONFIG_BDM_DISABLE
|
||||
/*
|
||||
* Disable the BDM clocking. This also turns off most of the rest of
|
||||
* the BDM device. This is good for EMC reasons. This option is not
|
||||
* incompatible with the memory protection option.
|
||||
*/
|
||||
wdebug(MCFDEBUG_CSR, MCFDEBUG_CSR_PSTCLK);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
588
arch/m68k/coldfire/m53xx.c
Normal file
588
arch/m68k/coldfire/m53xx.c
Normal file
|
|
@ -0,0 +1,588 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m53xx.c -- platform support for ColdFire 53xx based boards
|
||||
*
|
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2000, Lineo (www.lineo.com)
|
||||
* Yaroslav Vinogradov yaroslav.vinogradov@freescale.com
|
||||
* Copyright Freescale Semiconductor, Inc 2006
|
||||
* Copyright (c) 2006, emlix, Sebastian Hess <shess@hessware.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfdma.h>
|
||||
#include <asm/mcfwdebug.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(0, "flexbus", 2, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfcan.0", 8, MCF_CLK);
|
||||
DEFINE_CLK(0, "fec.0", 12, MCF_CLK);
|
||||
DEFINE_CLK(0, "edma", 17, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.0", 18, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.1", 19, MCF_CLK);
|
||||
DEFINE_CLK(0, "iack.0", 21, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfi2c.0", 22, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfqspi.0", 23, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfuart.0", 24, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.1", 25, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.2", 26, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcftmr.0", 28, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.1", 29, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.2", 30, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.3", 31, MCF_CLK);
|
||||
|
||||
DEFINE_CLK(0, "mcfpit.0", 32, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.1", 33, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.2", 34, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.3", 35, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpwm.0", 36, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfeport.0", 37, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfwdt.0", 38, MCF_CLK);
|
||||
DEFINE_CLK(0, "sys.0", 40, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "gpio.0", 41, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfrtc.0", 42, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcflcd.0", 43, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfusb-otg.0", 44, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfusb-host.0", 45, MCF_CLK);
|
||||
DEFINE_CLK(0, "sdram.0", 46, MCF_CLK);
|
||||
DEFINE_CLK(0, "ssi.0", 47, MCF_CLK);
|
||||
DEFINE_CLK(0, "pll.0", 48, MCF_CLK);
|
||||
|
||||
DEFINE_CLK(1, "mdha.0", 32, MCF_CLK);
|
||||
DEFINE_CLK(1, "skha.0", 33, MCF_CLK);
|
||||
DEFINE_CLK(1, "rng.0", 34, MCF_CLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&__clk_0_2, /* flexbus */
|
||||
&__clk_0_8, /* mcfcan.0 */
|
||||
&__clk_0_12, /* fec.0 */
|
||||
&__clk_0_17, /* edma */
|
||||
&__clk_0_18, /* intc.0 */
|
||||
&__clk_0_19, /* intc.1 */
|
||||
&__clk_0_21, /* iack.0 */
|
||||
&__clk_0_22, /* mcfi2c.0 */
|
||||
&__clk_0_23, /* mcfqspi.0 */
|
||||
&__clk_0_24, /* mcfuart.0 */
|
||||
&__clk_0_25, /* mcfuart.1 */
|
||||
&__clk_0_26, /* mcfuart.2 */
|
||||
&__clk_0_28, /* mcftmr.0 */
|
||||
&__clk_0_29, /* mcftmr.1 */
|
||||
&__clk_0_30, /* mcftmr.2 */
|
||||
&__clk_0_31, /* mcftmr.3 */
|
||||
|
||||
&__clk_0_32, /* mcfpit.0 */
|
||||
&__clk_0_33, /* mcfpit.1 */
|
||||
&__clk_0_34, /* mcfpit.2 */
|
||||
&__clk_0_35, /* mcfpit.3 */
|
||||
&__clk_0_36, /* mcfpwm.0 */
|
||||
&__clk_0_37, /* mcfeport.0 */
|
||||
&__clk_0_38, /* mcfwdt.0 */
|
||||
&__clk_0_40, /* sys.0 */
|
||||
&__clk_0_41, /* gpio.0 */
|
||||
&__clk_0_42, /* mcfrtc.0 */
|
||||
&__clk_0_43, /* mcflcd.0 */
|
||||
&__clk_0_44, /* mcfusb-otg.0 */
|
||||
&__clk_0_45, /* mcfusb-host.0 */
|
||||
&__clk_0_46, /* sdram.0 */
|
||||
&__clk_0_47, /* ssi.0 */
|
||||
&__clk_0_48, /* pll.0 */
|
||||
|
||||
&__clk_1_32, /* mdha.0 */
|
||||
&__clk_1_33, /* skha.0 */
|
||||
&__clk_1_34, /* rng.0 */
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct clk * const enable_clks[] __initconst = {
|
||||
&__clk_0_2, /* flexbus */
|
||||
&__clk_0_18, /* intc.0 */
|
||||
&__clk_0_19, /* intc.1 */
|
||||
&__clk_0_21, /* iack.0 */
|
||||
&__clk_0_24, /* mcfuart.0 */
|
||||
&__clk_0_25, /* mcfuart.1 */
|
||||
&__clk_0_26, /* mcfuart.2 */
|
||||
&__clk_0_28, /* mcftmr.0 */
|
||||
&__clk_0_29, /* mcftmr.1 */
|
||||
&__clk_0_32, /* mcfpit.0 */
|
||||
&__clk_0_33, /* mcfpit.1 */
|
||||
&__clk_0_37, /* mcfeport.0 */
|
||||
&__clk_0_40, /* sys.0 */
|
||||
&__clk_0_41, /* gpio.0 */
|
||||
&__clk_0_46, /* sdram.0 */
|
||||
&__clk_0_48, /* pll.0 */
|
||||
};
|
||||
|
||||
static struct clk * const disable_clks[] __initconst = {
|
||||
&__clk_0_8, /* mcfcan.0 */
|
||||
&__clk_0_12, /* fec.0 */
|
||||
&__clk_0_17, /* edma */
|
||||
&__clk_0_22, /* mcfi2c.0 */
|
||||
&__clk_0_23, /* mcfqspi.0 */
|
||||
&__clk_0_30, /* mcftmr.2 */
|
||||
&__clk_0_31, /* mcftmr.3 */
|
||||
&__clk_0_34, /* mcfpit.2 */
|
||||
&__clk_0_35, /* mcfpit.3 */
|
||||
&__clk_0_36, /* mcfpwm.0 */
|
||||
&__clk_0_38, /* mcfwdt.0 */
|
||||
&__clk_0_42, /* mcfrtc.0 */
|
||||
&__clk_0_43, /* mcflcd.0 */
|
||||
&__clk_0_44, /* mcfusb-otg.0 */
|
||||
&__clk_0_45, /* mcfusb-host.0 */
|
||||
&__clk_0_47, /* ssi.0 */
|
||||
&__clk_1_32, /* mdha.0 */
|
||||
&__clk_1_33, /* skha.0 */
|
||||
&__clk_1_34, /* rng.0 */
|
||||
};
|
||||
|
||||
|
||||
static void __init m53xx_clk_init(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
/* make sure these clocks are enabled */
|
||||
for (i = 0; i < ARRAY_SIZE(enable_clks); ++i)
|
||||
__clk_init_enabled(enable_clks[i]);
|
||||
/* make sure these clocks are disabled */
|
||||
for (i = 0; i < ARRAY_SIZE(disable_clks); ++i)
|
||||
__clk_init_disabled(disable_clks[i]);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m53xx_qspi_init(void)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/* setup QSPS pins for QSPI with gpio CS control */
|
||||
writew(0x01f0, MCFGPIO_PAR_QSPI);
|
||||
#endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m53xx_uarts_init(void)
|
||||
{
|
||||
/* UART GPIO initialization */
|
||||
writew(readw(MCFGPIO_PAR_UART) | 0x0FFF, MCFGPIO_PAR_UART);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m53xx_fec_init(void)
|
||||
{
|
||||
u8 v;
|
||||
|
||||
/* Set multi-function pins to ethernet mode for fec0 */
|
||||
v = readb(MCFGPIO_PAR_FECI2C);
|
||||
v |= MCF_GPIO_PAR_FECI2C_PAR_MDC_EMDC |
|
||||
MCF_GPIO_PAR_FECI2C_PAR_MDIO_EMDIO;
|
||||
writeb(v, MCFGPIO_PAR_FECI2C);
|
||||
|
||||
v = readb(MCFGPIO_PAR_FEC);
|
||||
v = MCF_GPIO_PAR_FEC_PAR_FEC_7W_FEC | MCF_GPIO_PAR_FEC_PAR_FEC_MII_FEC;
|
||||
writeb(v, MCFGPIO_PAR_FEC);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#if !defined(CONFIG_BOOTPARAM)
|
||||
/* Copy command line from FLASH to local buffer... */
|
||||
memcpy(commandp, (char *) 0x4000, 4);
|
||||
if(strncmp(commandp, "kcl ", 4) == 0){
|
||||
memcpy(commandp, (char *) 0x4004, size);
|
||||
commandp[size-1] = 0;
|
||||
} else {
|
||||
memset(commandp, 0, size);
|
||||
}
|
||||
#endif
|
||||
mach_sched_init = hw_timer_init;
|
||||
m53xx_clk_init();
|
||||
m53xx_uarts_init();
|
||||
m53xx_fec_init();
|
||||
m53xx_qspi_init();
|
||||
|
||||
#ifdef CONFIG_BDM_DISABLE
|
||||
/*
|
||||
* Disable the BDM clocking. This also turns off most of the rest of
|
||||
* the BDM device. This is good for EMC reasons. This option is not
|
||||
* incompatible with the memory protection option.
|
||||
*/
|
||||
wdebug(MCFDEBUG_CSR, MCFDEBUG_CSR_PSTCLK);
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
/* Board initialization */
|
||||
/***************************************************************************/
|
||||
/*
|
||||
* PLL min/max specifications
|
||||
*/
|
||||
#define MAX_FVCO 500000 /* KHz */
|
||||
#define MAX_FSYS 80000 /* KHz */
|
||||
#define MIN_FSYS 58333 /* KHz */
|
||||
#define FREF 16000 /* KHz */
|
||||
|
||||
|
||||
#define MAX_MFD 135 /* Multiplier */
|
||||
#define MIN_MFD 88 /* Multiplier */
|
||||
#define BUSDIV 6 /* Divider */
|
||||
|
||||
/*
|
||||
* Low Power Divider specifications
|
||||
*/
|
||||
#define MIN_LPD (1 << 0) /* Divider (not encoded) */
|
||||
#define MAX_LPD (1 << 15) /* Divider (not encoded) */
|
||||
#define DEFAULT_LPD (1 << 1) /* Divider (not encoded) */
|
||||
|
||||
#define SYS_CLK_KHZ 80000
|
||||
#define SYSTEM_PERIOD 12.5
|
||||
/*
|
||||
* SDRAM Timing Parameters
|
||||
*/
|
||||
#define SDRAM_BL 8 /* # of beats in a burst */
|
||||
#define SDRAM_TWR 2 /* in clocks */
|
||||
#define SDRAM_CASL 2.5 /* CASL in clocks */
|
||||
#define SDRAM_TRCD 2 /* in clocks */
|
||||
#define SDRAM_TRP 2 /* in clocks */
|
||||
#define SDRAM_TRFC 7 /* in clocks */
|
||||
#define SDRAM_TREFI 7800 /* in ns */
|
||||
|
||||
#define EXT_SRAM_ADDRESS (0xC0000000)
|
||||
#define FLASH_ADDRESS (0x00000000)
|
||||
#define SDRAM_ADDRESS (0x40000000)
|
||||
|
||||
#define NAND_FLASH_ADDRESS (0xD0000000)
|
||||
|
||||
int sys_clk_khz = 0;
|
||||
int sys_clk_mhz = 0;
|
||||
|
||||
void wtm_init(void);
|
||||
void scm_init(void);
|
||||
void gpio_init(void);
|
||||
void fbcs_init(void);
|
||||
void sdramc_init(void);
|
||||
int clock_pll (int fsys, int flags);
|
||||
int clock_limp (int);
|
||||
int clock_exit_limp (void);
|
||||
int get_sys_clock (void);
|
||||
|
||||
asmlinkage void __init sysinit(void)
|
||||
{
|
||||
sys_clk_khz = clock_pll(0, 0);
|
||||
sys_clk_mhz = sys_clk_khz/1000;
|
||||
|
||||
wtm_init();
|
||||
scm_init();
|
||||
gpio_init();
|
||||
fbcs_init();
|
||||
sdramc_init();
|
||||
}
|
||||
|
||||
void wtm_init(void)
|
||||
{
|
||||
/* Disable watchdog timer */
|
||||
writew(0, MCF_WTM_WCR);
|
||||
}
|
||||
|
||||
#define MCF_SCM_BCR_GBW (0x00000100)
|
||||
#define MCF_SCM_BCR_GBR (0x00000200)
|
||||
|
||||
void scm_init(void)
|
||||
{
|
||||
/* All masters are trusted */
|
||||
writel(0x77777777, MCF_SCM_MPR);
|
||||
|
||||
/* Allow supervisor/user, read/write, and trusted/untrusted
|
||||
access to all slaves */
|
||||
writel(0, MCF_SCM_PACRA);
|
||||
writel(0, MCF_SCM_PACRB);
|
||||
writel(0, MCF_SCM_PACRC);
|
||||
writel(0, MCF_SCM_PACRD);
|
||||
writel(0, MCF_SCM_PACRE);
|
||||
writel(0, MCF_SCM_PACRF);
|
||||
|
||||
/* Enable bursts */
|
||||
writel(MCF_SCM_BCR_GBR | MCF_SCM_BCR_GBW, MCF_SCM_BCR);
|
||||
}
|
||||
|
||||
|
||||
void fbcs_init(void)
|
||||
{
|
||||
writeb(0x3E, MCFGPIO_PAR_CS);
|
||||
|
||||
/* Latch chip select */
|
||||
writel(0x10080000, MCF_FBCS1_CSAR);
|
||||
|
||||
writel(0x002A3780, MCF_FBCS1_CSCR);
|
||||
writel(MCF_FBCS_CSMR_BAM_2M | MCF_FBCS_CSMR_V, MCF_FBCS1_CSMR);
|
||||
|
||||
/* Initialize latch to drive signals to inactive states */
|
||||
writew(0xffff, 0x10080000);
|
||||
|
||||
/* External SRAM */
|
||||
writel(EXT_SRAM_ADDRESS, MCF_FBCS1_CSAR);
|
||||
writel(MCF_FBCS_CSCR_PS_16 |
|
||||
MCF_FBCS_CSCR_AA |
|
||||
MCF_FBCS_CSCR_SBM |
|
||||
MCF_FBCS_CSCR_WS(1),
|
||||
MCF_FBCS1_CSCR);
|
||||
writel(MCF_FBCS_CSMR_BAM_512K | MCF_FBCS_CSMR_V, MCF_FBCS1_CSMR);
|
||||
|
||||
/* Boot Flash connected to FBCS0 */
|
||||
writel(FLASH_ADDRESS, MCF_FBCS0_CSAR);
|
||||
writel(MCF_FBCS_CSCR_PS_16 |
|
||||
MCF_FBCS_CSCR_BEM |
|
||||
MCF_FBCS_CSCR_AA |
|
||||
MCF_FBCS_CSCR_SBM |
|
||||
MCF_FBCS_CSCR_WS(7),
|
||||
MCF_FBCS0_CSCR);
|
||||
writel(MCF_FBCS_CSMR_BAM_32M | MCF_FBCS_CSMR_V, MCF_FBCS0_CSMR);
|
||||
}
|
||||
|
||||
void sdramc_init(void)
|
||||
{
|
||||
/*
|
||||
* Check to see if the SDRAM has already been initialized
|
||||
* by a run control tool
|
||||
*/
|
||||
if (!(readl(MCF_SDRAMC_SDCR) & MCF_SDRAMC_SDCR_REF)) {
|
||||
/* SDRAM chip select initialization */
|
||||
|
||||
/* Initialize SDRAM chip select */
|
||||
writel(MCF_SDRAMC_SDCS_BA(SDRAM_ADDRESS) |
|
||||
MCF_SDRAMC_SDCS_CSSZ(MCF_SDRAMC_SDCS_CSSZ_32MBYTE),
|
||||
MCF_SDRAMC_SDCS0);
|
||||
|
||||
/*
|
||||
* Basic configuration and initialization
|
||||
*/
|
||||
writel(MCF_SDRAMC_SDCFG1_SRD2RW((int)((SDRAM_CASL + 2) + 0.5)) |
|
||||
MCF_SDRAMC_SDCFG1_SWT2RD(SDRAM_TWR + 1) |
|
||||
MCF_SDRAMC_SDCFG1_RDLAT((int)((SDRAM_CASL * 2) + 2)) |
|
||||
MCF_SDRAMC_SDCFG1_ACT2RW((int)(SDRAM_TRCD + 0.5)) |
|
||||
MCF_SDRAMC_SDCFG1_PRE2ACT((int)(SDRAM_TRP + 0.5)) |
|
||||
MCF_SDRAMC_SDCFG1_REF2ACT((int)(SDRAM_TRFC + 0.5)) |
|
||||
MCF_SDRAMC_SDCFG1_WTLAT(3),
|
||||
MCF_SDRAMC_SDCFG1);
|
||||
writel(MCF_SDRAMC_SDCFG2_BRD2PRE(SDRAM_BL / 2 + 1) |
|
||||
MCF_SDRAMC_SDCFG2_BWT2RW(SDRAM_BL / 2 + SDRAM_TWR) |
|
||||
MCF_SDRAMC_SDCFG2_BRD2WT((int)((SDRAM_CASL + SDRAM_BL / 2 - 1.0) + 0.5)) |
|
||||
MCF_SDRAMC_SDCFG2_BL(SDRAM_BL - 1),
|
||||
MCF_SDRAMC_SDCFG2);
|
||||
|
||||
|
||||
/*
|
||||
* Precharge and enable write to SDMR
|
||||
*/
|
||||
writel(MCF_SDRAMC_SDCR_MODE_EN |
|
||||
MCF_SDRAMC_SDCR_CKE |
|
||||
MCF_SDRAMC_SDCR_DDR |
|
||||
MCF_SDRAMC_SDCR_MUX(1) |
|
||||
MCF_SDRAMC_SDCR_RCNT((int)(((SDRAM_TREFI / (SYSTEM_PERIOD * 64)) - 1) + 0.5)) |
|
||||
MCF_SDRAMC_SDCR_PS_16 |
|
||||
MCF_SDRAMC_SDCR_IPALL,
|
||||
MCF_SDRAMC_SDCR);
|
||||
|
||||
/*
|
||||
* Write extended mode register
|
||||
*/
|
||||
writel(MCF_SDRAMC_SDMR_BNKAD_LEMR |
|
||||
MCF_SDRAMC_SDMR_AD(0x0) |
|
||||
MCF_SDRAMC_SDMR_CMD,
|
||||
MCF_SDRAMC_SDMR);
|
||||
|
||||
/*
|
||||
* Write mode register and reset DLL
|
||||
*/
|
||||
writel(MCF_SDRAMC_SDMR_BNKAD_LMR |
|
||||
MCF_SDRAMC_SDMR_AD(0x163) |
|
||||
MCF_SDRAMC_SDMR_CMD,
|
||||
MCF_SDRAMC_SDMR);
|
||||
|
||||
/*
|
||||
* Execute a PALL command
|
||||
*/
|
||||
writel(readl(MCF_SDRAMC_SDCR) | MCF_SDRAMC_SDCR_IPALL, MCF_SDRAMC_SDCR);
|
||||
|
||||
/*
|
||||
* Perform two REF cycles
|
||||
*/
|
||||
writel(readl(MCF_SDRAMC_SDCR) | MCF_SDRAMC_SDCR_IREF, MCF_SDRAMC_SDCR);
|
||||
writel(readl(MCF_SDRAMC_SDCR) | MCF_SDRAMC_SDCR_IREF, MCF_SDRAMC_SDCR);
|
||||
|
||||
/*
|
||||
* Write mode register and clear reset DLL
|
||||
*/
|
||||
writel(MCF_SDRAMC_SDMR_BNKAD_LMR |
|
||||
MCF_SDRAMC_SDMR_AD(0x063) |
|
||||
MCF_SDRAMC_SDMR_CMD,
|
||||
MCF_SDRAMC_SDMR);
|
||||
|
||||
/*
|
||||
* Enable auto refresh and lock SDMR
|
||||
*/
|
||||
writel(readl(MCF_SDRAMC_SDCR) & ~MCF_SDRAMC_SDCR_MODE_EN,
|
||||
MCF_SDRAMC_SDCR);
|
||||
writel(MCF_SDRAMC_SDCR_REF | MCF_SDRAMC_SDCR_DQS_OE(0xC),
|
||||
MCF_SDRAMC_SDCR);
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_init(void)
|
||||
{
|
||||
/* Enable UART0 pins */
|
||||
writew(MCF_GPIO_PAR_UART_PAR_URXD0 | MCF_GPIO_PAR_UART_PAR_UTXD0,
|
||||
MCFGPIO_PAR_UART);
|
||||
|
||||
/*
|
||||
* Initialize TIN3 as a GPIO output to enable the write
|
||||
* half of the latch.
|
||||
*/
|
||||
writeb(0x00, MCFGPIO_PAR_TIMER);
|
||||
writeb(0x08, MCFGPIO_PDDR_TIMER);
|
||||
writeb(0x00, MCFGPIO_PCLRR_TIMER);
|
||||
}
|
||||
|
||||
int clock_pll(int fsys, int flags)
|
||||
{
|
||||
int fref, temp, fout, mfd;
|
||||
u32 i;
|
||||
|
||||
fref = FREF;
|
||||
|
||||
if (fsys == 0) {
|
||||
/* Return current PLL output */
|
||||
mfd = readb(MCF_PLL_PFDR);
|
||||
|
||||
return (fref * mfd / (BUSDIV * 4));
|
||||
}
|
||||
|
||||
/* Check bounds of requested system clock */
|
||||
if (fsys > MAX_FSYS)
|
||||
fsys = MAX_FSYS;
|
||||
if (fsys < MIN_FSYS)
|
||||
fsys = MIN_FSYS;
|
||||
|
||||
/* Multiplying by 100 when calculating the temp value,
|
||||
and then dividing by 100 to calculate the mfd allows
|
||||
for exact values without needing to include floating
|
||||
point libraries. */
|
||||
temp = 100 * fsys / fref;
|
||||
mfd = 4 * BUSDIV * temp / 100;
|
||||
|
||||
/* Determine the output frequency for selected values */
|
||||
fout = (fref * mfd / (BUSDIV * 4));
|
||||
|
||||
/*
|
||||
* Check to see if the SDRAM has already been initialized.
|
||||
* If it has then the SDRAM needs to be put into self refresh
|
||||
* mode before reprogramming the PLL.
|
||||
*/
|
||||
if (readl(MCF_SDRAMC_SDCR) & MCF_SDRAMC_SDCR_REF)
|
||||
/* Put SDRAM into self refresh mode */
|
||||
writel(readl(MCF_SDRAMC_SDCR) & ~MCF_SDRAMC_SDCR_CKE,
|
||||
MCF_SDRAMC_SDCR);
|
||||
|
||||
/*
|
||||
* Initialize the PLL to generate the new system clock frequency.
|
||||
* The device must be put into LIMP mode to reprogram the PLL.
|
||||
*/
|
||||
|
||||
/* Enter LIMP mode */
|
||||
clock_limp(DEFAULT_LPD);
|
||||
|
||||
/* Reprogram PLL for desired fsys */
|
||||
writeb(MCF_PLL_PODR_CPUDIV(BUSDIV/3) | MCF_PLL_PODR_BUSDIV(BUSDIV),
|
||||
MCF_PLL_PODR);
|
||||
|
||||
writeb(mfd, MCF_PLL_PFDR);
|
||||
|
||||
/* Exit LIMP mode */
|
||||
clock_exit_limp();
|
||||
|
||||
/*
|
||||
* Return the SDRAM to normal operation if it is in use.
|
||||
*/
|
||||
if (readl(MCF_SDRAMC_SDCR) & MCF_SDRAMC_SDCR_REF)
|
||||
/* Exit self refresh mode */
|
||||
writel(readl(MCF_SDRAMC_SDCR) | MCF_SDRAMC_SDCR_CKE,
|
||||
MCF_SDRAMC_SDCR);
|
||||
|
||||
/* Errata - workaround for SDRAM opeartion after exiting LIMP mode */
|
||||
writel(MCF_SDRAMC_REFRESH, MCF_SDRAMC_LIMP_FIX);
|
||||
|
||||
/* wait for DQS logic to relock */
|
||||
for (i = 0; i < 0x200; i++)
|
||||
;
|
||||
|
||||
return fout;
|
||||
}
|
||||
|
||||
int clock_limp(int div)
|
||||
{
|
||||
u32 temp;
|
||||
|
||||
/* Check bounds of divider */
|
||||
if (div < MIN_LPD)
|
||||
div = MIN_LPD;
|
||||
if (div > MAX_LPD)
|
||||
div = MAX_LPD;
|
||||
|
||||
/* Save of the current value of the SSIDIV so we don't
|
||||
overwrite the value*/
|
||||
temp = readw(MCF_CCM_CDR) & MCF_CCM_CDR_SSIDIV(0xF);
|
||||
|
||||
/* Apply the divider to the system clock */
|
||||
writew(MCF_CCM_CDR_LPDIV(div) | MCF_CCM_CDR_SSIDIV(temp), MCF_CCM_CDR);
|
||||
|
||||
writew(readw(MCF_CCM_MISCCR) | MCF_CCM_MISCCR_LIMP, MCF_CCM_MISCCR);
|
||||
|
||||
return (FREF/(3*(1 << div)));
|
||||
}
|
||||
|
||||
int clock_exit_limp(void)
|
||||
{
|
||||
int fout;
|
||||
|
||||
/* Exit LIMP mode */
|
||||
writew(readw(MCF_CCM_MISCCR) & ~MCF_CCM_MISCCR_LIMP, MCF_CCM_MISCCR);
|
||||
|
||||
/* Wait for PLL to lock */
|
||||
while (!(readw(MCF_CCM_MISCCR) & MCF_CCM_MISCCR_PLL_LOCK))
|
||||
;
|
||||
|
||||
fout = get_sys_clock();
|
||||
|
||||
return fout;
|
||||
}
|
||||
|
||||
int get_sys_clock(void)
|
||||
{
|
||||
int divider;
|
||||
|
||||
/* Test to see if device is in LIMP mode */
|
||||
if (readw(MCF_CCM_MISCCR) & MCF_CCM_MISCCR_LIMP) {
|
||||
divider = readw(MCF_CCM_CDR) & MCF_CCM_CDR_LPDIV(0xF);
|
||||
return (FREF/(2 << divider));
|
||||
}
|
||||
else
|
||||
return (FREF * readb(MCF_PLL_PFDR)) / (BUSDIV * 4);
|
||||
}
|
||||
53
arch/m68k/coldfire/m5407.c
Normal file
53
arch/m68k/coldfire/m5407.c
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m5407.c -- platform support for ColdFire 5407 based boards
|
||||
*
|
||||
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2000, Lineo (www.lineo.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr0, "mcftmr.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcftmr1, "mcftmr.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcftmr0,
|
||||
&clk_mcftmr1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
mach_sched_init = hw_timer_init;
|
||||
|
||||
/* Only support the external interrupts on their primary level */
|
||||
mcf_mapirq2imr(25, MCFINTC_EINT1);
|
||||
mcf_mapirq2imr(27, MCFINTC_EINT3);
|
||||
mcf_mapirq2imr(29, MCFINTC_EINT5);
|
||||
mcf_mapirq2imr(31, MCFINTC_EINT7);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
261
arch/m68k/coldfire/m5441x.c
Normal file
261
arch/m68k/coldfire/m5441x.c
Normal file
|
|
@ -0,0 +1,261 @@
|
|||
/*
|
||||
* m5441x.c -- support for Coldfire m5441x processors
|
||||
*
|
||||
* (C) Copyright Steven King <sfking@fdwdc.com>
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfdma.h>
|
||||
#include <asm/mcfclk.h>
|
||||
|
||||
DEFINE_CLK(0, "flexbus", 2, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfcan.0", 8, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfcan.1", 9, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfi2c.1", 14, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfdspi.1", 15, MCF_CLK);
|
||||
DEFINE_CLK(0, "edma", 17, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.0", 18, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.1", 19, MCF_CLK);
|
||||
DEFINE_CLK(0, "intc.2", 20, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfi2c.0", 22, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfdspi.0", 23, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfuart.0", 24, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.1", 25, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.2", 26, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcfuart.3", 27, MCF_BUSCLK);
|
||||
DEFINE_CLK(0, "mcftmr.0", 28, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.1", 29, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.2", 30, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcftmr.3", 31, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.0", 32, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.1", 33, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.2", 34, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfpit.3", 35, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfeport.0", 37, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfadc.0", 38, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfdac.0", 39, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfrtc.0", 42, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfsim.0", 43, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfusb-otg.0", 44, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfusb-host.0", 45, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfddr-sram.0", 46, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfssi.0", 47, MCF_CLK);
|
||||
DEFINE_CLK(0, "pll.0", 48, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfrng.0", 49, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfssi.1", 50, MCF_CLK);
|
||||
DEFINE_CLK(0, "mcfsdhc.0", 51, MCF_CLK);
|
||||
DEFINE_CLK(0, "enet-fec.0", 53, MCF_CLK);
|
||||
DEFINE_CLK(0, "enet-fec.1", 54, MCF_CLK);
|
||||
DEFINE_CLK(0, "switch.0", 55, MCF_CLK);
|
||||
DEFINE_CLK(0, "switch.1", 56, MCF_CLK);
|
||||
DEFINE_CLK(0, "nand.0", 63, MCF_CLK);
|
||||
|
||||
DEFINE_CLK(1, "mcfow.0", 2, MCF_CLK);
|
||||
DEFINE_CLK(1, "mcfi2c.2", 4, MCF_CLK);
|
||||
DEFINE_CLK(1, "mcfi2c.3", 5, MCF_CLK);
|
||||
DEFINE_CLK(1, "mcfi2c.4", 6, MCF_CLK);
|
||||
DEFINE_CLK(1, "mcfi2c.5", 7, MCF_CLK);
|
||||
DEFINE_CLK(1, "mcfuart.4", 24, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfuart.5", 25, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfuart.6", 26, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfuart.7", 27, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfuart.8", 28, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfuart.9", 29, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "mcfpwm.0", 34, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "sys.0", 36, MCF_BUSCLK);
|
||||
DEFINE_CLK(1, "gpio.0", 37, MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&__clk_0_2,
|
||||
&__clk_0_8,
|
||||
&__clk_0_9,
|
||||
&__clk_0_14,
|
||||
&__clk_0_15,
|
||||
&__clk_0_17,
|
||||
&__clk_0_18,
|
||||
&__clk_0_19,
|
||||
&__clk_0_20,
|
||||
&__clk_0_22,
|
||||
&__clk_0_23,
|
||||
&__clk_0_24,
|
||||
&__clk_0_25,
|
||||
&__clk_0_26,
|
||||
&__clk_0_27,
|
||||
&__clk_0_28,
|
||||
&__clk_0_29,
|
||||
&__clk_0_30,
|
||||
&__clk_0_31,
|
||||
&__clk_0_32,
|
||||
&__clk_0_33,
|
||||
&__clk_0_34,
|
||||
&__clk_0_35,
|
||||
&__clk_0_37,
|
||||
&__clk_0_38,
|
||||
&__clk_0_39,
|
||||
&__clk_0_42,
|
||||
&__clk_0_43,
|
||||
&__clk_0_44,
|
||||
&__clk_0_45,
|
||||
&__clk_0_46,
|
||||
&__clk_0_47,
|
||||
&__clk_0_48,
|
||||
&__clk_0_49,
|
||||
&__clk_0_50,
|
||||
&__clk_0_51,
|
||||
&__clk_0_53,
|
||||
&__clk_0_54,
|
||||
&__clk_0_55,
|
||||
&__clk_0_56,
|
||||
&__clk_0_63,
|
||||
|
||||
&__clk_1_2,
|
||||
&__clk_1_4,
|
||||
&__clk_1_5,
|
||||
&__clk_1_6,
|
||||
&__clk_1_7,
|
||||
&__clk_1_24,
|
||||
&__clk_1_25,
|
||||
&__clk_1_26,
|
||||
&__clk_1_27,
|
||||
&__clk_1_28,
|
||||
&__clk_1_29,
|
||||
&__clk_1_34,
|
||||
&__clk_1_36,
|
||||
&__clk_1_37,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
||||
static struct clk * const enable_clks[] __initconst = {
|
||||
/* make sure these clocks are enabled */
|
||||
&__clk_0_18, /* intc0 */
|
||||
&__clk_0_19, /* intc0 */
|
||||
&__clk_0_20, /* intc0 */
|
||||
&__clk_0_24, /* uart0 */
|
||||
&__clk_0_25, /* uart1 */
|
||||
&__clk_0_26, /* uart2 */
|
||||
&__clk_0_27, /* uart3 */
|
||||
|
||||
&__clk_0_33, /* pit.1 */
|
||||
&__clk_0_37, /* eport */
|
||||
&__clk_0_48, /* pll */
|
||||
|
||||
&__clk_1_36, /* CCM/reset module/Power management */
|
||||
&__clk_1_37, /* gpio */
|
||||
};
|
||||
static struct clk * const disable_clks[] __initconst = {
|
||||
&__clk_0_8, /* can.0 */
|
||||
&__clk_0_9, /* can.1 */
|
||||
&__clk_0_14, /* i2c.1 */
|
||||
&__clk_0_15, /* dspi.1 */
|
||||
&__clk_0_17, /* eDMA */
|
||||
&__clk_0_22, /* i2c.0 */
|
||||
&__clk_0_23, /* dspi.0 */
|
||||
&__clk_0_28, /* tmr.1 */
|
||||
&__clk_0_29, /* tmr.2 */
|
||||
&__clk_0_30, /* tmr.2 */
|
||||
&__clk_0_31, /* tmr.3 */
|
||||
&__clk_0_32, /* pit.0 */
|
||||
&__clk_0_34, /* pit.2 */
|
||||
&__clk_0_35, /* pit.3 */
|
||||
&__clk_0_38, /* adc */
|
||||
&__clk_0_39, /* dac */
|
||||
&__clk_0_44, /* usb otg */
|
||||
&__clk_0_45, /* usb host */
|
||||
&__clk_0_47, /* ssi.0 */
|
||||
&__clk_0_49, /* rng */
|
||||
&__clk_0_50, /* ssi.1 */
|
||||
&__clk_0_51, /* eSDHC */
|
||||
&__clk_0_53, /* enet-fec */
|
||||
&__clk_0_54, /* enet-fec */
|
||||
&__clk_0_55, /* switch.0 */
|
||||
&__clk_0_56, /* switch.1 */
|
||||
|
||||
&__clk_1_2, /* 1-wire */
|
||||
&__clk_1_4, /* i2c.2 */
|
||||
&__clk_1_5, /* i2c.3 */
|
||||
&__clk_1_6, /* i2c.4 */
|
||||
&__clk_1_7, /* i2c.5 */
|
||||
&__clk_1_24, /* uart 4 */
|
||||
&__clk_1_25, /* uart 5 */
|
||||
&__clk_1_26, /* uart 6 */
|
||||
&__clk_1_27, /* uart 7 */
|
||||
&__clk_1_28, /* uart 8 */
|
||||
&__clk_1_29, /* uart 9 */
|
||||
};
|
||||
|
||||
static void __init m5441x_clk_init(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(enable_clks); ++i)
|
||||
__clk_init_enabled(enable_clks[i]);
|
||||
/* make sure these clocks are disabled */
|
||||
for (i = 0; i < ARRAY_SIZE(disable_clks); ++i)
|
||||
__clk_init_disabled(disable_clks[i]);
|
||||
}
|
||||
|
||||
static void __init m5441x_uarts_init(void)
|
||||
{
|
||||
__raw_writeb(0x0f, MCFGPIO_PAR_UART0);
|
||||
__raw_writeb(0x00, MCFGPIO_PAR_UART1);
|
||||
__raw_writeb(0x00, MCFGPIO_PAR_UART2);
|
||||
}
|
||||
|
||||
static void __init m5441x_fec_init(void)
|
||||
{
|
||||
__raw_writeb(0x03, MCFGPIO_PAR_FEC);
|
||||
}
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
m5441x_clk_init();
|
||||
mach_sched_init = hw_timer_init;
|
||||
m5441x_uarts_init();
|
||||
m5441x_fec_init();
|
||||
}
|
||||
|
||||
|
||||
#if IS_ENABLED(CONFIG_RTC_DRV_M5441x)
|
||||
static struct resource m5441x_rtc_resources[] = {
|
||||
{
|
||||
.start = MCFRTC_BASE,
|
||||
.end = MCFRTC_BASE + MCFRTC_SIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MCF_IRQ_RTC,
|
||||
.end = MCF_IRQ_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device m5441x_rtc = {
|
||||
.name = "mcfrtc",
|
||||
.id = 0,
|
||||
.resource = m5441x_rtc_resources,
|
||||
.num_resources = ARRAY_SIZE(m5441x_rtc_resources),
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct platform_device *m5441x_devices[] __initdata = {
|
||||
#if IS_ENABLED(CONFIG_RTC_DRV_M5441x)
|
||||
&m5441x_rtc,
|
||||
#endif
|
||||
};
|
||||
|
||||
static int __init init_BSP(void)
|
||||
{
|
||||
platform_add_devices(m5441x_devices, ARRAY_SIZE(m5441x_devices));
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(init_BSP);
|
||||
128
arch/m68k/coldfire/m54xx.c
Normal file
128
arch/m68k/coldfire/m54xx.c
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* m54xx.c -- platform support for ColdFire 54xx based boards
|
||||
*
|
||||
* Copyright (C) 2010, Philippe De Muyter <phdm@macqel.be>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/m54xxsim.h>
|
||||
#include <asm/mcfuart.h>
|
||||
#include <asm/mcfclk.h>
|
||||
#include <asm/m54xxgpt.h>
|
||||
#ifdef CONFIG_MMU
|
||||
#include <asm/mmu_context.h>
|
||||
#endif
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfslt0, "mcfslt.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfslt1, "mcfslt.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart0, "mcfuart.0", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart1, "mcfuart.1", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart2, "mcfuart.2", MCF_BUSCLK);
|
||||
DEFINE_CLK(mcfuart3, "mcfuart.3", MCF_BUSCLK);
|
||||
|
||||
struct clk *mcf_clks[] = {
|
||||
&clk_pll,
|
||||
&clk_sys,
|
||||
&clk_mcfslt0,
|
||||
&clk_mcfslt1,
|
||||
&clk_mcfuart0,
|
||||
&clk_mcfuart1,
|
||||
&clk_mcfuart2,
|
||||
&clk_mcfuart3,
|
||||
NULL
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void __init m54xx_uarts_init(void)
|
||||
{
|
||||
/* enable io pins */
|
||||
__raw_writeb(MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD, MCFGPIO_PAR_PSC0);
|
||||
__raw_writeb(MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD | MCF_PAR_PSC_RTS_RTS,
|
||||
MCFGPIO_PAR_PSC1);
|
||||
__raw_writeb(MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD | MCF_PAR_PSC_RTS_RTS |
|
||||
MCF_PAR_PSC_CTS_CTS, MCFGPIO_PAR_PSC2);
|
||||
__raw_writeb(MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD, MCFGPIO_PAR_PSC3);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void mcf54xx_reset(void)
|
||||
{
|
||||
/* disable interrupts and enable the watchdog */
|
||||
asm("movew #0x2700, %sr\n");
|
||||
__raw_writel(0, MCF_GPT_GMS0);
|
||||
__raw_writel(MCF_GPT_GCIR_CNT(1), MCF_GPT_GCIR0);
|
||||
__raw_writel(MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE | MCF_GPT_GMS_TMS(4),
|
||||
MCF_GPT_GMS0);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
|
||||
unsigned long num_pages;
|
||||
|
||||
static void __init mcf54xx_bootmem_alloc(void)
|
||||
{
|
||||
unsigned long start_pfn;
|
||||
unsigned long memstart;
|
||||
|
||||
/* _rambase and _ramend will be naturally page aligned */
|
||||
m68k_memory[0].addr = _rambase;
|
||||
m68k_memory[0].size = _ramend - _rambase;
|
||||
|
||||
/* compute total pages in system */
|
||||
num_pages = (_ramend - _rambase) >> PAGE_SHIFT;
|
||||
|
||||
/* page numbers */
|
||||
memstart = PAGE_ALIGN(_ramstart);
|
||||
min_low_pfn = _rambase >> PAGE_SHIFT;
|
||||
start_pfn = memstart >> PAGE_SHIFT;
|
||||
max_low_pfn = _ramend >> PAGE_SHIFT;
|
||||
high_memory = (void *)_ramend;
|
||||
|
||||
m68k_virt_to_node_shift = fls(_ramend - _rambase - 1) - 6;
|
||||
module_fixup(NULL, __start_fixup, __stop_fixup);
|
||||
|
||||
/* setup bootmem data */
|
||||
m68k_setup_node(0);
|
||||
memstart += init_bootmem_node(NODE_DATA(0), start_pfn,
|
||||
min_low_pfn, max_low_pfn);
|
||||
free_bootmem_node(NODE_DATA(0), memstart, _ramend - memstart);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void __init config_BSP(char *commandp, int size)
|
||||
{
|
||||
#ifdef CONFIG_MMU
|
||||
mcf54xx_bootmem_alloc();
|
||||
mmu_context_init();
|
||||
#endif
|
||||
mach_reset = mcf54xx_reset;
|
||||
mach_sched_init = hw_timer_init;
|
||||
m54xx_uarts_init();
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
38
arch/m68k/coldfire/mcf8390.c
Normal file
38
arch/m68k/coldfire/mcf8390.c
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* mcf8390.c -- platform support for 8390 ethernet on many boards
|
||||
*
|
||||
* (C) Copyright 2012, Greg Ungerer <gerg@uclinux.org>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/resource.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/mcf8390.h>
|
||||
|
||||
static struct resource mcf8390_resources[] = {
|
||||
{
|
||||
.start = NE2000_ADDR,
|
||||
.end = NE2000_ADDR + NE2000_ADDRSIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = NE2000_IRQ_VECTOR,
|
||||
.end = NE2000_IRQ_VECTOR,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init mcf8390_platform_init(void)
|
||||
{
|
||||
platform_device_register_simple("mcf8390", -1, mcf8390_resources,
|
||||
ARRAY_SIZE(mcf8390_resources));
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(mcf8390_platform_init);
|
||||
153
arch/m68k/coldfire/nettel.c
Normal file
153
arch/m68k/coldfire/nettel.c
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* nettel.c -- startup code support for the NETtel boards
|
||||
*
|
||||
* Copyright (C) 2009, Greg Ungerer (gerg@snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/nettel.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Define the IO and interrupt resources of the 2 SMC9196 interfaces.
|
||||
*/
|
||||
#define NETTEL_SMC0_ADDR 0x30600300
|
||||
#define NETTEL_SMC0_IRQ 29
|
||||
|
||||
#define NETTEL_SMC1_ADDR 0x30600000
|
||||
#define NETTEL_SMC1_IRQ 27
|
||||
|
||||
/*
|
||||
* We need some access into the SMC9196 registers. Define those registers
|
||||
* we will need here (including the smc91x.h doesn't seem to give us these
|
||||
* in a simple form).
|
||||
*/
|
||||
#define SMC91xx_BANKSELECT 14
|
||||
#define SMC91xx_BASEADDR 2
|
||||
#define SMC91xx_BASEMAC 4
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct resource nettel_smc91x_0_resources[] = {
|
||||
{
|
||||
.start = NETTEL_SMC0_ADDR,
|
||||
.end = NETTEL_SMC0_ADDR + 0x20,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = NETTEL_SMC0_IRQ,
|
||||
.end = NETTEL_SMC0_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource nettel_smc91x_1_resources[] = {
|
||||
{
|
||||
.start = NETTEL_SMC1_ADDR,
|
||||
.end = NETTEL_SMC1_ADDR + 0x20,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = NETTEL_SMC1_IRQ,
|
||||
.end = NETTEL_SMC1_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device nettel_smc91x[] = {
|
||||
{
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(nettel_smc91x_0_resources),
|
||||
.resource = nettel_smc91x_0_resources,
|
||||
},
|
||||
{
|
||||
.name = "smc91x",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(nettel_smc91x_1_resources),
|
||||
.resource = nettel_smc91x_1_resources,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *nettel_devices[] __initdata = {
|
||||
&nettel_smc91x[0],
|
||||
&nettel_smc91x[1],
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static u8 nettel_macdefault[] __initdata = {
|
||||
0x00, 0xd0, 0xcf, 0x00, 0x00, 0x01,
|
||||
};
|
||||
|
||||
/*
|
||||
* Set flash contained MAC address into SMC9196 core. Make sure the flash
|
||||
* MAC address is sane, and not an empty flash. If no good use the Moreton
|
||||
* Bay default MAC address instead.
|
||||
*/
|
||||
|
||||
static void __init nettel_smc91x_setmac(unsigned int ioaddr, unsigned int flashaddr)
|
||||
{
|
||||
u16 *macp;
|
||||
|
||||
macp = (u16 *) flashaddr;
|
||||
if ((macp[0] == 0xffff) && (macp[1] == 0xffff) && (macp[2] == 0xffff))
|
||||
macp = (u16 *) &nettel_macdefault[0];
|
||||
|
||||
writew(1, NETTEL_SMC0_ADDR + SMC91xx_BANKSELECT);
|
||||
writew(macp[0], ioaddr + SMC91xx_BASEMAC);
|
||||
writew(macp[1], ioaddr + SMC91xx_BASEMAC + 2);
|
||||
writew(macp[2], ioaddr + SMC91xx_BASEMAC + 4);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* Re-map the address space of at least one of the SMC ethernet
|
||||
* parts. Both parts power up decoding the same address, so we
|
||||
* need to move one of them first, before doing anything else.
|
||||
*/
|
||||
|
||||
static void __init nettel_smc91x_init(void)
|
||||
{
|
||||
writew(0x00ec, MCFSIM_PADDR);
|
||||
mcf_setppdata(0, 0x0080);
|
||||
writew(1, NETTEL_SMC0_ADDR + SMC91xx_BANKSELECT);
|
||||
writew(0x0067, NETTEL_SMC0_ADDR + SMC91xx_BASEADDR);
|
||||
mcf_setppdata(0x0080, 0);
|
||||
|
||||
/* Set correct chip select timing for SMC9196 accesses */
|
||||
writew(0x1180, MCFSIM_CSCR3);
|
||||
|
||||
/* Set the SMC interrupts to be auto-vectored */
|
||||
mcf_autovector(NETTEL_SMC0_IRQ);
|
||||
mcf_autovector(NETTEL_SMC1_IRQ);
|
||||
|
||||
/* Set MAC addresses from flash for both interfaces */
|
||||
nettel_smc91x_setmac(NETTEL_SMC0_ADDR, 0xf0006000);
|
||||
nettel_smc91x_setmac(NETTEL_SMC1_ADDR, 0xf0006006);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static int __init init_nettel(void)
|
||||
{
|
||||
nettel_smc91x_init();
|
||||
platform_add_devices(nettel_devices, ARRAY_SIZE(nettel_devices));
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(init_nettel);
|
||||
|
||||
/***************************************************************************/
|
||||
325
arch/m68k/coldfire/pci.c
Normal file
325
arch/m68k/coldfire/pci.c
Normal file
|
|
@ -0,0 +1,325 @@
|
|||
/*
|
||||
* pci.c -- PCI bus support for ColdFire processors
|
||||
*
|
||||
* (C) Copyright 2012, Greg Ungerer <gerg@uclinux.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/m54xxpci.h>
|
||||
|
||||
/*
|
||||
* Memory and IO mappings. We use a 1:1 mapping for local host memory to
|
||||
* PCI bus memory (no reason not to really). IO space doesn't matter, we
|
||||
* always use access functions for that. The device configuration space is
|
||||
* mapped over the IO map space when we enable it in the PCICAR register.
|
||||
*/
|
||||
#define PCI_MEM_PA 0xf0000000 /* Host physical address */
|
||||
#define PCI_MEM_BA 0xf0000000 /* Bus physical address */
|
||||
#define PCI_MEM_SIZE 0x08000000 /* 128 MB */
|
||||
#define PCI_MEM_MASK (PCI_MEM_SIZE - 1)
|
||||
|
||||
#define PCI_IO_PA 0xf8000000 /* Host physical address */
|
||||
#define PCI_IO_BA 0x00000000 /* Bus physical address */
|
||||
#define PCI_IO_SIZE 0x00010000 /* 64k */
|
||||
#define PCI_IO_MASK (PCI_IO_SIZE - 1)
|
||||
|
||||
static struct pci_bus *rootbus;
|
||||
static unsigned long iospace;
|
||||
|
||||
/*
|
||||
* We need to be carefull probing on bus 0 (directly connected to host
|
||||
* bridge). We should only acccess the well defined possible devices in
|
||||
* use, ignore aliases and the like.
|
||||
*/
|
||||
static unsigned char mcf_host_slot2sid[32] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 1, 2, 0, 3, 4, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
static unsigned char mcf_host_irq[] = {
|
||||
0, 69, 69, 71, 71,
|
||||
};
|
||||
|
||||
|
||||
static inline void syncio(void)
|
||||
{
|
||||
/* The ColdFire "nop" instruction waits for all bus IO to complete */
|
||||
__asm__ __volatile__ ("nop");
|
||||
}
|
||||
|
||||
/*
|
||||
* Configuration space access functions. Configuration space access is
|
||||
* through the IO mapping window, enabling it via the PCICAR register.
|
||||
*/
|
||||
static unsigned long mcf_mk_pcicar(int bus, unsigned int devfn, int where)
|
||||
{
|
||||
return (bus << PCICAR_BUSN) | (devfn << PCICAR_DEVFNN) | (where & 0xfc);
|
||||
}
|
||||
|
||||
static int mcf_pci_readconfig(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, int size, u32 *value)
|
||||
{
|
||||
unsigned long addr;
|
||||
|
||||
*value = 0xffffffff;
|
||||
|
||||
if (bus->number == 0) {
|
||||
if (mcf_host_slot2sid[PCI_SLOT(devfn)] == 0)
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
syncio();
|
||||
addr = mcf_mk_pcicar(bus->number, devfn, where);
|
||||
__raw_writel(PCICAR_E | addr, PCICAR);
|
||||
addr = iospace + (where & 0x3);
|
||||
|
||||
switch (size) {
|
||||
case 1:
|
||||
*value = __raw_readb(addr);
|
||||
break;
|
||||
case 2:
|
||||
*value = le16_to_cpu(__raw_readw(addr));
|
||||
break;
|
||||
default:
|
||||
*value = le32_to_cpu(__raw_readl(addr));
|
||||
break;
|
||||
}
|
||||
|
||||
syncio();
|
||||
__raw_writel(0, PCICAR);
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
static int mcf_pci_writeconfig(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, int size, u32 value)
|
||||
{
|
||||
unsigned long addr;
|
||||
|
||||
if (bus->number == 0) {
|
||||
if (mcf_host_slot2sid[PCI_SLOT(devfn)] == 0)
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
syncio();
|
||||
addr = mcf_mk_pcicar(bus->number, devfn, where);
|
||||
__raw_writel(PCICAR_E | addr, PCICAR);
|
||||
addr = iospace + (where & 0x3);
|
||||
|
||||
switch (size) {
|
||||
case 1:
|
||||
__raw_writeb(value, addr);
|
||||
break;
|
||||
case 2:
|
||||
__raw_writew(cpu_to_le16(value), addr);
|
||||
break;
|
||||
default:
|
||||
__raw_writel(cpu_to_le32(value), addr);
|
||||
break;
|
||||
}
|
||||
|
||||
syncio();
|
||||
__raw_writel(0, PCICAR);
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
static struct pci_ops mcf_pci_ops = {
|
||||
.read = mcf_pci_readconfig,
|
||||
.write = mcf_pci_writeconfig,
|
||||
};
|
||||
|
||||
/*
|
||||
* IO address space access functions. Pretty strait forward, these are
|
||||
* directly mapped in to the IO mapping window. And that is mapped into
|
||||
* virtual address space.
|
||||
*/
|
||||
u8 mcf_pci_inb(u32 addr)
|
||||
{
|
||||
return __raw_readb(iospace + (addr & PCI_IO_MASK));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_inb);
|
||||
|
||||
u16 mcf_pci_inw(u32 addr)
|
||||
{
|
||||
return le16_to_cpu(__raw_readw(iospace + (addr & PCI_IO_MASK)));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_inw);
|
||||
|
||||
u32 mcf_pci_inl(u32 addr)
|
||||
{
|
||||
return le32_to_cpu(__raw_readl(iospace + (addr & PCI_IO_MASK)));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_inl);
|
||||
|
||||
void mcf_pci_insb(u32 addr, u8 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
*buf++ = mcf_pci_inb(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_insb);
|
||||
|
||||
void mcf_pci_insw(u32 addr, u16 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
*buf++ = mcf_pci_inw(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_insw);
|
||||
|
||||
void mcf_pci_insl(u32 addr, u32 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
*buf++ = mcf_pci_inl(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_insl);
|
||||
|
||||
void mcf_pci_outb(u8 v, u32 addr)
|
||||
{
|
||||
__raw_writeb(v, iospace + (addr & PCI_IO_MASK));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outb);
|
||||
|
||||
void mcf_pci_outw(u16 v, u32 addr)
|
||||
{
|
||||
__raw_writew(cpu_to_le16(v), iospace + (addr & PCI_IO_MASK));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outw);
|
||||
|
||||
void mcf_pci_outl(u32 v, u32 addr)
|
||||
{
|
||||
__raw_writel(cpu_to_le32(v), iospace + (addr & PCI_IO_MASK));
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outl);
|
||||
|
||||
void mcf_pci_outsb(u32 addr, const u8 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
mcf_pci_outb(*buf++, addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outsb);
|
||||
|
||||
void mcf_pci_outsw(u32 addr, const u16 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
mcf_pci_outw(*buf++, addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outsw);
|
||||
|
||||
void mcf_pci_outsl(u32 addr, const u32 *buf, u32 len)
|
||||
{
|
||||
for (; len; len--)
|
||||
mcf_pci_outl(*buf++, addr);
|
||||
}
|
||||
EXPORT_SYMBOL(mcf_pci_outsl);
|
||||
|
||||
/*
|
||||
* Initialize the PCI bus registers, and scan the bus.
|
||||
*/
|
||||
static struct resource mcf_pci_mem = {
|
||||
.name = "PCI Memory space",
|
||||
.start = PCI_MEM_PA,
|
||||
.end = PCI_MEM_PA + PCI_MEM_SIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct resource mcf_pci_io = {
|
||||
.name = "PCI IO space",
|
||||
.start = 0x400,
|
||||
.end = 0x10000 - 1,
|
||||
.flags = IORESOURCE_IO,
|
||||
};
|
||||
|
||||
/*
|
||||
* Interrupt mapping and setting.
|
||||
*/
|
||||
static int mcf_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int sid;
|
||||
|
||||
sid = mcf_host_slot2sid[slot];
|
||||
if (sid)
|
||||
return mcf_host_irq[sid];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init mcf_pci_init(void)
|
||||
{
|
||||
pr_info("ColdFire: PCI bus initialization...\n");
|
||||
|
||||
/* Reset the external PCI bus */
|
||||
__raw_writel(PCIGSCR_RESET, PCIGSCR);
|
||||
__raw_writel(0, PCITCR);
|
||||
|
||||
request_resource(&iomem_resource, &mcf_pci_mem);
|
||||
request_resource(&iomem_resource, &mcf_pci_io);
|
||||
|
||||
/* Configure PCI arbiter */
|
||||
__raw_writel(PACR_INTMPRI | PACR_INTMINTE | PACR_EXTMPRI(0x1f) |
|
||||
PACR_EXTMINTE(0x1f), PACR);
|
||||
|
||||
/* Set required multi-function pins for PCI bus use */
|
||||
__raw_writew(0x3ff, MCFGPIO_PAR_PCIBG);
|
||||
__raw_writew(0x3ff, MCFGPIO_PAR_PCIBR);
|
||||
|
||||
/* Set up config space for local host bus controller */
|
||||
__raw_writel(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
|
||||
PCI_COMMAND_INVALIDATE, PCISCR);
|
||||
__raw_writel(PCICR1_LT(32) | PCICR1_CL(8), PCICR1);
|
||||
__raw_writel(0, PCICR2);
|
||||
|
||||
/*
|
||||
* Set up the initiator windows for memory and IO mapping.
|
||||
* These give the CPU bus access onto the PCI bus. One for each of
|
||||
* PCI memory and IO address spaces.
|
||||
*/
|
||||
__raw_writel(WXBTAR(PCI_MEM_PA, PCI_MEM_BA, PCI_MEM_SIZE),
|
||||
PCIIW0BTAR);
|
||||
__raw_writel(WXBTAR(PCI_IO_PA, PCI_IO_BA, PCI_IO_SIZE),
|
||||
PCIIW1BTAR);
|
||||
__raw_writel(PCIIWCR_W0_MEM /*| PCIIWCR_W0_MRDL*/ | PCIIWCR_W0_E |
|
||||
PCIIWCR_W1_IO | PCIIWCR_W1_E, PCIIWCR);
|
||||
|
||||
/*
|
||||
* Set up the target windows for access from the PCI bus back to the
|
||||
* CPU bus. All we need is access to system RAM (for mastering).
|
||||
*/
|
||||
__raw_writel(CONFIG_RAMBASE, PCIBAR1);
|
||||
__raw_writel(CONFIG_RAMBASE | PCITBATR1_E, PCITBATR1);
|
||||
|
||||
/* Keep a virtual mapping to IO/config space active */
|
||||
iospace = (unsigned long) ioremap(PCI_IO_PA, PCI_IO_SIZE);
|
||||
if (iospace == 0)
|
||||
return -ENODEV;
|
||||
pr_info("Coldfire: PCI IO/config window mapped to 0x%x\n",
|
||||
(u32) iospace);
|
||||
|
||||
/* Turn of PCI reset, and wait for devices to settle */
|
||||
__raw_writel(0, PCIGSCR);
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
schedule_timeout(msecs_to_jiffies(200));
|
||||
|
||||
rootbus = pci_scan_bus(0, &mcf_pci_ops, NULL);
|
||||
rootbus->resource[0] = &mcf_pci_io;
|
||||
rootbus->resource[1] = &mcf_pci_mem;
|
||||
|
||||
pci_fixup_irqs(pci_common_swizzle, mcf_pci_map_irq);
|
||||
pci_bus_size_bridges(rootbus);
|
||||
pci_bus_assign_resources(rootbus);
|
||||
return 0;
|
||||
}
|
||||
|
||||
subsys_initcall(mcf_pci_init);
|
||||
167
arch/m68k/coldfire/pit.c
Normal file
167
arch/m68k/coldfire/pit.c
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* pit.c -- Freescale ColdFire PIT timer. Currently this type of
|
||||
* hardware timer only exists in the Freescale ColdFire
|
||||
* 5270/5271, 5282 and 5208 CPUs. No doubt newer ColdFire
|
||||
* family members will probably use it too.
|
||||
*
|
||||
* Copyright (C) 1999-2008, Greg Ungerer (gerg@snapgear.com)
|
||||
* Copyright (C) 2001-2004, SnapGear Inc. (www.snapgear.com)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/clockchips.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfpit.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* By default use timer1 as the system clock timer.
|
||||
*/
|
||||
#define FREQ ((MCF_CLK / 2) / 64)
|
||||
#define TA(a) (MCFPIT_BASE1 + (a))
|
||||
#define PIT_CYCLES_PER_JIFFY (FREQ / HZ)
|
||||
|
||||
static u32 pit_cnt;
|
||||
|
||||
/*
|
||||
* Initialize the PIT timer.
|
||||
*
|
||||
* This is also called after resume to bring the PIT into operation again.
|
||||
*/
|
||||
|
||||
static void init_cf_pit_timer(enum clock_event_mode mode,
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
switch (mode) {
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
|
||||
__raw_writew(MCFPIT_PCSR_DISABLE, TA(MCFPIT_PCSR));
|
||||
__raw_writew(PIT_CYCLES_PER_JIFFY, TA(MCFPIT_PMR));
|
||||
__raw_writew(MCFPIT_PCSR_EN | MCFPIT_PCSR_PIE | \
|
||||
MCFPIT_PCSR_OVW | MCFPIT_PCSR_RLD | \
|
||||
MCFPIT_PCSR_CLK64, TA(MCFPIT_PCSR));
|
||||
break;
|
||||
|
||||
case CLOCK_EVT_MODE_SHUTDOWN:
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
|
||||
__raw_writew(MCFPIT_PCSR_DISABLE, TA(MCFPIT_PCSR));
|
||||
break;
|
||||
|
||||
case CLOCK_EVT_MODE_ONESHOT:
|
||||
|
||||
__raw_writew(MCFPIT_PCSR_DISABLE, TA(MCFPIT_PCSR));
|
||||
__raw_writew(MCFPIT_PCSR_EN | MCFPIT_PCSR_PIE | \
|
||||
MCFPIT_PCSR_OVW | MCFPIT_PCSR_CLK64, \
|
||||
TA(MCFPIT_PCSR));
|
||||
break;
|
||||
|
||||
case CLOCK_EVT_MODE_RESUME:
|
||||
/* Nothing to do here */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Program the next event in oneshot mode
|
||||
*
|
||||
* Delta is given in PIT ticks
|
||||
*/
|
||||
static int cf_pit_next_event(unsigned long delta,
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
__raw_writew(delta, TA(MCFPIT_PMR));
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct clock_event_device cf_pit_clockevent = {
|
||||
.name = "pit",
|
||||
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
|
||||
.set_mode = init_cf_pit_timer,
|
||||
.set_next_event = cf_pit_next_event,
|
||||
.shift = 32,
|
||||
.irq = MCF_IRQ_PIT1,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static irqreturn_t pit_tick(int irq, void *dummy)
|
||||
{
|
||||
struct clock_event_device *evt = &cf_pit_clockevent;
|
||||
u16 pcsr;
|
||||
|
||||
/* Reset the ColdFire timer */
|
||||
pcsr = __raw_readw(TA(MCFPIT_PCSR));
|
||||
__raw_writew(pcsr | MCFPIT_PCSR_PIF, TA(MCFPIT_PCSR));
|
||||
|
||||
pit_cnt += PIT_CYCLES_PER_JIFFY;
|
||||
evt->event_handler(evt);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct irqaction pit_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = pit_tick,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static cycle_t pit_read_clk(struct clocksource *cs)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 cycles;
|
||||
u16 pcntr;
|
||||
|
||||
local_irq_save(flags);
|
||||
pcntr = __raw_readw(TA(MCFPIT_PCNTR));
|
||||
cycles = pit_cnt;
|
||||
local_irq_restore(flags);
|
||||
|
||||
return cycles + PIT_CYCLES_PER_JIFFY - pcntr;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct clocksource pit_clk = {
|
||||
.name = "pit",
|
||||
.rating = 100,
|
||||
.read = pit_read_clk,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void hw_timer_init(irq_handler_t handler)
|
||||
{
|
||||
cf_pit_clockevent.cpumask = cpumask_of(smp_processor_id());
|
||||
cf_pit_clockevent.mult = div_sc(FREQ, NSEC_PER_SEC, 32);
|
||||
cf_pit_clockevent.max_delta_ns =
|
||||
clockevent_delta2ns(0xFFFF, &cf_pit_clockevent);
|
||||
cf_pit_clockevent.min_delta_ns =
|
||||
clockevent_delta2ns(0x3f, &cf_pit_clockevent);
|
||||
clockevents_register_device(&cf_pit_clockevent);
|
||||
|
||||
setup_irq(MCF_IRQ_PIT1, &pit_irq);
|
||||
|
||||
clocksource_register_hz(&pit_clk, FREQ);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
50
arch/m68k/coldfire/reset.c
Normal file
50
arch/m68k/coldfire/reset.c
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* reset.c -- common ColdFire SoC reset support
|
||||
*
|
||||
* (C) Copyright 2012, Greg Ungerer <gerg@uclinux.org>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/*
|
||||
* There are 2 common methods amongst the ColdFure parts for reseting
|
||||
* the CPU. But there are couple of exceptions, the 5272 and the 547x
|
||||
* have something completely special to them, and we let their specific
|
||||
* subarch code handle them.
|
||||
*/
|
||||
|
||||
#ifdef MCFSIM_SYPCR
|
||||
static void mcf_cpu_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
/* Set watchdog to soft reset, and enabled */
|
||||
__raw_writeb(0xc0, MCFSIM_SYPCR);
|
||||
for (;;)
|
||||
/* wait for watchdog to timeout */;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MCF_RCR
|
||||
static void mcf_cpu_reset(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
__raw_writeb(MCF_RCR_SWRESET, MCF_RCR);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init mcf_setup_reset(void)
|
||||
{
|
||||
mach_reset = mcf_cpu_reset;
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(mcf_setup_reset);
|
||||
149
arch/m68k/coldfire/sltimers.c
Normal file
149
arch/m68k/coldfire/sltimers.c
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* sltimers.c -- generic ColdFire slice timer support.
|
||||
*
|
||||
* Copyright (C) 2009-2010, Philippe De Muyter <phdm@macqel.be>
|
||||
* based on
|
||||
* timers.c -- generic ColdFire hardware timer support.
|
||||
* Copyright (C) 1999-2008, Greg Ungerer <gerg@snapgear.com>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/profile.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfslt.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef CONFIG_HIGHPROFILE
|
||||
|
||||
/*
|
||||
* By default use Slice Timer 1 as the profiler clock timer.
|
||||
*/
|
||||
#define PA(a) (MCFSLT_TIMER1 + (a))
|
||||
|
||||
/*
|
||||
* Choose a reasonably fast profile timer. Make it an odd value to
|
||||
* try and get good coverage of kernel operations.
|
||||
*/
|
||||
#define PROFILEHZ 1013
|
||||
|
||||
irqreturn_t mcfslt_profile_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset Slice Timer 1 */
|
||||
__raw_writel(MCFSLT_SSR_BE | MCFSLT_SSR_TE, PA(MCFSLT_SSR));
|
||||
if (current->pid)
|
||||
profile_tick(CPU_PROFILING);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct irqaction mcfslt_profile_irq = {
|
||||
.name = "profile timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = mcfslt_profile_tick,
|
||||
};
|
||||
|
||||
void mcfslt_profile_init(void)
|
||||
{
|
||||
printk(KERN_INFO "PROFILE: lodging TIMER 1 @ %dHz as profile timer\n",
|
||||
PROFILEHZ);
|
||||
|
||||
setup_irq(MCF_IRQ_PROFILER, &mcfslt_profile_irq);
|
||||
|
||||
/* Set up TIMER 2 as high speed profile clock */
|
||||
__raw_writel(MCF_BUSCLK / PROFILEHZ - 1, PA(MCFSLT_STCNT));
|
||||
__raw_writel(MCFSLT_SCR_RUN | MCFSLT_SCR_IEN | MCFSLT_SCR_TEN,
|
||||
PA(MCFSLT_SCR));
|
||||
|
||||
}
|
||||
|
||||
#endif /* CONFIG_HIGHPROFILE */
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* By default use Slice Timer 0 as the system clock timer.
|
||||
*/
|
||||
#define TA(a) (MCFSLT_TIMER0 + (a))
|
||||
|
||||
static u32 mcfslt_cycles_per_jiffy;
|
||||
static u32 mcfslt_cnt;
|
||||
|
||||
static irq_handler_t timer_interrupt;
|
||||
|
||||
static irqreturn_t mcfslt_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset Slice Timer 0 */
|
||||
__raw_writel(MCFSLT_SSR_BE | MCFSLT_SSR_TE, TA(MCFSLT_SSR));
|
||||
mcfslt_cnt += mcfslt_cycles_per_jiffy;
|
||||
return timer_interrupt(irq, dummy);
|
||||
}
|
||||
|
||||
static struct irqaction mcfslt_timer_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = mcfslt_tick,
|
||||
};
|
||||
|
||||
static cycle_t mcfslt_read_clk(struct clocksource *cs)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 cycles, scnt;
|
||||
|
||||
local_irq_save(flags);
|
||||
scnt = __raw_readl(TA(MCFSLT_SCNT));
|
||||
cycles = mcfslt_cnt;
|
||||
if (__raw_readl(TA(MCFSLT_SSR)) & MCFSLT_SSR_TE) {
|
||||
cycles += mcfslt_cycles_per_jiffy;
|
||||
scnt = __raw_readl(TA(MCFSLT_SCNT));
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
|
||||
/* subtract because slice timers count down */
|
||||
return cycles + ((mcfslt_cycles_per_jiffy - 1) - scnt);
|
||||
}
|
||||
|
||||
static struct clocksource mcfslt_clk = {
|
||||
.name = "slt",
|
||||
.rating = 250,
|
||||
.read = mcfslt_read_clk,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
void hw_timer_init(irq_handler_t handler)
|
||||
{
|
||||
mcfslt_cycles_per_jiffy = MCF_BUSCLK / HZ;
|
||||
/*
|
||||
* The coldfire slice timer (SLT) runs from STCNT to 0 included,
|
||||
* then STCNT again and so on. It counts thus actually
|
||||
* STCNT + 1 steps for 1 tick, not STCNT. So if you want
|
||||
* n cycles, initialize STCNT with n - 1.
|
||||
*/
|
||||
__raw_writel(mcfslt_cycles_per_jiffy - 1, TA(MCFSLT_STCNT));
|
||||
__raw_writel(MCFSLT_SCR_RUN | MCFSLT_SCR_IEN | MCFSLT_SCR_TEN,
|
||||
TA(MCFSLT_SCR));
|
||||
/* initialize mcfslt_cnt knowing that slice timers count down */
|
||||
mcfslt_cnt = mcfslt_cycles_per_jiffy;
|
||||
|
||||
timer_interrupt = handler;
|
||||
setup_irq(MCF_IRQ_TIMER, &mcfslt_timer_irq);
|
||||
|
||||
clocksource_register_hz(&mcfslt_clk, MCF_BUSCLK);
|
||||
|
||||
#ifdef CONFIG_HIGHPROFILE
|
||||
mcfslt_profile_init();
|
||||
#endif
|
||||
}
|
||||
195
arch/m68k/coldfire/timers.c
Normal file
195
arch/m68k/coldfire/timers.c
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* timers.c -- generic ColdFire hardware timer support.
|
||||
*
|
||||
* Copyright (C) 1999-2008, Greg Ungerer <gerg@snapgear.com>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/profile.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcftimer.h>
|
||||
#include <asm/mcfsim.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* By default use timer1 as the system clock timer.
|
||||
*/
|
||||
#define FREQ (MCF_BUSCLK / 16)
|
||||
#define TA(a) (MCFTIMER_BASE1 + (a))
|
||||
|
||||
/*
|
||||
* These provide the underlying interrupt vector support.
|
||||
* Unfortunately it is a little different on each ColdFire.
|
||||
*/
|
||||
void coldfire_profile_init(void);
|
||||
|
||||
#if defined(CONFIG_M53xx) || defined(CONFIG_M5441x)
|
||||
#define __raw_readtrr __raw_readl
|
||||
#define __raw_writetrr __raw_writel
|
||||
#else
|
||||
#define __raw_readtrr __raw_readw
|
||||
#define __raw_writetrr __raw_writew
|
||||
#endif
|
||||
|
||||
static u32 mcftmr_cycles_per_jiffy;
|
||||
static u32 mcftmr_cnt;
|
||||
|
||||
static irq_handler_t timer_interrupt;
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static void init_timer_irq(void)
|
||||
{
|
||||
#ifdef MCFSIM_ICR_AUTOVEC
|
||||
/* Timer1 is always used as system timer */
|
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI3,
|
||||
MCFSIM_TIMER1ICR);
|
||||
mcf_mapirq2imr(MCF_IRQ_TIMER, MCFINTC_TIMER1);
|
||||
|
||||
#ifdef CONFIG_HIGHPROFILE
|
||||
/* Timer2 is to be used as a high speed profile timer */
|
||||
writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI3,
|
||||
MCFSIM_TIMER2ICR);
|
||||
mcf_mapirq2imr(MCF_IRQ_PROFILER, MCFINTC_TIMER2);
|
||||
#endif
|
||||
#endif /* MCFSIM_ICR_AUTOVEC */
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static irqreturn_t mcftmr_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset the ColdFire timer */
|
||||
__raw_writeb(MCFTIMER_TER_CAP | MCFTIMER_TER_REF, TA(MCFTIMER_TER));
|
||||
|
||||
mcftmr_cnt += mcftmr_cycles_per_jiffy;
|
||||
return timer_interrupt(irq, dummy);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct irqaction mcftmr_timer_irq = {
|
||||
.name = "timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = mcftmr_tick,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static cycle_t mcftmr_read_clk(struct clocksource *cs)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 cycles;
|
||||
u16 tcn;
|
||||
|
||||
local_irq_save(flags);
|
||||
tcn = __raw_readw(TA(MCFTIMER_TCN));
|
||||
cycles = mcftmr_cnt;
|
||||
local_irq_restore(flags);
|
||||
|
||||
return cycles + tcn;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct clocksource mcftmr_clk = {
|
||||
.name = "tmr",
|
||||
.rating = 250,
|
||||
.read = mcftmr_read_clk,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void hw_timer_init(irq_handler_t handler)
|
||||
{
|
||||
__raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR));
|
||||
mcftmr_cycles_per_jiffy = FREQ / HZ;
|
||||
/*
|
||||
* The coldfire timer runs from 0 to TRR included, then 0
|
||||
* again and so on. It counts thus actually TRR + 1 steps
|
||||
* for 1 tick, not TRR. So if you want n cycles,
|
||||
* initialize TRR with n - 1.
|
||||
*/
|
||||
__raw_writetrr(mcftmr_cycles_per_jiffy - 1, TA(MCFTIMER_TRR));
|
||||
__raw_writew(MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 |
|
||||
MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE, TA(MCFTIMER_TMR));
|
||||
|
||||
clocksource_register_hz(&mcftmr_clk, FREQ);
|
||||
|
||||
timer_interrupt = handler;
|
||||
init_timer_irq();
|
||||
setup_irq(MCF_IRQ_TIMER, &mcftmr_timer_irq);
|
||||
|
||||
#ifdef CONFIG_HIGHPROFILE
|
||||
coldfire_profile_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
#ifdef CONFIG_HIGHPROFILE
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* By default use timer2 as the profiler clock timer.
|
||||
*/
|
||||
#define PA(a) (MCFTIMER_BASE2 + (a))
|
||||
|
||||
/*
|
||||
* Choose a reasonably fast profile timer. Make it an odd value to
|
||||
* try and get good coverage of kernel operations.
|
||||
*/
|
||||
#define PROFILEHZ 1013
|
||||
|
||||
/*
|
||||
* Use the other timer to provide high accuracy profiling info.
|
||||
*/
|
||||
irqreturn_t coldfire_profile_tick(int irq, void *dummy)
|
||||
{
|
||||
/* Reset ColdFire timer2 */
|
||||
__raw_writeb(MCFTIMER_TER_CAP | MCFTIMER_TER_REF, PA(MCFTIMER_TER));
|
||||
if (current->pid)
|
||||
profile_tick(CPU_PROFILING);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static struct irqaction coldfire_profile_irq = {
|
||||
.name = "profile timer",
|
||||
.flags = IRQF_TIMER,
|
||||
.handler = coldfire_profile_tick,
|
||||
};
|
||||
|
||||
void coldfire_profile_init(void)
|
||||
{
|
||||
printk(KERN_INFO "PROFILE: lodging TIMER2 @ %dHz as profile timer\n",
|
||||
PROFILEHZ);
|
||||
|
||||
/* Set up TIMER 2 as high speed profile clock */
|
||||
__raw_writew(MCFTIMER_TMR_DISABLE, PA(MCFTIMER_TMR));
|
||||
|
||||
__raw_writetrr(((MCF_BUSCLK / 16) / PROFILEHZ), PA(MCFTIMER_TRR));
|
||||
__raw_writew(MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 |
|
||||
MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE, PA(MCFTIMER_TMR));
|
||||
|
||||
setup_irq(MCF_IRQ_PROFILER, &coldfire_profile_irq);
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
#endif /* CONFIG_HIGHPROFILE */
|
||||
/***************************************************************************/
|
||||
70
arch/m68k/coldfire/vectors.c
Normal file
70
arch/m68k/coldfire/vectors.c
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
* vectors.c -- high level trap setup for ColdFire
|
||||
*
|
||||
* Copyright (C) 1999-2007, Greg Ungerer <gerg@snapgear.com>
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfwdebug.h>
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
#ifdef TRAP_DBG_INTERRUPT
|
||||
|
||||
asmlinkage void dbginterrupt_c(struct frame *fp)
|
||||
{
|
||||
extern void dump(struct pt_regs *fp);
|
||||
printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__);
|
||||
dump((struct pt_regs *) fp);
|
||||
asm("halt");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/* Assembler routines */
|
||||
asmlinkage void buserr(void);
|
||||
asmlinkage void trap(void);
|
||||
asmlinkage void system_call(void);
|
||||
asmlinkage void inthandler(void);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* There is a common trap handler and common interrupt
|
||||
* handler that handle almost every vector. We treat
|
||||
* the system call and bus error special, they get their
|
||||
* own first level handlers.
|
||||
*/
|
||||
for (i = 3; (i <= 23); i++)
|
||||
_ramvec[i] = trap;
|
||||
for (i = 33; (i <= 63); i++)
|
||||
_ramvec[i] = trap;
|
||||
for (i = 24; (i <= 31); i++)
|
||||
_ramvec[i] = inthandler;
|
||||
for (i = 64; (i < 255); i++)
|
||||
_ramvec[i] = inthandler;
|
||||
_ramvec[255] = 0;
|
||||
|
||||
_ramvec[2] = buserr;
|
||||
_ramvec[32] = system_call;
|
||||
|
||||
#ifdef TRAP_DBG_INTERRUPT
|
||||
_ramvec[12] = dbginterrupt;
|
||||
#endif
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
526
arch/m68k/configs/amiga_defconfig
Normal file
526
arch/m68k/configs/amiga_defconfig
Normal file
|
|
@ -0,0 +1,526 @@
|
|||
CONFIG_LOCALVERSION="-amiga"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SYSV68_PARTITION=y
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_AMIGA=y
|
||||
CONFIG_ZORRO=y
|
||||
CONFIG_AMIGA_PCMCIA=y
|
||||
CONFIG_ZORRO_NAMES=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_AMIGA=m
|
||||
CONFIG_PARPORT_MFC3=m
|
||||
CONFIG_PARPORT_1284=y
|
||||
CONFIG_AMIGA_FLOPPY=y
|
||||
CONFIG_AMIGA_Z2RAM=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_GD_ATAPI=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_GAYLE=y
|
||||
CONFIG_BLK_DEV_BUDDHA=y
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_A3000_SCSI=y
|
||||
CONFIG_A2091_SCSI=y
|
||||
CONFIG_GVP11_SCSI=y
|
||||
CONFIG_SCSI_A4000T=y
|
||||
CONFIG_SCSI_ZORRO7XX=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
CONFIG_A2065=y
|
||||
CONFIG_ARIADNE=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_HP is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
CONFIG_HYDRA=y
|
||||
CONFIG_APNE=y
|
||||
CONFIG_ZORRO8390=y
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
CONFIG_KEYBOARD_AMIGA=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_AMIGA=m
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_JOYSTICK_AMIGA=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_M68K_BEEP=m
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_PRINTER=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PPS_CLIENT_PARPORT=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CIRRUS=y
|
||||
CONFIG_FB_AMIGA=y
|
||||
CONFIG_FB_AMIGA_OCS=y
|
||||
CONFIG_FB_AMIGA_ECS=y
|
||||
CONFIG_FB_AMIGA_AGA=y
|
||||
CONFIG_FB_FM2=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_DMASOUND_PAULA=m
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_MSM6242=m
|
||||
CONFIG_RTC_DRV_RP5C01=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_HEARTBEAT=y
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_AMIGA_BUILTIN_SERIAL=y
|
||||
CONFIG_SERIAL_CONSOLE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
484
arch/m68k/configs/apollo_defconfig
Normal file
484
arch/m68k/configs/apollo_defconfig
Normal file
|
|
@ -0,0 +1,484 @@
|
|||
CONFIG_LOCALVERSION="-apollo"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SYSV68_PARTITION=y
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_APOLLO=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_SERIO=m
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_HEARTBEAT=y
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
501
arch/m68k/configs/atari_defconfig
Normal file
501
arch/m68k/configs/atari_defconfig
Normal file
|
|
@ -0,0 +1,501 @@
|
|||
CONFIG_LOCALVERSION="-atari"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SYSV68_PARTITION=y
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_ATARI=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_ATARI=m
|
||||
CONFIG_PARPORT_1284=y
|
||||
CONFIG_ATARI_FLOPPY=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_GD_ATAPI=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_FALCON_IDE=y
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_ATARI_SCSI=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
CONFIG_ATARILANCE=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
CONFIG_KEYBOARD_ATARI=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_ATARI=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_M68K_BEEP=m
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_PRINTER=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PPS_CLIENT_PARPORT=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_ATARI=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_DMASOUND_ATARI=m
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_HEARTBEAT=y
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_NATFEAT=y
|
||||
CONFIG_NFBLOCK=y
|
||||
CONFIG_NFCON=y
|
||||
CONFIG_NFETH=y
|
||||
CONFIG_ATARI_DSP56K=m
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
477
arch/m68k/configs/bvme6000_defconfig
Normal file
477
arch/m68k/configs/bvme6000_defconfig
Normal file
|
|
@ -0,0 +1,477 @@
|
|||
CONFIG_LOCALVERSION="-bvme6000"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_VME=y
|
||||
CONFIG_BVME6000=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_BVME6000_SCSI=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
CONFIG_BVME6000_NET=y
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
486
arch/m68k/configs/hp300_defconfig
Normal file
486
arch/m68k/configs/hp300_defconfig
Normal file
|
|
@ -0,0 +1,486 @@
|
|||
CONFIG_LOCALVERSION="-hp300"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SYSV68_PARTITION=y
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_HP300=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
CONFIG_HPLANCE=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_HP_SDC_RTC=m
|
||||
CONFIG_SERIO_SERPORT=m
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
75
arch/m68k/configs/m5208evb_defconfig
Normal file
75
arch/m68k/configs/m5208evb_defconfig
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M520x=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=166666666
|
||||
CONFIG_CLOCK_DIV=2
|
||||
CONFIG_M5208EVB=y
|
||||
# CONFIG_4KSTACKS is not set
|
||||
CONFIG_RAMBASE=0x40000000
|
||||
CONFIG_RAMSIZE=0x2000000
|
||||
CONFIG_VECTORBASE=0x40000000
|
||||
CONFIG_KERNELBASE=0x40020000
|
||||
CONFIG_RAM16BIT=y
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_FEC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_BAUDRATE=115200
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_SYSFS is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_FULLDEBUG=y
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
68
arch/m68k/configs/m5249evb_defconfig
Normal file
68
arch/m68k/configs/m5249evb_defconfig
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M5249=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=140000000
|
||||
CONFIG_CLOCK_DIV=2
|
||||
CONFIG_M5249C3=y
|
||||
CONFIG_RAMBASE=0x00000000
|
||||
CONFIG_RAMSIZE=0x00800000
|
||||
CONFIG_VECTORBASE=0x00000000
|
||||
CONFIG_KERNELBASE=0x00020000
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_PPP=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
# CONFIG_CRC32 is not set
|
||||
66
arch/m68k/configs/m5272c3_defconfig
Normal file
66
arch/m68k/configs/m5272c3_defconfig
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M5272=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_M5272C3=y
|
||||
CONFIG_RAMBASE=0x00000000
|
||||
CONFIG_RAMSIZE=0x00800000
|
||||
CONFIG_VECTORBASE=0x00000000
|
||||
CONFIG_KERNELBASE=0x00020000
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_FEC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
72
arch/m68k/configs/m5275evb_defconfig
Normal file
72
arch/m68k/configs/m5275evb_defconfig
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M5275=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=150000000
|
||||
CONFIG_CLOCK_DIV=2
|
||||
CONFIG_M5275EVB=y
|
||||
# CONFIG_4KSTACKS is not set
|
||||
CONFIG_RAMBASE=0x00000000
|
||||
CONFIG_RAMSIZE=0x00000000
|
||||
CONFIG_VECTORBASE=0x00000000
|
||||
CONFIG_KERNELBASE=0x00020000
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_FEC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_PPP=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
# CONFIG_CRC32 is not set
|
||||
76
arch/m68k/configs/m5307c3_defconfig
Normal file
76
arch/m68k/configs/m5307c3_defconfig
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M5307=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=90000000
|
||||
CONFIG_CLOCK_DIV=2
|
||||
CONFIG_M5307C3=y
|
||||
CONFIG_RAMBASE=0x00000000
|
||||
CONFIG_RAMSIZE=0x00800000
|
||||
CONFIG_VECTORBASE=0x00000000
|
||||
CONFIG_KERNELBASE=0x00020000
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_PPP=y
|
||||
CONFIG_SLIP=y
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_FULLDEBUG=y
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
# CONFIG_CRC32 is not set
|
||||
70
arch/m68k/configs/m5407c3_defconfig
Normal file
70
arch/m68k/configs/m5407c3_defconfig
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# CONFIG_MMU is not set
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_AIO is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_M5407=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=50000000
|
||||
CONFIG_M5407C3=y
|
||||
CONFIG_RAMBASE=0x00000000
|
||||
CONFIG_RAMSIZE=0x00000000
|
||||
CONFIG_VECTORBASE=0x00000000
|
||||
CONFIG_KERNELBASE=0x00020000
|
||||
CONFIG_BINFMT_FLAT=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_PPP=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
# CONFIG_CRC32 is not set
|
||||
62
arch/m68k/configs/m5475evb_defconfig
Normal file
62
arch/m68k/configs/m5475evb_defconfig
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
# CONFIG_SHMEM is not set
|
||||
# CONFIG_AIO is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_LBDAF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_COLDFIRE=y
|
||||
CONFIG_M547x=y
|
||||
CONFIG_CLOCK_SET=y
|
||||
CONFIG_CLOCK_FREQ=266000000
|
||||
# CONFIG_4KSTACKS is not set
|
||||
CONFIG_RAMBASE=0x0
|
||||
CONFIG_RAMSIZE=0x2000000
|
||||
CONFIG_VECTORBASE=0x0
|
||||
CONFIG_MBAR=0xff000000
|
||||
CONFIG_KERNELBASE=0x20000
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_UCLINUX=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_VT is not set
|
||||
# CONFIG_UNIX98_PTYS is not set
|
||||
CONFIG_SERIAL_MCF=y
|
||||
CONFIG_SERIAL_MCF_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_FILE_LOCKING is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_INOTIFY_USER is not set
|
||||
# CONFIG_PROC_PAGE_MONITOR is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_ROMFS_BACKED_BY_MTD=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_BOOTPARAM=y
|
||||
CONFIG_BOOTPARAM_STRING="root=/dev/mtdblock0"
|
||||
509
arch/m68k/configs/mac_defconfig
Normal file
509
arch/m68k/configs/mac_defconfig
Normal file
|
|
@ -0,0 +1,509 @@
|
|||
CONFIG_LOCALVERSION="-mac"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_SYSV68_PARTITION=y
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68KFPU_EMU=y
|
||||
CONFIG_MAC=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
CONFIG_IPDDP=m
|
||||
CONFIG_IPDDP_ENCAP=y
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_BLK_DEV_SWIM=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_GD_ATAPI=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_MAC_IDE=y
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_MAC_SCSI=y
|
||||
CONFIG_SCSI_MAC_ESP=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_ADB=y
|
||||
CONFIG_ADB_MACII=y
|
||||
CONFIG_ADB_IOP=y
|
||||
CONFIG_ADB_PMU68K=y
|
||||
CONFIG_ADB_CUDA=y
|
||||
CONFIG_INPUT_ADBHID=y
|
||||
CONFIG_MAC_EMUMOUSEBTN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
CONFIG_MACMACE=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
CONFIG_MAC89x0=y
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
CONFIG_MACSONIC=y
|
||||
CONFIG_MAC8390=y
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_M68K_BEEP=m
|
||||
CONFIG_SERIO=m
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_SERIAL_PMACZILOG=y
|
||||
CONFIG_SERIAL_PMACZILOG_TTYS=y
|
||||
CONFIG_SERIAL_PMACZILOG_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_VALKYRIE=y
|
||||
CONFIG_FB_MAC=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
585
arch/m68k/configs/multi_defconfig
Normal file
585
arch/m68k/configs/multi_defconfig
Normal file
|
|
@ -0,0 +1,585 @@
|
|||
CONFIG_LOCALVERSION="-multi"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_M68060=y
|
||||
CONFIG_M68KFPU_EMU=y
|
||||
CONFIG_AMIGA=y
|
||||
CONFIG_ATARI=y
|
||||
CONFIG_MAC=y
|
||||
CONFIG_APOLLO=y
|
||||
CONFIG_VME=y
|
||||
CONFIG_MVME147=y
|
||||
CONFIG_MVME16x=y
|
||||
CONFIG_BVME6000=y
|
||||
CONFIG_HP300=y
|
||||
CONFIG_SUN3X=y
|
||||
CONFIG_Q40=y
|
||||
CONFIG_ZORRO=y
|
||||
CONFIG_AMIGA_PCMCIA=y
|
||||
CONFIG_ZORRO_NAMES=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
CONFIG_IPDDP=m
|
||||
CONFIG_IPDDP_ENCAP=y
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_PC=m
|
||||
CONFIG_PARPORT_AMIGA=m
|
||||
CONFIG_PARPORT_MFC3=m
|
||||
CONFIG_PARPORT_ATARI=m
|
||||
CONFIG_PARPORT_1284=y
|
||||
CONFIG_AMIGA_FLOPPY=y
|
||||
CONFIG_ATARI_FLOPPY=y
|
||||
CONFIG_BLK_DEV_SWIM=m
|
||||
CONFIG_AMIGA_Z2RAM=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_GD_ATAPI=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_GAYLE=y
|
||||
CONFIG_BLK_DEV_BUDDHA=y
|
||||
CONFIG_BLK_DEV_FALCON_IDE=y
|
||||
CONFIG_BLK_DEV_MAC_IDE=y
|
||||
CONFIG_BLK_DEV_Q40IDE=y
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_A3000_SCSI=y
|
||||
CONFIG_A2091_SCSI=y
|
||||
CONFIG_GVP11_SCSI=y
|
||||
CONFIG_SCSI_A4000T=y
|
||||
CONFIG_SCSI_ZORRO7XX=y
|
||||
CONFIG_ATARI_SCSI=y
|
||||
CONFIG_MAC_SCSI=y
|
||||
CONFIG_SCSI_MAC_ESP=y
|
||||
CONFIG_MVME147_SCSI=y
|
||||
CONFIG_MVME16x_SCSI=y
|
||||
CONFIG_BVME6000_SCSI=y
|
||||
CONFIG_SUN3X_ESP=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_ADB=y
|
||||
CONFIG_ADB_MACII=y
|
||||
CONFIG_ADB_IOP=y
|
||||
CONFIG_ADB_PMU68K=y
|
||||
CONFIG_ADB_CUDA=y
|
||||
CONFIG_INPUT_ADBHID=y
|
||||
CONFIG_MAC_EMUMOUSEBTN=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
CONFIG_A2065=y
|
||||
CONFIG_ARIADNE=y
|
||||
CONFIG_ATARILANCE=y
|
||||
CONFIG_HPLANCE=y
|
||||
CONFIG_MVME147_NET=y
|
||||
CONFIG_SUN3LANCE=y
|
||||
CONFIG_MACMACE=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
CONFIG_MAC89x0=y
|
||||
# CONFIG_NET_VENDOR_HP is not set
|
||||
CONFIG_BVME6000_NET=y
|
||||
CONFIG_MVME16x_NET=y
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
CONFIG_MACSONIC=y
|
||||
CONFIG_HYDRA=y
|
||||
CONFIG_MAC8390=y
|
||||
CONFIG_NE2000=m
|
||||
CONFIG_APNE=y
|
||||
CONFIG_ZORRO8390=y
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PLIP=m
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
CONFIG_KEYBOARD_AMIGA=y
|
||||
CONFIG_KEYBOARD_ATARI=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_SUNKBD=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
CONFIG_MOUSE_AMIGA=m
|
||||
CONFIG_MOUSE_ATARI=m
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_JOYSTICK_AMIGA=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_M68K_BEEP=m
|
||||
CONFIG_HP_SDC_RTC=m
|
||||
CONFIG_SERIO_Q40KBD=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_SERIAL_PMACZILOG=y
|
||||
CONFIG_SERIAL_PMACZILOG_TTYS=y
|
||||
CONFIG_SERIAL_PMACZILOG_CONSOLE=y
|
||||
CONFIG_PRINTER=m
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PPS_CLIENT_PARPORT=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CIRRUS=y
|
||||
CONFIG_FB_AMIGA=y
|
||||
CONFIG_FB_AMIGA_OCS=y
|
||||
CONFIG_FB_AMIGA_ECS=y
|
||||
CONFIG_FB_AMIGA_AGA=y
|
||||
CONFIG_FB_FM2=y
|
||||
CONFIG_FB_ATARI=y
|
||||
CONFIG_FB_VALKYRIE=y
|
||||
CONFIG_FB_MAC=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_DMASOUND_ATARI=m
|
||||
CONFIG_DMASOUND_PAULA=m
|
||||
CONFIG_DMASOUND_Q40=m
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_MSM6242=m
|
||||
CONFIG_RTC_DRV_RP5C01=m
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_HEARTBEAT=y
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_NATFEAT=y
|
||||
CONFIG_NFBLOCK=y
|
||||
CONFIG_NFCON=y
|
||||
CONFIG_NFETH=y
|
||||
CONFIG_ATARI_DSP56K=m
|
||||
CONFIG_AMIGA_BUILTIN_SERIAL=y
|
||||
CONFIG_SERIAL_CONSOLE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
477
arch/m68k/configs/mvme147_defconfig
Normal file
477
arch/m68k/configs/mvme147_defconfig
Normal file
|
|
@ -0,0 +1,477 @@
|
|||
CONFIG_LOCALVERSION="-mvme147"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_ATARI_PARTITION=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_MINIX_SUBPARTITION=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
CONFIG_SUN_PARTITION=y
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
CONFIG_IOSCHED_DEADLINE=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BOOTINFO_PROC=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_VME=y
|
||||
CONFIG_MVME147=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_CLEANCACHE=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=m
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=m
|
||||
CONFIG_XFRM_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_NET_IPGRE_DEMUX=m
|
||||
CONFIG_NET_IPGRE=m
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_UDP_DIAG=m
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_IPV6_VTI=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
# CONFIG_NF_CONNTRACK_PROCFS is not set
|
||||
# CONFIG_NF_CT_PROTO_DCCP is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||
CONFIG_NF_CONNTRACK_FTP=m
|
||||
CONFIG_NF_CONNTRACK_H323=m
|
||||
CONFIG_NF_CONNTRACK_IRC=m
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_CONNTRACK_PPTP=m
|
||||
CONFIG_NF_CONNTRACK_SANE=m
|
||||
CONFIG_NF_CONNTRACK_SIP=m
|
||||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_RBTREE=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_COUNTER=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NETFILTER_XT_SET=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_POLICY=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=m
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=m
|
||||
CONFIG_IP_SET=m
|
||||
CONFIG_IP_SET_BITMAP_IP=m
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=m
|
||||
CONFIG_IP_SET_BITMAP_PORT=m
|
||||
CONFIG_IP_SET_HASH_IP=m
|
||||
CONFIG_IP_SET_HASH_IPMARK=m
|
||||
CONFIG_IP_SET_HASH_IPPORT=m
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=m
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=m
|
||||
CONFIG_IP_SET_HASH_NET=m
|
||||
CONFIG_IP_SET_HASH_NETNET=m
|
||||
CONFIG_IP_SET_HASH_NETPORT=m
|
||||
CONFIG_IP_SET_HASH_NETIFACE=m
|
||||
CONFIG_IP_SET_LIST_SET=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV4=m
|
||||
CONFIG_NF_TABLES_ARP=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NF_CONNTRACK_IPV6=m
|
||||
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
|
||||
CONFIG_NFT_CHAIN_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_SCTP_COOKIE_HMAC_SHA1=y
|
||||
CONFIG_RDS=m
|
||||
CONFIG_RDS_TCP=m
|
||||
CONFIG_L2TP=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
CONFIG_BATMAN_ADV_MCAST=y
|
||||
CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_NET_MPLS_GSO=m
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_DEVTMPFS=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
CONFIG_CONNECTOR=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_DUMMY_IRQ=m
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_CHR_DEV_OSST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_MVME147_SCSI=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_ERA=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_EQUALIZER=m
|
||||
CONFIG_NET_TEAM=m
|
||||
CONFIG_NET_TEAM_MODE_BROADCAST=m
|
||||
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
|
||||
CONFIG_NET_TEAM_MODE_RANDOM=m
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
||||
CONFIG_VXLAN=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
CONFIG_VETH=m
|
||||
CONFIG_MVME147_NET=y
|
||||
# CONFIG_NET_VENDOR_ARC is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
# CONFIG_NET_VENDOR_VIA is not set
|
||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPTP=m
|
||||
CONFIG_PPPOL2TP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_SLIP=m
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_SMART=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_DEVKMEM is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NTP_PPS=y
|
||||
CONFIG_PPS_CLIENT_LDISC=m
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_HID=m
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=m
|
||||
# CONFIG_HID_GENERIC is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=m
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_JFS_FS=m
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_OCFS2_FS=m
|
||||
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_PRINT_QUOTA_WARNING is not set
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_ECRYPT_FS=m
|
||||
CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_CRAMFS=m
|
||||
CONFIG_SQUASHFS=m
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_OMFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_QNX6FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=m
|
||||
CONFIG_NFS_SWAP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_DEBUG is not set
|
||||
CONFIG_CODA_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_MAC_ROMAN=m
|
||||
CONFIG_NLS_MAC_CELTIC=m
|
||||
CONFIG_NLS_MAC_CENTEURO=m
|
||||
CONFIG_NLS_MAC_CROATIAN=m
|
||||
CONFIG_NLS_MAC_CYRILLIC=m
|
||||
CONFIG_NLS_MAC_GAELIC=m
|
||||
CONFIG_NLS_MAC_GREEK=m
|
||||
CONFIG_NLS_MAC_ICELAND=m
|
||||
CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_TEST_STRING_HELPERS=m
|
||||
CONFIG_ENCRYPTED_KEYS=m
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_CCM=m
|
||||
CONFIG_CRYPTO_GCM=m
|
||||
CONFIG_CRYPTO_CTS=m
|
||||
CONFIG_CRYPTO_LRW=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_XTS=m
|
||||
CONFIG_CRYPTO_XCBC=m
|
||||
CONFIG_CRYPTO_VMAC=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_RMD128=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_CAMELLIA=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_FCRYPT=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_SALSA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_ZLIB=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_TEST=m
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue