Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (29 commits) powerpc/83xx: Move mcu_mpc8349emitx driver out of drivers/i2c/chips/ powerpc/83xx: Make serial ports work on MPC8315E-RDB w/ FSL U-Boots powerpc/e500mc: Doorbells need to be taken w/exceptions disabled powerpc: Enable PS3 options and QPACE in ppc64_defconfig powerpc/powermac: Fix occasional SMP boot failure powerpc/cacheinfo: Rename cache_dir per-cpu variable hvc_console: Use kzalloc() instead of kmalloc() + memset() hvc_console: Do not set low_latency when using interrupts hvc_console: Call free_irq() only if request_irq() was successful hvc_console: Change an mb() to smp_mb() and add some comments powerpc: Cleanup from l64 to ll64 change: drivers/net powerpc: Cleanup from l64 to ll64 change: drivers/char powerpc: Cleanup from l64 to ll64 change: arch code powerpc: Change u64/s64 to a long long integer type powerpc/kexec: Check crash_base for relocatable kernel powerpc: Make dummy section a valid note header Xilinx: SPI: updated driver for device tree drivers/of: Add the of_find_i2c_device_by_node function. powerpc/xsysace: add compatible string for non-ipcore instance powerpc/mpc52xx: remove dead code from GPIO driver ...
This commit is contained in:
Коммит
5393f78027
|
@ -255,7 +255,7 @@
|
|||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <0x4500 0x100>;
|
||||
clock-frequency = <0>;
|
||||
clock-frequency = <133333333>;
|
||||
interrupts = <9 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
@ -265,7 +265,7 @@
|
|||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <0x4600 0x100>;
|
||||
clock-frequency = <0>;
|
||||
clock-frequency = <133333333>;
|
||||
interrupts = <10 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
|
|
@ -313,7 +313,7 @@
|
|||
0x1000000 0x0 0x0 0xe1010000 0x0 0x10000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <26 2>;
|
||||
interrupts = <25 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
@ -350,7 +350,7 @@
|
|||
0x1000000 0x0 0x0 0xe1020000 0x0 0x10000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <25 2>;
|
||||
interrupts = <26 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
|
|
@ -724,7 +724,7 @@
|
|||
0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x00010000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <26 2>;
|
||||
interrupts = <25 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
@ -761,7 +761,7 @@
|
|||
0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x00010000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <27 2>;
|
||||
interrupts = <26 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
|
|
@ -457,7 +457,7 @@
|
|||
0x1000000 0x0 0x0 0xffc10000 0x0 0x10000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <26 2>;
|
||||
interrupts = <25 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
|
|
@ -208,7 +208,7 @@
|
|||
0x1000000 0x0 0x0 0xffc20000 0x0 0x10000>;
|
||||
clock-frequency = <33333333>;
|
||||
interrupt-parent = <&mpic>;
|
||||
interrupts = <27 2>;
|
||||
interrupts = <26 2>;
|
||||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0 */
|
||||
|
|
|
@ -211,11 +211,28 @@ CONFIG_PPC_PASEMI=y
|
|||
CONFIG_PPC_PASEMI_IOMMU=y
|
||||
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
|
||||
CONFIG_PPC_PASEMI_MDIO=y
|
||||
# CONFIG_PPC_PS3 is not set
|
||||
CONFIG_PPC_PS3=y
|
||||
|
||||
#
|
||||
# PS3 Platform Options
|
||||
#
|
||||
# CONFIG_PS3_ADVANCED is not set
|
||||
CONFIG_PS3_HTAB_SIZE=20
|
||||
# CONFIG_PS3_DYNAMIC_DMA is not set
|
||||
CONFIG_PS3_VUART=y
|
||||
CONFIG_PS3_PS3AV=y
|
||||
CONFIG_PS3_SYS_MANAGER=y
|
||||
CONFIG_PS3_STORAGE=m
|
||||
CONFIG_PS3_DISK=m
|
||||
CONFIG_PS3_ROM=m
|
||||
CONFIG_PS3_FLASH=m
|
||||
CONFIG_PS3_LPM=m
|
||||
CONFIG_PPC_CELL=y
|
||||
CONFIG_PPC_CELL_COMMON=y
|
||||
CONFIG_PPC_CELL_NATIVE=y
|
||||
CONFIG_PPC_IBM_CELL_BLADE=y
|
||||
CONFIG_PPC_CELLEB=y
|
||||
CONFIG_PPC_CELL_QPACE=y
|
||||
|
||||
#
|
||||
# Cell Broadband Engine options
|
||||
|
@ -981,6 +998,9 @@ CONFIG_E1000=y
|
|||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
CONFIG_SPIDER_NET=m
|
||||
CONFIG_GELIC_NET=m
|
||||
CONFIG_GELIC_WIRELESS=y
|
||||
# CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE is not set
|
||||
# CONFIG_QLA3XXX is not set
|
||||
# CONFIG_ATL1 is not set
|
||||
# CONFIG_ATL1E is not set
|
||||
|
@ -1370,6 +1390,8 @@ CONFIG_FB_RADEON_BACKLIGHT=y
|
|||
# CONFIG_FB_PM3 is not set
|
||||
# CONFIG_FB_CARMINE is not set
|
||||
CONFIG_FB_IBM_GXT4500=y
|
||||
CONFIG_FB_PS3=m
|
||||
CONFIG_FB_PS3_DEFAULT_SIZE_M=9
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
|
@ -1492,6 +1514,8 @@ CONFIG_SND_PCI=y
|
|||
CONFIG_SND_PPC=y
|
||||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_POWERMAC_AUTO_DRC=y
|
||||
CONFIG_SND_PS3=m
|
||||
CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
|
||||
CONFIG_SND_AOA=m
|
||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||
CONFIG_SND_AOA_ONYX=m
|
||||
|
|
|
@ -624,7 +624,7 @@ struct ucc_slow_pram {
|
|||
#define UCC_GETH_UCCE_RXF1 0x00000002
|
||||
#define UCC_GETH_UCCE_RXF0 0x00000001
|
||||
|
||||
/* UPSMR, when used as a UART */
|
||||
/* UCC Protocol Specific Mode Register (UPSMR), when used for UART */
|
||||
#define UCC_UART_UPSMR_FLC 0x8000
|
||||
#define UCC_UART_UPSMR_SL 0x4000
|
||||
#define UCC_UART_UPSMR_CL_MASK 0x3000
|
||||
|
@ -652,6 +652,23 @@ struct ucc_slow_pram {
|
|||
#define UCC_UART_UPSMR_TPM_EVEN 0x0002
|
||||
#define UCC_UART_UPSMR_TPM_HIGH 0x0003
|
||||
|
||||
/* UCC Protocol Specific Mode Register (UPSMR), when used for Ethernet */
|
||||
#define UCC_GETH_UPSMR_FTFE 0x80000000
|
||||
#define UCC_GETH_UPSMR_PTPE 0x40000000
|
||||
#define UCC_GETH_UPSMR_ECM 0x04000000
|
||||
#define UCC_GETH_UPSMR_HSE 0x02000000
|
||||
#define UCC_GETH_UPSMR_PRO 0x00400000
|
||||
#define UCC_GETH_UPSMR_CAP 0x00200000
|
||||
#define UCC_GETH_UPSMR_RSH 0x00100000
|
||||
#define UCC_GETH_UPSMR_RPM 0x00080000
|
||||
#define UCC_GETH_UPSMR_R10M 0x00040000
|
||||
#define UCC_GETH_UPSMR_RLPB 0x00020000
|
||||
#define UCC_GETH_UPSMR_TBIM 0x00010000
|
||||
#define UCC_GETH_UPSMR_RES1 0x00002000
|
||||
#define UCC_GETH_UPSMR_RMM 0x00001000
|
||||
#define UCC_GETH_UPSMR_CAM 0x00000400
|
||||
#define UCC_GETH_UPSMR_BRO 0x00000200
|
||||
|
||||
/* UCC Transmit On Demand Register (UTODR) */
|
||||
#define UCC_SLOW_TOD 0x8000
|
||||
#define UCC_FAST_TOD 0x8000
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#define RTAS_UNKNOWN_SERVICE (-1)
|
||||
#define RTAS_INSTANTIATE_MAX (1UL<<30) /* Don't instantiate rtas at/above this value */
|
||||
#define RTAS_INSTANTIATE_MAX (1ULL<<30) /* Don't instantiate rtas at/above this value */
|
||||
|
||||
/* Buffer size for ppc_rtas system call. */
|
||||
#define RTAS_RMOBUF_MAX (64 * 1024)
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
#ifndef _ASM_POWERPC_TYPES_H
|
||||
#define _ASM_POWERPC_TYPES_H
|
||||
|
||||
#ifdef __powerpc64__
|
||||
/*
|
||||
* This is here because we used to use l64 for 64bit powerpc
|
||||
* and we don't want to impact user mode with our change to ll64
|
||||
* in the kernel.
|
||||
*/
|
||||
#if defined(__powerpc64__) && !defined(__KERNEL__)
|
||||
# include <asm-generic/int-l64.h>
|
||||
#else
|
||||
# include <asm-generic/int-ll64.h>
|
||||
|
|
|
@ -56,6 +56,10 @@
|
|||
#include "head_booke.h"
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FSL_BOOKE)
|
||||
#include "../mm/mmu_decl.h"
|
||||
#endif
|
||||
|
||||
int main(void)
|
||||
{
|
||||
DEFINE(THREAD, offsetof(struct task_struct, thread));
|
||||
|
@ -382,6 +386,9 @@ int main(void)
|
|||
DEFINE(PGD_T_LOG2, PGD_T_LOG2);
|
||||
DEFINE(PTE_T_LOG2, PTE_T_LOG2);
|
||||
#endif
|
||||
#ifdef CONFIG_FSL_BOOKE
|
||||
DEFINE(TLBCAM_SIZE, sizeof(struct tlbcam));
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KVM_EXIT_TIMING
|
||||
DEFINE(VCPU_TIMING_EXIT_TBU, offsetof(struct kvm_vcpu,
|
||||
|
|
|
@ -113,7 +113,7 @@ struct cache {
|
|||
struct cache *next_local; /* next cache of >= level */
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU(struct cache_dir *, cache_dir);
|
||||
static DEFINE_PER_CPU(struct cache_dir *, cache_dir_pcpu);
|
||||
|
||||
/* traversal/modification of this list occurs only at cpu hotplug time;
|
||||
* access is serialized by cpu hotplug locking
|
||||
|
@ -468,9 +468,9 @@ static struct cache_dir *__cpuinit cacheinfo_create_cache_dir(unsigned int cpu_i
|
|||
|
||||
cache_dir->kobj = kobj;
|
||||
|
||||
WARN_ON_ONCE(per_cpu(cache_dir, cpu_id) != NULL);
|
||||
WARN_ON_ONCE(per_cpu(cache_dir_pcpu, cpu_id) != NULL);
|
||||
|
||||
per_cpu(cache_dir, cpu_id) = cache_dir;
|
||||
per_cpu(cache_dir_pcpu, cpu_id) = cache_dir;
|
||||
|
||||
return cache_dir;
|
||||
err:
|
||||
|
@ -820,13 +820,13 @@ void cacheinfo_cpu_offline(unsigned int cpu_id)
|
|||
|
||||
/* Prevent userspace from seeing inconsistent state - remove
|
||||
* the sysfs hierarchy first */
|
||||
cache_dir = per_cpu(cache_dir, cpu_id);
|
||||
cache_dir = per_cpu(cache_dir_pcpu, cpu_id);
|
||||
|
||||
/* careful, sysfs population may have failed */
|
||||
if (cache_dir)
|
||||
remove_cache_dir(cache_dir);
|
||||
|
||||
per_cpu(cache_dir, cpu_id) = NULL;
|
||||
per_cpu(cache_dir_pcpu, cpu_id) = NULL;
|
||||
|
||||
/* clear the CPU's bit in its cache chain, possibly freeing
|
||||
* cache objects */
|
||||
|
|
|
@ -79,10 +79,10 @@ static int dma_iommu_dma_supported(struct device *dev, u64 mask)
|
|||
"Warning: IOMMU offset too big for device mask\n");
|
||||
if (tbl)
|
||||
printk(KERN_INFO
|
||||
"mask: 0x%08lx, table offset: 0x%08lx\n",
|
||||
"mask: 0x%08llx, table offset: 0x%08lx\n",
|
||||
mask, tbl->it_offset);
|
||||
else
|
||||
printk(KERN_INFO "mask: 0x%08lx, table unavailable\n",
|
||||
printk(KERN_INFO "mask: 0x%08llx, table unavailable\n",
|
||||
mask);
|
||||
return 0;
|
||||
} else
|
||||
|
|
|
@ -1518,6 +1518,15 @@ _GLOBAL(pmac_secondary_start)
|
|||
/* turn on 64-bit mode */
|
||||
bl .enable_64b_mode
|
||||
|
||||
li r0,0
|
||||
mfspr r3,SPRN_HID4
|
||||
rldimi r3,r0,40,23 /* clear bit 23 (rm_ci) */
|
||||
sync
|
||||
mtspr SPRN_HID4,r3
|
||||
isync
|
||||
sync
|
||||
slbia
|
||||
|
||||
/* get TOC pointer (real address) */
|
||||
bl .relative_toc
|
||||
|
||||
|
|
|
@ -389,10 +389,6 @@ skpinv: addi r6,r6,1 /* Increment */
|
|||
#endif
|
||||
#endif
|
||||
|
||||
mfspr r3,SPRN_TLB1CFG
|
||||
andi. r3,r3,0xfff
|
||||
lis r4,num_tlbcam_entries@ha
|
||||
stw r3,num_tlbcam_entries@l(r4)
|
||||
/*
|
||||
* Decide what sort of machine this is and initialize the MMU.
|
||||
*/
|
||||
|
@ -711,7 +707,7 @@ interrupt_base:
|
|||
EXCEPTION(0x2060, PerformanceMonitor, performance_monitor_exception, EXC_XFER_STD)
|
||||
|
||||
#ifdef CONFIG_PPC_E500MC
|
||||
EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_EE)
|
||||
EXCEPTION(0x2070, Doorbell, unknown_exception, EXC_XFER_STD)
|
||||
#endif
|
||||
|
||||
/* Debug Interrupt */
|
||||
|
@ -909,7 +905,7 @@ KernelSPE:
|
|||
_GLOBAL(loadcam_entry)
|
||||
lis r4,TLBCAM@ha
|
||||
addi r4,r4,TLBCAM@l
|
||||
mulli r5,r3,20
|
||||
mulli r5,r3,TLBCAM_SIZE
|
||||
add r3,r5,r4
|
||||
lwz r4,0(r3)
|
||||
mtspr SPRN_MAS0,r4
|
||||
|
|
|
@ -239,12 +239,12 @@ static void __iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr,
|
|||
if (printk_ratelimit()) {
|
||||
printk(KERN_INFO "iommu_free: invalid entry\n");
|
||||
printk(KERN_INFO "\tentry = 0x%lx\n", entry);
|
||||
printk(KERN_INFO "\tdma_addr = 0x%lx\n", (u64)dma_addr);
|
||||
printk(KERN_INFO "\tTable = 0x%lx\n", (u64)tbl);
|
||||
printk(KERN_INFO "\tbus# = 0x%lx\n", (u64)tbl->it_busno);
|
||||
printk(KERN_INFO "\tsize = 0x%lx\n", (u64)tbl->it_size);
|
||||
printk(KERN_INFO "\tstartOff = 0x%lx\n", (u64)tbl->it_offset);
|
||||
printk(KERN_INFO "\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk(KERN_INFO "\tdma_addr = 0x%llx\n", (u64)dma_addr);
|
||||
printk(KERN_INFO "\tTable = 0x%llx\n", (u64)tbl);
|
||||
printk(KERN_INFO "\tbus# = 0x%llx\n", (u64)tbl->it_busno);
|
||||
printk(KERN_INFO "\tsize = 0x%llx\n", (u64)tbl->it_size);
|
||||
printk(KERN_INFO "\tstartOff = 0x%llx\n", (u64)tbl->it_offset);
|
||||
printk(KERN_INFO "\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
WARN_ON(1);
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -240,7 +240,7 @@ static void parse_ppp_data(struct seq_file *m)
|
|||
if (rc)
|
||||
return;
|
||||
|
||||
seq_printf(m, "partition_entitled_capacity=%ld\n",
|
||||
seq_printf(m, "partition_entitled_capacity=%lld\n",
|
||||
ppp_data.entitlement);
|
||||
seq_printf(m, "group=%d\n", ppp_data.group_num);
|
||||
seq_printf(m, "system_active_processors=%d\n",
|
||||
|
@ -265,7 +265,7 @@ static void parse_ppp_data(struct seq_file *m)
|
|||
ppp_data.unallocated_weight);
|
||||
seq_printf(m, "capacity_weight=%d\n", ppp_data.weight);
|
||||
seq_printf(m, "capped=%d\n", ppp_data.capped);
|
||||
seq_printf(m, "unallocated_capacity=%ld\n",
|
||||
seq_printf(m, "unallocated_capacity=%lld\n",
|
||||
ppp_data.unallocated_entitlement);
|
||||
}
|
||||
|
||||
|
@ -509,10 +509,10 @@ static ssize_t update_ppp(u64 *entitlement, u8 *weight)
|
|||
} else
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: current_entitled = %lu, current_weight = %u\n",
|
||||
pr_debug("%s: current_entitled = %llu, current_weight = %u\n",
|
||||
__func__, ppp_data.entitlement, ppp_data.weight);
|
||||
|
||||
pr_debug("%s: new_entitled = %lu, new_weight = %u\n",
|
||||
pr_debug("%s: new_entitled = %llu, new_weight = %u\n",
|
||||
__func__, new_entitled, new_weight);
|
||||
|
||||
retval = plpar_hcall_norets(H_SET_PPP, new_entitled, new_weight);
|
||||
|
@ -558,7 +558,7 @@ static ssize_t update_mpp(u64 *entitlement, u8 *weight)
|
|||
pr_debug("%s: current_entitled = %lu, current_weight = %u\n",
|
||||
__func__, mpp_data.entitled_mem, mpp_data.mem_weight);
|
||||
|
||||
pr_debug("%s: new_entitled = %lu, new_weight = %u\n",
|
||||
pr_debug("%s: new_entitled = %llu, new_weight = %u\n",
|
||||
__func__, new_entitled, new_weight);
|
||||
|
||||
rc = plpar_hcall_norets(H_SET_MPP, new_entitled, new_weight);
|
||||
|
|
|
@ -93,10 +93,35 @@ void __init reserve_crashkernel(void)
|
|||
KDUMP_KERNELBASE);
|
||||
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
#else
|
||||
if (!crashk_res.start) {
|
||||
/*
|
||||
* unspecified address, choose a region of specified size
|
||||
* can overlap with initrd (ignoring corruption when retained)
|
||||
* ppc64 requires kernel and some stacks to be in first segemnt
|
||||
*/
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
}
|
||||
|
||||
crash_base = PAGE_ALIGN(crashk_res.start);
|
||||
if (crash_base != crashk_res.start) {
|
||||
printk("Crash kernel base must be aligned to 0x%lx\n",
|
||||
PAGE_SIZE);
|
||||
crashk_res.start = crash_base;
|
||||
}
|
||||
|
||||
#endif
|
||||
crash_size = PAGE_ALIGN(crash_size);
|
||||
crashk_res.end = crashk_res.start + crash_size - 1;
|
||||
|
||||
/* The crash region must not overlap the current kernel */
|
||||
if (overlaps_crashkernel(__pa(_stext), _end - _stext)) {
|
||||
printk(KERN_WARNING
|
||||
"Crash kernel can not overlap current kernel\n");
|
||||
crashk_res.start = crashk_res.end = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash kernel trumps memory limit */
|
||||
if (memory_limit && memory_limit <= crashk_res.end) {
|
||||
memory_limit = crashk_res.end + 1;
|
||||
|
|
|
@ -470,7 +470,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|||
if (bus->self) {
|
||||
pr_debug("IO mapping for PCI-PCI bridge %s\n",
|
||||
pci_name(bus->self));
|
||||
pr_debug(" virt=0x%016lx...0x%016lx\n",
|
||||
pr_debug(" virt=0x%016llx...0x%016llx\n",
|
||||
bus->resource[0]->start + _IO_BASE,
|
||||
bus->resource[0]->end + _IO_BASE);
|
||||
return 0;
|
||||
|
@ -502,7 +502,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|||
hose->io_base_phys - phys_page);
|
||||
|
||||
pr_debug("IO mapping for PHB %s\n", hose->dn->full_name);
|
||||
pr_debug(" phys=0x%016lx, virt=0x%p (alloc=0x%p)\n",
|
||||
pr_debug(" phys=0x%016llx, virt=0x%p (alloc=0x%p)\n",
|
||||
hose->io_base_phys, hose->io_base_virt, hose->io_base_alloc);
|
||||
pr_debug(" size=0x%016lx (alloc=0x%016lx)\n",
|
||||
hose->pci_io_size, size_page);
|
||||
|
@ -517,7 +517,7 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|||
hose->io_resource.start += io_virt_offset;
|
||||
hose->io_resource.end += io_virt_offset;
|
||||
|
||||
pr_debug(" hose->io_resource=0x%016lx...0x%016lx\n",
|
||||
pr_debug(" hose->io_resource=0x%016llx...0x%016llx\n",
|
||||
hose->io_resource.start, hose->io_resource.end);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -434,8 +434,8 @@ void __init setup_system(void)
|
|||
printk("Starting Linux PPC64 %s\n", init_utsname()->version);
|
||||
|
||||
printk("-----------------------------------------------------\n");
|
||||
printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size);
|
||||
printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size());
|
||||
printk("ppc64_pft_size = 0x%llx\n", ppc64_pft_size);
|
||||
printk("physicalMemorySize = 0x%llx\n", lmb_phys_mem_size());
|
||||
if (ppc64_caches.dline_size != 0x80)
|
||||
printk("ppc64_caches.dcache_line_size = 0x%x\n",
|
||||
ppc64_caches.dline_size);
|
||||
|
@ -493,7 +493,7 @@ static void __init emergency_stack_init(void)
|
|||
* bringup, we need to get at them in real mode. This means they
|
||||
* must also be within the RMO region.
|
||||
*/
|
||||
limit = min(0x10000000UL, lmb.rmo_size);
|
||||
limit = min(0x10000000ULL, lmb.rmo_size);
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
unsigned long sp;
|
||||
|
|
|
@ -87,7 +87,9 @@ SECTIONS
|
|||
/* The dummy segment contents for the bug workaround mentioned above
|
||||
near PHDRS. */
|
||||
.dummy : AT(ADDR(.dummy) - LOAD_OFFSET) {
|
||||
LONG(0xf177)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
LONG(0)
|
||||
} :kernel :dummy
|
||||
|
||||
/*
|
||||
|
|
|
@ -56,18 +56,11 @@
|
|||
|
||||
extern void loadcam_entry(unsigned int index);
|
||||
unsigned int tlbcam_index;
|
||||
unsigned int num_tlbcam_entries;
|
||||
static unsigned long __cam0, __cam1, __cam2;
|
||||
|
||||
#define NUM_TLBCAMS (16)
|
||||
|
||||
struct tlbcam {
|
||||
u32 MAS0;
|
||||
u32 MAS1;
|
||||
u32 MAS2;
|
||||
u32 MAS3;
|
||||
u32 MAS7;
|
||||
} TLBCAM[NUM_TLBCAMS];
|
||||
struct tlbcam TLBCAM[NUM_TLBCAMS];
|
||||
|
||||
struct tlbcamrange {
|
||||
unsigned long start;
|
||||
|
|
|
@ -75,6 +75,15 @@ extern void _tlbia(void);
|
|||
#endif /* CONFIG_PPC_MMU_NOHASH */
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
|
||||
struct tlbcam {
|
||||
u32 MAS0;
|
||||
u32 MAS1;
|
||||
u32 MAS2;
|
||||
u32 MAS3;
|
||||
u32 MAS7;
|
||||
};
|
||||
|
||||
extern void mapin_ram(void);
|
||||
extern int map_page(unsigned long va, phys_addr_t pa, int flags);
|
||||
extern void setbat(int index, unsigned long virt, phys_addr_t phys,
|
||||
|
@ -90,8 +99,6 @@ extern unsigned int rtas_data, rtas_size;
|
|||
struct hash_pte;
|
||||
extern struct hash_pte *Hash, *Hash_end;
|
||||
extern unsigned long Hash_size, Hash_mask;
|
||||
|
||||
extern unsigned int num_tlbcam_entries;
|
||||
#endif
|
||||
|
||||
extern unsigned long ioremap_bot;
|
||||
|
|
|
@ -251,8 +251,8 @@ void __init stabs_alloc(void)
|
|||
|
||||
paca[cpu].stab_addr = newstab;
|
||||
paca[cpu].stab_real = virt_to_abs(newstab);
|
||||
printk(KERN_INFO "Segment table for CPU %d at 0x%lx "
|
||||
"virtual, 0x%lx absolute\n",
|
||||
printk(KERN_INFO "Segment table for CPU %d at 0x%llx "
|
||||
"virtual, 0x%llx absolute\n",
|
||||
cpu, paca[cpu].stab_addr, paca[cpu].stab_real);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ static int pa6t_reg_setup(struct op_counter_config *ctr,
|
|||
for (pmc = 0; pmc < cur_cpu_spec->num_pmcs; pmc++) {
|
||||
/* counters are 40 bit. Move to cputable at some point? */
|
||||
reset_value[pmc] = (0x1UL << 39) - ctr[pmc].count;
|
||||
pr_debug("reset_value for pmc%u inited to 0x%lx\n",
|
||||
pr_debug("reset_value for pmc%u inited to 0x%llx\n",
|
||||
pmc, reset_value[pmc]);
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ static int pa6t_start(struct op_counter_config *ctr)
|
|||
|
||||
oprofile_running = 1;
|
||||
|
||||
pr_debug("start on cpu %d, mmcr0 %lx\n", smp_processor_id(), mmcr0);
|
||||
pr_debug("start on cpu %d, mmcr0 %llx\n", smp_processor_id(), mmcr0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ static void pa6t_stop(void)
|
|||
|
||||
oprofile_running = 0;
|
||||
|
||||
pr_debug("stop on cpu %d, mmcr0 %lx\n", smp_processor_id(), mmcr0);
|
||||
pr_debug("stop on cpu %d, mmcr0 %llx\n", smp_processor_id(), mmcr0);
|
||||
}
|
||||
|
||||
/* handle the perfmon overflow vector */
|
||||
|
|
|
@ -56,12 +56,12 @@ static struct clk *mpc5121_clk_get(struct device *dev, const char *id)
|
|||
int dev_match = 0;
|
||||
int id_match = 0;
|
||||
|
||||
if (dev == NULL && id == NULL)
|
||||
if (dev == NULL || id == NULL)
|
||||
return NULL;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
list_for_each_entry(p, &clocks, node) {
|
||||
if (dev && dev == p->dev)
|
||||
if (dev == p->dev)
|
||||
dev_match++;
|
||||
if (strcmp(id, p->name) == 0)
|
||||
id_match++;
|
||||
|
|
|
@ -363,11 +363,8 @@ static int mpc52xx_gpt_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
|||
{
|
||||
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
|
||||
struct mpc52xx_gpt __iomem *regs = mm_gc->regs;
|
||||
unsigned int ret;
|
||||
|
||||
return (in_be32(®s->status) & (1 << (31 - 23))) ? 1 : 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -196,6 +196,7 @@ static void mpc52xx_extirq_ack(unsigned int virq)
|
|||
|
||||
static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type)
|
||||
{
|
||||
struct irq_desc *desc = get_irq_desc(virq);
|
||||
u32 ctrl_reg, type;
|
||||
int irq;
|
||||
int l2irq;
|
||||
|
@ -222,6 +223,11 @@ static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type)
|
|||
type = 0;
|
||||
}
|
||||
|
||||
desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
|
||||
desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
|
||||
if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW))
|
||||
desc->status |= IRQ_LEVEL;
|
||||
|
||||
ctrl_reg = in_be32(&intr->ctrl);
|
||||
ctrl_reg &= ~(0x3 << (22 - (l2irq * 2)));
|
||||
ctrl_reg |= (type << (22 - (l2irq * 2)));
|
||||
|
@ -231,7 +237,7 @@ static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type)
|
|||
}
|
||||
|
||||
static struct irq_chip mpc52xx_extirq_irqchip = {
|
||||
.typename = " MPC52xx IRQ[0-3] ",
|
||||
.typename = "MPC52xx External",
|
||||
.mask = mpc52xx_extirq_mask,
|
||||
.unmask = mpc52xx_extirq_unmask,
|
||||
.ack = mpc52xx_extirq_ack,
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
obj-y := misc.o usb.o
|
||||
obj-$(CONFIG_SUSPEND) += suspend.o suspend-asm.o
|
||||
obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o
|
||||
obj-$(CONFIG_MPC831x_RDB) += mpc831x_rdb.o
|
||||
obj-$(CONFIG_MPC832x_RDB) += mpc832x_rdb.o
|
||||
obj-$(CONFIG_MPC834x_MDS) += mpc834x_mds.o
|
||||
|
|
|
@ -323,4 +323,15 @@ config SIMPLE_GPIO
|
|||
chip-selects, Ethernet/USB PHY's power and various other small
|
||||
on-board peripherals.
|
||||
|
||||
config MCU_MPC8349EMITX
|
||||
tristate "MPC8349E-mITX MCU driver"
|
||||
depends on I2C && PPC_83xx
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
help
|
||||
Say Y here to enable soft power-off functionality on the Freescale
|
||||
boards with the MPC8349E-mITX-compatible MCU chips. This driver will
|
||||
also register MCU GPIOs with the generic GPIO API, so you'll able
|
||||
to use MCU pins as GPIOs.
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -99,7 +99,7 @@ static void beatic_end_irq(unsigned int irq_plug)
|
|||
err = beat_downcount_of_interrupt(irq_plug);
|
||||
if (err != 0) {
|
||||
if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */
|
||||
panic("Failed to downcount IRQ! Error = %16lx", err);
|
||||
panic("Failed to downcount IRQ! Error = %16llx", err);
|
||||
|
||||
printk(KERN_ERR "IRQ over-downcounted, plug %d\n", irq_plug);
|
||||
}
|
||||
|
|
|
@ -405,7 +405,7 @@ static int __init celleb_setup_epci(struct device_node *node,
|
|||
hose->cfg_addr = ioremap(r.start, (r.end - r.start + 1));
|
||||
if (!hose->cfg_addr)
|
||||
goto error;
|
||||
pr_debug("EPCI: cfg_addr map 0x%016lx->0x%016lx + 0x%016lx\n",
|
||||
pr_debug("EPCI: cfg_addr map 0x%016llx->0x%016lx + 0x%016llx\n",
|
||||
r.start, (unsigned long)hose->cfg_addr, (r.end - r.start + 1));
|
||||
|
||||
if (of_address_to_resource(node, 2, &r))
|
||||
|
@ -413,7 +413,7 @@ static int __init celleb_setup_epci(struct device_node *node,
|
|||
hose->cfg_data = ioremap(r.start, (r.end - r.start + 1));
|
||||
if (!hose->cfg_data)
|
||||
goto error;
|
||||
pr_debug("EPCI: cfg_data map 0x%016lx->0x%016lx + 0x%016lx\n",
|
||||
pr_debug("EPCI: cfg_data map 0x%016llx->0x%016lx + 0x%016llx\n",
|
||||
r.start, (unsigned long)hose->cfg_data, (r.end - r.start + 1));
|
||||
|
||||
hose->ops = &celleb_epci_ops;
|
||||
|
|
|
@ -855,7 +855,7 @@ static int __init cell_iommu_init_disabled(void)
|
|||
*/
|
||||
if (np && size < lmb_end_of_DRAM()) {
|
||||
printk(KERN_WARNING "iommu: force-enabled, dma window"
|
||||
" (%ldMB) smaller than total memory (%ldMB)\n",
|
||||
" (%ldMB) smaller than total memory (%lldMB)\n",
|
||||
size >> 20, lmb_end_of_DRAM() >> 20);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -985,7 +985,7 @@ static void cell_dma_dev_setup_fixed(struct device *dev)
|
|||
addr = cell_iommu_get_fixed_address(dev) + dma_iommu_fixed_base;
|
||||
archdata->dma_data = (void *)addr;
|
||||
|
||||
dev_dbg(dev, "iommu: fixed addr = %lx\n", addr);
|
||||
dev_dbg(dev, "iommu: fixed addr = %llx\n", addr);
|
||||
}
|
||||
|
||||
static void insert_16M_pte(unsigned long addr, unsigned long *ptab,
|
||||
|
|
|
@ -38,16 +38,16 @@ static void dump_fir(int cpu)
|
|||
/* Todo: do some nicer parsing of bits and based on them go down
|
||||
* to other sub-units FIRs and not only IIC
|
||||
*/
|
||||
printk(KERN_ERR "Global Checkstop FIR : 0x%016lx\n",
|
||||
printk(KERN_ERR "Global Checkstop FIR : 0x%016llx\n",
|
||||
in_be64(&pregs->checkstop_fir));
|
||||
printk(KERN_ERR "Global Recoverable FIR : 0x%016lx\n",
|
||||
printk(KERN_ERR "Global Recoverable FIR : 0x%016llx\n",
|
||||
in_be64(&pregs->checkstop_fir));
|
||||
printk(KERN_ERR "Global MachineCheck FIR : 0x%016lx\n",
|
||||
printk(KERN_ERR "Global MachineCheck FIR : 0x%016llx\n",
|
||||
in_be64(&pregs->spec_att_mchk_fir));
|
||||
|
||||
if (iregs == NULL)
|
||||
return;
|
||||
printk(KERN_ERR "IOC FIR : 0x%016lx\n",
|
||||
printk(KERN_ERR "IOC FIR : 0x%016llx\n",
|
||||
in_be64(&iregs->ioc_fir));
|
||||
|
||||
}
|
||||
|
|
|
@ -151,7 +151,7 @@ static inline void spu_load_slb(struct spu *spu, int slbe, struct spu_slb *slb)
|
|||
{
|
||||
struct spu_priv2 __iomem *priv2 = spu->priv2;
|
||||
|
||||
pr_debug("%s: adding SLB[%d] 0x%016lx 0x%016lx\n",
|
||||
pr_debug("%s: adding SLB[%d] 0x%016llx 0x%016llx\n",
|
||||
__func__, slbe, slb->vsid, slb->esid);
|
||||
|
||||
out_be64(&priv2->slb_index_W, slbe);
|
||||
|
@ -221,7 +221,7 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
|
|||
{
|
||||
int ret;
|
||||
|
||||
pr_debug("%s, %lx, %lx\n", __func__, dsisr, ea);
|
||||
pr_debug("%s, %llx, %lx\n", __func__, dsisr, ea);
|
||||
|
||||
/*
|
||||
* Handle kernel space hash faults immediately. User hash
|
||||
|
|
|
@ -54,7 +54,7 @@ long spu_sys_callback(struct spu_syscall_block *s)
|
|||
long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);
|
||||
|
||||
if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
|
||||
pr_debug("%s: invalid syscall #%ld", __func__, s->nr_ret);
|
||||
pr_debug("%s: invalid syscall #%lld", __func__, s->nr_ret);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ static ssize_t do_coredump_read(int num, struct spu_context *ctx, void *buffer,
|
|||
return spufs_coredump_read[num].read(ctx, buffer, size, off);
|
||||
|
||||
data = spufs_coredump_read[num].get(ctx);
|
||||
ret = snprintf(buffer, size, "0x%.16lx", data);
|
||||
ret = snprintf(buffer, size, "0x%.16llx", data);
|
||||
if (ret >= size)
|
||||
return size;
|
||||
return ++ret; /* count trailing NULL */
|
||||
|
|
|
@ -132,7 +132,7 @@ int spufs_handle_class1(struct spu_context *ctx)
|
|||
|
||||
spuctx_switch_state(ctx, SPU_UTIL_IOWAIT);
|
||||
|
||||
pr_debug("ctx %p: ea %016lx, dsisr %016lx state %d\n", ctx, ea,
|
||||
pr_debug("ctx %p: ea %016llx, dsisr %016llx state %d\n", ctx, ea,
|
||||
dsisr, ctx->state);
|
||||
|
||||
ctx->stats.hash_flt++;
|
||||
|
|
|
@ -1654,7 +1654,7 @@ out:
|
|||
|
||||
static int spufs_check_valid_dma(struct mfc_dma_command *cmd)
|
||||
{
|
||||
pr_debug("queueing DMA %x %lx %x %x %x\n", cmd->lsa,
|
||||
pr_debug("queueing DMA %x %llx %x %x %x\n", cmd->lsa,
|
||||
cmd->ea, cmd->size, cmd->tag, cmd->cmd);
|
||||
|
||||
switch (cmd->cmd) {
|
||||
|
@ -1671,7 +1671,7 @@ static int spufs_check_valid_dma(struct mfc_dma_command *cmd)
|
|||
}
|
||||
|
||||
if ((cmd->lsa & 0xf) != (cmd->ea &0xf)) {
|
||||
pr_debug("invalid DMA alignment, ea %lx lsa %x\n",
|
||||
pr_debug("invalid DMA alignment, ea %llx lsa %x\n",
|
||||
cmd->ea, cmd->lsa);
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -2633,7 +2633,7 @@ static int spufs_show_ctx(struct seq_file *s, void *private)
|
|||
}
|
||||
|
||||
seq_printf(s, "%c flgs(%lx) sflgs(%lx) pri(%d) ts(%d) spu(%02d)"
|
||||
" %c %lx %lx %lx %lx %x %x\n",
|
||||
" %c %llx %llx %llx %llx %x %x\n",
|
||||
ctx->state == SPU_STATE_SAVED ? 'S' : 'R',
|
||||
ctx->flags,
|
||||
ctx->sched_flags,
|
||||
|
|
|
@ -249,6 +249,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5288, quirk_uli5288);
|
|||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x5249, quirk_final_uli5249);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, 0x1575, quirk_final_uli1575);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AL, 0x5229, quirk_uli5229);
|
||||
|
||||
static void __devinit hpcd_quirk_uli1575(struct pci_dev *dev)
|
||||
{
|
||||
|
|
|
@ -66,7 +66,7 @@ static int tce_build_iSeries(struct iommu_table *tbl, long index, long npages,
|
|||
|
||||
rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, tce);
|
||||
if (rc)
|
||||
panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n",
|
||||
panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n",
|
||||
rc);
|
||||
index++;
|
||||
uaddr += TCE_PAGE_SIZE;
|
||||
|
@ -81,7 +81,7 @@ static void tce_free_iSeries(struct iommu_table *tbl, long index, long npages)
|
|||
while (npages--) {
|
||||
rc = HvCallXm_setTce((u64)tbl->it_index, (u64)index, 0);
|
||||
if (rc)
|
||||
panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n",
|
||||
panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%llx\n",
|
||||
rc);
|
||||
index++;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
#include <asm/pmac_low_i2c.h>
|
||||
#include <asm/pmac_pfunc.h>
|
||||
|
||||
#define DEBUG
|
||||
#undef DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DBG(fmt...) udbg_printf(fmt)
|
||||
|
|
|
@ -127,10 +127,10 @@ static int tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum,
|
|||
}
|
||||
|
||||
if (rc && printk_ratelimit()) {
|
||||
printk("tce_build_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc);
|
||||
printk("\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%lx\n", (u64)tcenum);
|
||||
printk("\ttce val = 0x%lx\n", tce );
|
||||
printk("tce_build_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc);
|
||||
printk("\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%llx\n", (u64)tcenum);
|
||||
printk("\ttce val = 0x%llx\n", tce );
|
||||
show_stack(current, (unsigned long *)__get_SP());
|
||||
}
|
||||
|
||||
|
@ -210,10 +210,10 @@ static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
|
|||
}
|
||||
|
||||
if (rc && printk_ratelimit()) {
|
||||
printk("tce_buildmulti_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc);
|
||||
printk("\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk("\tnpages = 0x%lx\n", (u64)npages);
|
||||
printk("\ttce[0] val = 0x%lx\n", tcep[0]);
|
||||
printk("tce_buildmulti_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc);
|
||||
printk("\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
printk("\tnpages = 0x%llx\n", (u64)npages);
|
||||
printk("\ttce[0] val = 0x%llx\n", tcep[0]);
|
||||
show_stack(current, (unsigned long *)__get_SP());
|
||||
}
|
||||
return ret;
|
||||
|
@ -227,9 +227,9 @@ static void tce_free_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages
|
|||
rc = plpar_tce_put((u64)tbl->it_index, (u64)tcenum << 12, 0);
|
||||
|
||||
if (rc && printk_ratelimit()) {
|
||||
printk("tce_free_pSeriesLP: plpar_tce_put failed. rc=%ld\n", rc);
|
||||
printk("\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%lx\n", (u64)tcenum);
|
||||
printk("tce_free_pSeriesLP: plpar_tce_put failed. rc=%lld\n", rc);
|
||||
printk("\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%llx\n", (u64)tcenum);
|
||||
show_stack(current, (unsigned long *)__get_SP());
|
||||
}
|
||||
|
||||
|
@ -246,9 +246,9 @@ static void tce_freemulti_pSeriesLP(struct iommu_table *tbl, long tcenum, long n
|
|||
|
||||
if (rc && printk_ratelimit()) {
|
||||
printk("tce_freemulti_pSeriesLP: plpar_tce_stuff failed\n");
|
||||
printk("\trc = %ld\n", rc);
|
||||
printk("\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk("\tnpages = 0x%lx\n", (u64)npages);
|
||||
printk("\trc = %lld\n", rc);
|
||||
printk("\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
printk("\tnpages = 0x%llx\n", (u64)npages);
|
||||
show_stack(current, (unsigned long *)__get_SP());
|
||||
}
|
||||
}
|
||||
|
@ -261,10 +261,9 @@ static unsigned long tce_get_pSeriesLP(struct iommu_table *tbl, long tcenum)
|
|||
rc = plpar_tce_get((u64)tbl->it_index, (u64)tcenum << 12, &tce_ret);
|
||||
|
||||
if (rc && printk_ratelimit()) {
|
||||
printk("tce_get_pSeriesLP: plpar_tce_get failed. rc=%ld\n",
|
||||
rc);
|
||||
printk("\tindex = 0x%lx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%lx\n", (u64)tcenum);
|
||||
printk("tce_get_pSeriesLP: plpar_tce_get failed. rc=%lld\n", rc);
|
||||
printk("\tindex = 0x%llx\n", (u64)tbl->it_index);
|
||||
printk("\ttcenum = 0x%llx\n", (u64)tcenum);
|
||||
show_stack(current, (unsigned long *)__get_SP());
|
||||
}
|
||||
|
||||
|
|
|
@ -28,63 +28,104 @@
|
|||
#include <sysdev/fsl_pci.h>
|
||||
|
||||
#if defined(CONFIG_PPC_85xx) || defined(CONFIG_PPC_86xx)
|
||||
static int __init setup_one_atmu(struct ccsr_pci __iomem *pci,
|
||||
unsigned int index, const struct resource *res,
|
||||
resource_size_t offset)
|
||||
{
|
||||
resource_size_t pci_addr = res->start - offset;
|
||||
resource_size_t phys_addr = res->start;
|
||||
resource_size_t size = res->end - res->start + 1;
|
||||
u32 flags = 0x80044000; /* enable & mem R/W */
|
||||
unsigned int i;
|
||||
|
||||
pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
|
||||
(u64)res->start, (u64)size);
|
||||
|
||||
if (res->flags & IORESOURCE_PREFETCH)
|
||||
flags |= 0x10000000; /* enable relaxed ordering */
|
||||
|
||||
for (i = 0; size > 0; i++) {
|
||||
unsigned int bits = min(__ilog2(size),
|
||||
__ffs(pci_addr | phys_addr));
|
||||
|
||||
if (index + i >= 5)
|
||||
return -1;
|
||||
|
||||
out_be32(&pci->pow[index + i].potar, pci_addr >> 12);
|
||||
out_be32(&pci->pow[index + i].potear, (u64)pci_addr >> 44);
|
||||
out_be32(&pci->pow[index + i].powbar, phys_addr >> 12);
|
||||
out_be32(&pci->pow[index + i].powar, flags | (bits - 1));
|
||||
|
||||
pci_addr += (resource_size_t)1U << bits;
|
||||
phys_addr += (resource_size_t)1U << bits;
|
||||
size -= (resource_size_t)1U << bits;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/* atmu setup for fsl pci/pcie controller */
|
||||
static void __init setup_pci_atmu(struct pci_controller *hose,
|
||||
struct resource *rsrc)
|
||||
{
|
||||
struct ccsr_pci __iomem *pci;
|
||||
int i;
|
||||
int i, j, n;
|
||||
|
||||
pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
|
||||
(u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1);
|
||||
pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1);
|
||||
if (!pci) {
|
||||
dev_err(hose->parent, "Unable to map ATMU registers\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Disable all windows (except powar0 since its ignored) */
|
||||
/* Disable all windows (except powar0 since it's ignored) */
|
||||
for(i = 1; i < 5; i++)
|
||||
out_be32(&pci->pow[i].powar, 0);
|
||||
for(i = 0; i < 3; i++)
|
||||
out_be32(&pci->piw[i].piwar, 0);
|
||||
|
||||
/* Setup outbound MEM window */
|
||||
for(i = 0; i < 3; i++)
|
||||
if (hose->mem_resources[i].flags & IORESOURCE_MEM){
|
||||
resource_size_t pci_addr_start =
|
||||
hose->mem_resources[i].start -
|
||||
hose->pci_mem_offset;
|
||||
pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
|
||||
(u64)hose->mem_resources[i].start,
|
||||
(u64)hose->mem_resources[i].end
|
||||
- (u64)hose->mem_resources[i].start + 1);
|
||||
out_be32(&pci->pow[i+1].potar, (pci_addr_start >> 12));
|
||||
out_be32(&pci->pow[i+1].potear, 0);
|
||||
out_be32(&pci->pow[i+1].powbar,
|
||||
(hose->mem_resources[i].start >> 12));
|
||||
/* Enable, Mem R/W */
|
||||
out_be32(&pci->pow[i+1].powar, 0x80044000
|
||||
| (__ilog2(hose->mem_resources[i].end
|
||||
- hose->mem_resources[i].start + 1) - 1));
|
||||
for(i = 0, j = 1; i < 3; i++) {
|
||||
if (!(hose->mem_resources[i].flags & IORESOURCE_MEM))
|
||||
continue;
|
||||
|
||||
n = setup_one_atmu(pci, j, &hose->mem_resources[i],
|
||||
hose->pci_mem_offset);
|
||||
|
||||
if (n < 0 || j >= 5) {
|
||||
pr_err("Ran out of outbound PCI ATMUs for resource %d!\n", i);
|
||||
hose->mem_resources[i].flags |= IORESOURCE_DISABLED;
|
||||
} else
|
||||
j += n;
|
||||
}
|
||||
|
||||
/* Setup outbound IO window */
|
||||
if (hose->io_resource.flags & IORESOURCE_IO) {
|
||||
if (j >= 5) {
|
||||
pr_err("Ran out of outbound PCI ATMUs for IO resource\n");
|
||||
} else {
|
||||
pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
|
||||
"phy base 0x%016llx.\n",
|
||||
(u64)hose->io_resource.start,
|
||||
(u64)hose->io_resource.end - (u64)hose->io_resource.start + 1,
|
||||
(u64)hose->io_base_phys);
|
||||
out_be32(&pci->pow[i+1].potar, (hose->io_resource.start >> 12));
|
||||
out_be32(&pci->pow[i+1].potear, 0);
|
||||
out_be32(&pci->pow[i+1].powbar, (hose->io_base_phys >> 12));
|
||||
out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12));
|
||||
out_be32(&pci->pow[j].potear, 0);
|
||||
out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12));
|
||||
/* Enable, IO R/W */
|
||||
out_be32(&pci->pow[i+1].powar, 0x80088000
|
||||
out_be32(&pci->pow[j].powar, 0x80088000
|
||||
| (__ilog2(hose->io_resource.end
|
||||
- hose->io_resource.start + 1) - 1));
|
||||
}
|
||||
}
|
||||
|
||||
/* Setup 2G inbound Memory Window @ 1 */
|
||||
out_be32(&pci->piw[2].pitar, 0x00000000);
|
||||
out_be32(&pci->piw[2].piwbar,0x00000000);
|
||||
out_be32(&pci->piw[2].piwar, PIWAR_2G);
|
||||
|
||||
iounmap(pci);
|
||||
}
|
||||
|
||||
static void __init setup_pci_cmd(struct pci_controller *hose)
|
||||
|
|
|
@ -435,7 +435,7 @@ static void __init mpic_scan_ht_msi(struct mpic *mpic, u8 __iomem *devbase,
|
|||
addr = addr | ((u64)readl(base + HT_MSI_ADDR_HI) << 32);
|
||||
}
|
||||
|
||||
printk(KERN_DEBUG "mpic: - HT:%02x.%x %s MSI mapping found @ 0x%lx\n",
|
||||
printk(KERN_DEBUG "mpic: - HT:%02x.%x %s MSI mapping found @ 0x%llx\n",
|
||||
PCI_SLOT(devfn), PCI_FUNC(devfn),
|
||||
flags & HT_MSI_FLAGS_ENABLE ? "enabled" : "disabled", addr);
|
||||
|
||||
|
|
|
@ -1206,6 +1206,7 @@ static struct of_device_id ace_of_match[] __devinitdata = {
|
|||
{ .compatible = "xlnx,opb-sysace-1.00.b", },
|
||||
{ .compatible = "xlnx,opb-sysace-1.00.c", },
|
||||
{ .compatible = "xlnx,xps-sysace-1.00.a", },
|
||||
{ .compatible = "xlnx,sysace", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ace_of_match);
|
||||
|
|
|
@ -103,7 +103,7 @@ static ssize_t
|
|||
bsr_len_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct bsr_dev *bsr_dev = dev_get_drvdata(dev);
|
||||
return sprintf(buf, "%lu\n", bsr_dev->bsr_len);
|
||||
return sprintf(buf, "%llu\n", bsr_dev->bsr_len);
|
||||
}
|
||||
|
||||
static struct device_attribute bsr_dev_attrs[] = {
|
||||
|
|
|
@ -318,6 +318,7 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
|
|||
} /* else count == 0 */
|
||||
|
||||
tty->driver_data = hp;
|
||||
if (!hp->irq_requested)
|
||||
tty->low_latency = 1; /* Makes flushes to ldisc synchronous. */
|
||||
|
||||
hp->tty = tty;
|
||||
|
@ -764,13 +765,11 @@ struct hvc_struct __devinit *hvc_alloc(uint32_t vtermno, int data,
|
|||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
hp = kmalloc(ALIGN(sizeof(*hp), sizeof(long)) + outbuf_size,
|
||||
hp = kzalloc(ALIGN(sizeof(*hp), sizeof(long)) + outbuf_size,
|
||||
GFP_KERNEL);
|
||||
if (!hp)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
memset(hp, 0x00, sizeof(*hp));
|
||||
|
||||
hp->vtermno = vtermno;
|
||||
hp->data = data;
|
||||
hp->ops = ops;
|
||||
|
@ -876,8 +875,11 @@ static int hvc_init(void)
|
|||
goto stop_thread;
|
||||
}
|
||||
|
||||
/* FIXME: This mb() seems completely random. Remove it. */
|
||||
mb();
|
||||
/*
|
||||
* Make sure tty is fully registered before allowing it to be
|
||||
* found by hvc_console_device.
|
||||
*/
|
||||
smp_mb();
|
||||
hvc_driver = drv;
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ int notifier_add_irq(struct hvc_struct *hp, int irq)
|
|||
|
||||
void notifier_del_irq(struct hvc_struct *hp, int irq)
|
||||
{
|
||||
if (!irq)
|
||||
if (!hp->irq_requested)
|
||||
return;
|
||||
free_irq(irq, hp);
|
||||
hp->irq_requested = 0;
|
||||
|
|
|
@ -139,15 +139,4 @@ config SENSORS_TSL2550
|
|||
This driver can also be built as a module. If so, the module
|
||||
will be called tsl2550.
|
||||
|
||||
config MCU_MPC8349EMITX
|
||||
tristate "MPC8349E-mITX MCU driver"
|
||||
depends on I2C && PPC_83xx
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
help
|
||||
Say Y here to enable soft power-off functionality on the Freescale
|
||||
boards with the MPC8349E-mITX-compatible MCU chips. This driver will
|
||||
also register MCU GPIOs with the generic GPIO API, so you'll able
|
||||
to use MCU pins as GPIOs.
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -19,7 +19,6 @@ obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
|
|||
obj-$(CONFIG_PCF8575) += pcf8575.o
|
||||
obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
|
||||
obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
|
||||
obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o
|
||||
|
||||
ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
|
||||
EXTRA_CFLAGS += -DDEBUG
|
||||
|
|
|
@ -132,7 +132,7 @@ void ehea_dump(void *adr, int len, char *msg)
|
|||
int x;
|
||||
unsigned char *deb = adr;
|
||||
for (x = 0; x < len; x += 16) {
|
||||
printk(DRV_NAME " %s adr=%p ofs=%04x %016lx %016lx\n", msg,
|
||||
printk(DRV_NAME " %s adr=%p ofs=%04x %016llx %016llx\n", msg,
|
||||
deb, x, *((u64 *)&deb[0]), *((u64 *)&deb[8]));
|
||||
deb += 16;
|
||||
}
|
||||
|
@ -883,7 +883,7 @@ static irqreturn_t ehea_qp_aff_irq_handler(int irq, void *param)
|
|||
|
||||
while (eqe) {
|
||||
qp_token = EHEA_BMASK_GET(EHEA_EQE_QP_TOKEN, eqe->entry);
|
||||
ehea_error("QP aff_err: entry=0x%lx, token=0x%x",
|
||||
ehea_error("QP aff_err: entry=0x%llx, token=0x%x",
|
||||
eqe->entry, qp_token);
|
||||
|
||||
qp = port->port_res[qp_token].qp;
|
||||
|
@ -1159,7 +1159,7 @@ static void ehea_parse_eqe(struct ehea_adapter *adapter, u64 eqe)
|
|||
netif_stop_queue(port->netdev);
|
||||
break;
|
||||
default:
|
||||
ehea_error("unknown event code %x, eqe=0x%lX", ec, eqe);
|
||||
ehea_error("unknown event code %x, eqe=0x%llX", ec, eqe);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1971,7 +1971,7 @@ static void ehea_set_multicast_list(struct net_device *dev)
|
|||
}
|
||||
|
||||
if (dev->mc_count > port->adapter->max_mc_mac) {
|
||||
ehea_info("Mcast registration limit reached (0x%lx). "
|
||||
ehea_info("Mcast registration limit reached (0x%llx). "
|
||||
"Use ALLMULTI!",
|
||||
port->adapter->max_mc_mac);
|
||||
goto out;
|
||||
|
|
|
@ -168,7 +168,7 @@ struct ehea_cq *ehea_create_cq(struct ehea_adapter *adapter,
|
|||
cq->fw_handle, rpage, 1);
|
||||
if (hret < H_SUCCESS) {
|
||||
ehea_error("register_rpage_cq failed ehea_cq=%p "
|
||||
"hret=%lx counter=%i act_pages=%i",
|
||||
"hret=%llx counter=%i act_pages=%i",
|
||||
cq, hret, counter, cq->attr.nr_pages);
|
||||
goto out_kill_hwq;
|
||||
}
|
||||
|
@ -178,13 +178,13 @@ struct ehea_cq *ehea_create_cq(struct ehea_adapter *adapter,
|
|||
|
||||
if ((hret != H_SUCCESS) || (vpage)) {
|
||||
ehea_error("registration of pages not "
|
||||
"complete hret=%lx\n", hret);
|
||||
"complete hret=%llx\n", hret);
|
||||
goto out_kill_hwq;
|
||||
}
|
||||
} else {
|
||||
if (hret != H_PAGE_REGISTERED) {
|
||||
ehea_error("CQ: registration of page failed "
|
||||
"hret=%lx\n", hret);
|
||||
"hret=%llx\n", hret);
|
||||
goto out_kill_hwq;
|
||||
}
|
||||
}
|
||||
|
@ -986,15 +986,15 @@ void print_error_data(u64 *data)
|
|||
length = EHEA_PAGESIZE;
|
||||
|
||||
if (type == 0x8) /* Queue Pair */
|
||||
ehea_error("QP (resource=%lX) state: AER=0x%lX, AERR=0x%lX, "
|
||||
"port=%lX", resource, data[6], data[12], data[22]);
|
||||
ehea_error("QP (resource=%llX) state: AER=0x%llX, AERR=0x%llX, "
|
||||
"port=%llX", resource, data[6], data[12], data[22]);
|
||||
|
||||
if (type == 0x4) /* Completion Queue */
|
||||
ehea_error("CQ (resource=%lX) state: AER=0x%lX", resource,
|
||||
ehea_error("CQ (resource=%llX) state: AER=0x%llX", resource,
|
||||
data[6]);
|
||||
|
||||
if (type == 0x3) /* Event Queue */
|
||||
ehea_error("EQ (resource=%lX) state: AER=0x%lX", resource,
|
||||
ehea_error("EQ (resource=%llX) state: AER=0x%llX", resource,
|
||||
data[6]);
|
||||
|
||||
ehea_dump(data, length, "error data");
|
||||
|
@ -1016,11 +1016,11 @@ void ehea_error_data(struct ehea_adapter *adapter, u64 res_handle)
|
|||
rblock);
|
||||
|
||||
if (ret == H_R_STATE)
|
||||
ehea_error("No error data is available: %lX.", res_handle);
|
||||
ehea_error("No error data is available: %llX.", res_handle);
|
||||
else if (ret == H_SUCCESS)
|
||||
print_error_data(rblock);
|
||||
else
|
||||
ehea_error("Error data could not be fetched: %lX", res_handle);
|
||||
ehea_error("Error data could not be fetched: %llX", res_handle);
|
||||
|
||||
kfree(rblock);
|
||||
}
|
||||
|
|
|
@ -602,7 +602,7 @@ static int ibmveth_open(struct net_device *netdev)
|
|||
|
||||
if(lpar_rc != H_SUCCESS) {
|
||||
ibmveth_error_printk("h_register_logical_lan failed with %ld\n", lpar_rc);
|
||||
ibmveth_error_printk("buffer TCE:0x%lx filter TCE:0x%lx rxq desc:0x%lx MAC:0x%lx\n",
|
||||
ibmveth_error_printk("buffer TCE:0x%llx filter TCE:0x%llx rxq desc:0x%llx MAC:0x%llx\n",
|
||||
adapter->buffer_list_dma,
|
||||
adapter->filter_list_dma,
|
||||
rxq_desc.desc,
|
||||
|
@ -1378,13 +1378,13 @@ static int ibmveth_show(struct seq_file *seq, void *v)
|
|||
seq_printf(seq, "Firmware MAC: %pM\n", firmware_mac);
|
||||
|
||||
seq_printf(seq, "\nAdapter Statistics:\n");
|
||||
seq_printf(seq, " TX: vio_map_single failres: %ld\n", adapter->tx_map_failed);
|
||||
seq_printf(seq, " send failures: %ld\n", adapter->tx_send_failed);
|
||||
seq_printf(seq, " RX: replenish task cycles: %ld\n", adapter->replenish_task_cycles);
|
||||
seq_printf(seq, " alloc_skb_failures: %ld\n", adapter->replenish_no_mem);
|
||||
seq_printf(seq, " add buffer failures: %ld\n", adapter->replenish_add_buff_failure);
|
||||
seq_printf(seq, " invalid buffers: %ld\n", adapter->rx_invalid_buffer);
|
||||
seq_printf(seq, " no buffers: %ld\n", adapter->rx_no_buffer);
|
||||
seq_printf(seq, " TX: vio_map_single failres: %lld\n", adapter->tx_map_failed);
|
||||
seq_printf(seq, " send failures: %lld\n", adapter->tx_send_failed);
|
||||
seq_printf(seq, " RX: replenish task cycles: %lld\n", adapter->replenish_task_cycles);
|
||||
seq_printf(seq, " alloc_skb_failures: %lld\n", adapter->replenish_no_mem);
|
||||
seq_printf(seq, " add buffer failures: %lld\n", adapter->replenish_add_buff_failure);
|
||||
seq_printf(seq, " invalid buffers: %lld\n", adapter->rx_invalid_buffer);
|
||||
seq_printf(seq, " no buffers: %lld\n", adapter->rx_no_buffer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -429,7 +429,7 @@ SIMPLE_PORT_ATTR(promiscuous);
|
|||
SIMPLE_PORT_ATTR(num_mcast);
|
||||
CUSTOM_PORT_ATTR(lpar_map, "0x%X\n", port->lpar_map);
|
||||
CUSTOM_PORT_ATTR(stopped_map, "0x%X\n", port->stopped_map);
|
||||
CUSTOM_PORT_ATTR(mac_addr, "0x%lX\n", port->mac_addr);
|
||||
CUSTOM_PORT_ATTR(mac_addr, "0x%llX\n", port->mac_addr);
|
||||
|
||||
#define GET_PORT_ATTR(_name) (&veth_port_attr_##_name.attr)
|
||||
static struct attribute *veth_port_default_attrs[] = {
|
||||
|
|
|
@ -712,7 +712,7 @@ static inline void pasemi_mac_rx_error(const struct pasemi_mac *mac,
|
|||
rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if));
|
||||
ccmdsta = read_dma_reg(PAS_DMA_RXCHAN_CCMDSTA(chan->chno));
|
||||
|
||||
printk(KERN_ERR "pasemi_mac: rx error. macrx %016lx, rx status %lx\n",
|
||||
printk(KERN_ERR "pasemi_mac: rx error. macrx %016llx, rx status %llx\n",
|
||||
macrx, *chan->status);
|
||||
|
||||
printk(KERN_ERR "pasemi_mac: rcmdsta %08x ccmdsta %08x\n",
|
||||
|
@ -730,8 +730,8 @@ static inline void pasemi_mac_tx_error(const struct pasemi_mac *mac,
|
|||
|
||||
cmdsta = read_dma_reg(PAS_DMA_TXCHAN_TCMDSTA(chan->chno));
|
||||
|
||||
printk(KERN_ERR "pasemi_mac: tx error. mactx 0x%016lx, "\
|
||||
"tx status 0x%016lx\n", mactx, *chan->status);
|
||||
printk(KERN_ERR "pasemi_mac: tx error. mactx 0x%016llx, "\
|
||||
"tx status 0x%016llx\n", mactx, *chan->status);
|
||||
|
||||
printk(KERN_ERR "pasemi_mac: tcmdsta 0x%08x\n", cmdsta);
|
||||
}
|
||||
|
|
|
@ -66,4 +66,23 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
|
|||
}
|
||||
EXPORT_SYMBOL(of_register_i2c_devices);
|
||||
|
||||
static int of_dev_node_match(struct device *dev, void *data)
|
||||
{
|
||||
return dev_archdata_get_node(&dev->archdata) == data;
|
||||
}
|
||||
|
||||
/* must call put_device() when done with returned i2c_client device */
|
||||
struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = bus_find_device(&i2c_bus_type, NULL, node,
|
||||
of_dev_node_match);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
return to_i2c_client(dev);
|
||||
}
|
||||
EXPORT_SYMBOL(of_find_i2c_device_by_node);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -297,7 +297,7 @@ static int __devinit electra_cf_probe(struct of_device *ofdev,
|
|||
goto fail3;
|
||||
}
|
||||
|
||||
dev_info(device, "at mem 0x%lx io 0x%lx irq %d\n",
|
||||
dev_info(device, "at mem 0x%lx io 0x%llx irq %d\n",
|
||||
cf->mem_phys, io.start, cf->irq);
|
||||
|
||||
cf->active = 1;
|
||||
|
|
|
@ -1061,7 +1061,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
|
|||
}
|
||||
|
||||
sdev_printk(KERN_INFO, cmd->device,
|
||||
"aborting command. lun 0x%lx, tag 0x%lx\n",
|
||||
"aborting command. lun 0x%llx, tag 0x%llx\n",
|
||||
(((u64) lun) << 48), (u64) found_evt);
|
||||
|
||||
wait_for_completion(&evt->comp);
|
||||
|
@ -1082,7 +1082,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
|
|||
if (rsp_rc) {
|
||||
if (printk_ratelimit())
|
||||
sdev_printk(KERN_WARNING, cmd->device,
|
||||
"abort code %d for task tag 0x%lx\n",
|
||||
"abort code %d for task tag 0x%llx\n",
|
||||
rsp_rc, tsk_mgmt->task_tag);
|
||||
return FAILED;
|
||||
}
|
||||
|
@ -1102,12 +1102,12 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
|
|||
|
||||
if (found_evt == NULL) {
|
||||
spin_unlock_irqrestore(hostdata->host->host_lock, flags);
|
||||
sdev_printk(KERN_INFO, cmd->device, "aborted task tag 0x%lx completed\n",
|
||||
sdev_printk(KERN_INFO, cmd->device, "aborted task tag 0x%llx completed\n",
|
||||
tsk_mgmt->task_tag);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
sdev_printk(KERN_INFO, cmd->device, "successfully aborted task tag 0x%lx\n",
|
||||
sdev_printk(KERN_INFO, cmd->device, "successfully aborted task tag 0x%llx\n",
|
||||
tsk_mgmt->task_tag);
|
||||
|
||||
cmd->result = (DID_ABORT << 16);
|
||||
|
@ -1182,7 +1182,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
|||
return FAILED;
|
||||
}
|
||||
|
||||
sdev_printk(KERN_INFO, cmd->device, "resetting device. lun 0x%lx\n",
|
||||
sdev_printk(KERN_INFO, cmd->device, "resetting device. lun 0x%llx\n",
|
||||
(((u64) lun) << 48));
|
||||
|
||||
wait_for_completion(&evt->comp);
|
||||
|
@ -1203,7 +1203,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
|||
if (rsp_rc) {
|
||||
if (printk_ratelimit())
|
||||
sdev_printk(KERN_WARNING, cmd->device,
|
||||
"reset code %d for task tag 0x%lx\n",
|
||||
"reset code %d for task tag 0x%llx\n",
|
||||
rsp_rc, tsk_mgmt->task_tag);
|
||||
return FAILED;
|
||||
}
|
||||
|
|
|
@ -15,12 +15,15 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_spi.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/spi_bitbang.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <syslib/virtex_devices.h>
|
||||
|
||||
#define XILINX_SPI_NAME "xilinx_spi"
|
||||
|
||||
/* Register definitions as per "OPB Serial Peripheral Interface (SPI) (v1.00e)
|
||||
|
@ -144,23 +147,14 @@ static int xilinx_spi_setup_transfer(struct spi_device *spi,
|
|||
struct spi_transfer *t)
|
||||
{
|
||||
u8 bits_per_word;
|
||||
u32 hz;
|
||||
struct xilinx_spi *xspi = spi_master_get_devdata(spi->master);
|
||||
|
||||
bits_per_word = (t) ? t->bits_per_word : spi->bits_per_word;
|
||||
hz = (t) ? t->speed_hz : spi->max_speed_hz;
|
||||
if (bits_per_word != 8) {
|
||||
dev_err(&spi->dev, "%s, unsupported bits_per_word=%d\n",
|
||||
__func__, bits_per_word);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (hz && xspi->speed_hz > hz) {
|
||||
dev_err(&spi->dev, "%s, unsupported clock rate %uHz\n",
|
||||
__func__, hz);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -304,32 +298,38 @@ static irqreturn_t xilinx_spi_irq(int irq, void *dev_id)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int __init xilinx_spi_probe(struct platform_device *dev)
|
||||
static int __init xilinx_spi_of_probe(struct of_device *ofdev,
|
||||
const struct of_device_id *match)
|
||||
{
|
||||
int ret = 0;
|
||||
struct spi_master *master;
|
||||
struct xilinx_spi *xspi;
|
||||
struct xspi_platform_data *pdata;
|
||||
struct resource *r;
|
||||
struct resource r_irq_struct;
|
||||
struct resource r_mem_struct;
|
||||
|
||||
struct resource *r_irq = &r_irq_struct;
|
||||
struct resource *r_mem = &r_mem_struct;
|
||||
int rc = 0;
|
||||
const u32 *prop;
|
||||
int len;
|
||||
|
||||
/* Get resources(memory, IRQ) associated with the device */
|
||||
master = spi_alloc_master(&dev->dev, sizeof(struct xilinx_spi));
|
||||
master = spi_alloc_master(&ofdev->dev, sizeof(struct xilinx_spi));
|
||||
|
||||
if (master == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
platform_set_drvdata(dev, master);
|
||||
pdata = dev->dev.platform_data;
|
||||
dev_set_drvdata(&ofdev->dev, master);
|
||||
|
||||
if (pdata == NULL) {
|
||||
ret = -ENODEV;
|
||||
rc = of_address_to_resource(ofdev->node, 0, r_mem);
|
||||
if (rc) {
|
||||
dev_warn(&ofdev->dev, "invalid address\n");
|
||||
goto put_master;
|
||||
}
|
||||
|
||||
r = platform_get_resource(dev, IORESOURCE_MEM, 0);
|
||||
if (r == NULL) {
|
||||
ret = -ENODEV;
|
||||
rc = of_irq_to_resource(ofdev->node, 0, r_irq);
|
||||
if (rc == NO_IRQ) {
|
||||
dev_warn(&ofdev->dev, "no IRQ found\n");
|
||||
goto put_master;
|
||||
}
|
||||
|
||||
|
@ -341,47 +341,57 @@ static int __init xilinx_spi_probe(struct platform_device *dev)
|
|||
xspi->bitbang.master->setup = xilinx_spi_setup;
|
||||
init_completion(&xspi->done);
|
||||
|
||||
if (!request_mem_region(r->start,
|
||||
r->end - r->start + 1, XILINX_SPI_NAME)) {
|
||||
ret = -ENXIO;
|
||||
xspi->irq = r_irq->start;
|
||||
|
||||
if (!request_mem_region(r_mem->start,
|
||||
r_mem->end - r_mem->start + 1, XILINX_SPI_NAME)) {
|
||||
rc = -ENXIO;
|
||||
dev_warn(&ofdev->dev, "memory request failure\n");
|
||||
goto put_master;
|
||||
}
|
||||
|
||||
xspi->regs = ioremap(r->start, r->end - r->start + 1);
|
||||
xspi->regs = ioremap(r_mem->start, r_mem->end - r_mem->start + 1);
|
||||
if (xspi->regs == NULL) {
|
||||
ret = -ENOMEM;
|
||||
rc = -ENOMEM;
|
||||
dev_warn(&ofdev->dev, "ioremap failure\n");
|
||||
goto put_master;
|
||||
}
|
||||
xspi->irq = r_irq->start;
|
||||
|
||||
ret = platform_get_irq(dev, 0);
|
||||
if (ret < 0) {
|
||||
ret = -ENXIO;
|
||||
goto unmap_io;
|
||||
/* dynamic bus assignment */
|
||||
master->bus_num = -1;
|
||||
|
||||
/* number of slave select bits is required */
|
||||
prop = of_get_property(ofdev->node, "xlnx,num-ss-bits", &len);
|
||||
if (!prop || len < sizeof(*prop)) {
|
||||
dev_warn(&ofdev->dev, "no 'xlnx,num-ss-bits' property\n");
|
||||
goto put_master;
|
||||
}
|
||||
xspi->irq = ret;
|
||||
|
||||
master->bus_num = pdata->bus_num;
|
||||
master->num_chipselect = pdata->num_chipselect;
|
||||
xspi->speed_hz = pdata->speed_hz;
|
||||
master->num_chipselect = *prop;
|
||||
|
||||
/* SPI controller initializations */
|
||||
xspi_init_hw(xspi->regs);
|
||||
|
||||
/* Register for SPI Interrupt */
|
||||
ret = request_irq(xspi->irq, xilinx_spi_irq, 0, XILINX_SPI_NAME, xspi);
|
||||
if (ret != 0)
|
||||
rc = request_irq(xspi->irq, xilinx_spi_irq, 0, XILINX_SPI_NAME, xspi);
|
||||
if (rc != 0) {
|
||||
dev_warn(&ofdev->dev, "irq request failure: %d\n", xspi->irq);
|
||||
goto unmap_io;
|
||||
}
|
||||
|
||||
ret = spi_bitbang_start(&xspi->bitbang);
|
||||
if (ret != 0) {
|
||||
dev_err(&dev->dev, "spi_bitbang_start FAILED\n");
|
||||
rc = spi_bitbang_start(&xspi->bitbang);
|
||||
if (rc != 0) {
|
||||
dev_err(&ofdev->dev, "spi_bitbang_start FAILED\n");
|
||||
goto free_irq;
|
||||
}
|
||||
|
||||
dev_info(&dev->dev, "at 0x%08X mapped to 0x%08X, irq=%d\n",
|
||||
r->start, (u32)xspi->regs, xspi->irq);
|
||||
dev_info(&ofdev->dev, "at 0x%08X mapped to 0x%08X, irq=%d\n",
|
||||
(unsigned int)r_mem->start, (u32)xspi->regs, xspi->irq);
|
||||
|
||||
return ret;
|
||||
/* Add any subnodes on the SPI bus */
|
||||
of_register_spi_devices(master, ofdev->node);
|
||||
|
||||
return rc;
|
||||
|
||||
free_irq:
|
||||
free_irq(xspi->irq, xspi);
|
||||
|
@ -389,21 +399,21 @@ unmap_io:
|
|||
iounmap(xspi->regs);
|
||||
put_master:
|
||||
spi_master_put(master);
|
||||
return ret;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __devexit xilinx_spi_remove(struct platform_device *dev)
|
||||
static int __devexit xilinx_spi_remove(struct of_device *ofdev)
|
||||
{
|
||||
struct xilinx_spi *xspi;
|
||||
struct spi_master *master;
|
||||
|
||||
master = platform_get_drvdata(dev);
|
||||
master = platform_get_drvdata(ofdev);
|
||||
xspi = spi_master_get_devdata(master);
|
||||
|
||||
spi_bitbang_stop(&xspi->bitbang);
|
||||
free_irq(xspi->irq, xspi);
|
||||
iounmap(xspi->regs);
|
||||
platform_set_drvdata(dev, 0);
|
||||
dev_set_drvdata(&ofdev->dev, 0);
|
||||
spi_master_put(xspi->bitbang.master);
|
||||
|
||||
return 0;
|
||||
|
@ -412,27 +422,42 @@ static int __devexit xilinx_spi_remove(struct platform_device *dev)
|
|||
/* work with hotplug and coldplug */
|
||||
MODULE_ALIAS("platform:" XILINX_SPI_NAME);
|
||||
|
||||
static struct platform_driver xilinx_spi_driver = {
|
||||
.probe = xilinx_spi_probe,
|
||||
.remove = __devexit_p(xilinx_spi_remove),
|
||||
static int __exit xilinx_spi_of_remove(struct of_device *op)
|
||||
{
|
||||
return xilinx_spi_remove(op);
|
||||
}
|
||||
|
||||
static struct of_device_id xilinx_spi_of_match[] = {
|
||||
{ .compatible = "xlnx,xps-spi-2.00.a", },
|
||||
{ .compatible = "xlnx,xps-spi-2.00.b", },
|
||||
{}
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(of, xilinx_spi_of_match);
|
||||
|
||||
static struct of_platform_driver xilinx_spi_of_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "xilinx-xps-spi",
|
||||
.match_table = xilinx_spi_of_match,
|
||||
.probe = xilinx_spi_of_probe,
|
||||
.remove = __exit_p(xilinx_spi_of_remove),
|
||||
.driver = {
|
||||
.name = XILINX_SPI_NAME,
|
||||
.name = "xilinx-xps-spi",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init xilinx_spi_init(void)
|
||||
{
|
||||
return platform_driver_register(&xilinx_spi_driver);
|
||||
return of_register_platform_driver(&xilinx_spi_of_driver);
|
||||
}
|
||||
module_init(xilinx_spi_init);
|
||||
|
||||
static void __exit xilinx_spi_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&xilinx_spi_driver);
|
||||
of_unregister_platform_driver(&xilinx_spi_of_driver);
|
||||
}
|
||||
module_exit(xilinx_spi_exit);
|
||||
|
||||
MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>");
|
||||
MODULE_DESCRIPTION("Xilinx SPI driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -17,4 +17,7 @@
|
|||
void of_register_i2c_devices(struct i2c_adapter *adap,
|
||||
struct device_node *adap_node);
|
||||
|
||||
/* must call put_device() when done with returned i2c_client device */
|
||||
struct i2c_client *of_find_i2c_device_by_node(struct device_node *node);
|
||||
|
||||
#endif /* __LINUX_OF_I2C_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче