mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
Merge commit 'kumar/next' into next
This commit is contained in:
commit
edbc29d76d
36 changed files with 3172 additions and 150 deletions
|
@ -35,30 +35,30 @@ Example:
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
compatible = "fsl,mpc8349-dma", "fsl,elo-dma";
|
compatible = "fsl,mpc8349-dma", "fsl,elo-dma";
|
||||||
reg = <82a8 4>;
|
reg = <0x82a8 4>;
|
||||||
ranges = <0 8100 1a4>;
|
ranges = <0 0x8100 0x1a4>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
interrupts = <47 8>;
|
interrupts = <71 8>;
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
dma-channel@0 {
|
dma-channel@0 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <0 80>;
|
reg = <0 0x80>;
|
||||||
};
|
};
|
||||||
dma-channel@80 {
|
dma-channel@80 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <80 80>;
|
reg = <0x80 0x80>;
|
||||||
};
|
};
|
||||||
dma-channel@100 {
|
dma-channel@100 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
reg = <100 80>;
|
reg = <0x100 0x80>;
|
||||||
};
|
};
|
||||||
dma-channel@180 {
|
dma-channel@180 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <3>;
|
cell-index = <3>;
|
||||||
reg = <180 80>;
|
reg = <0x180 0x80>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -93,36 +93,36 @@ Example:
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
compatible = "fsl,mpc8540-dma", "fsl,eloplus-dma";
|
compatible = "fsl,mpc8540-dma", "fsl,eloplus-dma";
|
||||||
reg = <21300 4>;
|
reg = <0x21300 4>;
|
||||||
ranges = <0 21100 200>;
|
ranges = <0 0x21100 0x200>;
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
dma-channel@0 {
|
dma-channel@0 {
|
||||||
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
||||||
reg = <0 80>;
|
reg = <0 0x80>;
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <14 2>;
|
interrupts = <20 2>;
|
||||||
};
|
};
|
||||||
dma-channel@80 {
|
dma-channel@80 {
|
||||||
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
||||||
reg = <80 80>;
|
reg = <0x80 0x80>;
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <15 2>;
|
interrupts = <21 2>;
|
||||||
};
|
};
|
||||||
dma-channel@100 {
|
dma-channel@100 {
|
||||||
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
||||||
reg = <100 80>;
|
reg = <0x100 0x80>;
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <16 2>;
|
interrupts = <22 2>;
|
||||||
};
|
};
|
||||||
dma-channel@180 {
|
dma-channel@180 {
|
||||||
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
compatible = "fsl,mpc8540-dma-channel", "fsl,eloplus-dma-channel";
|
||||||
reg = <180 80>;
|
reg = <0x180 0x80>;
|
||||||
cell-index = <3>;
|
cell-index = <3>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <17 2>;
|
interrupts = <23 2>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
24
Documentation/powerpc/dts-bindings/fsl/esdhc.txt
Normal file
24
Documentation/powerpc/dts-bindings/fsl/esdhc.txt
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
* Freescale Enhanced Secure Digital Host Controller (eSDHC)
|
||||||
|
|
||||||
|
The Enhanced Secure Digital Host Controller provides an interface
|
||||||
|
for MMC, SD, and SDIO types of memory cards.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : should be
|
||||||
|
"fsl,<chip>-esdhc", "fsl,mpc8379-esdhc" for MPC83xx processors.
|
||||||
|
"fsl,<chip>-esdhc", "fsl,mpc8536-esdhc" for MPC85xx processors.
|
||||||
|
- reg : should contain eSDHC registers location and length.
|
||||||
|
- interrupts : should contain eSDHC interrupt.
|
||||||
|
- interrupt-parent : interrupt source phandle.
|
||||||
|
- clock-frequency : specifies eSDHC base clock frequency.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
sdhci@2e000 {
|
||||||
|
compatible = "fsl,mpc8378-esdhc", "fsl,mpc8379-esdhc";
|
||||||
|
reg = <0x2e000 0x1000>;
|
||||||
|
interrupts = <42 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
|
};
|
|
@ -594,6 +594,7 @@ config FSL_SOC
|
||||||
config FSL_PCI
|
config FSL_PCI
|
||||||
bool
|
bool
|
||||||
select PPC_INDIRECT_PCI
|
select PPC_INDIRECT_PCI
|
||||||
|
select PCI_QUIRKS
|
||||||
|
|
||||||
config 4xx_SOC
|
config 4xx_SOC
|
||||||
bool
|
bool
|
||||||
|
@ -730,6 +731,22 @@ config LOWMEM_SIZE
|
||||||
hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL
|
hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL
|
||||||
default "0x30000000"
|
default "0x30000000"
|
||||||
|
|
||||||
|
config LOWMEM_CAM_NUM_BOOL
|
||||||
|
bool "Set number of CAMs to use to map low memory"
|
||||||
|
depends on ADVANCED_OPTIONS && FSL_BOOKE
|
||||||
|
help
|
||||||
|
This option allows you to set the maximum number of CAM slots that
|
||||||
|
will be used to map low memory. There are a limited number of slots
|
||||||
|
available and even more limited number that will fit in the L1 MMU.
|
||||||
|
However, using more entries will allow mapping more low memory. This
|
||||||
|
can be useful in optimizing the layout of kernel virtual memory.
|
||||||
|
|
||||||
|
Say N here unless you know what you are doing.
|
||||||
|
|
||||||
|
config LOWMEM_CAM_NUM
|
||||||
|
int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL
|
||||||
|
default 3
|
||||||
|
|
||||||
config RELOCATABLE
|
config RELOCATABLE
|
||||||
bool "Build a relocatable kernel (EXPERIMENTAL)"
|
bool "Build a relocatable kernel (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE
|
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE
|
||||||
|
@ -794,7 +811,7 @@ config PHYSICAL_START
|
||||||
|
|
||||||
config PHYSICAL_ALIGN
|
config PHYSICAL_ALIGN
|
||||||
hex
|
hex
|
||||||
default "0x10000000" if FSL_BOOKE
|
default "0x04000000" if FSL_BOOKE
|
||||||
help
|
help
|
||||||
This value puts the alignment restrictions on physical address
|
This value puts the alignment restrictions on physical address
|
||||||
where kernel is loaded and run from. Kernel is compiled for an
|
where kernel is loaded and run from. Kernel is compiled for an
|
||||||
|
|
364
arch/powerpc/boot/dts/gef_sbc310.dts
Normal file
364
arch/powerpc/boot/dts/gef_sbc310.dts
Normal file
|
@ -0,0 +1,364 @@
|
||||||
|
/*
|
||||||
|
* GE Fanuc SBC310 Device Tree Source
|
||||||
|
*
|
||||||
|
* Copyright 2008 GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Based on: SBS CM6 Device Tree Source
|
||||||
|
* Copyright 2007 SBS Technologies GmbH & Co. KG
|
||||||
|
* And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
|
||||||
|
* Copyright 2006 Freescale Semiconductor Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compiled with dtc -I dts -O dtb -o gef_sbc310.dtb gef_sbc310.dts
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "GEF_SBC310";
|
||||||
|
compatible = "gef,sbc310";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = &enet0;
|
||||||
|
ethernet1 = &enet1;
|
||||||
|
serial0 = &serial0;
|
||||||
|
serial1 = &serial1;
|
||||||
|
pci0 = &pci0;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
PowerPC,8641@0 {
|
||||||
|
device_type = "cpu";
|
||||||
|
reg = <0>;
|
||||||
|
d-cache-line-size = <32>; // 32 bytes
|
||||||
|
i-cache-line-size = <32>; // 32 bytes
|
||||||
|
d-cache-size = <32768>; // L1, 32K
|
||||||
|
i-cache-size = <32768>; // L1, 32K
|
||||||
|
timebase-frequency = <0>; // From uboot
|
||||||
|
bus-frequency = <0>; // From uboot
|
||||||
|
clock-frequency = <0>; // From uboot
|
||||||
|
};
|
||||||
|
PowerPC,8641@1 {
|
||||||
|
device_type = "cpu";
|
||||||
|
reg = <1>;
|
||||||
|
d-cache-line-size = <32>; // 32 bytes
|
||||||
|
i-cache-line-size = <32>; // 32 bytes
|
||||||
|
d-cache-size = <32768>; // L1, 32K
|
||||||
|
i-cache-size = <32768>; // L1, 32K
|
||||||
|
timebase-frequency = <0>; // From uboot
|
||||||
|
bus-frequency = <0>; // From uboot
|
||||||
|
clock-frequency = <0>; // From uboot
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x0 0x40000000>; // set by uboot
|
||||||
|
};
|
||||||
|
|
||||||
|
localbus@fef05000 {
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,mpc8641-localbus", "simple-bus";
|
||||||
|
reg = <0xfef05000 0x1000>;
|
||||||
|
interrupts = <19 2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
|
||||||
|
ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
|
||||||
|
1 0 0xe0000000 0x08000000 // Paged Flash 0
|
||||||
|
2 0 0xe8000000 0x08000000 // Paged Flash 1
|
||||||
|
3 0 0xfc100000 0x00020000 // NVRAM
|
||||||
|
4 0 0xfc000000 0x00010000>; // FPGA
|
||||||
|
|
||||||
|
/* flash@0,0 is a mirror of part of the memory in flash@1,0
|
||||||
|
flash@0,0 {
|
||||||
|
compatible = "cfi-flash";
|
||||||
|
reg = <0 0 0x01000000>;
|
||||||
|
bank-width = <2>;
|
||||||
|
device-width = <2>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
partition@0 {
|
||||||
|
label = "firmware";
|
||||||
|
reg = <0x00000000 0x01000000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
flash@1,0 {
|
||||||
|
compatible = "cfi-flash";
|
||||||
|
reg = <1 0 0x8000000>;
|
||||||
|
bank-width = <2>;
|
||||||
|
device-width = <2>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
partition@0 {
|
||||||
|
label = "user";
|
||||||
|
reg = <0x00000000 0x07800000>;
|
||||||
|
};
|
||||||
|
partition@7800000 {
|
||||||
|
label = "firmware";
|
||||||
|
reg = <0x07800000 0x00800000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fpga@4,0 {
|
||||||
|
compatible = "gef,fpga-regs";
|
||||||
|
reg = <0x4 0x0 0x40>;
|
||||||
|
};
|
||||||
|
|
||||||
|
wdt@4,2000 {
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
device_type = "watchdog";
|
||||||
|
compatible = "gef,fpga-wdt";
|
||||||
|
reg = <0x4 0x2000 0x8>;
|
||||||
|
interrupts = <0x1a 0x4>;
|
||||||
|
interrupt-parent = <&gef_pic>;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
wdt@4,2010 {
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
device_type = "watchdog";
|
||||||
|
compatible = "gef,fpga-wdt";
|
||||||
|
reg = <0x4 0x2010 0x8>;
|
||||||
|
interrupts = <0x1b 0x4>;
|
||||||
|
interrupt-parent = <&gef_pic>;
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
gef_pic: pic@4,4000 {
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-controller;
|
||||||
|
compatible = "gef,fpga-pic";
|
||||||
|
reg = <0x4 0x4000 0x20>;
|
||||||
|
interrupts = <0x8
|
||||||
|
0x9>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
|
||||||
|
};
|
||||||
|
gef_gpio: gpio@4,8000 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "gef,sbc310-gpio";
|
||||||
|
reg = <0x4 0x8000 0x24>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
soc@fef00000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
device_type = "soc";
|
||||||
|
compatible = "simple-bus";
|
||||||
|
ranges = <0x0 0xfef00000 0x00100000>;
|
||||||
|
reg = <0xfef00000 0x100000>; // CCSRBAR 1M
|
||||||
|
bus-frequency = <33333333>;
|
||||||
|
|
||||||
|
i2c1: i2c@3000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "fsl-i2c";
|
||||||
|
reg = <0x3000 0x100>;
|
||||||
|
interrupts = <0x2b 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
dfsrr;
|
||||||
|
|
||||||
|
rtc@51 {
|
||||||
|
compatible = "epson,rx8581";
|
||||||
|
reg = <0x00000051>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c2: i2c@3100 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "fsl-i2c";
|
||||||
|
reg = <0x3100 0x100>;
|
||||||
|
interrupts = <0x2b 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
dfsrr;
|
||||||
|
|
||||||
|
hwmon@48 {
|
||||||
|
compatible = "national,lm92";
|
||||||
|
reg = <0x48>;
|
||||||
|
};
|
||||||
|
|
||||||
|
hwmon@4c {
|
||||||
|
compatible = "adi,adt7461";
|
||||||
|
reg = <0x4c>;
|
||||||
|
};
|
||||||
|
|
||||||
|
eti@6b {
|
||||||
|
compatible = "dallas,ds1682";
|
||||||
|
reg = <0x6b>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dma@21300 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
|
||||||
|
reg = <0x21300 0x4>;
|
||||||
|
ranges = <0x0 0x21100 0x200>;
|
||||||
|
cell-index = <0>;
|
||||||
|
dma-channel@0 {
|
||||||
|
compatible = "fsl,mpc8641-dma-channel",
|
||||||
|
"fsl,eloplus-dma-channel";
|
||||||
|
reg = <0x0 0x80>;
|
||||||
|
cell-index = <0>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <20 2>;
|
||||||
|
};
|
||||||
|
dma-channel@80 {
|
||||||
|
compatible = "fsl,mpc8641-dma-channel",
|
||||||
|
"fsl,eloplus-dma-channel";
|
||||||
|
reg = <0x80 0x80>;
|
||||||
|
cell-index = <1>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <21 2>;
|
||||||
|
};
|
||||||
|
dma-channel@100 {
|
||||||
|
compatible = "fsl,mpc8641-dma-channel",
|
||||||
|
"fsl,eloplus-dma-channel";
|
||||||
|
reg = <0x100 0x80>;
|
||||||
|
cell-index = <2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <22 2>;
|
||||||
|
};
|
||||||
|
dma-channel@180 {
|
||||||
|
compatible = "fsl,mpc8641-dma-channel",
|
||||||
|
"fsl,eloplus-dma-channel";
|
||||||
|
reg = <0x180 0x80>;
|
||||||
|
cell-index = <3>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <23 2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio@24520 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "fsl,gianfar-mdio";
|
||||||
|
reg = <0x24520 0x20>;
|
||||||
|
|
||||||
|
phy0: ethernet-phy@0 {
|
||||||
|
interrupt-parent = <&gef_pic>;
|
||||||
|
interrupts = <0x9 0x4>;
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
phy2: ethernet-phy@2 {
|
||||||
|
interrupt-parent = <&gef_pic>;
|
||||||
|
interrupts = <0x8 0x4>;
|
||||||
|
reg = <3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
enet0: ethernet@24000 {
|
||||||
|
device_type = "network";
|
||||||
|
model = "eTSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <0x24000 0x1000>;
|
||||||
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
phy-handle = <&phy0>;
|
||||||
|
phy-connection-type = "gmii";
|
||||||
|
};
|
||||||
|
|
||||||
|
enet1: ethernet@26000 {
|
||||||
|
device_type = "network";
|
||||||
|
model = "eTSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <0x26000 0x1000>;
|
||||||
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
interrupts = <0x1f 0x2 0x20 0x2 0x21 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
phy-handle = <&phy2>;
|
||||||
|
phy-connection-type = "gmii";
|
||||||
|
};
|
||||||
|
|
||||||
|
serial0: serial@4500 {
|
||||||
|
cell-index = <0>;
|
||||||
|
device_type = "serial";
|
||||||
|
compatible = "ns16550";
|
||||||
|
reg = <0x4500 0x100>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupts = <0x2a 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
};
|
||||||
|
|
||||||
|
serial1: serial@4600 {
|
||||||
|
cell-index = <1>;
|
||||||
|
device_type = "serial";
|
||||||
|
compatible = "ns16550";
|
||||||
|
reg = <0x4600 0x100>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupts = <0x1c 0x2>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mpic: pic@40000 {
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupt-controller;
|
||||||
|
#address-cells = <0>;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <0x40000 0x40000>;
|
||||||
|
compatible = "chrp,open-pic";
|
||||||
|
device_type = "open-pic";
|
||||||
|
};
|
||||||
|
|
||||||
|
global-utilities@e0000 {
|
||||||
|
compatible = "fsl,mpc8641-guts";
|
||||||
|
reg = <0xe0000 0x1000>;
|
||||||
|
fsl,has-rstcr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci0: pcie@fef08000 {
|
||||||
|
compatible = "fsl,mpc8641-pcie";
|
||||||
|
device_type = "pci";
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
reg = <0xfef08000 0x1000>;
|
||||||
|
bus-range = <0x0 0xff>;
|
||||||
|
ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
|
||||||
|
0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
|
||||||
|
clock-frequency = <33333333>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
interrupts = <0x18 0x2>;
|
||||||
|
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||||
|
interrupt-map = <
|
||||||
|
0x0000 0x0 0x0 0x1 &mpic 0x0 0x2
|
||||||
|
0x0000 0x0 0x0 0x2 &mpic 0x1 0x2
|
||||||
|
0x0000 0x0 0x0 0x3 &mpic 0x2 0x2
|
||||||
|
0x0000 0x0 0x0 0x4 &mpic 0x3 0x2
|
||||||
|
>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
device_type = "pci";
|
||||||
|
ranges = <0x02000000 0x0 0x80000000
|
||||||
|
0x02000000 0x0 0x80000000
|
||||||
|
0x0 0x40000000
|
||||||
|
|
||||||
|
0x01000000 0x0 0x00000000
|
||||||
|
0x01000000 0x0 0x00000000
|
||||||
|
0x0 0x00400000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -22,6 +22,8 @@
|
||||||
serial0 = &serial0;
|
serial0 = &serial0;
|
||||||
serial1 = &serial1;
|
serial1 = &serial1;
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
|
pci1 = &pci1;
|
||||||
|
pci2 = &pci2;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -349,4 +351,66 @@
|
||||||
compatible = "fsl,mpc8349-pci";
|
compatible = "fsl,mpc8349-pci";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pci1: pcie@e0009000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8315-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe0009000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xa0000000 0xa0000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xb1000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||||
|
0 0 0 2 &ipic 1 8
|
||||||
|
0 0 0 3 &ipic 1 8
|
||||||
|
0 0 0 4 &ipic 1 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xa0000000
|
||||||
|
0x02000000 0 0xa0000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci2: pcie@e000a000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8315-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe000a000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xc0000000 0xc0000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xd1000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||||
|
0 0 0 2 &ipic 2 8
|
||||||
|
0 0 0 3 &ipic 2 8
|
||||||
|
0 0 0 4 &ipic 2 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xc0000000
|
||||||
|
0x02000000 0 0xc0000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
serial0 = &serial0;
|
serial0 = &serial0;
|
||||||
serial1 = &serial1;
|
serial1 = &serial1;
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
|
pci1 = &pci1;
|
||||||
|
pci2 = &pci2;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -311,12 +313,13 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhc@2e000 {
|
sdhci@2e000 {
|
||||||
model = "eSDHC";
|
compatible = "fsl,mpc8377-esdhc", "fsl,mpc8379-esdhc";
|
||||||
compatible = "fsl,esdhc";
|
|
||||||
reg = <0x2e000 0x1000>;
|
reg = <0x2e000 0x1000>;
|
||||||
interrupts = <42 0x8>;
|
interrupts = <42 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sata@18000 {
|
sata@18000 {
|
||||||
|
@ -409,4 +412,66 @@
|
||||||
compatible = "fsl,mpc8349-pci";
|
compatible = "fsl,mpc8349-pci";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pci1: pcie@e0009000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8377-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe0009000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000 0xa8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xb8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||||
|
0 0 0 2 &ipic 1 8
|
||||||
|
0 0 0 3 &ipic 1 8
|
||||||
|
0 0 0 4 &ipic 1 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000
|
||||||
|
0x02000000 0 0xa8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci2: pcie@e000a000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8377-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe000a000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000 0xc8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xd8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||||
|
0 0 0 2 &ipic 2 8
|
||||||
|
0 0 0 3 &ipic 2 8
|
||||||
|
0 0 0 4 &ipic 2 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000
|
||||||
|
0x02000000 0 0xc8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
serial0 = &serial0;
|
serial0 = &serial0;
|
||||||
serial1 = &serial1;
|
serial1 = &serial1;
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
|
pci1 = &pci1;
|
||||||
|
pci2 = &pci2;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -107,6 +109,24 @@
|
||||||
reg = <0x200 0x100>;
|
reg = <0x200 0x100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpio1: gpio-controller@c00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8377-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xc00 0x100>;
|
||||||
|
interrupts = <74 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio2: gpio-controller@d00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8377-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xd00 0x100>;
|
||||||
|
interrupts = <75 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
i2c@3000 {
|
i2c@3000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -116,6 +136,17 @@
|
||||||
interrupts = <14 0x8>;
|
interrupts = <14 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@48 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x48>;
|
||||||
|
};
|
||||||
|
|
||||||
|
at24@50 {
|
||||||
|
compatible = "at24,24c256";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1339";
|
compatible = "dallas,ds1339";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -289,6 +320,15 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdhci@2e000 {
|
||||||
|
compatible = "fsl,mpc8377-esdhc", "fsl,mpc8379-esdhc";
|
||||||
|
reg = <0x2e000 0x1000>;
|
||||||
|
interrupts = <42 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
sata@18000 {
|
sata@18000 {
|
||||||
compatible = "fsl,mpc8377-sata", "fsl,pq-sata";
|
compatible = "fsl,mpc8377-sata", "fsl,pq-sata";
|
||||||
reg = <0x18000 0x1000>;
|
reg = <0x18000 0x1000>;
|
||||||
|
@ -350,4 +390,66 @@
|
||||||
compatible = "fsl,mpc8349-pci";
|
compatible = "fsl,mpc8349-pci";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pci1: pcie@e0009000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8377-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe0009000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000 0xa8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xb8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||||
|
0 0 0 2 &ipic 1 8
|
||||||
|
0 0 0 3 &ipic 1 8
|
||||||
|
0 0 0 4 &ipic 1 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000
|
||||||
|
0x02000000 0 0xa8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci2: pcie@e000a000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8377-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe000a000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000 0xc8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xd8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||||
|
0 0 0 2 &ipic 2 8
|
||||||
|
0 0 0 3 &ipic 2 8
|
||||||
|
0 0 0 4 &ipic 2 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000
|
||||||
|
0x02000000 0 0xc8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
serial0 = &serial0;
|
serial0 = &serial0;
|
||||||
serial1 = &serial1;
|
serial1 = &serial1;
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
|
pci1 = &pci1;
|
||||||
|
pci2 = &pci2;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -311,12 +313,13 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhc@2e000 {
|
sdhci@2e000 {
|
||||||
model = "eSDHC";
|
compatible = "fsl,mpc8378-esdhc", "fsl,mpc8379-esdhc";
|
||||||
compatible = "fsl,esdhc";
|
|
||||||
reg = <0x2e000 0x1000>;
|
reg = <0x2e000 0x1000>;
|
||||||
interrupts = <42 0x8>;
|
interrupts = <42 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* IPIC
|
/* IPIC
|
||||||
|
@ -395,4 +398,66 @@
|
||||||
compatible = "fsl,mpc8349-pci";
|
compatible = "fsl,mpc8349-pci";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pci1: pcie@e0009000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8378-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe0009000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000 0xa8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xb8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||||
|
0 0 0 2 &ipic 1 8
|
||||||
|
0 0 0 3 &ipic 1 8
|
||||||
|
0 0 0 4 &ipic 1 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000
|
||||||
|
0x02000000 0 0xa8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci2: pcie@e000a000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8378-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe000a000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000 0xc8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xd8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||||
|
0 0 0 2 &ipic 2 8
|
||||||
|
0 0 0 3 &ipic 2 8
|
||||||
|
0 0 0 4 &ipic 2 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000
|
||||||
|
0x02000000 0 0xc8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
serial0 = &serial0;
|
serial0 = &serial0;
|
||||||
serial1 = &serial1;
|
serial1 = &serial1;
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
|
pci1 = &pci1;
|
||||||
|
pci2 = &pci2;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -107,6 +109,24 @@
|
||||||
reg = <0x200 0x100>;
|
reg = <0x200 0x100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpio1: gpio-controller@c00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8378-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xc00 0x100>;
|
||||||
|
interrupts = <74 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio2: gpio-controller@d00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8378-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xd00 0x100>;
|
||||||
|
interrupts = <75 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
i2c@3000 {
|
i2c@3000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -116,6 +136,17 @@
|
||||||
interrupts = <14 0x8>;
|
interrupts = <14 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@48 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x48>;
|
||||||
|
};
|
||||||
|
|
||||||
|
at24@50 {
|
||||||
|
compatible = "at24,24c256";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1339";
|
compatible = "dallas,ds1339";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -287,6 +318,15 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdhci@2e000 {
|
||||||
|
compatible = "fsl,mpc8378-esdhc", "fsl,mpc8379-esdhc";
|
||||||
|
reg = <0x2e000 0x1000>;
|
||||||
|
interrupts = <42 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
/* IPIC
|
/* IPIC
|
||||||
* interrupts cell = <intr #, sense>
|
* interrupts cell = <intr #, sense>
|
||||||
* sense values match linux IORESOURCE_IRQ_* defines:
|
* sense values match linux IORESOURCE_IRQ_* defines:
|
||||||
|
@ -334,4 +374,66 @@
|
||||||
compatible = "fsl,mpc8349-pci";
|
compatible = "fsl,mpc8349-pci";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pci1: pcie@e0009000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8378-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe0009000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000 0xa8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xb8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||||
|
0 0 0 2 &ipic 1 8
|
||||||
|
0 0 0 3 &ipic 1 8
|
||||||
|
0 0 0 4 &ipic 1 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xa8000000
|
||||||
|
0x02000000 0 0xa8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pci2: pcie@e000a000 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
device_type = "pci";
|
||||||
|
compatible = "fsl,mpc8378-pcie", "fsl,mpc8314-pcie";
|
||||||
|
reg = <0xe000a000 0x00001000>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000 0xc8000000 0 0x10000000
|
||||||
|
0x01000000 0 0x00000000 0xd8000000 0 0x00800000>;
|
||||||
|
bus-range = <0 255>;
|
||||||
|
interrupt-map-mask = <0xf800 0 0 7>;
|
||||||
|
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||||
|
0 0 0 2 &ipic 2 8
|
||||||
|
0 0 0 3 &ipic 2 8
|
||||||
|
0 0 0 4 &ipic 2 8>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
|
||||||
|
pcie@0 {
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
device_type = "pci";
|
||||||
|
reg = <0 0 0 0 0>;
|
||||||
|
ranges = <0x02000000 0 0xc8000000
|
||||||
|
0x02000000 0 0xc8000000
|
||||||
|
0 0x10000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0x01000000 0 0x00000000
|
||||||
|
0 0x00800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -310,12 +310,13 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhc@2e000 {
|
sdhci@2e000 {
|
||||||
model = "eSDHC";
|
compatible = "fsl,mpc8379-esdhc";
|
||||||
compatible = "fsl,esdhc";
|
|
||||||
reg = <0x2e000 0x1000>;
|
reg = <0x2e000 0x1000>;
|
||||||
interrupts = <42 0x8>;
|
interrupts = <42 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sata@18000 {
|
sata@18000 {
|
||||||
|
|
|
@ -107,6 +107,24 @@
|
||||||
reg = <0x200 0x100>;
|
reg = <0x200 0x100>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpio1: gpio-controller@c00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8379-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xc00 0x100>;
|
||||||
|
interrupts = <74 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio2: gpio-controller@d00 {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "fsl,mpc8379-gpio", "fsl,mpc8349-gpio";
|
||||||
|
reg = <0xd00 0x100>;
|
||||||
|
interrupts = <75 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
gpio-controller;
|
||||||
|
};
|
||||||
|
|
||||||
i2c@3000 {
|
i2c@3000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -116,6 +134,17 @@
|
||||||
interrupts = <14 0x8>;
|
interrupts = <14 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@48 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x48>;
|
||||||
|
};
|
||||||
|
|
||||||
|
at24@50 {
|
||||||
|
compatible = "at24,24c256";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1339";
|
compatible = "dallas,ds1339";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -288,6 +317,15 @@
|
||||||
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
fsl,descriptor-types-mask = <0x3ab0ebf>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdhci@2e000 {
|
||||||
|
compatible = "fsl,mpc8379-esdhc";
|
||||||
|
reg = <0x2e000 0x1000>;
|
||||||
|
interrupts = <42 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
/* Filled in by U-Boot */
|
||||||
|
clock-frequency = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
sata@18000 {
|
sata@18000 {
|
||||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||||
reg = <0x18000 0x1000>;
|
reg = <0x18000 0x1000>;
|
||||||
|
|
|
@ -84,6 +84,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
|
|
@ -83,6 +83,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
|
|
@ -85,6 +85,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -365,14 +370,14 @@
|
||||||
can0@2,0 {
|
can0@2,0 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x0 0x100>;
|
reg = <2 0x0 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
can1@2,100 {
|
can1@2,100 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x100 0x100>;
|
reg = <2 0x100 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -365,14 +370,14 @@
|
||||||
can0@2,0 {
|
can0@2,0 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x0 0x100>;
|
reg = <2 0x0 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
can1@2,100 {
|
can1@2,100 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x100 0x100>;
|
reg = <2 0x100 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
|
|
@ -85,6 +85,11 @@
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
dfsrr;
|
dfsrr;
|
||||||
|
|
||||||
|
dtt@50 {
|
||||||
|
compatible = "national,lm75";
|
||||||
|
reg = <0x50>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc@68 {
|
rtc@68 {
|
||||||
compatible = "dallas,ds1337";
|
compatible = "dallas,ds1337";
|
||||||
reg = <0x68>;
|
reg = <0x68>;
|
||||||
|
@ -335,14 +340,14 @@
|
||||||
can0@2,0 {
|
can0@2,0 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x0 0x100>;
|
reg = <2 0x0 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
can1@2,100 {
|
can1@2,100 {
|
||||||
compatible = "intel,82527"; // Bosch CC770
|
compatible = "intel,82527"; // Bosch CC770
|
||||||
reg = <2 0x100 0x100>;
|
reg = <2 0x100 0x100>;
|
||||||
interrupts = <4 0>;
|
interrupts = <4 1>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
1613
arch/powerpc/configs/86xx/gef_sbc310_defconfig
Normal file
1613
arch/powerpc/configs/86xx/gef_sbc310_defconfig
Normal file
File diff suppressed because it is too large
Load diff
|
@ -110,6 +110,7 @@
|
||||||
#define SPRN_L1CSR0 0x3F2 /* L1 Cache Control and Status Register 0 */
|
#define SPRN_L1CSR0 0x3F2 /* L1 Cache Control and Status Register 0 */
|
||||||
#define SPRN_L1CSR1 0x3F3 /* L1 Cache Control and Status Register 1 */
|
#define SPRN_L1CSR1 0x3F3 /* L1 Cache Control and Status Register 1 */
|
||||||
#define SPRN_MMUCSR0 0x3F4 /* MMU Control and Status Register 0 */
|
#define SPRN_MMUCSR0 0x3F4 /* MMU Control and Status Register 0 */
|
||||||
|
#define SPRN_MMUCFG 0x3F7 /* MMU Configuration Register */
|
||||||
#define SPRN_PIT 0x3DB /* Programmable Interval Timer */
|
#define SPRN_PIT 0x3DB /* Programmable Interval Timer */
|
||||||
#define SPRN_BUCSR 0x3F5 /* Branch Unit Control and Status */
|
#define SPRN_BUCSR 0x3F5 /* Branch Unit Control and Status */
|
||||||
#define SPRN_L2CSR0 0x3F9 /* L2 Data Cache Control and Status Register 0 */
|
#define SPRN_L2CSR0 0x3F9 /* L2 Data Cache Control and Status Register 0 */
|
||||||
|
|
|
@ -61,6 +61,7 @@ obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \
|
||||||
obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o
|
obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o
|
||||||
obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o
|
obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o
|
||||||
obj-$(CONFIG_44x) += cpu_setup_44x.o
|
obj-$(CONFIG_44x) += cpu_setup_44x.o
|
||||||
|
obj-$(CONFIG_FSL_BOOKE) += cpu_setup_fsl_booke.o
|
||||||
|
|
||||||
extra-$(CONFIG_PPC_STD_MMU) := head_32.o
|
extra-$(CONFIG_PPC_STD_MMU) := head_32.o
|
||||||
extra-$(CONFIG_PPC64) := head_64.o
|
extra-$(CONFIG_PPC64) := head_64.o
|
||||||
|
|
31
arch/powerpc/kernel/cpu_setup_fsl_booke.S
Normal file
31
arch/powerpc/kernel/cpu_setup_fsl_booke.S
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* This file contains low level CPU setup functions.
|
||||||
|
* Kumar Gala <galak@kernel.crashing.org>
|
||||||
|
* Copyright 2009 Freescale Semiconductor, Inc.
|
||||||
|
*
|
||||||
|
* Based on cpu_setup_6xx code by
|
||||||
|
* Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||||
|
*
|
||||||
|
* 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 <asm/processor.h>
|
||||||
|
#include <asm/cputable.h>
|
||||||
|
#include <asm/ppc_asm.h>
|
||||||
|
|
||||||
|
_GLOBAL(__setup_cpu_e200)
|
||||||
|
/* enable dedicated debug exception handling resources (Debug APU) */
|
||||||
|
mfspr r3,SPRN_HID0
|
||||||
|
ori r3,r3,HID0_DAPUEN@l
|
||||||
|
mtspr SPRN_HID0,r3
|
||||||
|
b __setup_e200_ivors
|
||||||
|
_GLOBAL(__setup_cpu_e500v1)
|
||||||
|
_GLOBAL(__setup_cpu_e500v2)
|
||||||
|
b __setup_e500_ivors
|
||||||
|
_GLOBAL(__setup_cpu_e500mc)
|
||||||
|
b __setup_e500mc_ivors
|
||||||
|
|
|
@ -35,6 +35,10 @@ const char *powerpc_base_platform;
|
||||||
* and ppc64
|
* and ppc64
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_PPC32
|
#ifdef CONFIG_PPC32
|
||||||
|
extern void __setup_cpu_e200(unsigned long offset, struct cpu_spec* spec);
|
||||||
|
extern void __setup_cpu_e500v1(unsigned long offset, struct cpu_spec* spec);
|
||||||
|
extern void __setup_cpu_e500v2(unsigned long offset, struct cpu_spec* spec);
|
||||||
|
extern void __setup_cpu_e500mc(unsigned long offset, struct cpu_spec* spec);
|
||||||
extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec);
|
extern void __setup_cpu_440ep(unsigned long offset, struct cpu_spec* spec);
|
||||||
extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
|
extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec);
|
||||||
extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
|
extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
|
||||||
|
@ -1687,6 +1691,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
||||||
PPC_FEATURE_UNIFIED_CACHE,
|
PPC_FEATURE_UNIFIED_CACHE,
|
||||||
.mmu_features = MMU_FTR_TYPE_FSL_E,
|
.mmu_features = MMU_FTR_TYPE_FSL_E,
|
||||||
.dcache_bsize = 32,
|
.dcache_bsize = 32,
|
||||||
|
.cpu_setup = __setup_cpu_e200,
|
||||||
.machine_check = machine_check_e200,
|
.machine_check = machine_check_e200,
|
||||||
.platform = "ppc5554",
|
.platform = "ppc5554",
|
||||||
}
|
}
|
||||||
|
@ -1706,6 +1711,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
||||||
.num_pmcs = 4,
|
.num_pmcs = 4,
|
||||||
.oprofile_cpu_type = "ppc/e500",
|
.oprofile_cpu_type = "ppc/e500",
|
||||||
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
||||||
|
.cpu_setup = __setup_cpu_e500v1,
|
||||||
.machine_check = machine_check_e500,
|
.machine_check = machine_check_e500,
|
||||||
.platform = "ppc8540",
|
.platform = "ppc8540",
|
||||||
},
|
},
|
||||||
|
@ -1724,6 +1730,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
||||||
.num_pmcs = 4,
|
.num_pmcs = 4,
|
||||||
.oprofile_cpu_type = "ppc/e500",
|
.oprofile_cpu_type = "ppc/e500",
|
||||||
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
||||||
|
.cpu_setup = __setup_cpu_e500v2,
|
||||||
.machine_check = machine_check_e500,
|
.machine_check = machine_check_e500,
|
||||||
.platform = "ppc8548",
|
.platform = "ppc8548",
|
||||||
},
|
},
|
||||||
|
@ -1739,6 +1746,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
||||||
.num_pmcs = 4,
|
.num_pmcs = 4,
|
||||||
.oprofile_cpu_type = "ppc/e500", /* xxx - galak, e500mc? */
|
.oprofile_cpu_type = "ppc/e500", /* xxx - galak, e500mc? */
|
||||||
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
.oprofile_type = PPC_OPROFILE_FSL_EMB,
|
||||||
|
.cpu_setup = __setup_cpu_e500mc,
|
||||||
.machine_check = machine_check_e500,
|
.machine_check = machine_check_e500,
|
||||||
.platform = "ppce500mc",
|
.platform = "ppce500mc",
|
||||||
},
|
},
|
||||||
|
|
|
@ -70,10 +70,10 @@
|
||||||
|
|
||||||
/* only on e500mc/e200 */
|
/* only on e500mc/e200 */
|
||||||
#define DEBUG_STACK_BASE dbgirq_ctx
|
#define DEBUG_STACK_BASE dbgirq_ctx
|
||||||
#ifdef CONFIG_PPC_E500MC
|
#ifdef CONFIG_E200
|
||||||
#define DEBUG_SPRG SPRN_SPRG9
|
|
||||||
#else
|
|
||||||
#define DEBUG_SPRG SPRN_SPRG6W
|
#define DEBUG_SPRG SPRN_SPRG6W
|
||||||
|
#else
|
||||||
|
#define DEBUG_SPRG SPRN_SPRG9
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXC_LVL_FRAME_OVERHEAD (THREAD_SIZE - INT_FRAME_SIZE - EXC_LVL_SIZE)
|
#define EXC_LVL_FRAME_OVERHEAD (THREAD_SIZE - INT_FRAME_SIZE - EXC_LVL_SIZE)
|
||||||
|
|
|
@ -103,10 +103,15 @@ invstr: mflr r6 /* Make it accessible */
|
||||||
or r7,r7,r4
|
or r7,r7,r4
|
||||||
mtspr SPRN_MAS6,r7
|
mtspr SPRN_MAS6,r7
|
||||||
tlbsx 0,r6 /* search MSR[IS], SPID=PID0 */
|
tlbsx 0,r6 /* search MSR[IS], SPID=PID0 */
|
||||||
#ifndef CONFIG_E200
|
|
||||||
mfspr r7,SPRN_MAS1
|
mfspr r7,SPRN_MAS1
|
||||||
andis. r7,r7,MAS1_VALID@h
|
andis. r7,r7,MAS1_VALID@h
|
||||||
bne match_TLB
|
bne match_TLB
|
||||||
|
|
||||||
|
mfspr r7,SPRN_MMUCFG
|
||||||
|
rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */
|
||||||
|
cmpwi r7,3
|
||||||
|
bne match_TLB /* skip if NPIDS != 3 */
|
||||||
|
|
||||||
mfspr r7,SPRN_PID1
|
mfspr r7,SPRN_PID1
|
||||||
slwi r7,r7,16
|
slwi r7,r7,16
|
||||||
or r7,r7,r4
|
or r7,r7,r4
|
||||||
|
@ -120,7 +125,7 @@ invstr: mflr r6 /* Make it accessible */
|
||||||
or r7,r7,r4
|
or r7,r7,r4
|
||||||
mtspr SPRN_MAS6,r7
|
mtspr SPRN_MAS6,r7
|
||||||
tlbsx 0,r6 /* Fall through, we had to match */
|
tlbsx 0,r6 /* Fall through, we had to match */
|
||||||
#endif
|
|
||||||
match_TLB:
|
match_TLB:
|
||||||
mfspr r7,SPRN_MAS0
|
mfspr r7,SPRN_MAS0
|
||||||
rlwinm r3,r7,16,20,31 /* Extract MAS0(Entry) */
|
rlwinm r3,r7,16,20,31 /* Extract MAS0(Entry) */
|
||||||
|
@ -215,14 +220,19 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||||
|
|
||||||
/* 4. Clear out PIDs & Search info */
|
/* 4. Clear out PIDs & Search info */
|
||||||
li r6,0
|
li r6,0
|
||||||
|
mtspr SPRN_MAS6,r6
|
||||||
mtspr SPRN_PID0,r6
|
mtspr SPRN_PID0,r6
|
||||||
#ifndef CONFIG_E200
|
|
||||||
|
mfspr r7,SPRN_MMUCFG
|
||||||
|
rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */
|
||||||
|
cmpwi r7,3
|
||||||
|
bne 2f /* skip if NPIDS != 3 */
|
||||||
|
|
||||||
mtspr SPRN_PID1,r6
|
mtspr SPRN_PID1,r6
|
||||||
mtspr SPRN_PID2,r6
|
mtspr SPRN_PID2,r6
|
||||||
#endif
|
|
||||||
mtspr SPRN_MAS6,r6
|
|
||||||
|
|
||||||
/* 5. Invalidate mapping we started in */
|
/* 5. Invalidate mapping we started in */
|
||||||
|
2:
|
||||||
lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */
|
lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */
|
||||||
rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */
|
rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */
|
||||||
mtspr SPRN_MAS0,r7
|
mtspr SPRN_MAS0,r7
|
||||||
|
@ -298,19 +308,7 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||||
SET_IVOR(12, WatchdogTimer);
|
SET_IVOR(12, WatchdogTimer);
|
||||||
SET_IVOR(13, DataTLBError);
|
SET_IVOR(13, DataTLBError);
|
||||||
SET_IVOR(14, InstructionTLBError);
|
SET_IVOR(14, InstructionTLBError);
|
||||||
SET_IVOR(15, DebugDebug);
|
|
||||||
#if defined(CONFIG_E500) && !defined(CONFIG_PPC_E500MC)
|
|
||||||
SET_IVOR(15, DebugCrit);
|
SET_IVOR(15, DebugCrit);
|
||||||
#endif
|
|
||||||
SET_IVOR(32, SPEUnavailable);
|
|
||||||
SET_IVOR(33, SPEFloatingPointData);
|
|
||||||
SET_IVOR(34, SPEFloatingPointRound);
|
|
||||||
#ifndef CONFIG_E200
|
|
||||||
SET_IVOR(35, PerformanceMonitor);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_PPC_E500MC
|
|
||||||
SET_IVOR(36, Doorbell);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Establish the interrupt vector base */
|
/* Establish the interrupt vector base */
|
||||||
lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
|
lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
|
||||||
|
@ -329,12 +327,6 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||||
oris r2,r2,HID0_DOZE@h
|
oris r2,r2,HID0_DOZE@h
|
||||||
mtspr SPRN_HID0, r2
|
mtspr SPRN_HID0, r2
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_E200
|
|
||||||
/* enable dedicated debug exception handling resources (Debug APU) */
|
|
||||||
mfspr r2,SPRN_HID0
|
|
||||||
ori r2,r2,HID0_DAPUEN@l
|
|
||||||
mtspr SPRN_HID0,r2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(CONFIG_BDI_SWITCH)
|
#if !defined(CONFIG_BDI_SWITCH)
|
||||||
/*
|
/*
|
||||||
|
@ -706,15 +698,11 @@ interrupt_base:
|
||||||
/* Performance Monitor */
|
/* Performance Monitor */
|
||||||
EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD)
|
EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD)
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_E500MC
|
|
||||||
EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_STD)
|
EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_STD)
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Debug Interrupt */
|
/* Debug Interrupt */
|
||||||
DEBUG_DEBUG_EXCEPTION
|
DEBUG_DEBUG_EXCEPTION
|
||||||
#if defined(CONFIG_E500) && !defined(CONFIG_PPC_E500MC)
|
|
||||||
DEBUG_CRIT_EXCEPTION
|
DEBUG_CRIT_EXCEPTION
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local functions
|
* Local functions
|
||||||
|
@ -897,6 +885,45 @@ KernelSPE:
|
||||||
* Global functions
|
* Global functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Adjust or setup IVORs for e200 */
|
||||||
|
_GLOBAL(__setup_e200_ivors)
|
||||||
|
li r3,DebugDebug@l
|
||||||
|
mtspr SPRN_IVOR15,r3
|
||||||
|
li r3,SPEUnavailable@l
|
||||||
|
mtspr SPRN_IVOR32,r3
|
||||||
|
li r3,SPEFloatingPointData@l
|
||||||
|
mtspr SPRN_IVOR33,r3
|
||||||
|
li r3,SPEFloatingPointRound@l
|
||||||
|
mtspr SPRN_IVOR34,r3
|
||||||
|
sync
|
||||||
|
blr
|
||||||
|
|
||||||
|
/* Adjust or setup IVORs for e500v1/v2 */
|
||||||
|
_GLOBAL(__setup_e500_ivors)
|
||||||
|
li r3,DebugCrit@l
|
||||||
|
mtspr SPRN_IVOR15,r3
|
||||||
|
li r3,SPEUnavailable@l
|
||||||
|
mtspr SPRN_IVOR32,r3
|
||||||
|
li r3,SPEFloatingPointData@l
|
||||||
|
mtspr SPRN_IVOR33,r3
|
||||||
|
li r3,SPEFloatingPointRound@l
|
||||||
|
mtspr SPRN_IVOR34,r3
|
||||||
|
li r3,PerformanceMonitor@l
|
||||||
|
mtspr SPRN_IVOR35,r3
|
||||||
|
sync
|
||||||
|
blr
|
||||||
|
|
||||||
|
/* Adjust or setup IVORs for e500mc */
|
||||||
|
_GLOBAL(__setup_e500mc_ivors)
|
||||||
|
li r3,DebugDebug@l
|
||||||
|
mtspr SPRN_IVOR15,r3
|
||||||
|
li r3,PerformanceMonitor@l
|
||||||
|
mtspr SPRN_IVOR35,r3
|
||||||
|
li r3,Doorbell@l
|
||||||
|
mtspr SPRN_IVOR36,r3
|
||||||
|
sync
|
||||||
|
blr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* extern void loadcam_entry(unsigned int index)
|
* extern void loadcam_entry(unsigned int index)
|
||||||
*
|
*
|
||||||
|
|
|
@ -56,10 +56,14 @@
|
||||||
|
|
||||||
extern void loadcam_entry(unsigned int index);
|
extern void loadcam_entry(unsigned int index);
|
||||||
unsigned int tlbcam_index;
|
unsigned int tlbcam_index;
|
||||||
static unsigned long __cam0, __cam1, __cam2;
|
static unsigned long cam[CONFIG_LOWMEM_CAM_NUM];
|
||||||
|
|
||||||
#define NUM_TLBCAMS (16)
|
#define NUM_TLBCAMS (16)
|
||||||
|
|
||||||
|
#if defined(CONFIG_LOWMEM_CAM_NUM_BOOL) && (CONFIG_LOWMEM_CAM_NUM >= NUM_TLBCAMS)
|
||||||
|
#error "LOWMEM_CAM_NUM must be less than NUM_TLBCAMS"
|
||||||
|
#endif
|
||||||
|
|
||||||
struct tlbcam TLBCAM[NUM_TLBCAMS];
|
struct tlbcam TLBCAM[NUM_TLBCAMS];
|
||||||
|
|
||||||
struct tlbcamrange {
|
struct tlbcamrange {
|
||||||
|
@ -152,19 +156,19 @@ void invalidate_tlbcam_entry(int index)
|
||||||
loadcam_entry(index);
|
loadcam_entry(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
|
unsigned long __init mmu_mapin_ram(void)
|
||||||
unsigned long cam2)
|
|
||||||
{
|
{
|
||||||
settlbcam(0, PAGE_OFFSET, memstart_addr, cam0, _PAGE_KERNEL, 0);
|
unsigned long virt = PAGE_OFFSET;
|
||||||
tlbcam_index++;
|
phys_addr_t phys = memstart_addr;
|
||||||
if (cam1) {
|
|
||||||
|
while (cam[tlbcam_index] && tlbcam_index < ARRAY_SIZE(cam)) {
|
||||||
|
settlbcam(tlbcam_index, virt, phys, cam[tlbcam_index], _PAGE_KERNEL, 0);
|
||||||
|
virt += cam[tlbcam_index];
|
||||||
|
phys += cam[tlbcam_index];
|
||||||
tlbcam_index++;
|
tlbcam_index++;
|
||||||
settlbcam(1, PAGE_OFFSET+cam0, memstart_addr+cam0, cam1, _PAGE_KERNEL, 0);
|
|
||||||
}
|
|
||||||
if (cam2) {
|
|
||||||
tlbcam_index++;
|
|
||||||
settlbcam(2, PAGE_OFFSET+cam0+cam1, memstart_addr+cam0+cam1, cam2, _PAGE_KERNEL, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return virt - PAGE_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -175,51 +179,46 @@ void __init MMU_init_hw(void)
|
||||||
flush_instruction_cache();
|
flush_instruction_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long __init mmu_mapin_ram(void)
|
|
||||||
{
|
|
||||||
cam_mapin_ram(__cam0, __cam1, __cam2);
|
|
||||||
|
|
||||||
return __cam0 + __cam1 + __cam2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
adjust_total_lowmem(void)
|
adjust_total_lowmem(void)
|
||||||
{
|
{
|
||||||
phys_addr_t max_lowmem_size = __max_low_memory;
|
|
||||||
phys_addr_t cam_max_size = 0x10000000;
|
|
||||||
phys_addr_t ram;
|
phys_addr_t ram;
|
||||||
|
unsigned int max_cam = (mfspr(SPRN_TLB1CFG) >> 16) & 0xff;
|
||||||
|
char buf[ARRAY_SIZE(cam) * 5 + 1], *p = buf;
|
||||||
|
int i;
|
||||||
|
unsigned long virt = PAGE_OFFSET & 0xffffffffUL;
|
||||||
|
unsigned long phys = memstart_addr & 0xffffffffUL;
|
||||||
|
|
||||||
/* adjust CAM size to max_lowmem_size */
|
/* Convert (4^max) kB to (2^max) bytes */
|
||||||
if (max_lowmem_size < cam_max_size)
|
max_cam = max_cam * 2 + 10;
|
||||||
cam_max_size = max_lowmem_size;
|
|
||||||
|
|
||||||
/* adjust lowmem size to max_lowmem_size */
|
/* adjust lowmem size to __max_low_memory */
|
||||||
ram = min(max_lowmem_size, total_lowmem);
|
ram = min((phys_addr_t)__max_low_memory, (phys_addr_t)total_lowmem);
|
||||||
|
|
||||||
/* Calculate CAM values */
|
/* Calculate CAM values */
|
||||||
__cam0 = 1UL << 2 * (__ilog2(ram) / 2);
|
__max_low_memory = 0;
|
||||||
if (__cam0 > cam_max_size)
|
for (i = 0; ram && i < ARRAY_SIZE(cam); i++) {
|
||||||
__cam0 = cam_max_size;
|
unsigned int camsize = __ilog2(ram) & ~1U;
|
||||||
ram -= __cam0;
|
unsigned int align = __ffs(virt | phys) & ~1U;
|
||||||
if (ram) {
|
|
||||||
__cam1 = 1UL << 2 * (__ilog2(ram) / 2);
|
|
||||||
if (__cam1 > cam_max_size)
|
|
||||||
__cam1 = cam_max_size;
|
|
||||||
ram -= __cam1;
|
|
||||||
}
|
|
||||||
if (ram) {
|
|
||||||
__cam2 = 1UL << 2 * (__ilog2(ram) / 2);
|
|
||||||
if (__cam2 > cam_max_size)
|
|
||||||
__cam2 = cam_max_size;
|
|
||||||
ram -= __cam2;
|
|
||||||
}
|
|
||||||
|
|
||||||
printk(KERN_INFO "Memory CAM mapping: CAM0=%ldMb, CAM1=%ldMb,"
|
if (camsize > align)
|
||||||
" CAM2=%ldMb residual: %ldMb\n",
|
camsize = align;
|
||||||
__cam0 >> 20, __cam1 >> 20, __cam2 >> 20,
|
if (camsize > max_cam)
|
||||||
(long int)((total_lowmem - __cam0 - __cam1 - __cam2)
|
camsize = max_cam;
|
||||||
>> 20));
|
|
||||||
__max_low_memory = __cam0 + __cam1 + __cam2;
|
cam[i] = 1UL << camsize;
|
||||||
|
ram -= cam[i];
|
||||||
|
__max_low_memory += cam[i];
|
||||||
|
virt += cam[i];
|
||||||
|
phys += cam[i];
|
||||||
|
|
||||||
|
p += sprintf(p, "%lu/", cam[i] >> 20);
|
||||||
|
}
|
||||||
|
for (; i < ARRAY_SIZE(cam); i++)
|
||||||
|
p += sprintf(p, "0/");
|
||||||
|
p[-1] = '\0';
|
||||||
|
|
||||||
|
pr_info("Memory CAM mapping: %s Mb, residual: %ldMb\n", buf,
|
||||||
|
(total_lowmem - __max_low_memory) >> 20);
|
||||||
__initial_memory_limit_addr = memstart_addr + __max_low_memory;
|
__initial_memory_limit_addr = memstart_addr + __max_low_memory;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@ static void __init mpc831x_rdb_setup_arch(void)
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
|
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
|
||||||
mpc83xx_add_bridge(np);
|
mpc83xx_add_bridge(np);
|
||||||
|
for_each_compatible_node(np, "pci", "fsl,mpc8314-pcie")
|
||||||
|
mpc83xx_add_bridge(np);
|
||||||
#endif
|
#endif
|
||||||
mpc831x_usb_cfg();
|
mpc831x_usb_cfg();
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,14 +84,10 @@ static void __init mpc837x_mds_setup_arch(void)
|
||||||
ppc_md.progress("mpc837x_mds_setup_arch()", 0);
|
ppc_md.progress("mpc837x_mds_setup_arch()", 0);
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci") {
|
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
|
||||||
if (!of_device_is_available(np)) {
|
mpc83xx_add_bridge(np);
|
||||||
pr_warning("%s: disabled by the firmware.\n",
|
for_each_compatible_node(np, "pci", "fsl,mpc8314-pcie")
|
||||||
np->full_name);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
mpc83xx_add_bridge(np);
|
mpc83xx_add_bridge(np);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
mpc837xmds_usb_cfg();
|
mpc837xmds_usb_cfg();
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@ static void __init mpc837x_rdb_setup_arch(void)
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
|
for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
|
||||||
mpc83xx_add_bridge(np);
|
mpc83xx_add_bridge(np);
|
||||||
|
for_each_compatible_node(np, "pci", "fsl,mpc8314-pcie")
|
||||||
|
mpc83xx_add_bridge(np);
|
||||||
#endif
|
#endif
|
||||||
mpc837x_usb_cfg();
|
mpc837x_usb_cfg();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,14 @@ config MPC8610_HPCD
|
||||||
help
|
help
|
||||||
This option enables support for the MPC8610 HPCD board.
|
This option enables support for the MPC8610 HPCD board.
|
||||||
|
|
||||||
|
config GEF_SBC310
|
||||||
|
bool "GE Fanuc SBC310"
|
||||||
|
select DEFAULT_UIMAGE
|
||||||
|
select GENERIC_GPIO
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
help
|
||||||
|
This option enables support for GE Fanuc's SBC310.
|
||||||
|
|
||||||
config GEF_SBC610
|
config GEF_SBC610
|
||||||
bool "GE Fanuc SBC610"
|
bool "GE Fanuc SBC610"
|
||||||
select DEFAULT_UIMAGE
|
select DEFAULT_UIMAGE
|
||||||
|
@ -48,7 +56,7 @@ config MPC8641
|
||||||
select FSL_PCI if PCI
|
select FSL_PCI if PCI
|
||||||
select PPC_UDBG_16550
|
select PPC_UDBG_16550
|
||||||
select MPIC
|
select MPIC
|
||||||
default y if MPC8641_HPCN || SBC8641D || GEF_SBC610
|
default y if MPC8641_HPCN || SBC8641D || GEF_SBC610 || GEF_SBC310
|
||||||
|
|
||||||
config MPC8610
|
config MPC8610
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -9,3 +9,4 @@ obj-$(CONFIG_SBC8641D) += sbc8641d.o
|
||||||
obj-$(CONFIG_MPC8610_HPCD) += mpc8610_hpcd.o
|
obj-$(CONFIG_MPC8610_HPCD) += mpc8610_hpcd.o
|
||||||
gef-gpio-$(CONFIG_GPIOLIB) += gef_gpio.o
|
gef-gpio-$(CONFIG_GPIOLIB) += gef_gpio.o
|
||||||
obj-$(CONFIG_GEF_SBC610) += gef_sbc610.o gef_pic.o $(gef-gpio-y)
|
obj-$(CONFIG_GEF_SBC610) += gef_sbc610.o gef_pic.o $(gef-gpio-y)
|
||||||
|
obj-$(CONFIG_GEF_SBC310) += gef_sbc310.o gef_pic.o $(gef-gpio-y)
|
||||||
|
|
|
@ -37,8 +37,6 @@
|
||||||
#define GEF_GPIO_OVERRUN 0x1C
|
#define GEF_GPIO_OVERRUN 0x1C
|
||||||
#define GEF_GPIO_MODE 0x20
|
#define GEF_GPIO_MODE 0x20
|
||||||
|
|
||||||
#define NUM_GPIO 19
|
|
||||||
|
|
||||||
static void _gef_gpio_set(void __iomem *reg, unsigned int offset, int value)
|
static void _gef_gpio_set(void __iomem *reg, unsigned int offset, int value)
|
||||||
{
|
{
|
||||||
unsigned int data;
|
unsigned int data;
|
||||||
|
@ -103,10 +101,10 @@ static void gef_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
|
||||||
static int __init gef_gpio_init(void)
|
static int __init gef_gpio_init(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
int retval;
|
||||||
|
struct of_mm_gpio_chip *gef_gpio_chip;
|
||||||
|
|
||||||
for_each_compatible_node(np, NULL, "gef,sbc610-gpio") {
|
for_each_compatible_node(np, NULL, "gef,sbc610-gpio") {
|
||||||
int retval;
|
|
||||||
struct of_mm_gpio_chip *gef_gpio_chip;
|
|
||||||
|
|
||||||
pr_debug("%s: Initialising GEF GPIO\n", np->full_name);
|
pr_debug("%s: Initialising GEF GPIO\n", np->full_name);
|
||||||
|
|
||||||
|
@ -120,7 +118,35 @@ static int __init gef_gpio_init(void)
|
||||||
|
|
||||||
/* Setup pointers to chip functions */
|
/* Setup pointers to chip functions */
|
||||||
gef_gpio_chip->of_gc.gpio_cells = 2;
|
gef_gpio_chip->of_gc.gpio_cells = 2;
|
||||||
gef_gpio_chip->of_gc.gc.ngpio = NUM_GPIO;
|
gef_gpio_chip->of_gc.gc.ngpio = 19;
|
||||||
|
gef_gpio_chip->of_gc.gc.direction_input = gef_gpio_dir_in;
|
||||||
|
gef_gpio_chip->of_gc.gc.direction_output = gef_gpio_dir_out;
|
||||||
|
gef_gpio_chip->of_gc.gc.get = gef_gpio_get;
|
||||||
|
gef_gpio_chip->of_gc.gc.set = gef_gpio_set;
|
||||||
|
|
||||||
|
/* This function adds a memory mapped GPIO chip */
|
||||||
|
retval = of_mm_gpiochip_add(np, gef_gpio_chip);
|
||||||
|
if (retval) {
|
||||||
|
kfree(gef_gpio_chip);
|
||||||
|
pr_err("%s: Unable to add GPIO\n", np->full_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for_each_compatible_node(np, NULL, "gef,sbc310-gpio") {
|
||||||
|
|
||||||
|
pr_debug("%s: Initialising GEF GPIO\n", np->full_name);
|
||||||
|
|
||||||
|
/* Allocate chip structure */
|
||||||
|
gef_gpio_chip = kzalloc(sizeof(*gef_gpio_chip), GFP_KERNEL);
|
||||||
|
if (!gef_gpio_chip) {
|
||||||
|
pr_err("%s: Unable to allocate structure\n",
|
||||||
|
np->full_name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setup pointers to chip functions */
|
||||||
|
gef_gpio_chip->of_gc.gpio_cells = 2;
|
||||||
|
gef_gpio_chip->of_gc.gc.ngpio = 6;
|
||||||
gef_gpio_chip->of_gc.gc.direction_input = gef_gpio_dir_in;
|
gef_gpio_chip->of_gc.gc.direction_input = gef_gpio_dir_in;
|
||||||
gef_gpio_chip->of_gc.gc.direction_output = gef_gpio_dir_out;
|
gef_gpio_chip->of_gc.gc.direction_output = gef_gpio_dir_out;
|
||||||
gef_gpio_chip->of_gc.gc.get = gef_gpio_get;
|
gef_gpio_chip->of_gc.gc.get = gef_gpio_get;
|
||||||
|
|
230
arch/powerpc/platforms/86xx/gef_sbc310.c
Normal file
230
arch/powerpc/platforms/86xx/gef_sbc310.c
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
/*
|
||||||
|
* GE Fanuc SBC310 board support
|
||||||
|
*
|
||||||
|
* Author: Martyn Welch <martyn.welch@gefanuc.com>
|
||||||
|
*
|
||||||
|
* Copyright 2008 GE Fanuc Intelligent Platforms Embedded Systems, Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Based on: mpc86xx_hpcn.c (MPC86xx HPCN board specific routines)
|
||||||
|
* Copyright 2006 Freescale Semiconductor Inc.
|
||||||
|
*
|
||||||
|
* NEC fixup adapted from arch/mips/pci/fixup-lm2e.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/stddef.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/kdev_t.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
|
||||||
|
#include <asm/system.h>
|
||||||
|
#include <asm/time.h>
|
||||||
|
#include <asm/machdep.h>
|
||||||
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/mpc86xx.h>
|
||||||
|
#include <asm/prom.h>
|
||||||
|
#include <mm/mmu_decl.h>
|
||||||
|
#include <asm/udbg.h>
|
||||||
|
|
||||||
|
#include <asm/mpic.h>
|
||||||
|
|
||||||
|
#include <sysdev/fsl_pci.h>
|
||||||
|
#include <sysdev/fsl_soc.h>
|
||||||
|
|
||||||
|
#include "mpc86xx.h"
|
||||||
|
#include "gef_pic.h"
|
||||||
|
|
||||||
|
#undef DEBUG
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define DBG (fmt...) do { printk(KERN_ERR "SBC310: " fmt); } while (0)
|
||||||
|
#else
|
||||||
|
#define DBG (fmt...) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void __iomem *sbc310_regs;
|
||||||
|
|
||||||
|
static void __init gef_sbc310_init_irq(void)
|
||||||
|
{
|
||||||
|
struct device_node *cascade_node = NULL;
|
||||||
|
|
||||||
|
mpc86xx_init_irq();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is a simple interrupt handler in the main FPGA, this needs
|
||||||
|
* to be cascaded into the MPIC
|
||||||
|
*/
|
||||||
|
cascade_node = of_find_compatible_node(NULL, NULL, "gef,fpga-pic");
|
||||||
|
if (!cascade_node) {
|
||||||
|
printk(KERN_WARNING "SBC310: No FPGA PIC\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gef_pic_init(cascade_node);
|
||||||
|
of_node_put(cascade_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init gef_sbc310_setup_arch(void)
|
||||||
|
{
|
||||||
|
struct device_node *regs;
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
|
struct device_node *np;
|
||||||
|
|
||||||
|
for_each_compatible_node(np, "pci", "fsl,mpc8641-pcie") {
|
||||||
|
fsl_add_bridge(np, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printk(KERN_INFO "GE Fanuc Intelligent Platforms SBC310 6U VPX SBC\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
mpc86xx_smp_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Remap basic board registers */
|
||||||
|
regs = of_find_compatible_node(NULL, NULL, "gef,fpga-regs");
|
||||||
|
if (regs) {
|
||||||
|
sbc310_regs = of_iomap(regs, 0);
|
||||||
|
if (sbc310_regs == NULL)
|
||||||
|
printk(KERN_WARNING "Unable to map board registers\n");
|
||||||
|
of_node_put(regs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the PCB revision */
|
||||||
|
static unsigned int gef_sbc310_get_board_id(void)
|
||||||
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = ioread32(sbc310_regs);
|
||||||
|
return reg & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the PCB revision */
|
||||||
|
static unsigned int gef_sbc310_get_pcb_rev(void)
|
||||||
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = ioread32(sbc310_regs);
|
||||||
|
return (reg >> 8) & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the board (software) revision */
|
||||||
|
static unsigned int gef_sbc310_get_board_rev(void)
|
||||||
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = ioread32(sbc310_regs);
|
||||||
|
return (reg >> 16) & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the FPGA revision */
|
||||||
|
static unsigned int gef_sbc310_get_fpga_rev(void)
|
||||||
|
{
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = ioread32(sbc310_regs);
|
||||||
|
return (reg >> 24) & 0xf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gef_sbc310_show_cpuinfo(struct seq_file *m)
|
||||||
|
{
|
||||||
|
uint svid = mfspr(SPRN_SVR);
|
||||||
|
|
||||||
|
seq_printf(m, "Vendor\t\t: GE Fanuc Intelligent Platforms\n");
|
||||||
|
|
||||||
|
seq_printf(m, "Board ID\t: 0x%2.2x\n", gef_sbc310_get_board_id());
|
||||||
|
seq_printf(m, "Revision\t: %u%c\n", gef_sbc310_get_pcb_rev(),
|
||||||
|
('A' + gef_sbc310_get_board_rev() - 1));
|
||||||
|
seq_printf(m, "FPGA Revision\t: %u\n", gef_sbc310_get_fpga_rev());
|
||||||
|
|
||||||
|
seq_printf(m, "SVR\t\t: 0x%x\n", svid);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init gef_sbc310_nec_fixup(struct pci_dev *pdev)
|
||||||
|
{
|
||||||
|
unsigned int val;
|
||||||
|
|
||||||
|
printk(KERN_INFO "Running NEC uPD720101 Fixup\n");
|
||||||
|
|
||||||
|
/* Ensure only ports 1 & 2 are enabled */
|
||||||
|
pci_read_config_dword(pdev, 0xe0, &val);
|
||||||
|
pci_write_config_dword(pdev, 0xe0, (val & ~7) | 0x2);
|
||||||
|
|
||||||
|
/* System clock is 48-MHz Oscillator and EHCI Enabled. */
|
||||||
|
pci_write_config_dword(pdev, 0xe4, 1 << 5);
|
||||||
|
}
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB,
|
||||||
|
gef_sbc310_nec_fixup);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called very early, device-tree isn't unflattened
|
||||||
|
*
|
||||||
|
* This function is called to determine whether the BSP is compatible with the
|
||||||
|
* supplied device-tree, which is assumed to be the correct one for the actual
|
||||||
|
* board. It is expected thati, in the future, a kernel may support multiple
|
||||||
|
* boards.
|
||||||
|
*/
|
||||||
|
static int __init gef_sbc310_probe(void)
|
||||||
|
{
|
||||||
|
unsigned long root = of_get_flat_dt_root();
|
||||||
|
|
||||||
|
if (of_flat_dt_is_compatible(root, "gef,sbc310"))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long __init mpc86xx_time_init(void)
|
||||||
|
{
|
||||||
|
unsigned int temp;
|
||||||
|
|
||||||
|
/* Set the time base to zero */
|
||||||
|
mtspr(SPRN_TBWL, 0);
|
||||||
|
mtspr(SPRN_TBWU, 0);
|
||||||
|
|
||||||
|
temp = mfspr(SPRN_HID0);
|
||||||
|
temp |= HID0_TBEN;
|
||||||
|
mtspr(SPRN_HID0, temp);
|
||||||
|
asm volatile("isync");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __initdata struct of_device_id of_bus_ids[] = {
|
||||||
|
{ .compatible = "simple-bus", },
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init declare_of_platform_devices(void)
|
||||||
|
{
|
||||||
|
printk(KERN_DEBUG "Probe platform devices\n");
|
||||||
|
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
machine_device_initcall(gef_sbc310, declare_of_platform_devices);
|
||||||
|
|
||||||
|
define_machine(gef_sbc310) {
|
||||||
|
.name = "GE Fanuc SBC310",
|
||||||
|
.probe = gef_sbc310_probe,
|
||||||
|
.setup_arch = gef_sbc310_setup_arch,
|
||||||
|
.init_IRQ = gef_sbc310_init_irq,
|
||||||
|
.show_cpuinfo = gef_sbc310_show_cpuinfo,
|
||||||
|
.get_irq = mpic_get_irq,
|
||||||
|
.restart = fsl_rstcr_restart,
|
||||||
|
.time_init = mpc86xx_time_init,
|
||||||
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
|
.progress = udbg_progress,
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
|
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
|
||||||
|
#endif
|
||||||
|
};
|
|
@ -129,7 +129,8 @@ void __cpm2_setbrg(uint brg, uint rate, uint clk, int div16, int src)
|
||||||
brg -= 4;
|
brg -= 4;
|
||||||
}
|
}
|
||||||
bp += brg;
|
bp += brg;
|
||||||
val = (((clk / rate) - 1) << 1) | CPM_BRG_EN | src;
|
/* Round the clock divider to the nearest integer. */
|
||||||
|
val = (((clk * 2 / rate) - 1) & ~1) | CPM_BRG_EN | src;
|
||||||
if (div16)
|
if (div16)
|
||||||
val |= CPM_BRG_DIV16;
|
val |= CPM_BRG_DIV16;
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
/*
|
/*
|
||||||
* MPC83xx/85xx/86xx PCI/PCIE support routing.
|
* MPC83xx/85xx/86xx PCI/PCIE support routing.
|
||||||
*
|
*
|
||||||
* Copyright 2007,2008 Freescale Semiconductor, Inc
|
* Copyright 2007-2009 Freescale Semiconductor, Inc.
|
||||||
|
* Copyright 2008-2009 MontaVista Software, Inc.
|
||||||
*
|
*
|
||||||
* Initial author: Xianghua Xiao <x.xiao@freescale.com>
|
* Initial author: Xianghua Xiao <x.xiao@freescale.com>
|
||||||
* Recode: ZHANG WEI <wei.zhang@freescale.com>
|
* Recode: ZHANG WEI <wei.zhang@freescale.com>
|
||||||
* Rewrite the routing for Frescale PCI and PCI Express
|
* Rewrite the routing for Frescale PCI and PCI Express
|
||||||
* Roy Zang <tie-fei.zang@freescale.com>
|
* Roy Zang <tie-fei.zang@freescale.com>
|
||||||
|
* MPC83xx PCI-Express support:
|
||||||
|
* Tony Li <tony.li@freescale.com>
|
||||||
|
* Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
@ -27,6 +31,29 @@
|
||||||
#include <sysdev/fsl_soc.h>
|
#include <sysdev/fsl_soc.h>
|
||||||
#include <sysdev/fsl_pci.h>
|
#include <sysdev/fsl_pci.h>
|
||||||
|
|
||||||
|
static int fsl_pcie_bus_fixup;
|
||||||
|
|
||||||
|
static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
/* if we aren't a PCIe don't bother */
|
||||||
|
if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
||||||
|
fsl_pcie_bus_fixup = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init fsl_pcie_check_link(struct pci_controller *hose)
|
||||||
|
{
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
|
||||||
|
if (val < PCIE_LTSSM_L0)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx)
|
#if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx)
|
||||||
static int __init setup_one_atmu(struct ccsr_pci __iomem *pci,
|
static int __init setup_one_atmu(struct ccsr_pci __iomem *pci,
|
||||||
unsigned int index, const struct resource *res,
|
unsigned int index, const struct resource *res,
|
||||||
|
@ -159,28 +186,6 @@ static void __init setup_pci_pcsrbar(struct pci_controller *hose)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fsl_pcie_bus_fixup;
|
|
||||||
|
|
||||||
static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
|
|
||||||
{
|
|
||||||
/* if we aren't a PCIe don't bother */
|
|
||||||
if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
|
|
||||||
return ;
|
|
||||||
|
|
||||||
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
|
||||||
fsl_pcie_bus_fixup = 1;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init fsl_pcie_check_link(struct pci_controller *hose)
|
|
||||||
{
|
|
||||||
u32 val;
|
|
||||||
early_read_config_dword(hose, 0, 0, PCIE_LTSSM, &val);
|
|
||||||
if (val < PCIE_LTSSM_L0)
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fsl_pcibios_fixup_bus(struct pci_bus *bus)
|
void fsl_pcibios_fixup_bus(struct pci_bus *bus)
|
||||||
{
|
{
|
||||||
struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
|
struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
|
||||||
|
@ -294,8 +299,184 @@ DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header);
|
||||||
#endif /* CONFIG_PPC_85xx || CONFIG_PPC_86xx */
|
#endif /* CONFIG_PPC_85xx || CONFIG_PPC_86xx */
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
|
#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314E, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315E, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377E, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378E, quirk_fsl_pcie_header);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378, quirk_fsl_pcie_header);
|
||||||
|
|
||||||
|
struct mpc83xx_pcie_priv {
|
||||||
|
void __iomem *cfg_type0;
|
||||||
|
void __iomem *cfg_type1;
|
||||||
|
u32 dev_base;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With the convention of u-boot, the PCIE outbound window 0 serves
|
||||||
|
* as configuration transactions outbound.
|
||||||
|
*/
|
||||||
|
#define PEX_OUTWIN0_BAR 0xCA4
|
||||||
|
#define PEX_OUTWIN0_TAL 0xCA8
|
||||||
|
#define PEX_OUTWIN0_TAH 0xCAC
|
||||||
|
|
||||||
|
static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn)
|
||||||
|
{
|
||||||
|
struct pci_controller *hose = bus->sysdata;
|
||||||
|
|
||||||
|
if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK)
|
||||||
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
/*
|
||||||
|
* Workaround for the HW bug: for Type 0 configure transactions the
|
||||||
|
* PCI-E controller does not check the device number bits and just
|
||||||
|
* assumes that the device number bits are 0.
|
||||||
|
*/
|
||||||
|
if (bus->number == hose->first_busno ||
|
||||||
|
bus->primary == hose->first_busno) {
|
||||||
|
if (devfn & 0xf8)
|
||||||
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppc_md.pci_exclude_device) {
|
||||||
|
if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
|
||||||
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PCIBIOS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus,
|
||||||
|
unsigned int devfn, int offset)
|
||||||
|
{
|
||||||
|
struct pci_controller *hose = bus->sysdata;
|
||||||
|
struct mpc83xx_pcie_priv *pcie = hose->dn->data;
|
||||||
|
u8 bus_no = bus->number - hose->first_busno;
|
||||||
|
u32 dev_base = bus_no << 24 | devfn << 16;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mpc83xx_pcie_exclude_device(bus, devfn);
|
||||||
|
if (ret)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
offset &= 0xfff;
|
||||||
|
|
||||||
|
/* Type 0 */
|
||||||
|
if (bus->number == hose->first_busno)
|
||||||
|
return pcie->cfg_type0 + offset;
|
||||||
|
|
||||||
|
if (pcie->dev_base == dev_base)
|
||||||
|
goto mapped;
|
||||||
|
|
||||||
|
out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, dev_base);
|
||||||
|
|
||||||
|
pcie->dev_base = dev_base;
|
||||||
|
mapped:
|
||||||
|
return pcie->cfg_type1 + offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mpc83xx_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
|
int offset, int len, u32 *val)
|
||||||
|
{
|
||||||
|
void __iomem *cfg_addr;
|
||||||
|
|
||||||
|
cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
|
||||||
|
if (!cfg_addr)
|
||||||
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
|
||||||
|
switch (len) {
|
||||||
|
case 1:
|
||||||
|
*val = in_8(cfg_addr);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
*val = in_le16(cfg_addr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*val = in_le32(cfg_addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PCIBIOS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mpc83xx_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
|
||||||
|
int offset, int len, u32 val)
|
||||||
|
{
|
||||||
|
void __iomem *cfg_addr;
|
||||||
|
|
||||||
|
cfg_addr = mpc83xx_pcie_remap_cfg(bus, devfn, offset);
|
||||||
|
if (!cfg_addr)
|
||||||
|
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||||
|
|
||||||
|
switch (len) {
|
||||||
|
case 1:
|
||||||
|
out_8(cfg_addr, val);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
out_le16(cfg_addr, val);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
out_le32(cfg_addr, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PCIBIOS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct pci_ops mpc83xx_pcie_ops = {
|
||||||
|
.read = mpc83xx_pcie_read_config,
|
||||||
|
.write = mpc83xx_pcie_write_config,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init mpc83xx_pcie_setup(struct pci_controller *hose,
|
||||||
|
struct resource *reg)
|
||||||
|
{
|
||||||
|
struct mpc83xx_pcie_priv *pcie;
|
||||||
|
u32 cfg_bar;
|
||||||
|
int ret = -ENOMEM;
|
||||||
|
|
||||||
|
pcie = zalloc_maybe_bootmem(sizeof(*pcie), GFP_KERNEL);
|
||||||
|
if (!pcie)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
pcie->cfg_type0 = ioremap(reg->start, resource_size(reg));
|
||||||
|
if (!pcie->cfg_type0)
|
||||||
|
goto err0;
|
||||||
|
|
||||||
|
cfg_bar = in_le32(pcie->cfg_type0 + PEX_OUTWIN0_BAR);
|
||||||
|
if (!cfg_bar) {
|
||||||
|
/* PCI-E isn't configured. */
|
||||||
|
ret = -ENODEV;
|
||||||
|
goto err1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pcie->cfg_type1 = ioremap(cfg_bar, 0x1000);
|
||||||
|
if (!pcie->cfg_type1)
|
||||||
|
goto err1;
|
||||||
|
|
||||||
|
WARN_ON(hose->dn->data);
|
||||||
|
hose->dn->data = pcie;
|
||||||
|
hose->ops = &mpc83xx_pcie_ops;
|
||||||
|
|
||||||
|
out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAH, 0);
|
||||||
|
out_le32(pcie->cfg_type0 + PEX_OUTWIN0_TAL, 0);
|
||||||
|
|
||||||
|
if (fsl_pcie_check_link(hose))
|
||||||
|
hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
err1:
|
||||||
|
iounmap(pcie->cfg_type0);
|
||||||
|
err0:
|
||||||
|
kfree(pcie);
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int __init mpc83xx_add_bridge(struct device_node *dev)
|
int __init mpc83xx_add_bridge(struct device_node *dev)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
int len;
|
int len;
|
||||||
struct pci_controller *hose;
|
struct pci_controller *hose;
|
||||||
struct resource rsrc_reg;
|
struct resource rsrc_reg;
|
||||||
|
@ -303,6 +484,11 @@ int __init mpc83xx_add_bridge(struct device_node *dev)
|
||||||
const int *bus_range;
|
const int *bus_range;
|
||||||
int primary;
|
int primary;
|
||||||
|
|
||||||
|
if (!of_device_is_available(dev)) {
|
||||||
|
pr_warning("%s: disabled by the firmware.\n",
|
||||||
|
dev->full_name);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
pr_debug("Adding PCI host bridge %s\n", dev->full_name);
|
pr_debug("Adding PCI host bridge %s\n", dev->full_name);
|
||||||
|
|
||||||
/* Fetch host bridge registers address */
|
/* Fetch host bridge registers address */
|
||||||
|
@ -350,7 +536,14 @@ int __init mpc83xx_add_bridge(struct device_node *dev)
|
||||||
hose->first_busno = bus_range ? bus_range[0] : 0;
|
hose->first_busno = bus_range ? bus_range[0] : 0;
|
||||||
hose->last_busno = bus_range ? bus_range[1] : 0xff;
|
hose->last_busno = bus_range ? bus_range[1] : 0xff;
|
||||||
|
|
||||||
setup_indirect_pci(hose, rsrc_cfg.start, rsrc_cfg.start + 4, 0);
|
if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {
|
||||||
|
ret = mpc83xx_pcie_setup(hose, &rsrc_reg);
|
||||||
|
if (ret)
|
||||||
|
goto err0;
|
||||||
|
} else {
|
||||||
|
setup_indirect_pci(hose, rsrc_cfg.start,
|
||||||
|
rsrc_cfg.start + 4, 0);
|
||||||
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
|
printk(KERN_INFO "Found FSL PCI host bridge at 0x%016llx. "
|
||||||
"Firmware bus number: %d->%d\n",
|
"Firmware bus number: %d->%d\n",
|
||||||
|
@ -365,5 +558,8 @@ int __init mpc83xx_add_bridge(struct device_node *dev)
|
||||||
pci_process_bridge_OF_ranges(hose, dev, primary);
|
pci_process_bridge_OF_ranges(hose, dev, primary);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
err0:
|
||||||
|
pcibios_free_controller(hose);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PPC_83xx */
|
#endif /* CONFIG_PPC_83xx */
|
||||||
|
|
|
@ -772,7 +772,7 @@ config TXX9_WDT
|
||||||
|
|
||||||
config GEF_WDT
|
config GEF_WDT
|
||||||
tristate "GE Fanuc Watchdog Timer"
|
tristate "GE Fanuc Watchdog Timer"
|
||||||
depends on GEF_SBC610
|
depends on GEF_SBC610 || GEF_SBC310
|
||||||
---help---
|
---help---
|
||||||
Watchdog timer found in a number of GE Fanuc single board computers.
|
Watchdog timer found in a number of GE Fanuc single board computers.
|
||||||
|
|
||||||
|
|
|
@ -2217,6 +2217,14 @@
|
||||||
#define PCI_DEVICE_ID_TDI_EHCI 0x0101
|
#define PCI_DEVICE_ID_TDI_EHCI 0x0101
|
||||||
|
|
||||||
#define PCI_VENDOR_ID_FREESCALE 0x1957
|
#define PCI_VENDOR_ID_FREESCALE 0x1957
|
||||||
|
#define PCI_DEVICE_ID_MPC8315E 0x00b4
|
||||||
|
#define PCI_DEVICE_ID_MPC8315 0x00b5
|
||||||
|
#define PCI_DEVICE_ID_MPC8314E 0x00b6
|
||||||
|
#define PCI_DEVICE_ID_MPC8314 0x00b7
|
||||||
|
#define PCI_DEVICE_ID_MPC8378E 0x00c4
|
||||||
|
#define PCI_DEVICE_ID_MPC8378 0x00c5
|
||||||
|
#define PCI_DEVICE_ID_MPC8377E 0x00c6
|
||||||
|
#define PCI_DEVICE_ID_MPC8377 0x00c7
|
||||||
#define PCI_DEVICE_ID_MPC8548E 0x0012
|
#define PCI_DEVICE_ID_MPC8548E 0x0012
|
||||||
#define PCI_DEVICE_ID_MPC8548 0x0013
|
#define PCI_DEVICE_ID_MPC8548 0x0013
|
||||||
#define PCI_DEVICE_ID_MPC8543E 0x0014
|
#define PCI_DEVICE_ID_MPC8543E 0x0014
|
||||||
|
|
Loading…
Reference in a new issue