diff mbox series

scsi: ufs: Remove .get_hba_mac()

Message ID 20240412174158.3050361-1-bvanassche@acm.org
State New
Headers show
Series scsi: ufs: Remove .get_hba_mac() | expand

Commit Message

Bart Van Assche April 12, 2024, 5:41 p.m. UTC
Simplify the UFSHCI core and also the UFSHCI host drivers by removing
the .get_hba_mac() callback and by reading the NUTRS register field
instead.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ufs/core/ufs-mcq.c      | 14 +++++---------
 drivers/ufs/core/ufshcd-priv.h  |  8 --------
 drivers/ufs/host/ufs-mediatek.c | 13 -------------
 drivers/ufs/host/ufs-qcom.c     |  7 -------
 drivers/ufs/host/ufs-qcom.h     |  1 -
 include/ufs/ufshcd.h            |  2 --
 include/ufs/ufshci.h            |  2 +-
 7 files changed, 6 insertions(+), 41 deletions(-)

Comments

Bart Van Assche April 13, 2024, 2:16 p.m. UTC | #1
On 4/13/24 04:48, Avri Altman wrote:
>> +       nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
> Isn't this already hba->nutrs?

Enabling MCQ causes the value of NUTRS to change.

>> +       WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
> redundant

Why is this considered redundant?

Thanks,

Bart.
Avri Altman April 13, 2024, 7 p.m. UTC | #2
> On 4/13/24 04:48, Avri Altman wrote:
> >> +       nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
> > Isn't this already hba->nutrs?
> 
> Enabling MCQ causes the value of NUTRS to change.
But not by the time ufshcd_mcq_decide_queue_depth is called.
ufshcd_mcq_decide_queue_depth is where hba->nutrs may change.

> 
> >> +       WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
> > redundant
> 
> Why is this considered redundant?
I see no point checking the hw.
Both In legacy & MCQ it is allowed to be < 32 - why the WARN?

Thanks,
Avri
> 
> Thanks,
> 
> Bart.
Bjorn Andersson April 15, 2024, 1:33 a.m. UTC | #3
On Fri, Apr 12, 2024 at 10:41:29AM -0700, Bart Van Assche wrote:
> Simplify the UFSHCI core and also the UFSHCI host drivers by removing
> the .get_hba_mac() callback and by reading the NUTRS register field
> instead.
> 

This quite clearly states that the change is merely a cleanup. Can you
confirm that (capabilities & 0xff) + 1 read back as 64 on both Mediatek
and Qualcomm platforms? Such that this indeed is merely a cleanup...

If not, please split the change in two; one that drops the callback in
favor of always using MAX_SUPP_MAC, and a separate change that instead
reads the value back.


Please provide a clear problem description in your commit messages.

Regards,
Bjorn
Peter Wang (王信友) April 15, 2024, 7:22 a.m. UTC | #4
On Fri, 2024-04-12 at 10:41 -0700, Bart Van Assche wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  Simplify the UFSHCI core and also the UFSHCI host drivers by
> removing
> the .get_hba_mac() callback and by reading the NUTRS register field
> instead.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>  drivers/ufs/core/ufs-mcq.c      | 14 +++++---------
>  drivers/ufs/core/ufshcd-priv.h  |  8 --------
>  drivers/ufs/host/ufs-mediatek.c | 13 -------------
>  drivers/ufs/host/ufs-qcom.c     |  7 -------
>  drivers/ufs/host/ufs-qcom.h     |  1 -
>  include/ufs/ufshcd.h            |  2 --
>  include/ufs/ufshci.h            |  2 +-
>  7 files changed, 6 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c
> index 768bf87cd80d..228975caf68e 100644
> --- a/drivers/ufs/core/ufs-mcq.c
> +++ b/drivers/ufs/core/ufs-mcq.c
> @@ -125,20 +125,16 @@ struct ufs_hw_queue
> *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba,
>   *
>   * MAC - Max. Active Command of the Host Controller (HC)
>   * HC wouldn't send more than this commands to the device.
> - * It is mandatory to implement get_hba_mac() to enable MCQ mode.
>   * Calculates and adjusts the queue depth based on the depth
>   * supported by the HC and ufs device.
>   */
>  int ufshcd_mcq_decide_queue_depth(struct ufs_hba *hba)
>  {
> -	int mac;
> +	int nutrs;
>  
> -	/* Mandatory to implement get_hba_mac() */
> -	mac = ufshcd_mcq_vops_get_hba_mac(hba);
> -	if (mac < 0) {
> -		dev_err(hba->dev, "Failed to get mac, err=%d\n", mac);
> -		return mac;
> -	}
> +	WARN_ON_ONCE(!hba->mcq_enabled);
> +	nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
> 

Hi Bart,

Mediatek some platform read nutrs in MCQ mode is 0x1F, not 0x3F.
Which means we still need this ops to get correct MAC.


> +	WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
>  
>  	WARN_ON_ONCE(!hba->dev_info.bqueuedepth);
>  	/*
> @@ -146,7 +142,7 @@ int ufshcd_mcq_decide_queue_depth(struct ufs_hba
> *hba)
>  	 * It is mandatory for UFS device to define bQueueDepth if
>  	 * shared queuing architecture is enabled.
>  	 */
> -	return min_t(int, mac, hba->dev_info.bqueuedepth);
> +	return min_t(int, nutrs, hba->dev_info.bqueuedepth);
>  }
>  
>  static int ufshcd_mcq_config_nr_queues(struct ufs_hba *hba)
> diff --git a/drivers/ufs/core/ufshcd-priv.h
> b/drivers/ufs/core/ufshcd-priv.h
> index f42d99ce5bf1..a1add22205db 100644
> --- a/drivers/ufs/core/ufshcd-priv.h
> +++ b/drivers/ufs/core/ufshcd-priv.h
> @@ -255,14 +255,6 @@ static inline int
> ufshcd_vops_mcq_config_resource(struct ufs_hba *hba)
>  	return -EOPNOTSUPP;
>  }
>  
> -static inline int ufshcd_mcq_vops_get_hba_mac(struct ufs_hba *hba)
> -{
> -	if (hba->vops && hba->vops->get_hba_mac)
> -		return hba->vops->get_hba_mac(hba);
> -
> -	return -EOPNOTSUPP;
> -}
> -
>  static inline int ufshcd_mcq_vops_op_runtime_config(struct ufs_hba
> *hba)
>  {
>  	if (hba->vops && hba->vops->op_runtime_config)
> diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-
> mediatek.c
> index c4f997196c57..0a52917e7fe6 100644
> --- a/drivers/ufs/host/ufs-mediatek.c
> +++ b/drivers/ufs/host/ufs-mediatek.c
> @@ -34,7 +34,6 @@ static int  ufs_mtk_config_mcq(struct ufs_hba *hba,
> bool irq);
>  #include "ufs-mediatek-trace.h"
>  #undef CREATE_TRACE_POINTS
>  
> -#define MAX_SUPP_MAC 64
>  #define MCQ_QUEUE_OFFSET(c) ((((c) >> 16) & 0xFF) * 0x200)
>  
>  static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = {
> @@ -1656,17 +1655,6 @@ static int ufs_mtk_clk_scale_notify(struct
> ufs_hba *hba, bool scale_up,
>  	return 0;
>  }
>  
> -static int ufs_mtk_get_hba_mac(struct ufs_hba *hba)
> -{
> -	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
> -
> -	/* MCQ operation not permitted */
> -	if (host->caps & UFS_MTK_CAP_DISABLE_MCQ)
> -		return -EPERM;
> -
> 

Beside, mediatek also have a host caps to disable MCQ even hw support.

Thanks.
Peter



> -	return MAX_SUPP_MAC;
> -}
> -
>  static int ufs_mtk_op_runtime_config(struct ufs_hba *hba)
>  {
>  	struct ufshcd_mcq_opr_info_t *opr;
> @@ -1801,7 +1789,6 @@ static const struct ufs_hba_variant_ops
> ufs_hba_mtk_vops = {
>  	.config_scaling_param = ufs_mtk_config_scaling_param,
>  	.clk_scale_notify    = ufs_mtk_clk_scale_notify,
>  	/* mcq vops */
> -	.get_hba_mac         = ufs_mtk_get_hba_mac,
>  	.op_runtime_config   = ufs_mtk_op_runtime_config,
>  	.mcq_config_resource = ufs_mtk_mcq_config_resource,
>  	.config_esi          = ufs_mtk_config_esi,
> diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-
> qcom.c
> index 0b02e697ea5b..100f5f0b9da6 100644
> --- a/drivers/ufs/host/ufs-qcom.c
> +++ b/drivers/ufs/host/ufs-qcom.c
> @@ -1673,12 +1673,6 @@ static int ufs_qcom_op_runtime_config(struct
> ufs_hba *hba)
>  	return 0;
>  }
>  
> -static int ufs_qcom_get_hba_mac(struct ufs_hba *hba)
> -{
> -	/* Qualcomm HC supports up to 64 */
> -	return MAX_SUPP_MAC;
> -}
> -
>  static int ufs_qcom_get_outstanding_cqs(struct ufs_hba *hba,
>  					unsigned long *ocqs)
>  {
> @@ -1798,7 +1792,6 @@ static const struct ufs_hba_variant_ops
> ufs_hba_qcom_vops = {
>  	.program_key		= ufs_qcom_ice_program_key,
>  	.reinit_notify		= ufs_qcom_reinit_notify,
>  	.mcq_config_resource	= ufs_qcom_mcq_config_resource,
> -	.get_hba_mac		= ufs_qcom_get_hba_mac,
>  	.op_runtime_config	= ufs_qcom_op_runtime_config,
>  	.get_outstanding_cqs	= ufs_qcom_get_outstanding_cqs,
>  	.config_esi		= ufs_qcom_config_esi,
> diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-
> qcom.h
> index b9de170983c9..7951421b9921 100644
> --- a/drivers/ufs/host/ufs-qcom.h
> +++ b/drivers/ufs/host/ufs-qcom.h
> @@ -14,7 +14,6 @@
>  #define TX_FSM_HIBERN8          0x1
>  #define HBRN8_POLL_TOUT_MS      100
>  #define DEFAULT_CLK_RATE_HZ     1000000
> -#define MAX_SUPP_MAC		64
>  #define MAX_ESI_VEC		32
>  
>  #define UFS_HW_VER_MAJOR_MASK	GENMASK(31, 28)
> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
> index bad88bd91995..3f50621b8564 100644
> --- a/include/ufs/ufshcd.h
> +++ b/include/ufs/ufshcd.h
> @@ -324,7 +324,6 @@ struct ufs_pwr_mode_info {
>   * @event_notify: called to notify important events
>   * @reinit_notify: called to notify reinit of UFSHCD during max gear
> switch
>   * @mcq_config_resource: called to configure MCQ platform resources
> - * @get_hba_mac: called to get vendor specific mac value, mandatory
> for mcq mode
>   * @op_runtime_config: called to config Operation and runtime regs
> Pointers
>   * @get_outstanding_cqs: called to get outstanding completion queues
>   * @config_esi: called to config Event Specific Interrupt
> @@ -369,7 +368,6 @@ struct ufs_hba_variant_ops {
>  				enum ufs_event_type evt, void *data);
>  	void	(*reinit_notify)(struct ufs_hba *);
>  	int	(*mcq_config_resource)(struct ufs_hba *hba);
> -	int	(*get_hba_mac)(struct ufs_hba *hba);
>  	int	(*op_runtime_config)(struct ufs_hba *hba);
>  	int	(*get_outstanding_cqs)(struct ufs_hba *hba,
>  				       unsigned long *ocqs);
> diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h
> index 385e1c6b8d60..6c28177113e1 100644
> --- a/include/ufs/ufshci.h
> +++ b/include/ufs/ufshci.h
> @@ -67,7 +67,7 @@ enum {
>  
>  /* Controller capability masks */
>  enum {
> -	MASK_TRANSFER_REQUESTS_SLOTS		= 0x0000001F,
> +	MASK_TRANSFER_REQUESTS_SLOTS		= 0x000000FF,
>  	MASK_TASK_MANAGEMENT_REQUEST_SLOTS	= 0x00070000,
>  	MASK_EHSLUTRD_SUPPORTED			= 0x00400000,
>  	MASK_AUTO_HIBERN8_SUPPORT		= 0x00800000,
Bart Van Assche April 15, 2024, 5:16 p.m. UTC | #5
On 4/14/24 18:33, Bjorn Andersson wrote:
> On Fri, Apr 12, 2024 at 10:41:29AM -0700, Bart Van Assche wrote:
>> Simplify the UFSHCI core and also the UFSHCI host drivers by removing
>> the .get_hba_mac() callback and by reading the NUTRS register field
>> instead.
> 
> This quite clearly states that the change is merely a cleanup. Can you
> confirm that (capabilities & 0xff) + 1 read back as 64 on both Mediatek
> and Qualcomm platforms? Such that this indeed is merely a cleanup...

I'm waiting for feedback from MediaTek and Qualcomm to learn whether or
not their controllers comply with this aspect of the UFSHCI 4.0
standard.

Thanks,

Bart.
Bart Van Assche April 15, 2024, 5:18 p.m. UTC | #6
On 4/15/24 00:22, Peter Wang (王信友) wrote:
> Mediatek some platform read nutrs in MCQ mode is 0x1F, not 0x3F.
> Which means we still need this ops to get correct MAC.
Hi Peter,

Thanks for the feedback. I will prepare a new version of this patch
that preserves the .get_hba_mac() callback.

Thanks,

Bart.
Avri Altman April 17, 2024, 11:17 a.m. UTC | #7
> > On 4/13/24 04:48, Avri Altman wrote:
> > >> +       nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
> > > Isn't this already hba->nutrs?
> >
> > Enabling MCQ causes the value of NUTRS to change.
> But not by the time ufshcd_mcq_decide_queue_depth is called.
> ufshcd_mcq_decide_queue_depth is where hba->nutrs may change.
> 
> >
> > >> +       WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
> > > redundant
> >
> > Why is this considered redundant?
> I see no point checking the hw.
> Both In legacy & MCQ it is allowed to be < 32 - why the WARN?
If any, the check proposed here -
https://lore.kernel.org/lkml/DM6PR04MB6575720218D06C3EF9721BF2FC639@DM6PR04MB6575.namprd04.prod.outlook.com/
Makes more sense to me.

Thanks,
Avri

> 
> Thanks,
> Avri
> >
> > Thanks,
> >
> > Bart.
diff mbox series

Patch

diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c
index 768bf87cd80d..228975caf68e 100644
--- a/drivers/ufs/core/ufs-mcq.c
+++ b/drivers/ufs/core/ufs-mcq.c
@@ -125,20 +125,16 @@  struct ufs_hw_queue *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba,
  *
  * MAC - Max. Active Command of the Host Controller (HC)
  * HC wouldn't send more than this commands to the device.
- * It is mandatory to implement get_hba_mac() to enable MCQ mode.
  * Calculates and adjusts the queue depth based on the depth
  * supported by the HC and ufs device.
  */
 int ufshcd_mcq_decide_queue_depth(struct ufs_hba *hba)
 {
-	int mac;
+	int nutrs;
 
-	/* Mandatory to implement get_hba_mac() */
-	mac = ufshcd_mcq_vops_get_hba_mac(hba);
-	if (mac < 0) {
-		dev_err(hba->dev, "Failed to get mac, err=%d\n", mac);
-		return mac;
-	}
+	WARN_ON_ONCE(!hba->mcq_enabled);
+	nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
+	WARN_ONCE(nutrs < 32, "nutrs: %d < 32\n", nutrs);
 
 	WARN_ON_ONCE(!hba->dev_info.bqueuedepth);
 	/*
@@ -146,7 +142,7 @@  int ufshcd_mcq_decide_queue_depth(struct ufs_hba *hba)
 	 * It is mandatory for UFS device to define bQueueDepth if
 	 * shared queuing architecture is enabled.
 	 */
-	return min_t(int, mac, hba->dev_info.bqueuedepth);
+	return min_t(int, nutrs, hba->dev_info.bqueuedepth);
 }
 
 static int ufshcd_mcq_config_nr_queues(struct ufs_hba *hba)
diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h
index f42d99ce5bf1..a1add22205db 100644
--- a/drivers/ufs/core/ufshcd-priv.h
+++ b/drivers/ufs/core/ufshcd-priv.h
@@ -255,14 +255,6 @@  static inline int ufshcd_vops_mcq_config_resource(struct ufs_hba *hba)
 	return -EOPNOTSUPP;
 }
 
-static inline int ufshcd_mcq_vops_get_hba_mac(struct ufs_hba *hba)
-{
-	if (hba->vops && hba->vops->get_hba_mac)
-		return hba->vops->get_hba_mac(hba);
-
-	return -EOPNOTSUPP;
-}
-
 static inline int ufshcd_mcq_vops_op_runtime_config(struct ufs_hba *hba)
 {
 	if (hba->vops && hba->vops->op_runtime_config)
diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index c4f997196c57..0a52917e7fe6 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -34,7 +34,6 @@  static int  ufs_mtk_config_mcq(struct ufs_hba *hba, bool irq);
 #include "ufs-mediatek-trace.h"
 #undef CREATE_TRACE_POINTS
 
-#define MAX_SUPP_MAC 64
 #define MCQ_QUEUE_OFFSET(c) ((((c) >> 16) & 0xFF) * 0x200)
 
 static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = {
@@ -1656,17 +1655,6 @@  static int ufs_mtk_clk_scale_notify(struct ufs_hba *hba, bool scale_up,
 	return 0;
 }
 
-static int ufs_mtk_get_hba_mac(struct ufs_hba *hba)
-{
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
-
-	/* MCQ operation not permitted */
-	if (host->caps & UFS_MTK_CAP_DISABLE_MCQ)
-		return -EPERM;
-
-	return MAX_SUPP_MAC;
-}
-
 static int ufs_mtk_op_runtime_config(struct ufs_hba *hba)
 {
 	struct ufshcd_mcq_opr_info_t *opr;
@@ -1801,7 +1789,6 @@  static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
 	.config_scaling_param = ufs_mtk_config_scaling_param,
 	.clk_scale_notify    = ufs_mtk_clk_scale_notify,
 	/* mcq vops */
-	.get_hba_mac         = ufs_mtk_get_hba_mac,
 	.op_runtime_config   = ufs_mtk_op_runtime_config,
 	.mcq_config_resource = ufs_mtk_mcq_config_resource,
 	.config_esi          = ufs_mtk_config_esi,
diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c
index 0b02e697ea5b..100f5f0b9da6 100644
--- a/drivers/ufs/host/ufs-qcom.c
+++ b/drivers/ufs/host/ufs-qcom.c
@@ -1673,12 +1673,6 @@  static int ufs_qcom_op_runtime_config(struct ufs_hba *hba)
 	return 0;
 }
 
-static int ufs_qcom_get_hba_mac(struct ufs_hba *hba)
-{
-	/* Qualcomm HC supports up to 64 */
-	return MAX_SUPP_MAC;
-}
-
 static int ufs_qcom_get_outstanding_cqs(struct ufs_hba *hba,
 					unsigned long *ocqs)
 {
@@ -1798,7 +1792,6 @@  static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
 	.program_key		= ufs_qcom_ice_program_key,
 	.reinit_notify		= ufs_qcom_reinit_notify,
 	.mcq_config_resource	= ufs_qcom_mcq_config_resource,
-	.get_hba_mac		= ufs_qcom_get_hba_mac,
 	.op_runtime_config	= ufs_qcom_op_runtime_config,
 	.get_outstanding_cqs	= ufs_qcom_get_outstanding_cqs,
 	.config_esi		= ufs_qcom_config_esi,
diff --git a/drivers/ufs/host/ufs-qcom.h b/drivers/ufs/host/ufs-qcom.h
index b9de170983c9..7951421b9921 100644
--- a/drivers/ufs/host/ufs-qcom.h
+++ b/drivers/ufs/host/ufs-qcom.h
@@ -14,7 +14,6 @@ 
 #define TX_FSM_HIBERN8          0x1
 #define HBRN8_POLL_TOUT_MS      100
 #define DEFAULT_CLK_RATE_HZ     1000000
-#define MAX_SUPP_MAC		64
 #define MAX_ESI_VEC		32
 
 #define UFS_HW_VER_MAJOR_MASK	GENMASK(31, 28)
diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h
index bad88bd91995..3f50621b8564 100644
--- a/include/ufs/ufshcd.h
+++ b/include/ufs/ufshcd.h
@@ -324,7 +324,6 @@  struct ufs_pwr_mode_info {
  * @event_notify: called to notify important events
  * @reinit_notify: called to notify reinit of UFSHCD during max gear switch
  * @mcq_config_resource: called to configure MCQ platform resources
- * @get_hba_mac: called to get vendor specific mac value, mandatory for mcq mode
  * @op_runtime_config: called to config Operation and runtime regs Pointers
  * @get_outstanding_cqs: called to get outstanding completion queues
  * @config_esi: called to config Event Specific Interrupt
@@ -369,7 +368,6 @@  struct ufs_hba_variant_ops {
 				enum ufs_event_type evt, void *data);
 	void	(*reinit_notify)(struct ufs_hba *);
 	int	(*mcq_config_resource)(struct ufs_hba *hba);
-	int	(*get_hba_mac)(struct ufs_hba *hba);
 	int	(*op_runtime_config)(struct ufs_hba *hba);
 	int	(*get_outstanding_cqs)(struct ufs_hba *hba,
 				       unsigned long *ocqs);
diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h
index 385e1c6b8d60..6c28177113e1 100644
--- a/include/ufs/ufshci.h
+++ b/include/ufs/ufshci.h
@@ -67,7 +67,7 @@  enum {
 
 /* Controller capability masks */
 enum {
-	MASK_TRANSFER_REQUESTS_SLOTS		= 0x0000001F,
+	MASK_TRANSFER_REQUESTS_SLOTS		= 0x000000FF,
 	MASK_TASK_MANAGEMENT_REQUEST_SLOTS	= 0x00070000,
 	MASK_EHSLUTRD_SUPPORTED			= 0x00400000,
 	MASK_AUTO_HIBERN8_SUPPORT		= 0x00800000,