linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 1/4] powerpc/fsl: add E6500 PVR and SPRN_PWRMGTCR0 define
@ 2013-10-15  9:21 Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 2/4] powerpc/85xx: add hardware automatically enter altivec idle state Dongsheng Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 34+ messages in thread
From: Dongsheng Wang @ 2013-10-15  9:21 UTC (permalink / raw)
  To: scottwood; +Cc: bharat.bhushan, linuxppc-dev, Wang Dongsheng

From: Wang Dongsheng <dongsheng.wang@freescale.com>

E6500 PVR and SPRN_PWRMGTCR0 will be used in subsequent pw20/altivec
idle patches.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
---
*v3:
Add bit definitions for PWRMGTCR0.

 arch/powerpc/include/asm/reg.h       | 2 ++
 arch/powerpc/include/asm/reg_booke.h | 9 +++++++++
 2 files changed, 11 insertions(+)

diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index 64264bf..d4160ca 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -1053,6 +1053,8 @@
 #define PVR_8560	0x80200000
 #define PVR_VER_E500V1	0x8020
 #define PVR_VER_E500V2	0x8021
+#define PVR_VER_E6500	0x8040
+
 /*
  * For the 8xx processors, all of them report the same PVR family for
  * the PowerPC core. The various versions of these processors must be
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h
index ed8f836..4a6457e 100644
--- a/arch/powerpc/include/asm/reg_booke.h
+++ b/arch/powerpc/include/asm/reg_booke.h
@@ -170,6 +170,7 @@
 #define SPRN_L2CSR1	0x3FA	/* L2 Data Cache Control and Status Register 1 */
 #define SPRN_DCCR	0x3FA	/* Data Cache Cacheability Register */
 #define SPRN_ICCR	0x3FB	/* Instruction Cache Cacheability Register */
+#define SPRN_PWRMGTCR0	0x3FB	/* Power management control register 0 */
 #define SPRN_SVR	0x3FF	/* System Version Register */
 
 /*
@@ -216,6 +217,14 @@
 #define	CCR1_DPC	0x00000100 /* Disable L1 I-Cache/D-Cache parity checking */
 #define	CCR1_TCS	0x00000080 /* Timer Clock Select */
 
+/* Bit definitions for PWRMGTCR0. */
+#define PWRMGTCR0_PW20_WAIT		(1 << 14) /* PW20 state enable bit */
+#define PWRMGTCR0_PW20_ENT_SHIFT	8
+#define PWRMGTCR0_PW20_ENT		0x3F00
+#define PWRMGTCR0_AV_IDLE_PD_EN		(1 << 22) /* Altivec idle enable */
+#define PWRMGTCR0_AV_IDLE_CNT_SHIFT	16
+#define PWRMGTCR0_AV_IDLE_CNT		0x3F0000
+
 /* Bit definitions for the MCSR. */
 #define MCSR_MCS	0x80000000 /* Machine Check Summary */
 #define MCSR_IB		0x40000000 /* Instruction PLB Error */
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v5 2/4] powerpc/85xx: add hardware automatically enter altivec idle state
  2013-10-15  9:21 [PATCH v5 1/4] powerpc/fsl: add E6500 PVR and SPRN_PWRMGTCR0 define Dongsheng Wang
@ 2013-10-15  9:21 ` Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 3/4] powerpc/85xx: add hardware automatically enter pw20 state Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle Dongsheng Wang
  2 siblings, 0 replies; 34+ messages in thread
From: Dongsheng Wang @ 2013-10-15  9:21 UTC (permalink / raw)
  To: scottwood; +Cc: bharat.bhushan, linuxppc-dev, Wang Dongsheng

From: Wang Dongsheng <dongsheng.wang@freescale.com>

Each core's AltiVec unit may be placed into a power savings mode
by turning off power to the unit. Core hardware will automatically
power down the AltiVec unit after no AltiVec instructions have
executed in N cycles. The AltiVec power-control is triggered by hardware.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
---
*v3:
Assembly code instead of C code.

*v2:
Remove:
delete setup_idle_hw_governor function.
delete "Fix erratum" for rev1.

Move:
move setup_* into __setup/restore_cpu_e6500.

 arch/powerpc/kernel/cpu_setup_fsl_booke.S | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/arch/powerpc/kernel/cpu_setup_fsl_booke.S b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
index bfb18c7..4789056 100644
--- a/arch/powerpc/kernel/cpu_setup_fsl_booke.S
+++ b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
@@ -53,11 +53,31 @@ _GLOBAL(__e500_dcache_setup)
 	isync
 	blr
 
+/*
+ * FIXME - we haven't yet done testing to determine a reasonable default
+ * value for AV_WAIT_IDLE_BIT.
+ */
+#define AV_WAIT_IDLE_BIT		50 /* 1ms, TB frequency is 41.66MHZ */
+_GLOBAL(setup_altivec_idle)
+	mfspr	r3, SPRN_PWRMGTCR0
+
+	/* Enable Altivec Idle */
+	oris	r3, r3, PWRMGTCR0_AV_IDLE_PD_EN@h
+	li	r11, AV_WAIT_IDLE_BIT
+
+	/* Set Automatic AltiVec Idle Count */
+	rlwimi	r3, r11, PWRMGTCR0_AV_IDLE_CNT_SHIFT, PWRMGTCR0_AV_IDLE_CNT
+
+	mtspr	SPRN_PWRMGTCR0, r3
+
+	blr
+
 _GLOBAL(__setup_cpu_e6500)
 	mflr	r6
 #ifdef CONFIG_PPC64
 	bl	.setup_altivec_ivors
 #endif
+	bl	setup_altivec_idle
 	bl	__setup_cpu_e5500
 	mtlr	r6
 	blr
@@ -119,6 +139,7 @@ _GLOBAL(__setup_cpu_e5500)
 _GLOBAL(__restore_cpu_e6500)
 	mflr	r5
 	bl	.setup_altivec_ivors
+	bl	.setup_altivec_idle
 	bl	__restore_cpu_e5500
 	mtlr	r5
 	blr
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v5 3/4] powerpc/85xx: add hardware automatically enter pw20 state
  2013-10-15  9:21 [PATCH v5 1/4] powerpc/fsl: add E6500 PVR and SPRN_PWRMGTCR0 define Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 2/4] powerpc/85xx: add hardware automatically enter altivec idle state Dongsheng Wang
@ 2013-10-15  9:21 ` Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle Dongsheng Wang
  2 siblings, 0 replies; 34+ messages in thread
From: Dongsheng Wang @ 2013-10-15  9:21 UTC (permalink / raw)
  To: scottwood; +Cc: bharat.bhushan, linuxppc-dev, Wang Dongsheng

From: Wang Dongsheng <dongsheng.wang@freescale.com>

Using hardware features make core automatically enter PW20 state.
Set a TB count to hardware, the effective count begins when PW10
is entered. When the effective period has expired, the core will
proceed from PW10 to PW20 if no exit conditions have occurred during
the period.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
---
*v3:
Assembly code instead of C code.

*v2:
Remove:
delete setup_idle_hw_governor function.
delete "Fix erratum" for rev1.

Move:
move setup_* into __setup/restore_cpu_e6500.

 arch/powerpc/kernel/cpu_setup_fsl_booke.S | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/arch/powerpc/kernel/cpu_setup_fsl_booke.S b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
index 4789056..49e738e 100644
--- a/arch/powerpc/kernel/cpu_setup_fsl_booke.S
+++ b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
@@ -55,6 +55,25 @@ _GLOBAL(__e500_dcache_setup)
 
 /*
  * FIXME - we haven't yet done testing to determine a reasonable default
+ * value for PW20_WAIT_IDLE_BIT.
+ */
+#define PW20_WAIT_IDLE_BIT		50 /* 1ms, TB frequency is 41.66MHZ */
+_GLOBAL(setup_pw20_idle)
+	mfspr	r3, SPRN_PWRMGTCR0
+
+	/* Set PW20_WAIT bit, enable pw20 state*/
+	ori	r3, r3, PWRMGTCR0_PW20_WAIT
+	li	r11, PW20_WAIT_IDLE_BIT
+
+	/* Set Automatic PW20 Core Idle Count */
+	rlwimi	r3, r11, PWRMGTCR0_PW20_ENT_SHIFT, PWRMGTCR0_PW20_ENT
+
+	mtspr	SPRN_PWRMGTCR0, r3
+
+	blr
+
+/*
+ * FIXME - we haven't yet done testing to determine a reasonable default
  * value for AV_WAIT_IDLE_BIT.
  */
 #define AV_WAIT_IDLE_BIT		50 /* 1ms, TB frequency is 41.66MHZ */
@@ -77,6 +96,7 @@ _GLOBAL(__setup_cpu_e6500)
 #ifdef CONFIG_PPC64
 	bl	.setup_altivec_ivors
 #endif
+	bl	setup_pw20_idle
 	bl	setup_altivec_idle
 	bl	__setup_cpu_e5500
 	mtlr	r6
@@ -139,6 +159,7 @@ _GLOBAL(__setup_cpu_e5500)
 _GLOBAL(__restore_cpu_e6500)
 	mflr	r5
 	bl	.setup_altivec_ivors
+	bl	.setup_pw20_idle
 	bl	.setup_altivec_idle
 	bl	__restore_cpu_e5500
 	mtlr	r5
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-15  9:21 [PATCH v5 1/4] powerpc/fsl: add E6500 PVR and SPRN_PWRMGTCR0 define Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 2/4] powerpc/85xx: add hardware automatically enter altivec idle state Dongsheng Wang
  2013-10-15  9:21 ` [PATCH v5 3/4] powerpc/85xx: add hardware automatically enter pw20 state Dongsheng Wang
@ 2013-10-15  9:21 ` Dongsheng Wang
  2013-10-16 17:01   ` Bhushan Bharat-R65777
  2 siblings, 1 reply; 34+ messages in thread
From: Dongsheng Wang @ 2013-10-15  9:21 UTC (permalink / raw)
  To: scottwood; +Cc: bharat.bhushan, linuxppc-dev, Wang Dongsheng

From: Wang Dongsheng <dongsheng.wang@freescale.com>

Add a sys interface to enable/diable pw20 state or altivec idle, and
control the wait entry time.

Enable/Disable interface:
0, disable. 1, enable.
/sys/devices/system/cpu/cpuX/pw20_state
/sys/devices/system/cpu/cpuX/altivec_idle

Set wait time interface:(Nanosecond)
/sys/devices/system/cpu/cpuX/pw20_wait_time
/sys/devices/system/cpu/cpuX/altivec_idle_wait_time
Example: Base on TBfreq is 41MHZ.
1~48(ns): TB[63]
49~97(ns): TB[62]
98~195(ns): TB[61]
196~390(ns): TB[60]
391~780(ns): TB[59]
781~1560(ns): TB[58]
...

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
---
*v5:
Change get_idle_ticks_bit function implementation.

*v4:
Move code from 85xx/common.c to kernel/sysfs.c.

Remove has_pw20_altivec_idle function.

Change wait "entry_bit" to wait time.

diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index 27a90b9..10d1128 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -85,6 +85,284 @@ __setup("smt-snooze-delay=", setup_smt_snooze_delay);
 
 #endif /* CONFIG_PPC64 */
 
+#ifdef CONFIG_FSL_SOC
+#define MAX_BIT				63
+
+static u64 pw20_wt;
+static u64 altivec_idle_wt;
+
+static unsigned int get_idle_ticks_bit(u64 ns)
+{
+	u64 cycle;
+
+	if (ns >= 10000)
+		cycle = div_u64(ns + 500, 1000) * tb_ticks_per_usec;
+	else
+		cycle = div_u64(ns * tb_ticks_per_usec, 1000);
+
+	if (!cycle)
+		return 0;
+
+	return ilog2(cycle);
+}
+
+static void do_show_pwrmgtcr0(void *val)
+{
+	u32 *value = val;
+
+	*value = mfspr(SPRN_PWRMGTCR0);
+}
+
+static ssize_t show_pw20_state(struct device *dev,
+				struct device_attribute *attr, char *buf)
+{
+	u32 value;
+	unsigned int cpu = dev->id;
+
+	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
+
+	value &= PWRMGTCR0_PW20_WAIT;
+
+	return sprintf(buf, "%u\n", value ? 1 : 0);
+}
+
+static void do_store_pw20_state(void *val)
+{
+	u32 *value = val;
+	u32 pw20_state;
+
+	pw20_state = mfspr(SPRN_PWRMGTCR0);
+
+	if (*value)
+		pw20_state |= PWRMGTCR0_PW20_WAIT;
+	else
+		pw20_state &= ~PWRMGTCR0_PW20_WAIT;
+
+	mtspr(SPRN_PWRMGTCR0, pw20_state);
+}
+
+static ssize_t store_pw20_state(struct device *dev,
+				struct device_attribute *attr,
+				const char *buf, size_t count)
+{
+	u32 value;
+	unsigned int cpu = dev->id;
+
+	if (kstrtou32(buf, 0, &value))
+		return -EINVAL;
+
+	if (value > 1)
+		return -EINVAL;
+
+	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
+
+	return count;
+}
+
+static ssize_t show_pw20_wait_time(struct device *dev,
+				struct device_attribute *attr, char *buf)
+{
+	u32 value;
+	u64 tb_cycle;
+	s64 time;
+
+	unsigned int cpu = dev->id;
+
+	if (!pw20_wt) {
+		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
+		value = (value & PWRMGTCR0_PW20_ENT) >>
+					PWRMGTCR0_PW20_ENT_SHIFT;
+
+		tb_cycle = (1 << (MAX_BIT - value)) * 2;
+		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
+	} else {
+		time = pw20_wt;
+	}
+
+	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
+}
+
+static void set_pw20_wait_entry_bit(void *val)
+{
+	u32 *value = val;
+	u32 pw20_idle;
+
+	pw20_idle = mfspr(SPRN_PWRMGTCR0);
+
+	/* Set Automatic PW20 Core Idle Count */
+	/* clear count */
+	pw20_idle &= ~PWRMGTCR0_PW20_ENT;
+
+	/* set count */
+	pw20_idle |= ((MAX_BIT - *value) << PWRMGTCR0_PW20_ENT_SHIFT);
+
+	mtspr(SPRN_PWRMGTCR0, pw20_idle);
+}
+
+static ssize_t store_pw20_wait_time(struct device *dev,
+				struct device_attribute *attr,
+				const char *buf, size_t count)
+{
+	u32 entry_bit;
+	u64 value;
+
+	unsigned int cpu = dev->id;
+
+	if (kstrtou64(buf, 0, &value))
+		return -EINVAL;
+
+	if (!value)
+		return -EINVAL;
+
+	entry_bit = get_idle_ticks_bit(value);
+	if (entry_bit > MAX_BIT)
+		return -EINVAL;
+
+	pw20_wt = value;
+	smp_call_function_single(cpu, set_pw20_wait_entry_bit,
+				&entry_bit, 1);
+
+	return count;
+}
+
+static ssize_t show_altivec_idle(struct device *dev,
+				struct device_attribute *attr, char *buf)
+{
+	u32 value;
+	unsigned int cpu = dev->id;
+
+	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
+
+	value &= PWRMGTCR0_AV_IDLE_PD_EN;
+
+	return sprintf(buf, "%u\n", value ? 1 : 0);
+}
+
+static void do_store_altivec_idle(void *val)
+{
+	u32 *value = val;
+	u32 altivec_idle;
+
+	altivec_idle = mfspr(SPRN_PWRMGTCR0);
+
+	if (*value)
+		altivec_idle |= PWRMGTCR0_AV_IDLE_PD_EN;
+	else
+		altivec_idle &= ~PWRMGTCR0_AV_IDLE_PD_EN;
+
+	mtspr(SPRN_PWRMGTCR0, altivec_idle);
+}
+
+static ssize_t store_altivec_idle(struct device *dev,
+				struct device_attribute *attr,
+				const char *buf, size_t count)
+{
+	u32 value;
+	unsigned int cpu = dev->id;
+
+	if (kstrtou32(buf, 0, &value))
+		return -EINVAL;
+
+	if (value > 1)
+		return -EINVAL;
+
+	smp_call_function_single(cpu, do_store_altivec_idle, &value, 1);
+
+	return count;
+}
+
+static ssize_t show_altivec_idle_wait_time(struct device *dev,
+				struct device_attribute *attr, char *buf)
+{
+	u32 value;
+	u64 tb_cycle;
+	s64 time;
+
+	unsigned int cpu = dev->id;
+
+	if (!altivec_idle_wt) {
+		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
+		value = (value & PWRMGTCR0_AV_IDLE_CNT) >>
+					PWRMGTCR0_AV_IDLE_CNT_SHIFT;
+
+		tb_cycle = (1 << (MAX_BIT - value)) * 2;
+		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
+	} else {
+		time = altivec_idle_wt;
+	}
+
+	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
+}
+
+static void set_altivec_idle_wait_entry_bit(void *val)
+{
+	u32 *value = val;
+	u32 altivec_idle;
+
+	altivec_idle = mfspr(SPRN_PWRMGTCR0);
+
+	/* Set Automatic AltiVec Idle Count */
+	/* clear count */
+	altivec_idle &= ~PWRMGTCR0_AV_IDLE_CNT;
+
+	/* set count */
+	altivec_idle |= ((MAX_BIT - *value) << PWRMGTCR0_AV_IDLE_CNT_SHIFT);
+
+	mtspr(SPRN_PWRMGTCR0, altivec_idle);
+}
+
+static ssize_t store_altivec_idle_wait_time(struct device *dev,
+				struct device_attribute *attr,
+				const char *buf, size_t count)
+{
+	u32 entry_bit;
+	u64 value;
+
+	unsigned int cpu = dev->id;
+
+	if (kstrtou64(buf, 0, &value))
+		return -EINVAL;
+
+	if (!value)
+		return -EINVAL;
+
+	entry_bit = get_idle_ticks_bit(value);
+	if (entry_bit > MAX_BIT)
+		return -EINVAL;
+
+	altivec_idle_wt = value;
+	smp_call_function_single(cpu, set_altivec_idle_wait_entry_bit,
+				&entry_bit, 1);
+
+	return count;
+}
+
+/*
+ * Enable/Disable interface:
+ * 0, disable. 1, enable.
+ */
+static DEVICE_ATTR(pw20_state, 0600, show_pw20_state, store_pw20_state);
+static DEVICE_ATTR(altivec_idle, 0600, show_altivec_idle, store_altivec_idle);
+
+/*
+ * Set wait time interface:(Nanosecond)
+ * Example: Base on TBfreq is 41MHZ.
+ * 1~48(ns): TB[63]
+ * 49~97(ns): TB[62]
+ * 98~195(ns): TB[61]
+ * 196~390(ns): TB[60]
+ * 391~780(ns): TB[59]
+ * 781~1560(ns): TB[58]
+ * ...
+ */
+static DEVICE_ATTR(pw20_wait_time, 0600,
+			show_pw20_wait_time,
+			store_pw20_wait_time);
+static DEVICE_ATTR(altivec_idle_wait_time, 0600,
+			show_altivec_idle_wait_time,
+			store_altivec_idle_wait_time);
+#endif
+
 /*
  * Enabling PMCs will slow partition context switch times so we only do
  * it the first time we write to the PMCs.
@@ -407,6 +685,15 @@ static void register_cpu_online(unsigned int cpu)
 		device_create_file(s, &dev_attr_pir);
 #endif /* CONFIG_PPC64 */
 
+#ifdef CONFIG_FSL_SOC
+	if (PVR_VER(cur_cpu_spec->pvr_value) == PVR_VER_E6500) {
+		device_create_file(s, &dev_attr_pw20_state);
+		device_create_file(s, &dev_attr_pw20_wait_time);
+
+		device_create_file(s, &dev_attr_altivec_idle);
+		device_create_file(s, &dev_attr_altivec_idle_wait_time);
+	}
+#endif
 	cacheinfo_cpu_online(cpu);
 }
 
@@ -479,6 +766,15 @@ static void unregister_cpu_online(unsigned int cpu)
 		device_remove_file(s, &dev_attr_pir);
 #endif /* CONFIG_PPC64 */
 
+#ifdef CONFIG_FSL_SOC
+	if (PVR_VER(cur_cpu_spec->pvr_value) == PVR_VER_E6500) {
+		device_remove_file(s, &dev_attr_pw20_state);
+		device_remove_file(s, &dev_attr_pw20_wait_time);
+
+		device_remove_file(s, &dev_attr_altivec_idle);
+		device_remove_file(s, &dev_attr_altivec_idle_wait_time);
+	}
+#endif
 	cacheinfo_cpu_offline(cpu);
 }
 
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-15  9:21 ` [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle Dongsheng Wang
@ 2013-10-16 17:01   ` Bhushan Bharat-R65777
  2013-10-17  2:46     ` Wang Dongsheng-B40534
  0 siblings, 1 reply; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-16 17:01 UTC (permalink / raw)
  To: Wang Dongsheng-B40534, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Wang Dongsheng-B40534
> Sent: Tuesday, October 15, 2013 2:51 PM
> To: Wood Scott-B07421
> Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-=
B40534
> Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altive=
c idle
>=20
> From: Wang Dongsheng <dongsheng.wang@freescale.com>
>=20
> Add a sys interface to enable/diable pw20 state or altivec idle, and cont=
rol the
> wait entry time.
>=20
> Enable/Disable interface:
> 0, disable. 1, enable.
> /sys/devices/system/cpu/cpuX/pw20_state
> /sys/devices/system/cpu/cpuX/altivec_idle
>=20
> Set wait time interface:(Nanosecond)
> /sys/devices/system/cpu/cpuX/pw20_wait_time
> /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> Example: Base on TBfreq is 41MHZ.
> 1~48(ns): TB[63]
> 49~97(ns): TB[62]
> 98~195(ns): TB[61]
> 196~390(ns): TB[60]
> 391~780(ns): TB[59]
> 781~1560(ns): TB[58]
> ...
>=20
> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> ---
> *v5:
> Change get_idle_ticks_bit function implementation.
>=20
> *v4:
> Move code from 85xx/common.c to kernel/sysfs.c.
>=20
> Remove has_pw20_altivec_idle function.
>=20
> Change wait "entry_bit" to wait time.
>=20
> diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c in=
dex
> 27a90b9..10d1128 100644
> --- a/arch/powerpc/kernel/sysfs.c
> +++ b/arch/powerpc/kernel/sysfs.c
> @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D", setup_smt_snooze_delay=
);
>=20
>  #endif /* CONFIG_PPC64 */
>=20
> +#ifdef CONFIG_FSL_SOC
> +#define MAX_BIT				63
> +
> +static u64 pw20_wt;
> +static u64 altivec_idle_wt;
> +
> +static unsigned int get_idle_ticks_bit(u64 ns) {
> +	u64 cycle;
> +
> +	if (ns >=3D 10000)
> +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> +	else
> +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> +
> +	if (!cycle)
> +		return 0;
> +
> +	return ilog2(cycle);
> +}
> +
> +static void do_show_pwrmgtcr0(void *val) {
> +	u32 *value =3D val;
> +
> +	*value =3D mfspr(SPRN_PWRMGTCR0);
> +}
> +
> +static ssize_t show_pw20_state(struct device *dev,
> +				struct device_attribute *attr, char *buf) {
> +	u32 value;
> +	unsigned int cpu =3D dev->id;
> +
> +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> +
> +	value &=3D PWRMGTCR0_PW20_WAIT;
> +
> +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> +
> +static void do_store_pw20_state(void *val) {
> +	u32 *value =3D val;
> +	u32 pw20_state;
> +
> +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> +
> +	if (*value)
> +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> +	else
> +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> +
> +	mtspr(SPRN_PWRMGTCR0, pw20_state);
> +}
> +
> +static ssize_t store_pw20_state(struct device *dev,
> +				struct device_attribute *attr,
> +				const char *buf, size_t count)
> +{
> +	u32 value;
> +	unsigned int cpu =3D dev->id;
> +
> +	if (kstrtou32(buf, 0, &value))
> +		return -EINVAL;
> +
> +	if (value > 1)
> +		return -EINVAL;
> +
> +	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
> +
> +	return count;
> +}
> +
> +static ssize_t show_pw20_wait_time(struct device *dev,
> +				struct device_attribute *attr, char *buf) {
> +	u32 value;
> +	u64 tb_cycle;
> +	s64 time;
> +
> +	unsigned int cpu =3D dev->id;
> +
> +	if (!pw20_wt) {
> +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> +					PWRMGTCR0_PW20_ENT_SHIFT;
> +
> +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;

Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =3D 0,

> +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;

And time =3D -1;


> +	} else {
> +		time =3D pw20_wt;
> +	}
> +
> +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> }
> +
> +static void set_pw20_wait_entry_bit(void *val) {
> +	u32 *value =3D val;
> +	u32 pw20_idle;
> +
> +	pw20_idle =3D mfspr(SPRN_PWRMGTCR0);
> +
> +	/* Set Automatic PW20 Core Idle Count */
> +	/* clear count */
> +	pw20_idle &=3D ~PWRMGTCR0_PW20_ENT;
> +
> +	/* set count */
> +	pw20_idle |=3D ((MAX_BIT - *value) << PWRMGTCR0_PW20_ENT_SHIFT);
> +
> +	mtspr(SPRN_PWRMGTCR0, pw20_idle);
> +}
> +
> +static ssize_t store_pw20_wait_time(struct device *dev,
> +				struct device_attribute *attr,
> +				const char *buf, size_t count)
> +{
> +	u32 entry_bit;
> +	u64 value;
> +
> +	unsigned int cpu =3D dev->id;
> +
> +	if (kstrtou64(buf, 0, &value))
> +		return -EINVAL;
> +
> +	if (!value)
> +		return -EINVAL;
> +
> +	entry_bit =3D get_idle_ticks_bit(value);
> +	if (entry_bit > MAX_BIT)
> +		return -EINVAL;
> +
> +	pw20_wt =3D value;
> +	smp_call_function_single(cpu, set_pw20_wait_entry_bit,
> +				&entry_bit, 1);
> +
> +	return count;
> +}
> +
> +static ssize_t show_altivec_idle(struct device *dev,
> +				struct device_attribute *attr, char *buf) {
> +	u32 value;
> +	unsigned int cpu =3D dev->id;
> +
> +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> +
> +	value &=3D PWRMGTCR0_AV_IDLE_PD_EN;
> +
> +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> +
> +static void do_store_altivec_idle(void *val) {
> +	u32 *value =3D val;
> +	u32 altivec_idle;
> +
> +	altivec_idle =3D mfspr(SPRN_PWRMGTCR0);
> +
> +	if (*value)
> +		altivec_idle |=3D PWRMGTCR0_AV_IDLE_PD_EN;
> +	else
> +		altivec_idle &=3D ~PWRMGTCR0_AV_IDLE_PD_EN;
> +
> +	mtspr(SPRN_PWRMGTCR0, altivec_idle);
> +}
> +
> +static ssize_t store_altivec_idle(struct device *dev,
> +				struct device_attribute *attr,
> +				const char *buf, size_t count)
> +{
> +	u32 value;
> +	unsigned int cpu =3D dev->id;
> +
> +	if (kstrtou32(buf, 0, &value))
> +		return -EINVAL;
> +
> +	if (value > 1)
> +		return -EINVAL;
> +
> +	smp_call_function_single(cpu, do_store_altivec_idle, &value, 1);
> +
> +	return count;
> +}
> +
> +static ssize_t show_altivec_idle_wait_time(struct device *dev,
> +				struct device_attribute *attr, char *buf) {
> +	u32 value;
> +	u64 tb_cycle;
> +	s64 time;
> +
> +	unsigned int cpu =3D dev->id;
> +
> +	if (!altivec_idle_wt) {
> +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> +		value =3D (value & PWRMGTCR0_AV_IDLE_CNT) >>
> +					PWRMGTCR0_AV_IDLE_CNT_SHIFT;
> +
> +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;

Likewise

Thanks
-Bharat

> +	} else {
> +		time =3D altivec_idle_wt;
> +	}
> +
> +	return sprintf(buf, "%llu\n", time > 0 ? time : 0); }
> +
> +static void set_altivec_idle_wait_entry_bit(void *val) {
> +	u32 *value =3D val;
> +	u32 altivec_idle;
> +
> +	altivec_idle =3D mfspr(SPRN_PWRMGTCR0);
> +
> +	/* Set Automatic AltiVec Idle Count */
> +	/* clear count */
> +	altivec_idle &=3D ~PWRMGTCR0_AV_IDLE_CNT;
> +
> +	/* set count */
> +	altivec_idle |=3D ((MAX_BIT - *value) << PWRMGTCR0_AV_IDLE_CNT_SHIFT);
> +
> +	mtspr(SPRN_PWRMGTCR0, altivec_idle);
> +}
> +
> +static ssize_t store_altivec_idle_wait_time(struct device *dev,
> +				struct device_attribute *attr,
> +				const char *buf, size_t count)
> +{
> +	u32 entry_bit;
> +	u64 value;
> +
> +	unsigned int cpu =3D dev->id;
> +
> +	if (kstrtou64(buf, 0, &value))
> +		return -EINVAL;
> +
> +	if (!value)
> +		return -EINVAL;
> +
> +	entry_bit =3D get_idle_ticks_bit(value);
> +	if (entry_bit > MAX_BIT)
> +		return -EINVAL;
> +
> +	altivec_idle_wt =3D value;
> +	smp_call_function_single(cpu, set_altivec_idle_wait_entry_bit,
> +				&entry_bit, 1);
> +
> +	return count;
> +}
> +
> +/*
> + * Enable/Disable interface:
> + * 0, disable. 1, enable.
> + */
> +static DEVICE_ATTR(pw20_state, 0600, show_pw20_state,
> +store_pw20_state); static DEVICE_ATTR(altivec_idle, 0600,
> +show_altivec_idle, store_altivec_idle);
> +
> +/*
> + * Set wait time interface:(Nanosecond)
> + * Example: Base on TBfreq is 41MHZ.
> + * 1~48(ns): TB[63]
> + * 49~97(ns): TB[62]
> + * 98~195(ns): TB[61]
> + * 196~390(ns): TB[60]
> + * 391~780(ns): TB[59]
> + * 781~1560(ns): TB[58]
> + * ...
> + */
> +static DEVICE_ATTR(pw20_wait_time, 0600,
> +			show_pw20_wait_time,
> +			store_pw20_wait_time);
> +static DEVICE_ATTR(altivec_idle_wait_time, 0600,
> +			show_altivec_idle_wait_time,
> +			store_altivec_idle_wait_time);
> +#endif
> +
>  /*
>   * Enabling PMCs will slow partition context switch times so we only do
>   * it the first time we write to the PMCs.
> @@ -407,6 +685,15 @@ static void register_cpu_online(unsigned int cpu)
>  		device_create_file(s, &dev_attr_pir);  #endif /* CONFIG_PPC64 */
>=20
> +#ifdef CONFIG_FSL_SOC
> +	if (PVR_VER(cur_cpu_spec->pvr_value) =3D=3D PVR_VER_E6500) {
> +		device_create_file(s, &dev_attr_pw20_state);
> +		device_create_file(s, &dev_attr_pw20_wait_time);
> +
> +		device_create_file(s, &dev_attr_altivec_idle);
> +		device_create_file(s, &dev_attr_altivec_idle_wait_time);
> +	}
> +#endif
>  	cacheinfo_cpu_online(cpu);
>  }
>=20
> @@ -479,6 +766,15 @@ static void unregister_cpu_online(unsigned int cpu)
>  		device_remove_file(s, &dev_attr_pir);  #endif /* CONFIG_PPC64 */
>=20
> +#ifdef CONFIG_FSL_SOC
> +	if (PVR_VER(cur_cpu_spec->pvr_value) =3D=3D PVR_VER_E6500) {
> +		device_remove_file(s, &dev_attr_pw20_state);
> +		device_remove_file(s, &dev_attr_pw20_wait_time);
> +
> +		device_remove_file(s, &dev_attr_altivec_idle);
> +		device_remove_file(s, &dev_attr_altivec_idle_wait_time);
> +	}
> +#endif
>  	cacheinfo_cpu_offline(cpu);
>  }
>=20
> --
> 1.8.0

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-16 17:01   ` Bhushan Bharat-R65777
@ 2013-10-17  2:46     ` Wang Dongsheng-B40534
  2013-10-17  3:19       ` Bhushan Bharat-R65777
  0 siblings, 1 reply; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-17  2:46 UTC (permalink / raw)
  To: Bhushan Bharat-R65777, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Bhushan Bharat-R65777
> Sent: Thursday, October 17, 2013 1:01 AM
> To: Wang Dongsheng-B40534; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> altivec idle
>=20
>=20
>=20
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Tuesday, October 15, 2013 2:51 PM
> > To: Wood Scott-B07421
> > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> Dongsheng-B40534
> > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> altivec idle
> >
> > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> >
> > Add a sys interface to enable/diable pw20 state or altivec idle, and
> control the
> > wait entry time.
> >
> > Enable/Disable interface:
> > 0, disable. 1, enable.
> > /sys/devices/system/cpu/cpuX/pw20_state
> > /sys/devices/system/cpu/cpuX/altivec_idle
> >
> > Set wait time interface:(Nanosecond)
> > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > Example: Base on TBfreq is 41MHZ.
> > 1~48(ns): TB[63]
> > 49~97(ns): TB[62]
> > 98~195(ns): TB[61]
> > 196~390(ns): TB[60]
> > 391~780(ns): TB[59]
> > 781~1560(ns): TB[58]
> > ...
> >
> > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > ---
> > *v5:
> > Change get_idle_ticks_bit function implementation.
> >
> > *v4:
> > Move code from 85xx/common.c to kernel/sysfs.c.
> >
> > Remove has_pw20_altivec_idle function.
> >
> > Change wait "entry_bit" to wait time.
> >
> > diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
> index
> > 27a90b9..10d1128 100644
> > --- a/arch/powerpc/kernel/sysfs.c
> > +++ b/arch/powerpc/kernel/sysfs.c
> > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> setup_smt_snooze_delay);
> >
> >  #endif /* CONFIG_PPC64 */
> >
> > +#ifdef CONFIG_FSL_SOC
> > +#define MAX_BIT				63
> > +
> > +static u64 pw20_wt;
> > +static u64 altivec_idle_wt;
> > +
> > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > +	u64 cycle;
> > +
> > +	if (ns >=3D 10000)
> > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > +	else
> > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > +
> > +	if (!cycle)
> > +		return 0;
> > +
> > +	return ilog2(cycle);
> > +}
> > +
> > +static void do_show_pwrmgtcr0(void *val) {
> > +	u32 *value =3D val;
> > +
> > +	*value =3D mfspr(SPRN_PWRMGTCR0);
> > +}
> > +
> > +static ssize_t show_pw20_state(struct device *dev,
> > +				struct device_attribute *attr, char *buf) {
> > +	u32 value;
> > +	unsigned int cpu =3D dev->id;
> > +
> > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > +
> > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > +
> > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > +
> > +static void do_store_pw20_state(void *val) {
> > +	u32 *value =3D val;
> > +	u32 pw20_state;
> > +
> > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > +
> > +	if (*value)
> > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > +	else
> > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > +
> > +	mtspr(SPRN_PWRMGTCR0, pw20_state);
> > +}
> > +
> > +static ssize_t store_pw20_state(struct device *dev,
> > +				struct device_attribute *attr,
> > +				const char *buf, size_t count)
> > +{
> > +	u32 value;
> > +	unsigned int cpu =3D dev->id;
> > +
> > +	if (kstrtou32(buf, 0, &value))
> > +		return -EINVAL;
> > +
> > +	if (value > 1)
> > +		return -EINVAL;
> > +
> > +	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
> > +
> > +	return count;
> > +}
> > +
> > +static ssize_t show_pw20_wait_time(struct device *dev,
> > +				struct device_attribute *attr, char *buf) {
> > +	u32 value;
> > +	u64 tb_cycle;
> > +	s64 time;
> > +
> > +	unsigned int cpu =3D dev->id;
> > +
> > +	if (!pw20_wt) {
> > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > +
> > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
>=20
> Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =3D 0,
>=20
> > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
>=20
> And time =3D -1;
>=20
Please look at the end of the function, :)

"return sprintf(buf, "%llu\n", time > 0 ? time : 0);"

-dongsheng

>=20
> > +	} else {
> > +		time =3D pw20_wt;
> > +	}
> > +
> > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > }
> > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  2:46     ` Wang Dongsheng-B40534
@ 2013-10-17  3:19       ` Bhushan Bharat-R65777
  2013-10-17  5:51         ` Wang Dongsheng-B40534
  0 siblings, 1 reply; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-17  3:19 UTC (permalink / raw)
  To: Wang Dongsheng-B40534, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Wang Dongsheng-B40534
> Sent: Thursday, October 17, 2013 8:16 AM
> To: Bhushan Bharat-R65777; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and al=
tivec
> idle
>=20
>=20
>=20
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Thursday, October 17, 2013 1:01 AM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> >
> >
> >
> > > -----Original Message-----
> > > From: Wang Dongsheng-B40534
> > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > To: Wood Scott-B07421
> > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > Dongsheng-B40534
> > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > >
> > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > >
> > > Add a sys interface to enable/diable pw20 state or altivec idle, and
> > control the
> > > wait entry time.
> > >
> > > Enable/Disable interface:
> > > 0, disable. 1, enable.
> > > /sys/devices/system/cpu/cpuX/pw20_state
> > > /sys/devices/system/cpu/cpuX/altivec_idle
> > >
> > > Set wait time interface:(Nanosecond)
> > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > Example: Base on TBfreq is 41MHZ.
> > > 1~48(ns): TB[63]
> > > 49~97(ns): TB[62]
> > > 98~195(ns): TB[61]
> > > 196~390(ns): TB[60]
> > > 391~780(ns): TB[59]
> > > 781~1560(ns): TB[58]
> > > ...
> > >
> > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > ---
> > > *v5:
> > > Change get_idle_ticks_bit function implementation.
> > >
> > > *v4:
> > > Move code from 85xx/common.c to kernel/sysfs.c.
> > >
> > > Remove has_pw20_altivec_idle function.
> > >
> > > Change wait "entry_bit" to wait time.
> > >
> > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > b/arch/powerpc/kernel/sysfs.c
> > index
> > > 27a90b9..10d1128 100644
> > > --- a/arch/powerpc/kernel/sysfs.c
> > > +++ b/arch/powerpc/kernel/sysfs.c
> > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > setup_smt_snooze_delay);
> > >
> > >  #endif /* CONFIG_PPC64 */
> > >
> > > +#ifdef CONFIG_FSL_SOC
> > > +#define MAX_BIT				63
> > > +
> > > +static u64 pw20_wt;
> > > +static u64 altivec_idle_wt;
> > > +
> > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > +	u64 cycle;
> > > +
> > > +	if (ns >=3D 10000)
> > > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > > +	else
> > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > +
> > > +	if (!cycle)
> > > +		return 0;
> > > +
> > > +	return ilog2(cycle);
> > > +}
> > > +
> > > +static void do_show_pwrmgtcr0(void *val) {
> > > +	u32 *value =3D val;
> > > +
> > > +	*value =3D mfspr(SPRN_PWRMGTCR0);
> > > +}
> > > +
> > > +static ssize_t show_pw20_state(struct device *dev,
> > > +				struct device_attribute *attr, char *buf) {
> > > +	u32 value;
> > > +	unsigned int cpu =3D dev->id;
> > > +
> > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > > +
> > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > +
> > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > +
> > > +static void do_store_pw20_state(void *val) {
> > > +	u32 *value =3D val;
> > > +	u32 pw20_state;
> > > +
> > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > +
> > > +	if (*value)
> > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > +	else
> > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > +
> > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > +
> > > +static ssize_t store_pw20_state(struct device *dev,
> > > +				struct device_attribute *attr,
> > > +				const char *buf, size_t count)
> > > +{
> > > +	u32 value;
> > > +	unsigned int cpu =3D dev->id;
> > > +
> > > +	if (kstrtou32(buf, 0, &value))
> > > +		return -EINVAL;
> > > +
> > > +	if (value > 1)
> > > +		return -EINVAL;
> > > +
> > > +	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
> > > +
> > > +	return count;
> > > +}
> > > +
> > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > +				struct device_attribute *attr, char *buf) {
> > > +	u32 value;
> > > +	u64 tb_cycle;
> > > +	s64 time;
> > > +
> > > +	unsigned int cpu =3D dev->id;
> > > +
> > > +	if (!pw20_wt) {
> > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > +
> > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> >
> > Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =3D 0,
> >
> > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> >
> > And time =3D -1;
> >
> Please look at the end of the function, :)
>=20
> "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"

I know you return 0 if value =3D 0/1, my question was that, is this correct=
 as per specification?

Ahh, also for "value" upto 7 you will return 0, no?

-Bharat

>=20
> -dongsheng
>=20
> >
> > > +	} else {
> > > +		time =3D pw20_wt;
> > > +	}
> > > +
> > > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > > }
> > > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  3:19       ` Bhushan Bharat-R65777
@ 2013-10-17  5:51         ` Wang Dongsheng-B40534
  2013-10-17  6:00           ` Bhushan Bharat-R65777
  2013-10-17 16:51           ` Scott Wood
  0 siblings, 2 replies; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-17  5:51 UTC (permalink / raw)
  To: Bhushan Bharat-R65777, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Bhushan Bharat-R65777
> Sent: Thursday, October 17, 2013 11:20 AM
> To: Wang Dongsheng-B40534; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> altivec idle
>=20
>=20
>=20
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Thursday, October 17, 2013 8:16 AM
> > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> >
> >
> >
> > > -----Original Message-----
> > > From: Bhushan Bharat-R65777
> > > Sent: Thursday, October 17, 2013 1:01 AM
> > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > Cc: linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > and altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Wang Dongsheng-B40534
> > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > To: Wood Scott-B07421
> > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > > Dongsheng-B40534
> > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > altivec idle
> > > >
> > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > >
> > > > Add a sys interface to enable/diable pw20 state or altivec idle,
> > > > and
> > > control the
> > > > wait entry time.
> > > >
> > > > Enable/Disable interface:
> > > > 0, disable. 1, enable.
> > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > >
> > > > Set wait time interface:(Nanosecond)
> > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > Example: Base on TBfreq is 41MHZ.
> > > > 1~48(ns): TB[63]
> > > > 49~97(ns): TB[62]
> > > > 98~195(ns): TB[61]
> > > > 196~390(ns): TB[60]
> > > > 391~780(ns): TB[59]
> > > > 781~1560(ns): TB[58]
> > > > ...
> > > >
> > > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > ---
> > > > *v5:
> > > > Change get_idle_ticks_bit function implementation.
> > > >
> > > > *v4:
> > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > >
> > > > Remove has_pw20_altivec_idle function.
> > > >
> > > > Change wait "entry_bit" to wait time.
> > > >
> > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > b/arch/powerpc/kernel/sysfs.c
> > > index
> > > > 27a90b9..10d1128 100644
> > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > > setup_smt_snooze_delay);
> > > >
> > > >  #endif /* CONFIG_PPC64 */
> > > >
> > > > +#ifdef CONFIG_FSL_SOC
> > > > +#define MAX_BIT				63
> > > > +
> > > > +static u64 pw20_wt;
> > > > +static u64 altivec_idle_wt;
> > > > +
> > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > +	u64 cycle;
> > > > +
> > > > +	if (ns >=3D 10000)
> > > > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > > > +	else
> > > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > > +
> > > > +	if (!cycle)
> > > > +		return 0;
> > > > +
> > > > +	return ilog2(cycle);
> > > > +}
> > > > +
> > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > +	u32 *value =3D val;
> > > > +
> > > > +	*value =3D mfspr(SPRN_PWRMGTCR0);
> > > > +}
> > > > +
> > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > +				struct device_attribute *attr, char *buf) {
> > > > +	u32 value;
> > > > +	unsigned int cpu =3D dev->id;
> > > > +
> > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > > > +
> > > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > > +
> > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > +
> > > > +static void do_store_pw20_state(void *val) {
> > > > +	u32 *value =3D val;
> > > > +	u32 pw20_state;
> > > > +
> > > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > > +
> > > > +	if (*value)
> > > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > > +	else
> > > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > > +
> > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > +
> > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > +				struct device_attribute *attr,
> > > > +				const char *buf, size_t count) {
> > > > +	u32 value;
> > > > +	unsigned int cpu =3D dev->id;
> > > > +
> > > > +	if (kstrtou32(buf, 0, &value))
> > > > +		return -EINVAL;
> > > > +
> > > > +	if (value > 1)
> > > > +		return -EINVAL;
> > > > +
> > > > +	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
> > > > +
> > > > +	return count;
> > > > +}
> > > > +
> > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > +				struct device_attribute *attr, char *buf) {
> > > > +	u32 value;
> > > > +	u64 tb_cycle;
> > > > +	s64 time;
> > > > +
> > > > +	unsigned int cpu =3D dev->id;
> > > > +
> > > > +	if (!pw20_wt) {
> > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> 1);
> > > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > +
> > > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> > >
> > > Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =3D 0,
> > >
> > > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > >
> > > And time =3D -1;
> > >
> > Please look at the end of the function, :)
> >
> > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
>=20
> I know you return 0 if value =3D 0/1, my question was that, is this corre=
ct
> as per specification?
>=20
> Ahh, also for "value" upto 7 you will return 0, no?
>=20
If value =3D 0, MAX_BIT - value =3D 63
tb_cycle =3D 0xffffffff_ffffffff, tb_cycle * 1000 will overflow, but this s=
ituation is not possible.
Because if the "value =3D 0" means this feature will be "disable".
Now The default wait bit is 50(MAX_BIT - value, value =3D 13), the PW20/Alt=
ivec Idle wait entry time is about 1ms, this time is very long for wait idl=
e time, and it's cannot be increased(means (MAX_BIT - value) cannot greater=
 than 50).
=09
If (MAX_BIT-value) =3D 0, tb_cycle =3D 2,
div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1 =3D ((2 * 1000) / 41) - 1 =
=3D 48 - 1 =3D 47

the return value is 47

> -Bharat
>=20
> >
> > -dongsheng
> >
> > >
> > > > +	} else {
> > > > +		time =3D pw20_wt;
> > > > +	}
> > > > +
> > > > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > > > }
> > > > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  5:51         ` Wang Dongsheng-B40534
@ 2013-10-17  6:00           ` Bhushan Bharat-R65777
  2013-10-17  6:34             ` Wang Dongsheng-B40534
  2013-10-17 16:51           ` Scott Wood
  1 sibling, 1 reply; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-17  6:00 UTC (permalink / raw)
  To: Wang Dongsheng-B40534, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Wang Dongsheng-B40534
> Sent: Thursday, October 17, 2013 11:22 AM
> To: Bhushan Bharat-R65777; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and al=
tivec
> idle
>=20
>=20
>=20
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Thursday, October 17, 2013 11:20 AM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> >
> >
> >
> > > -----Original Message-----
> > > From: Wang Dongsheng-B40534
> > > Sent: Thursday, October 17, 2013 8:16 AM
> > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > Cc: linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > and altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Bhushan Bharat-R65777
> > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Wang Dongsheng-B40534
> > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > To: Wood Scott-B07421
> > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > > > Dongsheng-B40534
> > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > and
> > > > altivec idle
> > > > >
> > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > >
> > > > > Add a sys interface to enable/diable pw20 state or altivec idle,
> > > > > and
> > > > control the
> > > > > wait entry time.
> > > > >
> > > > > Enable/Disable interface:
> > > > > 0, disable. 1, enable.
> > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > >
> > > > > Set wait time interface:(Nanosecond)
> > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > Example: Base on TBfreq is 41MHZ.
> > > > > 1~48(ns): TB[63]
> > > > > 49~97(ns): TB[62]
> > > > > 98~195(ns): TB[61]
> > > > > 196~390(ns): TB[60]
> > > > > 391~780(ns): TB[59]
> > > > > 781~1560(ns): TB[58]
> > > > > ...
> > > > >
> > > > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > ---
> > > > > *v5:
> > > > > Change get_idle_ticks_bit function implementation.
> > > > >
> > > > > *v4:
> > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > >
> > > > > Remove has_pw20_altivec_idle function.
> > > > >
> > > > > Change wait "entry_bit" to wait time.
> > > > >
> > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > b/arch/powerpc/kernel/sysfs.c
> > > > index
> > > > > 27a90b9..10d1128 100644
> > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > > > setup_smt_snooze_delay);
> > > > >
> > > > >  #endif /* CONFIG_PPC64 */
> > > > >
> > > > > +#ifdef CONFIG_FSL_SOC
> > > > > +#define MAX_BIT				63
> > > > > +
> > > > > +static u64 pw20_wt;
> > > > > +static u64 altivec_idle_wt;
> > > > > +
> > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > +	u64 cycle;
> > > > > +
> > > > > +	if (ns >=3D 10000)
> > > > > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > > > > +	else
> > > > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > > > +
> > > > > +	if (!cycle)
> > > > > +		return 0;
> > > > > +
> > > > > +	return ilog2(cycle);
> > > > > +}
> > > > > +
> > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > +	u32 *value =3D val;
> > > > > +
> > > > > +	*value =3D mfspr(SPRN_PWRMGTCR0); }
> > > > > +
> > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > +				struct device_attribute *attr, char *buf) {
> > > > > +	u32 value;
> > > > > +	unsigned int cpu =3D dev->id;
> > > > > +
> > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > > > > +
> > > > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > > > +
> > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > +
> > > > > +static void do_store_pw20_state(void *val) {
> > > > > +	u32 *value =3D val;
> > > > > +	u32 pw20_state;
> > > > > +
> > > > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > > > +
> > > > > +	if (*value)
> > > > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > > > +	else
> > > > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > > > +
> > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > +
> > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > +				struct device_attribute *attr,
> > > > > +				const char *buf, size_t count) {
> > > > > +	u32 value;
> > > > > +	unsigned int cpu =3D dev->id;
> > > > > +
> > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > +		return -EINVAL;
> > > > > +
> > > > > +	if (value > 1)
> > > > > +		return -EINVAL;
> > > > > +
> > > > > +	smp_call_function_single(cpu, do_store_pw20_state, &value, 1);
> > > > > +
> > > > > +	return count;
> > > > > +}
> > > > > +
> > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > +				struct device_attribute *attr, char *buf) {
> > > > > +	u32 value;
> > > > > +	u64 tb_cycle;
> > > > > +	s64 time;
> > > > > +
> > > > > +	unsigned int cpu =3D dev->id;
> > > > > +
> > > > > +	if (!pw20_wt) {
> > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > 1);
> > > > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > +
> > > > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> > > >
> > > > Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =3D =
0,
> > > >
> > > > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > >
> > > > And time =3D -1;
> > > >
> > > Please look at the end of the function, :)
> > >
> > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> >
> > I know you return 0 if value =3D 0/1, my question was that, is this
> > correct as per specification?
> >
> > Ahh, also for "value" upto 7 you will return 0, no?
> >
> If value =3D 0, MAX_BIT - value =3D 63
> tb_cycle =3D 0xffffffff_ffffffff, tb_cycle * 1000 will overflow, but this
> situation is not possible.
> Because if the "value =3D 0" means this feature will be "disable".
> Now The default wait bit is 50(MAX_BIT - value, value =3D 13), the PW20/A=
ltivec
> Idle wait entry time is about 1ms, this time is very long for wait idle t=
ime,
> and it's cannot be increased(means (MAX_BIT - value) cannot greater than =
50).

What you said is not obvious from code and so at least write a comment that=
 value will be always >=3D 13 or value will never be less than < 8 and belo=
w calculation will not overflow. may be error out if value is less than 8.

-Bharat

>=20
> If (MAX_BIT-value) =3D 0, tb_cycle =3D 2,
> div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1 =3D ((2 * 1000) / 41) - 1=
 =3D 48 - 1
> =3D 47
>=20
> the return value is 47
>=20
> > -Bharat
> >
> > >
> > > -dongsheng
> > >
> > > >
> > > > > +	} else {
> > > > > +		time =3D pw20_wt;
> > > > > +	}
> > > > > +
> > > > > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > > > > }
> > > > > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  6:00           ` Bhushan Bharat-R65777
@ 2013-10-17  6:34             ` Wang Dongsheng-B40534
  2013-10-17  6:45               ` Bhushan Bharat-R65777
  0 siblings, 1 reply; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-17  6:34 UTC (permalink / raw)
  To: Bhushan Bharat-R65777, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Bhushan Bharat-R65777
> Sent: Thursday, October 17, 2013 2:00 PM
> To: Wang Dongsheng-B40534; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> altivec idle
>=20
>=20
>=20
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Thursday, October 17, 2013 11:22 AM
> > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> >
> >
> >
> > > -----Original Message-----
> > > From: Bhushan Bharat-R65777
> > > Sent: Thursday, October 17, 2013 11:20 AM
> > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > Cc: linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > and altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Wang Dongsheng-B40534
> > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Bhushan Bharat-R65777
> > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > state and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Wang Dongsheng-B40534
> > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > To: Wood Scott-B07421
> > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > > > > Dongsheng-B40534
> > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > > and
> > > > > altivec idle
> > > > > >
> > > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > >
> > > > > > Add a sys interface to enable/diable pw20 state or altivec
> > > > > > idle, and
> > > > > control the
> > > > > > wait entry time.
> > > > > >
> > > > > > Enable/Disable interface:
> > > > > > 0, disable. 1, enable.
> > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > >
> > > > > > Set wait time interface:(Nanosecond)
> > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > 1~48(ns): TB[63]
> > > > > > 49~97(ns): TB[62]
> > > > > > 98~195(ns): TB[61]
> > > > > > 196~390(ns): TB[60]
> > > > > > 391~780(ns): TB[59]
> > > > > > 781~1560(ns): TB[58]
> > > > > > ...
> > > > > >
> > > > > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > ---
> > > > > > *v5:
> > > > > > Change get_idle_ticks_bit function implementation.
> > > > > >
> > > > > > *v4:
> > > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > > >
> > > > > > Remove has_pw20_altivec_idle function.
> > > > > >
> > > > > > Change wait "entry_bit" to wait time.
> > > > > >
> > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > index
> > > > > > 27a90b9..10d1128 100644
> > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > > > > setup_smt_snooze_delay);
> > > > > >
> > > > > >  #endif /* CONFIG_PPC64 */
> > > > > >
> > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > +#define MAX_BIT				63
> > > > > > +
> > > > > > +static u64 pw20_wt;
> > > > > > +static u64 altivec_idle_wt;
> > > > > > +
> > > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > > +	u64 cycle;
> > > > > > +
> > > > > > +	if (ns >=3D 10000)
> > > > > > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > > > > > +	else
> > > > > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > > > > +
> > > > > > +	if (!cycle)
> > > > > > +		return 0;
> > > > > > +
> > > > > > +	return ilog2(cycle);
> > > > > > +}
> > > > > > +
> > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > +	u32 *value =3D val;
> > > > > > +
> > > > > > +	*value =3D mfspr(SPRN_PWRMGTCR0); }
> > > > > > +
> > > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > +	u32 value;
> > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > +
> > > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> > > > > > +
> > > > > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > > > > +
> > > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > > +
> > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > +	u32 *value =3D val;
> > > > > > +	u32 pw20_state;
> > > > > > +
> > > > > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > > > > +
> > > > > > +	if (*value)
> > > > > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > > > > +	else
> > > > > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > > > > +
> > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > +
> > > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > > +				struct device_attribute *attr,
> > > > > > +				const char *buf, size_t count) {
> > > > > > +	u32 value;
> > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > +
> > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > +		return -EINVAL;
> > > > > > +
> > > > > > +	if (value > 1)
> > > > > > +		return -EINVAL;
> > > > > > +
> > > > > > +	smp_call_function_single(cpu, do_store_pw20_state, &value,
> > > > > > +1);
> > > > > > +
> > > > > > +	return count;
> > > > > > +}
> > > > > > +
> > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > +	u32 value;
> > > > > > +	u64 tb_cycle;
> > > > > > +	s64 time;
> > > > > > +
> > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > +
> > > > > > +	if (!pw20_wt) {
> > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > 1);
> > > > > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > +
> > > > > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> > > > >
> > > > > Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =
=3D 0,
> > > > >
> > > > > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > > >
> > > > > And time =3D -1;
> > > > >
> > > > Please look at the end of the function, :)
> > > >
> > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > >
> > > I know you return 0 if value =3D 0/1, my question was that, is this
> > > correct as per specification?
> > >
> > > Ahh, also for "value" upto 7 you will return 0, no?
> > >
> > If value =3D 0, MAX_BIT - value =3D 63
> > tb_cycle =3D 0xffffffff_ffffffff, tb_cycle * 1000 will overflow, but
> > this situation is not possible.
> > Because if the "value =3D 0" means this feature will be "disable".
> > Now The default wait bit is 50(MAX_BIT - value, value =3D 13), the
> > PW20/Altivec Idle wait entry time is about 1ms, this time is very long
> > for wait idle time, and it's cannot be increased(means (MAX_BIT - value=
)
> cannot greater than 50).
>=20
> What you said is not obvious from code and so at least write a comment
> that value will be always >=3D 13 or value will never be less than < 8 an=
d
> below calculation will not overflow. may be error out if value is less
> than 8.
>=20
The "value" less than 10, this will overflow.
There is not error, The code I knew it could not be less than 10, that's wh=
y I use the following code. :)

tb_cycle =3D (1 << (MAX_BIT - value)) * 2;=20
time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;

-dongsheng

> -Bharat
>=20
> >
> > If (MAX_BIT-value) =3D 0, tb_cycle =3D 2,
> > div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1 =3D ((2 * 1000) / 41) -
> > 1 =3D 48 - 1 =3D 47
> >
> > the return value is 47
> >
> > > -Bharat
> > >
> > > >
> > > > -dongsheng
> > > >
> > > > >
> > > > > > +	} else {
> > > > > > +		time =3D pw20_wt;
> > > > > > +	}
> > > > > > +
> > > > > > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > > > > > }
> > > > > > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  6:34             ` Wang Dongsheng-B40534
@ 2013-10-17  6:45               ` Bhushan Bharat-R65777
  2013-10-18  3:02                 ` Wang Dongsheng-B40534
  0 siblings, 1 reply; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-17  6:45 UTC (permalink / raw)
  To: Wang Dongsheng-B40534, Wood Scott-B07421; +Cc: linuxppc-dev



> > > -----Original Message-----
> > > From: Wang Dongsheng-B40534
> > > Sent: Thursday, October 17, 2013 11:22 AM
> > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > Cc: linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > and altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Bhushan Bharat-R65777
> > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Wang Dongsheng-B40534
> > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > state and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Bhushan Bharat-R65777
> > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Wang Dongsheng-B40534
> > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > To: Wood Scott-B07421
> > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org;
> > > > > > > Wang
> > > > > > Dongsheng-B40534
> > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and
> > > > > > altivec idle
> > > > > > >
> > > > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > >
> > > > > > > Add a sys interface to enable/diable pw20 state or altivec
> > > > > > > idle, and
> > > > > > control the
> > > > > > > wait entry time.
> > > > > > >
> > > > > > > Enable/Disable interface:
> > > > > > > 0, disable. 1, enable.
> > > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > > >
> > > > > > > Set wait time interface:(Nanosecond)
> > > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > > 1~48(ns): TB[63]
> > > > > > > 49~97(ns): TB[62]
> > > > > > > 98~195(ns): TB[61]
> > > > > > > 196~390(ns): TB[60]
> > > > > > > 391~780(ns): TB[59]
> > > > > > > 781~1560(ns): TB[58]
> > > > > > > ...
> > > > > > >
> > > > > > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > > ---
> > > > > > > *v5:
> > > > > > > Change get_idle_ticks_bit function implementation.
> > > > > > >
> > > > > > > *v4:
> > > > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > > > >
> > > > > > > Remove has_pw20_altivec_idle function.
> > > > > > >
> > > > > > > Change wait "entry_bit" to wait time.
> > > > > > >
> > > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > > index
> > > > > > > 27a90b9..10d1128 100644
> > > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > > > > > setup_smt_snooze_delay);
> > > > > > >
> > > > > > >  #endif /* CONFIG_PPC64 */
> > > > > > >
> > > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > > +#define MAX_BIT				63
> > > > > > > +
> > > > > > > +static u64 pw20_wt;
> > > > > > > +static u64 altivec_idle_wt;
> > > > > > > +
> > > > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > > > +	u64 cycle;
> > > > > > > +
> > > > > > > +	if (ns >=3D 10000)
> > > > > > > +		cycle =3D div_u64(ns + 500, 1000) * tb_ticks_per_usec;
> > > > > > > +	else
> > > > > > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > > > > > +
> > > > > > > +	if (!cycle)
> > > > > > > +		return 0;
> > > > > > > +
> > > > > > > +	return ilog2(cycle);
> > > > > > > +}
> > > > > > > +
> > > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > > +	u32 *value =3D val;
> > > > > > > +
> > > > > > > +	*value =3D mfspr(SPRN_PWRMGTCR0); }
> > > > > > > +
> > > > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > > +	u32 value;
> > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > +
> > > > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > > > > +1);
> > > > > > > +
> > > > > > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > > > > > +
> > > > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > > > +
> > > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > > +	u32 *value =3D val;
> > > > > > > +	u32 pw20_state;
> > > > > > > +
> > > > > > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > > > > > +
> > > > > > > +	if (*value)
> > > > > > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > > > > > +	else
> > > > > > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > > > > > +
> > > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > > +
> > > > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > > > +				struct device_attribute *attr,
> > > > > > > +				const char *buf, size_t count) {
> > > > > > > +	u32 value;
> > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > +
> > > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > > +		return -EINVAL;
> > > > > > > +
> > > > > > > +	if (value > 1)
> > > > > > > +		return -EINVAL;
> > > > > > > +
> > > > > > > +	smp_call_function_single(cpu, do_store_pw20_state, &value,
> > > > > > > +1);
> > > > > > > +
> > > > > > > +	return count;
> > > > > > > +}
> > > > > > > +
> > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > > +	u32 value;
> > > > > > > +	u64 tb_cycle;
> > > > > > > +	s64 time;
> > > > > > > +
> > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > +
> > > > > > > +	if (!pw20_wt) {
> > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > 1);
> > > > > > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > +
> > > > > > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> > > > > >
> > > > > > Is value =3D 0 and value =3D 1 legal? These will make tb_cycle =
=3D
> > > > > > 0,
> > > > > >
> > > > > > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > > > >
> > > > > > And time =3D -1;
> > > > > >
> > > > > Please look at the end of the function, :)
> > > > >
> > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > >
> > > > I know you return 0 if value =3D 0/1, my question was that, is this
> > > > correct as per specification?
> > > >
> > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > >
> > > If value =3D 0, MAX_BIT - value =3D 63
> > > tb_cycle =3D 0xffffffff_ffffffff, tb_cycle * 1000 will overflow, but
> > > this situation is not possible.
> > > Because if the "value =3D 0" means this feature will be "disable".
> > > Now The default wait bit is 50(MAX_BIT - value, value =3D 13), the
> > > PW20/Altivec Idle wait entry time is about 1ms, this time is very
> > > long for wait idle time, and it's cannot be increased(means (MAX_BIT
> > > - value)
> > cannot greater than 50).
> >
> > What you said is not obvious from code and so at least write a comment
> > that value will be always >=3D 13 or value will never be less than < 8
> > and below calculation will not overflow. may be error out if value is
> > less than 8.
> >
> The "value" less than 10, this will overflow.
> There is not error, The code I knew it could not be less than 10, that's =
why I
> use the following code. :)

I am sorry to persist but this is not about what you know, this is about ho=
w code is read and code does not say what you know, so add a comment at lea=
st and error out/warn when "value" is less than a certain number.

-Bharat

>=20
> tb_cycle =3D (1 << (MAX_BIT - value)) * 2; time =3D div_u64(tb_cycle * 10=
00,
> tb_ticks_per_usec) - 1;
>=20
> -dongsheng
>=20
> > -Bharat
> >
> > >
> > > If (MAX_BIT-value) =3D 0, tb_cycle =3D 2, div_u64(tb_cycle * 1000,
> > > tb_ticks_per_usec) - 1 =3D ((2 * 1000) / 41) -
> > > 1 =3D 48 - 1 =3D 47
> > >
> > > the return value is 47
> > >
> > > > -Bharat
> > > >
> > > > >
> > > > > -dongsheng
> > > > >
> > > > > >
> > > > > > > +	} else {
> > > > > > > +		time =3D pw20_wt;
> > > > > > > +	}
> > > > > > > +
> > > > > > > +	return sprintf(buf, "%llu\n", time > 0 ? time : 0);
> > > > > > > }
> > > > > > > +

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  5:51         ` Wang Dongsheng-B40534
  2013-10-17  6:00           ` Bhushan Bharat-R65777
@ 2013-10-17 16:51           ` Scott Wood
  2013-10-18  2:36             ` Wang Dongsheng-B40534
  1 sibling, 1 reply; 34+ messages in thread
From: Scott Wood @ 2013-10-17 16:51 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Thu, 2013-10-17 at 00:51 -0500, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Thursday, October 17, 2013 11:20 AM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Wang Dongsheng-B40534
> > > Sent: Thursday, October 17, 2013 8:16 AM
> > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > Cc: linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Bhushan Bharat-R65777
> > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Wang Dongsheng-B40534
> > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > To: Wood Scott-B07421
> > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > > > Dongsheng-B40534
> > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > > altivec idle
> > > > >
> > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > +				struct device_attribute *attr, char *buf) {
> > > > > +	u32 value;
> > > > > +	u64 tb_cycle;
> > > > > +	s64 time;
> > > > > +
> > > > > +	unsigned int cpu = dev->id;
> > > > > +
> > > > > +	if (!pw20_wt) {
> > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > 1);
> > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > +
> > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > >
> > > > Is value = 0 and value = 1 legal? These will make tb_cycle = 0,
> > > >
> > > > > +		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > >
> > > > And time = -1;
> > > >
> > > Please look at the end of the function, :)
> > >
> > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > 
> > I know you return 0 if value = 0/1, my question was that, is this correct
> > as per specification?
> > 
> > Ahh, also for "value" upto 7 you will return 0, no?
> > 
> If value = 0, MAX_BIT - value = 63
> tb_cycle = 0xffffffff_ffffffff, 

Actually, tb_cycle will be undefined because you shifted a 32-bit value
(1) by more than 31 bits.  s/1/1ULL/

> tb_cycle * 1000 will overflow, but this situation is not possible.
> Because if the "value = 0" means this feature will be "disable".
> Now The default wait bit is 50(MAX_BIT - value, value = 13), the
> PW20/Altivec Idle wait entry time is about 1ms, this time is very long
> for wait idle time, and it's cannot be increased(means (MAX_BIT -
> value) cannot greater than 50).

Why can it not be increased?

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17 16:51           ` Scott Wood
@ 2013-10-18  2:36             ` Wang Dongsheng-B40534
  2013-10-18 17:49               ` Bhushan Bharat-R65777
  2013-10-18 19:23               ` Scott Wood
  0 siblings, 2 replies; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-18  2:36 UTC (permalink / raw)
  To: Wood Scott-B07421; +Cc: linuxppc-dev, Bhushan Bharat-R65777

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogRnJpZGF5LCBPY3RvYmVyIDE4LCAyMDEzIDEyOjUyIEFNDQo+IFRvOiBXYW5n
IERvbmdzaGVuZy1CNDA1MzQNCj4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgV29vZCBTY290
dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiBkZXZAbGlzdHMub3psYWJzLm9yZw0KPiBTdWJqZWN0OiBS
ZTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUg
YW5kDQo+IGFsdGl2ZWMgaWRsZQ0KPiANCj4gT24gVGh1LCAyMDEzLTEwLTE3IGF0IDAwOjUxIC0w
NTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3JvdGU6DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+
IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIwIEFNDQo+ID4gPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gQ2M6IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0g
cG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRpdmVj
IGlkbGUNCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl
LS0tLS0NCj4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+IFNlbnQ6
IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDg6MTYgQU0NCj4gPiA+ID4gVG86IEJodXNoYW4g
QmhhcmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRl
dkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBw
b3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZQ0KPiA+ID4gPiBhbmQgYWx0aXZl
YyBpZGxlDQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1PcmlnaW5h
bCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4g
PiA+ID4gPiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyAxOjAxIEFNDQo+ID4gPiA+
ID4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4g
PiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiBTdWJqZWN0OiBS
RTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjANCj4gPiA+
ID4gPiBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4g
RnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBP
Y3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0NCj4gPiA+ID4gPiA+IFRvOiBXb29kIFNjb3R0LUIwNzQy
MQ0KPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgbGludXhwcGMtZGV2QGxp
c3RzLm96bGFicy5vcmc7IFdhbmcNCj4gPiA+ID4gPiBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+
ID4gPiBTdWJqZWN0OiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3Ig
cHcyMCBzdGF0ZQ0KPiA+ID4gPiA+ID4gYW5kDQo+ID4gPiA+ID4gYWx0aXZlYyBpZGxlDQo+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUo
c3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp
YnV0ZSAqYXR0ciwgY2hhciAqYnVmKSB7DQo+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+
ID4gPiA+ICsJdTY0IHRiX2N5Y2xlOw0KPiA+ID4gPiA+ID4gKwlzNjQgdGltZTsNCj4gPiA+ID4g
PiA+ICsNCj4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+
ID4gPiArDQo+ID4gPiA+ID4gPiArCWlmICghcHcyMF93dCkgew0KPiA+ID4gPiA+ID4gKwkJc21w
X2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc2hvd19wd3JtZ3RjcjAsICZ2YWx1ZSwNCj4g
PiA+IDEpOw0KPiA+ID4gPiA+ID4gKwkJdmFsdWUgPSAodmFsdWUgJiBQV1JNR1RDUjBfUFcyMF9F
TlQpID4+DQo+ID4gPiA+ID4gPiArCQkJCQlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQo+ID4g
PiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8IChNQVhfQklUIC0gdmFs
dWUpKSAqIDI7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJcyB2YWx1ZSA9IDAgYW5kIHZhbHVlID0g
MSBsZWdhbD8gVGhlc2Ugd2lsbCBtYWtlIHRiX2N5Y2xlID0gMCwNCj4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gKwkJdGltZSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLCB0Yl90aWNrc19wZXJfdXNl
YykgLSAxOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQW5kIHRpbWUgPSAtMTsNCj4gPiA+ID4gPg0K
PiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgOikNCj4gPiA+
ID4NCj4gPiA+ID4gInJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHRpbWUgPiAwID8gdGlt
ZSA6IDApOyINCj4gPiA+DQo+ID4gPiBJIGtub3cgeW91IHJldHVybiAwIGlmIHZhbHVlID0gMC8x
LCBteSBxdWVzdGlvbiB3YXMgdGhhdCwgaXMgdGhpcw0KPiA+ID4gY29ycmVjdCBhcyBwZXIgc3Bl
Y2lmaWNhdGlvbj8NCj4gPiA+DQo+ID4gPiBBaGgsIGFsc28gZm9yICJ2YWx1ZSIgdXB0byA3IHlv
dSB3aWxsIHJldHVybiAwLCBubz8NCj4gPiA+DQo+ID4gSWYgdmFsdWUgPSAwLCBNQVhfQklUIC0g
dmFsdWUgPSA2Mw0KPiA+IHRiX2N5Y2xlID0gMHhmZmZmZmZmZl9mZmZmZmZmZiwNCj4gDQo+IEFj
dHVhbGx5LCB0Yl9jeWNsZSB3aWxsIGJlIHVuZGVmaW5lZCBiZWNhdXNlIHlvdSBzaGlmdGVkIGEg
MzItYml0IHZhbHVlDQo+ICgxKSBieSBtb3JlIHRoYW4gMzEgYml0cy4gIHMvMS8xVUxMLw0KPiAN
CkFjdHVhbGx5LCB3ZSBoYXZlIGJlZW4gZGlzY3Vzc2luZyB0aGlzIHNpdHVhdGlvbiB0aGF0IGNv
dWxkIG5vdCBoYXZlIGhhcHBlbmVkLg0KU2VlICFwdzIwX3d0IGJyYW5jaCwgdGhpcyBicmFuY2gg
aXMgcmVhZCBkZWZhdWx0IHdhaXQgYml0Lg0KVGhlIGRlZmF1bHQgd2FpdCBiaXQgaXMgNTAsIHRo
ZSB0aW1lIGlzIGFib3V0IDFtcy4NClRoZSBkZWZhdWx0IHdhaXQgYml0IGNhbm5vdCBsZXNzIHRo
YW4gNTAsIG1lYW5zIHRoZSB3YWl0IGVudHJ5IHRpbWUgY2Fubm90IGdyZWF0ZXIgdGhhbiAxbXMu
DQpXZSBoYXZlIGFscmVhZHkgYmVndW4gYmVuY2htYXJrIHRlc3QsIGFuZCB3ZSBnb3QgYSBwcmVs
aW1pbmFyeSByZXN1bHRzLg0KNTUsIDU2LCA1N2JpdCBsb29rcyBnb29kLCBidXQgd2UgbmVlZCBt
b3JlIGJlbmNobWFyayB0byBnZXQgdGhlIGRlZmF1bHQgYml0Lg0KDQoJaWYgKCFwdzIwX3d0KSB7
DQoJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGRvX3Nob3dfcHdybWd0Y3IwLCAmdmFs
dWUsIDEpOw0KCQl2YWx1ZSA9ICh2YWx1ZSAmIFBXUk1HVENSMF9QVzIwX0VOVCkgPj4NCgkJCQkJ
UFdSTUdUQ1IwX1BXMjBfRU5UX1NISUZUOw0KDQoJCXRiX2N5Y2xlID0gKDEgPDwgKE1BWF9CSVQg
LSB2YWx1ZSkpICogMjsNCgkJdGltZSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLCB0Yl90aWNr
c19wZXJfdXNlYykgLSAxOw0KCX0gZWxzZSB7DQoJCXRpbWUgPSBwdzIwX3d0Ow0KCX0NCg0KSWYg
aXQgY2F1c2VkIGNvbmZ1c2lvbiwgd2UgY2FuIGFkZCBhIGNvbW1lbnQuIEFzIEkgZGlzY3VzcyB3
aXRoIEJoYXJhdC4NCg0KPiA+IHRiX2N5Y2xlICogMTAwMCB3aWxsIG92ZXJmbG93LCBidXQgdGhp
cyBzaXR1YXRpb24gaXMgbm90IHBvc3NpYmxlLg0KPiA+IEJlY2F1c2UgaWYgdGhlICJ2YWx1ZSA9
IDAiIG1lYW5zIHRoaXMgZmVhdHVyZSB3aWxsIGJlICJkaXNhYmxlIi4NCj4gPiBOb3cgVGhlIGRl
ZmF1bHQgd2FpdCBiaXQgaXMgNTAoTUFYX0JJVCAtIHZhbHVlLCB2YWx1ZSA9IDEzKSwgdGhlDQo+
ID4gUFcyMC9BbHRpdmVjIElkbGUgd2FpdCBlbnRyeSB0aW1lIGlzIGFib3V0IDFtcywgdGhpcyB0
aW1lIGlzIHZlcnkgbG9uZw0KPiA+IGZvciB3YWl0IGlkbGUgdGltZSwgYW5kIGl0J3MgY2Fubm90
IGJlIGluY3JlYXNlZChtZWFucyAoTUFYX0JJVCAtDQo+ID4gdmFsdWUpIGNhbm5vdCBncmVhdGVy
IHRoYW4gNTApLg0KPiANCj4gV2h5IGNhbiBpdCBub3QgYmUgaW5jcmVhc2VkPw0KPg0Kc2VlIGFi
b3ZlLCA6KQ0KDQotZG9uZ3NoZW5nDQo+IC1TY290dA0KPiANCg0K

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-17  6:45               ` Bhushan Bharat-R65777
@ 2013-10-18  3:02                 ` Wang Dongsheng-B40534
  2013-10-18 19:21                   ` Scott Wood
  0 siblings, 1 reply; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-18  3:02 UTC (permalink / raw)
  To: Bhushan Bharat-R65777, Wood Scott-B07421; +Cc: linuxppc-dev



> -----Original Message-----
> From: Bhushan Bharat-R65777
> Sent: Thursday, October 17, 2013 2:46 PM
> To: Wang Dongsheng-B40534; Wood Scott-B07421
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> altivec idle
>=20
>=20
>=20
> > > > -----Original Message-----
> > > > From: Wang Dongsheng-B40534
> > > > Sent: Thursday, October 17, 2013 11:22 AM
> > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Bhushan Bharat-R65777
> > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > state and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Wang Dongsheng-B40534
> > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Bhushan Bharat-R65777
> > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and altivec idle
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > To: Wood Scott-B07421
> > > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org;
> > > > > > > > Wang
> > > > > > > Dongsheng-B40534
> > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > state and
> > > > > > > altivec idle
> > > > > > > >
> > > > > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > > >
> > > > > > > > Add a sys interface to enable/diable pw20 state or altivec
> > > > > > > > idle, and
> > > > > > > control the
> > > > > > > > wait entry time.
> > > > > > > >
> > > > > > > > Enable/Disable interface:
> > > > > > > > 0, disable. 1, enable.
> > > > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > > > >
> > > > > > > > Set wait time interface:(Nanosecond)
> > > > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > > > 1~48(ns): TB[63]
> > > > > > > > 49~97(ns): TB[62]
> > > > > > > > 98~195(ns): TB[61]
> > > > > > > > 196~390(ns): TB[60]
> > > > > > > > 391~780(ns): TB[59]
> > > > > > > > 781~1560(ns): TB[58]
> > > > > > > > ...
> > > > > > > >
> > > > > > > > Signed-off-by: Wang Dongsheng
> > > > > > > > <dongsheng.wang@freescale.com>
> > > > > > > > ---
> > > > > > > > *v5:
> > > > > > > > Change get_idle_ticks_bit function implementation.
> > > > > > > >
> > > > > > > > *v4:
> > > > > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > > > > >
> > > > > > > > Remove has_pw20_altivec_idle function.
> > > > > > > >
> > > > > > > > Change wait "entry_bit" to wait time.
> > > > > > > >
> > > > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > > > index
> > > > > > > > 27a90b9..10d1128 100644
> > > > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=3D",
> > > > > > > setup_smt_snooze_delay);
> > > > > > > >
> > > > > > > >  #endif /* CONFIG_PPC64 */
> > > > > > > >
> > > > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > > > +#define MAX_BIT				63
> > > > > > > > +
> > > > > > > > +static u64 pw20_wt;
> > > > > > > > +static u64 altivec_idle_wt;
> > > > > > > > +
> > > > > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > > > > +	u64 cycle;
> > > > > > > > +
> > > > > > > > +	if (ns >=3D 10000)
> > > > > > > > +		cycle =3D div_u64(ns + 500, 1000) *
> tb_ticks_per_usec;
> > > > > > > > +	else
> > > > > > > > +		cycle =3D div_u64(ns * tb_ticks_per_usec, 1000);
> > > > > > > > +
> > > > > > > > +	if (!cycle)
> > > > > > > > +		return 0;
> > > > > > > > +
> > > > > > > > +	return ilog2(cycle);
> > > > > > > > +}
> > > > > > > > +
> > > > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > > > +	u32 *value =3D val;
> > > > > > > > +
> > > > > > > > +	*value =3D mfspr(SPRN_PWRMGTCR0); }
> > > > > > > > +
> > > > > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > > > > +				struct device_attribute *attr, char
> *buf) {
> > > > > > > > +	u32 value;
> > > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > > +
> > > > > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > > > > > +1);
> > > > > > > > +
> > > > > > > > +	value &=3D PWRMGTCR0_PW20_WAIT;
> > > > > > > > +
> > > > > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > > > > +
> > > > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > > > +	u32 *value =3D val;
> > > > > > > > +	u32 pw20_state;
> > > > > > > > +
> > > > > > > > +	pw20_state =3D mfspr(SPRN_PWRMGTCR0);
> > > > > > > > +
> > > > > > > > +	if (*value)
> > > > > > > > +		pw20_state |=3D PWRMGTCR0_PW20_WAIT;
> > > > > > > > +	else
> > > > > > > > +		pw20_state &=3D ~PWRMGTCR0_PW20_WAIT;
> > > > > > > > +
> > > > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > > > +
> > > > > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > > > > +				struct device_attribute *attr,
> > > > > > > > +				const char *buf, size_t count) {
> > > > > > > > +	u32 value;
> > > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > > +
> > > > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > > > +		return -EINVAL;
> > > > > > > > +
> > > > > > > > +	if (value > 1)
> > > > > > > > +		return -EINVAL;
> > > > > > > > +
> > > > > > > > +	smp_call_function_single(cpu, do_store_pw20_state,
> > > > > > > > +&value, 1);
> > > > > > > > +
> > > > > > > > +	return count;
> > > > > > > > +}
> > > > > > > > +
> > > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > > +				struct device_attribute *attr, char
> *buf) {
> > > > > > > > +	u32 value;
> > > > > > > > +	u64 tb_cycle;
> > > > > > > > +	s64 time;
> > > > > > > > +
> > > > > > > > +	unsigned int cpu =3D dev->id;
> > > > > > > > +
> > > > > > > > +	if (!pw20_wt) {
> > > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0,
> > > > > > > > +&value,
> > > > > 1);
> > > > > > > > +		value =3D (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > +
> > > > > > > > +		tb_cycle =3D (1 << (MAX_BIT - value)) * 2;
> > > > > > >
> > > > > > > Is value =3D 0 and value =3D 1 legal? These will make tb_cycl=
e =3D
> > > > > > > 0,
> > > > > > >
> > > > > > > > +		time =3D div_u64(tb_cycle * 1000, tb_ticks_per_usec)
> - 1;
> > > > > > >
> > > > > > > And time =3D -1;
> > > > > > >
> > > > > > Please look at the end of the function, :)
> > > > > >
> > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > > >
> > > > > I know you return 0 if value =3D 0/1, my question was that, is
> > > > > this correct as per specification?
> > > > >
> > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > >
> > > > If value =3D 0, MAX_BIT - value =3D 63 tb_cycle =3D 0xffffffff_ffff=
ffff,
> > > > tb_cycle * 1000 will overflow, but this situation is not possible.
> > > > Because if the "value =3D 0" means this feature will be "disable".
> > > > Now The default wait bit is 50(MAX_BIT - value, value =3D 13), the
> > > > PW20/Altivec Idle wait entry time is about 1ms, this time is very
> > > > long for wait idle time, and it's cannot be increased(means
> > > > (MAX_BIT
> > > > - value)
> > > cannot greater than 50).
> > >
> > > What you said is not obvious from code and so at least write a
> > > comment that value will be always >=3D 13 or value will never be less
> > > than < 8 and below calculation will not overflow. may be error out
> > > if value is less than 8.
> > >
> > The "value" less than 10, this will overflow.
> > There is not error, The code I knew it could not be less than 10,
> > that's why I use the following code. :)
>=20
> I am sorry to persist but this is not about what you know, this is about
> how code is read and code does not say what you know, so add a comment at
> least and error out/warn when "value" is less than a certain number.
>=20
Sorry for the late to response the mail. If it caused confusion, we can add=
 a comment.

How about the following comment?
/*
 * If the "value" less than 10, this will overflow.
 * From benchmark test, the default wait bit will not be set less than 10bi=
t.
 * Because 10 bit corresponds to the wait entry time is 439375573401999609(=
ns),
 * for wait-entry-idle time this value looks too long, and we cannot use th=
ose
 * "long" time as a default wait-entry time. So overflow could not have hap=
pened
 * and we use this calculation method to get wait-entry-idle time.
 */

> -Bharat

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18  2:36             ` Wang Dongsheng-B40534
@ 2013-10-18 17:49               ` Bhushan Bharat-R65777
  2013-10-18 19:02                 ` Scott Wood
  2013-10-18 19:23               ` Scott Wood
  1 sibling, 1 reply; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-18 17:49 UTC (permalink / raw)
  To: Wang Dongsheng-B40534, Wood Scott-B07421; +Cc: linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV2FuZyBEb25nc2hlbmct
QjQwNTM0DQo+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAxOCwgMjAxMyA4OjA3IEFNDQo+IFRvOiBX
b29kIFNjb3R0LUIwNzQyMQ0KPiBDYzogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3OyBsaW51eHBwYy1k
ZXZAbGlzdHMub3psYWJzLm9yZw0KPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJw
Yy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMNCj4gaWRsZQ0KPiAN
Cj4gDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogV29vZCBT
Y290dC1CMDc0MjENCj4gPiBTZW50OiBGcmlkYXksIE9jdG9iZXIgMTgsIDIwMTMgMTI6NTIgQU0N
Cj4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2
NTc3NzsgV29vZCBTY290dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiA+IGRldkBsaXN0cy5vemxhYnMu
b3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiA+IGFsdGl2ZWMgaWRsZQ0KPiA+DQo+ID4gT24gVGh1
LCAyMDEzLTEwLTE3IGF0IDAwOjUxIC0wNTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3JvdGU6
DQo+ID4gPg0KPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9t
OiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIg
MTcsIDIwMTMgMTE6MjAgQU0NCj4gPiA+ID4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29v
ZCBTY290dC1CMDc0MjENCj4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3Jn
DQo+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBz
eXNmcyBmb3IgcHcyMCBzdGF0ZQ0KPiA+ID4gPiBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+DQo+
ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g
PiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiBTZW50OiBUaHVy
c2RheSwgT2N0b2JlciAxNywgMjAxMyA4OjE2IEFNDQo+ID4gPiA+ID4gVG86IEJodXNoYW4gQmhh
cmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2
QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0g
cG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjANCj4gPiA+ID4gPiBzdGF0ZSBhbmQgYWx0
aXZlYyBpZGxlDQo+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3DQo+ID4gPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyAx
OjAxIEFNDQo+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0
LUIwNzQyMQ0KPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+
ID4gPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQg
c3lzZnMgZm9yIHB3MjANCj4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQw
NTM0DQo+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTUsIDIwMTMgMjo1MSBQ
TQ0KPiA+ID4gPiA+ID4gPiBUbzogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gQ2M6
IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+
ID4gPiA+ID4gPiA+IFdhbmcNCj4gPiA+ID4gPiA+IERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4g
PiA+ID4gU3ViamVjdDogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9y
IHB3MjANCj4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kDQo+ID4gPiA+ID4gPiBhbHRpdmVjIGlkbGUN
Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93
YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gPiA+ID4gPiArCQkJCXN0cnVjdCBk
ZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIHsNCj4gPiA+ID4gPiA+ID4gKwl1MzIg
dmFsdWU7DQo+ID4gPiA+ID4gPiA+ICsJdTY0IHRiX2N5Y2xlOw0KPiA+ID4gPiA+ID4gPiArCXM2
NCB0aW1lOw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNw
dSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gKwlpZiAoIXB3MjBf
d3QpIHsNCj4gPiA+ID4gPiA+ID4gKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9f
c2hvd19wd3JtZ3RjcjAsICZ2YWx1ZSwNCj4gPiA+ID4gMSk7DQo+ID4gPiA+ID4gPiA+ICsJCXZh
bHVlID0gKHZhbHVlICYgUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0KPiA+ID4gPiA+ID4gPiArCQkJ
CQlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQo+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+
ID4gKwkJdGJfY3ljbGUgPSAoMSA8PCAoTUFYX0JJVCAtIHZhbHVlKSkgKiAyOw0KPiA+ID4gPiA+
ID4NCj4gPiA+ID4gPiA+IElzIHZhbHVlID0gMCBhbmQgdmFsdWUgPSAxIGxlZ2FsPyBUaGVzZSB3
aWxsIG1ha2UgdGJfY3ljbGUgPQ0KPiA+ID4gPiA+ID4gMCwNCj4gPiA+ID4gPiA+DQo+ID4gPiA+
ID4gPiA+ICsJCXRpbWUgPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAwMCwgdGJfdGlja3NfcGVyX3Vz
ZWMpIC0gMTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBBbmQgdGltZSA9IC0xOw0KPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwg
OikNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICJyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB0
aW1lID4gMCA/IHRpbWUgOiAwKTsiDQo+ID4gPiA+DQo+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJu
IDAgaWYgdmFsdWUgPSAwLzEsIG15IHF1ZXN0aW9uIHdhcyB0aGF0LCBpcyB0aGlzDQo+ID4gPiA+
IGNvcnJlY3QgYXMgcGVyIHNwZWNpZmljYXRpb24/DQo+ID4gPiA+DQo+ID4gPiA+IEFoaCwgYWxz
byBmb3IgInZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0dXJuIDAsIG5vPw0KPiA+ID4gPg0KPiA+
ID4gSWYgdmFsdWUgPSAwLCBNQVhfQklUIC0gdmFsdWUgPSA2Mw0KPiA+ID4gdGJfY3ljbGUgPSAw
eGZmZmZmZmZmX2ZmZmZmZmZmLA0KPiA+DQo+ID4gQWN0dWFsbHksIHRiX2N5Y2xlIHdpbGwgYmUg
dW5kZWZpbmVkIGJlY2F1c2UgeW91IHNoaWZ0ZWQgYSAzMi1iaXQNCj4gPiB2YWx1ZQ0KPiA+ICgx
KSBieSBtb3JlIHRoYW4gMzEgYml0cy4gIHMvMS8xVUxMLw0KPiA+DQoNCldoYXQgU2NvdHQgaXMg
c2F5aW5nIGlzIHRoZSBsZWZ0IHNoaWZ0IG9mICIxIiBmb3IgbW9yZSB0aGFuIDMxIHdpbGwgYmUg
dW5kZWZpbmVkLg0KU2NvdHQgdGhpcyB3aWxsIGJlIHNpZ24tZXh0ZW5kZWQsIHJpZ2h0Pw0KDQot
QmhhcmF0DQoNCj4gQWN0dWFsbHksIHdlIGhhdmUgYmVlbiBkaXNjdXNzaW5nIHRoaXMgc2l0dWF0
aW9uIHRoYXQgY291bGQgbm90IGhhdmUgaGFwcGVuZWQuDQo+IFNlZSAhcHcyMF93dCBicmFuY2gs
IHRoaXMgYnJhbmNoIGlzIHJlYWQgZGVmYXVsdCB3YWl0IGJpdC4NCj4gVGhlIGRlZmF1bHQgd2Fp
dCBiaXQgaXMgNTAsIHRoZSB0aW1lIGlzIGFib3V0IDFtcy4NCj4gVGhlIGRlZmF1bHQgd2FpdCBi
aXQgY2Fubm90IGxlc3MgdGhhbiA1MCwgbWVhbnMgdGhlIHdhaXQgZW50cnkgdGltZSBjYW5ub3QN
Cj4gZ3JlYXRlciB0aGFuIDFtcy4NCj4gV2UgaGF2ZSBhbHJlYWR5IGJlZ3VuIGJlbmNobWFyayB0
ZXN0LCBhbmQgd2UgZ290IGEgcHJlbGltaW5hcnkgcmVzdWx0cy4NCj4gNTUsIDU2LCA1N2JpdCBs
b29rcyBnb29kLCBidXQgd2UgbmVlZCBtb3JlIGJlbmNobWFyayB0byBnZXQgdGhlIGRlZmF1bHQg
Yml0Lg0KPiANCj4gCWlmICghcHcyMF93dCkgew0KPiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3Npbmds
ZShjcHUsIGRvX3Nob3dfcHdybWd0Y3IwLCAmdmFsdWUsIDEpOw0KPiAJCXZhbHVlID0gKHZhbHVl
ICYgUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0KPiAJCQkJCVBXUk1HVENSMF9QVzIwX0VOVF9TSElG
VDsNCj4gDQo+IAkJdGJfY3ljbGUgPSAoMSA8PCAoTUFYX0JJVCAtIHZhbHVlKSkgKiAyOw0KPiAJ
CXRpbWUgPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAwMCwgdGJfdGlja3NfcGVyX3VzZWMpIC0gMTsN
Cj4gCX0gZWxzZSB7DQo+IAkJdGltZSA9IHB3MjBfd3Q7DQo+IAl9DQo+IA0KPiBJZiBpdCBjYXVz
ZWQgY29uZnVzaW9uLCB3ZSBjYW4gYWRkIGEgY29tbWVudC4gQXMgSSBkaXNjdXNzIHdpdGggQmhh
cmF0Lg0KPiANCj4gPiA+IHRiX2N5Y2xlICogMTAwMCB3aWxsIG92ZXJmbG93LCBidXQgdGhpcyBz
aXR1YXRpb24gaXMgbm90IHBvc3NpYmxlLg0KPiA+ID4gQmVjYXVzZSBpZiB0aGUgInZhbHVlID0g
MCIgbWVhbnMgdGhpcyBmZWF0dXJlIHdpbGwgYmUgImRpc2FibGUiLg0KPiA+ID4gTm93IFRoZSBk
ZWZhdWx0IHdhaXQgYml0IGlzIDUwKE1BWF9CSVQgLSB2YWx1ZSwgdmFsdWUgPSAxMyksIHRoZQ0K
PiA+ID4gUFcyMC9BbHRpdmVjIElkbGUgd2FpdCBlbnRyeSB0aW1lIGlzIGFib3V0IDFtcywgdGhp
cyB0aW1lIGlzIHZlcnkNCj4gPiA+IGxvbmcgZm9yIHdhaXQgaWRsZSB0aW1lLCBhbmQgaXQncyBj
YW5ub3QgYmUgaW5jcmVhc2VkKG1lYW5zIChNQVhfQklUDQo+ID4gPiAtDQo+ID4gPiB2YWx1ZSkg
Y2Fubm90IGdyZWF0ZXIgdGhhbiA1MCkuDQo+ID4NCj4gPiBXaHkgY2FuIGl0IG5vdCBiZSBpbmNy
ZWFzZWQ/DQo+ID4NCj4gc2VlIGFib3ZlLCA6KQ0KDQoNCj4gDQo+IC1kb25nc2hlbmcNCj4gPiAt
U2NvdHQNCj4gPg0KDQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18 17:49               ` Bhushan Bharat-R65777
@ 2013-10-18 19:02                 ` Scott Wood
  0 siblings, 0 replies; 34+ messages in thread
From: Scott Wood @ 2013-10-18 19:02 UTC (permalink / raw)
  To: Bhushan Bharat-R65777
  Cc: Wood Scott-B07421, Wang Dongsheng-B40534, linuxppc-dev

On Fri, 2013-10-18 at 12:49 -0500, Bhushan Bharat-R65777 wrote:
> 
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Friday, October 18, 2013 8:07 AM
> > To: Wood Scott-B07421
> > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec
> > idle
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Wood Scott-B07421
> > > Sent: Friday, October 18, 2013 12:52 AM
> > > To: Wang Dongsheng-B40534
> > > Cc: Bhushan Bharat-R65777; Wood Scott-B07421; linuxppc-
> > > dev@lists.ozlabs.org
> > > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > altivec idle
> > >
> > > On Thu, 2013-10-17 at 00:51 -0500, Wang Dongsheng-B40534 wrote:
> > > >
> > > > > -----Original Message-----
> > > > > From: Bhushan Bharat-R65777
> > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Wang Dongsheng-B40534
> > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Bhushan Bharat-R65777
> > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and altivec idle
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > To: Wood Scott-B07421
> > > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org;
> > > > > > > > Wang
> > > > > > > Dongsheng-B40534
> > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > state and
> > > > > > > altivec idle
> > > > > > > >
> > > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > > > +	u32 value;
> > > > > > > > +	u64 tb_cycle;
> > > > > > > > +	s64 time;
> > > > > > > > +
> > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > +
> > > > > > > > +	if (!pw20_wt) {
> > > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > > 1);
> > > > > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > +
> > > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > > > > >
> > > > > > > Is value = 0 and value = 1 legal? These will make tb_cycle =
> > > > > > > 0,
> > > > > > >
> > > > > > > > +		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > > > > >
> > > > > > > And time = -1;
> > > > > > >
> > > > > > Please look at the end of the function, :)
> > > > > >
> > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > > >
> > > > > I know you return 0 if value = 0/1, my question was that, is this
> > > > > correct as per specification?
> > > > >
> > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > >
> > > > If value = 0, MAX_BIT - value = 63
> > > > tb_cycle = 0xffffffff_ffffffff,
> > >
> > > Actually, tb_cycle will be undefined because you shifted a 32-bit
> > > value
> > > (1) by more than 31 bits.  s/1/1ULL/
> > >
> 
> What Scott is saying is the left shift of "1" for more than 31 will be undefined.
> Scott this will be sign-extended, right?

It's undefined in C.  I don't know what GCC on PPC specifically will do.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18  3:02                 ` Wang Dongsheng-B40534
@ 2013-10-18 19:21                   ` Scott Wood
  2013-10-18 19:24                     ` Bhushan Bharat-R65777
                                       ` (2 more replies)
  0 siblings, 3 replies; 34+ messages in thread
From: Scott Wood @ 2013-10-18 19:21 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Thu, 2013-10-17 at 22:02 -0500, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Thursday, October 17, 2013 2:46 PM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > 
> > 
> > > > > -----Original Message-----
> > > > > From: Wang Dongsheng-B40534
> > > > > Sent: Thursday, October 17, 2013 11:22 AM
> > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Bhushan Bharat-R65777
> > > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Wang Dongsheng-B40534
> > > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and altivec idle
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > state and altivec idle
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > > To: Wood Scott-B07421
> > > > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org;
> > > > > > > > > Wang
> > > > > > > > Dongsheng-B40534
> > > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > > state and
> > > > > > > > altivec idle
> > > > > > > > >
> > > > > > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > > > >
> > > > > > > > > Add a sys interface to enable/diable pw20 state or altivec
> > > > > > > > > idle, and
> > > > > > > > control the
> > > > > > > > > wait entry time.
> > > > > > > > >
> > > > > > > > > Enable/Disable interface:
> > > > > > > > > 0, disable. 1, enable.
> > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > > > > >
> > > > > > > > > Set wait time interface:(Nanosecond)
> > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > > > > 1~48(ns): TB[63]
> > > > > > > > > 49~97(ns): TB[62]
> > > > > > > > > 98~195(ns): TB[61]
> > > > > > > > > 196~390(ns): TB[60]
> > > > > > > > > 391~780(ns): TB[59]
> > > > > > > > > 781~1560(ns): TB[58]
> > > > > > > > > ...
> > > > > > > > >
> > > > > > > > > Signed-off-by: Wang Dongsheng
> > > > > > > > > <dongsheng.wang@freescale.com>
> > > > > > > > > ---
> > > > > > > > > *v5:
> > > > > > > > > Change get_idle_ticks_bit function implementation.
> > > > > > > > >
> > > > > > > > > *v4:
> > > > > > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > > > > > >
> > > > > > > > > Remove has_pw20_altivec_idle function.
> > > > > > > > >
> > > > > > > > > Change wait "entry_bit" to wait time.
> > > > > > > > >
> > > > > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > > > > index
> > > > > > > > > 27a90b9..10d1128 100644
> > > > > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=",
> > > > > > > > setup_smt_snooze_delay);
> > > > > > > > >
> > > > > > > > >  #endif /* CONFIG_PPC64 */
> > > > > > > > >
> > > > > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > > > > +#define MAX_BIT				63
> > > > > > > > > +
> > > > > > > > > +static u64 pw20_wt;
> > > > > > > > > +static u64 altivec_idle_wt;
> > > > > > > > > +
> > > > > > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > > > > > +	u64 cycle;
> > > > > > > > > +
> > > > > > > > > +	if (ns >= 10000)
> > > > > > > > > +		cycle = div_u64(ns + 500, 1000) *
> > tb_ticks_per_usec;
> > > > > > > > > +	else
> > > > > > > > > +		cycle = div_u64(ns * tb_ticks_per_usec, 1000);
> > > > > > > > > +
> > > > > > > > > +	if (!cycle)
> > > > > > > > > +		return 0;
> > > > > > > > > +
> > > > > > > > > +	return ilog2(cycle);
> > > > > > > > > +}
> > > > > > > > > +
> > > > > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > > > > +	u32 *value = val;
> > > > > > > > > +
> > > > > > > > > +	*value = mfspr(SPRN_PWRMGTCR0); }
> > > > > > > > > +
> > > > > > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > > > > > +				struct device_attribute *attr, char
> > *buf) {
> > > > > > > > > +	u32 value;
> > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > +
> > > > > > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > > > > > > +1);
> > > > > > > > > +
> > > > > > > > > +	value &= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > +
> > > > > > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > > > > > +
> > > > > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > > > > +	u32 *value = val;
> > > > > > > > > +	u32 pw20_state;
> > > > > > > > > +
> > > > > > > > > +	pw20_state = mfspr(SPRN_PWRMGTCR0);
> > > > > > > > > +
> > > > > > > > > +	if (*value)
> > > > > > > > > +		pw20_state |= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > +	else
> > > > > > > > > +		pw20_state &= ~PWRMGTCR0_PW20_WAIT;
> > > > > > > > > +
> > > > > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > > > > +
> > > > > > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > > > > > +				struct device_attribute *attr,
> > > > > > > > > +				const char *buf, size_t count) {
> > > > > > > > > +	u32 value;
> > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > +
> > > > > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > > > > +		return -EINVAL;
> > > > > > > > > +
> > > > > > > > > +	if (value > 1)
> > > > > > > > > +		return -EINVAL;
> > > > > > > > > +
> > > > > > > > > +	smp_call_function_single(cpu, do_store_pw20_state,
> > > > > > > > > +&value, 1);
> > > > > > > > > +
> > > > > > > > > +	return count;
> > > > > > > > > +}
> > > > > > > > > +
> > > > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > > > +				struct device_attribute *attr, char
> > *buf) {
> > > > > > > > > +	u32 value;
> > > > > > > > > +	u64 tb_cycle;
> > > > > > > > > +	s64 time;
> > > > > > > > > +
> > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > +
> > > > > > > > > +	if (!pw20_wt) {
> > > > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0,
> > > > > > > > > +&value,
> > > > > > 1);
> > > > > > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > > +
> > > > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > > > > > >
> > > > > > > > Is value = 0 and value = 1 legal? These will make tb_cycle =
> > > > > > > > 0,
> > > > > > > >
> > > > > > > > > +		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec)
> > - 1;
> > > > > > > >
> > > > > > > > And time = -1;
> > > > > > > >
> > > > > > > Please look at the end of the function, :)
> > > > > > >
> > > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > > > >
> > > > > > I know you return 0 if value = 0/1, my question was that, is
> > > > > > this correct as per specification?
> > > > > >
> > > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > > >
> > > > > If value = 0, MAX_BIT - value = 63 tb_cycle = 0xffffffff_ffffffff,
> > > > > tb_cycle * 1000 will overflow, but this situation is not possible.
> > > > > Because if the "value = 0" means this feature will be "disable".
> > > > > Now The default wait bit is 50(MAX_BIT - value, value = 13), the
> > > > > PW20/Altivec Idle wait entry time is about 1ms, this time is very
> > > > > long for wait idle time, and it's cannot be increased(means
> > > > > (MAX_BIT
> > > > > - value)
> > > > cannot greater than 50).
> > > >
> > > > What you said is not obvious from code and so at least write a
> > > > comment that value will be always >= 13 or value will never be less
> > > > than < 8 and below calculation will not overflow. may be error out
> > > > if value is less than 8.
> > > >
> > > The "value" less than 10, this will overflow.
> > > There is not error, The code I knew it could not be less than 10,
> > > that's why I use the following code. :)
> > 
> > I am sorry to persist but this is not about what you know, this is about
> > how code is read and code does not say what you know, so add a comment at
> > least and error out/warn when "value" is less than a certain number.
> > 
> Sorry for the late to response the mail. If it caused confusion, we can add a comment.
> 
> How about the following comment?
> /*
>  * If the "value" less than 10, this will overflow.
>  * From benchmark test, the default wait bit will not be set less than 10bit.
>  * Because 10 bit corresponds to the wait entry time is 439375573401999609(ns),
>  * for wait-entry-idle time this value looks too long, and we cannot use those
>  * "long" time as a default wait-entry time. So overflow could not have happened
>  * and we use this calculation method to get wait-entry-idle time.
>  */

If there's to be a limit on the times we accept, make it explicit.
Check for it before doing any conversions, and return an error if
userspace tries to set it.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18  2:36             ` Wang Dongsheng-B40534
  2013-10-18 17:49               ` Bhushan Bharat-R65777
@ 2013-10-18 19:23               ` Scott Wood
  2013-10-21  3:27                 ` Wang Dongsheng-B40534
  1 sibling, 1 reply; 34+ messages in thread
From: Scott Wood @ 2013-10-18 19:23 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Thu, 2013-10-17 at 21:36 -0500, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Friday, October 18, 2013 12:52 AM
> > To: Wang Dongsheng-B40534
> > Cc: Bhushan Bharat-R65777; Wood Scott-B07421; linuxppc-
> > dev@lists.ozlabs.org
> > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > On Thu, 2013-10-17 at 00:51 -0500, Wang Dongsheng-B40534 wrote:
> > >
> > > > -----Original Message-----
> > > > From: Bhushan Bharat-R65777
> > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Wang Dongsheng-B40534
> > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Bhushan Bharat-R65777
> > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Wang Dongsheng-B40534
> > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > To: Wood Scott-B07421
> > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org; Wang
> > > > > > Dongsheng-B40534
> > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > > > and
> > > > > > altivec idle
> > > > > > >
> > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > +				struct device_attribute *attr, char *buf) {
> > > > > > > +	u32 value;
> > > > > > > +	u64 tb_cycle;
> > > > > > > +	s64 time;
> > > > > > > +
> > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > +
> > > > > > > +	if (!pw20_wt) {
> > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value,
> > > > 1);
> > > > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > +
> > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > > > >
> > > > > > Is value = 0 and value = 1 legal? These will make tb_cycle = 0,
> > > > > >
> > > > > > > +		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> > > > > >
> > > > > > And time = -1;
> > > > > >
> > > > > Please look at the end of the function, :)
> > > > >
> > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > >
> > > > I know you return 0 if value = 0/1, my question was that, is this
> > > > correct as per specification?
> > > >
> > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > >
> > > If value = 0, MAX_BIT - value = 63
> > > tb_cycle = 0xffffffff_ffffffff,
> > 
> > Actually, tb_cycle will be undefined because you shifted a 32-bit value
> > (1) by more than 31 bits.  s/1/1ULL/
> > 
> Actually, we have been discussing this situation that could not have happened.
> See !pw20_wt branch, this branch is read default wait bit.
> The default wait bit is 50, the time is about 1ms.
> The default wait bit cannot less than 50, means the wait entry time cannot greater than 1ms.
> We have already begun benchmark test, and we got a preliminary results.
> 55, 56, 57bit looks good, but we need more benchmark to get the default bit.

What does the default have to do with it?  The user could have set a
different value, and then read it back.

Plus, how much time corresponds to bit 50 depends on the actual timebase
frequency which could vary.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18 19:21                   ` Scott Wood
@ 2013-10-18 19:24                     ` Bhushan Bharat-R65777
  2013-10-21  3:10                     ` Wang Dongsheng-B40534
  2013-11-04  4:04                     ` Dongsheng Wang
  2 siblings, 0 replies; 34+ messages in thread
From: Bhushan Bharat-R65777 @ 2013-10-18 19:24 UTC (permalink / raw)
  To: Wood Scott-B07421, Wang Dongsheng-B40534; +Cc: linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogU2F0dXJkYXksIE9jdG9iZXIgMTksIDIwMTMgMTI6NTIgQU0NCj4gVG86IFdh
bmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiBDYzogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3OyBXb29kIFNj
b3R0LUIwNzQyMTsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDogUmU6
IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRlIGFu
ZCBhbHRpdmVjDQo+IGlkbGUNCj4gDQo+IE9uIFRodSwgMjAxMy0xMC0xNyBhdCAyMjowMiAtMDUw
MCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiBT
ZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyAyOjQ2IFBNDQo+ID4gPiBUbzogV2FuZyBE
b25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gQ2M6IGxpbnV4cHBjLWRl
dkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93
ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRpdmVjIGlk
bGUNCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn
ZS0tLS0tDQo+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4g
PiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+ID4g
PiBUbzogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+
ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gPiBTdWJqZWN0
OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjANCj4g
PiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4gPiA+
IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIwIEFNDQo+ID4gPiA+ID4gPiA+
IFRvOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiBTdWJq
ZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAN
Cj4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0
DQo+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgODoxNiBB
TQ0KPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQt
QjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3Jn
DQo+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4
eDogYWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMg
aWRsZQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+
ID4gPiA+IEZyb206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+ID4gPiA+ID4gPiA+ID4gU2Vu
dDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4g
VG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+
ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+
ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZv
cg0KPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4g
PiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBTZW50
OiBUdWVzZGF5LCBPY3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
VG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVzaGFuIEJo
YXJhdC1SNjU3Nzc7DQo+ID4gPiA+ID4gPiA+ID4gPiA+IGxpbnV4cHBjLWRldkBsaXN0cy5vemxh
YnMub3JnOyBXYW5nDQo+ID4gPiA+ID4gPiA+ID4gPiBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZA0KPiA+ID4gPiA+ID4g
PiA+ID4gYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nIDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29tPg0K
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBBZGQgYSBzeXMgaW50ZXJm
YWNlIHRvIGVuYWJsZS9kaWFibGUgcHcyMCBzdGF0ZSBvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBh
bHRpdmVjIGlkbGUsIGFuZA0KPiA+ID4gPiA+ID4gPiA+ID4gY29udHJvbCB0aGUNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gd2FpdCBlbnRyeSB0aW1lLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiBFbmFibGUvRGlzYWJsZSBpbnRlcmZhY2U6DQo+ID4gPiA+ID4gPiA+ID4g
PiA+IDAsIGRpc2FibGUuIDEsIGVuYWJsZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gL3N5cy9kZXZp
Y2VzL3N5c3RlbS9jcHUvY3B1WC9wdzIwX3N0YXRlDQo+ID4gPiA+ID4gPiA+ID4gPiA+IC9zeXMv
ZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvYWx0aXZlY19pZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFNldCB3YWl0IHRpbWUgaW50ZXJmYWNlOihOYW5vc2Vjb25k
KQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3MjBf
d2FpdF90aW1lDQo+ID4gPiA+ID4gPiA+ID4gPiA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2Nw
dVgvYWx0aXZlY19pZGxlX3dhaXRfdGltZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBFeGFtcGxlOiBC
YXNlIG9uIFRCZnJlcSBpcyA0MU1IWi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gMX40OChucyk6IFRC
WzYzXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA0OX45Nyhucyk6IFRCWzYyXQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA5OH4xOTUobnMpOiBUQls2MV0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gMTk2fjM5MChu
cyk6IFRCWzYwXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAzOTF+NzgwKG5zKTogVEJbNTldDQo+ID4g
PiA+ID4gPiA+ID4gPiA+IDc4MX4xNTYwKG5zKTogVEJbNThdDQo+ID4gPiA+ID4gPiA+ID4gPiA+
IC4uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQtb2Zm
LWJ5OiBXYW5nIERvbmdzaGVuZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA8ZG9uZ3NoZW5nLndhbmdA
ZnJlZXNjYWxlLmNvbT4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICp2NToNCj4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIGdldF9pZGxlX3RpY2tzX2JpdCBm
dW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gKnY0Og0KPiA+ID4gPiA+ID4gPiA+ID4gPiBNb3ZlIGNvZGUgZnJvbSA4NXh4L2Nv
bW1vbi5jIHRvIGtlcm5lbC9zeXNmcy5jLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ID4gPiBSZW1vdmUgaGFzX3B3MjBfYWx0aXZlY19pZGxlIGZ1bmN0aW9uLg0KPiA+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBDaGFuZ2Ugd2FpdCAiZW50cnlfYml0
IiB0byB3YWl0IHRpbWUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+IGlu
ZGV4DQo+ID4gPiA+ID4gPiA+ID4gPiA+IDI3YTkwYjkuLjEwZDExMjggMTAwNjQ0DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiArKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gQEAgLTg1LDYgKzg1LDI4NCBAQCBfX3NldHVwKCJzbXQtc25vb3plLWRlbGF5PSIs
DQo+ID4gPiA+ID4gPiA+ID4gPiBzZXR1cF9zbXRfc25vb3plX2RlbGF5KTsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdf
RlNMX1NPQw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBNQVhfQklUCQkJCTYzDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgcHcyMF93
dDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgYWx0aXZlY19pZGxlX3d0Ow0KPiA+
ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdW5zaWduZWQg
aW50IGdldF9pZGxlX3RpY2tzX2JpdCh1NjQgbnMpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1
NjQgY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlp
ZiAobnMgPj0gMTAwMDApDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2X3U2NChu
cyArIDUwMCwgMTAwMCkgKg0KPiA+ID4gdGJfdGlja3NfcGVyX3VzZWM7DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCQljeWNsZSA9IGRpdl91NjQobnMg
KiB0Yl90aWNrc19wZXJfdXNlYywgMTAwMCk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gKwlpZiAoIWN5Y2xlKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1
cm4gMDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXJldHVy
biBpbG9nMihjeWNsZSk7IH0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+
ID4gPiArc3RhdGljIHZvaWQgZG9fc2hvd19wd3JtZ3RjcjAodm9pZCAqdmFsKSB7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ICsJdTMyICp2YWx1ZSA9IHZhbDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsgfQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgc3NpemVf
dCBzaG93X3B3MjBfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gPiA+ID4gPiA+ID4g
PiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyDQo+ID4gPiAqYnVmKSB7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc2hvd19w
d3JtZ3RjcjAsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsmdmFsdWUsIDEpOw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdmFsdWUgJj0gUFdSTUdUQ1IwX1BXMjBf
V0FJVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXJldHVy
biBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2YWx1ZSA/IDEgOiAwKTsgfQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBkb19zdG9yZV9wdzIwX3N0
YXRlKHZvaWQgKnZhbCkgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFsdWUgPSB2YWw7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHB3MjBfc3RhdGU7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlwdzIwX3N0YXRlID0gbWZzcHIoU1BSTl9QV1JN
R1RDUjApOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYg
KCp2YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcHcyMF9zdGF0ZSB8PSBQV1JNR1RDUjBf
UFcyMF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCWVsc2UNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gKwkJcHcyMF9zdGF0ZSAmPSB+UFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCW10c3ByKFNQUk5fUFdSTUdUQ1IwLCBwdzIw
X3N0YXRlKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtz
dGF0aWMgc3NpemVfdCBzdG9yZV9wdzIwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgew0KPiA+
ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1bnNp
Z25lZCBpbnQgY3B1ID0gZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiArCWlmIChrc3RydG91MzIoYnVmLCAwLCAmdmFsdWUpKQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4g
PiA+ID4gPiA+ID4gPiArCWlmICh2YWx1ZSA+IDEpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXJl
dHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc3RvcmVfcHcyMF9zdGF0ZSwNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwgMSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gY291bnQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICt9
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6
ZV90IHNob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyDQo+ID4gPiAq
YnVmKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+
ID4gPiArCXU2NCB0Yl9jeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlzNjQgdGltZTsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBj
cHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ICsJaWYgKCFwdzIwX3d0KSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXNtcF9jYWxsX2Z1bmN0
aW9uX3NpbmdsZShjcHUsIGRvX3Nob3dfcHdybWd0Y3IwLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAr
JnZhbHVlLA0KPiA+ID4gPiA+ID4gPiAxKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdmFsdWUg
PSAodmFsdWUgJiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
CQkJCVBXUk1HVENSMF9QVzIwX0VOVF9TSElGVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8IChNQVhfQklUIC0gdmFsdWUpKSAq
IDI7DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gSXMgdmFsdWUgPSAwIGFu
ZCB2YWx1ZSA9IDEgbGVnYWw/IFRoZXNlIHdpbGwgbWFrZQ0KPiA+ID4gPiA+ID4gPiA+ID4gdGJf
Y3ljbGUgPSAwLA0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGlt
ZSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLCB0Yl90aWNrc19wZXJfdXNlYykNCj4gPiA+IC0g
MTsNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBBbmQgdGltZSA9IC0xOw0K
PiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5k
IG9mIHRoZSBmdW5jdGlvbiwgOikNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICJy
ZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB0aW1lID4gMCA/IHRpbWUgOiAwKTsiDQo+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJuIDAgaWYgdmFsdWUgPSAw
LzEsIG15IHF1ZXN0aW9uIHdhcyB0aGF0LCBpcw0KPiA+ID4gPiA+ID4gPiB0aGlzIGNvcnJlY3Qg
YXMgcGVyIHNwZWNpZmljYXRpb24/DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IEFoaCwg
YWxzbyBmb3IgInZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0dXJuIDAsIG5vPw0KPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gSWYgdmFsdWUgPSAwLCBNQVhfQklUIC0gdmFsdWUgPSA2MyB0Yl9j
eWNsZSA9DQo+ID4gPiA+ID4gPiAweGZmZmZmZmZmX2ZmZmZmZmZmLCB0Yl9jeWNsZSAqIDEwMDAg
d2lsbCBvdmVyZmxvdywgYnV0IHRoaXMgc2l0dWF0aW9uDQo+IGlzIG5vdCBwb3NzaWJsZS4NCj4g
PiA+ID4gPiA+IEJlY2F1c2UgaWYgdGhlICJ2YWx1ZSA9IDAiIG1lYW5zIHRoaXMgZmVhdHVyZSB3
aWxsIGJlICJkaXNhYmxlIi4NCj4gPiA+ID4gPiA+IE5vdyBUaGUgZGVmYXVsdCB3YWl0IGJpdCBp
cyA1MChNQVhfQklUIC0gdmFsdWUsIHZhbHVlID0gMTMpLA0KPiA+ID4gPiA+ID4gdGhlIFBXMjAv
QWx0aXZlYyBJZGxlIHdhaXQgZW50cnkgdGltZSBpcyBhYm91dCAxbXMsIHRoaXMgdGltZQ0KPiA+
ID4gPiA+ID4gaXMgdmVyeSBsb25nIGZvciB3YWl0IGlkbGUgdGltZSwgYW5kIGl0J3MgY2Fubm90
IGJlDQo+ID4gPiA+ID4gPiBpbmNyZWFzZWQobWVhbnMgKE1BWF9CSVQNCj4gPiA+ID4gPiA+IC0g
dmFsdWUpDQo+ID4gPiA+ID4gY2Fubm90IGdyZWF0ZXIgdGhhbiA1MCkuDQo+ID4gPiA+ID4NCj4g
PiA+ID4gPiBXaGF0IHlvdSBzYWlkIGlzIG5vdCBvYnZpb3VzIGZyb20gY29kZSBhbmQgc28gYXQg
bGVhc3Qgd3JpdGUgYQ0KPiA+ID4gPiA+IGNvbW1lbnQgdGhhdCB2YWx1ZSB3aWxsIGJlIGFsd2F5
cyA+PSAxMyBvciB2YWx1ZSB3aWxsIG5ldmVyIGJlDQo+ID4gPiA+ID4gbGVzcyB0aGFuIDwgOCBh
bmQgYmVsb3cgY2FsY3VsYXRpb24gd2lsbCBub3Qgb3ZlcmZsb3cuIG1heSBiZQ0KPiA+ID4gPiA+
IGVycm9yIG91dCBpZiB2YWx1ZSBpcyBsZXNzIHRoYW4gOC4NCj4gPiA+ID4gPg0KPiA+ID4gPiBU
aGUgInZhbHVlIiBsZXNzIHRoYW4gMTAsIHRoaXMgd2lsbCBvdmVyZmxvdy4NCj4gPiA+ID4gVGhl
cmUgaXMgbm90IGVycm9yLCBUaGUgY29kZSBJIGtuZXcgaXQgY291bGQgbm90IGJlIGxlc3MgdGhh
biAxMCwNCj4gPiA+ID4gdGhhdCdzIHdoeSBJIHVzZSB0aGUgZm9sbG93aW5nIGNvZGUuIDopDQo+
ID4gPg0KPiA+ID4gSSBhbSBzb3JyeSB0byBwZXJzaXN0IGJ1dCB0aGlzIGlzIG5vdCBhYm91dCB3
aGF0IHlvdSBrbm93LCB0aGlzIGlzDQo+ID4gPiBhYm91dCBob3cgY29kZSBpcyByZWFkIGFuZCBj
b2RlIGRvZXMgbm90IHNheSB3aGF0IHlvdSBrbm93LCBzbyBhZGQgYQ0KPiA+ID4gY29tbWVudCBh
dCBsZWFzdCBhbmQgZXJyb3Igb3V0L3dhcm4gd2hlbiAidmFsdWUiIGlzIGxlc3MgdGhhbiBhIGNl
cnRhaW4NCj4gbnVtYmVyLg0KPiA+ID4NCj4gPiBTb3JyeSBmb3IgdGhlIGxhdGUgdG8gcmVzcG9u
c2UgdGhlIG1haWwuIElmIGl0IGNhdXNlZCBjb25mdXNpb24sIHdlIGNhbiBhZGQgYQ0KPiBjb21t
ZW50Lg0KPiA+DQo+ID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY29tbWVudD8NCj4gPiAvKg0K
PiA+ICAqIElmIHRoZSAidmFsdWUiIGxlc3MgdGhhbiAxMCwgdGhpcyB3aWxsIG92ZXJmbG93Lg0K
PiA+ICAqIEZyb20gYmVuY2htYXJrIHRlc3QsIHRoZSBkZWZhdWx0IHdhaXQgYml0IHdpbGwgbm90
IGJlIHNldCBsZXNzIHRoYW4gMTBiaXQuDQo+ID4gICogQmVjYXVzZSAxMCBiaXQgY29ycmVzcG9u
ZHMgdG8gdGhlIHdhaXQgZW50cnkgdGltZSBpcw0KPiA+IDQzOTM3NTU3MzQwMTk5OTYwOShucyks
DQo+ID4gICogZm9yIHdhaXQtZW50cnktaWRsZSB0aW1lIHRoaXMgdmFsdWUgbG9va3MgdG9vIGxv
bmcsIGFuZCB3ZSBjYW5ub3QNCj4gPiB1c2UgdGhvc2UNCj4gPiAgKiAibG9uZyIgdGltZSBhcyBh
IGRlZmF1bHQgd2FpdC1lbnRyeSB0aW1lLiBTbyBvdmVyZmxvdyBjb3VsZCBub3QNCj4gPiBoYXZl
IGhhcHBlbmVkDQo+ID4gICogYW5kIHdlIHVzZSB0aGlzIGNhbGN1bGF0aW9uIG1ldGhvZCB0byBn
ZXQgd2FpdC1lbnRyeS1pZGxlIHRpbWUuDQo+ID4gICovDQo+IA0KPiBJZiB0aGVyZSdzIHRvIGJl
IGEgbGltaXQgb24gdGhlIHRpbWVzIHdlIGFjY2VwdCwgbWFrZSBpdCBleHBsaWNpdC4NCj4gQ2hl
Y2sgZm9yIGl0IGJlZm9yZSBkb2luZyBhbnkgY29udmVyc2lvbnMsIGFuZCByZXR1cm4gYW4gZXJy
b3IgaWYgdXNlcnNwYWNlDQo+IHRyaWVzIHRvIHNldCBpdC4NCg0KSSBhZ3JlZS4gQW5kIGFjY29y
ZGluZ2x5IGNvbW1lbnQgd2lsbCBjaGFuZ2UgYW5kIGxvY2F0aW9uIG9mIGNvbW1lbnQgaW4gY29k
ZSB3aWxsIGFsc28gY2hhbmdlIDopDQoNCi1CaGFyYXQNCg0KPiANCj4gLVNjb3R0DQo+IA0KDQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18 19:21                   ` Scott Wood
  2013-10-18 19:24                     ` Bhushan Bharat-R65777
@ 2013-10-21  3:10                     ` Wang Dongsheng-B40534
  2013-11-04  4:04                     ` Dongsheng Wang
  2 siblings, 0 replies; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-21  3:10 UTC (permalink / raw)
  To: Wood Scott-B07421; +Cc: linuxppc-dev, Bhushan Bharat-R65777

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogU2F0dXJkYXksIE9jdG9iZXIgMTksIDIwMTMgMzoyMiBBTQ0KPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0DQo+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2Nv
dHQtQjA3NDIxOyBsaW51eHBwYy0NCj4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDog
UmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRl
IGFuZA0KPiBhbHRpdmVjIGlkbGUNCj4gDQo+IE9uIFRodSwgMjAxMy0xMC0xNyBhdCAyMjowMiAt
MDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4g
PiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyAyOjQ2IFBNDQo+ID4gPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gQ2M6IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0g
cG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRpdmVj
IGlkbGUNCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+
ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+
ID4gPiBUbzogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4g
PiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gPiBTdWJq
ZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAN
Cj4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+DQo+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t
LS0NCj4gPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4g
PiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIwIEFNDQo+ID4gPiA+ID4g
PiA+IFRvOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+
ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiBT
dWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3
MjANCj4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQw
NTM0DQo+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgODox
NiBBTQ0KPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2Nv
dHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMu
b3JnDQo+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMv
ODV4eDogYWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2
ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4g
PiA+ID4gPiA+IEZyb206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+ID4gPiA+ID4gPiA+ID4g
U2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+
ID4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4g
PiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4g
PiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2Zz
IGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4g
PiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+
ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBT
ZW50OiBUdWVzZGF5LCBPY3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gVG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVzaGFu
IEJoYXJhdC1SNjU3Nzc7DQo+ID4gPiA+ID4gPiA+ID4gPiA+IGxpbnV4cHBjLWRldkBsaXN0cy5v
emxhYnMub3JnOyBXYW5nDQo+ID4gPiA+ID4gPiA+ID4gPiBEb25nc2hlbmctQjQwNTM0DQo+ID4g
PiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRk
IHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZA0KPiA+ID4gPiA+
ID4gPiA+ID4gYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nIDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29t
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBBZGQgYSBzeXMgaW50
ZXJmYWNlIHRvIGVuYWJsZS9kaWFibGUgcHcyMCBzdGF0ZSBvcg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiBhbHRpdmVjIGlkbGUsIGFuZA0KPiA+ID4gPiA+ID4gPiA+ID4gY29udHJvbCB0aGUNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gd2FpdCBlbnRyeSB0aW1lLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiBFbmFibGUvRGlzYWJsZSBpbnRlcmZhY2U6DQo+ID4gPiA+ID4gPiA+
ID4gPiA+IDAsIGRpc2FibGUuIDEsIGVuYWJsZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gL3N5cy9k
ZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9wdzIwX3N0YXRlDQo+ID4gPiA+ID4gPiA+ID4gPiA+IC9z
eXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvYWx0aXZlY19pZGxlDQo+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFNldCB3YWl0IHRpbWUgaW50ZXJmYWNlOihOYW5vc2Vj
b25kKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3
MjBfd2FpdF90aW1lDQo+ID4gPiA+ID4gPiA+ID4gPiA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1
L2NwdVgvYWx0aXZlY19pZGxlX3dhaXRfdGltZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBFeGFtcGxl
OiBCYXNlIG9uIFRCZnJlcSBpcyA0MU1IWi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gMX40OChucyk6
IFRCWzYzXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA0OX45Nyhucyk6IFRCWzYyXQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA5OH4xOTUobnMpOiBUQls2MV0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gMTk2fjM5
MChucyk6IFRCWzYwXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAzOTF+NzgwKG5zKTogVEJbNTldDQo+
ID4gPiA+ID4gPiA+ID4gPiA+IDc4MX4xNTYwKG5zKTogVEJbNThdDQo+ID4gPiA+ID4gPiA+ID4g
PiA+IC4uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQt
b2ZmLWJ5OiBXYW5nIERvbmdzaGVuZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA8ZG9uZ3NoZW5nLndh
bmdAZnJlZXNjYWxlLmNvbT4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ICp2NToNCj4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIGdldF9pZGxlX3RpY2tzX2Jp
dCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gKnY0Og0KPiA+ID4gPiA+ID4gPiA+ID4gPiBNb3ZlIGNvZGUgZnJvbSA4NXh4
L2NvbW1vbi5jIHRvIGtlcm5lbC9zeXNmcy5jLg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiBSZW1vdmUgaGFzX3B3MjBfYWx0aXZlY19pZGxlIGZ1bmN0aW9uLg0KPiA+
ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBDaGFuZ2Ugd2FpdCAiZW50cnlf
Yml0IiB0byB3YWl0IHRpbWUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+
IGluZGV4DQo+ID4gPiA+ID4gPiA+ID4gPiA+IDI3YTkwYjkuLjEwZDExMjggMTAwNjQ0DQo+ID4g
PiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4g
PiA+ID4gPiA+ID4gPiArKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gQEAgLTg1LDYgKzg1LDI4NCBAQCBfX3NldHVwKCJzbXQtc25vb3plLWRlbGF5
PSIsDQo+ID4gPiA+ID4gPiA+ID4gPiBzZXR1cF9zbXRfc25vb3plX2RlbGF5KTsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNlbmRpZiAvKiBDT05GSUdfUFBDNjQg
Ki8NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyNpZmRlZiBDT05G
SUdfRlNMX1NPQw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBNQVhfQklUCQkJCTYzDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgcHcy
MF93dDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgYWx0aXZlY19pZGxlX3d0Ow0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdW5zaWdu
ZWQgaW50IGdldF9pZGxlX3RpY2tzX2JpdCh1NjQgbnMpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
Kwl1NjQgY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
KwlpZiAobnMgPj0gMTAwMDApDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2X3U2
NChucyArIDUwMCwgMTAwMCkgKg0KPiA+ID4gdGJfdGlja3NfcGVyX3VzZWM7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCQljeWNsZSA9IGRpdl91NjQo
bnMgKiB0Yl90aWNrc19wZXJfdXNlYywNCj4gMTAwMCk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoIWN5Y2xlKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CQlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXJldHVybiBpbG9nMihjeWNsZSk7IH0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiArc3RhdGljIHZvaWQgZG9fc2hvd19wd3JtZ3RjcjAodm9pZCAqdmFsKSB7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyICp2YWx1ZSA9IHZhbDsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1Iw
KTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMg
c3NpemVfdCBzaG93X3B3MjBfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiBjaGFyDQo+ID4g
PiAqYnVmKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiArCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwg
ZG9fc2hvd19wd3JtZ3RjcjAsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsmdmFsdWUsIDEpOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdmFsdWUgJj0gUFdSTUdU
Q1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiArCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2YWx1ZSA/IDEgOiAwKTsgfQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBkb19zdG9y
ZV9wdzIwX3N0YXRlKHZvaWQgKnZhbCkgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFs
dWUgPSB2YWw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHB3MjBfc3RhdGU7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlwdzIwX3N0YXRlID0gbWZzcHIo
U1BSTl9QV1JNR1RDUjApOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJaWYgKCp2YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcHcyMF9zdGF0ZSB8PSBQ
V1JNR1RDUjBfUFcyMF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCWVsc2UNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gKwkJcHcyMF9zdGF0ZSAmPSB+UFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCW10c3ByKFNQUk5fUFdSTUdU
Q1IwLCBwdzIwX3N0YXRlKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ICtzdGF0aWMgc3NpemVfdCBzdG9yZV9wdzIwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRl
diwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0
ciwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu
dCkNCj4gew0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
Kw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChrc3RydG91MzIoYnVmLCAwLCAmdmFsdWUpKQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICh2YWx1ZSA+IDEpDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc3RvcmVfcHcy
MF9zdGF0ZSwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwgMSk7DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gY291bnQ7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
K3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LA0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0K
PiBjaGFyDQo+ID4gPiAqYnVmKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCB0Yl9jeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
KwlzNjQgdGltZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFwdzIwX3d0KSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
CXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsDQo+IGRvX3Nob3dfcHdybWd0Y3IwLA0KPiA+
ID4gPiA+ID4gPiA+ID4gPiArJnZhbHVlLA0KPiA+ID4gPiA+ID4gPiAxKTsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gKwkJdmFsdWUgPSAodmFsdWUgJiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJCQkJCVBXUk1HVENSMF9QVzIwX0VOVF9TSElGVDsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8IChN
QVhfQklUIC0gdmFsdWUpKSAqIDI7DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+
ID4gSXMgdmFsdWUgPSAwIGFuZCB2YWx1ZSA9IDEgbGVnYWw/IFRoZXNlIHdpbGwgbWFrZQ0KPiA+
ID4gPiA+ID4gPiA+ID4gdGJfY3ljbGUgPSAwLA0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gKwkJdGltZSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLA0KPiB0Yl90aWNr
c19wZXJfdXNlYykNCj4gPiA+IC0gMTsNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gPiBBbmQgdGltZSA9IC0xOw0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBQ
bGVhc2UgbG9vayBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgOikNCj4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ICJyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCB0aW1lID4g
MCA/IHRpbWUgOiAwKTsiDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IEkga25vdyB5b3Ug
cmV0dXJuIDAgaWYgdmFsdWUgPSAwLzEsIG15IHF1ZXN0aW9uIHdhcyB0aGF0LCBpcw0KPiA+ID4g
PiA+ID4gPiB0aGlzIGNvcnJlY3QgYXMgcGVyIHNwZWNpZmljYXRpb24/DQo+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+IEFoaCwgYWxzbyBmb3IgInZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0
dXJuIDAsIG5vPw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSWYgdmFsdWUgPSAwLCBNQVhf
QklUIC0gdmFsdWUgPSA2MyB0Yl9jeWNsZSA9DQo+ID4gPiA+ID4gPiAweGZmZmZmZmZmX2ZmZmZm
ZmZmLCB0Yl9jeWNsZSAqIDEwMDAgd2lsbCBvdmVyZmxvdywgYnV0IHRoaXMNCj4gc2l0dWF0aW9u
IGlzIG5vdCBwb3NzaWJsZS4NCj4gPiA+ID4gPiA+IEJlY2F1c2UgaWYgdGhlICJ2YWx1ZSA9IDAi
IG1lYW5zIHRoaXMgZmVhdHVyZSB3aWxsIGJlICJkaXNhYmxlIi4NCj4gPiA+ID4gPiA+IE5vdyBU
aGUgZGVmYXVsdCB3YWl0IGJpdCBpcyA1MChNQVhfQklUIC0gdmFsdWUsIHZhbHVlID0gMTMpLA0K
PiA+ID4gPiA+ID4gdGhlIFBXMjAvQWx0aXZlYyBJZGxlIHdhaXQgZW50cnkgdGltZSBpcyBhYm91
dCAxbXMsIHRoaXMgdGltZQ0KPiA+ID4gPiA+ID4gaXMgdmVyeSBsb25nIGZvciB3YWl0IGlkbGUg
dGltZSwgYW5kIGl0J3MgY2Fubm90IGJlDQo+ID4gPiA+ID4gPiBpbmNyZWFzZWQobWVhbnMgKE1B
WF9CSVQNCj4gPiA+ID4gPiA+IC0gdmFsdWUpDQo+ID4gPiA+ID4gY2Fubm90IGdyZWF0ZXIgdGhh
biA1MCkuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBXaGF0IHlvdSBzYWlkIGlzIG5vdCBvYnZpb3Vz
IGZyb20gY29kZSBhbmQgc28gYXQgbGVhc3Qgd3JpdGUgYQ0KPiA+ID4gPiA+IGNvbW1lbnQgdGhh
dCB2YWx1ZSB3aWxsIGJlIGFsd2F5cyA+PSAxMyBvciB2YWx1ZSB3aWxsIG5ldmVyIGJlDQo+ID4g
PiA+ID4gbGVzcyB0aGFuIDwgOCBhbmQgYmVsb3cgY2FsY3VsYXRpb24gd2lsbCBub3Qgb3ZlcmZs
b3cuIG1heSBiZQ0KPiA+ID4gPiA+IGVycm9yIG91dCBpZiB2YWx1ZSBpcyBsZXNzIHRoYW4gOC4N
Cj4gPiA+ID4gPg0KPiA+ID4gPiBUaGUgInZhbHVlIiBsZXNzIHRoYW4gMTAsIHRoaXMgd2lsbCBv
dmVyZmxvdy4NCj4gPiA+ID4gVGhlcmUgaXMgbm90IGVycm9yLCBUaGUgY29kZSBJIGtuZXcgaXQg
Y291bGQgbm90IGJlIGxlc3MgdGhhbiAxMCwNCj4gPiA+ID4gdGhhdCdzIHdoeSBJIHVzZSB0aGUg
Zm9sbG93aW5nIGNvZGUuIDopDQo+ID4gPg0KPiA+ID4gSSBhbSBzb3JyeSB0byBwZXJzaXN0IGJ1
dCB0aGlzIGlzIG5vdCBhYm91dCB3aGF0IHlvdSBrbm93LCB0aGlzIGlzDQo+ID4gPiBhYm91dCBo
b3cgY29kZSBpcyByZWFkIGFuZCBjb2RlIGRvZXMgbm90IHNheSB3aGF0IHlvdSBrbm93LCBzbyBh
ZGQgYQ0KPiA+ID4gY29tbWVudCBhdCBsZWFzdCBhbmQgZXJyb3Igb3V0L3dhcm4gd2hlbiAidmFs
dWUiIGlzIGxlc3MgdGhhbiBhDQo+IGNlcnRhaW4gbnVtYmVyLg0KPiA+ID4NCj4gPiBTb3JyeSBm
b3IgdGhlIGxhdGUgdG8gcmVzcG9uc2UgdGhlIG1haWwuIElmIGl0IGNhdXNlZCBjb25mdXNpb24s
IHdlIGNhbg0KPiBhZGQgYSBjb21tZW50Lg0KPiA+DQo+ID4gSG93IGFib3V0IHRoZSBmb2xsb3dp
bmcgY29tbWVudD8NCj4gPiAvKg0KPiA+ICAqIElmIHRoZSAidmFsdWUiIGxlc3MgdGhhbiAxMCwg
dGhpcyB3aWxsIG92ZXJmbG93Lg0KPiA+ICAqIEZyb20gYmVuY2htYXJrIHRlc3QsIHRoZSBkZWZh
dWx0IHdhaXQgYml0IHdpbGwgbm90IGJlIHNldCBsZXNzIHRoYW4NCj4gMTBiaXQuDQo+ID4gICog
QmVjYXVzZSAxMCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIHdhaXQgZW50cnkgdGltZSBpcw0KPiA+
IDQzOTM3NTU3MzQwMTk5OTYwOShucyksDQo+ID4gICogZm9yIHdhaXQtZW50cnktaWRsZSB0aW1l
IHRoaXMgdmFsdWUgbG9va3MgdG9vIGxvbmcsIGFuZCB3ZSBjYW5ub3QNCj4gPiB1c2UgdGhvc2UN
Cj4gPiAgKiAibG9uZyIgdGltZSBhcyBhIGRlZmF1bHQgd2FpdC1lbnRyeSB0aW1lLiBTbyBvdmVy
ZmxvdyBjb3VsZCBub3QNCj4gPiBoYXZlIGhhcHBlbmVkDQo+ID4gICogYW5kIHdlIHVzZSB0aGlz
IGNhbGN1bGF0aW9uIG1ldGhvZCB0byBnZXQgd2FpdC1lbnRyeS1pZGxlIHRpbWUuDQo+ID4gICov
DQo+IA0KPiBJZiB0aGVyZSdzIHRvIGJlIGEgbGltaXQgb24gdGhlIHRpbWVzIHdlIGFjY2VwdCwg
bWFrZSBpdCBleHBsaWNpdC4NCj4gQ2hlY2sgZm9yIGl0IGJlZm9yZSBkb2luZyBhbnkgY29udmVy
c2lvbnMsIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYNCj4gdXNlcnNwYWNlIHRyaWVzIHRvIHNldCBp
dC4NCj4gDQpUaGUgYnJhbmNoIG9ubHkgdXNlIHRvIHJlYWQgZGVmYXVsdCB3YWl0LWVudHJ5LXRp
bWUuDQpXZSBoYXZlIG5vIGxpbWl0IHRoZSB1c2VyJ3MgaW5wdXQsIGFuZCB3ZSBjYW4ndCByZXN0
cmljdC4gT25jZSB0aGUgdXNlciBzZXQgdGhlIHdhaXQtZW50cnktdGltZSwNCnRoZSBjb2RlIHdp
bGwgZG8gYW5vdGhlciBicmFuY2guDQoNCj4gLVNjb3R0DQo+IA0KDQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18 19:23               ` Scott Wood
@ 2013-10-21  3:27                 ` Wang Dongsheng-B40534
  2013-11-04 23:47                   ` Scott Wood
  0 siblings, 1 reply; 34+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-10-21  3:27 UTC (permalink / raw)
  To: Wood Scott-B07421; +Cc: linuxppc-dev, Bhushan Bharat-R65777

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogU2F0dXJkYXksIE9jdG9iZXIgMTksIDIwMTMgMzoyMyBBTQ0KPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0DQo+IENjOiBXb29kIFNjb3R0LUIwNzQyMTsgQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3OyBsaW51eHBwYy0NCj4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDog
UmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRl
IGFuZA0KPiBhbHRpdmVjIGlkbGUNCj4gDQo+IE9uIFRodSwgMjAxMy0xMC0xNyBhdCAyMTozNiAt
MDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+IFNl
bnQ6IEZyaWRheSwgT2N0b2JlciAxOCwgMjAxMyAxMjo1MiBBTQ0KPiA+ID4gVG86IFdhbmcgRG9u
Z3NoZW5nLUI0MDUzNA0KPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgV29vZCBTY290
dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiA+ID4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+IFN1
YmplY3Q6IFJlOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcy
MCBzdGF0ZQ0KPiA+ID4gYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4NCj4gPiA+IE9uIFRodSwgMjAx
My0xMC0xNyBhdCAwMDo1MSAtMDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+
ID4gPg0KPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gRnJv
bTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9i
ZXIgMTcsIDIwMTMgMTE6MjAgQU0NCj4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0
OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3ps
YWJzLm9yZw0KPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1
eHg6IGFkZCBzeXNmcyBmb3IgcHcyMA0KPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUN
Cj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQN
Cj4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDg6MTYgQU0NCj4g
PiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxDQo+
ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+
IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3Ig
cHcyMA0KPiA+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3Nh
Z2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+
ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4g
PiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+
ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+
ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZv
ciBwdzIwDQo+ID4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+
ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiAtLS0tLU9y
aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5n
LUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTUsIDIwMTMg
Mjo1MSBQTQ0KPiA+ID4gPiA+ID4gPiA+IFRvOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+
ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxh
YnMub3JnOw0KPiA+ID4gPiA+ID4gPiA+IFdhbmcNCj4gPiA+ID4gPiA+ID4gRG9uZ3NoZW5nLUI0
MDUzNA0KPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4
eDogYWRkIHN5c2ZzIGZvciBwdzIwDQo+ID4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kDQo+ID4gPiA+
ID4gPiA+IGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gK3N0
YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+
ID4gPiA+ID4gPiA+ICsJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXINCj4g
KmJ1Zikgew0KPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ICsJ
dTY0IHRiX2N5Y2xlOw0KPiA+ID4gPiA+ID4gPiA+ICsJczY0IHRpbWU7DQo+ID4gPiA+ID4gPiA+
ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFwdzIwX3d0KSB7DQo+ID4gPiA+
ID4gPiA+ID4gKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc2hvd19wd3JtZ3Rj
cjAsDQo+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwNCj4gPiA+ID4gPiAxKTsNCj4gPiA+ID4gPiA+
ID4gPiArCQl2YWx1ZSA9ICh2YWx1ZSAmIFBXUk1HVENSMF9QVzIwX0VOVCkgPj4NCj4gPiA+ID4g
PiA+ID4gPiArCQkJCQlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQo+ID4gPiA+ID4gPiA+ID4g
Kw0KPiA+ID4gPiA+ID4gPiA+ICsJCXRiX2N5Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSB2YWx1ZSkp
ICogMjsNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gSXMgdmFsdWUgPSAwIGFuZCB2YWx1
ZSA9IDEgbGVnYWw/IFRoZXNlIHdpbGwgbWFrZSB0Yl9jeWNsZSA9DQo+ID4gPiA+ID4gPiA+IDAs
DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gKwkJdGltZSA9IGRpdl91NjQodGJfY3lj
bGUgKiAxMDAwLCB0Yl90aWNrc19wZXJfdXNlYykNCj4gLSAxOw0KPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPiBBbmQgdGltZSA9IC0xOw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gUGxl
YXNlIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIDopDQo+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gInJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHRpbWUgPiAwID8gdGltZSA6
IDApOyINCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJuIDAgaWYgdmFsdWUg
PSAwLzEsIG15IHF1ZXN0aW9uIHdhcyB0aGF0LCBpcw0KPiA+ID4gPiA+IHRoaXMgY29ycmVjdCBh
cyBwZXIgc3BlY2lmaWNhdGlvbj8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFoaCwgYWxzbyBmb3Ig
InZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0dXJuIDAsIG5vPw0KPiA+ID4gPiA+DQo+ID4gPiA+
IElmIHZhbHVlID0gMCwgTUFYX0JJVCAtIHZhbHVlID0gNjMgdGJfY3ljbGUgPSAweGZmZmZmZmZm
X2ZmZmZmZmZmLA0KPiA+ID4NCj4gPiA+IEFjdHVhbGx5LCB0Yl9jeWNsZSB3aWxsIGJlIHVuZGVm
aW5lZCBiZWNhdXNlIHlvdSBzaGlmdGVkIGEgMzItYml0DQo+ID4gPiB2YWx1ZQ0KPiA+ID4gKDEp
IGJ5IG1vcmUgdGhhbiAzMSBiaXRzLiAgcy8xLzFVTEwvDQo+ID4gPg0KPiA+IEFjdHVhbGx5LCB3
ZSBoYXZlIGJlZW4gZGlzY3Vzc2luZyB0aGlzIHNpdHVhdGlvbiB0aGF0IGNvdWxkIG5vdCBoYXZl
DQo+IGhhcHBlbmVkLg0KPiA+IFNlZSAhcHcyMF93dCBicmFuY2gsIHRoaXMgYnJhbmNoIGlzIHJl
YWQgZGVmYXVsdCB3YWl0IGJpdC4NCj4gPiBUaGUgZGVmYXVsdCB3YWl0IGJpdCBpcyA1MCwgdGhl
IHRpbWUgaXMgYWJvdXQgMW1zLg0KPiA+IFRoZSBkZWZhdWx0IHdhaXQgYml0IGNhbm5vdCBsZXNz
IHRoYW4gNTAsIG1lYW5zIHRoZSB3YWl0IGVudHJ5IHRpbWUNCj4gY2Fubm90IGdyZWF0ZXIgdGhh
biAxbXMuDQo+ID4gV2UgaGF2ZSBhbHJlYWR5IGJlZ3VuIGJlbmNobWFyayB0ZXN0LCBhbmQgd2Ug
Z290IGEgcHJlbGltaW5hcnkgcmVzdWx0cy4NCj4gPiA1NSwgNTYsIDU3Yml0IGxvb2tzIGdvb2Qs
IGJ1dCB3ZSBuZWVkIG1vcmUgYmVuY2htYXJrIHRvIGdldCB0aGUgZGVmYXVsdA0KPiBiaXQuDQo+
IA0KPiBXaGF0IGRvZXMgdGhlIGRlZmF1bHQgaGF2ZSB0byBkbyB3aXRoIGl0PyAgVGhlIHVzZXIg
Y291bGQgaGF2ZSBzZXQgYQ0KPiBkaWZmZXJlbnQgdmFsdWUsIGFuZCB0aGVuIHJlYWQgaXQgYmFj
ay4NCj4gDQo+IFBsdXMsIGhvdyBtdWNoIHRpbWUgY29ycmVzcG9uZHMgdG8gYml0IDUwIGRlcGVu
ZHMgb24gdGhlIGFjdHVhbCB0aW1lYmFzZQ0KPiBmcmVxdWVuY3kgd2hpY2ggY291bGQgdmFyeS4N
Cj4gDQoJaWYgKCFwdzIwX3d0KSB7DQoJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGRv
X3Nob3dfcHdybWd0Y3IwLCAmdmFsdWUsIDEpOw0KCQl2YWx1ZSA9ICh2YWx1ZSAmIFBXUk1HVENS
MF9QVzIwX0VOVCkgPj4NCgkJCQkJUFdSTUdUQ1IwX1BXMjBfRU5UX1NISUZUOw0KDQoJCXRiX2N5
Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSB2YWx1ZSkpICogMjsNCgkJdGltZSA9IHRiX2N5Y2xlICog
KDEwMDAgLyB0Yl90aWNrc19wZXJfdXNlYykgLSAxOw0KCX0gZWxzZSB7DQoJCXRpbWUgPSBwdzIw
X3d0Ow0KCX0NCg0KQXMgd2UgaGF2ZSBkaXNjdXNzZWQgYmVmb3JlIHdlIG5lZWQgYSB2YXJpYWJs
ZSB0byBzYXZlIFRvIHNhdmUgdGhlIHVzZXJzIHRvIHNldCB3YWl0LWVudHJ5LXRpbWUgdmFsdWUu
DQoNClNlZSB0aGUgY29kZSwgaWYgdXNlciBoYXZlIHNldCBhIHZhbHVlLCBhbmQgdGhlIHZhbHVl
IHdpbGwgYmUgc2V0IGluIHB3MjBfd3QuIA0KV2hlbiB0aGUgdXNlciByZWFkIGl0IGJhY2ssIHRo
ZSBjb2RlIHdpbGwgZG8gInRpbWUgPSBwdzIwX3d0IiBicmFuY2guDQoNCldoZW4gdGhlIHVzZXIg
bm90IHNldCB0aGUgd2FpdC1lbnRyeS10aW1lIHZhbHVlIGFuZCByZWFkIHRoaXMgc3lzIGludGVy
ZmFjZSwgdGhlIGNvZGUgd2lsbCBkbyB0aGUgZm9sbG93aW5nIGJyYW5jaC4NCgkJc21wX2NhbGxf
ZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9fc2hvd19wd3JtZ3RjcjAsICZ2YWx1ZSwgMSk7DQoJCXZh
bHVlID0gKHZhbHVlICYgUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0KCQkJCQlQV1JNR1RDUjBfUFcy
MF9FTlRfU0hJRlQ7DQoNCgkJdGJfY3ljbGUgPSAoMSA8PCAoTUFYX0JJVCAtIHZhbHVlKSkgKiAy
Ow0KCQl0aW1lID0gdGJfY3ljbGUgKiAoMTAwMCAvIHRiX3RpY2tzX3Blcl91c2VjKSAtIDE7DQoN
Ci1kb25nc2hlbmcNCg0KPiAtU2NvdHQNCj4gDQoNCg==

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-18 19:21                   ` Scott Wood
  2013-10-18 19:24                     ` Bhushan Bharat-R65777
  2013-10-21  3:10                     ` Wang Dongsheng-B40534
@ 2013-11-04  4:04                     ` Dongsheng Wang
  2013-11-04 21:51                       ` Scott Wood
  2 siblings, 1 reply; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-04  4:04 UTC (permalink / raw)
  To: Scott Wood; +Cc: linuxppc-dev, Bharat Bhushan

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0
MDUzNA0KPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMjEsIDIwMTMgMTE6MTEgQU0NCj4gVG86IFdv
b2QgU2NvdHQtQjA3NDIxDQo+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLWRl
dkBsaXN0cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBj
Lzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZSBhbmQNCj4gYWx0aXZlYyBpZGxlDQo+IA0K
PiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBXb29kIFNj
b3R0LUIwNzQyMQ0KPiA+IFNlbnQ6IFNhdHVyZGF5LCBPY3RvYmVyIDE5LCAyMDEzIDM6MjIgQU0N
Cj4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2
NTc3NzsgV29vZCBTY290dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiA+IGRldkBsaXN0cy5vemxhYnMu
b3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiA+IGFsdGl2ZWMgaWRsZQ0KPiA+DQo+ID4gT24gVGh1
LCAyMDEzLTEwLTE3IGF0IDIyOjAyIC0wNTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3JvdGU6
DQo+ID4gPg0KPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9t
OiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIg
MTcsIDIwMTMgMjo0NiBQTQ0KPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29k
IFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcN
Cj4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzIGZvciBwdzIwIHN0YXRlDQo+ID4gPiA+IGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4NCj4g
PiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+
IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+ID4gPiA+
IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiBTdWJq
ZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAN
Cj4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3
DQo+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTE6MjAg
QU0NCj4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0
LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9y
Zw0KPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1
eHg6IGFkZCBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVj
IGlkbGUNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4N
Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4g
PiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiA+ID4gPiA+IFNl
bnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDg6MTYgQU0NCj4gPiA+ID4gPiA+ID4gPiA+
IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4g
PiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBm
b3INCj4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gU2Vu
dDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0
YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9y
aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9u
Z3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9i
ZXIgMTUsIDIwMTMgMjo1MSBQTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBXb29kIFNjb3R0
LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IFdh
bmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZv
cg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kDQo+ID4gPiA+ID4gPiA+ID4g
PiA+IGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmcgPGRvbmdzaGVuZy53YW5nQGZyZWVzY2FsZS5jb20+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBZGQgYSBzeXMg
aW50ZXJmYWNlIHRvIGVuYWJsZS9kaWFibGUgcHcyMCBzdGF0ZSBvcg0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IGFsdGl2ZWMgaWRsZSwgYW5kDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGNvbnRyb2wgdGhl
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gd2FpdCBlbnRyeSB0aW1lLg0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRW5hYmxlL0Rpc2FibGUgaW50ZXJmYWNlOg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IDAsIGRpc2FibGUuIDEsIGVuYWJsZS4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3MjBfc3RhdGUNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2FsdGl2ZWNfaWRs
ZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2V0IHdhaXQg
dGltZSBpbnRlcmZhY2U6KE5hbm9zZWNvbmQpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gL3N5cy9k
ZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9wdzIwX3dhaXRfdGltZQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvYWx0aXZlY19pZGxlX3dhaXRfdGltZQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IEV4YW1wbGU6IEJhc2Ugb24gVEJmcmVxIGlzIDQxTUhaLg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IDF+NDgobnMpOiBUQls2M10NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA0OX45Nyhucyk6IFRCWzYyXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDk4fjE5NShucyk6
IFRCWzYxXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDE5Nn4zOTAobnMpOiBUQls2MF0NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAzOTF+NzgwKG5zKTogVEJbNTldDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gNzgxfjE1NjAobnMpOiBUQls1OF0gLi4uDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBXYW5nIERvbmdzaGVuZw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29tPg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICp2NToNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBDaGFuZ2UgZ2V0X2lkbGVfdGlja3NfYml0IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9u
Lg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKnY0Og0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IE1vdmUgY29kZSBmcm9tIDg1eHgvY29tbW9uLmMgdG8ga2VybmVs
L3N5c2ZzLmMuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBS
ZW1vdmUgaGFzX3B3MjBfYWx0aXZlY19pZGxlIGZ1bmN0aW9uLg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIHdhaXQgImVudHJ5X2JpdCIgdG8gd2Fp
dCB0aW1lLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZGlm
ZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGlu
ZGV4DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMjdhOTBiOS4uMTBkMTEyOCAxMDA2NDQNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBAQCAtODUsNiArODUsMjg0IEBAIF9fc2V0dXAoInNtdC1zbm9vemUt
ZGVsYXk9IiwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXBfc210X3Nub296ZV9kZWxheSk7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2VuZGlmIC8qIENP
TkZJR19QUEM2NCAqLw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gKyNpZmRlZiBDT05GSUdfRlNMX1NPQw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5l
IE1BWF9CSVQJCQkJNjMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gK3N0YXRpYyB1NjQgcHcyMF93dDsgc3RhdGljIHU2NCBhbHRpdmVjX2lkbGVfd3Q7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdW5z
aWduZWQgaW50IGdldF9pZGxlX3RpY2tzX2JpdCh1NjQgbnMpIHsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArCXU2NCBjeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwlpZiAobnMgPj0gMTAwMDApDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJY3lj
bGUgPSBkaXZfdTY0KG5zICsgNTAwLCAxMDAwKSAqDQo+ID4gPiA+IHRiX3RpY2tzX3Blcl91c2Vj
Ow0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
CWN5Y2xlID0gZGl2X3U2NChucyAqIHRiX3RpY2tzX3Blcl91c2VjLA0KPiA+IDEwMDApOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghY3ljbGUp
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDA7DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIGlsb2cyKGN5Y2xlKTsgfQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQg
ZG9fc2hvd19wd3JtZ3RjcjAodm9pZCAqdmFsKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1
MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsgfQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNzaXplX3Qgc2hvd19w
dzIwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJ
CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiA+IGNoYXINCj4gPiA+ID4gKmJ1Zikg
ew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
Kw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwg
ZG9fc2hvd19wd3JtZ3RjcjAsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwgMSk7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdmFsdWUgJj0g
UFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdmFsdWUgPyAxIDogMCk7
IH0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRp
YyB2b2lkIGRvX3N0b3JlX3B3MjBfc3RhdGUodm9pZCAqdmFsKSB7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHB3
MjBfc3RhdGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICsJcHcyMF9zdGF0ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoKnZhbHVlKQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJCXB3MjBfc3RhdGUgfD0gUFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArCWVsc2UNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlwdzIwX3N0YXRl
ICY9IH5QV1JNR1RDUjBfUFcyMF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArCW10c3ByKFNQUk5fUFdSTUdUQ1IwLCBwdzIwX3N0YXRlKTsgfQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNz
aXplX3Qgc3RvcmVfcHcyMF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiA+IHsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChrc3RydG91MzIoYnVmLCAwLCAmdmFsdWUpKQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICh2YWx1ZSA+IDEpDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZG9f
c3RvcmVfcHcyMF9zdGF0ZSwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArJnZhbHVlLCAxKTsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gY291
bnQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUo
c3RydWN0IGRldmljZQ0KPiAqZGV2LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCQkJc3RydWN0
IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ID4gY2hhcg0KPiA+ID4gPiAqYnVmKSB7DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgdmFsdWU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1
NjQgdGJfY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlzNjQgdGltZTsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgY3B1
ID0gZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gKwlpZiAoIXB3MjBfd3QpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlzbXBfY2FsbF9m
dW5jdGlvbl9zaW5nbGUoY3B1LA0KPiA+IGRvX3Nob3dfcHdybWd0Y3IwLA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsmdmFsdWUsDQo+ID4gPiA+ID4gPiA+ID4gMSk7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwkJdmFsdWUgPSAodmFsdWUgJiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gKwkJCQkJUFdSTUdUQ1IwX1BXMjBfRU5UX1NISUZUOw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8
IChNQVhfQklUIC0gdmFsdWUpKSAqIDI7DQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
PiA+ID4gPiA+IElzIHZhbHVlID0gMCBhbmQgdmFsdWUgPSAxIGxlZ2FsPyBUaGVzZSB3aWxsIG1h
a2UNCj4gPiA+ID4gPiA+ID4gPiA+ID4gdGJfY3ljbGUgPSAwLA0KPiA+ID4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXRpbWUgPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAw
MCwNCj4gPiB0Yl90aWNrc19wZXJfdXNlYykNCj4gPiA+ID4gLSAxOw0KPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBBbmQgdGltZSA9IC0xOw0KPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gUGxlYXNlIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGUgZnVu
Y3Rpb24sIDopDQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gInJldHVybiBz
cHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHRpbWUgPiAwID8gdGltZSA6IDApOyINCj4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJuIDAgaWYgdmFsdWUgPSAwLzEs
IG15IHF1ZXN0aW9uIHdhcyB0aGF0LA0KPiA+ID4gPiA+ID4gPiA+IGlzIHRoaXMgY29ycmVjdCBh
cyBwZXIgc3BlY2lmaWNhdGlvbj8NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEFo
aCwgYWxzbyBmb3IgInZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0dXJuIDAsIG5vPw0KPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IElmIHZhbHVlID0gMCwgTUFYX0JJVCAtIHZhbHVlID0g
NjMgdGJfY3ljbGUgPQ0KPiA+ID4gPiA+ID4gPiAweGZmZmZmZmZmX2ZmZmZmZmZmLCB0Yl9jeWNs
ZSAqIDEwMDAgd2lsbCBvdmVyZmxvdywgYnV0IHRoaXMNCj4gPiBzaXR1YXRpb24gaXMgbm90IHBv
c3NpYmxlLg0KPiA+ID4gPiA+ID4gPiBCZWNhdXNlIGlmIHRoZSAidmFsdWUgPSAwIiBtZWFucyB0
aGlzIGZlYXR1cmUgd2lsbCBiZQ0KPiAiZGlzYWJsZSIuDQo+ID4gPiA+ID4gPiA+IE5vdyBUaGUg
ZGVmYXVsdCB3YWl0IGJpdCBpcyA1MChNQVhfQklUIC0gdmFsdWUsIHZhbHVlID0gMTMpLA0KPiA+
ID4gPiA+ID4gPiB0aGUgUFcyMC9BbHRpdmVjIElkbGUgd2FpdCBlbnRyeSB0aW1lIGlzIGFib3V0
IDFtcywgdGhpcw0KPiA+ID4gPiA+ID4gPiB0aW1lIGlzIHZlcnkgbG9uZyBmb3Igd2FpdCBpZGxl
IHRpbWUsIGFuZCBpdCdzIGNhbm5vdCBiZQ0KPiA+ID4gPiA+ID4gPiBpbmNyZWFzZWQobWVhbnMg
KE1BWF9CSVQNCj4gPiA+ID4gPiA+ID4gLSB2YWx1ZSkNCj4gPiA+ID4gPiA+IGNhbm5vdCBncmVh
dGVyIHRoYW4gNTApLg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFdoYXQgeW91IHNhaWQgaXMg
bm90IG9idmlvdXMgZnJvbSBjb2RlIGFuZCBzbyBhdCBsZWFzdCB3cml0ZSBhDQo+ID4gPiA+ID4g
PiBjb21tZW50IHRoYXQgdmFsdWUgd2lsbCBiZSBhbHdheXMgPj0gMTMgb3IgdmFsdWUgd2lsbCBu
ZXZlciBiZQ0KPiA+ID4gPiA+ID4gbGVzcyB0aGFuIDwgOCBhbmQgYmVsb3cgY2FsY3VsYXRpb24g
d2lsbCBub3Qgb3ZlcmZsb3cuIG1heSBiZQ0KPiA+ID4gPiA+ID4gZXJyb3Igb3V0IGlmIHZhbHVl
IGlzIGxlc3MgdGhhbiA4Lg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiBUaGUgInZhbHVlIiBsZXNz
IHRoYW4gMTAsIHRoaXMgd2lsbCBvdmVyZmxvdy4NCj4gPiA+ID4gPiBUaGVyZSBpcyBub3QgZXJy
b3IsIFRoZSBjb2RlIEkga25ldyBpdCBjb3VsZCBub3QgYmUgbGVzcyB0aGFuDQo+ID4gPiA+ID4g
MTAsIHRoYXQncyB3aHkgSSB1c2UgdGhlIGZvbGxvd2luZyBjb2RlLiA6KQ0KPiA+ID4gPg0KPiA+
ID4gPiBJIGFtIHNvcnJ5IHRvIHBlcnNpc3QgYnV0IHRoaXMgaXMgbm90IGFib3V0IHdoYXQgeW91
IGtub3csIHRoaXMgaXMNCj4gPiA+ID4gYWJvdXQgaG93IGNvZGUgaXMgcmVhZCBhbmQgY29kZSBk
b2VzIG5vdCBzYXkgd2hhdCB5b3Uga25vdywgc28gYWRkDQo+ID4gPiA+IGEgY29tbWVudCBhdCBs
ZWFzdCBhbmQgZXJyb3Igb3V0L3dhcm4gd2hlbiAidmFsdWUiIGlzIGxlc3MgdGhhbiBhDQo+ID4g
Y2VydGFpbiBudW1iZXIuDQo+ID4gPiA+DQo+ID4gPiBTb3JyeSBmb3IgdGhlIGxhdGUgdG8gcmVz
cG9uc2UgdGhlIG1haWwuIElmIGl0IGNhdXNlZCBjb25mdXNpb24sIHdlDQo+ID4gPiBjYW4NCj4g
PiBhZGQgYSBjb21tZW50Lg0KPiA+ID4NCj4gPiA+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNv
bW1lbnQ/DQo+ID4gPiAvKg0KPiA+ID4gICogSWYgdGhlICJ2YWx1ZSIgbGVzcyB0aGFuIDEwLCB0
aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4gPiAgKiBGcm9tIGJlbmNobWFyayB0ZXN0LCB0aGUgZGVm
YXVsdCB3YWl0IGJpdCB3aWxsIG5vdCBiZSBzZXQgbGVzcw0KPiA+ID4gdGhhbg0KPiA+IDEwYml0
Lg0KPiA+ID4gICogQmVjYXVzZSAxMCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIHdhaXQgZW50cnkg
dGltZSBpcw0KPiA+ID4gNDM5Mzc1NTczNDAxOTk5NjA5KG5zKSwNCj4gPiA+ICAqIGZvciB3YWl0
LWVudHJ5LWlkbGUgdGltZSB0aGlzIHZhbHVlIGxvb2tzIHRvbyBsb25nLCBhbmQgd2UgY2Fubm90
DQo+ID4gPiB1c2UgdGhvc2UNCj4gPiA+ICAqICJsb25nIiB0aW1lIGFzIGEgZGVmYXVsdCB3YWl0
LWVudHJ5IHRpbWUuIFNvIG92ZXJmbG93IGNvdWxkIG5vdA0KPiA+ID4gaGF2ZSBoYXBwZW5lZA0K
PiA+ID4gICogYW5kIHdlIHVzZSB0aGlzIGNhbGN1bGF0aW9uIG1ldGhvZCB0byBnZXQgd2FpdC1l
bnRyeS1pZGxlIHRpbWUuDQo+ID4gPiAgKi8NCj4gPg0KPiA+IElmIHRoZXJlJ3MgdG8gYmUgYSBs
aW1pdCBvbiB0aGUgdGltZXMgd2UgYWNjZXB0LCBtYWtlIGl0IGV4cGxpY2l0Lg0KPiA+IENoZWNr
IGZvciBpdCBiZWZvcmUgZG9pbmcgYW55IGNvbnZlcnNpb25zLCBhbmQgcmV0dXJuIGFuIGVycm9y
IGlmDQo+ID4gdXNlcnNwYWNlIHRyaWVzIHRvIHNldCBpdC4NCj4gPg0KPiBUaGUgYnJhbmNoIG9u
bHkgdXNlIHRvIHJlYWQgZGVmYXVsdCB3YWl0LWVudHJ5LXRpbWUuDQo+IFdlIGhhdmUgbm8gbGlt
aXQgdGhlIHVzZXIncyBpbnB1dCwgYW5kIHdlIGNhbid0IHJlc3RyaWN0LiBPbmNlIHRoZSB1c2Vy
DQo+IHNldCB0aGUgd2FpdC1lbnRyeS10aW1lLCB0aGUgY29kZSB3aWxsIGRvIGFub3RoZXIgYnJh
bmNoLg0KPiANCg0KSGkgc2NvdHQsDQpEbyB5b3UgaGF2ZSBhbnkgY29tbWVudHMgYWJvdXQgdGhp
cyBwYXRjaD8NCkkgd2lsbCBhZGQgdGhlIGNvbW1lbnQgYW5kIHNlbmQgdGhpcyBwYXRjaCBhZ2Fp
bi4NCg0KLWRvbmdzaGVuZw0KDQo+ID4NCj4gPg0KDQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-04  4:04                     ` Dongsheng Wang
@ 2013-11-04 21:51                       ` Scott Wood
  2013-11-05  3:09                         ` Dongsheng Wang
  0 siblings, 1 reply; 34+ messages in thread
From: Scott Wood @ 2013-11-04 21:51 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Sun, 2013-11-03 at 22:04 -0600, Wang Dongsheng-B40534 wrote:
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Monday, October 21, 2013 11:11 AM
> > To: Wood Scott-B07421
> > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Wood Scott-B07421
> > > Sent: Saturday, October 19, 2013 3:22 AM
> > > To: Wang Dongsheng-B40534
> > > Cc: Bhushan Bharat-R65777; Wood Scott-B07421; linuxppc-
> > > dev@lists.ozlabs.org
> > > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > altivec idle
> > >
> > > On Thu, 2013-10-17 at 22:02 -0500, Wang Dongsheng-B40534 wrote:
> > > >
> > > > > -----Original Message-----
> > > > > From: Bhushan Bharat-R65777
> > > > > Sent: Thursday, October 17, 2013 2:46 PM
> > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > > and altivec idle
> > > > >
> > > > >
> > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > Sent: Thursday, October 17, 2013 11:22 AM
> > > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > state and altivec idle
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for
> > > > > > > > > pw20 state and altivec idle
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > > -----Original Message-----
> > > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for
> > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs
> > > > > > > > > > > for
> > > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > > > > > To: Wood Scott-B07421
> > > > > > > > > > > > Cc: Bhushan Bharat-R65777;
> > > > > > > > > > > > linuxppc-dev@lists.ozlabs.org; Wang
> > > > > > > > > > > Dongsheng-B40534
> > > > > > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for
> > > > > > > > > > > > pw20 state and
> > > > > > > > > > > altivec idle
> > > > > > > > > > > >
> > > > > > > > > > > > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> > > > > > > > > > > >
> > > > > > > > > > > > Add a sys interface to enable/diable pw20 state or
> > > > > > > > > > > > altivec idle, and
> > > > > > > > > > > control the
> > > > > > > > > > > > wait entry time.
> > > > > > > > > > > >
> > > > > > > > > > > > Enable/Disable interface:
> > > > > > > > > > > > 0, disable. 1, enable.
> > > > > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > > > > > > > >
> > > > > > > > > > > > Set wait time interface:(Nanosecond)
> > > > > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wait_time
> > > > > > > > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > > > > > > > 1~48(ns): TB[63]
> > > > > > > > > > > > 49~97(ns): TB[62]
> > > > > > > > > > > > 98~195(ns): TB[61]
> > > > > > > > > > > > 196~390(ns): TB[60]
> > > > > > > > > > > > 391~780(ns): TB[59]
> > > > > > > > > > > > 781~1560(ns): TB[58] ...
> > > > > > > > > > > >
> > > > > > > > > > > > Signed-off-by: Wang Dongsheng
> > > > > > > > > > > > <dongsheng.wang@freescale.com>
> > > > > > > > > > > > ---
> > > > > > > > > > > > *v5:
> > > > > > > > > > > > Change get_idle_ticks_bit function implementation.
> > > > > > > > > > > >
> > > > > > > > > > > > *v4:
> > > > > > > > > > > > Move code from 85xx/common.c to kernel/sysfs.c.
> > > > > > > > > > > >
> > > > > > > > > > > > Remove has_pw20_altivec_idle function.
> > > > > > > > > > > >
> > > > > > > > > > > > Change wait "entry_bit" to wait time.
> > > > > > > > > > > >
> > > > > > > > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > index
> > > > > > > > > > > > 27a90b9..10d1128 100644
> > > > > > > > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > @@ -85,6 +85,284 @@ __setup("smt-snooze-delay=",
> > > > > > > > > > > setup_smt_snooze_delay);
> > > > > > > > > > > >
> > > > > > > > > > > >  #endif /* CONFIG_PPC64 */
> > > > > > > > > > > >
> > > > > > > > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > > > > > > > +#define MAX_BIT				63
> > > > > > > > > > > > +
> > > > > > > > > > > > +static u64 pw20_wt; static u64 altivec_idle_wt;
> > > > > > > > > > > > +
> > > > > > > > > > > > +static unsigned int get_idle_ticks_bit(u64 ns) {
> > > > > > > > > > > > +	u64 cycle;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (ns >= 10000)
> > > > > > > > > > > > +		cycle = div_u64(ns + 500, 1000) *
> > > > > tb_ticks_per_usec;
> > > > > > > > > > > > +	else
> > > > > > > > > > > > +		cycle = div_u64(ns * tb_ticks_per_usec,
> > > 1000);
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (!cycle)
> > > > > > > > > > > > +		return 0;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	return ilog2(cycle); }
> > > > > > > > > > > > +
> > > > > > > > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > > > > > > > +	u32 *value = val;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	*value = mfspr(SPRN_PWRMGTCR0); }
> > > > > > > > > > > > +
> > > > > > > > > > > > +static ssize_t show_pw20_state(struct device *dev,
> > > > > > > > > > > > +				struct device_attribute *attr,
> > > char
> > > > > *buf) {
> > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	smp_call_function_single(cpu, do_show_pwrmgtcr0,
> > > > > > > > > > > > +&value, 1);
> > > > > > > > > > > > +
> > > > > > > > > > > > +	value &= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	return sprintf(buf, "%u\n", value ? 1 : 0); }
> > > > > > > > > > > > +
> > > > > > > > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > > > > > > > +	u32 *value = val;
> > > > > > > > > > > > +	u32 pw20_state;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	pw20_state = mfspr(SPRN_PWRMGTCR0);
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (*value)
> > > > > > > > > > > > +		pw20_state |= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > +	else
> > > > > > > > > > > > +		pw20_state &= ~PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > > > > > > > +
> > > > > > > > > > > > +static ssize_t store_pw20_state(struct device *dev,
> > > > > > > > > > > > +				struct device_attribute *attr,
> > > > > > > > > > > > +				const char *buf, size_t count)
> > > {
> > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > > > > > > > +		return -EINVAL;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (value > 1)
> > > > > > > > > > > > +		return -EINVAL;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	smp_call_function_single(cpu, do_store_pw20_state,
> > > > > > > > > > > > +&value, 1);
> > > > > > > > > > > > +
> > > > > > > > > > > > +	return count;
> > > > > > > > > > > > +}
> > > > > > > > > > > > +
> > > > > > > > > > > > +static ssize_t show_pw20_wait_time(struct device
> > *dev,
> > > > > > > > > > > > +				struct device_attribute *attr,
> > > char
> > > > > *buf) {
> > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > +	u64 tb_cycle;
> > > > > > > > > > > > +	s64 time;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > +
> > > > > > > > > > > > +	if (!pw20_wt) {
> > > > > > > > > > > > +		smp_call_function_single(cpu,
> > > do_show_pwrmgtcr0,
> > > > > > > > > > > > +&value,
> > > > > > > > > 1);
> > > > > > > > > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > > > > > +
> > > > > > > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > > > > > > > > >
> > > > > > > > > > > Is value = 0 and value = 1 legal? These will make
> > > > > > > > > > > tb_cycle = 0,
> > > > > > > > > > >
> > > > > > > > > > > > +		time = div_u64(tb_cycle * 1000,
> > > tb_ticks_per_usec)
> > > > > - 1;
> > > > > > > > > > >
> > > > > > > > > > > And time = -1;
> > > > > > > > > > >
> > > > > > > > > > Please look at the end of the function, :)
> > > > > > > > > >
> > > > > > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > > > > > > >
> > > > > > > > > I know you return 0 if value = 0/1, my question was that,
> > > > > > > > > is this correct as per specification?
> > > > > > > > >
> > > > > > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > > > > > >
> > > > > > > > If value = 0, MAX_BIT - value = 63 tb_cycle =
> > > > > > > > 0xffffffff_ffffffff, tb_cycle * 1000 will overflow, but this
> > > situation is not possible.
> > > > > > > > Because if the "value = 0" means this feature will be
> > "disable".
> > > > > > > > Now The default wait bit is 50(MAX_BIT - value, value = 13),
> > > > > > > > the PW20/Altivec Idle wait entry time is about 1ms, this
> > > > > > > > time is very long for wait idle time, and it's cannot be
> > > > > > > > increased(means (MAX_BIT
> > > > > > > > - value)
> > > > > > > cannot greater than 50).
> > > > > > >
> > > > > > > What you said is not obvious from code and so at least write a
> > > > > > > comment that value will be always >= 13 or value will never be
> > > > > > > less than < 8 and below calculation will not overflow. may be
> > > > > > > error out if value is less than 8.
> > > > > > >
> > > > > > The "value" less than 10, this will overflow.
> > > > > > There is not error, The code I knew it could not be less than
> > > > > > 10, that's why I use the following code. :)
> > > > >
> > > > > I am sorry to persist but this is not about what you know, this is
> > > > > about how code is read and code does not say what you know, so add
> > > > > a comment at least and error out/warn when "value" is less than a
> > > certain number.
> > > > >
> > > > Sorry for the late to response the mail. If it caused confusion, we
> > > > can
> > > add a comment.
> > > >
> > > > How about the following comment?
> > > > /*
> > > >  * If the "value" less than 10, this will overflow.
> > > >  * From benchmark test, the default wait bit will not be set less
> > > > than
> > > 10bit.
> > > >  * Because 10 bit corresponds to the wait entry time is
> > > > 439375573401999609(ns),
> > > >  * for wait-entry-idle time this value looks too long, and we cannot
> > > > use those
> > > >  * "long" time as a default wait-entry time. So overflow could not
> > > > have happened
> > > >  * and we use this calculation method to get wait-entry-idle time.
> > > >  */
> > >
> > > If there's to be a limit on the times we accept, make it explicit.
> > > Check for it before doing any conversions, and return an error if
> > > userspace tries to set it.
> > >
> > The branch only use to read default wait-entry-time.
> > We have no limit the user's input, and we can't restrict. Once the user
> > set the wait-entry-time, the code will do another branch.
> > 
> 
> Hi scott,
> Do you have any comments about this patch?
> I will add the comment and send this patch again.

What do you mean by "and we can't restrict"?  Why not?

Why is it only used to read the default, and not the current value?

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-10-21  3:27                 ` Wang Dongsheng-B40534
@ 2013-11-04 23:47                   ` Scott Wood
  2013-11-05  2:11                     ` Dongsheng Wang
  0 siblings, 1 reply; 34+ messages in thread
From: Scott Wood @ 2013-11-04 23:47 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Sun, 2013-10-20 at 22:27 -0500, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Saturday, October 19, 2013 3:23 AM
> > To: Wang Dongsheng-B40534
> > Cc: Wood Scott-B07421; Bhushan Bharat-R65777; linuxppc-
> > dev@lists.ozlabs.org
> > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > On Thu, 2013-10-17 at 21:36 -0500, Wang Dongsheng-B40534 wrote:
> > >
> > > > -----Original Message-----
> > > > From: Wood Scott-B07421
> > > > Sent: Friday, October 18, 2013 12:52 AM
> > > > To: Wang Dongsheng-B40534
> > > > Cc: Bhushan Bharat-R65777; Wood Scott-B07421; linuxppc-
> > > > dev@lists.ozlabs.org
> > > > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > > On Thu, 2013-10-17 at 00:51 -0500, Wang Dongsheng-B40534 wrote:
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Bhushan Bharat-R65777
> > > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Wang Dongsheng-B40534
> > > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and altivec idle
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > state and altivec idle
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > > To: Wood Scott-B07421
> > > > > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org;
> > > > > > > > > Wang
> > > > > > > > Dongsheng-B40534
> > > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > > > state and
> > > > > > > > altivec idle
> > > > > > > > >
> > > > > > > > > +static ssize_t show_pw20_wait_time(struct device *dev,
> > > > > > > > > +				struct device_attribute *attr, char
> > *buf) {
> > > > > > > > > +	u32 value;
> > > > > > > > > +	u64 tb_cycle;
> > > > > > > > > +	s64 time;
> > > > > > > > > +
> > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > +
> > > > > > > > > +	if (!pw20_wt) {
> > > > > > > > > +		smp_call_function_single(cpu, do_show_pwrmgtcr0,
> > > > > > > > > +&value,
> > > > > > 1);
> > > > > > > > > +		value = (value & PWRMGTCR0_PW20_ENT) >>
> > > > > > > > > +					PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > > +
> > > > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> > > > > > > >
> > > > > > > > Is value = 0 and value = 1 legal? These will make tb_cycle =
> > > > > > > > 0,
> > > > > > > >
> > > > > > > > > +		time = div_u64(tb_cycle * 1000, tb_ticks_per_usec)
> > - 1;
> > > > > > > >
> > > > > > > > And time = -1;
> > > > > > > >
> > > > > > > Please look at the end of the function, :)
> > > > > > >
> > > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time : 0);"
> > > > > >
> > > > > > I know you return 0 if value = 0/1, my question was that, is
> > > > > > this correct as per specification?
> > > > > >
> > > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > > >
> > > > > If value = 0, MAX_BIT - value = 63 tb_cycle = 0xffffffff_ffffffff,
> > > >
> > > > Actually, tb_cycle will be undefined because you shifted a 32-bit
> > > > value
> > > > (1) by more than 31 bits.  s/1/1ULL/
> > > >
> > > Actually, we have been discussing this situation that could not have
> > happened.
> > > See !pw20_wt branch, this branch is read default wait bit.
> > > The default wait bit is 50, the time is about 1ms.
> > > The default wait bit cannot less than 50, means the wait entry time
> > cannot greater than 1ms.
> > > We have already begun benchmark test, and we got a preliminary results.
> > > 55, 56, 57bit looks good, but we need more benchmark to get the default
> > bit.
> > 
> > What does the default have to do with it?  The user could have set a
> > different value, and then read it back.
> > 
> > Plus, how much time corresponds to bit 50 depends on the actual timebase
> > frequency which could vary.
> > 
> 	if (!pw20_wt) {
> 		smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> 		value = (value & PWRMGTCR0_PW20_ENT) >>
> 					PWRMGTCR0_PW20_ENT_SHIFT;
> 
> 		tb_cycle = (1 << (MAX_BIT - value)) * 2;
> 		time = tb_cycle * (1000 / tb_ticks_per_usec) - 1;
> 	} else {
> 		time = pw20_wt;
> 	}
> 
> As we have discussed before we need a variable to save To save the users to set wait-entry-time value.
> 
> See the code, if user have set a value, and the value will be set in pw20_wt. 
> When the user read it back, the code will do "time = pw20_wt" branch.
> 
> When the user not set the wait-entry-time value and read this sys interface, the code will do the following branch.

Oh, so it's not that you "need" this, you already have it.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-04 23:47                   ` Scott Wood
@ 2013-11-05  2:11                     ` Dongsheng Wang
  0 siblings, 0 replies; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-05  2:11 UTC (permalink / raw)
  To: Scott Wood; +Cc: linuxppc-dev, Bharat Bhushan

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVHVlc2RheSwgTm92ZW1iZXIgMDUsIDIwMTMgNzo0OCBBTQ0KPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0DQo+IENjOiBXb29kIFNjb3R0LUIwNzQyMTsgQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3OyBsaW51eHBwYy0NCj4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDog
UmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRl
IGFuZA0KPiBhbHRpdmVjIGlkbGUNCj4gDQo+IE9uIFN1biwgMjAxMy0xMC0yMCBhdCAyMjoyNyAt
MDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+IFNl
bnQ6IFNhdHVyZGF5LCBPY3RvYmVyIDE5LCAyMDEzIDM6MjMgQU0NCj4gPiA+IFRvOiBXYW5nIERv
bmdzaGVuZy1CNDA1MzQNCj4gPiA+IENjOiBXb29kIFNjb3R0LUIwNzQyMTsgQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3OyBsaW51eHBwYy0NCj4gPiA+IGRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiBT
dWJqZWN0OiBSZTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3
MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+DQo+ID4gPiBPbiBUaHUsIDIw
MTMtMTAtMTcgYXQgMjE6MzYgLTA1MDAsIFdhbmcgRG9uZ3NoZW5nLUI0MDUzNCB3cm90ZToNCj4g
PiA+ID4NCj4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+IEZy
b206IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gU2VudDogRnJpZGF5LCBPY3RvYmVyIDE4
LCAyMDEzIDEyOjUyIEFNDQo+ID4gPiA+ID4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+
ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxOyBsaW51
eHBwYy0NCj4gPiA+ID4gPiBkZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+IFN1YmplY3Q6
IFJlOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMA0KPiA+
ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFRo
dSwgMjAxMy0xMC0xNyBhdCAwMDo1MSAtMDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3Rl
Og0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4gPiA+
IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIwIEFNDQo+ID4gPiA+ID4gPiA+
IFRvOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiBTdWJq
ZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAN
Cj4gPiA+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0
DQo+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgODoxNiBB
TQ0KPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQt
QjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3Jn
DQo+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4
eDogYWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMg
aWRsZQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+
ID4gPiA+IEZyb206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+ID4gPiA+ID4gPiA+ID4gU2Vu
dDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4g
VG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+
ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+
ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZv
cg0KPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4g
PiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBTZW50
OiBUdWVzZGF5LCBPY3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
VG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVzaGFuIEJo
YXJhdC1SNjU3Nzc7DQo+ID4gPiA+ID4gPiA+ID4gPiA+IGxpbnV4cHBjLWRldkBsaXN0cy5vemxh
YnMub3JnOyBXYW5nDQo+ID4gPiA+ID4gPiA+ID4gPiBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5
c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZA0KPiA+ID4gPiA+ID4g
PiA+ID4gYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICtzdGF0aWMgc3NpemVfdCBzaG93X3B3MjBfd2FpdF90aW1lKHN0cnVjdCBkZXZpY2UgKmRl
diwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0
ciwNCj4gY2hhcg0KPiA+ID4gKmJ1Zikgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1
ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1NjQgdGJfY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJczY0IHRpbWU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghcHcyMF93dCkgew0KPiA+ID4gPiA+ID4gPiA+ID4g
PiArCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LA0KPiBkb19zaG93X3B3cm1ndGNyMCwN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwNCj4gPiA+ID4gPiA+ID4gMSk7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ICsJCXZhbHVlID0gKHZhbHVlICYgUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCQlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGJfY3ljbGUgPSAoMSA8
PCAoTUFYX0JJVCAtIHZhbHVlKSkgKiAyOw0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+IElzIHZhbHVlID0gMCBhbmQgdmFsdWUgPSAxIGxlZ2FsPyBUaGVzZSB3aWxsIG1ha2UN
Cj4gPiA+ID4gPiA+ID4gPiA+IHRiX2N5Y2xlID0gMCwNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJCXRpbWUgPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAwMCwNCj4gdGJf
dGlja3NfcGVyX3VzZWMpDQo+ID4gPiAtIDE7DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ID4gQW5kIHRpbWUgPSAtMTsNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gUGxlYXNlIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIDopDQo+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiAicmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgdGlt
ZSA+IDAgPyB0aW1lIDogMCk7Ig0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBJIGtub3cg
eW91IHJldHVybiAwIGlmIHZhbHVlID0gMC8xLCBteSBxdWVzdGlvbiB3YXMgdGhhdCwgaXMNCj4g
PiA+ID4gPiA+ID4gdGhpcyBjb3JyZWN0IGFzIHBlciBzcGVjaWZpY2F0aW9uPw0KPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiBBaGgsIGFsc28gZm9yICJ2YWx1ZSIgdXB0byA3IHlvdSB3aWxs
IHJldHVybiAwLCBubz8NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IElmIHZhbHVlID0gMCwg
TUFYX0JJVCAtIHZhbHVlID0gNjMgdGJfY3ljbGUgPQ0KPiA+ID4gPiA+ID4gMHhmZmZmZmZmZl9m
ZmZmZmZmZiwNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFjdHVhbGx5LCB0Yl9jeWNsZSB3aWxsIGJl
IHVuZGVmaW5lZCBiZWNhdXNlIHlvdSBzaGlmdGVkIGENCj4gPiA+ID4gPiAzMi1iaXQgdmFsdWUN
Cj4gPiA+ID4gPiAoMSkgYnkgbW9yZSB0aGFuIDMxIGJpdHMuICBzLzEvMVVMTC8NCj4gPiA+ID4g
Pg0KPiA+ID4gPiBBY3R1YWxseSwgd2UgaGF2ZSBiZWVuIGRpc2N1c3NpbmcgdGhpcyBzaXR1YXRp
b24gdGhhdCBjb3VsZCBub3QNCj4gPiA+ID4gaGF2ZQ0KPiA+ID4gaGFwcGVuZWQuDQo+ID4gPiA+
IFNlZSAhcHcyMF93dCBicmFuY2gsIHRoaXMgYnJhbmNoIGlzIHJlYWQgZGVmYXVsdCB3YWl0IGJp
dC4NCj4gPiA+ID4gVGhlIGRlZmF1bHQgd2FpdCBiaXQgaXMgNTAsIHRoZSB0aW1lIGlzIGFib3V0
IDFtcy4NCj4gPiA+ID4gVGhlIGRlZmF1bHQgd2FpdCBiaXQgY2Fubm90IGxlc3MgdGhhbiA1MCwg
bWVhbnMgdGhlIHdhaXQgZW50cnkNCj4gPiA+ID4gdGltZQ0KPiA+ID4gY2Fubm90IGdyZWF0ZXIg
dGhhbiAxbXMuDQo+ID4gPiA+IFdlIGhhdmUgYWxyZWFkeSBiZWd1biBiZW5jaG1hcmsgdGVzdCwg
YW5kIHdlIGdvdCBhIHByZWxpbWluYXJ5DQo+IHJlc3VsdHMuDQo+ID4gPiA+IDU1LCA1NiwgNTdi
aXQgbG9va3MgZ29vZCwgYnV0IHdlIG5lZWQgbW9yZSBiZW5jaG1hcmsgdG8gZ2V0IHRoZQ0KPiA+
ID4gPiBkZWZhdWx0DQo+ID4gPiBiaXQuDQo+ID4gPg0KPiA+ID4gV2hhdCBkb2VzIHRoZSBkZWZh
dWx0IGhhdmUgdG8gZG8gd2l0aCBpdD8gIFRoZSB1c2VyIGNvdWxkIGhhdmUgc2V0IGENCj4gPiA+
IGRpZmZlcmVudCB2YWx1ZSwgYW5kIHRoZW4gcmVhZCBpdCBiYWNrLg0KPiA+ID4NCj4gPiA+IFBs
dXMsIGhvdyBtdWNoIHRpbWUgY29ycmVzcG9uZHMgdG8gYml0IDUwIGRlcGVuZHMgb24gdGhlIGFj
dHVhbA0KPiA+ID4gdGltZWJhc2UgZnJlcXVlbmN5IHdoaWNoIGNvdWxkIHZhcnkuDQo+ID4gPg0K
PiA+IAlpZiAoIXB3MjBfd3QpIHsNCj4gPiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUs
IGRvX3Nob3dfcHdybWd0Y3IwLCAmdmFsdWUsIDEpOw0KPiA+IAkJdmFsdWUgPSAodmFsdWUgJiBQ
V1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4gCQkJCQlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7
DQo+ID4NCj4gPiAJCXRiX2N5Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSB2YWx1ZSkpICogMjsNCj4g
PiAJCXRpbWUgPSB0Yl9jeWNsZSAqICgxMDAwIC8gdGJfdGlja3NfcGVyX3VzZWMpIC0gMTsNCj4g
PiAJfSBlbHNlIHsNCj4gPiAJCXRpbWUgPSBwdzIwX3d0Ow0KPiA+IAl9DQo+ID4NCj4gPiBBcyB3
ZSBoYXZlIGRpc2N1c3NlZCBiZWZvcmUgd2UgbmVlZCBhIHZhcmlhYmxlIHRvIHNhdmUgVG8gc2F2
ZSB0aGUNCj4gdXNlcnMgdG8gc2V0IHdhaXQtZW50cnktdGltZSB2YWx1ZS4NCj4gPg0KPiA+IFNl
ZSB0aGUgY29kZSwgaWYgdXNlciBoYXZlIHNldCBhIHZhbHVlLCBhbmQgdGhlIHZhbHVlIHdpbGwg
YmUgc2V0IGluDQo+IHB3MjBfd3QuDQo+ID4gV2hlbiB0aGUgdXNlciByZWFkIGl0IGJhY2ssIHRo
ZSBjb2RlIHdpbGwgZG8gInRpbWUgPSBwdzIwX3d0IiBicmFuY2guDQo+ID4NCj4gPiBXaGVuIHRo
ZSB1c2VyIG5vdCBzZXQgdGhlIHdhaXQtZW50cnktdGltZSB2YWx1ZSBhbmQgcmVhZCB0aGlzIHN5
cw0KPiBpbnRlcmZhY2UsIHRoZSBjb2RlIHdpbGwgZG8gdGhlIGZvbGxvd2luZyBicmFuY2guDQo+
IA0KPiBPaCwgc28gaXQncyBub3QgdGhhdCB5b3UgIm5lZWQiIHRoaXMsIHlvdSBhbHJlYWR5IGhh
dmUgaXQuDQo+IA0KWWVzLCB3ZSBhbHJlYWR5IGhhdmUgYSB2YXJpYWJsZS4gOikNCg0K

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-04 21:51                       ` Scott Wood
@ 2013-11-05  3:09                         ` Dongsheng Wang
  2013-11-06  5:25                           ` Bharat Bhushan
  0 siblings, 1 reply; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-05  3:09 UTC (permalink / raw)
  To: Scott Wood; +Cc: linuxppc-dev, Bharat Bhushan

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVHVlc2RheSwgTm92ZW1iZXIgMDUsIDIwMTMgNTo1MiBBTQ0KPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0DQo+IENjOiBXb29kIFNjb3R0LUIwNzQyMTsgQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3OyBsaW51eHBwYy0NCj4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDog
UmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRl
IGFuZA0KPiBhbHRpdmVjIGlkbGUNCj4gDQo+IE9uIFN1biwgMjAxMy0xMS0wMyBhdCAyMjowNCAt
MDYwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBN
ZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gU2Vu
dDogTW9uZGF5LCBPY3RvYmVyIDIxLCAyMDEzIDExOjExIEFNDQo+ID4gPiBUbzogV29vZCBTY290
dC1CMDc0MjENCj4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLWRldkBs
aXN0cy5vemxhYnMub3JnDQo+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJw
Yy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRpdmVjIGlkbGUN
Cj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gU2VudDogU2F0dXJkYXks
IE9jdG9iZXIgMTksIDIwMTMgMzoyMiBBTQ0KPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQw
NTM0DQo+ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIx
OyBsaW51eHBwYy0NCj4gPiA+ID4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gU3ViamVj
dDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0
YXRlDQo+ID4gPiA+IGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4NCj4gPiA+ID4gT24gVGh1LCAy
MDEzLTEwLTE3IGF0IDIyOjAyIC0wNTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3JvdGU6DQo+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+
ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+IFNlbnQ6IFRodXJz
ZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDI6NDYgUE0NCj4gPiA+ID4gPiA+IFRvOiBXYW5nIERvbmdz
aGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiBDYzogbGludXhwcGMt
ZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUg
NC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMA0KPiA+ID4gPiA+ID4gc3RhdGUg
YW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+
ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gU2Vu
dDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTE6MjIgQU0NCj4gPiA+ID4gPiA+ID4gPiA+
IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4g
PiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBm
b3INCj4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gU2Vu
dDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTE6MjAgQU0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4g
PiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4g
PiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBz
eXNmcw0KPiA+ID4gPiA+ID4gPiA+ID4gPiBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBz
dGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERv
bmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgT2N0
b2JlciAxNywgMjAxMyA4OjE2IEFNDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVG86IEJodXNoYW4g
QmhhcmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBD
YzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBT
dWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFu
ZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVz
aGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5
LCBPY3RvYmVyIDE3LCAyMDEzIDE6MDEgQU0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBX
YW5nIERvbmdzaGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZA0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTUsIDIwMTMgMjo1MSBQTQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUbzogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IFdhbmcNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gU3ViamVjdDogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAg
c3RhdGUgYW5kDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBhbHRpdmVjIGlkbGUNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBE
b25nc2hlbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPGRvbmdzaGVuZy53YW5nQGZyZWVz
Y2FsZS5jb20+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IEFkZCBhIHN5cyBpbnRlcmZhY2UgdG8gZW5hYmxlL2RpYWJsZSBwdzIwIHN0YXRlDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IG9yIGFsdGl2ZWMgaWRsZSwgYW5kDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBjb250cm9sIHRoZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiB3YWl0
IGVudHJ5IHRpbWUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IEVuYWJsZS9EaXNhYmxlIGludGVyZmFjZToNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gMCwgZGlzYWJsZS4gMSwgZW5hYmxlLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAv
c3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3MjBfc3RhdGUNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9hbHRpdmVjX2lkbGUNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2V0IHdhaXQg
dGltZSBpbnRlcmZhY2U6KE5hbm9zZWNvbmQpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC9z
eXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvcHcyMF93YWl0X3RpbWUNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9hbHRpdmVjX2lkbGVfd2Fp
dF90DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGltZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBFeGFtcGxlOiBCYXNlIG9uIFRCZnJlcSBpcyA0MU1IWi4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gMX40OChucyk6IFRCWzYzXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA0OX45
Nyhucyk6IFRCWzYyXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA5OH4xOTUobnMpOiBUQls2
MV0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMTk2fjM5MChucyk6IFRCWzYwXQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiAzOTF+NzgwKG5zKTogVEJbNTldDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IDc4MX4xNTYwKG5zKTogVEJbNThdIC4uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBXYW5nIERvbmdz
aGVuZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA8ZG9uZ3NoZW5nLndhbmdAZnJlZXNjYWxl
LmNvbT4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICp2NToNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIGdldF9pZGxlX3Rp
Y2tzX2JpdCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKnY0Og0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBNb3ZlIGNvZGUgZnJvbSA4NXh4L2NvbW1vbi5jIHRvIGtlcm5lbC9zeXNmcy5jLg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBSZW1vdmUg
aGFzX3B3MjBfYWx0aXZlY19pZGxlIGZ1bmN0aW9uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDaGFuZ2Ugd2FpdCAiZW50cnlfYml0IiB0byB3
YWl0IHRpbWUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IGluZGV4DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDI3YTkwYjku
LjEwZDExMjggMTAwNjQ0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93
ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9hcmNo
L3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTg1
LDYgKzg1LDI4NCBAQCBfX3NldHVwKCJzbXQtc25vb3plLWRlbGF5PSIsDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBzZXR1cF9zbXRfc25vb3plX2RlbGF5KTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICNlbmRpZiAvKiBDT05GSUdfUFBDNjQg
Ki8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
KyNpZmRlZiBDT05GSUdfRlNMX1NPQw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmlu
ZSBNQVhfQklUCQkJCTYzDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgcHcyMF93dDsgc3RhdGljIHU2NCBhbHRpdmVjX2lk
bGVfd3Q7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2lkbGVfdGlja3NfYml0KHU2NCBucykgew0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCBjeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChucyA+PSAxMDAwMCkN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJY3ljbGUgPSBkaXZfdTY0KG5zICsgNTAwLCAx
MDAwKSAqDQo+ID4gPiA+ID4gPiB0Yl90aWNrc19wZXJfdXNlYzsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwllbHNlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2
X3U2NChucyAqDQo+IHRiX3RpY2tzX3Blcl91c2VjLA0KPiA+ID4gPiAxMDAwKTsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghY3lj
bGUpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAwOw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIGlsb2cy
KGN5Y2xlKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBkb19zaG93X3B3cm1ndGNyMCh2b2lkICp2YWwpIHsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJKnZhbHVlID0gbWZz
cHIoU1BSTl9QV1JNR1RDUjApOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF9zdGF0ZShzdHJ1
Y3QgZGV2aWNlDQo+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCQkJc3RydWN0
IGRldmljZV9hdHRyaWJ1dGUNCj4gKmF0dHIsDQo+ID4gPiA+IGNoYXINCj4gPiA+ID4gPiA+ICpi
dWYpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgdmFsdWU7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlzbXBfY2FsbF9m
dW5jdGlvbl9zaW5nbGUoY3B1LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArZG9fc2hvd19w
d3JtZ3RjcjAsICZ2YWx1ZSwgMSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl2YWx1ZSAmPSBQV1JNR1RDUjBfUFcyMF9XQUlUOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0
dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbHVlID8gMSA6DQo+IDApOyB9DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lk
IGRvX3N0b3JlX3B3MjBfc3RhdGUodm9pZCAqdmFsKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJdTMyICp2YWx1ZSA9IHZhbDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIg
cHcyMF9zdGF0ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCXB3MjBfc3RhdGUgPSBtZnNwcihTUFJOX1BXUk1HVENSMCk7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoKnZh
bHVlKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlwdzIwX3N0YXRlIHw9IFBXUk1HVENS
MF9QVzIwX1dBSVQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArCQlwdzIwX3N0YXRlICY9IH5QV1JNR1RDUjBfUFcyMF9XQUlUOw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
bXRzcHIoU1BSTl9QV1JNR1RDUjAsIHB3MjBfc3RhdGUpOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHN0b3Jl
X3B3MjBfc3RhdGUoc3RydWN0IGRldmljZQ0KPiAqZGV2LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlDQo+ICphdHRyLA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90DQo+IGNvdW50KQ0KPiA+
ID4gPiB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKGtzdHJ0
b3UzMihidWYsIDAsICZ2YWx1ZSkpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVy
biAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJaWYgKHZhbHVlID4gMSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJ
cmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LA0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArZG9fc3RvcmVfcHcyMF9zdGF0ZSwgJnZhbHVlLCAxKTsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXJldHVy
biBjb3VudDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNzaXplX3Qgc2hv
d19wdzIwX3dhaXRfdGltZShzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK2Rldmlj
ZQ0KPiA+ID4gKmRldiwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZQ0KPiAqYXR0ciwNCj4gPiA+ID4gY2hhcg0KPiA+ID4gPiA+ID4gKmJ1Zikg
ew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwl1NjQgdGJfY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
czY0IHRpbWU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghcHcyMF93dCkgew0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1
LA0KPiA+ID4gPiBkb19zaG93X3B3cm1ndGNyMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
KyZ2YWx1ZSwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gMSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJCXZhbHVlID0gKHZhbHVlICYNCj4gUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+IAlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGJf
Y3ljbGUgPSAoMSA8PCAoTUFYX0JJVCAtIHZhbHVlKSkgKg0KPiAyOw0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IElzIHZhbHVlID0gMCBhbmQgdmFsdWUg
PSAxIGxlZ2FsPyBUaGVzZSB3aWxsIG1ha2UNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRiX2N5
Y2xlID0gMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJCXRpbWUgPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAwMCwNCj4gPiA+ID4gdGJfdGlja3Nf
cGVyX3VzZWMpDQo+ID4gPiA+ID4gPiAtIDE7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW5kIHRpbWUgPSAtMTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gUGxlYXNlIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGUg
ZnVuY3Rpb24sIDopDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiAicmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgdGltZSA+IDAgPyB0aW1lIDogMCk7Ig0K
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBJIGtub3cgeW91IHJldHVy
biAwIGlmIHZhbHVlID0gMC8xLCBteSBxdWVzdGlvbiB3YXMNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
dGhhdCwgaXMgdGhpcyBjb3JyZWN0IGFzIHBlciBzcGVjaWZpY2F0aW9uPw0KPiA+ID4gPiA+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBBaGgsIGFsc28gZm9yICJ2YWx1ZSIgdXB0byA3
IHlvdSB3aWxsIHJldHVybiAwLCBubz8NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+IElmIHZhbHVlID0gMCwgTUFYX0JJVCAtIHZhbHVlID0gNjMgdGJfY3ljbGUgPQ0KPiA+
ID4gPiA+ID4gPiA+ID4gMHhmZmZmZmZmZl9mZmZmZmZmZiwgdGJfY3ljbGUgKiAxMDAwIHdpbGwg
b3ZlcmZsb3csIGJ1dA0KPiA+ID4gPiA+ID4gPiA+ID4gdGhpcw0KPiA+ID4gPiBzaXR1YXRpb24g
aXMgbm90IHBvc3NpYmxlLg0KPiA+ID4gPiA+ID4gPiA+ID4gQmVjYXVzZSBpZiB0aGUgInZhbHVl
ID0gMCIgbWVhbnMgdGhpcyBmZWF0dXJlIHdpbGwgYmUNCj4gPiA+ICJkaXNhYmxlIi4NCj4gPiA+
ID4gPiA+ID4gPiA+IE5vdyBUaGUgZGVmYXVsdCB3YWl0IGJpdCBpcyA1MChNQVhfQklUIC0gdmFs
dWUsIHZhbHVlID0NCj4gPiA+ID4gPiA+ID4gPiA+IDEzKSwgdGhlIFBXMjAvQWx0aXZlYyBJZGxl
IHdhaXQgZW50cnkgdGltZSBpcyBhYm91dCAxbXMsDQo+ID4gPiA+ID4gPiA+ID4gPiB0aGlzIHRp
bWUgaXMgdmVyeSBsb25nIGZvciB3YWl0IGlkbGUgdGltZSwgYW5kIGl0J3MNCj4gPiA+ID4gPiA+
ID4gPiA+IGNhbm5vdCBiZSBpbmNyZWFzZWQobWVhbnMgKE1BWF9CSVQNCj4gPiA+ID4gPiA+ID4g
PiA+IC0gdmFsdWUpDQo+ID4gPiA+ID4gPiA+ID4gY2Fubm90IGdyZWF0ZXIgdGhhbiA1MCkuDQo+
ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBXaGF0IHlvdSBzYWlkIGlzIG5vdCBvYnZp
b3VzIGZyb20gY29kZSBhbmQgc28gYXQgbGVhc3QNCj4gPiA+ID4gPiA+ID4gPiB3cml0ZSBhIGNv
bW1lbnQgdGhhdCB2YWx1ZSB3aWxsIGJlIGFsd2F5cyA+PSAxMyBvciB2YWx1ZQ0KPiA+ID4gPiA+
ID4gPiA+IHdpbGwgbmV2ZXIgYmUgbGVzcyB0aGFuIDwgOCBhbmQgYmVsb3cgY2FsY3VsYXRpb24g
d2lsbCBub3QNCj4gPiA+ID4gPiA+ID4gPiBvdmVyZmxvdy4gbWF5IGJlIGVycm9yIG91dCBpZiB2
YWx1ZSBpcyBsZXNzIHRoYW4gOC4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBUaGUg
InZhbHVlIiBsZXNzIHRoYW4gMTAsIHRoaXMgd2lsbCBvdmVyZmxvdy4NCj4gPiA+ID4gPiA+ID4g
VGhlcmUgaXMgbm90IGVycm9yLCBUaGUgY29kZSBJIGtuZXcgaXQgY291bGQgbm90IGJlIGxlc3MN
Cj4gPiA+ID4gPiA+ID4gdGhhbiAxMCwgdGhhdCdzIHdoeSBJIHVzZSB0aGUgZm9sbG93aW5nIGNv
ZGUuIDopDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSSBhbSBzb3JyeSB0byBwZXJzaXN0IGJ1
dCB0aGlzIGlzIG5vdCBhYm91dCB3aGF0IHlvdSBrbm93LA0KPiA+ID4gPiA+ID4gdGhpcyBpcyBh
Ym91dCBob3cgY29kZSBpcyByZWFkIGFuZCBjb2RlIGRvZXMgbm90IHNheSB3aGF0IHlvdQ0KPiA+
ID4gPiA+ID4ga25vdywgc28gYWRkIGEgY29tbWVudCBhdCBsZWFzdCBhbmQgZXJyb3Igb3V0L3dh
cm4gd2hlbg0KPiA+ID4gPiA+ID4gInZhbHVlIiBpcyBsZXNzIHRoYW4gYQ0KPiA+ID4gPiBjZXJ0
YWluIG51bWJlci4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gU29ycnkgZm9yIHRoZSBsYXRlIHRv
IHJlc3BvbnNlIHRoZSBtYWlsLiBJZiBpdCBjYXVzZWQgY29uZnVzaW9uLA0KPiA+ID4gPiA+IHdl
IGNhbg0KPiA+ID4gPiBhZGQgYSBjb21tZW50Lg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSG93IGFi
b3V0IHRoZSBmb2xsb3dpbmcgY29tbWVudD8NCj4gPiA+ID4gPiAvKg0KPiA+ID4gPiA+ICAqIElm
IHRoZSAidmFsdWUiIGxlc3MgdGhhbiAxMCwgdGhpcyB3aWxsIG92ZXJmbG93Lg0KPiA+ID4gPiA+
ICAqIEZyb20gYmVuY2htYXJrIHRlc3QsIHRoZSBkZWZhdWx0IHdhaXQgYml0IHdpbGwgbm90IGJl
IHNldA0KPiA+ID4gPiA+IGxlc3MgdGhhbg0KPiA+ID4gPiAxMGJpdC4NCj4gPiA+ID4gPiAgKiBC
ZWNhdXNlIDEwIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgd2FpdCBlbnRyeSB0aW1lIGlzDQo+ID4g
PiA+ID4gNDM5Mzc1NTczNDAxOTk5NjA5KG5zKSwNCj4gPiA+ID4gPiAgKiBmb3Igd2FpdC1lbnRy
eS1pZGxlIHRpbWUgdGhpcyB2YWx1ZSBsb29rcyB0b28gbG9uZywgYW5kIHdlDQo+ID4gPiA+ID4g
Y2Fubm90IHVzZSB0aG9zZQ0KPiA+ID4gPiA+ICAqICJsb25nIiB0aW1lIGFzIGEgZGVmYXVsdCB3
YWl0LWVudHJ5IHRpbWUuIFNvIG92ZXJmbG93IGNvdWxkDQo+ID4gPiA+ID4gbm90IGhhdmUgaGFw
cGVuZWQNCj4gPiA+ID4gPiAgKiBhbmQgd2UgdXNlIHRoaXMgY2FsY3VsYXRpb24gbWV0aG9kIHRv
IGdldCB3YWl0LWVudHJ5LWlkbGUgdGltZS4NCj4gPiA+ID4gPiAgKi8NCj4gPiA+ID4NCj4gPiA+
ID4gSWYgdGhlcmUncyB0byBiZSBhIGxpbWl0IG9uIHRoZSB0aW1lcyB3ZSBhY2NlcHQsIG1ha2Ug
aXQgZXhwbGljaXQuDQo+ID4gPiA+IENoZWNrIGZvciBpdCBiZWZvcmUgZG9pbmcgYW55IGNvbnZl
cnNpb25zLCBhbmQgcmV0dXJuIGFuIGVycm9yIGlmDQo+ID4gPiA+IHVzZXJzcGFjZSB0cmllcyB0
byBzZXQgaXQuDQo+ID4gPiA+DQo+ID4gPiBUaGUgYnJhbmNoIG9ubHkgdXNlIHRvIHJlYWQgZGVm
YXVsdCB3YWl0LWVudHJ5LXRpbWUuDQo+ID4gPiBXZSBoYXZlIG5vIGxpbWl0IHRoZSB1c2VyJ3Mg
aW5wdXQsIGFuZCB3ZSBjYW4ndCByZXN0cmljdC4gT25jZSB0aGUNCj4gPiA+IHVzZXIgc2V0IHRo
ZSB3YWl0LWVudHJ5LXRpbWUsIHRoZSBjb2RlIHdpbGwgZG8gYW5vdGhlciBicmFuY2guDQo+ID4g
Pg0KPiA+DQo+ID4gSGkgc2NvdHQsDQo+ID4gRG8geW91IGhhdmUgYW55IGNvbW1lbnRzIGFib3V0
IHRoaXMgcGF0Y2g/DQo+ID4gSSB3aWxsIGFkZCB0aGUgY29tbWVudCBhbmQgc2VuZCB0aGlzIHBh
dGNoIGFnYWluLg0KPiANCj4gV2hhdCBkbyB5b3UgbWVhbiBieSAiYW5kIHdlIGNhbid0IHJlc3Ry
aWN0Ij8gIFdoeSBub3Q/DQo+IA0KPiBXaHkgaXMgaXQgb25seSB1c2VkIHRvIHJlYWQgdGhlIGRl
ZmF1bHQsIGFuZCBub3QgdGhlIGN1cnJlbnQgdmFsdWU/DQo+IA0KV2UgYWxyZWFkeSBoYXZlIGEg
dmFyaWFibGUgd2hpY2ggdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyLCBhcyB3ZSBoYXZlIGRpc2N1
c3NlZCBiZWZvcmUuDQoNCldoZW4gdGhlIHN5c3RlbSBib290LXVwLiBCZWZvcmUgdXNlciBzZXQg
dGhlIHdhaXQtZW50cnktdGltZSwgd2UgbmVlZCB0byByZXR1cm4gYSBkZWZhdWx0IHdhaXQtZW50
cnktdGltZSwgaWYgdGhlIHVzZXIgcmVhZCB0aGlzIHN5cy1pbnRlcmZhY2UuIFRoZSBkZWZhdWx0
IHdhaXQtZW50cnktdGltZSBpcyBjb252ZXJ0ZWQgYnkgd2FpdC1iaXQuDQoNCk9uY2UgdGhlIHVz
ZXIgc2V0IHRoZSBzeXMtaW50ZXJmYWNlLCBhIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCB0byBzYXZl
IGl0LiBBbmQgd2hlbiB0aGUgdXNlciByZWFkIHN5cy1pbnRlcmZhY2Ugd2Ugd2lsbCByZXR1cm4g
YmFjayB0aGUgdmFyaWFibGUuDQoNCi1kb25nc2hlbmcNCg0K

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-05  3:09                         ` Dongsheng Wang
@ 2013-11-06  5:25                           ` Bharat Bhushan
  2013-11-06  7:50                             ` Dongsheng Wang
  0 siblings, 1 reply; 34+ messages in thread
From: Bharat Bhushan @ 2013-11-06  5:25 UTC (permalink / raw)
  To: Dongsheng Wang, Scott Wood; +Cc: linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV2FuZyBEb25nc2hlbmct
QjQwNTM0DQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDA1LCAyMDEzIDg6NDAgQU0NCj4gVG86
IFdvb2QgU2NvdHQtQjA3NDIxDQo+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dl
cnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYw0KPiBpZGxlDQo+
IA0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBXb29k
IFNjb3R0LUIwNzQyMQ0KPiA+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDA1LCAyMDEzIDU6NTIg
QU0NCj4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gQ2M6IFdvb2QgU2NvdHQtQjA3
NDIxOyBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLQ0KPiA+IGRldkBsaXN0cy5vemxh
YnMub3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRk
IHN5c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiA+IGFsdGl2ZWMgaWRsZQ0KPiA+DQo+ID4gT24g
U3VuLCAyMDEzLTExLTAzIGF0IDIyOjA0IC0wNjAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3Jv
dGU6DQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZyb206IFdh
bmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMjEsIDIw
MTMgMTE6MTEgQU0NCj4gPiA+ID4gVG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+IENjOiBC
aHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4g
PiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBm
b3IgcHcyMCBzdGF0ZQ0KPiA+ID4gPiBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+DQo+ID4gPiA+
DQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4g
PiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+IFNlbnQ6IFNhdHVyZGF5LCBPY3Rv
YmVyIDE5LCAyMDEzIDM6MjIgQU0NCj4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0
DQo+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjE7
IGxpbnV4cHBjLQ0KPiA+ID4gPiA+IGRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gU3Vi
amVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIw
DQo+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g
T24gVGh1LCAyMDEzLTEwLTE3IGF0IDIyOjAyIC0wNTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQg
d3JvdGU6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut
LS0tLQ0KPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4g
PiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMjo0NiBQTQ0KPiA+ID4gPiA+
ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4g
PiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4g
U3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBw
dzIwDQo+ID4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4N
Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25n
c2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVy
IDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJh
dC1SNjU3Nzc7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51
eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiBTdWJqZWN0OiBS
RTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRs
ZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTE6MjAg
QU0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29k
IFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlz
dHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0gg
djUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGZv
cg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t
LS0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMg
ODoxNiBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVG86IEJodXNoYW4gQmhhcmF0LVI2NTc3
NzsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBw
Yy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDog
UkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFs
dGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9t
OiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2VudDog
VGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2Vy
cGMvODV4eDogYWRkDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN5c2ZzIGZvcg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9u
Z3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXks
IE9jdG9iZXIgMTUsIDIwMTMgMjo1MSBQTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRv
OiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVz
aGFuIEJoYXJhdC1SNjU3Nzc7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbGludXhwcGMt
ZGV2QGxpc3RzLm96bGFicy5vcmc7IFdhbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRG9u
Z3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFtQQVRD
SCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
c3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVu
Zw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUu
Y29tPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gQWRkIGEgc3lzIGludGVyZmFjZSB0byBlbmFibGUvZGlhYmxlIHB3MjANCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiBzdGF0ZSBvciBhbHRpdmVjIGlkbGUsIGFuZA0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBjb250cm9sIHRoZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
IHdhaXQgZW50cnkgdGltZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IEVuYWJsZS9EaXNhYmxlIGludGVyZmFjZToNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAwLCBkaXNhYmxlLiAxLCBlbmFibGUuDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9wdzIwX3N0YXRlDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9hbHRp
dmVjX2lkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IFNldCB3YWl0IHRpbWUgaW50ZXJmYWNlOihOYW5vc2Vjb25kKQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvcHcyMF93YWl0
X3RpbWUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2Nw
dS9jcHVYL2FsdGl2ZWNfaWRsZV93YWl0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gX3QN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbWUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBFeGFtcGxlOiBCYXNlIG9uIFRCZnJlcSBpcyA0MU1IWi4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiAxfjQ4KG5zKTogVEJbNjNdDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
NDl+OTcobnMpOiBUQls2Ml0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA5OH4xOTUobnMp
OiBUQls2MV0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAxOTZ+MzkwKG5zKTogVEJbNjBd
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMzkxfjc4MChucyk6IFRCWzU5XQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IDc4MX4xNTYwKG5zKTogVEJbNThdIC4uLg0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9m
Zi1ieTogV2FuZyBEb25nc2hlbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA8ZG9uZ3No
ZW5nLndhbmdAZnJlZXNjYWxlLmNvbT4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAqdjU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gQ2hhbmdlIGdldF9pZGxlX3RpY2tzX2JpdCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICp2NDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBNb3ZlIGNvZGUgZnJvbSA4NXh4L2Nv
bW1vbi5jIHRvIGtlcm5lbC9zeXNmcy5jLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gUmVtb3ZlIGhhc19wdzIwX2FsdGl2ZWNfaWRsZSBm
dW5jdGlvbi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IENoYW5nZSB3YWl0ICJlbnRyeV9iaXQiIHRvIHdhaXQgdGltZS4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1n
aXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBpbmRleA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDI3YTkwYjkuLjEwZDExMjgg
MTAwNjQ0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tIGEvYXJjaC9wb3dlcnBjL2tl
cm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvYXJjaC9wb3dl
cnBjL2tlcm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTg1LDYg
Kzg1LDI4NCBAQA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IF9fc2V0dXAoInNtdC1zbm9v
emUtZGVsYXk9IiwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXBfc210X3Nub296ZV9k
ZWxheSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiAgI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdfRlNMX1NP
Qw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIE1BWF9CSVQJCQkJNjMNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
K3N0YXRpYyB1NjQgcHcyMF93dDsgc3RhdGljIHU2NA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICthbHRpdmVjX2lkbGVfd3Q7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGdldF9pZGxlX3Rp
Y2tzX2JpdCh1NjQgbnMpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCBjeWNs
ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwlpZiAobnMgPj0gMTAwMDApDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJ
Y3ljbGUgPSBkaXZfdTY0KG5zICsgNTAwLCAxMDAwKSAqDQo+ID4gPiA+ID4gPiA+IHRiX3RpY2tz
X3Blcl91c2VjOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2X3U2NChucyAqDQo+ID4gdGJfdGlja3Nf
cGVyX3VzZWMsDQo+ID4gPiA+ID4gMTAwMCk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
Kw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFjeWNsZSkNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gaWxvZzIoY3ljbGUpOyB9
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICtzdGF0aWMgdm9pZCBkb19zaG93X3B3cm1ndGNyMCh2b2lkICp2YWwpIHsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFsdWUgPSB2YWw7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJKnZhbHVlID0gbWZz
cHIoU1BSTl9QV1JNR1RDUjApOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgc3NpemVfdCBzaG93X3B3MjBfc3RhdGUo
c3RydWN0IGRldmljZQ0KPiA+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJ
CQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQ0KPiA+ICphdHRyLA0KPiA+ID4gPiA+IGNoYXINCj4g
PiA+ID4gPiA+ID4gKmJ1Zikgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZh
bHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNwdSA9IGRl
di0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArZG9fc2hvd19wd3JtZ3RjcjAsICZ2YWx1ZSwgMSk7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdmFsdWUg
Jj0gUFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwg
dmFsdWUgPyAxIDoNCj4gPiAwKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQgZG9fc3RvcmVfcHcyMF9zdGF0
ZSh2b2lkICp2YWwpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFsdWUg
PSB2YWw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgcHcyMF9zdGF0ZTsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
KwlwdzIwX3N0YXRlID0gbWZzcHIoU1BSTl9QV1JNR1RDUjApOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICgqdmFsdWUpDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcHcyMF9zdGF0ZSB8PSBQV1JNR1RDUjBfUFcy
MF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJCXB3MjBfc3RhdGUgJj0gflBXUk1HVENSMF9QVzIwX1dBSVQ7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICsJbXRzcHIoU1BSTl9QV1JNR1RDUjAsIHB3MjBfc3RhdGUpOyB9DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0aWMgc3NpemVf
dCBzdG9yZV9wdzIwX3N0YXRlKHN0cnVjdCBkZXZpY2UNCj4gPiAqZGV2LA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUNCj4gPiAqYXR0ciwN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90
DQo+ID4gY291bnQpDQo+ID4gPiA+ID4gew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
dTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGNw
dSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJaWYgKGtzdHJ0b3UzMihidWYsIDAsICZ2YWx1ZSkpDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKHZhbHVlID4g
MSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlz
bXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICtkb19zdG9yZV9wdzIwX3N0YXRlLCAmdmFsdWUsIDEpOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXJldHVybiBjb3VudDsgfQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArc3RhdGljIHNzaXplX3Qgc2hvd19wdzIwX3dhaXRfdGltZShzdHJ1Y3QNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArZGV2aWNlDQo+ID4gPiA+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQ0KPiA+ICphdHRyLA0KPiA+
ID4gPiA+IGNoYXINCj4gPiA+ID4gPiA+ID4gKmJ1Zikgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTY0IHRi
X2N5Y2xlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJczY0IHRpbWU7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdW5z
aWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFwdzIwX3d0KSB7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwNCj4gPiA+
ID4gPiBkb19zaG93X3B3cm1ndGNyMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArJnZh
bHVlLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDEpOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJCXZhbHVlID0gKHZhbHVlICYNCj4gPiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+IAlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJCXRiX2N5Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSB2YWx1ZSkpICoNCj4gPiAyOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBJcyB2YWx1
ZSA9IDAgYW5kIHZhbHVlID0gMSBsZWdhbD8gVGhlc2Ugd2lsbA0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBtYWtlIHRiX2N5Y2xlID0gMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQl0aW1lID0gZGl2X3U2NCh0Yl9jeWNsZSAqIDEw
MDAsDQo+ID4gPiA+ID4gdGJfdGlja3NfcGVyX3VzZWMpDQo+ID4gPiA+ID4gPiA+IC0gMTsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW5kIHRp
bWUgPSAtMTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IFBsZWFzZSBsb29rIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCA6KQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICJyZXR1cm4gc3ByaW50Zihi
dWYsICIlbGx1XG4iLCB0aW1lID4gMCA/IHRpbWUgOiAwKTsiDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBJIGtub3cgeW91IHJldHVybiAwIGlmIHZhbHVlID0g
MC8xLCBteSBxdWVzdGlvbiB3YXMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0LCBpcyB0aGlz
IGNvcnJlY3QgYXMgcGVyIHNwZWNpZmljYXRpb24/DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiBBaGgsIGFsc28gZm9yICJ2YWx1ZSIgdXB0byA3IHlvdSB3aWxs
IHJldHVybiAwLCBubz8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiBJZiB2YWx1ZSA9IDAsIE1BWF9CSVQgLSB2YWx1ZSA9IDYzIHRiX2N5Y2xlID0NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gMHhmZmZmZmZmZl9mZmZmZmZmZiwgdGJfY3ljbGUgKiAxMDAwIHdpbGwgb3Zl
cmZsb3csDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGJ1dCB0aGlzDQo+ID4gPiA+ID4gc2l0dWF0aW9u
IGlzIG5vdCBwb3NzaWJsZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gQmVjYXVzZSBpZiB0aGUgInZh
bHVlID0gMCIgbWVhbnMgdGhpcyBmZWF0dXJlIHdpbGwgYmUNCj4gPiA+ID4gImRpc2FibGUiLg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiBOb3cgVGhlIGRlZmF1bHQgd2FpdCBiaXQgaXMgNTAoTUFYX0JJ
VCAtIHZhbHVlLCB2YWx1ZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA9IDEzKSwgdGhlIFBXMjAvQWx0
aXZlYyBJZGxlIHdhaXQgZW50cnkgdGltZSBpcyBhYm91dA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAx
bXMsIHRoaXMgdGltZSBpcyB2ZXJ5IGxvbmcgZm9yIHdhaXQgaWRsZSB0aW1lLCBhbmQNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gaXQncyBjYW5ub3QgYmUgaW5jcmVhc2VkKG1lYW5zIChNQVhfQklUDQo+
ID4gPiA+ID4gPiA+ID4gPiA+IC0gdmFsdWUpDQo+ID4gPiA+ID4gPiA+ID4gPiBjYW5ub3QgZ3Jl
YXRlciB0aGFuIDUwKS4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBXaGF0
IHlvdSBzYWlkIGlzIG5vdCBvYnZpb3VzIGZyb20gY29kZSBhbmQgc28gYXQgbGVhc3QNCj4gPiA+
ID4gPiA+ID4gPiA+IHdyaXRlIGEgY29tbWVudCB0aGF0IHZhbHVlIHdpbGwgYmUgYWx3YXlzID49
IDEzIG9yIHZhbHVlDQo+ID4gPiA+ID4gPiA+ID4gPiB3aWxsIG5ldmVyIGJlIGxlc3MgdGhhbiA8
IDggYW5kIGJlbG93IGNhbGN1bGF0aW9uIHdpbGwNCj4gPiA+ID4gPiA+ID4gPiA+IG5vdCBvdmVy
Zmxvdy4gbWF5IGJlIGVycm9yIG91dCBpZiB2YWx1ZSBpcyBsZXNzIHRoYW4gOC4NCj4gPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gVGhlICJ2YWx1ZSIgbGVzcyB0aGFuIDEwLCB0aGlz
IHdpbGwgb3ZlcmZsb3cuDQo+ID4gPiA+ID4gPiA+ID4gVGhlcmUgaXMgbm90IGVycm9yLCBUaGUg
Y29kZSBJIGtuZXcgaXQgY291bGQgbm90IGJlIGxlc3MNCj4gPiA+ID4gPiA+ID4gPiB0aGFuIDEw
LCB0aGF0J3Mgd2h5IEkgdXNlIHRoZSBmb2xsb3dpbmcgY29kZS4gOikNCj4gPiA+ID4gPiA+ID4N
Cj4gPiA+ID4gPiA+ID4gSSBhbSBzb3JyeSB0byBwZXJzaXN0IGJ1dCB0aGlzIGlzIG5vdCBhYm91
dCB3aGF0IHlvdSBrbm93LA0KPiA+ID4gPiA+ID4gPiB0aGlzIGlzIGFib3V0IGhvdyBjb2RlIGlz
IHJlYWQgYW5kIGNvZGUgZG9lcyBub3Qgc2F5IHdoYXQNCj4gPiA+ID4gPiA+ID4geW91IGtub3cs
IHNvIGFkZCBhIGNvbW1lbnQgYXQgbGVhc3QgYW5kIGVycm9yIG91dC93YXJuIHdoZW4NCj4gPiA+
ID4gPiA+ID4gInZhbHVlIiBpcyBsZXNzIHRoYW4gYQ0KPiA+ID4gPiA+IGNlcnRhaW4gbnVtYmVy
Lg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gU29ycnkgZm9yIHRoZSBsYXRlIHRvIHJlc3Bv
bnNlIHRoZSBtYWlsLiBJZiBpdCBjYXVzZWQNCj4gPiA+ID4gPiA+IGNvbmZ1c2lvbiwgd2UgY2Fu
DQo+ID4gPiA+ID4gYWRkIGEgY29tbWVudC4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBIb3cg
YWJvdXQgdGhlIGZvbGxvd2luZyBjb21tZW50Pw0KPiA+ID4gPiA+ID4gLyoNCj4gPiA+ID4gPiA+
ICAqIElmIHRoZSAidmFsdWUiIGxlc3MgdGhhbiAxMCwgdGhpcyB3aWxsIG92ZXJmbG93Lg0KPiA+
ID4gPiA+ID4gICogRnJvbSBiZW5jaG1hcmsgdGVzdCwgdGhlIGRlZmF1bHQgd2FpdCBiaXQgd2ls
bCBub3QgYmUgc2V0DQo+ID4gPiA+ID4gPiBsZXNzIHRoYW4NCj4gPiA+ID4gPiAxMGJpdC4NCj4g
PiA+ID4gPiA+ICAqIEJlY2F1c2UgMTAgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSB3YWl0IGVudHJ5
IHRpbWUgaXMNCj4gPiA+ID4gPiA+IDQzOTM3NTU3MzQwMTk5OTYwOShucyksDQo+ID4gPiA+ID4g
PiAgKiBmb3Igd2FpdC1lbnRyeS1pZGxlIHRpbWUgdGhpcyB2YWx1ZSBsb29rcyB0b28gbG9uZywg
YW5kIHdlDQo+ID4gPiA+ID4gPiBjYW5ub3QgdXNlIHRob3NlDQo+ID4gPiA+ID4gPiAgKiAibG9u
ZyIgdGltZSBhcyBhIGRlZmF1bHQgd2FpdC1lbnRyeSB0aW1lLiBTbyBvdmVyZmxvdyBjb3VsZA0K
PiA+ID4gPiA+ID4gbm90IGhhdmUgaGFwcGVuZWQNCj4gPiA+ID4gPiA+ICAqIGFuZCB3ZSB1c2Ug
dGhpcyBjYWxjdWxhdGlvbiBtZXRob2QgdG8gZ2V0IHdhaXQtZW50cnktaWRsZSB0aW1lLg0KPiA+
ID4gPiA+ID4gICovDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJZiB0aGVyZSdzIHRvIGJlIGEgbGlt
aXQgb24gdGhlIHRpbWVzIHdlIGFjY2VwdCwgbWFrZSBpdCBleHBsaWNpdC4NCj4gPiA+ID4gPiBD
aGVjayBmb3IgaXQgYmVmb3JlIGRvaW5nIGFueSBjb252ZXJzaW9ucywgYW5kIHJldHVybiBhbiBl
cnJvcg0KPiA+ID4gPiA+IGlmIHVzZXJzcGFjZSB0cmllcyB0byBzZXQgaXQuDQo+ID4gPiA+ID4N
Cj4gPiA+ID4gVGhlIGJyYW5jaCBvbmx5IHVzZSB0byByZWFkIGRlZmF1bHQgd2FpdC1lbnRyeS10
aW1lLg0KPiA+ID4gPiBXZSBoYXZlIG5vIGxpbWl0IHRoZSB1c2VyJ3MgaW5wdXQsIGFuZCB3ZSBj
YW4ndCByZXN0cmljdC4gT25jZSB0aGUNCj4gPiA+ID4gdXNlciBzZXQgdGhlIHdhaXQtZW50cnkt
dGltZSwgdGhlIGNvZGUgd2lsbCBkbyBhbm90aGVyIGJyYW5jaC4NCj4gPiA+ID4NCj4gPiA+DQo+
ID4gPiBIaSBzY290dCwNCj4gPiA+IERvIHlvdSBoYXZlIGFueSBjb21tZW50cyBhYm91dCB0aGlz
IHBhdGNoPw0KPiA+ID4gSSB3aWxsIGFkZCB0aGUgY29tbWVudCBhbmQgc2VuZCB0aGlzIHBhdGNo
IGFnYWluLg0KPiA+DQo+ID4gV2hhdCBkbyB5b3UgbWVhbiBieSAiYW5kIHdlIGNhbid0IHJlc3Ry
aWN0Ij8gIFdoeSBub3Q/DQo+ID4NCj4gPiBXaHkgaXMgaXQgb25seSB1c2VkIHRvIHJlYWQgdGhl
IGRlZmF1bHQsIGFuZCBub3QgdGhlIGN1cnJlbnQgdmFsdWU/DQo+ID4NCj4gV2UgYWxyZWFkeSBo
YXZlIGEgdmFyaWFibGUgd2hpY2ggdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyLCBhcyB3ZSBoYXZl
IGRpc2N1c3NlZA0KPiBiZWZvcmUuDQo+IA0KPiBXaGVuIHRoZSBzeXN0ZW0gYm9vdC11cC4gQmVm
b3JlIHVzZXIgc2V0IHRoZSB3YWl0LWVudHJ5LXRpbWUsIHdlIG5lZWQgdG8gcmV0dXJuDQo+IGEg
ZGVmYXVsdCB3YWl0LWVudHJ5LXRpbWUsIGlmIHRoZSB1c2VyIHJlYWQgdGhpcyBzeXMtaW50ZXJm
YWNlLiBUaGUgZGVmYXVsdA0KPiB3YWl0LWVudHJ5LXRpbWUgaXMgY29udmVydGVkIGJ5IHdhaXQt
Yml0Lg0KPiANCj4gT25jZSB0aGUgdXNlciBzZXQgdGhlIHN5cy1pbnRlcmZhY2UsIGEgdmFyaWFi
bGUgd2lsbCBiZSB1c2VkIHRvIHNhdmUgaXQuIEFuZA0KPiB3aGVuIHRoZSB1c2VyIHJlYWQgc3lz
LWludGVyZmFjZSB3ZSB3aWxsIHJldHVybiBiYWNrIHRoZSB2YXJpYWJsZS4NCg0KV2hpbGUgd2Ug
YXJlIG5vdCAicmVzdHJpY3RpbmcgdXNlciBkZWZpbmVkIHZhbHVlIiBvciAiZGVmaW5lIHNhbWUg
cmVzdHJpY3Rpb24gZm9yIHVzZXIgZGVmaW5lZCBhbmQgZGVmYXVsdCIsIGNhbiB3ZSBoYXZlIG9u
bHkgb25lIGZsb3cgb2YgY2FsY3VsYXRpb24gYW5kIHNldHRpbmcgcmF0aGVyIHRoYW4gY29uZGl0
aW9uYWwgYmFzZWQgb24gdXNlciBoYXZlIHNldCBvciBub3Qgc2V0PyANCg0KLUJoYXJhdA0KDQo+
IA0KPiAtZG9uZ3NoZW5nDQoNCg==

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-06  5:25                           ` Bharat Bhushan
@ 2013-11-06  7:50                             ` Dongsheng Wang
  2013-11-07  1:20                               ` Scott Wood
  0 siblings, 1 reply; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-06  7:50 UTC (permalink / raw)
  To: Bharat Bhushan, Scott Wood; +Cc: linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQmh1c2hhbiBCaGFyYXQt
UjY1Nzc3DQo+IFNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIgMDYsIDIwMTMgMToyNSBQTQ0KPiBU
bzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiBDYzogbGludXhw
cGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBv
d2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiBhbHRpdmVjIGlkbGUN
Cj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFdh
bmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDA1LCAyMDEz
IDg6NDAgQU0NCj4gPiBUbzogV29vZCBTY290dC1CMDc0MjENCj4gPiBDYzogQmh1c2hhbiBCaGFy
YXQtUjY1Nzc3OyBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+IFN1YmplY3Q6IFJF
OiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZSBh
bmQNCj4gPiBhbHRpdmVjIGlkbGUNCj4gPg0KPiA+DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gU2VudDog
VHVlc2RheSwgTm92ZW1iZXIgMDUsIDIwMTMgNTo1MiBBTQ0KPiA+ID4gVG86IFdhbmcgRG9uZ3No
ZW5nLUI0MDUzNA0KPiA+ID4gQ2M6IFdvb2QgU2NvdHQtQjA3NDIxOyBCaHVzaGFuIEJoYXJhdC1S
NjU3Nzc7IGxpbnV4cHBjLQ0KPiA+ID4gZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+IFN1Ympl
Y3Q6IFJlOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBz
dGF0ZQ0KPiA+ID4gYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4NCj4gPiA+IE9uIFN1biwgMjAxMy0x
MS0wMyBhdCAyMjowNCAtMDYwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+ID4g
PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25n
c2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDIxLCAyMDEzIDEx
OjExIEFNDQo+ID4gPiA+ID4gVG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gQ2M6IEJo
dXNoYW4gQmhhcmF0LVI2NTc3NzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+
ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMg
Zm9yIHB3MjANCj4gPiA+ID4gPiBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4NCj4g
PiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t
LQ0KPiA+ID4gPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+IFNlbnQ6
IFNhdHVyZGF5LCBPY3RvYmVyIDE5LCAyMDEzIDM6MjIgQU0NCj4gPiA+ID4gPiA+IFRvOiBXYW5n
IERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7
IFdvb2QgU2NvdHQtQjA3NDIxOyBsaW51eHBwYy0NCj4gPiA+ID4gPiA+IGRldkBsaXN0cy5vemxh
YnMub3JnDQo+ID4gPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84
NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjANCj4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlk
bGUNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBPbiBUaHUsIDIwMTMtMTAtMTcgYXQgMjI6MDIg
LTA1MDAsIFdhbmcgRG9uZ3NoZW5nLUI0MDUzNCB3cm90ZToNCj4gPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+IEZy
b206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5
LCBPY3RvYmVyIDE3LCAyMDEzIDI6NDYgUE0NCj4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25n
c2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51
eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBb
UEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4g
PiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3No
ZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVy
IDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVG86IEJodXNoYW4gQmhh
cmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDYzog
bGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTdWJq
ZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBh
bHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVzaGFu
IEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBP
Y3RvYmVyIDE3LCAyMDEzIDExOjIwIEFNDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUbzogV2Fu
ZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
cHcyMCBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyA4OjE2IEFNDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2Nv
dHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlz
dHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BB
VENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
c3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2
ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gRnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IFRvOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQ7IFdvb2QgU2NvdHQtQjA3
NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5v
emxhYnMub3JnDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRD
SCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
c3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQgYWx0
aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBPY3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3Jn
OyBXYW5nDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRG9uZ3NoZW5nLUI0MDUzNA0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogW1BBVENIIHY1IDQvNF0gcG93ZXJw
Yy84NXh4OiBhZGQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN5c2ZzIGZvcg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPGRvbmdzaGVuZy53YW5nQGZyZWVzY2FsZS5jb20+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gQWRkIGEgc3lzIGludGVyZmFjZSB0byBlbmFibGUvZGlhYmxlIHB3MjANCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN0YXRlIG9yIGFsdGl2ZWMgaWRsZSwgYW5kDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gY29udHJvbCB0aGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IHdhaXQgZW50cnkgdGltZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBFbmFibGUvRGlzYWJsZSBpbnRlcmZhY2U6DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAwLCBkaXNhYmxlLiAxLCBlbmFibGUuDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3
MjBfc3RhdGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC9zeXMvZGV2aWNlcy9zeXN0
ZW0vY3B1L2NwdVgvYWx0aXZlY19pZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2V0IHdhaXQgdGltZSBpbnRlcmZhY2U6KE5h
bm9zZWNvbmQpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lz
dGVtL2NwdS9jcHVYL3B3MjBfd2FpdF90aW1lDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2FsdGl2ZWNfaWRsZV93YQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gaXQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IF90
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbWUNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IEV4YW1wbGU6IEJhc2Ugb24gVEJmcmVxIGlzIDQxTUhaLg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gMX40OChucyk6IFRCWzYzXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gNDl+OTcobnMpOiBUQls2Ml0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
IDk4fjE5NShucyk6IFRCWzYxXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMTk2fjM5
MChucyk6IFRCWzYwXQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMzkxfjc4MChucyk6
IFRCWzU5XQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gNzgxfjE1NjAobnMpOiBUQls1
OF0gLi4uDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogV2FuZyBEb25nc2hlbmcNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29tPg0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAq
djU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDaGFuZ2UgZ2V0X2lkbGVfdGlja3Nf
Yml0IGZ1bmN0aW9uDQo+IGltcGxlbWVudGF0aW9uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICp2NDoNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IE1vdmUgY29kZSBmcm9tIDg1eHgvY29tbW9uLmMgdG8NCj4ga2VybmVs
L3N5c2ZzLmMuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gUmVtb3ZlIGhhc19wdzIwX2FsdGl2ZWNfaWRsZSBmdW5jdGlvbi4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiBDaGFuZ2Ugd2FpdCAiZW50cnlfYml0IiB0byB3YWl0IHRpbWUuDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBh
L2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBpbmRleA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMjdhOTBiOS4uMTBkMTEy
OCAxMDA2NDQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJw
Yy9rZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvYXJj
aC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBA
QCAtODUsNiArODUsMjg0IEBADQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBfX3NldHVw
KCJzbXQtc25vb3plLWRlbGF5PSIsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXBf
c210X3Nub296ZV9kZWxheSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
I2lmZGVmIENPTkZJR19GU0xfU09DDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2Rl
ZmluZSBNQVhfQklUCQkJCTYzDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHU2NCBwdzIwX3d0OyBzdGF0aWMgdTY0
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArYWx0aXZlY19pZGxlX3d0Ow0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
K3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2lkbGVfdGlja3NfYml0KHU2NA0KPiBucykgew0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1NjQgY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChucyA+
PSAxMDAwMCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2X3U2
NChucyArIDUwMCwgMTAwMCkgKg0KPiA+ID4gPiA+ID4gPiA+IHRiX3RpY2tzX3Blcl91c2VjOw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwllbHNlDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCQljeWNsZSA9IGRpdl91NjQobnMgKg0KPiA+ID4gdGJfdGlja3NfcGVyX3Vz
ZWMsDQo+ID4gPiA+ID4gPiAxMDAwKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFjeWNsZSkNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAwOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gaWxvZzIoY3lj
bGUpOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQgZG9fc2hvd19wd3JtZ3RjcjAodm9pZCAqdmFsKSB7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFsdWUgPSB2YWw7DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6
ZV90IHNob3dfcHcyMF9zdGF0ZShzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICtkZXZpY2UNCj4gPiA+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJ
CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlDQo+ID4gPiAqYXR0ciwNCj4gPiA+ID4gPiA+IGNoYXIN
Cj4gPiA+ID4gPiA+ID4gPiAqYnVmKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50
IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArZG9fc2hvd19wd3JtZ3RjcjAsICZ2YWx1ZSwg
MSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCXZhbHVlICY9IFBXUk1HVENSMF9QVzIwX1dBSVQ7DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXJldHVy
biBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2YWx1ZSA/IDEgOg0KPiA+ID4gMCk7IH0NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtz
dGF0aWMgdm9pZCBkb19zdG9yZV9wdzIwX3N0YXRlKHZvaWQgKnZhbCkgew0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwl1MzIgcHcyMF9zdGF0ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcHcyMF9zdGF0ZSA9IG1mc3By
KFNQUk5fUFdSTUdUQ1IwKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCp2YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ICsJCXB3MjBfc3RhdGUgfD0gUFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwkJcHcyMF9zdGF0ZSAmPSB+UFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJbXRz
cHIoU1BSTl9QV1JNR1RDUjAsIHB3MjBfc3RhdGUpOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNzaXplX3Qg
c3RvcmVfcHcyMF9zdGF0ZShzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtk
ZXZpY2UNCj4gPiA+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCXN0
cnVjdCBkZXZpY2VfYXR0cmlidXRlDQo+ID4gPiAqYXR0ciwNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QNCj4gPiA+IGNvdW50KQ0KPiA+
ID4gPiA+ID4gew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgdmFsdWU7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlk
Ow0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwlpZiAoa3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbHVlKSkNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAodmFsdWUgPiAx
KQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArZG9fc3RvcmVfcHcyMF9zdGF0ZSwgJnZhbHVlLCAxKTsNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJu
IGNvdW50OyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNzaXplX3Qgc2hvd19wdzIwX3dhaXRfdGltZShzdHJ1
Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtkZXZpY2UNCj4gPiA+ID4gPiAqZGV2
LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp
YnV0ZQ0KPiA+ID4gKmF0dHIsDQo+ID4gPiA+ID4gPiBjaGFyDQo+ID4gPiA+ID4gPiA+ID4gKmJ1
Zikgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgdmFsdWU7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCB0Yl9jeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ICsJczY0IHRpbWU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBjcHUgPSBkZXYt
PmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwlpZiAoIXB3MjBfd3QpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsDQo+ID4gPiA+ID4gPiBkb19zaG93
X3B3cm1ndGNyMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsmdmFsdWUsDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiAxKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
CXZhbHVlID0gKHZhbHVlICYNCj4gPiA+IFBXUk1HVENSMF9QVzIwX0VOVCkgPj4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+IAlQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8IChNQVhfQklUIC0gdmFsdWUpKSAqDQo+ID4gPiAy
Ow0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gSXMgdmFsdWUgPSAwIGFuZCB2YWx1ZSA9IDEgbGVnYWw/IFRoZXNlIHdpbGwNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiBtYWtlIHRiX2N5Y2xlID0gMCwNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGltZSA9IGRpdl91
NjQodGJfY3ljbGUgKiAxMDAwLA0KPiA+ID4gPiA+ID4gdGJfdGlja3NfcGVyX3VzZWMpDQo+ID4g
PiA+ID4gPiA+ID4gLSAxOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gQW5kIHRpbWUgPSAtMTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5kIG9m
IHRoZSBmdW5jdGlvbiwgOikNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gInJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHRpbWUgPiAwID8g
dGltZSA6DQo+IDApOyINCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBJIGtub3cgeW91IHJldHVybiAwIGlmIHZhbHVlID0gMC8xLCBteSBxdWVzdGlvbg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gd2FzIHRoYXQsIGlzIHRoaXMgY29ycmVjdCBhcyBwZXIg
c3BlY2lmaWNhdGlvbj8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBBaGgsIGFsc28gZm9yICJ2YWx1ZSIgdXB0byA3IHlvdSB3aWxsIHJldHVybiAwLCBu
bz8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSWYgdmFs
dWUgPSAwLCBNQVhfQklUIC0gdmFsdWUgPSA2MyB0Yl9jeWNsZSA9DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gMHhmZmZmZmZmZl9mZmZmZmZmZiwgdGJfY3ljbGUgKiAxMDAwIHdpbGwgb3ZlcmZsb3cs
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYnV0IHRoaXMNCj4gPiA+ID4gPiA+IHNpdHVhdGlvbiBp
cyBub3QgcG9zc2libGUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQmVjYXVzZSBpZiB0aGUgInZh
bHVlID0gMCIgbWVhbnMgdGhpcyBmZWF0dXJlIHdpbGwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBi
ZQ0KPiA+ID4gPiA+ICJkaXNhYmxlIi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3cgVGhlIGRl
ZmF1bHQgd2FpdCBiaXQgaXMgNTAoTUFYX0JJVCAtIHZhbHVlLA0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IHZhbHVlID0gMTMpLCB0aGUgUFcyMC9BbHRpdmVjIElkbGUgd2FpdCBlbnRyeSB0aW1lDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gaXMgYWJvdXQgMW1zLCB0aGlzIHRpbWUgaXMgdmVyeSBsb25n
IGZvciB3YWl0IGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aW1lLCBhbmQgaXQncyBjYW5u
b3QgYmUgaW5jcmVhc2VkKG1lYW5zIChNQVhfQklUDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSB2
YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gY2Fubm90IGdyZWF0ZXIgdGhhbiA1MCkuDQo+ID4g
PiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFdoYXQgeW91IHNhaWQgaXMgbm90
IG9idmlvdXMgZnJvbSBjb2RlIGFuZCBzbyBhdCBsZWFzdA0KPiA+ID4gPiA+ID4gPiA+ID4gPiB3
cml0ZSBhIGNvbW1lbnQgdGhhdCB2YWx1ZSB3aWxsIGJlIGFsd2F5cyA+PSAxMyBvcg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiB2YWx1ZSB3aWxsIG5ldmVyIGJlIGxlc3MgdGhhbiA8IDggYW5kIGJlbG93
DQo+ID4gPiA+ID4gPiA+ID4gPiA+IGNhbGN1bGF0aW9uIHdpbGwgbm90IG92ZXJmbG93LiBtYXkg
YmUgZXJyb3Igb3V0IGlmDQo+IHZhbHVlIGlzIGxlc3MgdGhhbiA4Lg0KPiA+ID4gPiA+ID4gPiA+
ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gVGhlICJ2YWx1ZSIgbGVzcyB0aGFuIDEwLCB0aGlzIHdp
bGwgb3ZlcmZsb3cuDQo+ID4gPiA+ID4gPiA+ID4gPiBUaGVyZSBpcyBub3QgZXJyb3IsIFRoZSBj
b2RlIEkga25ldyBpdCBjb3VsZCBub3QgYmUgbGVzcw0KPiA+ID4gPiA+ID4gPiA+ID4gdGhhbiAx
MCwgdGhhdCdzIHdoeSBJIHVzZSB0aGUgZm9sbG93aW5nIGNvZGUuIDopDQo+ID4gPiA+ID4gPiA+
ID4NCj4gPiA+ID4gPiA+ID4gPiBJIGFtIHNvcnJ5IHRvIHBlcnNpc3QgYnV0IHRoaXMgaXMgbm90
IGFib3V0IHdoYXQgeW91IGtub3csDQo+ID4gPiA+ID4gPiA+ID4gdGhpcyBpcyBhYm91dCBob3cg
Y29kZSBpcyByZWFkIGFuZCBjb2RlIGRvZXMgbm90IHNheSB3aGF0DQo+ID4gPiA+ID4gPiA+ID4g
eW91IGtub3csIHNvIGFkZCBhIGNvbW1lbnQgYXQgbGVhc3QgYW5kIGVycm9yIG91dC93YXJuDQo+
ID4gPiA+ID4gPiA+ID4gd2hlbiAidmFsdWUiIGlzIGxlc3MgdGhhbiBhDQo+ID4gPiA+ID4gPiBj
ZXJ0YWluIG51bWJlci4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBTb3JyeSBmb3Ig
dGhlIGxhdGUgdG8gcmVzcG9uc2UgdGhlIG1haWwuIElmIGl0IGNhdXNlZA0KPiA+ID4gPiA+ID4g
PiBjb25mdXNpb24sIHdlIGNhbg0KPiA+ID4gPiA+ID4gYWRkIGEgY29tbWVudC4NCj4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY29tbWVudD8NCj4g
PiA+ID4gPiA+ID4gLyoNCj4gPiA+ID4gPiA+ID4gICogSWYgdGhlICJ2YWx1ZSIgbGVzcyB0aGFu
IDEwLCB0aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4gPiA+ID4gPiA+ICAqIEZyb20gYmVuY2htYXJr
IHRlc3QsIHRoZSBkZWZhdWx0IHdhaXQgYml0IHdpbGwgbm90IGJlIHNldA0KPiA+ID4gPiA+ID4g
PiBsZXNzIHRoYW4NCj4gPiA+ID4gPiA+IDEwYml0Lg0KPiA+ID4gPiA+ID4gPiAgKiBCZWNhdXNl
IDEwIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgd2FpdCBlbnRyeSB0aW1lIGlzDQo+ID4gPiA+ID4g
PiA+IDQzOTM3NTU3MzQwMTk5OTYwOShucyksDQo+ID4gPiA+ID4gPiA+ICAqIGZvciB3YWl0LWVu
dHJ5LWlkbGUgdGltZSB0aGlzIHZhbHVlIGxvb2tzIHRvbyBsb25nLCBhbmQNCj4gPiA+ID4gPiA+
ID4gd2UgY2Fubm90IHVzZSB0aG9zZQ0KPiA+ID4gPiA+ID4gPiAgKiAibG9uZyIgdGltZSBhcyBh
IGRlZmF1bHQgd2FpdC1lbnRyeSB0aW1lLiBTbyBvdmVyZmxvdw0KPiA+ID4gPiA+ID4gPiBjb3Vs
ZCBub3QgaGF2ZSBoYXBwZW5lZA0KPiA+ID4gPiA+ID4gPiAgKiBhbmQgd2UgdXNlIHRoaXMgY2Fs
Y3VsYXRpb24gbWV0aG9kIHRvIGdldCB3YWl0LWVudHJ5LWlkbGUNCj4gdGltZS4NCj4gPiA+ID4g
PiA+ID4gICovDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSWYgdGhlcmUncyB0byBiZSBhIGxp
bWl0IG9uIHRoZSB0aW1lcyB3ZSBhY2NlcHQsIG1ha2UgaXQNCj4gZXhwbGljaXQuDQo+ID4gPiA+
ID4gPiBDaGVjayBmb3IgaXQgYmVmb3JlIGRvaW5nIGFueSBjb252ZXJzaW9ucywgYW5kIHJldHVy
biBhbiBlcnJvcg0KPiA+ID4gPiA+ID4gaWYgdXNlcnNwYWNlIHRyaWVzIHRvIHNldCBpdC4NCj4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhlIGJyYW5jaCBvbmx5IHVzZSB0byByZWFkIGRlZmF1bHQg
d2FpdC1lbnRyeS10aW1lLg0KPiA+ID4gPiA+IFdlIGhhdmUgbm8gbGltaXQgdGhlIHVzZXIncyBp
bnB1dCwgYW5kIHdlIGNhbid0IHJlc3RyaWN0LiBPbmNlDQo+ID4gPiA+ID4gdGhlIHVzZXIgc2V0
IHRoZSB3YWl0LWVudHJ5LXRpbWUsIHRoZSBjb2RlIHdpbGwgZG8gYW5vdGhlciBicmFuY2guDQo+
ID4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gSGkgc2NvdHQsDQo+ID4gPiA+IERvIHlvdSBoYXZl
IGFueSBjb21tZW50cyBhYm91dCB0aGlzIHBhdGNoPw0KPiA+ID4gPiBJIHdpbGwgYWRkIHRoZSBj
b21tZW50IGFuZCBzZW5kIHRoaXMgcGF0Y2ggYWdhaW4uDQo+ID4gPg0KPiA+ID4gV2hhdCBkbyB5
b3UgbWVhbiBieSAiYW5kIHdlIGNhbid0IHJlc3RyaWN0Ij8gIFdoeSBub3Q/DQo+ID4gPg0KPiA+
ID4gV2h5IGlzIGl0IG9ubHkgdXNlZCB0byByZWFkIHRoZSBkZWZhdWx0LCBhbmQgbm90IHRoZSBj
dXJyZW50IHZhbHVlPw0KPiA+ID4NCj4gPiBXZSBhbHJlYWR5IGhhdmUgYSB2YXJpYWJsZSB3aGlj
aCB2YWx1ZSBpcyBzZXQgYnkgdGhlIHVzZXIsIGFzIHdlIGhhdmUNCj4gPiBkaXNjdXNzZWQgYmVm
b3JlLg0KPiA+DQo+ID4gV2hlbiB0aGUgc3lzdGVtIGJvb3QtdXAuIEJlZm9yZSB1c2VyIHNldCB0
aGUgd2FpdC1lbnRyeS10aW1lLCB3ZSBuZWVkDQo+ID4gdG8gcmV0dXJuIGEgZGVmYXVsdCB3YWl0
LWVudHJ5LXRpbWUsIGlmIHRoZSB1c2VyIHJlYWQgdGhpcw0KPiA+IHN5cy1pbnRlcmZhY2UuIFRo
ZSBkZWZhdWx0IHdhaXQtZW50cnktdGltZSBpcyBjb252ZXJ0ZWQgYnkgd2FpdC1iaXQuDQo+ID4N
Cj4gPiBPbmNlIHRoZSB1c2VyIHNldCB0aGUgc3lzLWludGVyZmFjZSwgYSB2YXJpYWJsZSB3aWxs
IGJlIHVzZWQgdG8gc2F2ZQ0KPiA+IGl0LiBBbmQgd2hlbiB0aGUgdXNlciByZWFkIHN5cy1pbnRl
cmZhY2Ugd2Ugd2lsbCByZXR1cm4gYmFjayB0aGUNCj4gdmFyaWFibGUuDQo+IA0KPiBXaGlsZSB3
ZSBhcmUgbm90ICJyZXN0cmljdGluZyB1c2VyIGRlZmluZWQgdmFsdWUiIG9yICJkZWZpbmUgc2Ft
ZQ0KPiByZXN0cmljdGlvbiBmb3IgdXNlciBkZWZpbmVkIGFuZCBkZWZhdWx0IiwgY2FuIHdlIGhh
dmUgb25seSBvbmUgZmxvdyBvZg0KPiBjYWxjdWxhdGlvbiBhbmQgc2V0dGluZyByYXRoZXIgdGhh
biBjb25kaXRpb25hbCBiYXNlZCBvbiB1c2VyIGhhdmUgc2V0IG9yDQo+IG5vdCBzZXQ/DQo+IA0K
WWVzLCB3ZSBjYW4gZG8gdGhhdC4NCklmIHdlIHdhbnQgdG8gdXNlIG9uZSBmbG93IHRvIGhhbmRs
ZSBpdC4gV2Ugc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoNCg0KI2lmZGVmIENPTkZJ
R19GU0xfU09DDQojaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KI2VuZGlmDQoNCnN0YXRpYyB1NjQg
KnB3MjBfd3Q7DQpzdGF0aWMgdTY0ICphbHRpdmVjX2lkbGVfd3Q7DQoNCnN0YXRpYyBzc2l6ZV90
IHNob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm
KQ0Kew0KCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHB3MjBfd3RbZGV2LT5pZF0pOw0K
fQ0KDQpzdGF0aWMgc3NpemVfdCBzdG9yZV9wdzIwX3dhaXRfdGltZShzdHJ1Y3QgZGV2aWNlICpk
ZXYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmli
dXRlICphdHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpi
dWYsIHNpemVfdCBjb3VudCkNCnsNCi4uLg0KcHcyMF93dFtjcHVdID0gdmFsdWU7DQouLi4NCn0N
Cg0Kc3RhdGljIHNzaXplX3Qgc2hvd19hbHRpdmVjX2lkbGVfd2FpdF90aW1lKHN0cnVjdCBkZXZp
Y2UgKmRldiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9h
dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCnsNCglyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1
XG4iLCBhbHRpdmVjX2lkbGVfd3RbZGV2LT5pZF0pOw0KfQ0KDQpzdGF0aWMgc3NpemVfdCBzdG9y
ZV9hbHRpdmVjX2lkbGVfd2FpdF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50
KQ0Kew0KLi4uDQphbHRpdmVjX2lkbGVfd3RbY3B1XSA9IHZhbHVlOw0KLi4uDQp9DQoNCnN0YXRp
YyB2b2lkIHJlZ2lzdGVyX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkNCnsNCi4uLg0KI2lm
ZGVmIENPTkZJR19GU0xfU09DDQogICAgICAgIHUzMiB2YWx1ZSwgcHcyMF92YWx1ZSwgYWx0aXZl
Y192YWx1ZTsNCiAgICAgICAgdTY0IHRiX2N5Y2xlOw0KI2VuZGlmDQouLi4NCiNpZmRlZiBDT05G
SUdfRlNMX1NPQw0KICAgICAgICBpZiAoUFZSX1ZFUihjdXJfY3B1X3NwZWMtPnB2cl92YWx1ZSkg
PT0gUFZSX1ZFUl9FNjUwMCkgew0KICAgICAgICAgICAgICAgIGRldmljZV9jcmVhdGVfZmlsZShz
LCAmZGV2X2F0dHJfcHcyMF9zdGF0ZSk7DQogICAgICAgICAgICAgICAgZGV2aWNlX2NyZWF0ZV9m
aWxlKHMsICZkZXZfYXR0cl9wdzIwX3dhaXRfdGltZSk7DQoNCiAgICAgICAgICAgICAgICBkZXZp
Y2VfY3JlYXRlX2ZpbGUocywgJmRldl9hdHRyX2FsdGl2ZWNfaWRsZSk7DQogICAgICAgICAgICAg
ICAgZGV2aWNlX2NyZWF0ZV9maWxlKHMsICZkZXZfYXR0cl9hbHRpdmVjX2lkbGVfd2FpdF90aW1l
KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghcHcyMF93dCkNCiAgICAgICAgICAgICAgICBw
dzIwX3d0ID0ga3phbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKCpwdzIwX3d0KSwgR0ZQX0tFUk5F
TCk7DQoNCgkgIGlmICghYWx0aXZlY19pZGxlX3d0KQ0KCQkgICAgYWx0aXZlY19pZGxlX3d0ID0g
a3phbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKCphbHRpdmVjX2lkbGVfd3QpLCBHRlBfS0VSTkVM
KTsNCg0KICAgICAgICBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBkb19zaG93X3B3cm1n
dGNyMCwgJnZhbHVlLCAxKTsNCg0KICAgICAgICBwdzIwX3ZhbHVlID0gKHZhbHVlICYgUFdSTUdU
Q1IwX1BXMjBfRU5UKSA+PiBQV1JNR1RDUjBfUFcyMF9FTlRfU0hJRlQ7DQogICAgICAgIHRiX2N5
Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSBwdzIwX3ZhbHVlKSkgKiAyOw0KICAgICAgICBwdzIwX3d0
W2NwdV0gPSBkaXZfdTY0KHRiX2N5Y2xlICogMTAwMCwgdGJfdGlja3NfcGVyX3VzZWMpIC0gMTsN
Cg0KICAgICAgICBhbHRpdmVjX3ZhbHVlID0gKHZhbHVlICYgUFdSTUdUQ1IwX0FWX0lETEVfQ05U
KSA+PiBQV1JNR1RDUjBfQVZfSURMRV9DTlRfU0hJRlQ7DQogICAgICAgIHRiX2N5Y2xlID0gKDEg
PDwgKE1BWF9CSVQgLSBhbHRpdmVjX3ZhbHVlKSkgKiAyOw0KICAgICAgICBhbHRpdmVjX2lkbGVf
d3RbY3B1XSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLCB0Yl90aWNrc19wZXJfdXNlYykgLSAx
Ow0KI2VuZGlmDQouLi4NCn0NCg0K

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-06  7:50                             ` Dongsheng Wang
@ 2013-11-07  1:20                               ` Scott Wood
  2013-11-07  2:17                                 ` Dongsheng Wang
  2013-11-11  2:13                                 ` Dongsheng Wang
  0 siblings, 2 replies; 34+ messages in thread
From: Scott Wood @ 2013-11-07  1:20 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, linuxppc-dev, Bhushan Bharat-R65777

On Wed, 2013-11-06 at 01:50 -0600, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Wednesday, November 06, 2013 1:25 PM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > altivec idle
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Wang Dongsheng-B40534
> > > Sent: Tuesday, November 05, 2013 8:40 AM
> > > To: Wood Scott-B07421
> > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org
> > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and
> > > altivec idle
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Wood Scott-B07421
> > > > Sent: Tuesday, November 05, 2013 5:52 AM
> > > > To: Wang Dongsheng-B40534
> > > > Cc: Wood Scott-B07421; Bhushan Bharat-R65777; linuxppc-
> > > > dev@lists.ozlabs.org
> > > > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state
> > > > and altivec idle
> > > >
> > > > On Sun, 2013-11-03 at 22:04 -0600, Wang Dongsheng-B40534 wrote:
> > > > > > -----Original Message-----
> > > > > > From: Wang Dongsheng-B40534
> > > > > > Sent: Monday, October 21, 2013 11:11 AM
> > > > > > To: Wood Scott-B07421
> > > > > > Cc: Bhushan Bharat-R65777; linuxppc-dev@lists.ozlabs.org
> > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > state and altivec idle
> > > > > >
> > > > > >
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Wood Scott-B07421
> > > > > > > Sent: Saturday, October 19, 2013 3:22 AM
> > > > > > > To: Wang Dongsheng-B40534
> > > > > > > Cc: Bhushan Bharat-R65777; Wood Scott-B07421; linuxppc-
> > > > > > > dev@lists.ozlabs.org
> > > > > > > Subject: Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20
> > > > > > > state and altivec idle
> > > > > > >
> > > > > > > On Thu, 2013-10-17 at 22:02 -0500, Wang Dongsheng-B40534 wrote:
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > > Sent: Thursday, October 17, 2013 2:46 PM
> > > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for
> > > > > > > > > pw20 state and altivec idle
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > > > > Sent: Thursday, October 17, 2013 11:22 AM
> > > > > > > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs
> > > > > > > > > > > > for
> > > > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > > > > > > Sent: Thursday, October 17, 2013 11:20 AM
> > > > > > > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add
> > > > > > > > > > > > > sysfs for
> > > > > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > > > > > > Sent: Thursday, October 17, 2013 8:16 AM
> > > > > > > > > > > > > > To: Bhushan Bharat-R65777; Wood Scott-B07421
> > > > > > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add
> > > > > > > > > > > > > > sysfs for
> > > > > > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > > > > From: Bhushan Bharat-R65777
> > > > > > > > > > > > > > > Sent: Thursday, October 17, 2013 1:01 AM
> > > > > > > > > > > > > > > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > > > > > > > > > > > > > > Cc: linuxppc-dev@lists.ozlabs.org
> > > > > > > > > > > > > > > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add
> > > > > > > > > > > > > > > sysfs for
> > > > > > > > > > > > > > > pw20 state and altivec idle
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > > > > > From: Wang Dongsheng-B40534
> > > > > > > > > > > > > > > > Sent: Tuesday, October 15, 2013 2:51 PM
> > > > > > > > > > > > > > > > To: Wood Scott-B07421
> > > > > > > > > > > > > > > > Cc: Bhushan Bharat-R65777;
> > > > > > > > > > > > > > > > linuxppc-dev@lists.ozlabs.org; Wang
> > > > > > > > > > > > > > > Dongsheng-B40534
> > > > > > > > > > > > > > > > Subject: [PATCH v5 4/4] powerpc/85xx: add
> > > > > > > > > > > > > > > > sysfs for
> > > > > > > > > > > > > > > > pw20 state and
> > > > > > > > > > > > > > > altivec idle
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > From: Wang Dongsheng
> > > > > > > > > > > > > > > > <dongsheng.wang@freescale.com>
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Add a sys interface to enable/diable pw20
> > > > > > > > > > > > > > > > state or altivec idle, and
> > > > > > > > > > > > > > > control the
> > > > > > > > > > > > > > > > wait entry time.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Enable/Disable interface:
> > > > > > > > > > > > > > > > 0, disable. 1, enable.
> > > > > > > > > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_state
> > > > > > > > > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Set wait time interface:(Nanosecond)
> > > > > > > > > > > > > > > > /sys/devices/system/cpu/cpuX/pw20_wait_time
> > > > > > > > > > > > > > > > /sys/devices/system/cpu/cpuX/altivec_idle_wa
> > > > > > > > > > > > > > > > it
> > > > > > > > > > > > > > > > _t
> > > > > > > > > > > > > > > > ime
> > > > > > > > > > > > > > > > Example: Base on TBfreq is 41MHZ.
> > > > > > > > > > > > > > > > 1~48(ns): TB[63]
> > > > > > > > > > > > > > > > 49~97(ns): TB[62]
> > > > > > > > > > > > > > > > 98~195(ns): TB[61]
> > > > > > > > > > > > > > > > 196~390(ns): TB[60]
> > > > > > > > > > > > > > > > 391~780(ns): TB[59]
> > > > > > > > > > > > > > > > 781~1560(ns): TB[58] ...
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Signed-off-by: Wang Dongsheng
> > > > > > > > > > > > > > > > <dongsheng.wang@freescale.com>
> > > > > > > > > > > > > > > > ---
> > > > > > > > > > > > > > > > *v5:
> > > > > > > > > > > > > > > > Change get_idle_ticks_bit function
> > implementation.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > *v4:
> > > > > > > > > > > > > > > > Move code from 85xx/common.c to
> > kernel/sysfs.c.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Remove has_pw20_altivec_idle function.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Change wait "entry_bit" to wait time.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > diff --git a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > > > > > b/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > > > > index
> > > > > > > > > > > > > > > > 27a90b9..10d1128 100644
> > > > > > > > > > > > > > > > --- a/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > > > > > +++ b/arch/powerpc/kernel/sysfs.c
> > > > > > > > > > > > > > > > @@ -85,6 +85,284 @@
> > > > > > > > > > > > > > > > __setup("smt-snooze-delay=",
> > > > > > > > > > > > > > > setup_smt_snooze_delay);
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >  #endif /* CONFIG_PPC64 */
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > +#ifdef CONFIG_FSL_SOC
> > > > > > > > > > > > > > > > +#define MAX_BIT				63
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static u64 pw20_wt; static u64
> > > > > > > > > > > > > > > > +altivec_idle_wt;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static unsigned int get_idle_ticks_bit(u64
> > ns) {
> > > > > > > > > > > > > > > > +	u64 cycle;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (ns >= 10000)
> > > > > > > > > > > > > > > > +		cycle = div_u64(ns + 500, 1000) *
> > > > > > > > > tb_ticks_per_usec;
> > > > > > > > > > > > > > > > +	else
> > > > > > > > > > > > > > > > +		cycle = div_u64(ns *
> > > > tb_ticks_per_usec,
> > > > > > > 1000);
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (!cycle)
> > > > > > > > > > > > > > > > +		return 0;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	return ilog2(cycle); }
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static void do_show_pwrmgtcr0(void *val) {
> > > > > > > > > > > > > > > > +	u32 *value = val;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	*value = mfspr(SPRN_PWRMGTCR0); }
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static ssize_t show_pw20_state(struct
> > > > > > > > > > > > > > > > +device
> > > > *dev,
> > > > > > > > > > > > > > > > +				struct device_attribute
> > > > *attr,
> > > > > > > char
> > > > > > > > > *buf) {
> > > > > > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	smp_call_function_single(cpu,
> > > > > > > > > > > > > > > > +do_show_pwrmgtcr0, &value, 1);
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	value &= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	return sprintf(buf, "%u\n", value ? 1 :
> > > > 0); }
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static void do_store_pw20_state(void *val) {
> > > > > > > > > > > > > > > > +	u32 *value = val;
> > > > > > > > > > > > > > > > +	u32 pw20_state;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	pw20_state = mfspr(SPRN_PWRMGTCR0);
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (*value)
> > > > > > > > > > > > > > > > +		pw20_state |= PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > > > > > +	else
> > > > > > > > > > > > > > > > +		pw20_state &= ~PWRMGTCR0_PW20_WAIT;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	mtspr(SPRN_PWRMGTCR0, pw20_state); }
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static ssize_t store_pw20_state(struct
> > > > > > > > > > > > > > > > +device
> > > > *dev,
> > > > > > > > > > > > > > > > +				struct device_attribute
> > > > *attr,
> > > > > > > > > > > > > > > > +				const char *buf, size_t
> > > > count)
> > > > > > > {
> > > > > > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (kstrtou32(buf, 0, &value))
> > > > > > > > > > > > > > > > +		return -EINVAL;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (value > 1)
> > > > > > > > > > > > > > > > +		return -EINVAL;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	smp_call_function_single(cpu,
> > > > > > > > > > > > > > > > +do_store_pw20_state, &value, 1);
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	return count; }
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +static ssize_t show_pw20_wait_time(struct
> > > > > > > > > > > > > > > > +device
> > > > > > *dev,
> > > > > > > > > > > > > > > > +				struct device_attribute
> > > > *attr,
> > > > > > > char
> > > > > > > > > *buf) {
> > > > > > > > > > > > > > > > +	u32 value;
> > > > > > > > > > > > > > > > +	u64 tb_cycle;
> > > > > > > > > > > > > > > > +	s64 time;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	unsigned int cpu = dev->id;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +	if (!pw20_wt) {
> > > > > > > > > > > > > > > > +		smp_call_function_single(cpu,
> > > > > > > do_show_pwrmgtcr0,
> > > > > > > > > > > > > > > > +&value,
> > > > > > > > > > > > > 1);
> > > > > > > > > > > > > > > > +		value = (value &
> > > > PWRMGTCR0_PW20_ENT) >>
> > > > > > > > > > > > > > > > +
> > > > 	PWRMGTCR0_PW20_ENT_SHIFT;
> > > > > > > > > > > > > > > > +
> > > > > > > > > > > > > > > > +		tb_cycle = (1 << (MAX_BIT - value)) *
> > > > 2;
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Is value = 0 and value = 1 legal? These will
> > > > > > > > > > > > > > > make tb_cycle = 0,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > +		time = div_u64(tb_cycle * 1000,
> > > > > > > tb_ticks_per_usec)
> > > > > > > > > - 1;
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > And time = -1;
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > Please look at the end of the function, :)
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > "return sprintf(buf, "%llu\n", time > 0 ? time :
> > 0);"
> > > > > > > > > > > > >
> > > > > > > > > > > > > I know you return 0 if value = 0/1, my question
> > > > > > > > > > > > > was that, is this correct as per specification?
> > > > > > > > > > > > >
> > > > > > > > > > > > > Ahh, also for "value" upto 7 you will return 0, no?
> > > > > > > > > > > > >
> > > > > > > > > > > > If value = 0, MAX_BIT - value = 63 tb_cycle =
> > > > > > > > > > > > 0xffffffff_ffffffff, tb_cycle * 1000 will overflow,
> > > > > > > > > > > > but this
> > > > > > > situation is not possible.
> > > > > > > > > > > > Because if the "value = 0" means this feature will
> > > > > > > > > > > > be
> > > > > > "disable".
> > > > > > > > > > > > Now The default wait bit is 50(MAX_BIT - value,
> > > > > > > > > > > > value = 13), the PW20/Altivec Idle wait entry time
> > > > > > > > > > > > is about 1ms, this time is very long for wait idle
> > > > > > > > > > > > time, and it's cannot be increased(means (MAX_BIT
> > > > > > > > > > > > - value)
> > > > > > > > > > > cannot greater than 50).
> > > > > > > > > > >
> > > > > > > > > > > What you said is not obvious from code and so at least
> > > > > > > > > > > write a comment that value will be always >= 13 or
> > > > > > > > > > > value will never be less than < 8 and below
> > > > > > > > > > > calculation will not overflow. may be error out if
> > value is less than 8.
> > > > > > > > > > >
> > > > > > > > > > The "value" less than 10, this will overflow.
> > > > > > > > > > There is not error, The code I knew it could not be less
> > > > > > > > > > than 10, that's why I use the following code. :)
> > > > > > > > >
> > > > > > > > > I am sorry to persist but this is not about what you know,
> > > > > > > > > this is about how code is read and code does not say what
> > > > > > > > > you know, so add a comment at least and error out/warn
> > > > > > > > > when "value" is less than a
> > > > > > > certain number.
> > > > > > > > >
> > > > > > > > Sorry for the late to response the mail. If it caused
> > > > > > > > confusion, we can
> > > > > > > add a comment.
> > > > > > > >
> > > > > > > > How about the following comment?
> > > > > > > > /*
> > > > > > > >  * If the "value" less than 10, this will overflow.
> > > > > > > >  * From benchmark test, the default wait bit will not be set
> > > > > > > > less than
> > > > > > > 10bit.
> > > > > > > >  * Because 10 bit corresponds to the wait entry time is
> > > > > > > > 439375573401999609(ns),
> > > > > > > >  * for wait-entry-idle time this value looks too long, and
> > > > > > > > we cannot use those
> > > > > > > >  * "long" time as a default wait-entry time. So overflow
> > > > > > > > could not have happened
> > > > > > > >  * and we use this calculation method to get wait-entry-idle
> > time.
> > > > > > > >  */
> > > > > > >
> > > > > > > If there's to be a limit on the times we accept, make it
> > explicit.
> > > > > > > Check for it before doing any conversions, and return an error
> > > > > > > if userspace tries to set it.
> > > > > > >
> > > > > > The branch only use to read default wait-entry-time.
> > > > > > We have no limit the user's input, and we can't restrict. Once
> > > > > > the user set the wait-entry-time, the code will do another branch.
> > > > > >
> > > > >
> > > > > Hi scott,
> > > > > Do you have any comments about this patch?
> > > > > I will add the comment and send this patch again.
> > > >
> > > > What do you mean by "and we can't restrict"?  Why not?
> > > >
> > > > Why is it only used to read the default, and not the current value?
> > > >
> > > We already have a variable which value is set by the user, as we have
> > > discussed before.
> > >
> > > When the system boot-up. Before user set the wait-entry-time, we need
> > > to return a default wait-entry-time, if the user read this
> > > sys-interface. The default wait-entry-time is converted by wait-bit.
> > >
> > > Once the user set the sys-interface, a variable will be used to save
> > > it. And when the user read sys-interface we will return back the
> > variable.
> > 
> > While we are not "restricting user defined value" or "define same
> > restriction for user defined and default", can we have only one flow of
> > calculation and setting rather than conditional based on user have set or
> > not set?
> > 
> Yes, we can do that.
> If we want to use one flow to handle it. We should do the following changes:
> 
> #ifdef CONFIG_FSL_SOC
> #include <linux/slab.h>
> #endif

Don't ifdef headers.

> static u64 *pw20_wt;
> static u64 *altivec_idle_wt;
> 
> static ssize_t show_pw20_wait_time(struct device *dev,
>                                 struct device_attribute *attr, char *buf)
> {
> 	return sprintf(buf, "%llu\n", pw20_wt[dev->id]);
> }
> 
> static ssize_t store_pw20_wait_time(struct device *dev,
>                                 struct device_attribute *attr,
>                                 const char *buf, size_t count)
> {
> ...
> pw20_wt[cpu] = value;
> ...
> }
> 
> static ssize_t show_altivec_idle_wait_time(struct device *dev,
>                                 struct device_attribute *attr, char *buf)
> {
> 	return sprintf(buf, "%llu\n", altivec_idle_wt[dev->id]);
> }
> 
> static ssize_t store_altivec_idle_wait_time(struct device *dev,
>                                 struct device_attribute *attr,
>                                 const char *buf, size_t count)
> {
> ...
> altivec_idle_wt[cpu] = value;
> ...
> }
> 
> static void register_cpu_online(unsigned int cpu)
> {
> ...
> #ifdef CONFIG_FSL_SOC
>         u32 value, pw20_value, altivec_value;
>         u64 tb_cycle;
> #endif
> ...
> #ifdef CONFIG_FSL_SOC
>         if (PVR_VER(cur_cpu_spec->pvr_value) == PVR_VER_E6500) {
>                 device_create_file(s, &dev_attr_pw20_state);
>                 device_create_file(s, &dev_attr_pw20_wait_time);
> 
>                 device_create_file(s, &dev_attr_altivec_idle);
>                 device_create_file(s, &dev_attr_altivec_idle_wait_time);
>         }
> 
>         if (!pw20_wt)
>                 pw20_wt = kzalloc(nr_cpu_ids * sizeof(*pw20_wt), GFP_KERNEL);
> 
> 	  if (!altivec_idle_wt)
> 		    altivec_idle_wt = kzalloc(nr_cpu_ids * sizeof(*altivec_idle_wt), GFP_KERNEL);
> 
>         smp_call_function_single(cpu, do_show_pwrmgtcr0, &value, 1);
> 
>         pw20_value = (value & PWRMGTCR0_PW20_ENT) >> PWRMGTCR0_PW20_ENT_SHIFT;
>         tb_cycle = (1 << (MAX_BIT - pw20_value)) * 2;
>         pw20_wt[cpu] = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> 
>         altivec_value = (value & PWRMGTCR0_AV_IDLE_CNT) >> PWRMGTCR0_AV_IDLE_CNT_SHIFT;
>         tb_cycle = (1 << (MAX_BIT - altivec_value)) * 2;
>         altivec_idle_wt[cpu] = div_u64(tb_cycle * 1000, tb_ticks_per_usec) - 1;
> #endif
> ...
> }

Move this stuff to its own function.  The only ifdef should be in a
header that provides an inline stub when it's not available.

Could you explain what you're changing and why?  A diff from your
previous patch would help.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-07  1:20                               ` Scott Wood
@ 2013-11-07  2:17                                 ` Dongsheng Wang
  2013-11-11  2:13                                 ` Dongsheng Wang
  1 sibling, 0 replies; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-07  2:17 UTC (permalink / raw)
  To: Scott Wood; +Cc: Bharat Bhushan, linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290dC1CMDc0
MjENCj4gU2VudDogVGh1cnNkYXksIE5vdmVtYmVyIDA3LCAyMDEzIDk6MjAgQU0NCj4gVG86IFdh
bmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiBDYzogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3OyBXb29kIFNj
b3R0LUIwNzQyMTsgbGludXhwcGMtDQo+IGRldkBsaXN0cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6
IFJlOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0
ZSBhbmQNCj4gYWx0aXZlYyBpZGxlDQo+IA0KPiBPbiBXZWQsIDIwMTMtMTEtMDYgYXQgMDE6NTAg
LTA2MDAsIFdhbmcgRG9uZ3NoZW5nLUI0MDUzNCB3cm90ZToNCj4gPg0KPiA+ID4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+
ID4gU2VudDogV2VkbmVzZGF5LCBOb3ZlbWJlciAwNiwgMjAxMyAxOjI1IFBNDQo+ID4gPiBUbzog
V2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gQ2M6IGxpbnV4
cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQv
NF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+IGFuZCBhbHRp
dmVjIGlkbGUNCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCj4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+IFNl
bnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDA1LCAyMDEzIDg6NDAgQU0NCj4gPiA+ID4gVG86IFdvb2Qg
U2NvdHQtQjA3NDIxDQo+ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80
XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZQ0KPiA+ID4gPiBhbmQgYWx0
aXZlYyBpZGxlDQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+
ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDA1LCAyMDEzIDU6NTIgQU0NCj4gPiA+ID4g
PiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gQ2M6IFdvb2QgU2NvdHQtQjA3
NDIxOyBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLQ0KPiA+ID4gPiA+IGRldkBsaXN0
cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2Vy
cGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwDQo+ID4gPiA+ID4gc3RhdGUgYW5kIGFsdGl2ZWMg
aWRsZQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gT24gU3VuLCAyMDEzLTExLTAzIGF0IDIyOjA0IC0w
NjAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQgd3JvdGU6DQo+ID4gPiA+ID4gPiA+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0
MDUzNA0KPiA+ID4gPiA+ID4gPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMjEsIDIwMTMgMTE6MTEg
QU0NCj4gPiA+ID4gPiA+ID4gVG86IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiA+IENj
OiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+
ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFk
ZCBzeXNmcyBmb3IgcHcyMA0KPiA+ID4gPiA+ID4gPiBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+
ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXb29k
IFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFNhdHVyZGF5LCBPY3RvYmVyIDE5
LCAyMDEzIDM6MjIgQU0NCj4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0
DQo+ID4gPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgV29vZCBTY290dC1C
MDc0MjE7IGxpbnV4cHBjLQ0KPiA+ID4gPiA+ID4gPiA+IGRldkBsaXN0cy5vemxhYnMub3JnDQo+
ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDog
YWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRs
ZQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gT24gVGh1LCAyMDEzLTEwLTE3IGF0
IDIyOjAyIC0wNTAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gd3JvdGU6DQo+ID4gPiA+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMjo0NiBQTQ0KPiA+
ID4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIw
NzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5v
cmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2Vy
cGMvODV4eDogYWRkIHN5c2ZzDQo+ID4gPiA+ID4gPiA+ID4gPiA+IGZvcg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQt
QjA3NDIxDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMu
b3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENI
IHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc3lz
ZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMg
aWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
RnJvbTogQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
U2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTE6MjAgQU0NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kIFNjb3R0LUIwNzQy
MQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3ps
YWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0gg
djUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN5
c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2
ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgODoxNiBBTQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVG86IEJodXNoYW4gQmhhcmF0LVI2NTc3Nzsg
V29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBsaW51
eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
U3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDoNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IGFkZCBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IHB3MjAgc3RhdGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVz
aGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2VudDog
VGh1cnNkYXksIE9jdG9iZXIgMTcsIDIwMTMgMTowMSBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4
eDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYWRkIHN5c2ZzIGZvcg0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTUsIDIw
MTMgMjo1MSBQTQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBXb29kIFNj
b3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IENjOiBCaHVzaGFu
IEJoYXJhdC1SNjU3Nzc7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbGludXhw
cGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IFdhbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
IFN1YmplY3Q6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDoNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBhZGQgc3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
YWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29tPg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gQWRkIGEgc3lzIGludGVyZmFjZSB0byBlbmFibGUvZGlhYmxlDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0ZSBvciBhbHRpdmVjIGlkbGUsIGFu
ZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBjb250cm9sIHRoZQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdhaXQgZW50cnkgdGltZS4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEVu
YWJsZS9EaXNhYmxlIGludGVyZmFjZToNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiAwLCBkaXNhYmxlLiAxLCBlbmFibGUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9wdzIwX3N0YXRlDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9hbHRpdmVj
X2lkbA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGUNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNl
dCB3YWl0IHRpbWUgaW50ZXJmYWNlOihOYW5vc2Vjb25kKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvcHcyMF93YWl0X3QNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbWUNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2FsdGl2ZWNfaWRsDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZV93YQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IGl0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gX3QN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbWUNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBFeGFtcGxlOiBCYXNlIG9uIFRCZnJlcSBpcyA0MU1IWi4NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAxfjQ4KG5zKTogVEJbNjNdDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gNDl+OTcobnMpOiBUQls2Ml0NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA5OH4xOTUobnMpOiBUQls2MV0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAxOTZ+MzkwKG5zKTogVEJbNjBdDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gMzkxfjc4MChucyk6IFRCWzU5XQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IDc4MX4xNTYwKG5zKTogVEJbNThdIC4uLg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVk
LW9mZi1ieTogV2FuZyBEb25nc2hlbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA8ZG9uZ3NoZW5nLndhbmdAZnJlZXNjYWxlLmNvbT4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiAtLS0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAqdjU6DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIGdldF9pZGxlX3RpY2tzX2Jp
dCBmdW5jdGlvbg0KPiA+ID4gaW1wbGVtZW50YXRpb24uDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAqdjQ6DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gTW92ZSBjb2RlIGZyb20gODV4eC9jb21tb24u
YyB0bw0KPiA+ID4ga2VybmVsL3N5c2ZzLmMuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBSZW1vdmUgaGFzX3B3MjBf
YWx0aXZlY19pZGxlIGZ1bmN0aW9uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlIHdhaXQgImVudHJ5X2Jp
dCIgdG8gd2FpdCB0aW1lLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9r
ZXJuZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGIvYXJjaC9w
b3dlcnBjL2tlcm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGlu
ZGV4DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMjdhOTBiOS4uMTBkMTEyOCAx
MDA2NDQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9hcmNoL3Bvd2Vy
cGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArKysg
Yi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiBAQCAtODUsNiArODUsMjg0IEBADQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gX19zZXR1cCgic210LXNub296ZS1kZWxheT0iLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBzZXR1cF9zbXRfc25vb3plX2RlbGF5KTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZW5kaWYg
LyogQ09ORklHX1BQQzY0ICovDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19GU0xfU09DDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgTUFYX0JJVA0KPiAJNjMN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1NjQgcHcyMF93dDsgc3RhdGljIHU2NA0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICthbHRpdmVjX2lkbGVfd3Q7DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ICtzdGF0aWMgdW5zaWduZWQgaW50DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
K2dldF9pZGxlX3RpY2tzX2JpdCh1NjQNCj4gPiA+IG5zKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gKwl1NjQgY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKG5zID49IDEw
MDAwKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCWN5Y2xlID0gZGl2X3U2
NChucyArIDUwMCwgMTAwMCkNCj4gKg0KPiA+ID4gPiA+ID4gPiA+ID4gPiB0Yl90aWNrc19wZXJf
dXNlYzsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWVsc2UNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQljeWNsZSA9IGRpdl91NjQobnMgKg0KPiA+ID4g
PiA+IHRiX3RpY2tzX3Blcl91c2VjLA0KPiA+ID4gPiA+ID4gPiA+IDEwMDApOw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArCWlmICghY3ljbGUpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJ
cmV0dXJuIDA7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIGlsb2cyKGN5Y2xlKTsgfQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArc3RhdGljIHZvaWQgZG9fc2hvd19wd3JtZ3RjcjAodm9pZCAqdmFsKQ0KPiB7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsgfQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArc3RhdGljIHNzaXplX3Qgc2hvd19wdzIwX3N0YXRlKHN0cnVjdA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtkZXZpY2UNCj4gPiA+ID4gPiAqZGV2LA0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCQkJc3RydWN0DQo+IGRldmljZV9hdHRyaWJ1dGUN
Cj4gPiA+ID4gPiAqYXR0ciwNCj4gPiA+ID4gPiA+ID4gPiBjaGFyDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ICpidWYpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1
ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBjcHUg
PSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUs
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK2RvX3Nob3dfcHdybWd0Y3IwLCAm
dmFsdWUsIDEpOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXZhbHVlICY9IFBXUk1HVENSMF9QVzIwX1dBSVQ7
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbHVlID8NCj4g
MSA6DQo+ID4gPiA+ID4gMCk7IH0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGRvX3N0b3Jl
X3B3MjBfc3RhdGUodm9pZA0KPiAqdmFsKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJdTMyIHB3MjBfc3RhdGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
Kw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcHcyMF9zdGF0ZSA9IG1mc3By
KFNQUk5fUFdSTUdUQ1IwKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlpZiAoKnZhbHVlKQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXB3MjBfc3RhdGUgfD0NCj4gUFdSTUdUQ1IwX1BX
MjBfV0FJVDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWVsc2UNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlwdzIwX3N0YXRlICY9DQo+IH5QV1JNR1RD
UjBfUFcyMF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCW10c3ByKFNQUk5fUFdSTUdUQ1IwLCBwdzIw
X3N0YXRlKTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHNzaXplX3Qgc3RvcmVfcHcyMF9zdGF0
ZShzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArZGV2aWNlDQo+ID4g
PiA+ID4gKmRldiwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCXN0cnVj
dA0KPiBkZXZpY2VfYXR0cmlidXRlDQo+ID4gPiA+ID4gKmF0dHIsDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwkJCQljb25zdCBjaGFyICpidWYsDQo+IHNpemVfdA0KPiA+ID4g
PiA+IGNvdW50KQ0KPiA+ID4gPiA+ID4gPiA+IHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChrc3RydG91
MzIoYnVmLCAwLCAmdmFsdWUpKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
CXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICh2YWx1ZSA+IDEpDQo+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiArZG9fc3RvcmVfcHcyMF9zdGF0ZSwgJnZhbHVlLCAxKTsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gKwlyZXR1cm4gY291bnQ7IH0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3Nob3dfcHcyMF93YWl0X3RpbWUoc3Ry
dWN0IGRldmljZQ0KPiA+ID4gPiA+ID4gPiAqZGV2LA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJCQkJc3RydWN0DQo+IGRldmljZV9hdHRyaWJ1dGUNCj4gPiA+ID4gPiAqYXR0
ciwNCj4gPiA+ID4gPiA+ID4gPiBjaGFyDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICpidWYpIHsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCB0Yl9jeWNsZTsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArCXM2NCB0aW1lOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGlu
dCBjcHUgPSBkZXYtPmlkOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICghcHcyMF93dCkgew0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShj
cHUsDQo+ID4gPiA+ID4gPiA+ID4gZG9fc2hvd19wd3JtZ3RjcjAsDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKyZ2YWx1ZSwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAx
KTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQl2YWx1ZSA9ICh2YWx1ZSAm
DQo+ID4gPiA+ID4gUFdSTUdUQ1IwX1BXMjBfRU5UKSA+Pg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAJUFdSTUdUQ1IwX1BXMjBfRU5UX1NISUZUOw0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiArCQl0Yl9jeWNsZSA9ICgxIDw8IChNQVhfQklUIC0NCj4gdmFsdWUpKSAqDQo+
ID4gPiA+ID4gMjsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gSXMgdmFsdWUgPSAwIGFuZCB2YWx1ZSA9IDEgbGVnYWw/IFRo
ZXNlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdpbGwgbWFrZSB0Yl9jeWNsZSA9
IDAsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gKwkJdGltZSA9IGRpdl91NjQodGJfY3ljbGUgKiAxMDAwLA0KPiA+ID4g
PiA+ID4gPiA+IHRiX3RpY2tzX3Blcl91c2VjKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAtIDE7DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IEFuZCB0aW1lID0gLTE7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5kIG9mIHRo
ZSBmdW5jdGlvbiwgOikNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiAicmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgdGltZSA+
IDAgPw0KPiB0aW1lIDoNCj4gPiA+IDApOyINCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJuIDAgaWYgdmFsdWUg
PSAwLzEsIG15DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcXVlc3Rpb24gd2FzIHRoYXQs
IGlzIHRoaXMgY29ycmVjdCBhcyBwZXINCj4gc3BlY2lmaWNhdGlvbj8NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEFoaCwgYWxzbyBmb3Ig
InZhbHVlIiB1cHRvIDcgeW91IHdpbGwgcmV0dXJuIDAsDQo+IG5vPw0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IElmIHZhbHVlID0gMCwgTUFY
X0JJVCAtIHZhbHVlID0gNjMgdGJfY3ljbGUgPQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAw
eGZmZmZmZmZmX2ZmZmZmZmZmLCB0Yl9jeWNsZSAqIDEwMDAgd2lsbA0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBvdmVyZmxvdywgYnV0IHRoaXMNCj4gPiA+ID4gPiA+ID4gPiBzaXR1YXRpb24g
aXMgbm90IHBvc3NpYmxlLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBCZWNhdXNlIGlmIHRo
ZSAidmFsdWUgPSAwIiBtZWFucyB0aGlzIGZlYXR1cmUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gd2lsbCBiZQ0KPiA+ID4gPiA+ID4gPiAiZGlzYWJsZSIuDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IE5vdyBUaGUgZGVmYXVsdCB3YWl0IGJpdCBpcyA1MChNQVhfQklUIC0gdmFsdWUsDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHZhbHVlID0gMTMpLCB0aGUgUFcyMC9BbHRpdmVjIElk
bGUgd2FpdCBlbnRyeQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aW1lIGlzIGFib3V0IDFt
cywgdGhpcyB0aW1lIGlzIHZlcnkgbG9uZyBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
d2FpdCBpZGxlIHRpbWUsIGFuZCBpdCdzIGNhbm5vdCBiZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBpbmNyZWFzZWQobWVhbnMgKE1BWF9CSVQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
LSB2YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNhbm5vdCBncmVhdGVyIHRoYW4gNTAp
Lg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFdoYXQg
eW91IHNhaWQgaXMgbm90IG9idmlvdXMgZnJvbSBjb2RlIGFuZCBzbyBhdA0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gbGVhc3Qgd3JpdGUgYSBjb21tZW50IHRoYXQgdmFsdWUgd2lsbCBiZSBhbHdh
eXMgPj0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDEzIG9yIHZhbHVlIHdpbGwgbmV2ZXIgYmUg
bGVzcyB0aGFuIDwgOCBhbmQgYmVsb3cNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNhbGN1bGF0
aW9uIHdpbGwgbm90IG92ZXJmbG93LiBtYXkgYmUgZXJyb3Igb3V0IGlmDQo+ID4gPiB2YWx1ZSBp
cyBsZXNzIHRoYW4gOC4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gVGhlICJ2YWx1ZSIgbGVzcyB0aGFuIDEwLCB0aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gVGhlcmUgaXMgbm90IGVycm9yLCBUaGUgY29kZSBJIGtuZXcgaXQg
Y291bGQgbm90IGJlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbGVzcyB0aGFuIDEwLCB0aGF0J3Mg
d2h5IEkgdXNlIHRoZSBmb2xsb3dpbmcgY29kZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA6KQ0K
PiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBJIGFtIHNvcnJ5IHRvIHBl
cnNpc3QgYnV0IHRoaXMgaXMgbm90IGFib3V0IHdoYXQgeW91DQo+ID4gPiA+ID4gPiA+ID4gPiA+
IGtub3csIHRoaXMgaXMgYWJvdXQgaG93IGNvZGUgaXMgcmVhZCBhbmQgY29kZSBkb2VzIG5vdA0K
PiA+ID4gPiA+ID4gPiA+ID4gPiBzYXkgd2hhdCB5b3Uga25vdywgc28gYWRkIGEgY29tbWVudCBh
dCBsZWFzdCBhbmQgZXJyb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gb3V0L3dhcm4gd2hlbiAidmFs
dWUiIGlzIGxlc3MgdGhhbiBhDQo+ID4gPiA+ID4gPiA+ID4gY2VydGFpbiBudW1iZXIuDQo+ID4g
PiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBTb3JyeSBmb3IgdGhlIGxhdGUgdG8g
cmVzcG9uc2UgdGhlIG1haWwuIElmIGl0IGNhdXNlZA0KPiA+ID4gPiA+ID4gPiA+ID4gY29uZnVz
aW9uLCB3ZSBjYW4NCj4gPiA+ID4gPiA+ID4gPiBhZGQgYSBjb21tZW50Lg0KPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvbW1lbnQ/
DQo+ID4gPiA+ID4gPiA+ID4gPiAvKg0KPiA+ID4gPiA+ID4gPiA+ID4gICogSWYgdGhlICJ2YWx1
ZSIgbGVzcyB0aGFuIDEwLCB0aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4gPiA+ID4gPiA+ID4gPiAg
KiBGcm9tIGJlbmNobWFyayB0ZXN0LCB0aGUgZGVmYXVsdCB3YWl0IGJpdCB3aWxsIG5vdCBiZQ0K
PiA+ID4gPiA+ID4gPiA+ID4gc2V0IGxlc3MgdGhhbg0KPiA+ID4gPiA+ID4gPiA+IDEwYml0Lg0K
PiA+ID4gPiA+ID4gPiA+ID4gICogQmVjYXVzZSAxMCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIHdh
aXQgZW50cnkgdGltZSBpcw0KPiA+ID4gPiA+ID4gPiA+ID4gNDM5Mzc1NTczNDAxOTk5NjA5KG5z
KSwNCj4gPiA+ID4gPiA+ID4gPiA+ICAqIGZvciB3YWl0LWVudHJ5LWlkbGUgdGltZSB0aGlzIHZh
bHVlIGxvb2tzIHRvbyBsb25nLA0KPiA+ID4gPiA+ID4gPiA+ID4gYW5kIHdlIGNhbm5vdCB1c2Ug
dGhvc2UNCj4gPiA+ID4gPiA+ID4gPiA+ICAqICJsb25nIiB0aW1lIGFzIGEgZGVmYXVsdCB3YWl0
LWVudHJ5IHRpbWUuIFNvIG92ZXJmbG93DQo+ID4gPiA+ID4gPiA+ID4gPiBjb3VsZCBub3QgaGF2
ZSBoYXBwZW5lZA0KPiA+ID4gPiA+ID4gPiA+ID4gICogYW5kIHdlIHVzZSB0aGlzIGNhbGN1bGF0
aW9uIG1ldGhvZCB0byBnZXQNCj4gPiA+ID4gPiA+ID4gPiA+IHdhaXQtZW50cnktaWRsZQ0KPiA+
ID4gdGltZS4NCj4gPiA+ID4gPiA+ID4gPiA+ICAqLw0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+
ID4gPiA+ID4gSWYgdGhlcmUncyB0byBiZSBhIGxpbWl0IG9uIHRoZSB0aW1lcyB3ZSBhY2NlcHQs
IG1ha2UgaXQNCj4gPiA+IGV4cGxpY2l0Lg0KPiA+ID4gPiA+ID4gPiA+IENoZWNrIGZvciBpdCBi
ZWZvcmUgZG9pbmcgYW55IGNvbnZlcnNpb25zLCBhbmQgcmV0dXJuIGFuDQo+ID4gPiA+ID4gPiA+
ID4gZXJyb3IgaWYgdXNlcnNwYWNlIHRyaWVzIHRvIHNldCBpdC4NCj4gPiA+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gPiBUaGUgYnJhbmNoIG9ubHkgdXNlIHRvIHJlYWQgZGVmYXVsdCB3YWl0LWVu
dHJ5LXRpbWUuDQo+ID4gPiA+ID4gPiA+IFdlIGhhdmUgbm8gbGltaXQgdGhlIHVzZXIncyBpbnB1
dCwgYW5kIHdlIGNhbid0IHJlc3RyaWN0Lg0KPiA+ID4gPiA+ID4gPiBPbmNlIHRoZSB1c2VyIHNl
dCB0aGUgd2FpdC1lbnRyeS10aW1lLCB0aGUgY29kZSB3aWxsIGRvDQo+IGFub3RoZXIgYnJhbmNo
Lg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEhpIHNjb3R0LA0KPiA+
ID4gPiA+ID4gRG8geW91IGhhdmUgYW55IGNvbW1lbnRzIGFib3V0IHRoaXMgcGF0Y2g/DQo+ID4g
PiA+ID4gPiBJIHdpbGwgYWRkIHRoZSBjb21tZW50IGFuZCBzZW5kIHRoaXMgcGF0Y2ggYWdhaW4u
DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBXaGF0IGRvIHlvdSBtZWFuIGJ5ICJhbmQgd2UgY2FuJ3Qg
cmVzdHJpY3QiPyAgV2h5IG5vdD8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFdoeSBpcyBpdCBvbmx5
IHVzZWQgdG8gcmVhZCB0aGUgZGVmYXVsdCwgYW5kIG5vdCB0aGUgY3VycmVudA0KPiB2YWx1ZT8N
Cj4gPiA+ID4gPg0KPiA+ID4gPiBXZSBhbHJlYWR5IGhhdmUgYSB2YXJpYWJsZSB3aGljaCB2YWx1
ZSBpcyBzZXQgYnkgdGhlIHVzZXIsIGFzIHdlDQo+ID4gPiA+IGhhdmUgZGlzY3Vzc2VkIGJlZm9y
ZS4NCj4gPiA+ID4NCj4gPiA+ID4gV2hlbiB0aGUgc3lzdGVtIGJvb3QtdXAuIEJlZm9yZSB1c2Vy
IHNldCB0aGUgd2FpdC1lbnRyeS10aW1lLCB3ZQ0KPiA+ID4gPiBuZWVkIHRvIHJldHVybiBhIGRl
ZmF1bHQgd2FpdC1lbnRyeS10aW1lLCBpZiB0aGUgdXNlciByZWFkIHRoaXMNCj4gPiA+ID4gc3lz
LWludGVyZmFjZS4gVGhlIGRlZmF1bHQgd2FpdC1lbnRyeS10aW1lIGlzIGNvbnZlcnRlZCBieSB3
YWl0LWJpdC4NCj4gPiA+ID4NCj4gPiA+ID4gT25jZSB0aGUgdXNlciBzZXQgdGhlIHN5cy1pbnRl
cmZhY2UsIGEgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvDQo+ID4gPiA+IHNhdmUgaXQuIEFuZCB3
aGVuIHRoZSB1c2VyIHJlYWQgc3lzLWludGVyZmFjZSB3ZSB3aWxsIHJldHVybiBiYWNrDQo+ID4g
PiA+IHRoZQ0KPiA+ID4gdmFyaWFibGUuDQo+ID4gPg0KPiA+ID4gV2hpbGUgd2UgYXJlIG5vdCAi
cmVzdHJpY3RpbmcgdXNlciBkZWZpbmVkIHZhbHVlIiBvciAiZGVmaW5lIHNhbWUNCj4gPiA+IHJl
c3RyaWN0aW9uIGZvciB1c2VyIGRlZmluZWQgYW5kIGRlZmF1bHQiLCBjYW4gd2UgaGF2ZSBvbmx5
IG9uZSBmbG93DQo+ID4gPiBvZiBjYWxjdWxhdGlvbiBhbmQgc2V0dGluZyByYXRoZXIgdGhhbiBj
b25kaXRpb25hbCBiYXNlZCBvbiB1c2VyDQo+ID4gPiBoYXZlIHNldCBvciBub3Qgc2V0Pw0KPiA+
ID4NCj4gPiBZZXMsIHdlIGNhbiBkbyB0aGF0Lg0KPiA+IElmIHdlIHdhbnQgdG8gdXNlIG9uZSBm
bG93IHRvIGhhbmRsZSBpdC4gV2Ugc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmcNCj4gY2hhbmdlczoN
Cj4gPg0KPiA+ICNpZmRlZiBDT05GSUdfRlNMX1NPQw0KPiA+ICNpbmNsdWRlIDxsaW51eC9zbGFi
Lmg+DQo+ID4gI2VuZGlmDQo+IA0KPiBEb24ndCBpZmRlZiBoZWFkZXJzLg0KPiANCj4gPiBzdGF0
aWMgdTY0ICpwdzIwX3d0Ow0KPiA+IHN0YXRpYyB1NjQgKmFsdGl2ZWNfaWRsZV93dDsNCj4gPg0K
PiA+IHN0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2
LA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRy
aWJ1dGUgKmF0dHIsIGNoYXINCj4gPiAqYnVmKSB7DQo+ID4gCXJldHVybiBzcHJpbnRmKGJ1Ziwg
IiVsbHVcbiIsIHB3MjBfd3RbZGV2LT5pZF0pOyB9DQo+ID4NCj4gPiBzdGF0aWMgc3NpemVfdCBz
dG9yZV9wdzIwX3dhaXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv
dW50KSB7IC4uLg0KPiA+IHB3MjBfd3RbY3B1XSA9IHZhbHVlOw0KPiA+IC4uLg0KPiA+IH0NCj4g
Pg0KPiA+IHN0YXRpYyBzc2l6ZV90IHNob3dfYWx0aXZlY19pZGxlX3dhaXRfdGltZShzdHJ1Y3Qg
ZGV2aWNlICpkZXYsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhcg0KPiA+ICpidWYpIHsNCj4gPiAJcmV0dXJuIHNw
cmludGYoYnVmLCAiJWxsdVxuIiwgYWx0aXZlY19pZGxlX3d0W2Rldi0+aWRdKTsgfQ0KPiA+DQo+
ID4gc3RhdGljIHNzaXplX3Qgc3RvcmVfYWx0aXZlY19pZGxlX3dhaXRfdGltZShzdHJ1Y3QgZGV2
aWNlICpkZXYsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSB7IC4uLg0KPiA+IGFsdGl2ZWNfaWRsZV93
dFtjcHVdID0gdmFsdWU7DQo+ID4gLi4uDQo+ID4gfQ0KPiA+DQo+ID4gc3RhdGljIHZvaWQgcmVn
aXN0ZXJfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KSB7IC4uLg0KPiA+ICNpZmRlZiBDT05G
SUdfRlNMX1NPQw0KPiA+ICAgICAgICAgdTMyIHZhbHVlLCBwdzIwX3ZhbHVlLCBhbHRpdmVjX3Zh
bHVlOw0KPiA+ICAgICAgICAgdTY0IHRiX2N5Y2xlOw0KPiA+ICNlbmRpZg0KPiA+IC4uLg0KPiA+
ICNpZmRlZiBDT05GSUdfRlNMX1NPQw0KPiA+ICAgICAgICAgaWYgKFBWUl9WRVIoY3VyX2NwdV9z
cGVjLT5wdnJfdmFsdWUpID09IFBWUl9WRVJfRTY1MDApIHsNCj4gPiAgICAgICAgICAgICAgICAg
ZGV2aWNlX2NyZWF0ZV9maWxlKHMsICZkZXZfYXR0cl9wdzIwX3N0YXRlKTsNCj4gPiAgICAgICAg
ICAgICAgICAgZGV2aWNlX2NyZWF0ZV9maWxlKHMsICZkZXZfYXR0cl9wdzIwX3dhaXRfdGltZSk7
DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgZGV2aWNlX2NyZWF0ZV9maWxlKHMsICZkZXZfYXR0
cl9hbHRpdmVjX2lkbGUpOw0KPiA+ICAgICAgICAgICAgICAgICBkZXZpY2VfY3JlYXRlX2ZpbGUo
cywgJmRldl9hdHRyX2FsdGl2ZWNfaWRsZV93YWl0X3RpbWUpOw0KPiA+ICAgICAgICAgfQ0KPiA+
DQo+ID4gICAgICAgICBpZiAoIXB3MjBfd3QpDQo+ID4gICAgICAgICAgICAgICAgIHB3MjBfd3Qg
PSBremFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2YoKnB3MjBfd3QpLA0KPiA+IEdGUF9LRVJORUwp
Ow0KPiA+DQo+ID4gCSAgaWYgKCFhbHRpdmVjX2lkbGVfd3QpDQo+ID4gCQkgICAgYWx0aXZlY19p
ZGxlX3d0ID0ga3phbGxvYyhucl9jcHVfaWRzICoNCj4gc2l6ZW9mKCphbHRpdmVjX2lkbGVfd3Qp
LA0KPiA+IEdGUF9LRVJORUwpOw0KPiA+DQo+ID4gICAgICAgICBzbXBfY2FsbF9mdW5jdGlvbl9z
aW5nbGUoY3B1LCBkb19zaG93X3B3cm1ndGNyMCwgJnZhbHVlLCAxKTsNCj4gPg0KPiA+ICAgICAg
ICAgcHcyMF92YWx1ZSA9ICh2YWx1ZSAmIFBXUk1HVENSMF9QVzIwX0VOVCkgPj4NCj4gUFdSTUdU
Q1IwX1BXMjBfRU5UX1NISUZUOw0KPiA+ICAgICAgICAgdGJfY3ljbGUgPSAoMSA8PCAoTUFYX0JJ
VCAtIHB3MjBfdmFsdWUpKSAqIDI7DQo+ID4gICAgICAgICBwdzIwX3d0W2NwdV0gPSBkaXZfdTY0
KHRiX2N5Y2xlICogMTAwMCwgdGJfdGlja3NfcGVyX3VzZWMpIC0NCj4gPiAxOw0KPiA+DQo+ID4g
ICAgICAgICBhbHRpdmVjX3ZhbHVlID0gKHZhbHVlICYgUFdSTUdUQ1IwX0FWX0lETEVfQ05UKSA+
Pg0KPiBQV1JNR1RDUjBfQVZfSURMRV9DTlRfU0hJRlQ7DQo+ID4gICAgICAgICB0Yl9jeWNsZSA9
ICgxIDw8IChNQVhfQklUIC0gYWx0aXZlY192YWx1ZSkpICogMjsNCj4gPiAgICAgICAgIGFsdGl2
ZWNfaWRsZV93dFtjcHVdID0gZGl2X3U2NCh0Yl9jeWNsZSAqIDEwMDAsDQo+ID4gdGJfdGlja3Nf
cGVyX3VzZWMpIC0gMTsgI2VuZGlmIC4uLg0KPiA+IH0NCj4gDQo+IE1vdmUgdGhpcyBzdHVmZiB0
byBpdHMgb3duIGZ1bmN0aW9uLiAgVGhlIG9ubHkgaWZkZWYgc2hvdWxkIGJlIGluIGENCj4gaGVh
ZGVyIHRoYXQgcHJvdmlkZXMgYW4gaW5saW5lIHN0dWIgd2hlbiBpdCdzIG5vdCBhdmFpbGFibGUu
DQo+IA0KPiBDb3VsZCB5b3UgZXhwbGFpbiB3aGF0IHlvdSdyZSBjaGFuZ2luZyBhbmQgd2h5PyAg
QSBkaWZmIGZyb20geW91cg0KPiBwcmV2aW91cyBwYXRjaCB3b3VsZCBoZWxwLg0KPiANClRob3Nl
IGNvZGVzIGp1c3QgZm9yIGRpc2N1c3Mgd2l0aCBCaGFyYXQuIEhlIHdhbnQgdG8gbWFrZSBvbmUg
ZmxvdyBhdCAic2hvd19wdzIwX3dhaXRfdGltZSIvIiBzaG93X2FsdGl2ZWNfaWRsZV93YWl0X3Rp
bWUiIGZ1bmN0aW9uLiBJZiB3ZSBkbyB0aGF0LCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgcHcyMF93
dC9hbHRpdmVjX2lkbGVfd3QuDQoNCi1kb25nc2hlbmcNCg==

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-07  1:20                               ` Scott Wood
  2013-11-07  2:17                                 ` Dongsheng Wang
@ 2013-11-11  2:13                                 ` Dongsheng Wang
  2013-11-11  4:11                                   ` Bharat Bhushan
  1 sibling, 1 reply; 34+ messages in thread
From: Dongsheng Wang @ 2013-11-11  2:13 UTC (permalink / raw)
  To: Scott Wood; +Cc: Bharat Bhushan, linuxppc-dev

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV2FuZyBEb25nc2hlbmct
QjQwNTM0DQo+IFNlbnQ6IFRodXJzZGF5LCBOb3ZlbWJlciAwNywgMjAxMyAxMDoxMyBBTQ0KPiBU
bzogV29vZCBTY290dC1CMDc0MjENCj4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgbGludXhw
cGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gU3ViamVjdDogUkU6IFtQQVRDSCB2NSA0LzRdIHBv
d2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiBhbHRpdmVjIGlkbGUN
Cj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFdv
b2QgU2NvdHQtQjA3NDIxDQo+ID4gU2VudDogVGh1cnNkYXksIE5vdmVtYmVyIDA3LCAyMDEzIDk6
MjAgQU0NCj4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gQ2M6IEJodXNoYW4gQmhh
cmF0LVI2NTc3NzsgV29vZCBTY290dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiA+IGRldkBsaXN0cy5v
emxhYnMub3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDog
YWRkIHN5c2ZzIGZvciBwdzIwIHN0YXRlIGFuZA0KPiA+IGFsdGl2ZWMgaWRsZQ0KPiA+DQo+ID4g
T24gV2VkLCAyMDEzLTExLTA2IGF0IDAxOjUwIC0wNjAwLCBXYW5nIERvbmdzaGVuZy1CNDA1MzQg
d3JvdGU6DQo+ID4gPg0KPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4g
PiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gU2VudDogV2VkbmVzZGF5LCBO
b3ZlbWJlciAwNiwgMjAxMyAxOjI1IFBNDQo+ID4gPiA+IFRvOiBXYW5nIERvbmdzaGVuZy1CNDA1
MzQ7IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3ps
YWJzLm9yZw0KPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4
OiBhZGQgc3lzZnMgZm9yIHB3MjAgc3RhdGUNCj4gPiA+ID4gYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+
ID4gPg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tDQo+ID4gPiA+ID4gRnJvbTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gU2Vu
dDogVHVlc2RheSwgTm92ZW1iZXIgMDUsIDIwMTMgODo0MCBBTQ0KPiA+ID4gPiA+IFRvOiBXb29k
IFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+IENjOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IGxpbnV4
cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2
NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIwDQo+IHN0YXRlDQo+ID4gPiA+
ID4gYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+
ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+IEZyb206IFdv
b2QgU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBOb3ZlbWJlciAwNSwg
MjAxMyA1OjUyIEFNDQo+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4g
PiA+ID4gPiBDYzogV29vZCBTY290dC1CMDc0MjE7IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgbGlu
dXhwcGMtDQo+ID4gPiA+ID4gPiBkZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4gU3Vi
amVjdDogUmU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDogYWRkIHN5c2ZzIGZvciBwdzIw
DQo+ID4gPiA+ID4gPiBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gT24gU3VuLCAyMDEzLTExLTAzIGF0IDIyOjA0IC0wNjAwLCBXYW5nIERvbmdzaGVuZy1C
NDA1MzQgd3JvdGU6DQo+ID4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZy1CNDA1MzQNCj4gPiA+ID4gPiA+
ID4gPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMjEsIDIwMTMgMTE6MTEgQU0NCj4gPiA+ID4gPiA+
ID4gPiBUbzogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiBDYzogQmh1c2hhbiBC
aGFyYXQtUjY1Nzc3OyBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZw0KPiA+ID4gPiA+ID4g
PiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBm
b3INCj4gcHcyMA0KPiA+ID4gPiA+ID4gPiA+IHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiBGcm9t
OiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gU2VudDogU2F0dXJkYXksIE9j
dG9iZXIgMTksIDIwMTMgMzoyMiBBTQ0KPiA+ID4gPiA+ID4gPiA+ID4gVG86IFdhbmcgRG9uZ3No
ZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3Nzsg
V29vZCBTY290dC1CMDc0MjE7IGxpbnV4cHBjLQ0KPiA+ID4gPiA+ID4gPiA+ID4gZGV2QGxpc3Rz
Lm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjUgNC80
XSBwb3dlcnBjLzg1eHg6IGFkZCBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4gPiA+IHB3MjAgc3Rh
dGUgYW5kIGFsdGl2ZWMgaWRsZQ0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+
IE9uIFRodSwgMjAxMy0xMC0xNyBhdCAyMjowMiAtMDUwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0
DQo+ID4gd3JvdGU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBC
aHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTZW50OiBUaHVyc2Rh
eSwgT2N0b2JlciAxNywgMjAxMyAyOjQ2IFBNDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVG86IFdh
bmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQgc3lzZnMN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0
YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IEZyb206IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIyIEFNDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gVG86IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsgV29vZCBTY290dC1C
MDc0MjENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2QGxpc3Rz
Lm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTdWJqZWN0OiBSRTogW1BB
VENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiBzeXNmcyBmb3INCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIGFuZCBh
bHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBCaHVzaGFuIEJoYXJhdC1SNjU3NzcNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDExOjIw
IEFNDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQw
NTM0OyBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2M6
IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gcG93ZXJwYy84NXh4OiBhZGQNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZyb206
IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBT
ZW50OiBUaHVyc2RheSwgT2N0b2JlciAxNywgMjAxMyA4OjE2IEFNDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IFRvOiBCaHVzaGFuIEJoYXJhdC1SNjU3Nzc7IFdvb2QgU2NvdHQtDQo+
IEIwNzQyMQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDYzogbGludXhwcGMtZGV2
QGxpc3RzLm96bGFicy5vcmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVj
dDogUkU6IFtQQVRDSCB2NSA0LzRdIHBvd2VycGMvODV4eDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gYWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiBwdzIwIHN0YXRlIGFuZCBhbHRpdmVjIGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9y
aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEZy
b206IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDE3LCAyMDEzIDE6MDEgQU0NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUbzogV2FuZyBEb25nc2hlbmctQjQwNTM0OyBXb29kDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2NvdHQtQjA3NDIxDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2M6IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3Jn
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSCB2
NSA0LzRdIHBvd2VycGMvODV4eDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBh
ZGQgc3lzZnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcHcyMCBzdGF0
ZSBhbmQgYWx0aXZlYyBpZGxlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0tLU9yaWdp
bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRnJv
bTogV2FuZyBEb25nc2hlbmctQjQwNTM0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBTZW50OiBUdWVzZGF5LCBPY3RvYmVyIDE1LCAyMDEzIDI6NTEgUE0NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRvOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQ2M6IEJodXNoYW4gQmhhcmF0LVI2NTc3NzsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGxpbnV4cHBjLWRldkBsaXN0cy5vemxh
YnMub3JnOyBXYW5nDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRG9uZ3NoZW5n
LUI0MDUzNA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU3ViamVjdDogW1BB
VENIIHY1IDQvNF0gcG93ZXJwYy84NXh4Og0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gYWRkIHN5c2ZzIGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
cHcyMCBzdGF0ZSBhbmQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBhbHRpdmVj
IGlkbGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPGRvbmdzaGVuZy53YW5nQGZyZWVzY2FsZS5jb20+DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gQWRkIGEgc3lzIGludGVyZmFjZSB0byBlbmFibGUvZGlhYmxlDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBwdzIwIHN0YXRlIG9yIGFsdGl2ZWMgaWRs
ZSwgYW5kDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gY29udHJvbCB0aGUNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdhaXQgZW50cnkgdGltZS4NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBFbmFibGUvRGlzYWJsZSBpbnRlcmZhY2U6DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiAwLCBkaXNhYmxlLiAxLCBlbmFibGUuDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3B3MjBfc3Rh
dGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+IC9zeXMvZGV2aWNlcy9z
eXN0ZW0vY3B1L2NwdVgvYWx0aXZlY19pZGwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBTZXQgd2FpdCB0aW1lIGludGVyZmFjZTooTmFub3Nl
Y29uZCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+IC9zeXMvZGV2aWNl
cy9zeXN0ZW0vY3B1L2NwdVgvcHcyMF93YWl0X3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IGltZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gL3N5
cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9hbHRpdmVjX2lkbA0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gZV93YQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gaXQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IF90DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbWUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+IEV4YW1wbGU6IEJhc2Ugb24gVEJmcmVxIGlzIDQxTUhaLg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMX40OChucyk6IFRCWzYzXQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gNDl+OTcobnMpOiBUQls2Ml0NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+IDk4fjE5NShucyk6IFRCWzYxXQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gMTk2fjM5MChucyk6IFRCWzYwXQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gMzkxfjc4MChucyk6IFRCWzU5XQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gNzgxfjE1NjAobnMpOiBUQls1OF0gLi4uDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gU2lnbmVkLW9mZi1ieTogV2FuZyBEb25nc2hlbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+IDxkb25nc2hlbmcud2FuZ0BmcmVlc2NhbGUuY29tPg0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiAqdjU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBDaGFuZ2Ug
Z2V0X2lkbGVfdGlja3NfYml0IGZ1bmN0aW9uDQo+ID4gPiA+IGltcGxlbWVudGF0aW9uLg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ICp2NDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE1v
dmUgY29kZSBmcm9tIDg1eHgvY29tbW9uLmMgdG8NCj4gPiA+ID4ga2VybmVsL3N5c2ZzLmMuDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gUmVtb3ZlIGhhc19wdzIwX2FsdGl2ZWNfaWRsZSBmdW5jdGlvbi4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBDaGFuZ2Ugd2FpdCAiZW50cnlfYml0IiB0byB3YWl0IHRpbWUuDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gZGlmZiAtLWdpdA0KPiBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYi9hcmNoL3Bvd2VycGMva2VybmVs
L3N5c2ZzLmMNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbmRleA0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gMjdhOTBiOS4uMTBkMTEyOCAxMDA2NDQNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJwYy9rZXJu
ZWwvc3lzZnMuYw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvYXJj
aC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBAQCAtODUsNiArODUsMjg0IEBADQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiBfX3NldHVwKCJzbXQtc25vb3plLWRlbGF5PSIsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gc2V0dXBfc210X3Nub296ZV9kZWxheSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICNl
bmRpZiAvKiBDT05GSUdfUFBDNjQgKi8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19G
U0xfU09DDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBNQVhf
QklUDQo+ID4gCTYzDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHU2NCBwdzIwX3d0OyBzdGF0
aWMgdTY0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArYWx0aXZlY19pZGxl
X3d0Ow0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtnZXRfaWRsZV90aWNrc19iaXQodTY0DQo+ID4gPiA+
IG5zKSB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXU2NCBjeWNsZTsN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKG5zID49IDEwMDAwKQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwkJY3ljbGUgPSBkaXZfdTY0KG5zICsgNTAwLCAxMDAwKQ0KPiA+
ICoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0Yl90aWNrc19wZXJfdXNlYzsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJZWxzZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwkJY3ljbGUgPSBkaXZfdTY0KG5zICoNCj4gPiA+ID4gPiA+IHRiX3RpY2tz
X3Blcl91c2VjLA0KPiA+ID4gPiA+ID4gPiA+ID4gMTAwMCk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
CWlmICghY3ljbGUpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1
cm4gMDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcmV0dXJuIGlsb2cyKGN5Y2xlKTsgfQ0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGRvX3Nob3dfcHdybWd0Y3IwKHZvaWQNCj4gKnZhbCkN
Cj4gPiB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCXUzMiAqdmFsdWUg
PSB2YWw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCSp2YWx1ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1Iw
KTsgfQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF9zdGF0ZShz
dHJ1Y3QNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtkZXZpY2UNCj4gPiA+
ID4gPiA+ICpkZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCXN0
cnVjdA0KPiA+IGRldmljZV9hdHRyaWJ1dGUNCj4gPiA+ID4gPiA+ICphdHRyLA0KPiA+ID4gPiA+
ID4gPiA+ID4gY2hhcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICpidWYpIHsNCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwNCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtkb19zaG93X3B3cm1ndGNyMCwgJnZhbHVlLCAxKTsNCj4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJdmFsdWUgJj0gUFdSTUdUQ1IwX1BXMjBfV0FJVDsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbHVlID8NCj4gPiAxIDoN
Cj4gPiA+ID4gPiA+IDApOyB9DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAr
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIHZvaWQgZG9fc3Rv
cmVfcHcyMF9zdGF0ZSh2b2lkDQo+ID4gKnZhbCkgew0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwl1MzIgKnZhbHVlID0gdmFsOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gKwl1MzIgcHcyMF9zdGF0ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJcHcyMF9z
dGF0ZSA9IG1mc3ByKFNQUk5fUFdSTUdUQ1IwKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCp2
YWx1ZSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJCXB3MjBfc3RhdGUg
fD0NCj4gPiBQV1JNR1RDUjBfUFcyMF9XQUlUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwllbHNlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlw
dzIwX3N0YXRlICY9DQo+ID4gflBXUk1HVENSMF9QVzIwX1dBSVQ7DQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArCW10c3ByKFNQUk5fUFdSTUdUQ1IwLCBwdzIwX3N0YXRlKTsgfQ0KPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3B3MjBfc3RhdGUoc3RydWN0DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArZGV2aWNlDQo+ID4gPiA+ID4gPiAqZGV2LA0KPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJCQlzdHJ1Y3QNCj4gPiBkZXZpY2VfYXR0
cmlidXRlDQo+ID4gPiA+ID4gPiAqYXR0ciwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICsJCQkJY29uc3QgY2hhciAqYnVmLA0KPiA+IHNpemVfdA0KPiA+ID4gPiA+ID4gY291
bnQpDQo+ID4gPiA+ID4gPiA+ID4gPiB7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArCXUzMiB2YWx1ZTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJ
dW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmIChrc3Ry
dG91MzIoYnVmLCAwLCAmdmFsdWUpKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiArDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCWlmICh2YWx1ZSA+IDEp
DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ICsJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwNCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtkb19zdG9yZV9wdzIwX3N0YXRlLCAmdmFs
dWUsIDEpOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gY291bnQ7IH0NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ICtzdGF0aWMgc3NpemVfdA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gK3Nob3dfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmljZQ0KPiA+ID4gPiA+ID4gPiA+ICpk
ZXYsDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQkJCXN0cnVjdA0KPiA+
IGRldmljZV9hdHRyaWJ1dGUNCj4gPiA+ID4gPiA+ICphdHRyLA0KPiA+ID4gPiA+ID4gPiA+ID4g
Y2hhcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICpidWYpIHsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gKwl1NjQgdGJfY3ljbGU7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiArCXM2NCB0aW1lOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0K
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgY3B1ID0g
ZGV2LT5pZDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsJaWYgKCFwdzIwX3d0KSB7DQo+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1
LA0KPiA+ID4gPiA+ID4gPiA+ID4gZG9fc2hvd19wd3JtZ3RjcjAsDQo+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+ID4gPiArJnZhbHVlLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gMSk7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCQl2YWx1ZSA9ICh2
YWx1ZSAmDQo+ID4gPiA+ID4gPiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAJUFdSTUdUQ1IwX1BXMjBfRU5U
X1NISUZUOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGJfY3ljbGUgPSAoMSA8PCAoTUFYX0JJVCAt
DQo+ID4gdmFsdWUpKSAqDQo+ID4gPiA+ID4gPiAyOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSXMgdmFsdWUgPSAw
IGFuZCB2YWx1ZSA9IDEgbGVnYWw/IFRoZXNlDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gd2lsbCBtYWtlIHRiX2N5Y2xlID0gMCwNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwkJdGltZSA9IGRp
dl91NjQodGJfY3ljbGUgKiAxMDAwLA0KPiA+ID4gPiA+ID4gPiA+ID4gdGJfdGlja3NfcGVyX3Vz
ZWMpDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSAxOw0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW5kIHRpbWUgPSAt
MTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiBQbGVhc2UgbG9vayBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgOikN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gInJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHRpbWUgPiAwID8NCj4gPiB0
aW1lIDoNCj4gPiA+ID4gMCk7Ig0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEkga25vdyB5b3UgcmV0dXJuIDAgaWYgdmFsdWUgPSAw
LzEsIG15DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBxdWVzdGlvbiB3YXMgdGhhdCwg
aXMgdGhpcyBjb3JyZWN0IGFzIHBlcg0KPiA+IHNwZWNpZmljYXRpb24/DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQWhoLCBhbHNv
IGZvciAidmFsdWUiIHVwdG8gNyB5b3Ugd2lsbCByZXR1cm4NCj4gMCwNCj4gPiBubz8NCj4gPiA+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSWYg
dmFsdWUgPSAwLCBNQVhfQklUIC0gdmFsdWUgPSA2MyB0Yl9jeWNsZSA9DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gMHhmZmZmZmZmZl9mZmZmZmZmZiwgdGJfY3ljbGUgKiAxMDAwIHdpbGwN
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBvdmVyZmxvdywgYnV0IHRoaXMNCj4gPiA+ID4g
PiA+ID4gPiA+IHNpdHVhdGlvbiBpcyBub3QgcG9zc2libGUuDQo+ID4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gQmVjYXVzZSBpZiB0aGUgInZhbHVlID0gMCIgbWVhbnMgdGhpcyBmZWF0dXJlDQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gd2lsbCBiZQ0KPiA+ID4gPiA+ID4gPiA+ICJkaXNh
YmxlIi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3cgVGhlIGRlZmF1bHQgd2FpdCBi
aXQgaXMgNTAoTUFYX0JJVCAtIHZhbHVlLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHZh
bHVlID0gMTMpLCB0aGUgUFcyMC9BbHRpdmVjIElkbGUgd2FpdCBlbnRyeQ0KPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4gPiA+IHRpbWUgaXMgYWJvdXQgMW1zLCB0aGlzIHRpbWUgaXMgdmVyeSBsb25n
IGZvcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdhaXQgaWRsZSB0aW1lLCBhbmQgaXQn
cyBjYW5ub3QgYmUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbmNyZWFzZWQobWVhbnMg
KE1BWF9CSVQNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtIHZhbHVlKQ0KPiA+ID4gPiA+
ID4gPiA+ID4gPiA+ID4gPiBjYW5ub3QgZ3JlYXRlciB0aGFuIDUwKS4NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gV2hhdCB5b3Ugc2FpZCBpcyBu
b3Qgb2J2aW91cyBmcm9tIGNvZGUgYW5kIHNvIGF0DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+
IGxlYXN0IHdyaXRlIGEgY29tbWVudCB0aGF0IHZhbHVlIHdpbGwgYmUNCj4gYWx3YXlzID49DQo+
ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IDEzIG9yIHZhbHVlIHdpbGwgbmV2ZXIgYmUgbGVzcyB0
aGFuIDwgOCBhbmQgYmVsb3cNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gY2FsY3VsYXRpb24g
d2lsbCBub3Qgb3ZlcmZsb3cuIG1heSBiZSBlcnJvciBvdXQNCj4gaWYNCj4gPiA+ID4gdmFsdWUg
aXMgbGVzcyB0aGFuIDguDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gPiBUaGUgInZhbHVlIiBsZXNzIHRoYW4gMTAsIHRoaXMgd2lsbCBvdmVyZmxvdy4N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRoZXJlIGlzIG5vdCBlcnJvciwgVGhlIGNvZGUgSSBr
bmV3IGl0IGNvdWxkIG5vdCBiZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gbGVzcyB0aGFuIDEw
LCB0aGF0J3Mgd2h5IEkgdXNlIHRoZSBmb2xsb3dpbmcgY29kZS4NCj4gPiA+ID4gPiA+ID4gPiA+
ID4gPiA+IDopDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBJ
IGFtIHNvcnJ5IHRvIHBlcnNpc3QgYnV0IHRoaXMgaXMgbm90IGFib3V0IHdoYXQgeW91DQo+ID4g
PiA+ID4gPiA+ID4gPiA+ID4ga25vdywgdGhpcyBpcyBhYm91dCBob3cgY29kZSBpcyByZWFkIGFu
ZCBjb2RlIGRvZXMNCj4gbm90DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc2F5IHdoYXQgeW91IGtu
b3csIHNvIGFkZCBhIGNvbW1lbnQgYXQgbGVhc3QgYW5kDQo+IGVycm9yDQo+ID4gPiA+ID4gPiA+
ID4gPiA+ID4gb3V0L3dhcm4gd2hlbiAidmFsdWUiIGlzIGxlc3MgdGhhbiBhDQo+ID4gPiA+ID4g
PiA+ID4gPiBjZXJ0YWluIG51bWJlci4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ID4gPiBTb3JyeSBmb3IgdGhlIGxhdGUgdG8gcmVzcG9uc2UgdGhlIG1haWwuIElmIGl0
IGNhdXNlZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBjb25mdXNpb24sIHdlIGNhbg0KPiA+ID4gPiA+
ID4gPiA+ID4gYWRkIGEgY29tbWVudC4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
ID4gPiA+ID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY29tbWVudD8NCj4gPiA+ID4gPiA+ID4g
PiA+ID4gLyoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gICogSWYgdGhlICJ2YWx1ZSIgbGVzcyB0aGFu
IDEwLCB0aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAqIEZyb20gYmVu
Y2htYXJrIHRlc3QsIHRoZSBkZWZhdWx0IHdhaXQgYml0IHdpbGwgbm90DQo+IGJlDQo+ID4gPiA+
ID4gPiA+ID4gPiA+IHNldCBsZXNzIHRoYW4NCj4gPiA+ID4gPiA+ID4gPiA+IDEwYml0Lg0KPiA+
ID4gPiA+ID4gPiA+ID4gPiAgKiBCZWNhdXNlIDEwIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgd2Fp
dCBlbnRyeSB0aW1lIGlzDQo+ID4gPiA+ID4gPiA+ID4gPiA+IDQzOTM3NTU3MzQwMTk5OTYwOShu
cyksDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAqIGZvciB3YWl0LWVudHJ5LWlkbGUgdGltZSB0aGlz
IHZhbHVlIGxvb2tzIHRvbyBsb25nLA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBhbmQgd2UgY2Fubm90
IHVzZSB0aG9zZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgKiAibG9uZyIgdGltZSBhcyBhIGRlZmF1
bHQgd2FpdC1lbnRyeSB0aW1lLiBTbw0KPiBvdmVyZmxvdw0KPiA+ID4gPiA+ID4gPiA+ID4gPiBj
b3VsZCBub3QgaGF2ZSBoYXBwZW5lZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgKiBhbmQgd2UgdXNl
IHRoaXMgY2FsY3VsYXRpb24gbWV0aG9kIHRvIGdldA0KPiA+ID4gPiA+ID4gPiA+ID4gPiB3YWl0
LWVudHJ5LWlkbGUNCj4gPiA+ID4gdGltZS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICovDQo+ID4g
PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gSWYgdGhlcmUncyB0byBiZSBhIGxpbWl0
IG9uIHRoZSB0aW1lcyB3ZSBhY2NlcHQsIG1ha2UgaXQNCj4gPiA+ID4gZXhwbGljaXQuDQo+ID4g
PiA+ID4gPiA+ID4gPiBDaGVjayBmb3IgaXQgYmVmb3JlIGRvaW5nIGFueSBjb252ZXJzaW9ucywg
YW5kIHJldHVybiBhbg0KPiA+ID4gPiA+ID4gPiA+ID4gZXJyb3IgaWYgdXNlcnNwYWNlIHRyaWVz
IHRvIHNldCBpdC4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gVGhlIGJyYW5j
aCBvbmx5IHVzZSB0byByZWFkIGRlZmF1bHQgd2FpdC1lbnRyeS10aW1lLg0KPiA+ID4gPiA+ID4g
PiA+IFdlIGhhdmUgbm8gbGltaXQgdGhlIHVzZXIncyBpbnB1dCwgYW5kIHdlIGNhbid0IHJlc3Ry
aWN0Lg0KPiA+ID4gPiA+ID4gPiA+IE9uY2UgdGhlIHVzZXIgc2V0IHRoZSB3YWl0LWVudHJ5LXRp
bWUsIHRoZSBjb2RlIHdpbGwgZG8NCj4gPiBhbm90aGVyIGJyYW5jaC4NCj4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBIaSBzY290dCwNCj4gPiA+ID4gPiA+ID4g
RG8geW91IGhhdmUgYW55IGNvbW1lbnRzIGFib3V0IHRoaXMgcGF0Y2g/DQo+ID4gPiA+ID4gPiA+
IEkgd2lsbCBhZGQgdGhlIGNvbW1lbnQgYW5kIHNlbmQgdGhpcyBwYXRjaCBhZ2Fpbi4NCj4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiBXaGF0IGRvIHlvdSBtZWFuIGJ5ICJhbmQgd2UgY2FuJ3QgcmVz
dHJpY3QiPyAgV2h5IG5vdD8NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBXaHkgaXMgaXQgb25s
eSB1c2VkIHRvIHJlYWQgdGhlIGRlZmF1bHQsIGFuZCBub3QgdGhlIGN1cnJlbnQNCj4gPiB2YWx1
ZT8NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2UgYWxyZWFkeSBoYXZlIGEgdmFyaWFibGUgd2hp
Y2ggdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyLCBhcyB3ZQ0KPiA+ID4gPiA+IGhhdmUgZGlzY3Vz
c2VkIGJlZm9yZS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFdoZW4gdGhlIHN5c3RlbSBib290LXVw
LiBCZWZvcmUgdXNlciBzZXQgdGhlIHdhaXQtZW50cnktdGltZSwgd2UNCj4gPiA+ID4gPiBuZWVk
IHRvIHJldHVybiBhIGRlZmF1bHQgd2FpdC1lbnRyeS10aW1lLCBpZiB0aGUgdXNlciByZWFkIHRo
aXMNCj4gPiA+ID4gPiBzeXMtaW50ZXJmYWNlLiBUaGUgZGVmYXVsdCB3YWl0LWVudHJ5LXRpbWUg
aXMgY29udmVydGVkIGJ5IHdhaXQtDQo+IGJpdC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uY2Ug
dGhlIHVzZXIgc2V0IHRoZSBzeXMtaW50ZXJmYWNlLCBhIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCB0
bw0KPiA+ID4gPiA+IHNhdmUgaXQuIEFuZCB3aGVuIHRoZSB1c2VyIHJlYWQgc3lzLWludGVyZmFj
ZSB3ZSB3aWxsIHJldHVybiBiYWNrDQo+ID4gPiA+ID4gdGhlDQo+ID4gPiA+IHZhcmlhYmxlLg0K
PiA+ID4gPg0KPiA+ID4gPiBXaGlsZSB3ZSBhcmUgbm90ICJyZXN0cmljdGluZyB1c2VyIGRlZmlu
ZWQgdmFsdWUiIG9yICJkZWZpbmUgc2FtZQ0KPiA+ID4gPiByZXN0cmljdGlvbiBmb3IgdXNlciBk
ZWZpbmVkIGFuZCBkZWZhdWx0IiwgY2FuIHdlIGhhdmUgb25seSBvbmUNCj4gZmxvdw0KPiA+ID4g
PiBvZiBjYWxjdWxhdGlvbiBhbmQgc2V0dGluZyByYXRoZXIgdGhhbiBjb25kaXRpb25hbCBiYXNl
ZCBvbiB1c2VyDQo+ID4gPiA+IGhhdmUgc2V0IG9yIG5vdCBzZXQ/DQo+ID4gPiA+DQo+ID4gPiBZ
ZXMsIHdlIGNhbiBkbyB0aGF0Lg0KPiA+ID4gSWYgd2Ugd2FudCB0byB1c2Ugb25lIGZsb3cgdG8g
aGFuZGxlIGl0LiBXZSBzaG91bGQgZG8gdGhlIGZvbGxvd2luZw0KPiA+IGNoYW5nZXM6DQo+ID4g
Pg0KPiA+ID4gI2lmZGVmIENPTkZJR19GU0xfU09DDQo+ID4gPiAjaW5jbHVkZSA8bGludXgvc2xh
Yi5oPg0KPiA+ID4gI2VuZGlmDQo+ID4NCj4gPiBEb24ndCBpZmRlZiBoZWFkZXJzLg0KPiA+DQo+
ID4gPiBzdGF0aWMgdTY0ICpwdzIwX3d0Ow0KPiA+ID4gc3RhdGljIHU2NCAqYWx0aXZlY19pZGxl
X3d0Ow0KPiA+ID4NCj4gPiA+IHN0YXRpYyBzc2l6ZV90IHNob3dfcHcyMF93YWl0X3RpbWUoc3Ry
dWN0IGRldmljZSAqZGV2LA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhcg0KPiA+ID4gKmJ1Zikgew0KPiA+ID4g
CXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHB3MjBfd3RbZGV2LT5pZF0pOyB9DQo+ID4g
Pg0KPiA+ID4gc3RhdGljIHNzaXplX3Qgc3RvcmVfcHcyMF93YWl0X3RpbWUoc3RydWN0IGRldmlj
ZSAqZGV2LA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIHsgLi4uDQo+ID4gPiBwdzIwX3d0W2Nw
dV0gPSB2YWx1ZTsNCj4gPiA+IC4uLg0KPiA+ID4gfQ0KPiA+ID4NCj4gPiA+IHN0YXRpYyBzc2l6
ZV90IHNob3dfYWx0aXZlY19pZGxlX3dhaXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4g
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl
ICphdHRyLCBjaGFyDQo+ID4gPiAqYnVmKSB7DQo+ID4gPiAJcmV0dXJuIHNwcmludGYoYnVmLCAi
JWxsdVxuIiwgYWx0aXZlY19pZGxlX3d0W2Rldi0+aWRdKTsgfQ0KPiA+ID4NCj4gPiA+IHN0YXRp
YyBzc2l6ZV90IHN0b3JlX2FsdGl2ZWNfaWRsZV93YWl0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2
LA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0
dHJpYnV0ZSAqYXR0ciwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIHsgLi4uDQo+ID4gPiBhbHRpdmVjX2lkbGVfd3Rb
Y3B1XSA9IHZhbHVlOw0KPiA+ID4gLi4uDQo+ID4gPiB9DQo+ID4gPg0KPiA+ID4gc3RhdGljIHZv
aWQgcmVnaXN0ZXJfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KSB7IC4uLg0KPiA+ID4gI2lm
ZGVmIENPTkZJR19GU0xfU09DDQo+ID4gPiAgICAgICAgIHUzMiB2YWx1ZSwgcHcyMF92YWx1ZSwg
YWx0aXZlY192YWx1ZTsNCj4gPiA+ICAgICAgICAgdTY0IHRiX2N5Y2xlOw0KPiA+ID4gI2VuZGlm
DQo+ID4gPiAuLi4NCj4gPiA+ICNpZmRlZiBDT05GSUdfRlNMX1NPQw0KPiA+ID4gICAgICAgICBp
ZiAoUFZSX1ZFUihjdXJfY3B1X3NwZWMtPnB2cl92YWx1ZSkgPT0gUFZSX1ZFUl9FNjUwMCkgew0K
PiA+ID4gICAgICAgICAgICAgICAgIGRldmljZV9jcmVhdGVfZmlsZShzLCAmZGV2X2F0dHJfcHcy
MF9zdGF0ZSk7DQo+ID4gPiAgICAgICAgICAgICAgICAgZGV2aWNlX2NyZWF0ZV9maWxlKHMsICZk
ZXZfYXR0cl9wdzIwX3dhaXRfdGltZSk7DQo+ID4gPg0KPiA+ID4gICAgICAgICAgICAgICAgIGRl
dmljZV9jcmVhdGVfZmlsZShzLCAmZGV2X2F0dHJfYWx0aXZlY19pZGxlKTsNCj4gPiA+ICAgICAg
ICAgICAgICAgICBkZXZpY2VfY3JlYXRlX2ZpbGUocywNCj4gJmRldl9hdHRyX2FsdGl2ZWNfaWRs
ZV93YWl0X3RpbWUpOw0KPiA+ID4gICAgICAgICB9DQo+ID4gPg0KPiA+ID4gICAgICAgICBpZiAo
IXB3MjBfd3QpDQo+ID4gPiAgICAgICAgICAgICAgICAgcHcyMF93dCA9IGt6YWxsb2MobnJfY3B1
X2lkcyAqIHNpemVvZigqcHcyMF93dCksDQo+ID4gPiBHRlBfS0VSTkVMKTsNCj4gPiA+DQo+ID4g
PiAJICBpZiAoIWFsdGl2ZWNfaWRsZV93dCkNCj4gPiA+IAkJICAgIGFsdGl2ZWNfaWRsZV93dCA9
IGt6YWxsb2MobnJfY3B1X2lkcyAqDQo+ID4gc2l6ZW9mKCphbHRpdmVjX2lkbGVfd3QpLA0KPiA+
ID4gR0ZQX0tFUk5FTCk7DQo+ID4gPg0KPiA+ID4gICAgICAgICBzbXBfY2FsbF9mdW5jdGlvbl9z
aW5nbGUoY3B1LCBkb19zaG93X3B3cm1ndGNyMCwgJnZhbHVlLCAxKTsNCj4gPiA+DQo+ID4gPiAg
ICAgICAgIHB3MjBfdmFsdWUgPSAodmFsdWUgJiBQV1JNR1RDUjBfUFcyMF9FTlQpID4+DQo+ID4g
UFdSTUdUQ1IwX1BXMjBfRU5UX1NISUZUOw0KPiA+ID4gICAgICAgICB0Yl9jeWNsZSA9ICgxIDw8
IChNQVhfQklUIC0gcHcyMF92YWx1ZSkpICogMjsNCj4gPiA+ICAgICAgICAgcHcyMF93dFtjcHVd
ID0gZGl2X3U2NCh0Yl9jeWNsZSAqIDEwMDAsIHRiX3RpY2tzX3Blcl91c2VjKSAtDQo+ID4gPiAx
Ow0KPiA+ID4NCj4gPiA+ICAgICAgICAgYWx0aXZlY192YWx1ZSA9ICh2YWx1ZSAmIFBXUk1HVENS
MF9BVl9JRExFX0NOVCkgPj4NCj4gPiBQV1JNR1RDUjBfQVZfSURMRV9DTlRfU0hJRlQ7DQo+ID4g
PiAgICAgICAgIHRiX2N5Y2xlID0gKDEgPDwgKE1BWF9CSVQgLSBhbHRpdmVjX3ZhbHVlKSkgKiAy
Ow0KPiA+ID4gICAgICAgICBhbHRpdmVjX2lkbGVfd3RbY3B1XSA9IGRpdl91NjQodGJfY3ljbGUg
KiAxMDAwLA0KPiA+ID4gdGJfdGlja3NfcGVyX3VzZWMpIC0gMTsgI2VuZGlmIC4uLg0KPiA+ID4g
fQ0KPiA+DQo+ID4gTW92ZSB0aGlzIHN0dWZmIHRvIGl0cyBvd24gZnVuY3Rpb24uICBUaGUgb25s
eSBpZmRlZiBzaG91bGQgYmUgaW4gYQ0KPiA+IGhlYWRlciB0aGF0IHByb3ZpZGVzIGFuIGlubGlu
ZSBzdHViIHdoZW4gaXQncyBub3QgYXZhaWxhYmxlLg0KPiA+DQo+ID4gQ291bGQgeW91IGV4cGxh
aW4gd2hhdCB5b3UncmUgY2hhbmdpbmcgYW5kIHdoeT8gIEEgZGlmZiBmcm9tIHlvdXINCj4gPiBw
cmV2aW91cyBwYXRjaCB3b3VsZCBoZWxwLg0KPiA+DQo+IFRob3NlIGNvZGVzIGp1c3QgZm9yIGRp
c2N1c3Mgd2l0aCBCaGFyYXQuIEhlIHdhbnQgdG8gbWFrZSBvbmUgZmxvdyBhdA0KPiAic2hvd19w
dzIwX3dhaXRfdGltZSIvIiBzaG93X2FsdGl2ZWNfaWRsZV93YWl0X3RpbWUiIGZ1bmN0aW9uLiBJ
ZiB3ZSBkbw0KPiB0aGF0LCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgcHcyMF93dC9hbHRpdmVjX2lk
bGVfd3QuDQo+IA0KSSB3aWxsIGtlZXAgdGhpcyBzdHVmZiBhdCAic2hvd19wdzIwX3dhaXRfdGlt
ZSIvInNob3dfYWx0aXZlY19pZGxlX3dhaXRfdGltZSIgYW5kIGFkZCBhIGNvbW1lbnQgYmVmb3Jl
IG91ciBkaXNjdXNzaW9uLg0KDQovKg0KICogSWYgdGhlICJ2YWx1ZSIgbGVzcyB0aGFuIDEwLCB0
aGlzIHdpbGwgb3ZlcmZsb3cuDQogKiBGcm9tIGJlbmNobWFyayB0ZXN0LCB0aGUgZGVmYXVsdCB3
YWl0IGJpdCB3aWxsIG5vdCBiZSBzZXQgbGVzcyB0aGFuIDEwYml0Lg0KICogQmVjYXVzZSAxMCBi
aXQgY29ycmVzcG9uZHMgdG8gdGhlIHdhaXQgZW50cnkgdGltZSBpcyA0MzkzNzU1NzM0MDE5OTk2
MDkobnMpLA0KICogZm9yIHdhaXQtZW50cnktaWRsZSB0aW1lIHRoaXMgdmFsdWUgbG9va3MgdG9v
IGxvbmcsIGFuZCB3ZSBjYW5ub3QgdXNlIHRob3NlDQogKiAibG9uZyIgdGltZSBhcyBhIGRlZmF1
bHQgd2FpdC1lbnRyeSB0aW1lLiBTbyBvdmVyZmxvdyBjb3VsZCBub3QgaGF2ZSBoYXBwZW5lZA0K
ICogYW5kIHdlIHVzZSB0aGlzIGNhbGN1bGF0aW9uIG1ldGhvZCB0byBnZXQgd2FpdC1lbnRyeS1p
ZGxlIHRpbWUuDQogKi8NCj4gLWRvbmdzaGVuZw0K

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-11  2:13                                 ` Dongsheng Wang
@ 2013-11-11  4:11                                   ` Bharat Bhushan
  2013-12-16  5:53                                     ` Dongsheng.Wang
  0 siblings, 1 reply; 34+ messages in thread
From: Bharat Bhushan @ 2013-11-11  4:11 UTC (permalink / raw)
  To: Dongsheng Wang, Scott Wood; +Cc: linuxppc-dev

PiA+IFRob3NlIGNvZGVzIGp1c3QgZm9yIGRpc2N1c3Mgd2l0aCBCaGFyYXQuIEhlIHdhbnQgdG8g
bWFrZSBvbmUgZmxvdyBhdA0KPiA+ICJzaG93X3B3MjBfd2FpdF90aW1lIi8iIHNob3dfYWx0aXZl
Y19pZGxlX3dhaXRfdGltZSIgZnVuY3Rpb24uIElmIHdlDQo+ID4gZG8gdGhhdCwgd2UgbmVlZCB0
byBpbml0aWFsaXplIHB3MjBfd3QvYWx0aXZlY19pZGxlX3d0Lg0KPiA+DQo+IEkgd2lsbCBrZWVw
IHRoaXMgc3R1ZmYgYXQgInNob3dfcHcyMF93YWl0X3RpbWUiLyJzaG93X2FsdGl2ZWNfaWRsZV93
YWl0X3RpbWUiDQo+IGFuZCBhZGQgYSBjb21tZW50IGJlZm9yZSBvdXIgZGlzY3Vzc2lvbi4NCj4g
DQo+IC8qDQo+ICAqIElmIHRoZSAidmFsdWUiIGxlc3MgdGhhbiAxMCwgdGhpcyB3aWxsIG92ZXJm
bG93Lg0KPiAgKiBGcm9tIGJlbmNobWFyayB0ZXN0LCB0aGUgZGVmYXVsdCB3YWl0IGJpdCB3aWxs
IG5vdCBiZSBzZXQgbGVzcyB0aGFuIDEwYml0Lg0KPiAgKiBCZWNhdXNlIDEwIGJpdCBjb3JyZXNw
b25kcyB0byB0aGUgd2FpdCBlbnRyeSB0aW1lIGlzIDQzOTM3NTU3MzQwMTk5OTYwOShucyksDQo+
ICAqIGZvciB3YWl0LWVudHJ5LWlkbGUgdGltZSB0aGlzIHZhbHVlIGxvb2tzIHRvbyBsb25nLCBh
bmQgd2UgY2Fubm90IHVzZSB0aG9zZQ0KPiAgKiAibG9uZyIgdGltZSBhcyBhIGRlZmF1bHQgd2Fp
dC1lbnRyeSB0aW1lLiBTbyBvdmVyZmxvdyBjb3VsZCBub3QgaGF2ZSBoYXBwZW5lZA0KPiAgKiBh
bmQgd2UgdXNlIHRoaXMgY2FsY3VsYXRpb24gbWV0aG9kIHRvIGdldCB3YWl0LWVudHJ5LWlkbGUg
dGltZS4NCj4gICovDQoNCkkgdGhpbmsgbm93IHdlIHdpbGwgdXNlIHNhbWUgY2FsY3VsYXRpb24g
Y29kZSBmb3IgZGVmYXVsdCB2YWx1ZSBhbmQgdXNlciBzZXQgdmFsdWUsIHNvIGFkZGluZyB0aGUg
Y29tbWVudCBpcyBub3Qgc3VmZmljaWVudCwgd2Ugc2hvdWxkIGVycm9yIG91dCBmcm9tIHRoZSBj
b2RlIGlmIHZhbHVlIGlzIGxlc3MgdGhhbiAxMC4gQXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QgbGVz
cyB0aGFuIDEwIHNvIHRoaXMgd2lsbCBhbHdheXMgd29yayB3aXRoIGRlZmF1bHQgdmFsdWUgYnV0
IGlmIHVzZXIgdHJpZXMgdG8gc2V0IGxlc3MgdGhhbiAxMCB0aGVuIGVycm9yIG91dCBhbmQgYXNr
IHVzZXIgdG8gdHJ5IG1vcmUgdGhhbiA5Lg0KDQotQmhhcmF0DQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-11-11  4:11                                   ` Bharat Bhushan
@ 2013-12-16  5:53                                     ` Dongsheng.Wang
  2013-12-16 18:26                                       ` Scott Wood
  0 siblings, 1 reply; 34+ messages in thread
From: Dongsheng.Wang @ 2013-12-16  5:53 UTC (permalink / raw)
  To: Bharat.Bhushan, Scott Wood; +Cc: linuxppc-dev, Dongsheng.Wang

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQmh1c2hhbiBCaGFyYXQt
UjY1Nzc3DQo+IFNlbnQ6IE1vbmRheSwgTm92ZW1iZXIgMTEsIDIwMTMgMTI6MTEgUE0NCj4gVG86
IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNDsgV29vZCBTY290dC1CMDc0MjENCj4gQ2M6IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgNC80XSBwb3dl
cnBjLzg1eHg6IGFkZCBzeXNmcyBmb3IgcHcyMCBzdGF0ZSBhbmQgYWx0aXZlYw0KPiBpZGxlDQo+
IA0KPiA+ID4gVGhvc2UgY29kZXMganVzdCBmb3IgZGlzY3VzcyB3aXRoIEJoYXJhdC4gSGUgd2Fu
dCB0byBtYWtlIG9uZSBmbG93IGF0DQo+ID4gPiAic2hvd19wdzIwX3dhaXRfdGltZSIvIiBzaG93
X2FsdGl2ZWNfaWRsZV93YWl0X3RpbWUiIGZ1bmN0aW9uLiBJZiB3ZQ0KPiA+ID4gZG8gdGhhdCwg
d2UgbmVlZCB0byBpbml0aWFsaXplIHB3MjBfd3QvYWx0aXZlY19pZGxlX3d0Lg0KPiA+ID4NCj4g
PiBJIHdpbGwga2VlcCB0aGlzIHN0dWZmIGF0ICJzaG93X3B3MjBfd2FpdF90aW1lIi8ic2hvd19h
bHRpdmVjX2lkbGVfd2FpdF90aW1lIg0KPiA+IGFuZCBhZGQgYSBjb21tZW50IGJlZm9yZSBvdXIg
ZGlzY3Vzc2lvbi4NCj4gPg0KPiA+IC8qDQo+ID4gICogSWYgdGhlICJ2YWx1ZSIgbGVzcyB0aGFu
IDEwLCB0aGlzIHdpbGwgb3ZlcmZsb3cuDQo+ID4gICogRnJvbSBiZW5jaG1hcmsgdGVzdCwgdGhl
IGRlZmF1bHQgd2FpdCBiaXQgd2lsbCBub3QgYmUgc2V0IGxlc3MgdGhhbiAxMGJpdC4NCj4gPiAg
KiBCZWNhdXNlIDEwIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgd2FpdCBlbnRyeSB0aW1lIGlzIDQz
OTM3NTU3MzQwMTk5OTYwOShucyksDQo+ID4gICogZm9yIHdhaXQtZW50cnktaWRsZSB0aW1lIHRo
aXMgdmFsdWUgbG9va3MgdG9vIGxvbmcsIGFuZCB3ZSBjYW5ub3QgdXNlIHRob3NlDQo+ID4gICog
ImxvbmciIHRpbWUgYXMgYSBkZWZhdWx0IHdhaXQtZW50cnkgdGltZS4gU28gb3ZlcmZsb3cgY291
bGQgbm90IGhhdmUNCj4gaGFwcGVuZWQNCj4gPiAgKiBhbmQgd2UgdXNlIHRoaXMgY2FsY3VsYXRp
b24gbWV0aG9kIHRvIGdldCB3YWl0LWVudHJ5LWlkbGUgdGltZS4NCj4gPiAgKi8NCj4gDQo+IEkg
dGhpbmsgbm93IHdlIHdpbGwgdXNlIHNhbWUgY2FsY3VsYXRpb24gY29kZSBmb3IgZGVmYXVsdCB2
YWx1ZSBhbmQgdXNlciBzZXQNCj4gdmFsdWUsIHNvIGFkZGluZyB0aGUgY29tbWVudCBpcyBub3Qg
c3VmZmljaWVudCwgd2Ugc2hvdWxkIGVycm9yIG91dCBmcm9tIHRoZQ0KPiBjb2RlIGlmIHZhbHVl
IGlzIGxlc3MgdGhhbiAxMC4gQXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QgbGVzcyB0aGFuIDEwIHNv
IHRoaXMgd2lsbA0KPiBhbHdheXMgd29yayB3aXRoIGRlZmF1bHQgdmFsdWUgYnV0IGlmIHVzZXIg
dHJpZXMgdG8gc2V0IGxlc3MgdGhhbiAxMCB0aGVuIGVycm9yDQo+IG91dCBhbmQgYXNrIHVzZXIg
dG8gdHJ5IG1vcmUgdGhhbiA5Lg0KPiANCkFnYWluLCBvbmNlIHRoZSB1c2VyIGhhcyBzZXQgdXAg
YSB0aW1lLCB0aGUgY29kZSB3aWxsIGdvIHRvIGFub3RoZXIgYnJhbmNoLg0KDQplbHNlIHsNCgl0
aW1lID0gcHcyMF93dDsNCn0NCg0KV2UgZG8gc28gbXVjaCBmb3IgdGhpcyBhIGxpdHRsZSBmdW5j
dGlvbiBwcm9jZXNzaW5nIGlzIG5vdCB3b3J0aCBpdC4gSWYgd2UgY2FuJ3QNCmFncmVlIG9uIHRo
aXMgc3lzIGludGVyZmFjZS4gSSB3aWxsIGNoYW5nZSB0aGlzIHN5cyBpbnRlcmZhY2UgdG8gc2hv
d19wdzIwX3dhaXRfYml0LiA6KQ0KDQpjb2RlIGUuZzoNCnN0YXRpYyBzc2l6ZV90IHNob3dfcHcy
MF93YWl0X2JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQp7DQogICAg
ICAgIHUzMiBlbnRyeV9iaXQ7DQogICAgICAgIHVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOw0K
DQogICAgICAgIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGRvX3Nob3dfcHdybWd0Y3Iw
LCAmZW50cnlfYml0LCAxKTsNCiAgICAgICAgZW50cnlfYml0ID0gKGVudHJ5X2JpdCAmIFBXUk1H
VENSMF9QVzIwX0VOVCkgPj4NCiAgICAgICAgICAgICAgICBQV1JNR1RDUjBfUFcyMF9FTlRfU0hJ
RlQ7DQoNCiAgICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGVudHJ5X2JpdCk7DQp9
DQoNCi1kb25nc2hlbmcNCg0KPiAtQmhhcmF0DQo=

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle
  2013-12-16  5:53                                     ` Dongsheng.Wang
@ 2013-12-16 18:26                                       ` Scott Wood
  0 siblings, 0 replies; 34+ messages in thread
From: Scott Wood @ 2013-12-16 18:26 UTC (permalink / raw)
  To: Wang Dongsheng-B40534; +Cc: Bhushan Bharat-R65777, linuxppc-dev

On Sun, 2013-12-15 at 23:53 -0600, Wang Dongsheng-B40534 wrote:
> 
> > -----Original Message-----
> > From: Bhushan Bharat-R65777
> > Sent: Monday, November 11, 2013 12:11 PM
> > To: Wang Dongsheng-B40534; Wood Scott-B07421
> > Cc: linuxppc-dev@lists.ozlabs.org
> > Subject: RE: [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec
> > idle
> > 
> > > > Those codes just for discuss with Bharat. He want to make one flow at
> > > > "show_pw20_wait_time"/" show_altivec_idle_wait_time" function. If we
> > > > do that, we need to initialize pw20_wt/altivec_idle_wt.
> > > >
> > > I will keep this stuff at "show_pw20_wait_time"/"show_altivec_idle_wait_time"
> > > and add a comment before our discussion.
> > >
> > > /*
> > >  * If the "value" less than 10, this will overflow.
> > >  * From benchmark test, the default wait bit will not be set less than 10bit.
> > >  * Because 10 bit corresponds to the wait entry time is 439375573401999609(ns),
> > >  * for wait-entry-idle time this value looks too long, and we cannot use those
> > >  * "long" time as a default wait-entry time. So overflow could not have
> > happened
> > >  * and we use this calculation method to get wait-entry-idle time.
> > >  */
> > 
> > I think now we will use same calculation code for default value and user set
> > value, so adding the comment is not sufficient, we should error out from the
> > code if value is less than 10. As default value is not less than 10 so this will
> > always work with default value but if user tries to set less than 10 then error
> > out and ask user to try more than 9.
> > 
> Again, once the user has set up a time, the code will go to another branch.
> 
> else {
> 	time = pw20_wt;
> }
> 
> We do so much for this a little function processing is not worth it. If we can't
> agree on this sys interface. I will change this sys interface to show_pw20_wait_bit. :)

Please don't change it.

-Scott

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2013-12-16 18:26 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-15  9:21 [PATCH v5 1/4] powerpc/fsl: add E6500 PVR and SPRN_PWRMGTCR0 define Dongsheng Wang
2013-10-15  9:21 ` [PATCH v5 2/4] powerpc/85xx: add hardware automatically enter altivec idle state Dongsheng Wang
2013-10-15  9:21 ` [PATCH v5 3/4] powerpc/85xx: add hardware automatically enter pw20 state Dongsheng Wang
2013-10-15  9:21 ` [PATCH v5 4/4] powerpc/85xx: add sysfs for pw20 state and altivec idle Dongsheng Wang
2013-10-16 17:01   ` Bhushan Bharat-R65777
2013-10-17  2:46     ` Wang Dongsheng-B40534
2013-10-17  3:19       ` Bhushan Bharat-R65777
2013-10-17  5:51         ` Wang Dongsheng-B40534
2013-10-17  6:00           ` Bhushan Bharat-R65777
2013-10-17  6:34             ` Wang Dongsheng-B40534
2013-10-17  6:45               ` Bhushan Bharat-R65777
2013-10-18  3:02                 ` Wang Dongsheng-B40534
2013-10-18 19:21                   ` Scott Wood
2013-10-18 19:24                     ` Bhushan Bharat-R65777
2013-10-21  3:10                     ` Wang Dongsheng-B40534
2013-11-04  4:04                     ` Dongsheng Wang
2013-11-04 21:51                       ` Scott Wood
2013-11-05  3:09                         ` Dongsheng Wang
2013-11-06  5:25                           ` Bharat Bhushan
2013-11-06  7:50                             ` Dongsheng Wang
2013-11-07  1:20                               ` Scott Wood
2013-11-07  2:17                                 ` Dongsheng Wang
2013-11-11  2:13                                 ` Dongsheng Wang
2013-11-11  4:11                                   ` Bharat Bhushan
2013-12-16  5:53                                     ` Dongsheng.Wang
2013-12-16 18:26                                       ` Scott Wood
2013-10-17 16:51           ` Scott Wood
2013-10-18  2:36             ` Wang Dongsheng-B40534
2013-10-18 17:49               ` Bhushan Bharat-R65777
2013-10-18 19:02                 ` Scott Wood
2013-10-18 19:23               ` Scott Wood
2013-10-21  3:27                 ` Wang Dongsheng-B40534
2013-11-04 23:47                   ` Scott Wood
2013-11-05  2:11                     ` Dongsheng Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).