|
@@ -24,14 +24,12 @@
|
|
|
struct elm *elm_cfg;
|
|
|
|
|
|
/**
|
|
|
- * elm_load_syndromes - Load BCH syndromes based on nibble selection
|
|
|
+ * elm_load_syndromes - Load BCH syndromes based on bch_type selection
|
|
|
* @syndrome: BCH syndrome
|
|
|
- * @nibbles:
|
|
|
+ * @bch_type: BCH4/BCH8/BCH16
|
|
|
* @poly: Syndrome Polynomial set to use
|
|
|
- *
|
|
|
- * Load BCH syndromes based on nibble selection
|
|
|
*/
|
|
|
-static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly)
|
|
|
+static void elm_load_syndromes(u8 *syndrome, enum bch_level bch_type, u8 poly)
|
|
|
{
|
|
|
u32 *ptr;
|
|
|
u32 val;
|
|
@@ -47,8 +45,7 @@ static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly)
|
|
|
(syndrome[7] << 24);
|
|
|
writel(val, ptr);
|
|
|
|
|
|
- /* BCH 8-bit with 26 nibbles (4*8=32) */
|
|
|
- if (nibbles > 13) {
|
|
|
+ if (bch_type == BCH_8_BIT || bch_type == BCH_16_BIT) {
|
|
|
/* reg 2 */
|
|
|
ptr = &elm_cfg->syndrome_fragments[poly].syndrome_fragment_x[2];
|
|
|
val = syndrome[8] | (syndrome[9] << 8) | (syndrome[10] << 16) |
|
|
@@ -61,8 +58,7 @@ static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly)
|
|
|
writel(val, ptr);
|
|
|
}
|
|
|
|
|
|
- /* BCH 16-bit with 52 nibbles (7*8=56) */
|
|
|
- if (nibbles > 26) {
|
|
|
+ if (bch_type == BCH_16_BIT) {
|
|
|
/* reg 4 */
|
|
|
ptr = &elm_cfg->syndrome_fragments[poly].syndrome_fragment_x[4];
|
|
|
val = syndrome[16] | (syndrome[17] << 8) |
|
|
@@ -86,7 +82,7 @@ static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly)
|
|
|
/**
|
|
|
* elm_check_errors - Check for BCH errors and return error locations
|
|
|
* @syndrome: BCH syndrome
|
|
|
- * @nibbles:
|
|
|
+ * @bch_type: BCH4/BCH8/BCH16
|
|
|
* @error_count: Returns number of errrors in the syndrome
|
|
|
* @error_locations: Returns error locations (in decimal) in this array
|
|
|
*
|
|
@@ -94,14 +90,14 @@ static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly)
|
|
|
* and locations in the array passed. Returns -1 if error is not correctable,
|
|
|
* else returns 0
|
|
|
*/
|
|
|
-int elm_check_error(u8 *syndrome, u32 nibbles, u32 *error_count,
|
|
|
+int elm_check_error(u8 *syndrome, enum bch_level bch_type, u32 *error_count,
|
|
|
u32 *error_locations)
|
|
|
{
|
|
|
u8 poly = ELM_DEFAULT_POLY;
|
|
|
s8 i;
|
|
|
u32 location_status;
|
|
|
|
|
|
- elm_load_syndromes(syndrome, nibbles, poly);
|
|
|
+ elm_load_syndromes(syndrome, bch_type, poly);
|
|
|
|
|
|
/* start processing */
|
|
|
writel((readl(&elm_cfg->syndrome_fragments[poly].syndrome_fragment_x[6])
|