LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: powerpc: Fix Text randomization
From: Michael Ellerman @ 2014-10-15  2:08 UTC (permalink / raw)
  To: Vineeth Vijayan, benh, linuxppc-dev, linux-kernel; +Cc: Vineeth Vijayan
In-Reply-To: <1412919926-13123-1-git-send-email-vvijayan@mvista.com>

On Fri, 2014-10-10 at 05:45:26 UTC, Vineeth Vijayan wrote:
> Right now there is no way to disable TEXT randomization on a PPC32
> machine. text randomization happens even in the case of "echo 0 >
> /proc/sys/kernel/randomize_va_space"

Yeah it seems to happen on ppc64 too.

> This happens due to the incorrect definition of ELF_ET_DYN_BASE at
> arch/powerpc/include/asm/elf.h

What is incorrect about it? We are not the only arch that does that.

I'm not clear on what has changed to break this?

cheers

^ permalink raw reply

* Re: [PATCH V2] powerpc: thp: Use tlbiel wherever possible
From: Aneesh Kumar K.V @ 2014-10-14 14:03 UTC (permalink / raw)
  To: benh, paulus, mpe, mikey; +Cc: linuxppc-dev
In-Reply-To: <1407933711-26080-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>

"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> writes:

> If we know that user address space has never executed on other cpus
> we could use tlbiel.


ping ? Can we get this merged ?

>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> ---
>  arch/powerpc/include/asm/machdep.h    |  2 +-
>  arch/powerpc/include/asm/tlbflush.h   |  4 +-
>  arch/powerpc/mm/hash_native_64.c      |  4 +-
>  arch/powerpc/mm/hash_utils_64.c       | 70 +++++++++++++++++++++++++++++++++++
>  arch/powerpc/mm/hugepage-hash64.c     | 54 +--------------------------
>  arch/powerpc/mm/pgtable_64.c          | 69 +++++++---------------------------
>  arch/powerpc/platforms/pseries/lpar.c |  2 +-
>  7 files changed, 93 insertions(+), 112 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
> index b125ceab149c..c6047ee32a4f 100644
> --- a/arch/powerpc/include/asm/machdep.h
> +++ b/arch/powerpc/include/asm/machdep.h
> @@ -60,7 +60,7 @@ struct machdep_calls {
>  	void		(*hugepage_invalidate)(unsigned long vsid,
>  					       unsigned long addr,
>  					       unsigned char *hpte_slot_array,
> -					       int psize, int ssize);
> +					       int psize, int ssize, int local);
>  	/* special for kexec, to be called in real mode, linear mapping is
>  	 * destroyed as well */
>  	void		(*hpte_clear_all)(void);
> diff --git a/arch/powerpc/include/asm/tlbflush.h b/arch/powerpc/include/asm/tlbflush.h
> index 2def01ed0cb2..6a5c1774b32c 100644
> --- a/arch/powerpc/include/asm/tlbflush.h
> +++ b/arch/powerpc/include/asm/tlbflush.h
> @@ -127,7 +127,9 @@ static inline void arch_leave_lazy_mmu_mode(void)
>  extern void flush_hash_page(unsigned long vpn, real_pte_t pte, int psize,
>  			    int ssize, int local);
>  extern void flush_hash_range(unsigned long number, int local);
> -
> +extern void flush_hash_hugepage(unsigned long vsid, unsigned long addr,
> +				pmd_t *pmdp, unsigned int psize, int ssize,
> +				int local);
>
>  static inline void local_flush_tlb_mm(struct mm_struct *mm)
>  {
> diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
> index afc0a8295f84..88de8a869c98 100644
> --- a/arch/powerpc/mm/hash_native_64.c
> +++ b/arch/powerpc/mm/hash_native_64.c
> @@ -415,7 +415,7 @@ static void native_hpte_invalidate(unsigned long slot, unsigned long vpn,
>  static void native_hugepage_invalidate(unsigned long vsid,
>  				       unsigned long addr,
>  				       unsigned char *hpte_slot_array,
> -				       int psize, int ssize)
> +				       int psize, int ssize, int local)
>  {
>  	int i;
>  	struct hash_pte *hptep;
> @@ -461,7 +461,7 @@ static void native_hugepage_invalidate(unsigned long vsid,
>  		 * instruction compares entry_VA in tlb with the VA specified
>  		 * here
>  		 */
> -		tlbie(vpn, psize, actual_psize, ssize, 0);
> +		tlbie(vpn, psize, actual_psize, ssize, local);
>  	}
>  	local_irq_restore(flags);
>  }
> diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
> index daee7f4e5a14..afd55ac9cd88 100644
> --- a/arch/powerpc/mm/hash_utils_64.c
> +++ b/arch/powerpc/mm/hash_utils_64.c
> @@ -1307,6 +1307,76 @@ void flush_hash_page(unsigned long vpn, real_pte_t pte, int psize, int ssize,
>  #endif
>  }
>
> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> +void flush_hash_hugepage(unsigned long vsid, unsigned long addr,
> +			 pmd_t *pmdp, unsigned int psize, int ssize, int local)
> +{
> +	int i, max_hpte_count, valid;
> +	unsigned long s_addr;
> +	unsigned char *hpte_slot_array;
> +	unsigned long hidx, shift, vpn, hash, slot;
> +
> +	s_addr = addr & HPAGE_PMD_MASK;
> +	hpte_slot_array = get_hpte_slot_array(pmdp);
> +	/*
> +	 * IF we try to do a HUGE PTE update after a withdraw is done.
> +	 * we will find the below NULL. This happens when we do
> +	 * split_huge_page_pmd
> +	 */
> +	if (!hpte_slot_array)
> +		return;
> +
> +	if (ppc_md.hugepage_invalidate) {
> +		ppc_md.hugepage_invalidate(vsid, s_addr, hpte_slot_array,
> +					   psize, ssize, local);
> +		goto tm_abort;
> +	}
> +	/*
> +	 * No bluk hpte removal support, invalidate each entry
> +	 */
> +	shift = mmu_psize_defs[psize].shift;
> +	max_hpte_count = HPAGE_PMD_SIZE >> shift;
> +	for (i = 0; i < max_hpte_count; i++) {
> +		/*
> +		 * 8 bits per each hpte entries
> +		 * 000| [ secondary group (one bit) | hidx (3 bits) | valid bit]
> +		 */
> +		valid = hpte_valid(hpte_slot_array, i);
> +		if (!valid)
> +			continue;
> +		hidx =  hpte_hash_index(hpte_slot_array, i);
> +
> +		/* get the vpn */
> +		addr = s_addr + (i * (1ul << shift));
> +		vpn = hpt_vpn(addr, vsid, ssize);
> +		hash = hpt_hash(vpn, shift, ssize);
> +		if (hidx & _PTEIDX_SECONDARY)
> +			hash = ~hash;
> +
> +		slot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
> +		slot += hidx & _PTEIDX_GROUP_IX;
> +		ppc_md.hpte_invalidate(slot, vpn, psize,
> +				       MMU_PAGE_16M, ssize, local);
> +	}
> +tm_abort:
> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> +	/* Transactions are not aborted by tlbiel, only tlbie.
> +	 * Without, syncing a page back to a block device w/ PIO could pick up
> +	 * transactional data (bad!) so we force an abort here.  Before the
> +	 * sync the page will be made read-only, which will flush_hash_page.
> +	 * BIG ISSUE here: if the kernel uses a page from userspace without
> +	 * unmapping it first, it may see the speculated version.
> +	 */
> +	if (local && cpu_has_feature(CPU_FTR_TM) &&
> +	    current->thread.regs &&
> +	    MSR_TM_ACTIVE(current->thread.regs->msr)) {
> +		tm_enable();
> +		tm_abort(TM_CAUSE_TLBI);
> +	}
> +#endif
> +}
> +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
> +
>  void flush_hash_range(unsigned long number, int local)
>  {
>  	if (ppc_md.flush_hash_range)
> diff --git a/arch/powerpc/mm/hugepage-hash64.c b/arch/powerpc/mm/hugepage-hash64.c
> index 5f5e6328c21c..3a648cd363ae 100644
> --- a/arch/powerpc/mm/hugepage-hash64.c
> +++ b/arch/powerpc/mm/hugepage-hash64.c
> @@ -18,57 +18,6 @@
>  #include <linux/mm.h>
>  #include <asm/machdep.h>
>
> -static void invalidate_old_hpte(unsigned long vsid, unsigned long addr,
> -				pmd_t *pmdp, unsigned int psize, int ssize)
> -{
> -	int i, max_hpte_count, valid;
> -	unsigned long s_addr;
> -	unsigned char *hpte_slot_array;
> -	unsigned long hidx, shift, vpn, hash, slot;
> -
> -	s_addr = addr & HPAGE_PMD_MASK;
> -	hpte_slot_array = get_hpte_slot_array(pmdp);
> -	/*
> -	 * IF we try to do a HUGE PTE update after a withdraw is done.
> -	 * we will find the below NULL. This happens when we do
> -	 * split_huge_page_pmd
> -	 */
> -	if (!hpte_slot_array)
> -		return;
> -
> -	if (ppc_md.hugepage_invalidate)
> -		return ppc_md.hugepage_invalidate(vsid, s_addr, hpte_slot_array,
> -						  psize, ssize);
> -	/*
> -	 * No bluk hpte removal support, invalidate each entry
> -	 */
> -	shift = mmu_psize_defs[psize].shift;
> -	max_hpte_count = HPAGE_PMD_SIZE >> shift;
> -	for (i = 0; i < max_hpte_count; i++) {
> -		/*
> -		 * 8 bits per each hpte entries
> -		 * 000| [ secondary group (one bit) | hidx (3 bits) | valid bit]
> -		 */
> -		valid = hpte_valid(hpte_slot_array, i);
> -		if (!valid)
> -			continue;
> -		hidx =  hpte_hash_index(hpte_slot_array, i);
> -
> -		/* get the vpn */
> -		addr = s_addr + (i * (1ul << shift));
> -		vpn = hpt_vpn(addr, vsid, ssize);
> -		hash = hpt_hash(vpn, shift, ssize);
> -		if (hidx & _PTEIDX_SECONDARY)
> -			hash = ~hash;
> -
> -		slot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
> -		slot += hidx & _PTEIDX_GROUP_IX;
> -		ppc_md.hpte_invalidate(slot, vpn, psize,
> -				       MMU_PAGE_16M, ssize, 0);
> -	}
> -}
> -
> -
>  int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
>  		    pmd_t *pmdp, unsigned long trap, int local, int ssize,
>  		    unsigned int psize)
> @@ -145,7 +94,8 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
>  		 * hash page table entries.
>  		 */
>  		if ((old_pmd & _PAGE_HASHPTE) && !(old_pmd & _PAGE_COMBO))
> -			invalidate_old_hpte(vsid, ea, pmdp, MMU_PAGE_64K, ssize);
> +			flush_hash_hugepage(vsid, ea, pmdp, MMU_PAGE_64K,
> +					    ssize, local);
>  	}
>
>  	valid = hpte_valid(hpte_slot_array, index);
> diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
> index c8d709ab489d..f54b0908c55e 100644
> --- a/arch/powerpc/mm/pgtable_64.c
> +++ b/arch/powerpc/mm/pgtable_64.c
> @@ -731,29 +731,14 @@ void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
>  void hpte_do_hugepage_flush(struct mm_struct *mm, unsigned long addr,
>  			    pmd_t *pmdp, unsigned long old_pmd)
>  {
> -	int ssize, i;
> -	unsigned long s_addr;
> -	int max_hpte_count;
> -	unsigned int psize, valid;
> -	unsigned char *hpte_slot_array;
> -	unsigned long hidx, vpn, vsid, hash, shift, slot;
> -
> -	/*
> -	 * Flush all the hptes mapping this hugepage
> -	 */
> -	s_addr = addr & HPAGE_PMD_MASK;
> -	hpte_slot_array = get_hpte_slot_array(pmdp);
> -	/*
> -	 * IF we try to do a HUGE PTE update after a withdraw is done.
> -	 * we will find the below NULL. This happens when we do
> -	 * split_huge_page_pmd
> -	 */
> -	if (!hpte_slot_array)
> -		return;
> +	int ssize, local = 0;
> +	unsigned int psize;
> +	unsigned long vsid;
> +	const struct cpumask *tmp;
>
>  	/* get the base page size,vsid and segment size */
>  #ifdef CONFIG_DEBUG_VM
> -	psize = get_slice_psize(mm, s_addr);
> +	psize = get_slice_psize(mm, addr);
>  	BUG_ON(psize == MMU_PAGE_16M);
>  #endif
>  	if (old_pmd & _PAGE_COMBO)
> @@ -761,46 +746,20 @@ void hpte_do_hugepage_flush(struct mm_struct *mm, unsigned long addr,
>  	else
>  		psize = MMU_PAGE_64K;
>
> -	if (!is_kernel_addr(s_addr)) {
> -		ssize = user_segment_size(s_addr);
> -		vsid = get_vsid(mm->context.id, s_addr, ssize);
> +	if (!is_kernel_addr(addr)) {
> +		ssize = user_segment_size(addr);
> +		vsid = get_vsid(mm->context.id, addr, ssize);
>  		WARN_ON(vsid == 0);
>  	} else {
> -		vsid = get_kernel_vsid(s_addr, mmu_kernel_ssize);
> +		vsid = get_kernel_vsid(addr, mmu_kernel_ssize);
>  		ssize = mmu_kernel_ssize;
>  	}
>
> -	if (ppc_md.hugepage_invalidate)
> -		return ppc_md.hugepage_invalidate(vsid, s_addr,
> -						  hpte_slot_array,
> -						  psize, ssize);
> -	/*
> -	 * No bluk hpte removal support, invalidate each entry
> -	 */
> -	shift = mmu_psize_defs[psize].shift;
> -	max_hpte_count = HPAGE_PMD_SIZE >> shift;
> -	for (i = 0; i < max_hpte_count; i++) {
> -		/*
> -		 * 8 bits per each hpte entries
> -		 * 000| [ secondary group (one bit) | hidx (3 bits) | valid bit]
> -		 */
> -		valid = hpte_valid(hpte_slot_array, i);
> -		if (!valid)
> -			continue;
> -		hidx =  hpte_hash_index(hpte_slot_array, i);
> -
> -		/* get the vpn */
> -		addr = s_addr + (i * (1ul << shift));
> -		vpn = hpt_vpn(addr, vsid, ssize);
> -		hash = hpt_hash(vpn, shift, ssize);
> -		if (hidx & _PTEIDX_SECONDARY)
> -			hash = ~hash;
> -
> -		slot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
> -		slot += hidx & _PTEIDX_GROUP_IX;
> -		ppc_md.hpte_invalidate(slot, vpn, psize,
> -				       MMU_PAGE_16M, ssize, 0);
> -	}
> +	tmp = cpumask_of(smp_processor_id());
> +	if (cpumask_equal(mm_cpumask(mm), tmp))
> +		local = 1;
> +
> +	return flush_hash_hugepage(vsid, addr, pmdp, psize, ssize, local);
>  }
>
>  static pmd_t pmd_set_protbits(pmd_t pmd, pgprot_t pgprot)
> diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
> index 34e64237fff9..90a576705d87 100644
> --- a/arch/powerpc/platforms/pseries/lpar.c
> +++ b/arch/powerpc/platforms/pseries/lpar.c
> @@ -434,7 +434,7 @@ static void __pSeries_lpar_hugepage_invalidate(unsigned long *slot,
>  static void pSeries_lpar_hugepage_invalidate(unsigned long vsid,
>  					     unsigned long addr,
>  					     unsigned char *hpte_slot_array,
> -					     int psize, int ssize)
> +					     int psize, int ssize, int local)
>  {
>  	int i, index = 0;
>  	unsigned long s_addr = addr;
> -- 
> 1.9.1

^ permalink raw reply

* [PATCH v2] powerpc: Remove ppc_md.remove_memory
From: Anton Blanchard @ 2014-10-14 11:17 UTC (permalink / raw)
  To: benh, paulus, mpe, nfont; +Cc: linuxppc-dev

We have an extra level of indirection on memory hot remove which is not
matched on memory hot add. Memory hotplug is book3s only, so there is
no need for it.

This also enables means remove_memory() (ie memory hot unplug) works
on powernv.

Signed-off-by: Anton Blanchard <anton@samba.org>
---
 arch/powerpc/include/asm/machdep.h              |  4 ----
 arch/powerpc/mm/mem.c                           | 14 ++++++++++++--
 arch/powerpc/platforms/pseries/hotplug-memory.c | 21 ---------------------
 3 files changed, 12 insertions(+), 27 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 902ab20..327e8dd 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -294,10 +294,6 @@ struct machdep_calls {
 #ifdef CONFIG_ARCH_RANDOM
 	int (*get_random_long)(unsigned long *v);
 #endif
-
-#ifdef CONFIG_MEMORY_HOTREMOVE
-	int (*remove_memory)(u64, u64);
-#endif
 };
 
 extern void e500_idle(void);
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 8ebaac7..2add0b7 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -35,6 +35,7 @@
 #include <linux/memblock.h>
 #include <linux/hugetlb.h>
 #include <linux/slab.h>
+#include <linux/vmalloc.h>
 
 #include <asm/pgalloc.h>
 #include <asm/prom.h>
@@ -144,8 +145,17 @@ int arch_remove_memory(u64 start, u64 size)
 
 	zone = page_zone(pfn_to_page(start_pfn));
 	ret = __remove_pages(zone, start_pfn, nr_pages);
-	if (!ret && (ppc_md.remove_memory))
-		ret = ppc_md.remove_memory(start, size);
+	if (ret)
+		return ret;
+
+	/* Remove htab bolted mappings for this section of memory */
+	start = (unsigned long)__va(start);
+	ret = remove_section_mapping(start, start + size);
+
+	/* Ensure all vmalloc mappings are flushed in case they also
+	 * hit that section of memory
+	 */
+	vm_unmap_aliases();
 
 	return ret;
 }
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index 187ecfa..d5426ec 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -12,7 +12,6 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/memblock.h>
-#include <linux/vmalloc.h>
 #include <linux/memory.h>
 #include <linux/memory_hotplug.h>
 
@@ -66,22 +65,6 @@ unsigned long pseries_memory_block_size(void)
 }
 
 #ifdef CONFIG_MEMORY_HOTREMOVE
-static int pseries_remove_memory(u64 start, u64 size)
-{
-	int ret;
-
-	/* Remove htab bolted mappings for this section of memory */
-	start = (unsigned long)__va(start);
-	ret = remove_section_mapping(start, start + size);
-
-	/* Ensure all vmalloc mappings are flushed in case they also
-	 * hit that section of memory
-	 */
-	vm_unmap_aliases();
-
-	return ret;
-}
-
 static int pseries_remove_memblock(unsigned long base, unsigned int memblock_size)
 {
 	unsigned long block_sz, start_pfn;
@@ -262,10 +245,6 @@ static int __init pseries_memory_hotplug_init(void)
 	if (firmware_has_feature(FW_FEATURE_LPAR))
 		of_reconfig_notifier_register(&pseries_mem_nb);
 
-#ifdef CONFIG_MEMORY_HOTREMOVE
-	ppc_md.remove_memory = pseries_remove_memory;
-#endif
-
 	return 0;
 }
 machine_device_initcall(pseries, pseries_memory_hotplug_init);
-- 
1.9.1

^ permalink raw reply related

* RE: [PATCHv5] clk: ppc-corenet: rename to qoriq and add CLK_OF_DECLARE support
From: Jingchang Lu @ 2014-10-14 10:32 UTC (permalink / raw)
  To: Jingchang Lu, mturquette@linaro.org
  Cc: Scott Wood, linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
In-Reply-To: <1412932497-27995-1-git-send-email-jingchang.lu@freescale.com>

SGksIFNjb3R0IGFuZCBNaWtlLA0KICANCiAgQ291bGQgeW91IHBsZWFzZSBoZWxwIHJldmlldyB0
aGlzIHBhdGNoLiBUaGFua3MuDQoNCkJlc3QgUmVnYXJkcywNCkppbmdjaGFuZw0KDQo+LS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj5Gcm9tOiBKaW5nY2hhbmcgTHUgW21haWx0bzpqaW5nY2hh
bmcubHVAZnJlZXNjYWxlLmNvbV0NCj5TZW50OiBGcmlkYXksIE9jdG9iZXIgMTAsIDIwMTQgNTox
NSBQTQ0KPlRvOiBtdHVycXVldHRlQGxpbmFyby5vcmcNCj5DYzogV29vZCBTY290dC1CMDc0MjE7
IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOyBsaW51eC0NCj5rZXJuZWxAdmdlci5rZXJu
ZWwub3JnOyBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IEx1DQo+SmluZ2No
YW5nLUIzNTA4Mw0KPlN1YmplY3Q6IFtQQVRDSHY1XSBjbGs6IHBwYy1jb3JlbmV0OiByZW5hbWUg
dG8gcW9yaXEgYW5kIGFkZA0KPkNMS19PRl9ERUNMQVJFIHN1cHBvcnQNCj4NCj5UaGUgSVAgaXMg
c2hhcmVkIGJ5IFBQQyBhbmQgQVJNLCB0aGlzIHJlbmFtZXMgaXQgdG8gcW9yaXEgZm9yIGJldHRl
cg0KPnJlcHJlc2VudGlvbiwgYW5kIHRoaXMgYWxzbyBhZGRzIHRoZSBDTEtfT0ZfREVDTEFSRSBz
dXBwb3J0IGZvciBiZWluZw0KPmluaXRpYWxpemVkIGJ5IG9mX2Nsa19pbml0KCkgb24gQVJNLg0K
Pg0KPlNpZ25lZC1vZmYtYnk6IEppbmdjaGFuZyBMdSA8amluZ2NoYW5nLmx1QGZyZWVzY2FsZS5j
b20+DQo+LS0tDQo+Y2hhbmdlcyBpbiB2NToNCj4gdXBkYXRlIGRyaXZlcnMvY3B1ZnJlcS9LY29u
ZmlnLnBvd2VycGMgdG8gc2xlY3QgdGhlIHJlbmFtZWQgY29uZmlnIG9wdGlvbi4NCj4NCj5jaGFu
Z2VzIGluIHY0Og0KPiByZW1vdmUgImNvcmVuZXQiIGxpdGVyYWxzIG9taXR0ZWQgaW4gdjMgcmVt
b3ZlLg0KPg0KPmNoYW5nZXMgaW4gdjM6DQo+IGdlbmVyYXRlIHRoZSBwYXRjaCB3aXRoIC1NIC1D
IG9wdGlvbg0KPg0KPmNoYW5nZXMgaW4gdjI6DQo+IHJlbmFtZSB0aGUgZHJpdmVyIG5hbWUgdG8g
cHBjLXFvcmlxLmMgZm9yIHNoYXJlZCBvbiBQUEMgYW5kIEFSTS4NCj4NCj4gZHJpdmVycy9jbGsv
S2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsrKystLS0tLQ0KPiBkcml2
ZXJzL2Nsay9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0NCj4gZHJp
dmVycy9jbGsve2Nsay1wcGMtY29yZW5ldC5jID0+IGNsay1xb3JpcS5jfSB8IDI5ICsrKysrKysr
KysrKysrKy0tLS0tLQ0KPi0tLS0tDQo+IGRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLnBvd2VycGMg
ICAgICAgICAgICAgICAgfCAgMiArLQ0KPiA0IGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKSAgcmVuYW1lDQo+ZHJpdmVycy9jbGsve2Nsay1wcGMtY29yZW5l
dC5jID0+IGNsay1xb3JpcS5jfSAoODklKQ0KPg0KPmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9L
Y29uZmlnIGIvZHJpdmVycy9jbGsvS2NvbmZpZyBpbmRleA0KPjQ1NWZkMTcuLjQ3MDZhOWYgMTAw
NjQ0DQo+LS0tIGEvZHJpdmVycy9jbGsvS2NvbmZpZw0KPisrKyBiL2RyaXZlcnMvY2xrL0tjb25m
aWcNCj5AQCAtMTAxLDEyICsxMDEsMTIgQEAgY29uZmlnIENPTU1PTl9DTEtfQVhJX0NMS0dFTg0K
PiAJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgYXhpLWNsa2dlbiBwY29yZSBjbG9j
ayBnZW5lcmF0b3INCj5mb3IgWGlsaW54DQo+IAkgIEZQR0FzLiBJdCBpcyBjb21tb25seSB1c2Vk
IGluIEFuYWxvZyBEZXZpY2VzJyByZWZlcmVuY2UgZGVzaWducy4NCj4NCj4tY29uZmlnIENMS19Q
UENfQ09SRU5FVA0KPi0JYm9vbCAiQ2xvY2sgZHJpdmVyIGZvciBQb3dlclBDIGNvcmVuZXQgcGxh
dGZvcm1zIg0KPi0JZGVwZW5kcyBvbiBQUENfRTUwME1DICYmIE9GDQo+K2NvbmZpZyBDTEtfUU9S
SVENCj4rCWJvb2wgIkNsb2NrIGRyaXZlciBmb3IgRnJlZXNjYWxlIFFvcklRIHBsYXRmb3JtcyIN
Cj4rCWRlcGVuZHMgb24gKFBQQ19FNTAwTUMgfHwgQVJNKSAmJiBPRg0KPiAJLS0taGVscC0tLQ0K
Pi0JICBUaGlzIGFkZHMgdGhlIGNsb2NrIGRyaXZlciBzdXBwb3J0IGZvciBGcmVlc2NhbGUgUG93
ZXJQQyBjb3JlbmV0DQo+LQkgIHBsYXRmb3JtcyB1c2luZyBjb21tb24gY2xvY2sgZnJhbWV3b3Jr
Lg0KPisJICBUaGlzIGFkZHMgdGhlIGNsb2NrIGRyaXZlciBzdXBwb3J0IGZvciBGcmVlc2NhbGUg
UW9ySVEgcGxhdGZvcm1zDQo+KwkgIHVzaW5nIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsuDQo+DQo+
IGNvbmZpZyBDT01NT05fQ0xLX1hHRU5FDQo+IAlib29sICJDbG9jayBkcml2ZXIgZm9yIEFQTSBY
R2VuZSBTb0MiDQo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL01ha2VmaWxlIGIvZHJpdmVycy9j
bGsvTWFrZWZpbGUgaW5kZXgNCj5kNWZiYTViLi40ZmY5NGNkIDEwMDY0NA0KPi0tLSBhL2RyaXZl
cnMvY2xrL01ha2VmaWxlDQo+KysrIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUNCj5AQCAtMzAsNyAr
MzAsNyBAQCBvYmotJChDT05GSUdfQVJDSF9NT1hBUlQpCQkrPSBjbGstbW94YXJ0Lm8NCj4gb2Jq
LSQoQ09ORklHX0FSQ0hfTk9NQURJSykJCSs9IGNsay1ub21hZGlrLm8NCj4gb2JqLSQoQ09ORklH
X0FSQ0hfTlNQSVJFKQkJKz0gY2xrLW5zcGlyZS5vDQo+IG9iai0kKENPTkZJR19DT01NT05fQ0xL
X1BBTE1BUykJCSs9IGNsay1wYWxtYXMubw0KPi1vYmotJChDT05GSUdfQ0xLX1BQQ19DT1JFTkVU
KQkJKz0gY2xrLXBwYy1jb3JlbmV0Lm8NCj4rb2JqLSQoQ09ORklHX0NMS19RT1JJUSkJCQkrPSBj
bGstcW9yaXEubw0KPiBvYmotJChDT05GSUdfQ09NTU9OX0NMS19SSzgwOCkJCSs9IGNsay1yazgw
OC5vDQo+IG9iai0kKENPTkZJR19DT01NT05fQ0xLX1MyTVBTMTEpCSs9IGNsay1zMm1wczExLm8N
Cj4gb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfU0k1MzUxKQkJKz0gY2xrLXNpNTM1MS5vDQo+ZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29yZW5ldC5jIGIvZHJpdmVycy9jbGsvY2xr
LXFvcmlxLmMNCj5zaW1pbGFyaXR5IGluZGV4IDg5JSByZW5hbWUgZnJvbSBkcml2ZXJzL2Nsay9j
bGstcHBjLWNvcmVuZXQuYyByZW5hbWUgdG8NCj5kcml2ZXJzL2Nsay9jbGstcW9yaXEuYyBpbmRl
eCA4ZTU4ZWRmLi40OGNiOTIzIDEwMDY0NA0KPi0tLSBhL2RyaXZlcnMvY2xrL2Nsay1wcGMtY29y
ZW5ldC5jDQo+KysrIGIvZHJpdmVycy9jbGsvY2xrLXFvcmlxLmMNCj5AQCAtNSw3ICs1LDcgQEAN
Cj4gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSB2ZXJzaW9uIDIgYXMNCj4gICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uDQo+ICAqDQo+LSAqIGNsb2NrIGRyaXZlciBmb3IgRnJlZXNjYWxlIFBvd2VyUEMgY29y
ZW5ldCBTb0NzLg0KPisgKiBjbG9jayBkcml2ZXIgZm9yIEZyZWVzY2FsZSBRb3JJUSBTb0NzLg0K
PiAgKi8NCj4gI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPg0KPiAjaW5jbHVkZSA8bGlu
dXgvaW8uaD4NCj5AQCAtMTU1LDcgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjb3JlX3Bs
bF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZQ0KPipucCkNCj4NCj4gCWJhc2UgPSBvZl9pb21hcChu
cCwgMCk7DQo+IAlpZiAoIWJhc2UpIHsNCj4tCQlwcl9lcnIoImNsay1wcGM6IGlvbWFwIGVycm9y
XG4iKTsNCj4rCQlwcl9lcnIoImNsay1xb3JpcTogaW9tYXAgZXJyb3JcbiIpOw0KPiAJCXJldHVy
bjsNCj4gCX0NCj4NCj5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzeXNj
bGtfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUNCj4qbm9kZSkNCj4gCXUzMiByYXRlOw0KPg0KPiAJ
aWYgKCFucCkgew0KPi0JCXByX2VycigicHBjLWNsazogY291bGQgbm90IGdldCBwYXJlbnQgbm9k
ZVxuIik7DQo+KwkJcHJfZXJyKCJxb3JpcS1jbGs6IGNvdWxkIG5vdCBnZXQgcGFyZW50IG5vZGVc
biIpOw0KPiAJCXJldHVybjsNCj4gCX0NCj4NCj5AQCAtMjc4LDMwICsyNzgsMzUgQEAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2xrX21hdGNoW10NCj5fX2luaXRjb25zdCA9IHsN
Cj4gCXt9DQo+IH07DQo+DQo+LXN0YXRpYyBpbnQgX19pbml0IHBwY19jb3JlbmV0X2Nsa19wcm9i
ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPitzdGF0aWMgaW50IF9faW5pdCBxb3Jp
cV9jbGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gew0KPiAJb2ZfY2xr
X2luaXQoY2xrX21hdGNoKTsNCj4NCj4gCXJldHVybiAwOw0KPiB9DQo+DQo+LXN0YXRpYyBjb25z
dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBwY19jbGtfaWRzW10gX19pbml0Y29uc3QgPSB7DQo+K3N0
YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFvcmlxX2Nsa19pZHNbXSBfX2luaXRjb25z
dCA9IHsNCj4gCXsgLmNvbXBhdGlibGUgPSAiZnNsLHFvcmlxLWNsb2NrZ2VuLTEuMCIsIH0sDQo+
IAl7IC5jb21wYXRpYmxlID0gImZzbCxxb3JpcS1jbG9ja2dlbi0yLjAiLCB9LA0KPiAJe30NCj4g
fTsNCj4NCj4tc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHBjX2NvcmVuZXRfY2xrX2Ry
aXZlciBfX2luaXRkYXRhID0gew0KPitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxb3Jp
cV9jbGtfZHJpdmVyIF9faW5pdGRhdGEgPSB7DQo+IAkuZHJpdmVyID0gew0KPi0JCS5uYW1lID0g
InBwY19jb3JlbmV0X2Nsb2NrIiwNCj4rCQkubmFtZSA9ICJxb3JpcV9jbG9jayIsDQo+IAkJLm93
bmVyID0gVEhJU19NT0RVTEUsDQo+LQkJLm9mX21hdGNoX3RhYmxlID0gcHBjX2Nsa19pZHMsDQo+
KwkJLm9mX21hdGNoX3RhYmxlID0gcW9yaXFfY2xrX2lkcywNCj4gCX0sDQo+LQkucHJvYmUgPSBw
cGNfY29yZW5ldF9jbGtfcHJvYmUsDQo+KwkucHJvYmUgPSBxb3JpcV9jbGtfcHJvYmUsDQo+IH07
DQo+DQo+LXN0YXRpYyBpbnQgX19pbml0IHBwY19jb3JlbmV0X2Nsa19pbml0KHZvaWQpDQo+K3N0
YXRpYyBpbnQgX19pbml0IHFvcmlxX2Nsa19pbml0KHZvaWQpDQo+IHsNCj4tCXJldHVybiBwbGF0
Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBwY19jb3JlbmV0X2Nsa19kcml2ZXIpOw0KPisJcmV0dXJu
IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcW9yaXFfY2xrX2RyaXZlcik7DQo+IH0NCj4tc3Vi
c3lzX2luaXRjYWxsKHBwY19jb3JlbmV0X2Nsa19pbml0KTsNCj4rc3Vic3lzX2luaXRjYWxsKHFv
cmlxX2Nsa19pbml0KTsNCj4rDQo+K0NMS19PRl9ERUNMQVJFKHFvcmlxX2NvcmVfcGxsX3YxLCAi
ZnNsLHFvcmlxLWNvcmUtcGxsLTEuMCIsDQo+K2NvcmVfcGxsX2luaXQpOyBDTEtfT0ZfREVDTEFS
RShxb3JpcV9jb3JlX3BsbF92MiwNCj4rImZzbCxxb3JpcS1jb3JlLXBsbC0yLjAiLCBjb3JlX3Bs
bF9pbml0KTsNCj4rQ0xLX09GX0RFQ0xBUkUocW9yaXFfY29yZV9tdXhfdjEsICJmc2wscW9yaXEt
Y29yZS1tdXgtMS4wIiwNCj4rY29yZV9tdXhfaW5pdCk7IENMS19PRl9ERUNMQVJFKHFvcmlxX2Nv
cmVfbXV4X3YyLA0KPisiZnNsLHFvcmlxLWNvcmUtbXV4LTIuMCIsIGNvcmVfbXV4X2luaXQpOw0K
PmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy5wb3dlcnBjDQo+Yi9kcml2ZXJz
L2NwdWZyZXEvS2NvbmZpZy5wb3dlcnBjIGluZGV4IDcyNTY0YjcuLjdlYTI0NDEgMTAwNjQ0DQo+
LS0tIGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcucG93ZXJwYw0KPisrKyBiL2RyaXZlcnMvY3B1
ZnJlcS9LY29uZmlnLnBvd2VycGMNCj5AQCAtMjYsNyArMjYsNyBAQCBjb25maWcgQ1BVX0ZSRVFf
TUFQTEUNCj4gY29uZmlnIFBQQ19DT1JFTkVUX0NQVUZSRVENCj4gCXRyaXN0YXRlICJDUFUgZnJl
cXVlbmN5IHNjYWxpbmcgZHJpdmVyIGZvciBGcmVlc2NhbGUgRTUwME1DIFNvQ3MiDQo+IAlkZXBl
bmRzIG9uIFBQQ19FNTAwTUMgJiYgT0YgJiYgQ09NTU9OX0NMSw0KPi0Jc2VsZWN0IENMS19QUENf
Q09SRU5FVA0KPisJc2VsZWN0IENMS19RT1JJUQ0KPiAJaGVscA0KPiAJICBUaGlzIGFkZHMgdGhl
IENQVUZyZXEgZHJpdmVyIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBlNTAwbWMsDQo+IAkgIGU1NTAw
IGFuZCBlNjUwMCBzZXJpZXMgU29DcyB3aGljaCBhcmUgY2FwYWJsZSBvZiBjaGFuZ2luZw0KPi0t
DQo+MS44LjANCg0K

^ permalink raw reply

* Re: [PATCH 1/4] powerpc: Dynamic DMA zone limits
From: Scott Wood @ 2014-10-14  9:44 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Anton Blanchard, Shaohui Xie
In-Reply-To: <1413273473.26478.52.camel@pasglop>

On Tue, 2014-10-14 at 18:57 +1100, Benjamin Herrenschmidt wrote:
> On Tue, 2014-10-14 at 09:39 +0200, Scott Wood wrote:
> > For a short-term workaround, I'd rather leave CONFIG_ZONE_DMA32 where
> > it
> > is and put #ifdef CONFIG_FSL_SOC (with a comment) around the whole
> > thing.
> 
> I'd like to not enable CONFIG_ZONE_DMA32 when we don't need it, ie,
> on !BOOKE 64-bit

How does 64-bit powermac deal with it, with random PCI cards?  Does it
use an IOMMU for coherent allocations?

In any case, CONFIG_ZONE_DMA32 should be harmless if the zone isn't
dynamically created, but we can limit it to booke if you want.  The
current breakage has nothing to do with ZONE_DMA32, but rather to the
fact that we now check zones at all.  This is why I'd rather have the
short term workaround be a new ifdef, rather than moving ifdef
CONFIG_ZONE_DMA32 (moving it also obscures the way the code should look
if and when the workaround can be removed).

-Scott

^ permalink raw reply

* Re: [PATCH v3 00/21] powerpc/8xx: Optimise MMU TLB handling and add support of 16k pages
From: Scott Wood @ 2014-10-14  9:16 UTC (permalink / raw)
  To: leroy christophe; +Cc: linuxppc-dev, Paul Mackerras, linux-kernel
In-Reply-To: <543C0176.5050706@c-s.fr>

On Mon, 2014-10-13 at 18:44 +0200, leroy christophe wrote:
> Le 17/09/2014 22:34, Scott Wood a écrit :
> > On Wed, 2014-09-17 at 22:33 +0200, christophe leroy wrote:
> >> Le 17/09/2014 18:40, Scott Wood a écrit :
> >>> On Wed, 2014-09-17 at 18:36 +0200, Christophe Leroy wrote:
> >>>> This patchset:
> >>>> 1) provides several MMU TLB handling optimisation on MPC8xx.
> >>>> 2) adds support of 16k pages on MPC8xx.
> >>>> All changes have been successfully tested on a custom board equipped with MPC885
> >>>>
> >>>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> >>>> Tested-by: Christophe Leroy <christophe.leroy@c-s.fr>
> >>> I've already applied patches 1, 2, 4, 5, 6, 9, and 10 from the previous
> >>> patchset -- have they changed?
> >>>
> >>> -Scott
> >>>
> >> No, only 3, 7, 17 are changed, and 20,21 are new.
> >> I didn't notice you already applied some. How should I then proceed now
> >> for the remaining ones ? Submit a new set ?
> >>
> > No, I'll just skip the ones I've already applied.
> >
> >
> I think I took into account all Joakim's and your's comments in v4.
> Since I submitted v4, I think I didn't get any new comment.
> What's the way forward to get the remaining ones applied ?

I haven't had a chance to review v4 yet.  I'm currently at conferences
and will be on vacation next week, but I will try to look at them soon
after that.

-Scott

^ permalink raw reply

* [PATCH v3] rtc/tpo: Driver to support rtc and wakeup on PowerNV platform
From: Neelesh Gupta @ 2014-10-14  8:38 UTC (permalink / raw)
  To: devicetree, tglx, linuxppc-dev, rtc-linux, a.zummo; +Cc: benh

The patch implements the OPAL rtc driver that binds with the rtc
driver subsystem. The driver uses the platform device infrastructure
to probe the rtc device and register it to rtc class framework. The
'wakeup' is supported depending upon the property 'has-tpo' present
in the OF node. It provides a way to load the generic rtc driver in
in the absence of an OPAL driver.

The patch also moves the existing OPAL rtc get/set time interfaces to the
new driver and exposes the necessary OPAL calls using EXPORT_SYMBOL_GPL.

Test results:
-------------
Host:
[root@tul169p1 ~]# ls -l /sys/class/rtc/
total 0
lrwxrwxrwx 1 root root 0 Oct 14 03:07 rtc0 -> ../../devices/opal-rtc/rtc/rtc0
[root@tul169p1 ~]# cat /sys/devices/opal-rtc/rtc/rtc0/time
08:10:07
[root@tul169p1 ~]# echo `date '+%s' -d '+ 2 minutes'` > /sys/class/rtc/rtc0/wakealarm
[root@tul169p1 ~]# cat /sys/class/rtc/rtc0/wakealarm
1413274345
[root@tul169p1 ~]#

FSP:
$ smgr mfgState
standby
$ rtim timeofday

System time is valid: 2014/10/14 08:12:04.225115

$ smgr mfgState
ipling
$ 

Signed-off-by: Neelesh Gupta <neelegup@linux.vnet.ibm.com>
---

Changes in v3
=============
- Rebased to the latest tree.

Changes in v2
=============
- Added Documentation/devicetree/bindings/rtc/rtc-opal.txt
- Explicitly turn off RTC_UIE mode by setting 'rtc->uie_unsupported'

 Documentation/devicetree/bindings/rtc/rtc-opal.txt |   16 +
 arch/powerpc/include/asm/opal.h                    |    7 -
 arch/powerpc/kernel/time.c                         |    1 
 arch/powerpc/platforms/powernv/opal-async.c        |    3 
 arch/powerpc/platforms/powernv/opal-rtc.c          |   65 +----
 arch/powerpc/platforms/powernv/opal-wrappers.S     |    2 
 arch/powerpc/platforms/powernv/opal.c              |    6 
 arch/powerpc/platforms/powernv/setup.c             |    2 
 drivers/rtc/Kconfig                                |   11 +
 drivers/rtc/Makefile                               |    1 
 drivers/rtc/rtc-opal.c                             |  261 ++++++++++++++++++++
 11 files changed, 325 insertions(+), 50 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/rtc-opal.txt
 create mode 100644 drivers/rtc/rtc-opal.c

diff --git a/Documentation/devicetree/bindings/rtc/rtc-opal.txt b/Documentation/devicetree/bindings/rtc/rtc-opal.txt
new file mode 100644
index 0000000..af87e5e
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/rtc-opal.txt
@@ -0,0 +1,16 @@
+IBM OPAL real-time clock
+------------------------
+
+Required properties:
+- comapatible: Should be "ibm,opal-rtc"
+
+Optional properties:
+- has-tpo: Decides if the wakeup is supported or not.
+
+Example:
+	rtc {
+		compatible = "ibm,opal-rtc";
+		has-tpo;
+		phandle = <0x10000029>;
+		linux,phandle = <0x10000029>;
+	};
diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
index 9124b0e..2c20561 100644
--- a/arch/powerpc/include/asm/opal.h
+++ b/arch/powerpc/include/asm/opal.h
@@ -154,6 +154,8 @@ struct opal_sg_list {
 #define OPAL_HANDLE_HMI				98
 #define OPAL_REGISTER_DUMP_REGION		101
 #define OPAL_UNREGISTER_DUMP_REGION		102
+#define OPAL_WRITE_TPO				103
+#define OPAL_READ_TPO				104
 
 #ifndef __ASSEMBLY__
 
@@ -819,6 +821,9 @@ int64_t opal_rtc_read(__be32 *year_month_day,
 		      __be64 *hour_minute_second_millisecond);
 int64_t opal_rtc_write(uint32_t year_month_day,
 		       uint64_t hour_minute_second_millisecond);
+int64_t opal_tpo_read(uint64_t token, __be32 *year_mon_day, __be32 *hour_min);
+int64_t opal_tpo_write(uint64_t token, uint32_t year_mon_day,
+		       uint32_t hour_min);
 int64_t opal_cec_power_down(uint64_t request);
 int64_t opal_cec_reboot(void);
 int64_t opal_read_nvram(uint64_t buffer, uint64_t size, uint64_t offset);
@@ -992,8 +997,6 @@ extern int opal_async_wait_response(uint64_t token, struct opal_msg *msg);
 extern int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data);
 
 struct rtc_time;
-extern int opal_set_rtc_time(struct rtc_time *tm);
-extern void opal_get_rtc_time(struct rtc_time *tm);
 extern unsigned long opal_get_boot_time(void);
 extern void opal_nvram_init(void);
 extern void opal_flash_init(void);
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 7505599..54490c7 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -989,6 +989,7 @@ void GregorianDay(struct rtc_time * tm)
 
 	tm->tm_wday = day % 7;
 }
+EXPORT_SYMBOL_GPL(GregorianDay);
 
 void to_tm(int tim, struct rtc_time * tm)
 {
diff --git a/arch/powerpc/platforms/powernv/opal-async.c b/arch/powerpc/platforms/powernv/opal-async.c
index e462ab9..693b6cd 100644
--- a/arch/powerpc/platforms/powernv/opal-async.c
+++ b/arch/powerpc/platforms/powernv/opal-async.c
@@ -71,6 +71,7 @@ int opal_async_get_token_interruptible(void)
 
 	return token;
 }
+EXPORT_SYMBOL_GPL(opal_async_get_token_interruptible);
 
 int __opal_async_release_token(int token)
 {
@@ -102,6 +103,7 @@ int opal_async_release_token(int token)
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(opal_async_release_token);
 
 int opal_async_wait_response(uint64_t token, struct opal_msg *msg)
 {
@@ -120,6 +122,7 @@ int opal_async_wait_response(uint64_t token, struct opal_msg *msg)
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(opal_async_wait_response);
 
 static int opal_async_comp_event(struct notifier_block *nb,
 		unsigned long msg_type, void *msg)
diff --git a/arch/powerpc/platforms/powernv/opal-rtc.c b/arch/powerpc/platforms/powernv/opal-rtc.c
index 499707d..37dbee1 100644
--- a/arch/powerpc/platforms/powernv/opal-rtc.c
+++ b/arch/powerpc/platforms/powernv/opal-rtc.c
@@ -15,6 +15,8 @@
 #include <linux/bcd.h>
 #include <linux/rtc.h>
 #include <linux/delay.h>
+#include <linux/platform_device.h>
+#include <linux/of_platform.h>
 
 #include <asm/opal.h>
 #include <asm/firmware.h>
@@ -43,7 +45,7 @@ unsigned long __init opal_get_boot_time(void)
 	long rc = OPAL_BUSY;
 
 	if (!opal_check_token(OPAL_RTC_READ))
-		goto out;
+		return 0;
 
 	while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
 		rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
@@ -53,62 +55,33 @@ unsigned long __init opal_get_boot_time(void)
 			mdelay(10);
 	}
 	if (rc != OPAL_SUCCESS)
-		goto out;
+		return 0;
 
 	y_m_d = be32_to_cpu(__y_m_d);
 	h_m_s_ms = be64_to_cpu(__h_m_s_ms);
 	opal_to_tm(y_m_d, h_m_s_ms, &tm);
 	return mktime(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
 		      tm.tm_hour, tm.tm_min, tm.tm_sec);
-out:
-	ppc_md.get_rtc_time = NULL;
-	ppc_md.set_rtc_time = NULL;
-	return 0;
 }
 
-void opal_get_rtc_time(struct rtc_time *tm)
+static __init int opal_time_init(void)
 {
-	long rc = OPAL_BUSY;
-	u32 y_m_d;
-	u64 h_m_s_ms;
-	__be32 __y_m_d;
-	__be64 __h_m_s_ms;
+	struct platform_device *pdev;
+	struct device_node *rtc;
 
-	while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
-		rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
-		if (rc == OPAL_BUSY_EVENT)
-			opal_poll_events(NULL);
+	rtc = of_find_node_by_path("/ibm,opal/rtc");
+	if (rtc) {
+		pdev = of_platform_device_create(rtc, "opal-rtc", NULL);
+		of_node_put(rtc);
+	} else {
+		if (opal_check_token(OPAL_RTC_READ) ||
+		    opal_check_token(OPAL_READ_TPO))
+			pdev = platform_device_register_simple("opal-rtc", -1,
+							       NULL, 0);
 		else
-			mdelay(10);
+			return -ENODEV;
 	}
-	if (rc != OPAL_SUCCESS)
-		return;
-	y_m_d = be32_to_cpu(__y_m_d);
-	h_m_s_ms = be64_to_cpu(__h_m_s_ms);
-	opal_to_tm(y_m_d, h_m_s_ms, tm);
-}
-
-int opal_set_rtc_time(struct rtc_time *tm)
-{
-	long rc = OPAL_BUSY;
-	u32 y_m_d = 0;
-	u64 h_m_s_ms = 0;
-
-	y_m_d |= ((u32)bin2bcd((tm->tm_year + 1900) / 100)) << 24;
-	y_m_d |= ((u32)bin2bcd((tm->tm_year + 1900) % 100)) << 16;
-	y_m_d |= ((u32)bin2bcd((tm->tm_mon + 1))) << 8;
-	y_m_d |= ((u32)bin2bcd(tm->tm_mday));
-
-	h_m_s_ms |= ((u64)bin2bcd(tm->tm_hour)) << 56;
-	h_m_s_ms |= ((u64)bin2bcd(tm->tm_min)) << 48;
-	h_m_s_ms |= ((u64)bin2bcd(tm->tm_sec)) << 40;
 
-	while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
-		rc = opal_rtc_write(y_m_d, h_m_s_ms);
-		if (rc == OPAL_BUSY_EVENT)
-			opal_poll_events(NULL);
-		else
-			mdelay(10);
-	}
-	return rc == OPAL_SUCCESS ? 0 : -EIO;
+	return PTR_ERR_OR_ZERO(pdev);
 }
+machine_subsys_initcall(powernv, opal_time_init);
diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
index e9e2450..7d7e7a8 100644
--- a/arch/powerpc/platforms/powernv/opal-wrappers.S
+++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
@@ -250,3 +250,5 @@ OPAL_CALL(opal_handle_hmi,			OPAL_HANDLE_HMI);
 OPAL_CALL(opal_register_dump_region,		OPAL_REGISTER_DUMP_REGION);
 OPAL_CALL(opal_unregister_dump_region,		OPAL_UNREGISTER_DUMP_REGION);
 OPAL_CALL(opal_pci_set_phb_cxl_mode,		OPAL_PCI_SET_PHB_CXL_MODE);
+OPAL_CALL(opal_tpo_write,			OPAL_WRITE_TPO);
+OPAL_CALL(opal_tpo_read,			OPAL_READ_TPO);
diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
index b642b05..7a7365a 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -784,3 +784,9 @@ void opal_free_sg_list(struct opal_sg_list *sg)
 			sg = NULL;
 	}
 }
+
+EXPORT_SYMBOL_GPL(opal_poll_events);
+EXPORT_SYMBOL_GPL(opal_rtc_read);
+EXPORT_SYMBOL_GPL(opal_rtc_write);
+EXPORT_SYMBOL_GPL(opal_tpo_read);
+EXPORT_SYMBOL_GPL(opal_tpo_write);
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index 3f9546d..9759338 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -265,8 +265,6 @@ static unsigned long pnv_memory_block_size(void)
 static void __init pnv_setup_machdep_opal(void)
 {
 	ppc_md.get_boot_time = opal_get_boot_time;
-	ppc_md.get_rtc_time = opal_get_rtc_time;
-	ppc_md.set_rtc_time = opal_set_rtc_time;
 	ppc_md.restart = pnv_restart;
 	ppc_md.power_off = pnv_power_off;
 	ppc_md.halt = pnv_halt;
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 8cd0bee..0e38cec 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -979,6 +979,17 @@ config RTC_DRV_NUC900
 	  If you say yes here you get support for the RTC subsystem of the
 	  NUC910/NUC920 used in embedded systems.
 
+config RTC_DRV_OPAL
+	tristate "IBM OPAL RTC driver"
+	depends on PPC_POWERNV
+	default y
+	help
+	  If you say yes here you get support for the PowerNV platform RTC
+	  driver based on OPAL interfaces.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called rtc-opal.
+
 comment "on-CPU RTC drivers"
 
 config RTC_DRV_DAVINCI
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index b188323..c8ef3e1 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -92,6 +92,7 @@ obj-$(CONFIG_RTC_DRV_MSM6242)	+= rtc-msm6242.o
 obj-$(CONFIG_RTC_DRV_MPC5121)	+= rtc-mpc5121.o
 obj-$(CONFIG_RTC_DRV_MV)	+= rtc-mv.o
 obj-$(CONFIG_RTC_DRV_NUC900)	+= rtc-nuc900.o
+obj-$(CONFIG_RTC_DRV_OPAL)	+= rtc-opal.o
 obj-$(CONFIG_RTC_DRV_OMAP)	+= rtc-omap.o
 obj-$(CONFIG_RTC_DRV_PALMAS)	+= rtc-palmas.o
 obj-$(CONFIG_RTC_DRV_PCAP)	+= rtc-pcap.o
diff --git a/drivers/rtc/rtc-opal.c b/drivers/rtc/rtc-opal.c
new file mode 100644
index 0000000..95f6521
--- /dev/null
+++ b/drivers/rtc/rtc-opal.c
@@ -0,0 +1,261 @@
+/*
+ * IBM OPAL RTC driver
+ * Copyright (C) 2014 IBM
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.
+ */
+
+#define DRVNAME		"rtc-opal"
+#define pr_fmt(fmt)	DRVNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/err.h>
+#include <linux/rtc.h>
+#include <linux/delay.h>
+#include <linux/bcd.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include <asm/opal.h>
+#include <asm/firmware.h>
+
+static void opal_to_tm(u32 y_m_d, u64 h_m_s_ms, struct rtc_time *tm)
+{
+	tm->tm_year = ((bcd2bin(y_m_d >> 24) * 100) +
+		       bcd2bin((y_m_d >> 16) & 0xff)) - 1900;
+	tm->tm_mon  = bcd2bin((y_m_d >> 8) & 0xff) - 1;
+	tm->tm_mday = bcd2bin(y_m_d & 0xff);
+	tm->tm_hour = bcd2bin((h_m_s_ms >> 56) & 0xff);
+	tm->tm_min  = bcd2bin((h_m_s_ms >> 48) & 0xff);
+	tm->tm_sec  = bcd2bin((h_m_s_ms >> 40) & 0xff);
+
+	GregorianDay(tm);
+}
+
+static void tm_to_opal(struct rtc_time *tm, u32 *y_m_d, u64 *h_m_s_ms)
+{
+	*y_m_d |= ((u32)bin2bcd((tm->tm_year + 1900) / 100)) << 24;
+	*y_m_d |= ((u32)bin2bcd((tm->tm_year + 1900) % 100)) << 16;
+	*y_m_d |= ((u32)bin2bcd((tm->tm_mon + 1))) << 8;
+	*y_m_d |= ((u32)bin2bcd(tm->tm_mday));
+
+	*h_m_s_ms |= ((u64)bin2bcd(tm->tm_hour)) << 56;
+	*h_m_s_ms |= ((u64)bin2bcd(tm->tm_min)) << 48;
+	*h_m_s_ms |= ((u64)bin2bcd(tm->tm_sec)) << 40;
+}
+
+static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
+{
+	long rc = OPAL_BUSY;
+	u32 y_m_d;
+	u64 h_m_s_ms;
+	__be32 __y_m_d;
+	__be64 __h_m_s_ms;
+
+	while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
+		rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
+		if (rc == OPAL_BUSY_EVENT)
+			opal_poll_events(NULL);
+		else
+			msleep(10);
+	}
+
+	if (rc != OPAL_SUCCESS)
+		return -EIO;
+
+	y_m_d = be32_to_cpu(__y_m_d);
+	h_m_s_ms = be64_to_cpu(__h_m_s_ms);
+	opal_to_tm(y_m_d, h_m_s_ms, tm);
+
+	return 0;
+}
+
+static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
+{
+	long rc = OPAL_BUSY;
+	u32 y_m_d = 0;
+	u64 h_m_s_ms = 0;
+
+	tm_to_opal(tm, &y_m_d, &h_m_s_ms);
+	while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
+		rc = opal_rtc_write(y_m_d, h_m_s_ms);
+		if (rc == OPAL_BUSY_EVENT)
+			opal_poll_events(NULL);
+		else
+			msleep(10);
+	}
+
+	return rc == OPAL_SUCCESS ? 0 : -EIO;
+}
+
+/*
+ * TPO	Timed Power-On
+ *
+ * TPO get/set OPAL calls care about the hour and min and to make it consistent
+ * with the rtc utility time conversion functions, we use the 'u64' to store
+ * its value and perform bit shift by 32 before use..
+ */
+static int opal_get_tpo_time(struct device *dev, struct rtc_wkalrm *alarm)
+{
+	__be32 __y_m_d, __h_m;
+	struct opal_msg msg;
+	int rc, token;
+	u64 h_m_s_ms;
+	u32 y_m_d;
+
+	token = opal_async_get_token_interruptible();
+	if (token < 0) {
+		if (token != -ERESTARTSYS)
+			pr_err("Failed to get the async token\n");
+
+		return token;
+	}
+
+	rc = opal_tpo_read(token, &__y_m_d, &__h_m);
+	if (rc != OPAL_ASYNC_COMPLETION) {
+		rc = -EIO;
+		goto exit;
+	}
+
+	rc = opal_async_wait_response(token, &msg);
+	if (rc) {
+		rc = -EIO;
+		goto exit;
+	}
+
+	rc = be64_to_cpu(msg.params[1]);
+	if (rc != OPAL_SUCCESS) {
+		rc = -EIO;
+		goto exit;
+	}
+
+	y_m_d = be32_to_cpu(__y_m_d);
+	h_m_s_ms = ((u64)be32_to_cpu(__h_m) << 32);
+	opal_to_tm(y_m_d, h_m_s_ms, &alarm->time);
+
+exit:
+	opal_async_release_token(token);
+	return rc;
+}
+
+/* Set Timed Power-On */
+static int opal_set_tpo_time(struct device *dev, struct rtc_wkalrm *alarm)
+{
+	u64 h_m_s_ms = 0, token;
+	struct opal_msg msg;
+	u32 y_m_d = 0;
+	int rc;
+
+	tm_to_opal(&alarm->time, &y_m_d, &h_m_s_ms);
+
+	token = opal_async_get_token_interruptible();
+	if (token < 0) {
+		if (token != -ERESTARTSYS)
+			pr_err("Failed to get the async token\n");
+
+		return token;
+	}
+
+	/* TPO, we care about hour and minute */
+	rc = opal_tpo_write(token, y_m_d,
+			    (u32)((h_m_s_ms >> 32) & 0xffff0000));
+	if (rc != OPAL_ASYNC_COMPLETION) {
+		rc = -EIO;
+		goto exit;
+	}
+
+	rc = opal_async_wait_response(token, &msg);
+	if (rc) {
+		rc = -EIO;
+		goto exit;
+	}
+
+	rc = be64_to_cpu(msg.params[1]);
+	if (rc != OPAL_SUCCESS)
+		rc = -EIO;
+
+exit:
+	opal_async_release_token(token);
+	return rc;
+}
+
+static const struct rtc_class_ops opal_rtc_ops = {
+	.read_time	= opal_get_rtc_time,
+	.set_time	= opal_set_rtc_time,
+	.read_alarm	= opal_get_tpo_time,
+	.set_alarm	= opal_set_tpo_time,
+};
+
+static int opal_rtc_probe(struct platform_device *pdev)
+{
+	struct rtc_device *rtc;
+
+	if (pdev->dev.of_node && of_get_property(pdev->dev.of_node, "has-tpo",
+						 NULL))
+		device_set_wakeup_capable(&pdev->dev, true);
+
+	rtc = devm_rtc_device_register(&pdev->dev, DRVNAME, &opal_rtc_ops,
+				       THIS_MODULE);
+	if (IS_ERR(rtc))
+		return PTR_ERR(rtc);
+
+	rtc->uie_unsupported = 1;
+
+	return 0;
+}
+
+static const struct of_device_id opal_rtc_match[] = {
+	{
+		.compatible	= "ibm,opal-rtc",
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(of, opal_rtc_match);
+
+static const struct platform_device_id opal_rtc_driver_ids[] = {
+	{
+		.name		= "opal-rtc",
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(platform, opal_rtc_driver_ids);
+
+static struct platform_driver opal_rtc_driver = {
+	.probe		= opal_rtc_probe,
+	.id_table	= opal_rtc_driver_ids,
+	.driver		= {
+		.name		= DRVNAME,
+		.owner		= THIS_MODULE,
+		.of_match_table	= opal_rtc_match,
+	},
+};
+
+static int __init opal_rtc_init(void)
+{
+	if (!firmware_has_feature(FW_FEATURE_OPAL))
+		return -ENODEV;
+
+	return platform_driver_register(&opal_rtc_driver);
+}
+
+static void __exit opal_rtc_exit(void)
+{
+	platform_driver_unregister(&opal_rtc_driver);
+}
+
+MODULE_AUTHOR("Neelesh Gupta <neelegup@linux.vnet.ibm.com>");
+MODULE_DESCRIPTION("IBM OPAL RTC driver");
+MODULE_LICENSE("GPL");
+
+module_init(opal_rtc_init);
+module_exit(opal_rtc_exit);

^ permalink raw reply related

* Re: [PATCH 1/4] powerpc: Dynamic DMA zone limits
From: Benjamin Herrenschmidt @ 2014-10-14  7:57 UTC (permalink / raw)
  To: Scott Wood; +Cc: linuxppc-dev, Anton Blanchard, Shaohui Xie
In-Reply-To: <1413272346.2878.2.camel@aoeu.buserror.net>

On Tue, 2014-10-14 at 09:39 +0200, Scott Wood wrote:
> For a short-term workaround, I'd rather leave CONFIG_ZONE_DMA32 where
> it
> is and put #ifdef CONFIG_FSL_SOC (with a comment) around the whole
> thing.

I'd like to not enable CONFIG_ZONE_DMA32 when we don't need it, ie,
on !BOOKE 64-bit

Cheers,
Ben.

^ permalink raw reply

* [PATCH] cpuidle/powernv: Populate cpuidle state details by querying the device-tree
From: Preeti U Murthy @ 2014-10-14  7:53 UTC (permalink / raw)
  To: mpe, rjw, benh; +Cc: shreyas, linuxppc-dev, linux-pm

We hard code the metrics relevant for cpuidle states in the kernel today.
Instead pick them up from the device tree so that they remain relevant
and updated for the system that the kernel is running on.

Cc: linux-pm@vger.kernel.org
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: devicetree@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Preeti U. Murthy <preeti@linux.vnet.ibm.com>
Signed-off-by: Shreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
---

 drivers/cpuidle/cpuidle-powernv.c |   27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/cpuidle/cpuidle-powernv.c b/drivers/cpuidle/cpuidle-powernv.c
index fa79392..b57681d 100644
--- a/drivers/cpuidle/cpuidle-powernv.c
+++ b/drivers/cpuidle/cpuidle-powernv.c
@@ -165,7 +165,8 @@ static int powernv_add_idle_states(void)
 	int nr_idle_states = 1; /* Snooze */
 	int dt_idle_states;
 	const __be32 *idle_state_flags;
-	u32 len_flags, flags;
+	const __be32 *idle_state_latency;
+	u32 len_flags, flags, latency_ns;
 	int i;
 
 	/* Currently we have snooze statically defined */
@@ -182,18 +183,32 @@ static int powernv_add_idle_states(void)
 		return nr_idle_states;
 	}
 
+	idle_state_latency = of_get_property(power_mgt,
+			"ibm,cpu-idle-state-latencies-ns", NULL);
+	if (!idle_state_latency) {
+		pr_warn("DT-PowerMgmt: missing ibm,cpu-idle-state-latencies-ns\n");
+		return nr_idle_states;
+	}
+
 	dt_idle_states = len_flags / sizeof(u32);
 
 	for (i = 0; i < dt_idle_states; i++) {
 
 		flags = be32_to_cpu(idle_state_flags[i]);
+
+		/* Cpuidle accepts exit_latency in us and we estimate
+		 * target residency to be 10x exit_latency
+		 */
+		latency_ns = be32_to_cpu(idle_state_latency[i]);
 		if (flags & IDLE_USE_INST_NAP) {
 			/* Add NAP state */
 			strcpy(powernv_states[nr_idle_states].name, "Nap");
 			strcpy(powernv_states[nr_idle_states].desc, "Nap");
 			powernv_states[nr_idle_states].flags = CPUIDLE_FLAG_TIME_VALID;
-			powernv_states[nr_idle_states].exit_latency = 10;
-			powernv_states[nr_idle_states].target_residency = 100;
+			powernv_states[nr_idle_states].exit_latency =
+					((unsigned int)latency_ns) / 1000;
+			powernv_states[nr_idle_states].target_residency =
+					((unsigned int)latency_ns / 100);
 			powernv_states[nr_idle_states].enter = &nap_loop;
 			nr_idle_states++;
 		}
@@ -204,8 +219,10 @@ static int powernv_add_idle_states(void)
 			strcpy(powernv_states[nr_idle_states].desc, "FastSleep");
 			powernv_states[nr_idle_states].flags =
 				CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TIMER_STOP;
-			powernv_states[nr_idle_states].exit_latency = 300;
-			powernv_states[nr_idle_states].target_residency = 1000000;
+			powernv_states[nr_idle_states].exit_latency =
+					((unsigned int)latency_ns) / 1000;
+			powernv_states[nr_idle_states].target_residency =
+					((unsigned int)latency_ns / 100);
 			powernv_states[nr_idle_states].enter = &fastsleep_loop;
 			nr_idle_states++;
 		}

^ permalink raw reply related

* Re: [PATCH 1/4] powerpc: Dynamic DMA zone limits
From: Scott Wood @ 2014-10-14  7:39 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: linuxppc-dev, Anton Blanchard, Shaohui Xie
In-Reply-To: <1413190849.21457.4.camel@concordia>

On Mon, 2014-10-13 at 20:00 +1100, Michael Ellerman wrote:
> On Mon, 2014-10-13 at 18:14 +1100, Anton Blanchard wrote:
> > Hi Scott,
> > 
> > > Platform code can call limit_zone_pfn() to set appropriate limits
> > > for ZONE_DMA and ZONE_DMA32, and dma_direct_alloc_coherent() will
> > > select a suitable zone based on a device's mask and the pfn limits
> > > that platform code has configured.
> > 
> > This patch breaks my POWER8 box:
> > 
> > ipr 0001:08:00.0: Using 64-bit DMA iommu bypass
> > ipr 0001:08:00.0: dma_direct_alloc_coherent: No suitable zone for pfn 0x10000
> > ipr 0001:08:00.0: Couldn't allocate enough memory for device driver! 
> > ipr: probe of 0001:08:00.0 failed with error -12
> > 
> > ipr isn't setting a coherent mask, but we shouldn't care on these boxes.
> > Could we ignore the coherent mask or copy the dma mask to it?
> 
> Talking to Ben the answer seems to be "it's complicated".
> 
> We shouldn't be ignoring the coherent mask, but we have been, and have been
> getting away with it.
> 
> The PCI code sets a default 32-bit mask, so we can't even detect when a device
> hasn't set it. Though maybe the powernv PCI code could be initialising it to
> 64-bit ?
> 
> For this cycle I'm thinking of the below patch.
> 
> Scott & Anton can you test please?
> 
> Also the depends on FSL_PCI was totally a guess, so please correct that if it's
> wrong Scott.

We need the DMA zone for non-PCI devices, so FSL_SOC would be a better
choice.

> diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c
> index adac9dc54aee..bd443a2e4426 100644
> --- a/arch/powerpc/kernel/dma.c
> +++ b/arch/powerpc/kernel/dma.c
> @@ -53,6 +53,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
>  #else
>  	struct page *page;
>  	int node = dev_to_node(dev);
> +#ifdef CONFIG_ZONE_DMA32
>  	u64 pfn = get_pfn_limit(dev);
>  	int zone;
>  
> @@ -67,12 +68,11 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
>  	case ZONE_DMA:
>  		flag |= GFP_DMA;
>  		break;
> -#ifdef CONFIG_ZONE_DMA32
>  	case ZONE_DMA32:
>  		flag |= GFP_DMA32;
>  		break;
> -#endif
>  	};
> +#endif /* CONFIG_ZONE_DMA32 */

For a short-term workaround, I'd rather leave CONFIG_ZONE_DMA32 where it
is and put #ifdef CONFIG_FSL_SOC (with a comment) around the whole
thing.

-Scott

^ permalink raw reply

* Re: [PATCH] powerpc/pci: remove duplicate declaration of pci_bus_find_capability
From: Wei Yang @ 2014-10-14  6:41 UTC (permalink / raw)
  To: michaele; +Cc: linuxppc-dev, Gavin Shan
In-Reply-To: <20141014062539.GA5639@richard>

On Tue, Oct 14, 2014 at 02:25:39PM +0800, Wei Yang wrote:
>On Fri, Sep 19, 2014 at 08:18:02PM +1000, Gavin Shan wrote:
>>On Fri, Sep 19, 2014 at 05:25:22PM +0800, Wei Yang wrote:
>>>pci_bus_find_capability() is decleared in pci.h, so it is not necessary to do
>>>it again.
>>>
>>>This patch removes it.
>>>
>>>Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
>>
>>Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>>
>>Thanks,
>>Gavin
>
>Hi, Michael
>
>I see this is not merged in your tree. Do you have some comment?
>

Oops,

As pointed by Gavin, it is in the next branch.

>>
>>>---
>>> arch/powerpc/kernel/pci-common.c |    1 -
>>> 1 file changed, 1 deletion(-)
>>>
>>>diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
>>>index b2814e2..9cfa069 100644
>>>--- a/arch/powerpc/kernel/pci-common.c
>>>+++ b/arch/powerpc/kernel/pci-common.c
>>>@@ -1561,7 +1561,6 @@ EARLY_PCI_OP(write, byte, u8)
>>> EARLY_PCI_OP(write, word, u16)
>>> EARLY_PCI_OP(write, dword, u32)
>>>
>>>-extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
>>> int early_find_capability(struct pci_controller *hose, int bus, int devfn,
>>> 			  int cap)
>>> {
>>>-- 
>>>1.7.9.5
>>>
>
>-- 
>Richard Yang
>Help you, Help me

-- 
Richard Yang
Help you, Help me

^ permalink raw reply

* Re: [PATCH] powerpc/pci: remove duplicate declaration of pci_bus_find_capability
From: Wei Yang @ 2014-10-14  6:25 UTC (permalink / raw)
  To: michaele; +Cc: Wei Yang, linuxppc-dev, Gavin Shan
In-Reply-To: <20140919101802.GA7107@shangw>

On Fri, Sep 19, 2014 at 08:18:02PM +1000, Gavin Shan wrote:
>On Fri, Sep 19, 2014 at 05:25:22PM +0800, Wei Yang wrote:
>>pci_bus_find_capability() is decleared in pci.h, so it is not necessary to do
>>it again.
>>
>>This patch removes it.
>>
>>Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
>
>Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
>
>Thanks,
>Gavin

Hi, Michael

I see this is not merged in your tree. Do you have some comment?

>
>>---
>> arch/powerpc/kernel/pci-common.c |    1 -
>> 1 file changed, 1 deletion(-)
>>
>>diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
>>index b2814e2..9cfa069 100644
>>--- a/arch/powerpc/kernel/pci-common.c
>>+++ b/arch/powerpc/kernel/pci-common.c
>>@@ -1561,7 +1561,6 @@ EARLY_PCI_OP(write, byte, u8)
>> EARLY_PCI_OP(write, word, u16)
>> EARLY_PCI_OP(write, dword, u32)
>>
>>-extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
>> int early_find_capability(struct pci_controller *hose, int bus, int devfn,
>> 			  int cap)
>> {
>>-- 
>>1.7.9.5
>>

-- 
Richard Yang
Help you, Help me

^ permalink raw reply

* Re: [RFC PATCH v3 1/3] powerpc: Fix warning reported by verify_cpu_node_mapping()
From: Michael Ellerman @ 2014-10-14  4:35 UTC (permalink / raw)
  To: Li Zhong; +Cc: Nishanth Aravamudan, linuxppc-dev, paulus, Nathan Fontenot
In-Reply-To: <1413254364.2474.0.camel@TP420>

On Tue, 2014-10-14 at 10:39 +0800, Li Zhong wrote:
> On 二, 2014-10-07 at 08:33 -0700, Nishanth Aravamudan wrote:
> > On 07.10.2014 [17:28:38 +1100], Michael Ellerman wrote:
> > > On Fri, 2014-10-03 at 16:26 -0700, Nishanth Aravamudan wrote:
> > > > On 03.10.2014 [10:50:20 +1000], Michael Ellerman wrote:
> > > > > On Thu, 2014-10-02 at 14:13 -0700, Nishanth Aravamudan wrote:
> > > > > > Ben & Michael,
> > > > > > 
> > > > > > What's the status of these patches?
> > > > > 
> > > > > Been in my next for a week :)
> > > > > 
> > > > > https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/log/?h=next
> > > > 
> > > > Ah ok, thanks -- I wasn't following your tree, my fault. 
> > > 
> > > Not really your fault, I hadn't announced my trees existence :)
> > > 
> > > > Do we want these to go back to 3.17-stable, as they fix some annoying splats
> > > > during boot (non-fatal afaict, though)?
> > > 
> > > Up to you really, I don't know how often/bad they were. I haven't added CC
> > > stable tags to the commits, so if you want them in stable you should send them
> > > explicitly.
> > 
> > I think they occur every boot, unconditionally, on pseries. Doesn't
> > prevent boot, just really noisy. I think it'd be good to get them into
> > -stable.
> > 
> > Li Zhong, can you push them once they get sent upstream?
> 
> I guess I only need to send the first two patches to stable? 

Probably. It's not clear from the changelog how serious a problem it fixes.

See Documentation/stable_kernel_rules.txt

cheers

^ permalink raw reply

* Re: [PATCH 08/44] kernel: Move pm_power_off to common code
From: Hirokazu TAKATA @ 2014-10-14  4:29 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-m32r-ja, linux-mips, linux-efi, linux-ia64, Steven Miao,
	linux-xtensa, Boris Ostrovsky, Catalin Marinas, Will Deacon,
	David Howells, Max Filippov, Paul Mackerras, Ralf Baechle,
	Pavel Machek, H. Peter Anvin, Guan Xuetao, Thomas Gleixner,
	Lennox Wu, Hans-Christian Egtvedt, devel, linux-s390,
	Jesper Nilsson, lguest, Russell King, linux-c6x-dev, Len Brown,
	David S. Miller, linux-hexagon, Hirokazu Takata, linux-sh,
	James E.J. Bottomley, linux-acpi, Ingo Molnar, Geert Uytterhoeven,
	Mark Salter, xen-devel, Matt Turner, Chen Liqin, Jonas Bonn,
	Haavard Skinnemoen, devicetree, James Hogan,
	user-mode-linux-devel, linux-pm, Aurelien Jacquiot,
	Heiko Carstens, Jeff Dike, adi-buildroot-devel, Chris Metcalf,
	Konrad Rzeszutek Wilk, Mikael Starvik, Richard Weinberger,
	linux-m68k, linux-am33-list, Ivan Kokshaysky, linux-tegra,
	openipmi-developer, linux-metag, linux-arm-kernel,
	Richard Henderson, Chris Zankel, Michal Simek, Tony Luck,
	linux-parisc, linux-cris-kernel, Vineet Gupta, Rafael J. Wysocki,
	linux-kernel, Fenghua Yu, Richard Kuo, David Vrabel, linux-alpha,
	Martin Schwidefsky, Koichi Yasutake, linuxppc-dev, Helge Deller
In-Reply-To: <1412659726-29957-9-git-send-email-linux@roeck-us.net>

From: Guenter Roeck <linux@roeck-us.net>
>  arch/m32r/kernel/process.c         |  8 ++++----

Acked-by: Hirokazu Takata <takata@linux-m32r.org>

Thank you.

-- takata

^ permalink raw reply

* Re: [RFC PATCH v3 1/3] powerpc: Fix warning reported by verify_cpu_node_mapping()
From: Li Zhong @ 2014-10-14  2:39 UTC (permalink / raw)
  To: Nishanth Aravamudan; +Cc: linuxppc-dev, Nathan Fontenot, paulus
In-Reply-To: <20141007153346.GE9339@linux.vnet.ibm.com>

On 二, 2014-10-07 at 08:33 -0700, Nishanth Aravamudan wrote:
> On 07.10.2014 [17:28:38 +1100], Michael Ellerman wrote:
> > On Fri, 2014-10-03 at 16:26 -0700, Nishanth Aravamudan wrote:
> > > On 03.10.2014 [10:50:20 +1000], Michael Ellerman wrote:
> > > > On Thu, 2014-10-02 at 14:13 -0700, Nishanth Aravamudan wrote:
> > > > > Ben & Michael,
> > > > > 
> > > > > What's the status of these patches?
> > > > 
> > > > Been in my next for a week :)
> > > > 
> > > > https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/log/?h=next
> > > 
> > > Ah ok, thanks -- I wasn't following your tree, my fault. 
> > 
> > Not really your fault, I hadn't announced my trees existence :)
> > 
> > > Do we want these to go back to 3.17-stable, as they fix some annoying splats
> > > during boot (non-fatal afaict, though)?
> > 
> > Up to you really, I don't know how often/bad they were. I haven't added CC
> > stable tags to the commits, so if you want them in stable you should send them
> > explicitly.
> 
> I think they occur every boot, unconditionally, on pseries. Doesn't
> prevent boot, just really noisy. I think it'd be good to get them into
> -stable.
> 
> Li Zhong, can you push them once they get sent upstream?

I guess I only need to send the first two patches to stable? 

Thanks, Zhong
> 
> Thanks,
> Nish

^ permalink raw reply

* Re: [PATCHv9 2/5] ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
From: Michael Ellerman @ 2014-10-14  1:57 UTC (permalink / raw)
  To: Yann Droneaud
  Cc: cbe-oss-dev, Jiri Kosina, Arnd Bergmann, Paul Mackerras,
	Jeremy Kerr, linux-fsdevel, Andrew Morton, linuxppc-dev, Al Viro
In-Reply-To: <9a145561123e28585d7994b61359a531128a80b8.1413223900.git.ydroneaud@opteya.com>

On Mon, 2014-10-13 at 21:30 +0200, Yann Droneaud wrote:
> This patch replaces calls to get_unused_fd() with equivalent call to
> get_unused_fd_flags(0) to preserve current behavor for existing code.
> 
> In a further patch, get_unused_fd() will be removed so that new code
> start using get_unused_fd_flags(), with the hope O_CLOEXEC could be
> used, either by default or choosen by userspace.
> 
> Link: http://lkml.kernel.org/r/cover.1413223900.git.ydroneaud@opteya.com
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: trivial@kernel.org
> Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>

This is fine by me, do you want an ack, or do you want us to take it via the
powerpc tree?

If the former:

Acked-by: Michael Ellerman <mpe@ellerman.id.au>


cheers

^ permalink raw reply

* [PATCH] powerpc: Remove ppc64_boot_msg
From: Anton Blanchard @ 2014-10-14  1:24 UTC (permalink / raw)
  To: benh, paulus, mpe; +Cc: linuxppc-dev

ppc64_boot_msg is meant to be a boot debug aid, but
is only used in one spot. Get rid of it, and save
ourseleves a couple of lines in the kernel log
buffer.

Signed-off-by: Anton Blanchard <anton@samba.org>
---
 arch/powerpc/include/asm/machdep.h | 10 ----------
 arch/powerpc/kernel/setup_64.c     | 29 -----------------------------
 2 files changed, 39 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 327e8dd..6ac6dfd 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -341,16 +341,6 @@ extern sys_ctrler_t sys_ctrler;
 
 #endif /* CONFIG_PPC_PMAC */
 
-
-/* Functions to produce codes on the leds.
- * The SRC code should be unique for the message category and should
- * be limited to the lower 24 bits (the upper 8 are set by these funcs),
- * and (for boot & dump) should be sorted numerically in the order
- * the events occur.
- */
-/* Print a boot progress message. */
-void ppc64_boot_msg(unsigned int src, const char *msg);
-
 static inline void log_error(char *buf, unsigned int err_type, int fatal)
 {
 	if (ppc_md.log_error)
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 317e96a..1b56320 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -665,8 +665,6 @@ static void __init emergency_stack_init(void)
  */
 void __init setup_arch(char **cmdline_p)
 {
-	ppc64_boot_msg(0x12, "Setup Arch");
-
 	*cmdline_p = boot_command_line;
 
 	/*
@@ -711,33 +709,6 @@ void __init setup_arch(char **cmdline_p)
 	if ((unsigned long)_stext & 0xffff)
 		panic("Kernelbase not 64K-aligned (0x%lx)!\n",
 		      (unsigned long)_stext);
-
-	ppc64_boot_msg(0x15, "Setup Done");
-}
-
-
-/* ToDo: do something useful if ppc_md is not yet setup. */
-#define PPC64_LINUX_FUNCTION 0x0f000000
-#define PPC64_IPL_MESSAGE 0xc0000000
-#define PPC64_TERM_MESSAGE 0xb0000000
-
-static void ppc64_do_msg(unsigned int src, const char *msg)
-{
-	if (ppc_md.progress) {
-		char buf[128];
-
-		sprintf(buf, "%08X\n", src);
-		ppc_md.progress(buf, 0);
-		snprintf(buf, 128, "%s", msg);
-		ppc_md.progress(buf, 0);
-	}
-}
-
-/* Print a boot progress message. */
-void ppc64_boot_msg(unsigned int src, const char *msg)
-{
-	ppc64_do_msg(PPC64_LINUX_FUNCTION|PPC64_IPL_MESSAGE|src, msg);
-	printk("[boot]%04x %s\n", src, msg);
 }
 
 #ifdef CONFIG_SMP
-- 
1.9.1

^ permalink raw reply related

* [PATCH] powerpc: Remove ppc_md.remove_memory
From: Anton Blanchard @ 2014-10-14  1:04 UTC (permalink / raw)
  To: benh, paulus, mpe, nfont; +Cc: linuxppc-dev

We have an extra level of indirection on memory hot remove which is not
matched on memory hot add. Memory hotplug is book3s only, so there is
no need for it.

This also enables means remove_memory() (ie memory hot unplug) works
on powernv.

Signed-off-by: Anton Blanchard <anton@samba.org>
---
 arch/powerpc/include/asm/machdep.h              |  4 ----
 arch/powerpc/mm/mem.c                           | 12 ++++++++++--
 arch/powerpc/platforms/pseries/hotplug-memory.c | 21 ---------------------
 3 files changed, 10 insertions(+), 27 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 902ab20..327e8dd 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -294,10 +294,6 @@ struct machdep_calls {
 #ifdef CONFIG_ARCH_RANDOM
 	int (*get_random_long)(unsigned long *v);
 #endif
-
-#ifdef CONFIG_MEMORY_HOTREMOVE
-	int (*remove_memory)(u64, u64);
-#endif
 };
 
 extern void e500_idle(void);
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 8ebaac7..b9f2e7c 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -35,6 +35,7 @@
 #include <linux/memblock.h>
 #include <linux/hugetlb.h>
 #include <linux/slab.h>
+#include <linux/vmalloc.h>
 
 #include <asm/pgalloc.h>
 #include <asm/prom.h>
@@ -144,8 +145,15 @@ int arch_remove_memory(u64 start, u64 size)
 
 	zone = page_zone(pfn_to_page(start_pfn));
 	ret = __remove_pages(zone, start_pfn, nr_pages);
-	if (!ret && (ppc_md.remove_memory))
-		ret = ppc_md.remove_memory(start, size);
+
+	start = (unsigned long)__va(start);
+	if (!ret)
+		ret = remove_section_mapping(start, start + size);
+
+	/* Ensure all vmalloc mappings are flushed in case they also
+	 * hit that section of memory
+	 */
+	vm_unmap_aliases();
 
 	return ret;
 }
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index 187ecfa..d5426ec 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -12,7 +12,6 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/memblock.h>
-#include <linux/vmalloc.h>
 #include <linux/memory.h>
 #include <linux/memory_hotplug.h>
 
@@ -66,22 +65,6 @@ unsigned long pseries_memory_block_size(void)
 }
 
 #ifdef CONFIG_MEMORY_HOTREMOVE
-static int pseries_remove_memory(u64 start, u64 size)
-{
-	int ret;
-
-	/* Remove htab bolted mappings for this section of memory */
-	start = (unsigned long)__va(start);
-	ret = remove_section_mapping(start, start + size);
-
-	/* Ensure all vmalloc mappings are flushed in case they also
-	 * hit that section of memory
-	 */
-	vm_unmap_aliases();
-
-	return ret;
-}
-
 static int pseries_remove_memblock(unsigned long base, unsigned int memblock_size)
 {
 	unsigned long block_sz, start_pfn;
@@ -262,10 +245,6 @@ static int __init pseries_memory_hotplug_init(void)
 	if (firmware_has_feature(FW_FEATURE_LPAR))
 		of_reconfig_notifier_register(&pseries_mem_nb);
 
-#ifdef CONFIG_MEMORY_HOTREMOVE
-	ppc_md.remove_memory = pseries_remove_memory;
-#endif
-
 	return 0;
 }
 machine_device_initcall(pseries, pseries_memory_hotplug_init);
-- 
1.9.1

^ permalink raw reply related

* [PATCH] powerpc/pci: Quieten unset I/O resource warning
From: Anton Blanchard @ 2014-10-14  0:40 UTC (permalink / raw)
  To: benh, paulus, mpe; +Cc: linuxppc-dev

Newer POWER designs do not implement PCI I/O space, so we
expect to see a number of these.

Reduce the severity of the warning so it doesn't mask other
real issues.

Signed-off-by: Anton Blanchard <anton@samba.org>
---

Index: b/arch/powerpc/kernel/pci-common.c
===================================================================
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -1460,7 +1460,7 @@ static void pcibios_setup_phb_resources(
 	res = &hose->io_resource;
 
 	if (!res->flags) {
-		printk(KERN_WARNING "PCI: I/O resource not set for host"
+		pr_info("PCI: I/O resource not set for host"
 		       " bridge %s (domain %d)\n",
 		       hose->dn->full_name, hose->global_number);
 	} else {

^ permalink raw reply

* Re: [PATCH v3 4/7] sound/radeon: Add quirk for broken 64-bit MSI
From: Bjorn Helgaas @ 2014-10-13 20:46 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: linuxppc-dev, Dave Airlie, Linux PCI, Anton Blanchard,
	Takashi Iwai, Yijing Wang, Brian King, Alex Deucher
In-Reply-To: <1413231118.26478.21.camel@pasglop>

On Mon, Oct 13, 2014 at 2:11 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Wed, 2014-10-08 at 16:28 +1100, Benjamin Herrenschmidt wrote:
>
>> > Further discussion with the hw teams have revealed that this is still
>> > an issue on newer asics so I think your original patch is correct
>> > after all.  Just disable 64 bit MSIs on all AMD audio PCI ids.
>>
>> Allright, I won't resend the whole series, I can just pickup my previous
>> patch. Takashi, Bjorn, Dave, this series covers your 3 areas of
>> maintainership, how do you want to proceed ? I'm happy to merge the
>> whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys
>> send me the appropriate acks, otherwise, let me know.
>
> So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)
>
> Ping ?

Sorry, I've been taking a breather after the v3.17 release.  I'll try
to look at these soon, but I will be on vacation Thu-Fri this week).

Bjorn

^ permalink raw reply

* Re: [PATCH v3 4/7] sound/radeon: Add quirk for broken 64-bit MSI
From: Alex Deucher @ 2014-10-13 20:39 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: linuxppc-dev, Dave Airlie, Linux PCI, Anton Blanchard, Brian King,
	Yijing Wang, Takashi Iwai, Bjorn Helgaas
In-Reply-To: <1413231118.26478.21.camel@pasglop>

On Mon, Oct 13, 2014 at 4:11 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Wed, 2014-10-08 at 16:28 +1100, Benjamin Herrenschmidt wrote:
>
>> > Further discussion with the hw teams have revealed that this is still
>> > an issue on newer asics so I think your original patch is correct
>> > after all.  Just disable 64 bit MSIs on all AMD audio PCI ids.
>>
>> Allright, I won't resend the whole series, I can just pickup my previous
>> patch. Takashi, Bjorn, Dave, this series covers your 3 areas of
>> maintainership, how do you want to proceed ? I'm happy to merge the
>> whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys
>> send me the appropriate acks, otherwise, let me know.
>
> So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)
>
> Ping ?

I'm fine with the radeon patches going through your tree rather than
through my tree.

Alex

^ permalink raw reply

* Re: [PATCH v3 4/7] sound/radeon: Add quirk for broken 64-bit MSI
From: Benjamin Herrenschmidt @ 2014-10-13 20:11 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: linuxppc-dev, Dave Airlie, Linux PCI, Anton Blanchard,
	Takashi Iwai, Yijing Wang, Brian King, Alex Deucher
In-Reply-To: <1412746096.30859.229.camel@pasglop>

On Wed, 2014-10-08 at 16:28 +1100, Benjamin Herrenschmidt wrote:

> > Further discussion with the hw teams have revealed that this is still
> > an issue on newer asics so I think your original patch is correct
> > after all.  Just disable 64 bit MSIs on all AMD audio PCI ids.
> 
> Allright, I won't resend the whole series, I can just pickup my previous
> patch. Takashi, Bjorn, Dave, this series covers your 3 areas of
> maintainership, how do you want to proceed ? I'm happy to merge the
> whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys
> send me the appropriate acks, otherwise, let me know.

So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)

Ping ?

Cheers,
Ben.

^ permalink raw reply

* [PATCHv9 2/5] ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
From: Yann Droneaud @ 2014-10-13 19:30 UTC (permalink / raw)
  To: Jeremy Kerr, Arnd Bergmann, Benjamin Herrenschmidt,
	Paul Mackerras, Michael Ellerman, Al Viro, Andrew Morton,
	Jiri Kosina
  Cc: Yann Droneaud, cbe-oss-dev, linux-fsdevel, linuxppc-dev
In-Reply-To: <cover.1413223900.git.ydroneaud@opteya.com>

This patch replaces calls to get_unused_fd() with equivalent call to
get_unused_fd_flags(0) to preserve current behavor for existing code.

In a further patch, get_unused_fd() will be removed so that new code
start using get_unused_fd_flags(), with the hope O_CLOEXEC could be
used, either by default or choosen by userspace.

Link: http://lkml.kernel.org/r/cover.1413223900.git.ydroneaud@opteya.com
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: trivial@kernel.org
Signed-off-by: Yann Droneaud <ydroneaud@opteya.com>
---
 arch/powerpc/platforms/cell/spufs/inode.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 87ba7cf99cd7..51effcec30d8 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -301,7 +301,7 @@ static int spufs_context_open(struct path *path)
 	int ret;
 	struct file *filp;
 
-	ret = get_unused_fd();
+	ret = get_unused_fd_flags(0);
 	if (ret < 0)
 		return ret;
 
@@ -518,7 +518,7 @@ static int spufs_gang_open(struct path *path)
 	int ret;
 	struct file *filp;
 
-	ret = get_unused_fd();
+	ret = get_unused_fd_flags(0);
 	if (ret < 0)
 		return ret;
 
-- 
1.9.3

^ permalink raw reply related

* [PATCHv9 0/5] Getting rid of get_unused_fd()
From: Yann Droneaud @ 2014-10-13 19:30 UTC (permalink / raw)
  To: Tony Luck, Fenghua Yu, linux-ia64, Jeremy Kerr, Arnd Bergmann,
	Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman,
	linuxppc-dev, cbe-oss-dev, Al Viro, linux-fsdevel, Andrew Morton,
	Jiri Kosina
  Cc: Yann Droneaud, linux-kernel

Hi,

Please find the 9th revision of my patchset to remove
get_unused_fd() macro.

In linux-next, tag next-20141013, they're currently:

- 33 calls to fd_install()
       with one call part of anon_inode_getfd()
- 27 calls to get_unused_fd_flags()
       with one call part of anon_inode_getfd()
       with another part of get_unused_fd() macro
- 13 calls to anon_inode_getfd()
-  8 calls to anon_inode_getfile()
       with one call part of anon_inode_getfd()
-  5 calls to get_unused_fd()

The following patchset replaces the 5 last calls to
get_unused_fd() by calls to get_unused_fd_flags(0)
and remove the macro so that it won't be used in
newer code.

For some detailed background information, please have
a look at my previous patchset's cover letter[1].

Changes from patchset v8[1]
- fanotify: enable close-on-exec on events' fd when requested in
    fanotify_init()
  DROPPED: applied upstream, commit 0b37e097a648.
- reduce the amount of explanation in cover letter

[1] http://lkml.kernel.org/r/cover.1411562410.git.ydroneaud@opteya.com

Yann Droneaud (5):
  ia64: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
  ppc/cell: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
  binfmt_misc: trivial: replace get_unused_fd() by
    get_unused_fd_flags(0)
  file: trivial: replace get_unused_fd() by get_unused_fd_flags(0)
  file: remove get_unused_fd() macro

 arch/ia64/kernel/perfmon.c                | 2 +-
 arch/powerpc/platforms/cell/spufs/inode.c | 4 ++--
 fs/binfmt_misc.c                          | 2 +-
 fs/file.c                                 | 2 +-
 include/linux/file.h                      | 1 -
 5 files changed, 5 insertions(+), 6 deletions(-)

-- 
1.9.3

^ permalink raw reply

* Re: [PATCH v3 00/21] powerpc/8xx: Optimise MMU TLB handling and add support of 16k pages
From: leroy christophe @ 2014-10-13 16:44 UTC (permalink / raw)
  To: Scott Wood; +Cc: linuxppc-dev, Paul Mackerras, linux-kernel
In-Reply-To: <1410986079.24184.534.camel@snotra.buserror.net>


Le 17/09/2014 22:34, Scott Wood a écrit :
> On Wed, 2014-09-17 at 22:33 +0200, christophe leroy wrote:
>> Le 17/09/2014 18:40, Scott Wood a écrit :
>>> On Wed, 2014-09-17 at 18:36 +0200, Christophe Leroy wrote:
>>>> This patchset:
>>>> 1) provides several MMU TLB handling optimisation on MPC8xx.
>>>> 2) adds support of 16k pages on MPC8xx.
>>>> All changes have been successfully tested on a custom board equipped with MPC885
>>>>
>>>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>>>> Tested-by: Christophe Leroy <christophe.leroy@c-s.fr>
>>> I've already applied patches 1, 2, 4, 5, 6, 9, and 10 from the previous
>>> patchset -- have they changed?
>>>
>>> -Scott
>>>
>> No, only 3, 7, 17 are changed, and 20,21 are new.
>> I didn't notice you already applied some. How should I then proceed now
>> for the remaining ones ? Submit a new set ?
>>
> No, I'll just skip the ones I've already applied.
>
>
I think I took into account all Joakim's and your's comments in v4.
Since I submitted v4, I think I didn't get any new comment.
What's the way forward to get the remaining ones applied ?

Christophe

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox