Re: [PATCH v5 02/18] cxl: Move bare-metal specific code to specialized files

2016-02-23 Thread Manoj Kumar

Reviewed-by: Manoj Kumar 

---
Manoj Kumar

On 2/23/2016 10:21 AM, Frederic Barrat wrote:

Move a few functions around to better separate code specific to
bare-metal environment from code which will be commonly used between
guest and bare-metal.

Code specific to bare-metal is meant to be in native.c or pci.c
only. It's basically anything which touches the card p1 registers,
some p2 registers not needed from a guest and the PCI interface.

Co-authored-by: Christophe Lombard 
Signed-off-by: Frederic Barrat 
Signed-off-by: Christophe Lombard 
Acked-by: Ian Munsie 
---
  drivers/misc/cxl/cxl.h|  24 +
  drivers/misc/cxl/irq.c| 205 +--
  drivers/misc/cxl/main.c   |   2 +-
  drivers/misc/cxl/native.c | 240 +-
  drivers/misc/cxl/pci.c|  18 
  5 files changed, 245 insertions(+), 244 deletions(-)

diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
index 3f88140..3b824e3 100644
--- a/drivers/misc/cxl/cxl.h
+++ b/drivers/misc/cxl/cxl.h
@@ -623,23 +623,8 @@ static inline u64 cxl_p2n_read(struct cxl_afu *afu, 
cxl_p2n_reg_t reg)
return ~0ULL;
  }

-static inline u64 cxl_afu_cr_read64(struct cxl_afu *afu, int cr, u64 off)
-{
-   if (likely(cxl_adapter_link_ok(afu->adapter)))
-   return in_le64((afu)->afu_desc_mmio + (afu)->crs_offset +
-  ((cr) * (afu)->crs_len) + (off));
-   else
-   return ~0ULL;
-}
-
-static inline u32 cxl_afu_cr_read32(struct cxl_afu *afu, int cr, u64 off)
-{
-   if (likely(cxl_adapter_link_ok(afu->adapter)))
-   return in_le32((afu)->afu_desc_mmio + (afu)->crs_offset +
-  ((cr) * (afu)->crs_len) + (off));
-   else
-   return 0x;
-}
+u64 cxl_afu_cr_read64(struct cxl_afu *afu, int cr, u64 off);
+u32 cxl_afu_cr_read32(struct cxl_afu *afu, int cr, u64 off);
  u16 cxl_afu_cr_read16(struct cxl_afu *afu, int cr, u64 off);
  u8 cxl_afu_cr_read8(struct cxl_afu *afu, int cr, u64 off);

@@ -654,7 +639,6 @@ struct cxl_calls {
  int register_cxl_calls(struct cxl_calls *calls);
  void unregister_cxl_calls(struct cxl_calls *calls);

-int cxl_alloc_adapter_nr(struct cxl *adapter);
  void cxl_remove_adapter_nr(struct cxl *adapter);

  int cxl_alloc_spa(struct cxl_afu *afu);
@@ -697,7 +681,8 @@ void cxl_release_serr_irq(struct cxl_afu *afu);
  int afu_register_irqs(struct cxl_context *ctx, u32 count);
  void afu_release_irqs(struct cxl_context *ctx, void *cookie);
  void afu_irq_name_free(struct cxl_context *ctx);
-irqreturn_t cxl_slice_irq_err(int irq, void *data);
+irqreturn_t handle_psl_slice_error(struct cxl_context *ctx, u64 dsisr,
+   u64 errstat);

  int cxl_debugfs_init(void);
  void cxl_debugfs_exit(void);
@@ -746,7 +731,6 @@ int cxl_attach_process(struct cxl_context *ctx, bool 
kernel, u64 wed,
u64 amr);
  int cxl_detach_process(struct cxl_context *ctx);

-int cxl_get_irq(struct cxl_afu *afu, struct cxl_irq_info *info);
  int cxl_ack_irq(struct cxl_context *ctx, u64 tfc, u64 psl_reset_mask);

  int cxl_check_error(struct cxl_afu *afu);
diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
index e468e6c..16fd67f 100644
--- a/drivers/misc/cxl/irq.c
+++ b/drivers/misc/cxl/irq.c
@@ -19,72 +19,6 @@
  #include "cxl.h"
  #include "trace.h"

-/* XXX: This is implementation specific */
-static irqreturn_t handle_psl_slice_error(struct cxl_context *ctx, u64 dsisr, 
u64 errstat)
-{
-   u64 fir1, fir2, fir_slice, serr, afu_debug;
-
-   fir1 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR1);
-   fir2 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR2);
-   fir_slice = cxl_p1n_read(ctx->afu, CXL_PSL_FIR_SLICE_An);
-   serr = cxl_p1n_read(ctx->afu, CXL_PSL_SERR_An);
-   afu_debug = cxl_p1n_read(ctx->afu, CXL_AFU_DEBUG_An);
-
-   dev_crit(&ctx->afu->dev, "PSL ERROR STATUS: 0x%016llx\n", errstat);
-   dev_crit(&ctx->afu->dev, "PSL_FIR1: 0x%016llx\n", fir1);
-   dev_crit(&ctx->afu->dev, "PSL_FIR2: 0x%016llx\n", fir2);
-   dev_crit(&ctx->afu->dev, "PSL_SERR_An: 0x%016llx\n", serr);
-   dev_crit(&ctx->afu->dev, "PSL_FIR_SLICE_An: 0x%016llx\n", fir_slice);
-   dev_crit(&ctx->afu->dev, "CXL_PSL_AFU_DEBUG_An: 0x%016llx\n", 
afu_debug);
-
-   dev_crit(&ctx->afu->dev, "STOPPING CXL TRACE\n");
-   cxl_stop_trace(ctx->afu->adapter);
-
-   return cxl_ack_irq(ctx, 0, errstat);
-}
-
-irqreturn_t cxl_slice_irq_err(int irq, void *data)
-{
-   struct cxl_afu *afu = data;
-   u64 fir_slice, errstat, serr, afu_debug;
-
-   WARN(irq, "CXL SLICE ERROR interrupt %i\n", irq);
-
-   serr = cxl_p1n_read(afu, CXL_PSL_SERR_An);
-   fir_slice = cxl_p1n_read(afu, CXL_PSL_FIR_SLICE_An);
-   errstat = cxl_p2n_read(afu, CXL_PSL_ErrStat_An);
-   afu_debug = cxl_p1n_read(afu, CXL_AFU_DEBUG_An);
-   dev_crit(&afu->dev, "PSL_SERR_An: 0x%016llx\n", serr);
-   

[PATCH v5 02/18] cxl: Move bare-metal specific code to specialized files

2016-02-23 Thread Frederic Barrat
Move a few functions around to better separate code specific to
bare-metal environment from code which will be commonly used between
guest and bare-metal.

Code specific to bare-metal is meant to be in native.c or pci.c
only. It's basically anything which touches the card p1 registers,
some p2 registers not needed from a guest and the PCI interface.

Co-authored-by: Christophe Lombard 
Signed-off-by: Frederic Barrat 
Signed-off-by: Christophe Lombard 
Acked-by: Ian Munsie 
---
 drivers/misc/cxl/cxl.h|  24 +
 drivers/misc/cxl/irq.c| 205 +--
 drivers/misc/cxl/main.c   |   2 +-
 drivers/misc/cxl/native.c | 240 +-
 drivers/misc/cxl/pci.c|  18 
 5 files changed, 245 insertions(+), 244 deletions(-)

diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
index 3f88140..3b824e3 100644
--- a/drivers/misc/cxl/cxl.h
+++ b/drivers/misc/cxl/cxl.h
@@ -623,23 +623,8 @@ static inline u64 cxl_p2n_read(struct cxl_afu *afu, 
cxl_p2n_reg_t reg)
return ~0ULL;
 }
 
-static inline u64 cxl_afu_cr_read64(struct cxl_afu *afu, int cr, u64 off)
-{
-   if (likely(cxl_adapter_link_ok(afu->adapter)))
-   return in_le64((afu)->afu_desc_mmio + (afu)->crs_offset +
-  ((cr) * (afu)->crs_len) + (off));
-   else
-   return ~0ULL;
-}
-
-static inline u32 cxl_afu_cr_read32(struct cxl_afu *afu, int cr, u64 off)
-{
-   if (likely(cxl_adapter_link_ok(afu->adapter)))
-   return in_le32((afu)->afu_desc_mmio + (afu)->crs_offset +
-  ((cr) * (afu)->crs_len) + (off));
-   else
-   return 0x;
-}
+u64 cxl_afu_cr_read64(struct cxl_afu *afu, int cr, u64 off);
+u32 cxl_afu_cr_read32(struct cxl_afu *afu, int cr, u64 off);
 u16 cxl_afu_cr_read16(struct cxl_afu *afu, int cr, u64 off);
 u8 cxl_afu_cr_read8(struct cxl_afu *afu, int cr, u64 off);
 
@@ -654,7 +639,6 @@ struct cxl_calls {
 int register_cxl_calls(struct cxl_calls *calls);
 void unregister_cxl_calls(struct cxl_calls *calls);
 
-int cxl_alloc_adapter_nr(struct cxl *adapter);
 void cxl_remove_adapter_nr(struct cxl *adapter);
 
 int cxl_alloc_spa(struct cxl_afu *afu);
@@ -697,7 +681,8 @@ void cxl_release_serr_irq(struct cxl_afu *afu);
 int afu_register_irqs(struct cxl_context *ctx, u32 count);
 void afu_release_irqs(struct cxl_context *ctx, void *cookie);
 void afu_irq_name_free(struct cxl_context *ctx);
-irqreturn_t cxl_slice_irq_err(int irq, void *data);
+irqreturn_t handle_psl_slice_error(struct cxl_context *ctx, u64 dsisr,
+   u64 errstat);
 
 int cxl_debugfs_init(void);
 void cxl_debugfs_exit(void);
@@ -746,7 +731,6 @@ int cxl_attach_process(struct cxl_context *ctx, bool 
kernel, u64 wed,
u64 amr);
 int cxl_detach_process(struct cxl_context *ctx);
 
-int cxl_get_irq(struct cxl_afu *afu, struct cxl_irq_info *info);
 int cxl_ack_irq(struct cxl_context *ctx, u64 tfc, u64 psl_reset_mask);
 
 int cxl_check_error(struct cxl_afu *afu);
diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
index e468e6c..16fd67f 100644
--- a/drivers/misc/cxl/irq.c
+++ b/drivers/misc/cxl/irq.c
@@ -19,72 +19,6 @@
 #include "cxl.h"
 #include "trace.h"
 
-/* XXX: This is implementation specific */
-static irqreturn_t handle_psl_slice_error(struct cxl_context *ctx, u64 dsisr, 
u64 errstat)
-{
-   u64 fir1, fir2, fir_slice, serr, afu_debug;
-
-   fir1 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR1);
-   fir2 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR2);
-   fir_slice = cxl_p1n_read(ctx->afu, CXL_PSL_FIR_SLICE_An);
-   serr = cxl_p1n_read(ctx->afu, CXL_PSL_SERR_An);
-   afu_debug = cxl_p1n_read(ctx->afu, CXL_AFU_DEBUG_An);
-
-   dev_crit(&ctx->afu->dev, "PSL ERROR STATUS: 0x%016llx\n", errstat);
-   dev_crit(&ctx->afu->dev, "PSL_FIR1: 0x%016llx\n", fir1);
-   dev_crit(&ctx->afu->dev, "PSL_FIR2: 0x%016llx\n", fir2);
-   dev_crit(&ctx->afu->dev, "PSL_SERR_An: 0x%016llx\n", serr);
-   dev_crit(&ctx->afu->dev, "PSL_FIR_SLICE_An: 0x%016llx\n", fir_slice);
-   dev_crit(&ctx->afu->dev, "CXL_PSL_AFU_DEBUG_An: 0x%016llx\n", 
afu_debug);
-
-   dev_crit(&ctx->afu->dev, "STOPPING CXL TRACE\n");
-   cxl_stop_trace(ctx->afu->adapter);
-
-   return cxl_ack_irq(ctx, 0, errstat);
-}
-
-irqreturn_t cxl_slice_irq_err(int irq, void *data)
-{
-   struct cxl_afu *afu = data;
-   u64 fir_slice, errstat, serr, afu_debug;
-
-   WARN(irq, "CXL SLICE ERROR interrupt %i\n", irq);
-
-   serr = cxl_p1n_read(afu, CXL_PSL_SERR_An);
-   fir_slice = cxl_p1n_read(afu, CXL_PSL_FIR_SLICE_An);
-   errstat = cxl_p2n_read(afu, CXL_PSL_ErrStat_An);
-   afu_debug = cxl_p1n_read(afu, CXL_AFU_DEBUG_An);
-   dev_crit(&afu->dev, "PSL_SERR_An: 0x%016llx\n", serr);
-   dev_crit(&afu->dev, "PSL_FIR_SLICE_An: 0x%016llx\n", fir_slice);
-   dev_crit(&afu->dev, "CXL_PSL_ErrSt