From 1866368a8ab8cacf73aa47f67138040d5620439d Mon Sep 17 00:00:00 2001 From: Yutang Jiang Date: Sat, 24 Dec 2016 01:11:32 +0800 Subject: layerscape: add ls1088ardb device support LS1088A is an ARMv8 implementation combining eight ARM A53 processor cores. The LS1088ARDB is an evaluatoin platform that supports the LS1088A family SoCs. Features summary: - Eight 64-bit ARM v8 Cortex-A53 CPUs - Data path acceleration architecture 2.0 (DPAA2) - Ethernet interfaces - QUADSPI flash, 3 PCIe, 2 USB, 1 SD, 2 DUARTs etc Signed-off-by: Yutang Jiang --- ...l-mc-update-dpbp-binary-interface-to-v2.2.patch | 208 +++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 target/linux/layerscape/patches-4.4/7168-staging-fsl-mc-update-dpbp-binary-interface-to-v2.2.patch (limited to 'target/linux/layerscape/patches-4.4/7168-staging-fsl-mc-update-dpbp-binary-interface-to-v2.2.patch') diff --git a/target/linux/layerscape/patches-4.4/7168-staging-fsl-mc-update-dpbp-binary-interface-to-v2.2.patch b/target/linux/layerscape/patches-4.4/7168-staging-fsl-mc-update-dpbp-binary-interface-to-v2.2.patch new file mode 100644 index 0000000..474baf4 --- /dev/null +++ b/target/linux/layerscape/patches-4.4/7168-staging-fsl-mc-update-dpbp-binary-interface-to-v2.2.patch @@ -0,0 +1,208 @@ +From de0fa9842d52e4e80576d378f32aa9ca76a4270b Mon Sep 17 00:00:00 2001 +From: Stuart Yoder +Date: Mon, 11 Apr 2016 11:48:54 -0500 +Subject: [PATCH 168/226] staging: fsl-mc: update dpbp binary interface to + v2.2 + +Signed-off-by: Stuart Yoder +Acked-by: German Rivera +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/fsl-mc/bus/dpbp.c | 77 ++++++++++++++++++++++++++++- + drivers/staging/fsl-mc/include/dpbp-cmd.h | 4 +- + drivers/staging/fsl-mc/include/dpbp.h | 51 ++++++++++++++++++- + 3 files changed, 127 insertions(+), 5 deletions(-) + +--- a/drivers/staging/fsl-mc/bus/dpbp.c ++++ b/drivers/staging/fsl-mc/bus/dpbp.c +@@ -293,7 +293,7 @@ int dpbp_set_irq(struct fsl_mc_io *mc_io + cmd.params[0] |= mc_enc(0, 8, irq_index); + cmd.params[0] |= mc_enc(32, 32, irq_cfg->val); + cmd.params[1] |= mc_enc(0, 64, irq_cfg->addr); +- cmd.params[2] |= mc_enc(0, 32, irq_cfg->user_irq_id); ++ cmd.params[2] |= mc_enc(0, 32, irq_cfg->irq_num); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +@@ -334,7 +334,7 @@ int dpbp_get_irq(struct fsl_mc_io *mc_io + /* retrieve response parameters */ + irq_cfg->val = (u32)mc_dec(cmd.params[0], 0, 32); + irq_cfg->addr = (u64)mc_dec(cmd.params[1], 0, 64); +- irq_cfg->user_irq_id = (int)mc_dec(cmd.params[2], 0, 32); ++ irq_cfg->irq_num = (int)mc_dec(cmd.params[2], 0, 32); + *type = (int)mc_dec(cmd.params[2], 32, 32); + return 0; + } +@@ -502,6 +502,7 @@ int dpbp_get_irq_status(struct fsl_mc_io + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_IRQ_STATUS, + cmd_flags, token); ++ cmd.params[0] |= mc_enc(0, 32, *status); + cmd.params[0] |= mc_enc(32, 8, irq_index); + + /* send command to mc*/ +@@ -580,3 +581,75 @@ int dpbp_get_attributes(struct fsl_mc_io + return 0; + } + EXPORT_SYMBOL(dpbp_get_attributes); ++ ++/** ++ * dpbp_set_notifications() - Set notifications towards software ++ * @mc_io: Pointer to MC portal's I/O object ++ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' ++ * @token: Token of DPBP object ++ * @cfg: notifications configuration ++ * ++ * Return: '0' on Success; Error code otherwise. ++ */ ++int dpbp_set_notifications(struct fsl_mc_io *mc_io, ++ u32 cmd_flags, ++ u16 token, ++ struct dpbp_notification_cfg *cfg) ++{ ++ struct mc_command cmd = { 0 }; ++ ++ /* prepare command */ ++ cmd.header = mc_encode_cmd_header(DPBP_CMDID_SET_NOTIFICATIONS, ++ cmd_flags, ++ token); ++ ++ cmd.params[0] |= mc_enc(0, 32, cfg->depletion_entry); ++ cmd.params[0] |= mc_enc(32, 32, cfg->depletion_exit); ++ cmd.params[1] |= mc_enc(0, 32, cfg->surplus_entry); ++ cmd.params[1] |= mc_enc(32, 32, cfg->surplus_exit); ++ cmd.params[2] |= mc_enc(0, 16, cfg->options); ++ cmd.params[3] |= mc_enc(0, 64, cfg->message_ctx); ++ cmd.params[4] |= mc_enc(0, 64, cfg->message_iova); ++ ++ /* send command to mc*/ ++ return mc_send_command(mc_io, &cmd); ++} ++ ++/** ++ * dpbp_get_notifications() - Get the notifications configuration ++ * @mc_io: Pointer to MC portal's I/O object ++ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' ++ * @token: Token of DPBP object ++ * @cfg: notifications configuration ++ * ++ * Return: '0' on Success; Error code otherwise. ++ */ ++int dpbp_get_notifications(struct fsl_mc_io *mc_io, ++ u32 cmd_flags, ++ u16 token, ++ struct dpbp_notification_cfg *cfg) ++{ ++ struct mc_command cmd = { 0 }; ++ int err; ++ ++ /* prepare command */ ++ cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_NOTIFICATIONS, ++ cmd_flags, ++ token); ++ ++ /* send command to mc*/ ++ err = mc_send_command(mc_io, &cmd); ++ if (err) ++ return err; ++ ++ /* retrieve response parameters */ ++ cfg->depletion_entry = (u32)mc_dec(cmd.params[0], 0, 32); ++ cfg->depletion_exit = (u32)mc_dec(cmd.params[0], 32, 32); ++ cfg->surplus_entry = (u32)mc_dec(cmd.params[1], 0, 32); ++ cfg->surplus_exit = (u32)mc_dec(cmd.params[1], 32, 32); ++ cfg->options = (u16)mc_dec(cmd.params[2], 0, 16); ++ cfg->message_ctx = (u64)mc_dec(cmd.params[3], 0, 64); ++ cfg->message_iova = (u64)mc_dec(cmd.params[4], 0, 64); ++ ++ return 0; ++} +--- a/drivers/staging/fsl-mc/include/dpbp-cmd.h ++++ b/drivers/staging/fsl-mc/include/dpbp-cmd.h +@@ -34,7 +34,7 @@ + + /* DPBP Version */ + #define DPBP_VER_MAJOR 2 +-#define DPBP_VER_MINOR 1 ++#define DPBP_VER_MINOR 2 + + /* Command IDs */ + #define DPBP_CMDID_CLOSE 0x800 +@@ -57,4 +57,6 @@ + #define DPBP_CMDID_GET_IRQ_STATUS 0x016 + #define DPBP_CMDID_CLEAR_IRQ_STATUS 0x017 + ++#define DPBP_CMDID_SET_NOTIFICATIONS 0x01b0 ++#define DPBP_CMDID_GET_NOTIFICATIONS 0x01b1 + #endif /* _FSL_DPBP_CMD_H */ +--- a/drivers/staging/fsl-mc/include/dpbp.h ++++ b/drivers/staging/fsl-mc/include/dpbp.h +@@ -85,12 +85,12 @@ int dpbp_reset(struct fsl_mc_io *mc_io, + * struct dpbp_irq_cfg - IRQ configuration + * @addr: Address that must be written to signal a message-based interrupt + * @val: Value to write into irq_addr address +- * @user_irq_id: A user defined number associated with this IRQ ++ * @irq_num: A user defined number associated with this IRQ + */ + struct dpbp_irq_cfg { + u64 addr; + u32 val; +- int user_irq_id; ++ int irq_num; + }; + + int dpbp_set_irq(struct fsl_mc_io *mc_io, +@@ -168,6 +168,53 @@ int dpbp_get_attributes(struct fsl_mc_io + u16 token, + struct dpbp_attr *attr); + ++/** ++ * DPBP notifications options ++ */ ++ ++/** ++ * BPSCN write will attempt to allocate into a cache (coherent write) ++ */ ++#define DPBP_NOTIF_OPT_COHERENT_WRITE 0x00000001 ++ ++/** ++ * struct dpbp_notification_cfg - Structure representing DPBP notifications ++ * towards software ++ * @depletion_entry: below this threshold the pool is "depleted"; ++ * set it to '0' to disable it ++ * @depletion_exit: greater than or equal to this threshold the pool exit its ++ * "depleted" state ++ * @surplus_entry: above this threshold the pool is in "surplus" state; ++ * set it to '0' to disable it ++ * @surplus_exit: less than or equal to this threshold the pool exit its ++ * "surplus" state ++ * @message_iova: MUST be given if either 'depletion_entry' or 'surplus_entry' ++ * is not '0' (enable); I/O virtual address (must be in DMA-able memory), ++ * must be 16B aligned. ++ * @message_ctx: The context that will be part of the BPSCN message and will ++ * be written to 'message_iova' ++ * @options: Mask of available options; use 'DPBP_NOTIF_OPT_' values ++ */ ++struct dpbp_notification_cfg { ++ u32 depletion_entry; ++ u32 depletion_exit; ++ u32 surplus_entry; ++ u32 surplus_exit; ++ u64 message_iova; ++ u64 message_ctx; ++ u16 options; ++}; ++ ++int dpbp_set_notifications(struct fsl_mc_io *mc_io, ++ u32 cmd_flags, ++ u16 token, ++ struct dpbp_notification_cfg *cfg); ++ ++int dpbp_get_notifications(struct fsl_mc_io *mc_io, ++ u32 cmd_flags, ++ u16 token, ++ struct dpbp_notification_cfg *cfg); ++ + /** @} */ + + #endif /* __FSL_DPBP_H */ -- cgit v1.1