Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f1f4311 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

Merge branch 'merge' into next

Merge stuff that already went into Linus via "merge" which
are pre-reqs for subsequent patches
parents 5935ff43 28e61cc4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -586,7 +586,7 @@ config SCHED_SMT
config PPC_DENORMALISATION
	bool "PowerPC denormalisation exception handling"
	depends on PPC_BOOK3S_64
	default "n"
	default "y" if PPC_POWERNV
	---help---
	  Add support for handling denormalisation of single precision
	  values.  Useful for bare metal only.  If unsure say Y here.
+4 −0
Original line number Diff line number Diff line
@@ -247,6 +247,10 @@ struct thread_struct {
	unsigned long	tm_orig_msr;	/* Thread's MSR on ctx switch */
	struct pt_regs	ckpt_regs;	/* Checkpointed registers */

	unsigned long	tm_tar;
	unsigned long	tm_ppr;
	unsigned long	tm_dscr;

	/*
	 * Transactional FP and VSX 0-31 register set.
	 * NOTE: the sense of these is the opposite of the integer ckpt_regs!
+20 −11
Original line number Diff line number Diff line
@@ -254,19 +254,28 @@
#define SPRN_HRMOR	0x139	/* Real mode offset register */
#define SPRN_HSRR0	0x13A	/* Hypervisor Save/Restore 0 */
#define SPRN_HSRR1	0x13B	/* Hypervisor Save/Restore 1 */
/* HFSCR and FSCR bit numbers are the same */
#define FSCR_TAR_LG	8	/* Enable Target Address Register */
#define FSCR_EBB_LG	7	/* Enable Event Based Branching */
#define FSCR_TM_LG	5	/* Enable Transactional Memory */
#define FSCR_PM_LG	4	/* Enable prob/priv access to PMU SPRs */
#define FSCR_BHRB_LG	3	/* Enable Branch History Rolling Buffer*/
#define FSCR_DSCR_LG	2	/* Enable Data Stream Control Register */
#define FSCR_VECVSX_LG	1	/* Enable VMX/VSX  */
#define FSCR_FP_LG	0	/* Enable Floating Point */
#define SPRN_FSCR	0x099	/* Facility Status & Control Register */
#define   FSCR_TAR	(1 << (63-55)) /* Enable Target Address Register */
#define   FSCR_EBB	(1 << (63-56)) /* Enable Event Based Branching */
#define   FSCR_DSCR	(1 << (63-61)) /* Enable Data Stream Control Register */
#define   FSCR_TAR	__MASK(FSCR_TAR_LG)
#define   FSCR_EBB	__MASK(FSCR_EBB_LG)
#define   FSCR_DSCR	__MASK(FSCR_DSCR_LG)
#define SPRN_HFSCR	0xbe	/* HV=1 Facility Status & Control Register */
#define   HFSCR_TAR	(1 << (63-55)) /* Enable Target Address Register */
#define   HFSCR_EBB	(1 << (63-56)) /* Enable Event Based Branching */
#define   HFSCR_TM	(1 << (63-58)) /* Enable Transactional Memory */
#define   HFSCR_PM	(1 << (63-60)) /* Enable prob/priv access to PMU SPRs */
#define   HFSCR_BHRB	(1 << (63-59)) /* Enable Branch History Rolling Buffer*/
#define   HFSCR_DSCR	(1 << (63-61)) /* Enable Data Stream Control Register */
#define   HFSCR_VECVSX	(1 << (63-62)) /* Enable VMX/VSX  */
#define   HFSCR_FP	(1 << (63-63)) /* Enable Floating Point */
#define   HFSCR_TAR	__MASK(FSCR_TAR_LG)
#define   HFSCR_EBB	__MASK(FSCR_EBB_LG)
#define   HFSCR_TM	__MASK(FSCR_TM_LG)
#define   HFSCR_PM	__MASK(FSCR_PM_LG)
#define   HFSCR_BHRB	__MASK(FSCR_BHRB_LG)
#define   HFSCR_DSCR	__MASK(FSCR_DSCR_LG)
#define   HFSCR_VECVSX	__MASK(FSCR_VECVSX_LG)
#define   HFSCR_FP	__MASK(FSCR_FP_LG)
#define SPRN_TAR	0x32f	/* Target Address Register */
#define SPRN_LPCR	0x13E	/* LPAR Control Register */
#define   LPCR_VPM0	(1ul << (63-0))
+9 −0
Original line number Diff line number Diff line
@@ -15,6 +15,15 @@ extern struct task_struct *__switch_to(struct task_struct *,
struct thread_struct;
extern struct task_struct *_switch(struct thread_struct *prev,
				   struct thread_struct *next);
#ifdef CONFIG_PPC_BOOK3S_64
static inline void save_tar(struct thread_struct *prev)
{
	if (cpu_has_feature(CPU_FTR_ARCH_207S))
		prev->tar = mfspr(SPRN_TAR);
}
#else
static inline void save_tar(struct thread_struct *prev) {}
#endif

extern void load_up_fpu(void);
extern void enable_kernel_fp(void);
+3 −0
Original line number Diff line number Diff line
@@ -138,6 +138,9 @@ int main(void)
	DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar));
	DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr));
	DEFINE(THREAD_TM_TFIAR, offsetof(struct thread_struct, tm_tfiar));
	DEFINE(THREAD_TM_TAR, offsetof(struct thread_struct, tm_tar));
	DEFINE(THREAD_TM_PPR, offsetof(struct thread_struct, tm_ppr));
	DEFINE(THREAD_TM_DSCR, offsetof(struct thread_struct, tm_dscr));
	DEFINE(PT_CKPT_REGS, offsetof(struct thread_struct, ckpt_regs));
	DEFINE(THREAD_TRANSACT_VR0, offsetof(struct thread_struct,
					 transact_vr[0]));
Loading