Skip to content
Snippets Groups Projects
Commit b84da9fa authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull MIPS updates from Ralf Baechle:
 "These are the highlists of the main MIPS pull request for 4.4:

   - Add latencytop support
   - Support appended DTBs
   - VDSO support and initially use it for gettimeofday.
   - Drop the .MIPS.abiflags and ELF NOTE sections from vmlinux
   - Support for the 5KE, an internal test core.
   - Switch all MIPS platfroms to libata drivers.
   - Improved support, cleanups for ralink and Lantiq platforms.
   - Support for the new xilfpga platform.
   - A number of DTB improvments for BMIPS.
   - Improved support for CM and CPS.
   - Minor JZ4740 and BCM47xx enhancements"

* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (120 commits)
  MIPS: idle: add case for CPU_5KE
  MIPS: Octeon: Support APPENDED_DTB
  MIPS: vmlinux: create a section for appended DTB
  MIPS: Clean up compat_siginfo_t
  MIPS: Fix PAGE_MASK definition
  MIPS: BMIPS: Enable GZIP ramdisk and timed printks
  MIPS: Add xilfpga defconfig
  MIPS: xilfpga: Add mipsfpga platform code
  MIPS: xilfpga: Add xilfpga device tree files.
  dt-bindings: MIPS: Document xilfpga bindings and boot style
  MIPS: Make MIPS_CMDLINE_DTB default
  MIPS: Make the kernel arguments from dtb available
  MIPS: Use USE_OF as the guard for appended dtb
  MIPS: BCM63XX: Use pr_* instead of printk
  MIPS: Loongson: Cleanup CONFIG_LOONGSON_SUSPEND.
  MIPS: lantiq: Disable xbar fpi burst mode
  MIPS: lantiq: Force the crossbar to big endian
  MIPS: lantiq: Initialize the USB core on boot
  MIPS: lantiq: Return correct value for fpi clock on ar9
  MIPS: ralink: Add missing clock on rt305x
  ...
parents 12b76f3b da342326
No related branches found
No related tags found
No related merge requests found
Showing
with 630 additions and 58 deletions
Imagination University Program MIPSfpga
=======================================
Under the Imagination University Program, a microAptiv UP core has been
released for academic usage.
As we are dealing with a MIPS core instantiated on an FPGA, specifications
are fluid and can be varied in RTL.
This binding document is provided as baseline guidance for the example
project provided by IMG.
The example project runs on the Nexys4DDR board by Digilent powered by
the ARTIX-7 FPGA by Xilinx.
Relevant details about the example project and the Nexys4DDR board:
- microAptiv UP core m14Kc
- 50MHz clock speed
- 128Mbyte DDR RAM at 0x0000_0000
- 8Kbyte RAM at 0x1000_0000
- axi_intc at 0x1020_0000
- axi_uart16550 at 0x1040_0000
- axi_gpio at 0x1060_0000
- axi_i2c at 0x10A0_0000
- custom_gpio at 0x10C0_0000
- axi_ethernetlite at 0x10E0_0000
- 8Kbyte BootRAM at 0x1FC0_0000
Required properties:
--------------------
- compatible: Must include "digilent,nexys4ddr","img,xilfpga".
CPU nodes:
----------
A "cpus" node is required. Required properties:
- #address-cells: Must be 1.
- #size-cells: Must be 0.
A CPU sub-node is also required for at least CPU 0. Required properties:
- device_type: Must be "cpu".
- compatible: Must be "mips,m14Kc".
- reg: Must be <0>.
- clocks: phandle to ext clock for fixed-clock received by MIPS core.
Example:
compatible = "img,xilfpga","digilent,nexys4ddr";
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "mips,m14Kc";
reg = <0>;
clocks = <&ext>;
};
};
ext: ext {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <50000000>;
};
Boot protocol:
--------------
The BootRAM is a writeable "RAM" in FPGA at 0x1FC0_0000.
This is for easy reprogrammibility via JTAG.
The BootRAM initializes the cache and the axi_uart peripheral.
DDR initialization is already handled by a HW IP block.
When the example project bitstream is loaded, the cpu_reset button
needs to be pressed.
The bootram initializes the cache and axi_uart.
Then outputs MIPSFPGA\n\r on the serial port on the Nexys4DDR board.
At this point, the board is ready to load the Linux kernel
vmlinux file via JTAG.
...@@ -17,6 +17,7 @@ obj- := $(platform-) ...@@ -17,6 +17,7 @@ obj- := $(platform-)
obj-y += kernel/ obj-y += kernel/
obj-y += mm/ obj-y += mm/
obj-y += net/ obj-y += net/
obj-y += vdso/
ifdef CONFIG_KVM ifdef CONFIG_KVM
obj-y += kvm/ obj-y += kvm/
......
...@@ -33,6 +33,7 @@ platforms += sibyte ...@@ -33,6 +33,7 @@ platforms += sibyte
platforms += sni platforms += sni
platforms += txx9 platforms += txx9
platforms += vr41xx platforms += vr41xx
platforms += xilfpga
# include the platform specific files # include the platform specific files
include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms)) include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms))
...@@ -5,6 +5,7 @@ config MIPS ...@@ -5,6 +5,7 @@ config MIPS
select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_PARPORT
select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_MIGHT_HAVE_PC_SERIO
select ARCH_USE_CMPXCHG_LOCKREF if 64BIT select ARCH_USE_CMPXCHG_LOCKREF if 64BIT
select ARCH_USE_BUILTIN_BSWAP
select HAVE_CONTEXT_TRACKING select HAVE_CONTEXT_TRACKING
select HAVE_GENERIC_DMA_COHERENT select HAVE_GENERIC_DMA_COHERENT
select HAVE_IDE select HAVE_IDE
...@@ -60,6 +61,8 @@ config MIPS ...@@ -60,6 +61,8 @@ config MIPS
select SYSCTL_EXCEPTION_TRACE select SYSCTL_EXCEPTION_TRACE
select HAVE_VIRT_CPU_ACCOUNTING_GEN select HAVE_VIRT_CPU_ACCOUNTING_GEN
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING
select GENERIC_TIME_VSYSCALL
select ARCH_CLOCKSOURCE_DATA
menu "Machine selection" menu "Machine selection"
...@@ -401,6 +404,28 @@ config MACH_PISTACHIO ...@@ -401,6 +404,28 @@ config MACH_PISTACHIO
help help
This enables support for the IMG Pistachio SoC platform. This enables support for the IMG Pistachio SoC platform.
config MACH_XILFPGA
bool "MIPSfpga Xilinx based boards"
select ARCH_REQUIRE_GPIOLIB
select BOOT_ELF32
select BOOT_RAW
select BUILTIN_DTB
select CEVT_R4K
select COMMON_CLK
select CSRC_R4K
select IRQ_MIPS_CPU
select LIBFDT
select MIPS_CPU_SCACHE
select SYS_HAS_EARLY_PRINTK
select SYS_HAS_CPU_MIPS32_R2
select SYS_SUPPORTS_32BIT_KERNEL
select SYS_SUPPORTS_LITTLE_ENDIAN
select SYS_SUPPORTS_ZBOOT_UART16550
select USE_OF
select USE_GENERIC_EARLY_PRINTK_8250
help
This enables support for the IMG University Program MIPSfpga platform.
config MIPS_MALTA config MIPS_MALTA
bool "MIPS Malta board" bool "MIPS Malta board"
select ARCH_MAY_HAVE_PC_FDC select ARCH_MAY_HAVE_PC_FDC
...@@ -424,6 +449,7 @@ config MIPS_MALTA ...@@ -424,6 +449,7 @@ config MIPS_MALTA
select MIPS_L1_CACHE_SHIFT_6 select MIPS_L1_CACHE_SHIFT_6
select PCI_GT64XXX_PCI0 select PCI_GT64XXX_PCI0
select MIPS_MSC select MIPS_MSC
select SMP_UP if SMP
select SWAP_IO_SPACE select SWAP_IO_SPACE
select SYS_HAS_CPU_MIPS32_R1 select SYS_HAS_CPU_MIPS32_R1
select SYS_HAS_CPU_MIPS32_R2 select SYS_HAS_CPU_MIPS32_R2
...@@ -449,6 +475,8 @@ config MIPS_MALTA ...@@ -449,6 +475,8 @@ config MIPS_MALTA
select SYS_SUPPORTS_ZBOOT select SYS_SUPPORTS_ZBOOT
select USE_OF select USE_OF
select ZONE_DMA32 if 64BIT select ZONE_DMA32 if 64BIT
select BUILTIN_DTB
select LIBFDT
help help
This enables support for the MIPS Technologies Malta evaluation This enables support for the MIPS Technologies Malta evaluation
board. board.
...@@ -964,6 +992,7 @@ source "arch/mips/loongson32/Kconfig" ...@@ -964,6 +992,7 @@ source "arch/mips/loongson32/Kconfig"
source "arch/mips/loongson64/Kconfig" source "arch/mips/loongson64/Kconfig"
source "arch/mips/netlogic/Kconfig" source "arch/mips/netlogic/Kconfig"
source "arch/mips/paravirt/Kconfig" source "arch/mips/paravirt/Kconfig"
source "arch/mips/xilfpga/Kconfig"
endmenu endmenu
...@@ -1036,6 +1065,9 @@ config CSRC_R4K ...@@ -1036,6 +1065,9 @@ config CSRC_R4K
config CSRC_SB1250 config CSRC_SB1250
bool bool
config MIPS_CLOCK_VSYSCALL
def_bool CSRC_R4K || CLKSRC_MIPS_GIC
config GPIO_TXX9 config GPIO_TXX9
select ARCH_REQUIRE_GPIOLIB select ARCH_REQUIRE_GPIOLIB
bool bool
...@@ -2529,6 +2561,9 @@ choice ...@@ -2529,6 +2561,9 @@ choice
help help
Allows the configuration of the timer frequency. Allows the configuration of the timer frequency.
config HZ_24
bool "24 HZ" if SYS_SUPPORTS_24HZ || SYS_SUPPORTS_ARBIT_HZ
config HZ_48 config HZ_48
bool "48 HZ" if SYS_SUPPORTS_48HZ || SYS_SUPPORTS_ARBIT_HZ bool "48 HZ" if SYS_SUPPORTS_48HZ || SYS_SUPPORTS_ARBIT_HZ
...@@ -2552,6 +2587,9 @@ choice ...@@ -2552,6 +2587,9 @@ choice
endchoice endchoice
config SYS_SUPPORTS_24HZ
bool
config SYS_SUPPORTS_48HZ config SYS_SUPPORTS_48HZ
bool bool
...@@ -2575,13 +2613,18 @@ config SYS_SUPPORTS_1024HZ ...@@ -2575,13 +2613,18 @@ config SYS_SUPPORTS_1024HZ
config SYS_SUPPORTS_ARBIT_HZ config SYS_SUPPORTS_ARBIT_HZ
bool bool
default y if !SYS_SUPPORTS_48HZ && !SYS_SUPPORTS_100HZ && \ default y if !SYS_SUPPORTS_24HZ && \
!SYS_SUPPORTS_128HZ && !SYS_SUPPORTS_250HZ && \ !SYS_SUPPORTS_48HZ && \
!SYS_SUPPORTS_256HZ && !SYS_SUPPORTS_1000HZ && \ !SYS_SUPPORTS_100HZ && \
!SYS_SUPPORTS_128HZ && \
!SYS_SUPPORTS_250HZ && \
!SYS_SUPPORTS_256HZ && \
!SYS_SUPPORTS_1000HZ && \
!SYS_SUPPORTS_1024HZ !SYS_SUPPORTS_1024HZ
config HZ config HZ
int int
default 24 if HZ_24
default 48 if HZ_48 default 48 if HZ_48
default 100 if HZ_100 default 100 if HZ_100
default 128 if HZ_128 default 128 if HZ_128
...@@ -2685,7 +2728,7 @@ config BUILTIN_DTB ...@@ -2685,7 +2728,7 @@ config BUILTIN_DTB
bool bool
choice choice
prompt "Kernel appended dtb support" if OF prompt "Kernel appended dtb support" if USE_OF
default MIPS_NO_APPENDED_DTB default MIPS_NO_APPENDED_DTB
config MIPS_NO_APPENDED_DTB config MIPS_NO_APPENDED_DTB
...@@ -2693,6 +2736,20 @@ choice ...@@ -2693,6 +2736,20 @@ choice
help help
Do not enable appended dtb support. Do not enable appended dtb support.
config MIPS_ELF_APPENDED_DTB
bool "vmlinux"
help
With this option, the boot code will look for a device tree binary
DTB) included in the vmlinux ELF section .appended_dtb. By default
it is empty and the DTB can be appended using binutils command
objcopy:
objcopy --update-section .appended_dtb=<filename>.dtb vmlinux
This is meant as a backward compatiblity convenience for those
systems with a bootloader that can't be upgraded to accommodate
the documented boot protocol using a device tree.
config MIPS_RAW_APPENDED_DTB config MIPS_RAW_APPENDED_DTB
bool "vmlinux.bin" bool "vmlinux.bin"
help help
...@@ -2729,6 +2786,25 @@ choice ...@@ -2729,6 +2786,25 @@ choice
if you don't intend to always append a DTB. if you don't intend to always append a DTB.
endchoice endchoice
choice
prompt "Kernel command line type" if !CMDLINE_OVERRIDE
default MIPS_CMDLINE_FROM_DTB if USE_OF && !ATH79 && !MACH_INGENIC && \
!MIPS_MALTA && !MIPS_SEAD3 && \
!CAVIUM_OCTEON_SOC
default MIPS_CMDLINE_FROM_BOOTLOADER
config MIPS_CMDLINE_FROM_DTB
depends on USE_OF
bool "Dtb kernel arguments if available"
config MIPS_CMDLINE_DTB_EXTEND
depends on USE_OF
bool "Extend dtb kernel arguments with bootloader arguments"
config MIPS_CMDLINE_FROM_BOOTLOADER
bool "Bootloader kernel arguments if available"
endchoice
endmenu endmenu
config LOCKDEP_SUPPORT config LOCKDEP_SUPPORT
...@@ -2739,6 +2815,10 @@ config STACKTRACE_SUPPORT ...@@ -2739,6 +2815,10 @@ config STACKTRACE_SUPPORT
bool bool
default y default y
config HAVE_LATENCYTOP_SUPPORT
bool
default y
config PGTABLE_LEVELS config PGTABLE_LEVELS
int int
default 3 if 64BIT && !PAGE_SIZE_64KB default 3 if 64BIT && !PAGE_SIZE_64KB
......
...@@ -113,4 +113,76 @@ config SPINLOCK_TEST ...@@ -113,4 +113,76 @@ config SPINLOCK_TEST
help help
Add several files to the debugfs to test spinlock speed. Add several files to the debugfs to test spinlock speed.
if CPU_MIPSR6
choice
prompt "Compact branch policy"
default MIPS_COMPACT_BRANCHES_OPTIMAL
config MIPS_COMPACT_BRANCHES_NEVER
bool "Never (force delay slot branches)"
help
Pass the -mcompact-branches=never flag to the compiler in order to
force it to always emit branches with delay slots, and make no use
of the compact branch instructions introduced by MIPSr6. This is
useful if you suspect there may be an issue with compact branches in
either the compiler or the CPU.
config MIPS_COMPACT_BRANCHES_OPTIMAL
bool "Optimal (use where beneficial)"
help
Pass the -mcompact-branches=optimal flag to the compiler in order for
it to make use of compact branch instructions where it deems them
beneficial, and use branches with delay slots elsewhere. This is the
default compiler behaviour, and should be used unless you have a
reason to choose otherwise.
config MIPS_COMPACT_BRANCHES_ALWAYS
bool "Always (force compact branches)"
help
Pass the -mcompact-branches=always flag to the compiler in order to
force it to always emit compact branches, making no use of branch
instructions with delay slots. This can result in more compact code
which may be beneficial in some scenarios.
endchoice
endif # CPU_MIPSR6
config SCACHE_DEBUGFS
bool "L2 cache debugfs entries"
depends on DEBUG_FS
help
Enable this to allow parts of the L2 cache configuration, such as
whether or not prefetching is enabled, to be exposed to userland
via debugfs.
If unsure, say N.
menuconfig MIPS_CPS_NS16550
bool "CPS SMP NS16550 UART output"
depends on MIPS_CPS
help
Output debug information via an ns16550 compatible UART if exceptions
occur early in the boot process of a secondary core.
if MIPS_CPS_NS16550
config MIPS_CPS_NS16550_BASE
hex "UART Base Address"
default 0x1b0003f8 if MIPS_MALTA
help
The base address of the ns16550 compatible UART on which to output
debug information from the early stages of core startup.
config MIPS_CPS_NS16550_SHIFT
int "UART Register Shift"
default 0 if MIPS_MALTA
help
The number of bits to shift ns16550 register indices by in order to
form their addresses. That is, log base 2 of the span between
adjacent ns16550 registers in the system.
endif # MIPS_CPS_NS16550
endmenu endmenu
...@@ -204,6 +204,10 @@ toolchain-msa := $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$( ...@@ -204,6 +204,10 @@ toolchain-msa := $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$(
cflags-$(toolchain-msa) += -DTOOLCHAIN_SUPPORTS_MSA cflags-$(toolchain-msa) += -DTOOLCHAIN_SUPPORTS_MSA
endif endif
cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_NEVER) += -mcompact-branches=never
cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_OPTIMAL) += -mcompact-branches=optimal
cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_ALWAYS) += -mcompact-branches=always
# #
# Firmware support # Firmware support
# #
......
...@@ -105,11 +105,28 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus, ...@@ -105,11 +105,28 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus,
struct ssb_init_invariants *iv) struct ssb_init_invariants *iv)
{ {
char buf[20]; char buf[20];
int len, err;
/* Fill boardinfo structure */ /* Fill boardinfo structure */
memset(&iv->boardinfo, 0 , sizeof(struct ssb_boardinfo)); memset(&iv->boardinfo, 0 , sizeof(struct ssb_boardinfo));
bcm47xx_fill_ssb_boardinfo(&iv->boardinfo, NULL); len = bcm47xx_nvram_getenv("boardvendor", buf, sizeof(buf));
if (len > 0) {
err = kstrtou16(strim(buf), 0, &iv->boardinfo.vendor);
if (err)
pr_warn("Couldn't parse nvram board vendor entry with value \"%s\"\n",
buf);
}
if (!iv->boardinfo.vendor)
iv->boardinfo.vendor = SSB_BOARDVENDOR_BCM;
len = bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf));
if (len > 0) {
err = kstrtou16(strim(buf), 0, &iv->boardinfo.type);
if (err)
pr_warn("Couldn't parse nvram board type entry with value \"%s\"\n",
buf);
}
memset(&iv->sprom, 0, sizeof(struct ssb_sprom)); memset(&iv->sprom, 0, sizeof(struct ssb_sprom));
bcm47xx_fill_sprom(&iv->sprom, NULL, false); bcm47xx_fill_sprom(&iv->sprom, NULL, false);
......
...@@ -60,9 +60,9 @@ static int get_nvram_var(const char *prefix, const char *postfix, ...@@ -60,9 +60,9 @@ static int get_nvram_var(const char *prefix, const char *postfix,
} }
#define NVRAM_READ_VAL(type) \ #define NVRAM_READ_VAL(type) \
static void nvram_read_ ## type (const char *prefix, \ static void nvram_read_ ## type(const char *prefix, \
const char *postfix, const char *name, \ const char *postfix, const char *name, \
type *val, type allset, bool fallback) \ type *val, type allset, bool fallback) \
{ \ { \
char buf[100]; \ char buf[100]; \
int err; \ int err; \
...@@ -422,7 +422,10 @@ static void bcm47xx_fill_sprom_path_r4589(struct ssb_sprom *sprom, ...@@ -422,7 +422,10 @@ static void bcm47xx_fill_sprom_path_r4589(struct ssb_sprom *sprom,
int i; int i;
for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) { for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) {
struct ssb_sprom_core_pwr_info *pwr_info = &sprom->core_pwr_info[i]; struct ssb_sprom_core_pwr_info *pwr_info;
pwr_info = &sprom->core_pwr_info[i];
snprintf(postfix, sizeof(postfix), "%i", i); snprintf(postfix, sizeof(postfix), "%i", i);
nvram_read_u8(prefix, postfix, "maxp2ga", nvram_read_u8(prefix, postfix, "maxp2ga",
&pwr_info->maxpwr_2g, 0, fallback); &pwr_info->maxpwr_2g, 0, fallback);
...@@ -470,7 +473,10 @@ static void bcm47xx_fill_sprom_path_r45(struct ssb_sprom *sprom, ...@@ -470,7 +473,10 @@ static void bcm47xx_fill_sprom_path_r45(struct ssb_sprom *sprom,
int i; int i;
for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) { for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) {
struct ssb_sprom_core_pwr_info *pwr_info = &sprom->core_pwr_info[i]; struct ssb_sprom_core_pwr_info *pwr_info;
pwr_info = &sprom->core_pwr_info[i];
snprintf(postfix, sizeof(postfix), "%i", i); snprintf(postfix, sizeof(postfix), "%i", i);
nvram_read_u16(prefix, postfix, "pa2gw3a", nvram_read_u16(prefix, postfix, "pa2gw3a",
&pwr_info->pa_2g[3], 0, fallback); &pwr_info->pa_2g[3], 0, fallback);
...@@ -535,10 +541,11 @@ static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, ...@@ -535,10 +541,11 @@ static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom,
nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback); nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback);
/* The address prefix 00:90:4C is used by Broadcom in their initial /* The address prefix 00:90:4C is used by Broadcom in their initial
configuration. When a mac address with the prefix 00:90:4C is used * configuration. When a mac address with the prefix 00:90:4C is used
all devices from the same series are sharing the same mac address. * all devices from the same series are sharing the same mac address.
To prevent mac address collisions we replace them with a mac address * To prevent mac address collisions we replace them with a mac address
based on the base address. */ * based on the base address.
*/
if (!bcm47xx_is_valid_mac(sprom->il0mac)) { if (!bcm47xx_is_valid_mac(sprom->il0mac)) {
u8 mac[6]; u8 mac[6];
...@@ -592,32 +599,23 @@ void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix, ...@@ -592,32 +599,23 @@ void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix,
bcm47xx_sprom_fill_auto(sprom, prefix, fallback); bcm47xx_sprom_fill_auto(sprom, prefix, fallback);
} }
#ifdef CONFIG_BCM47XX_SSB
void bcm47xx_fill_ssb_boardinfo(struct ssb_boardinfo *boardinfo,
const char *prefix)
{
nvram_read_u16(prefix, NULL, "boardvendor", &boardinfo->vendor, 0,
true);
if (!boardinfo->vendor)
boardinfo->vendor = SSB_BOARDVENDOR_BCM;
nvram_read_u16(prefix, NULL, "boardtype", &boardinfo->type, 0, true);
}
#endif
#if defined(CONFIG_BCM47XX_SSB) #if defined(CONFIG_BCM47XX_SSB)
static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out) static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out)
{ {
char prefix[10]; char prefix[10];
if (bus->bustype == SSB_BUSTYPE_PCI) { switch (bus->bustype) {
case SSB_BUSTYPE_SSB:
bcm47xx_fill_sprom(out, NULL, false);
return 0;
case SSB_BUSTYPE_PCI:
memset(out, 0, sizeof(struct ssb_sprom)); memset(out, 0, sizeof(struct ssb_sprom));
snprintf(prefix, sizeof(prefix), "pci/%u/%u/", snprintf(prefix, sizeof(prefix), "pci/%u/%u/",
bus->host_pci->bus->number + 1, bus->host_pci->bus->number + 1,
PCI_SLOT(bus->host_pci->devfn)); PCI_SLOT(bus->host_pci->devfn));
bcm47xx_fill_sprom(out, prefix, false); bcm47xx_fill_sprom(out, prefix, false);
return 0; return 0;
} else { default:
pr_warn("Unable to fill SPROM for given bustype.\n"); pr_warn("Unable to fill SPROM for given bustype.\n");
return -EINVAL; return -EINVAL;
} }
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* Copyright (C) 2008 Florian Fainelli <florian@openwrt.org> * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
*/ */
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -31,7 +33,6 @@ ...@@ -31,7 +33,6 @@
#include <uapi/linux/bcm933xx_hcs.h> #include <uapi/linux/bcm933xx_hcs.h>
#define PFX "board_bcm963xx: "
#define HCS_OFFSET_128K 0x20000 #define HCS_OFFSET_128K 0x20000
...@@ -740,7 +741,7 @@ int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out) ...@@ -740,7 +741,7 @@ int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom)); memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
return 0; return 0;
} else { } else {
printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n"); pr_err("unable to fill SPROM for given bustype\n");
return -EINVAL; return -EINVAL;
} }
} }
...@@ -784,7 +785,7 @@ void __init board_prom_init(void) ...@@ -784,7 +785,7 @@ void __init board_prom_init(void)
cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]); cfe[5], cfe[6], cfe[7], cfe[8], cfe[9]);
else else
strcpy(cfe_version, "unknown"); strcpy(cfe_version, "unknown");
printk(KERN_INFO PFX "CFE version: %s\n", cfe_version); pr_info("CFE version: %s\n", cfe_version);
bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET); bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
...@@ -808,8 +809,7 @@ void __init board_prom_init(void) ...@@ -808,8 +809,7 @@ void __init board_prom_init(void)
char name[17]; char name[17];
memcpy(name, board_name, 16); memcpy(name, board_name, 16);
name[16] = 0; name[16] = 0;
printk(KERN_ERR PFX "unknown bcm963xx board: %s\n", pr_err("unknown bcm963xx board: %s\n", name);
name);
return; return;
} }
...@@ -854,7 +854,7 @@ void __init board_setup(void) ...@@ -854,7 +854,7 @@ void __init board_setup(void)
{ {
if (!board.name[0]) if (!board.name[0])
panic("unable to detect bcm963xx board"); panic("unable to detect bcm963xx board");
printk(KERN_INFO PFX "board name: %s\n", board.name); pr_info("board name: %s\n", board.name);
/* make sure we're running on expected cpu */ /* make sure we're running on expected cpu */
if (bcm63xx_get_cpu_id() != board.expected_cpu_id) if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
...@@ -910,7 +910,7 @@ int __init board_register_devices(void) ...@@ -910,7 +910,7 @@ int __init board_register_devices(void)
memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN); memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
if (ssb_arch_register_fallback_sprom( if (ssb_arch_register_fallback_sprom(
&bcm63xx_get_fallback_sprom) < 0) &bcm63xx_get_fallback_sprom) < 0)
pr_err(PFX "failed to register fallback SPROM\n"); pr_err("failed to register fallback SPROM\n");
} }
#endif #endif
......
...@@ -376,10 +376,10 @@ void __init bcm63xx_cpu_init(void) ...@@ -376,10 +376,10 @@ void __init bcm63xx_cpu_init(void)
bcm63xx_cpu_freq = detect_cpu_clock(); bcm63xx_cpu_freq = detect_cpu_clock();
bcm63xx_memory_size = detect_memory_size(); bcm63xx_memory_size = detect_memory_size();
printk(KERN_INFO "Detected Broadcom 0x%04x CPU revision %02x\n", pr_info("Detected Broadcom 0x%04x CPU revision %02x\n",
bcm63xx_cpu_id, bcm63xx_cpu_rev); bcm63xx_cpu_id, bcm63xx_cpu_rev);
printk(KERN_INFO "CPU frequency is %u MHz\n", pr_info("CPU frequency is %u MHz\n",
bcm63xx_cpu_freq / 1000000); bcm63xx_cpu_freq / 1000000);
printk(KERN_INFO "%uMB of RAM installed\n", pr_info("%uMB of RAM installed\n",
bcm63xx_memory_size >> 20); bcm63xx_memory_size >> 20);
} }
...@@ -139,6 +139,6 @@ int __init bcm63xx_pcmcia_register(void) ...@@ -139,6 +139,6 @@ int __init bcm63xx_pcmcia_register(void)
return platform_device_register(&bcm63xx_pcmcia_device); return platform_device_register(&bcm63xx_pcmcia_device);
out_err: out_err:
printk(KERN_ERR "unable to set pcmcia chip select\n"); pr_err("unable to set pcmcia chip select\n");
return ret; return ret;
} }
...@@ -311,7 +311,7 @@ static int bcm63xx_external_irq_set_type(struct irq_data *d, ...@@ -311,7 +311,7 @@ static int bcm63xx_external_irq_set_type(struct irq_data *d,
break; break;
default: default:
printk(KERN_ERR "bogus flow type combination given !\n"); pr_err("bogus flow type combination given !\n");
return -EINVAL; return -EINVAL;
} }
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
void bcm63xx_machine_halt(void) void bcm63xx_machine_halt(void)
{ {
printk(KERN_INFO "System halted\n"); pr_info("System halted\n");
while (1) while (1)
; ;
} }
...@@ -34,7 +34,7 @@ static void bcm6348_a1_reboot(void) ...@@ -34,7 +34,7 @@ static void bcm6348_a1_reboot(void)
u32 reg; u32 reg;
/* soft reset all blocks */ /* soft reset all blocks */
printk(KERN_INFO "soft-resetting all blocks ...\n"); pr_info("soft-resetting all blocks ...\n");
reg = bcm_perf_readl(PERF_SOFTRESET_REG); reg = bcm_perf_readl(PERF_SOFTRESET_REG);
reg &= ~SOFTRESET_6348_ALL; reg &= ~SOFTRESET_6348_ALL;
bcm_perf_writel(reg, PERF_SOFTRESET_REG); bcm_perf_writel(reg, PERF_SOFTRESET_REG);
...@@ -46,7 +46,7 @@ static void bcm6348_a1_reboot(void) ...@@ -46,7 +46,7 @@ static void bcm6348_a1_reboot(void)
mdelay(10); mdelay(10);
/* Jump to the power on address. */ /* Jump to the power on address. */
printk(KERN_INFO "jumping to reset vector.\n"); pr_info("jumping to reset vector.\n");
/* set high vectors (base at 0xbfc00000 */ /* set high vectors (base at 0xbfc00000 */
set_c0_status(ST0_BEV | ST0_ERL); set_c0_status(ST0_BEV | ST0_ERL);
/* run uncached in kseg0 */ /* run uncached in kseg0 */
...@@ -110,7 +110,7 @@ void bcm63xx_machine_reboot(void) ...@@ -110,7 +110,7 @@ void bcm63xx_machine_reboot(void)
if (BCMCPU_IS_6348() && (bcm63xx_get_cpu_rev() == 0xa1)) if (BCMCPU_IS_6348() && (bcm63xx_get_cpu_rev() == 0xa1))
bcm6348_a1_reboot(); bcm6348_a1_reboot();
printk(KERN_INFO "triggering watchdog soft-reset...\n"); pr_info("triggering watchdog soft-reset...\n");
if (BCMCPU_IS_6328()) { if (BCMCPU_IS_6328()) {
bcm_wdt_writel(1, WDT_SOFTRESET_REG); bcm_wdt_writel(1, WDT_SOFTRESET_REG);
} else { } else {
......
...@@ -195,7 +195,7 @@ int bcm63xx_timer_init(void) ...@@ -195,7 +195,7 @@ int bcm63xx_timer_init(void)
irq = bcm63xx_get_irq_number(IRQ_TIMER); irq = bcm63xx_get_irq_number(IRQ_TIMER);
ret = request_irq(irq, timer_interrupt, 0, "bcm63xx_timer", NULL); ret = request_irq(irq, timer_interrupt, 0, "bcm63xx_timer", NULL);
if (ret) { if (ret) {
printk(KERN_ERR "bcm63xx_timer: failed to register irq\n"); pr_err("%s: failed to register irq\n", __func__);
return ret; return ret;
} }
......
...@@ -157,7 +157,6 @@ void __init plat_mem_setup(void) ...@@ -157,7 +157,6 @@ void __init plat_mem_setup(void)
panic("no dtb found"); panic("no dtb found");
__dt_setup_arch(dtb); __dt_setup_arch(dtb);
strlcpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE);
for (q = bmips_quirk_list; q->quirk_fn; q++) { for (q = bmips_quirk_list; q->quirk_fn; q++) {
if (of_flat_dt_is_compatible(of_get_flat_dt_root(), if (of_flat_dt_is_compatible(of_get_flat_dt_root(),
......
...@@ -6,6 +6,7 @@ dts-dirs += mti ...@@ -6,6 +6,7 @@ dts-dirs += mti
dts-dirs += netlogic dts-dirs += netlogic
dts-dirs += qca dts-dirs += qca
dts-dirs += ralink dts-dirs += ralink
dts-dirs += xilfpga
obj-y := $(addsuffix /, $(dts-dirs)) obj-y := $(addsuffix /, $(dts-dirs))
......
...@@ -87,14 +87,32 @@ ...@@ -87,14 +87,32 @@
compatible = "brcm,bcm7120-l2-intc"; compatible = "brcm,bcm7120-l2-intc";
reg = <0x406780 0x8>; reg = <0x406780 0x8>;
brcm,int-map-mask = <0x44>; brcm,int-map-mask = <0x44>, <0xf000000>;
brcm,int-fwd-mask = <0x70000>; brcm,int-fwd-mask = <0x70000>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-parent = <&periph_intc>; interrupt-parent = <&periph_intc>;
interrupts = <59>; interrupts = <59>, <57>;
interrupt-names = "upg_main", "upg_bsc";
};
upg_aon_irq0_intc: upg_aon_irq0_intc@408b80 {
compatible = "brcm,bcm7120-l2-intc";
reg = <0x408b80 0x8>;
brcm,int-map-mask = <0x40>, <0x8000000>, <0x100000>;
brcm,int-fwd-mask = <0>;
brcm,irq-can-wake;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&periph_intc>;
interrupts = <60>, <58>, <62>;
interrupt-names = "upg_main_aon", "upg_bsc_aon",
"upg_spi";
}; };
sun_top_ctrl: syscon@404000 { sun_top_ctrl: syscon@404000 {
...@@ -144,6 +162,56 @@ ...@@ -144,6 +162,56 @@
status = "disabled"; status = "disabled";
}; };
bsca: i2c@406200 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406200 0x58>;
interrupts = <24>;
interrupt-names = "upg_bsca";
status = "disabled";
};
bscb: i2c@406280 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406280 0x58>;
interrupts = <25>;
interrupt-names = "upg_bscb";
status = "disabled";
};
bscc: i2c@406300 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406300 0x58>;
interrupts = <26>;
interrupt-names = "upg_bscc";
status = "disabled";
};
bscd: i2c@406380 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406380 0x58>;
interrupts = <27>;
interrupt-names = "upg_bscd";
status = "disabled";
};
bsce: i2c@408980 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_aon_irq0_intc>;
reg = <0x408980 0x58>;
interrupts = <27>;
interrupt-names = "upg_bsce";
status = "disabled";
};
enet0: ethernet@430000 { enet0: ethernet@430000 {
phy-mode = "internal"; phy-mode = "internal";
phy-handle = <&phy1>; phy-handle = <&phy1>;
...@@ -246,5 +314,47 @@ ...@@ -246,5 +314,47 @@
interrupts = <76>; interrupts = <76>;
status = "disabled"; status = "disabled";
}; };
sata: sata@181000 {
compatible = "brcm,bcm7425-ahci", "brcm,sata3-ahci";
reg-names = "ahci", "top-ctrl";
reg = <0x181000 0xa9c>, <0x180020 0x1c>;
interrupt-parent = <&periph_intc>;
interrupts = <40>;
#address-cells = <1>;
#size-cells = <0>;
brcm,broken-ncq;
brcm,broken-phy;
status = "disabled";
sata0: sata-port@0 {
reg = <0>;
phys = <&sata_phy0>;
};
sata1: sata-port@1 {
reg = <1>;
phys = <&sata_phy1>;
};
};
sata_phy: sata-phy@1800000 {
compatible = "brcm,bcm7425-sata-phy", "brcm,phy-sata3";
reg = <0x180100 0x0eff>;
reg-names = "phy";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
sata_phy0: sata-phy@0 {
reg = <0>;
#phy-cells = <0>;
};
sata_phy1: sata-phy@1 {
reg = <1>;
#phy-cells = <0>;
};
};
}; };
}; };
...@@ -81,14 +81,32 @@ ...@@ -81,14 +81,32 @@
compatible = "brcm,bcm7120-l2-intc"; compatible = "brcm,bcm7120-l2-intc";
reg = <0x406600 0x8>; reg = <0x406600 0x8>;
brcm,int-map-mask = <0x44>; brcm,int-map-mask = <0x44>, <0x7000000>;
brcm,int-fwd-mask = <0x70000>; brcm,int-fwd-mask = <0x70000>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-parent = <&periph_intc>; interrupt-parent = <&periph_intc>;
interrupts = <56>; interrupts = <56>, <54>;
interrupt-names = "upg_main", "upg_bsc";
};
upg_aon_irq0_intc: upg_aon_irq0_intc@408b80 {
compatible = "brcm,bcm7120-l2-intc";
reg = <0x408b80 0x8>;
brcm,int-map-mask = <0x40>, <0x8000000>, <0x100000>;
brcm,int-fwd-mask = <0>;
brcm,irq-can-wake;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&periph_intc>;
interrupts = <57>, <55>, <59>;
interrupt-names = "upg_main_aon", "upg_bsc_aon",
"upg_spi";
}; };
sun_top_ctrl: syscon@404000 { sun_top_ctrl: syscon@404000 {
...@@ -138,6 +156,46 @@ ...@@ -138,6 +156,46 @@
status = "disabled"; status = "disabled";
}; };
bsca: i2c@406200 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406200 0x58>;
interrupts = <24>;
interrupt-names = "upg_bsca";
status = "disabled";
};
bscb: i2c@406280 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406280 0x58>;
interrupts = <25>;
interrupt-names = "upg_bscb";
status = "disabled";
};
bscc: i2c@406300 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406300 0x58>;
interrupts = <26>;
interrupt-names = "upg_bscc";
status = "disabled";
};
bscd: i2c@408980 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_aon_irq0_intc>;
reg = <0x408980 0x58>;
interrupts = <27>;
interrupt-names = "upg_bscd";
status = "disabled";
};
enet0: ethernet@430000 { enet0: ethernet@430000 {
phy-mode = "internal"; phy-mode = "internal";
phy-handle = <&phy1>; phy-handle = <&phy1>;
......
...@@ -81,14 +81,32 @@ ...@@ -81,14 +81,32 @@
compatible = "brcm,bcm7120-l2-intc"; compatible = "brcm,bcm7120-l2-intc";
reg = <0x406600 0x8>; reg = <0x406600 0x8>;
brcm,int-map-mask = <0x44>; brcm,int-map-mask = <0x44>, <0x7000000>;
brcm,int-fwd-mask = <0x70000>; brcm,int-fwd-mask = <0x70000>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-parent = <&periph_intc>; interrupt-parent = <&periph_intc>;
interrupts = <56>; interrupts = <56>, <54>;
interrupt-names = "upg_main", "upg_bsc";
};
upg_aon_irq0_intc: upg_aon_irq0_intc@408b80 {
compatible = "brcm,bcm7120-l2-intc";
reg = <0x408b80 0x8>;
brcm,int-map-mask = <0x40>, <0x8000000>, <0x100000>;
brcm,int-fwd-mask = <0>;
brcm,irq-can-wake;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&periph_intc>;
interrupts = <57>, <55>, <59>;
interrupt-names = "upg_main_aon", "upg_bsc_aon",
"upg_spi";
}; };
sun_top_ctrl: syscon@404000 { sun_top_ctrl: syscon@404000 {
...@@ -138,6 +156,46 @@ ...@@ -138,6 +156,46 @@
status = "disabled"; status = "disabled";
}; };
bsca: i2c@406200 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406200 0x58>;
interrupts = <24>;
interrupt-names = "upg_bsca";
status = "disabled";
};
bscb: i2c@406280 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406280 0x58>;
interrupts = <25>;
interrupt-names = "upg_bscb";
status = "disabled";
};
bscc: i2c@406300 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406300 0x58>;
interrupts = <26>;
interrupt-names = "upg_bscc";
status = "disabled";
};
bscd: i2c@408980 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_aon_irq0_intc>;
reg = <0x408980 0x58>;
interrupts = <27>;
interrupt-names = "upg_bscd";
status = "disabled";
};
enet0: ethernet@430000 { enet0: ethernet@430000 {
phy-mode = "internal"; phy-mode = "internal";
phy-handle = <&phy1>; phy-handle = <&phy1>;
......
...@@ -87,14 +87,32 @@ ...@@ -87,14 +87,32 @@
compatible = "brcm,bcm7120-l2-intc"; compatible = "brcm,bcm7120-l2-intc";
reg = <0x406600 0x8>; reg = <0x406600 0x8>;
brcm,int-map-mask = <0x44>; brcm,int-map-mask = <0x44>, <0x7000000>;
brcm,int-fwd-mask = <0x70000>; brcm,int-fwd-mask = <0x70000>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <1>;
interrupt-parent = <&periph_intc>; interrupt-parent = <&periph_intc>;
interrupts = <56>; interrupts = <56>, <54>;
interrupt-names = "upg_main", "upg_bsc";
};
upg_aon_irq0_intc: upg_aon_irq0_intc@408b80 {
compatible = "brcm,bcm7120-l2-intc";
reg = <0x408b80 0x8>;
brcm,int-map-mask = <0x40>, <0x8000000>, <0x100000>;
brcm,int-fwd-mask = <0>;
brcm,irq-can-wake;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&periph_intc>;
interrupts = <57>, <55>, <59>;
interrupt-names = "upg_main_aon", "upg_bsc_aon",
"upg_spi";
}; };
sun_top_ctrl: syscon@404000 { sun_top_ctrl: syscon@404000 {
...@@ -144,6 +162,36 @@ ...@@ -144,6 +162,36 @@
status = "disabled"; status = "disabled";
}; };
bsca: i2c@406200 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406200 0x58>;
interrupts = <24>;
interrupt-names = "upg_bsca";
status = "disabled";
};
bscb: i2c@406280 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_irq0_intc>;
reg = <0x406280 0x58>;
interrupts = <25>;
interrupt-names = "upg_bscb";
status = "disabled";
};
bscd: i2c@408980 {
clock-frequency = <390000>;
compatible = "brcm,brcmstb-i2c";
interrupt-parent = <&upg_aon_irq0_intc>;
reg = <0x408980 0x58>;
interrupts = <27>;
interrupt-names = "upg_bscd";
status = "disabled";
};
enet0: ethernet@430000 { enet0: ethernet@430000 {
phy-mode = "internal"; phy-mode = "internal";
phy-handle = <&phy1>; phy-handle = <&phy1>;
...@@ -189,5 +237,47 @@ ...@@ -189,5 +237,47 @@
interrupts = <66>; interrupts = <66>;
status = "disabled"; status = "disabled";
}; };
sata: sata@181000 {
compatible = "brcm,bcm7425-ahci", "brcm,sata3-ahci";
reg-names = "ahci", "top-ctrl";
reg = <0x181000 0xa9c>, <0x180020 0x1c>;
interrupt-parent = <&periph_intc>;
interrupts = <86>;
#address-cells = <1>;
#size-cells = <0>;
brcm,broken-ncq;
brcm,broken-phy;
status = "disabled";
sata0: sata-port@0 {
reg = <0>;
phys = <&sata_phy0>;
};
sata1: sata-port@1 {
reg = <1>;
phys = <&sata_phy1>;
};
};
sata_phy: sata-phy@1800000 {
compatible = "brcm,bcm7425-sata-phy", "brcm,phy-sata3";
reg = <0x180100 0x0eff>;
reg-names = "phy";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
sata_phy0: sata-phy@0 {
reg = <0>;
#phy-cells = <0>;
};
sata_phy1: sata-phy@1 {
reg = <1>;
#phy-cells = <0>;
};
};
}; };
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment