<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle20
        {mso-style-type:personal-compose;
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:"Courier New"">Looks Good.<br>
<br>
Reviewed-by:</span> Ravi Kumar Vodapalli <a href="mailto:ravi.kumar.vodapalli@intel.com">
<ravi.kumar.vodapalli@intel.com></a> <span style="font-family:"Courier New""><br>
Thanks,<br>
Ravi Kumar V</span><o:p></o:p></p>
<div>
<p class="MsoNormal">On 9/7/2023 9:07 PM, Lucas De Marchi wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>From: Ravi Kumar Vodapalli <a href="mailto:ravi.kumar.vodapalli@intel.com"><ravi.kumar.vodapalli@intel.com></a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Add Display Power Well for LNL platform, mostly it is same as MTL<o:p></o:p></pre>
<pre>platform so reused the code<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Changes are:<o:p></o:p></pre>
<pre>1. AUX_CH_CTL and AUX_CH_DATA1 are different from MTL so added extra<o:p></o:p></pre>
<pre>   logic xelpdp_aux_power_well_ops functions.<o:p></o:p></pre>
<pre>2. PGPICA1 contains type-C capable port slices which requires the well<o:p></o:p></pre>
<pre>   to power powered up, so added new power well definition for PGPICA1<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>FIXME: make this commit and "drm/i915/xe2lpd: Move registers to PICA"<o:p></o:p></pre>
<pre>to use a similar approach how the ranges are handled<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>BSpec: 68886<o:p></o:p></pre>
<pre>Signed-off-by: Ravi Kumar Vodapalli <a href="mailto:ravi.kumar.vodapalli@intel.com"><ravi.kumar.vodapalli@intel.com></a><o:p></o:p></pre>
<pre>Signed-off-by: Gustavo Sousa <a href="mailto:gustavo.sousa@intel.com"><gustavo.sousa@intel.com></a><o:p></o:p></pre>
<pre>Signed-off-by: Lucas De Marchi <a href="mailto:lucas.demarchi@intel.com"><lucas.demarchi@intel.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre> .../i915/display/intel_display_power_map.c    | 36 ++++++++++-<o:p></o:p></pre>
<pre> .../i915/display/intel_display_power_well.c   | 63 ++++++++++++++++++-<o:p></o:p></pre>
<pre> .../i915/display/intel_display_power_well.h   |  1 +<o:p></o:p></pre>
<pre> .../gpu/drm/i915/display/intel_dp_aux_regs.h  | 26 ++++++++<o:p></o:p></pre>
<pre> 4 files changed, 122 insertions(+), 4 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/drivers/gpu/drm/i915/display/intel_display_power_map.c b/drivers/gpu/drm/i915/display/intel_display_power_map.c<o:p></o:p></pre>
<pre>index 0f1b93d139ca..31c11586ede5 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/i915/display/intel_display_power_map.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/i915/display/intel_display_power_map.c<o:p></o:p></pre>
<pre>@@ -1536,6 +1536,38 @@ static const struct i915_power_well_desc_list xelpdp_power_wells[] = {<o:p></o:p></pre>
<pre>  I915_PW_DESCRIPTORS(xelpdp_power_wells_main),<o:p></o:p></pre>
<pre> };<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+I915_DECL_PW_DOMAINS(xe2lpd_pwdoms_pica_tc,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_PORT_DDI_LANES_TC1,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_PORT_DDI_LANES_TC2,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_PORT_DDI_LANES_TC3,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_PORT_DDI_LANES_TC4,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_USBC1,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_USBC2,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_USBC3,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_USBC4,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_TBT1,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_TBT2,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_TBT3,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_AUX_TBT4,<o:p></o:p></pre>
<pre>+             POWER_DOMAIN_INIT);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+static const struct i915_power_well_desc xe2lpd_power_wells_pica[] = {<o:p></o:p></pre>
<pre>+ {<o:p></o:p></pre>
<pre>+        .instances = &I915_PW_INSTANCES(I915_PW("PICA_TC",<o:p></o:p></pre>
<pre>+                                              &xe2lpd_pwdoms_pica_tc,<o:p></o:p></pre>
<pre>+                                              .id = DISP_PW_ID_NONE),<o:p></o:p></pre>
<pre>+                                      ),<o:p></o:p></pre>
<pre>+        .ops = &xe2lpd_pica_power_well_ops,<o:p></o:p></pre>
<pre>+ },<o:p></o:p></pre>
<pre>+};<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+static const struct i915_power_well_desc_list xe2lpd_power_wells[] = {<o:p></o:p></pre>
<pre>+ I915_PW_DESCRIPTORS(i9xx_power_wells_always_on),<o:p></o:p></pre>
<pre>+ I915_PW_DESCRIPTORS(icl_power_wells_pw_1),<o:p></o:p></pre>
<pre>+ I915_PW_DESCRIPTORS(xelpdp_power_wells_main),<o:p></o:p></pre>
<pre>+ I915_PW_DESCRIPTORS(xe2lpd_power_wells_pica),<o:p></o:p></pre>
<pre>+};<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> static void init_power_well_domains(const struct i915_power_well_instance *inst,<o:p></o:p></pre>
<pre>                             struct i915_power_well *power_well)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>@@ -1643,7 +1675,9 @@ int intel_display_power_map_init(struct i915_power_domains *power_domains)<o:p></o:p></pre>
<pre>         return 0;<o:p></o:p></pre>
<pre>  }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- if (DISPLAY_VER(i915) >= 14)<o:p></o:p></pre>
<pre>+ if (DISPLAY_VER(i915) >= 20)<o:p></o:p></pre>
<pre>+        return set_power_wells(power_domains, xe2lpd_power_wells);<o:p></o:p></pre>
<pre>+ else if (DISPLAY_VER(i915) >= 14)<o:p></o:p></pre>
<pre>         return set_power_wells(power_domains, xelpdp_power_wells);<o:p></o:p></pre>
<pre>  else if (IS_DG2(i915))<o:p></o:p></pre>
<pre>         return set_power_wells(power_domains, xehpd_power_wells);<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c<o:p></o:p></pre>
<pre>index 820b7d41a0a8..24fd35d5e4e0 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c<o:p></o:p></pre>
<pre>@@ -1800,7 +1800,11 @@ static void xelpdp_aux_power_well_enable(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre>         icl_tc_port_assert_ref_held(dev_priv, power_well,<o:p></o:p></pre>
<pre>                                    aux_ch_to_digital_port(dev_priv, aux_ch));<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- intel_de_rmw(dev_priv, XELPDP_DP_AUX_CH_CTL(aux_ch),<o:p></o:p></pre>
<pre>+ i915_reg_t aux_ch_ctl = DISPLAY_VER(dev_priv) >= 20 ?<o:p></o:p></pre>
<pre>+                        XE2LPD_DP_AUX_CH_CTL(aux_ch) :<o:p></o:p></pre>
<pre>+                        XELPDP_DP_AUX_CH_CTL(aux_ch);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ intel_de_rmw(dev_priv, aux_ch_ctl,<o:p></o:p></pre>
<pre>              XELPDP_DP_AUX_CH_CTL_POWER_REQUEST,<o:p></o:p></pre>
<pre>              XELPDP_DP_AUX_CH_CTL_POWER_REQUEST);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -1818,7 +1822,11 @@ static void xelpdp_aux_power_well_disable(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>  enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- intel_de_rmw(dev_priv, XELPDP_DP_AUX_CH_CTL(aux_ch),<o:p></o:p></pre>
<pre>+ i915_reg_t aux_ch_ctl = DISPLAY_VER(dev_priv) >= 20 ?<o:p></o:p></pre>
<pre>+                        XE2LPD_DP_AUX_CH_CTL(aux_ch) :<o:p></o:p></pre>
<pre>+                        XELPDP_DP_AUX_CH_CTL(aux_ch);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ intel_de_rmw(dev_priv, aux_ch_ctl,<o:p></o:p></pre>
<pre>              XELPDP_DP_AUX_CH_CTL_POWER_REQUEST,<o:p></o:p></pre>
<pre>              0);<o:p></o:p></pre>
<pre>  usleep_range(10, 30);<o:p></o:p></pre>
<pre>@@ -1828,11 +1836,53 @@ static bool xelpdp_aux_power_well_enabled(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre>                                  struct i915_power_well *power_well)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>  enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;<o:p></o:p></pre>
<pre>+ i915_reg_t aux_ch_ctl;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>- return intel_de_read(dev_priv, XELPDP_DP_AUX_CH_CTL(aux_ch)) &<o:p></o:p></pre>
<pre>+ aux_ch_ctl = DISPLAY_VER(dev_priv) >= 20 ?<o:p></o:p></pre>
<pre>+             XE2LPD_DP_AUX_CH_CTL(aux_ch) :<o:p></o:p></pre>
<pre>+             XELPDP_DP_AUX_CH_CTL(aux_ch);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ return intel_de_read(dev_priv, aux_ch_ctl) &<o:p></o:p></pre>
<pre>         XELPDP_DP_AUX_CH_CTL_POWER_STATUS;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+static void xe2lpd_pica_power_well_enable(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre>+                                 struct i915_power_well *power_well)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+ intel_de_rmw(dev_priv, XE2LPD_PICA_PW_CTL,<o:p></o:p></pre>
<pre>+             XE2LPD_PICA_CTL_POWER_REQUEST,<o:p></o:p></pre>
<pre>+             XE2LPD_PICA_CTL_POWER_REQUEST);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ if (intel_de_wait_for_set(dev_priv, XE2LPD_PICA_PW_CTL,<o:p></o:p></pre>
<pre>+                          XE2LPD_PICA_CTL_POWER_STATUS, 1)) {<o:p></o:p></pre>
<pre>+        drm_dbg_kms(&dev_priv->drm, "pica power well enable timeout\n");<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+        drm_WARN(&dev_priv->drm, 1, "Power well PICA timeout when enabled");<o:p></o:p></pre>
<pre>+ }<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+static void xe2lpd_pica_power_well_disable(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre>+                                  struct i915_power_well *power_well)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+ intel_de_rmw(dev_priv, XE2LPD_PICA_PW_CTL,<o:p></o:p></pre>
<pre>+             XE2LPD_PICA_CTL_POWER_REQUEST,<o:p></o:p></pre>
<pre>+             0);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ if (intel_de_wait_for_clear(dev_priv, XE2LPD_PICA_PW_CTL,<o:p></o:p></pre>
<pre>+                            XE2LPD_PICA_CTL_POWER_STATUS, 1)) {<o:p></o:p></pre>
<pre>+        drm_dbg_kms(&dev_priv->drm, "pica power well disable timeout\n");<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+        drm_WARN(&dev_priv->drm, 1, "Power well PICA timeout when disabled");<o:p></o:p></pre>
<pre>+ }<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+static bool xe2lpd_pica_power_well_enabled(struct drm_i915_private *dev_priv,<o:p></o:p></pre>
<pre>+                                  struct i915_power_well *power_well)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+ return intel_de_read(dev_priv, XE2LPD_PICA_PW_CTL) &<o:p></o:p></pre>
<pre>+        XE2LPD_PICA_CTL_POWER_STATUS;<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> const struct i915_power_well_ops i9xx_always_on_power_well_ops = {<o:p></o:p></pre>
<pre>  .sync_hw = i9xx_power_well_sync_hw_noop,<o:p></o:p></pre>
<pre>  .enable = i9xx_always_on_power_well_noop,<o:p></o:p></pre>
<pre>@@ -1952,3 +2002,10 @@ const struct i915_power_well_ops xelpdp_aux_power_well_ops = {<o:p></o:p></pre>
<pre>  .disable = xelpdp_aux_power_well_disable,<o:p></o:p></pre>
<pre>  .is_enabled = xelpdp_aux_power_well_enabled,<o:p></o:p></pre>
<pre> };<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+const struct i915_power_well_ops xe2lpd_pica_power_well_ops = {<o:p></o:p></pre>
<pre>+ .sync_hw = i9xx_power_well_sync_hw_noop,<o:p></o:p></pre>
<pre>+ .enable = xe2lpd_pica_power_well_enable,<o:p></o:p></pre>
<pre>+ .disable = xe2lpd_pica_power_well_disable,<o:p></o:p></pre>
<pre>+ .is_enabled = xe2lpd_pica_power_well_enabled,<o:p></o:p></pre>
<pre>+};<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.h b/drivers/gpu/drm/i915/display/intel_display_power_well.h<o:p></o:p></pre>
<pre>index a8736588314d..9357a9a73c06 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/i915/display/intel_display_power_well.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.h<o:p></o:p></pre>
<pre>@@ -176,5 +176,6 @@ extern const struct i915_power_well_ops icl_aux_power_well_ops;<o:p></o:p></pre>
<pre> extern const struct i915_power_well_ops icl_ddi_power_well_ops;<o:p></o:p></pre>
<pre> extern const struct i915_power_well_ops tgl_tc_cold_off_ops;<o:p></o:p></pre>
<pre> extern const struct i915_power_well_ops xelpdp_aux_power_well_ops;<o:p></o:p></pre>
<pre>+extern const struct i915_power_well_ops xe2lpd_pica_power_well_ops;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> #endif<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_regs.h b/drivers/gpu/drm/i915/display/intel_dp_aux_regs.h<o:p></o:p></pre>
<pre>index 5185345277c7..2dfc721e1bbd 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/i915/display/intel_dp_aux_regs.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/i915/display/intel_dp_aux_regs.h<o:p></o:p></pre>
<pre>@@ -83,4 +83,30 @@<o:p></o:p></pre>
<pre> #define   DP_AUX_CH_CTL_SYNC_PULSE_SKL_MASK   REG_GENMASK(4, 0) /* skl+ */<o:p></o:p></pre>
<pre> #define   DP_AUX_CH_CTL_SYNC_PULSE_SKL(c)  REG_FIELD_PREP(DP_AUX_CH_CTL_SYNC_PULSE_SKL_MASK, (c) - 1)<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+#define _XE2LPD_DPA_AUX_CH_CTL                0x16fa10<o:p></o:p></pre>
<pre>+#define _XE2LPD_DPB_AUX_CH_CTL                0x16fc10<o:p></o:p></pre>
<pre>+#define _XE2LPD_DPA_AUX_CH_DATA1              0x16fa14<o:p></o:p></pre>
<pre>+#define _XE2LPD_DPB_AUX_CH_DATA1              0x16fc14<o:p></o:p></pre>
<pre>+#define XE2LPD_DP_AUX_CH_CTL(aux_ch)          _MMIO(_PICK(aux_ch, \<o:p></o:p></pre>
<pre>+                                              _XE2LPD_DPA_AUX_CH_CTL, \<o:p></o:p></pre>
<pre>+                                              _XE2LPD_DPB_AUX_CH_CTL, \<o:p></o:p></pre>
<pre>+                                              0, /* port/aux_ch C is non-existent */ \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC1_AUX_CH_CTL, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC2_AUX_CH_CTL, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC3_AUX_CH_CTL, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC4_AUX_CH_CTL))<o:p></o:p></pre>
<pre>+#define XE2LPD_DP_AUX_CH_DATA(aux_ch, i)      _MMIO(_PICK(aux_ch, \<o:p></o:p></pre>
<pre>+                                              _XE2LPD_DPA_AUX_CH_DATA1, \<o:p></o:p></pre>
<pre>+                                              _XE2LPD_DPB_AUX_CH_DATA1, \<o:p></o:p></pre>
<pre>+                                              0, /* port/aux_ch C is non-existent */ \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC1_AUX_CH_DATA1, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC2_AUX_CH_DATA1, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC3_AUX_CH_DATA1, \<o:p></o:p></pre>
<pre>+                                              _XELPDP_USBC4_AUX_CH_DATA1) + (i) * 4)<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+/* PICA Power Well Control register for Xe2 platforms*/<o:p></o:p></pre>
<pre>+#define XE2LPD_PICA_PW_CTL                    _MMIO(0x16fe04)<o:p></o:p></pre>
<pre>+#define   XE2LPD_PICA_CTL_POWER_REQUEST               REG_BIT(31)<o:p></o:p></pre>
<pre>+#define   XE2LPD_PICA_CTL_POWER_STATUS        REG_BIT(30)<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> #endif /* __INTEL_DP_AUX_REGS_H__ */<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>