Browse Source

Seems to get through the ICM mapping process

tags/v0.9.3
Michael Brown 18 years ago
parent
commit
57bf8d9905

+ 3
- 0
src/drivers/net/mlx_ipoib/arbel.h View File

50
 #define ARBEL_HCR_WRITE_MGM		0x0026
50
 #define ARBEL_HCR_WRITE_MGM		0x0026
51
 #define ARBEL_HCR_MGID_HASH		0x0027
51
 #define ARBEL_HCR_MGID_HASH		0x0027
52
 #define ARBEL_HCR_RUN_FW		0x0ff6
52
 #define ARBEL_HCR_RUN_FW		0x0ff6
53
+#define ARBEL_HCR_DISABLE_LAM		0x0ff7
54
+#define ARBEL_HCR_ENABLE_LAM		0x0ff8
53
 #define ARBEL_HCR_UNMAP_ICM		0x0ff9
55
 #define ARBEL_HCR_UNMAP_ICM		0x0ff9
54
 #define ARBEL_HCR_MAP_ICM		0x0ffa
56
 #define ARBEL_HCR_MAP_ICM		0x0ffa
55
 #define ARBEL_HCR_UNMAP_ICM_AUX		0x0ffb
57
 #define ARBEL_HCR_UNMAP_ICM_AUX		0x0ffb
88
  *
90
  *
89
  */
91
  */
90
 
92
 
93
+struct MLX_DECLARE_STRUCT ( arbelprm_access_lam );
91
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_queue_context );
94
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_queue_context );
92
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_queue_entry );
95
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_queue_entry );
93
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_with_error );
96
 struct MLX_DECLARE_STRUCT ( arbelprm_completion_with_error );

+ 12
- 15
src/drivers/net/mlx_ipoib/cmdif_comm.c View File

134
 	DBG_HD ( &hcr[0], sizeof ( hcr ) ); 
134
 	DBG_HD ( &hcr[0], sizeof ( hcr ) ); 
135
 	if ( cmd_prms->in_trans == TRANS_MAILBOX ) {
135
 	if ( cmd_prms->in_trans == TRANS_MAILBOX ) {
136
 		size_t size = ( 4 * cmd_prms->in_param_size );
136
 		size_t size = ( 4 * cmd_prms->in_param_size );
137
-		if ( size > 256 )
138
-			size = 256;
139
-#if ! CREATE_OWN
140
-		DBG ( "Input mailbox:\n" );
141
-		DBG_HD ( &cmd_prms->in_param[0], size );
142
-#endif
137
+		if ( size > 512 )
138
+			size = 512;
139
+		DBG2 ( "Input mailbox:\n" );
140
+		DBG2_HD ( &cmd_prms->in_param[0], size );
143
 	}
141
 	}
144
 
142
 
145
 	for (i = 0; i < 7; ++i) {
143
 	for (i = 0; i < 7; ++i) {
172
 		return status;
170
 		return status;
173
 	}
171
 	}
174
 
172
 
173
+	if ( cmd_prms->out_trans == TRANS_MAILBOX ) {
174
+		size_t size = ( 4 * cmd_prms->out_param_size );
175
+		if ( size > 512 )
176
+			size = 512;
177
+		DBG2 ( "Output mailbox:\n" );
178
+		DBG2_HD ( &cmd_prms->out_param[0], size );
179
+	}
180
+
175
 	if (cmd_prms->out_trans == TRANS_MAILBOX)
181
 	if (cmd_prms->out_trans == TRANS_MAILBOX)
176
 		be_to_cpu_buf(cmd_prms->out_param, cmd_prms->out_param_size);
182
 		be_to_cpu_buf(cmd_prms->out_param, cmd_prms->out_param_size);
177
 	else if (cmd_prms->out_trans == TRANS_IMMEDIATE) {
183
 	else if (cmd_prms->out_trans == TRANS_IMMEDIATE) {
181
 			return -1;
187
 			return -1;
182
 	}
188
 	}
183
 
189
 
184
-	if ( cmd_prms->out_trans == TRANS_MAILBOX ) {
185
-		size_t size = ( 4 * cmd_prms->out_param_size );
186
-		if ( size > 256 )
187
-			size = 256;
188
-#if ! CREATE_OWN
189
-		DBG ( "Output mailbox:\n" );
190
-		DBG_HD ( &cmd_prms->out_param[0], size );
191
-#endif
192
-	}
193
 	DBG ( "Command executed successfully\n" );
190
 	DBG ( "Command executed successfully\n" );
194
 
191
 
195
 	return 0;
192
 	return 0;

+ 13
- 0
src/drivers/net/mlx_ipoib/ib_mt25218.c View File

758
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_qps,
758
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_qps,
759
 				MAX_APP_QPS,
759
 				MAX_APP_QPS,
760
 				dev_lim.qpc_entry_sz, &log2_entries);
760
 				dev_lim.qpc_entry_sz, &log2_entries);
761
+	DBG ( "qpc_base_addr_l = %lx\n", icm_start );
761
 	init_hca.qpc_base_addr_l = icm_start;
762
 	init_hca.qpc_base_addr_l = icm_start;
762
 	init_hca.log_num_of_qp = log2_entries;
763
 	init_hca.log_num_of_qp = log2_entries;
763
 	icm_start += (tmp << 12);
764
 	icm_start += (tmp << 12);
764
 	icm_size += (tmp << 12);
765
 	icm_size += (tmp << 12);
765
 
766
 
767
+	DBG ( "eqpc_base_addr_l = %lx\n", icm_start );
766
 	init_hca.eqpc_base_addr_l = icm_start;
768
 	init_hca.eqpc_base_addr_l = icm_start;
767
 	icm_start += (tmp << 12);
769
 	icm_start += (tmp << 12);
768
 	icm_size += (tmp << 12);
770
 	icm_size += (tmp << 12);
769
 
771
 
770
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_srqs,
772
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_srqs,
771
 				0, dev_lim.srq_entry_sz, &log2_entries);
773
 				0, dev_lim.srq_entry_sz, &log2_entries);
774
+	DBG ( "srqc_base_addr_l = %lx\n", icm_start );
772
 	init_hca.srqc_base_addr_l = icm_start;
775
 	init_hca.srqc_base_addr_l = icm_start;
773
 	init_hca.log_num_of_srq = log2_entries;
776
 	init_hca.log_num_of_srq = log2_entries;
774
 	icm_start += (tmp << 12);
777
 	icm_start += (tmp << 12);
776
 
779
 
777
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_ees,
780
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_ees,
778
 				0, dev_lim.eec_entry_sz, &log2_entries);
781
 				0, dev_lim.eec_entry_sz, &log2_entries);
782
+	DBG ( "eec_base_addr_l = %lx\n", icm_start );
779
 	init_hca.eec_base_addr_l = icm_start;
783
 	init_hca.eec_base_addr_l = icm_start;
780
 	init_hca.log_num_of_ee = log2_entries;
784
 	init_hca.log_num_of_ee = log2_entries;
781
 	icm_start += (tmp << 12);
785
 	icm_start += (tmp << 12);
782
 	icm_size += (tmp << 12);
786
 	icm_size += (tmp << 12);
783
 
787
 
788
+	DBG ( "eeec_base_addr_l = %lx\n", icm_start );
784
 	init_hca.eeec_base_addr_l = icm_start;
789
 	init_hca.eeec_base_addr_l = icm_start;
785
 	icm_start += (tmp << 12);
790
 	icm_start += (tmp << 12);
786
 	icm_size += (tmp << 12);
791
 	icm_size += (tmp << 12);
787
 
792
 
793
+	DBG ( "cqc_base_addr_l = %lx\n", icm_start );
788
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_cqs,
794
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_cqs,
789
 				MAX_APP_CQS,
795
 				MAX_APP_CQS,
790
 				dev_lim.cqc_entry_sz, &log2_entries);
796
 				dev_lim.cqc_entry_sz, &log2_entries);
795
 
801
 
796
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_mtts,
802
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_mtts,
797
 				0, dev_lim.mtt_entry_sz, &log2_entries);
803
 				0, dev_lim.mtt_entry_sz, &log2_entries);
804
+	DBG ( "mtt_base_addr_l = %lx\n", icm_start );
798
 	init_hca.mtt_base_addr_l = icm_start;
805
 	init_hca.mtt_base_addr_l = icm_start;
799
 	icm_start += (tmp << 12);
806
 	icm_start += (tmp << 12);
800
 	icm_size += (tmp << 12);
807
 	icm_size += (tmp << 12);
801
 
808
 
802
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_mrws,
809
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_mrws,
803
 				1, dev_lim.mpt_entry_sz, &log2_entries);
810
 				1, dev_lim.mpt_entry_sz, &log2_entries);
811
+	DBG ( "mpt_base_addr_l = %lx\n", icm_start );
804
 	init_hca.mpt_base_addr_l = icm_start;
812
 	init_hca.mpt_base_addr_l = icm_start;
805
 	init_hca.log_mpt_sz = log2_entries;
813
 	init_hca.log_mpt_sz = log2_entries;
806
 	icm_start += (tmp << 12);
814
 	icm_start += (tmp << 12);
808
 
816
 
809
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_rdbs, 1, 32,	/* size of rdb entry */
817
 	tmp = get_req_icm_pages(dev_lim.log2_rsvd_rdbs, 1, 32,	/* size of rdb entry */
810
 				&log2_entries);
818
 				&log2_entries);
819
+	DBG ( "rdb_base_addr_l = %lx\n", icm_start );
811
 	init_hca.rdb_base_addr_l = icm_start;
820
 	init_hca.rdb_base_addr_l = icm_start;
812
 	icm_start += (tmp << 12);
821
 	icm_start += (tmp << 12);
813
 	icm_size += (tmp << 12);
822
 	icm_size += (tmp << 12);
814
 
823
 
824
+	DBG ( "eqc_base_addr_l = %lx\n", icm_start );
815
 	init_hca.eqc_base_addr_l = icm_start;
825
 	init_hca.eqc_base_addr_l = icm_start;
816
 	init_hca.log_num_of_eq = LOG2_EQS;
826
 	init_hca.log_num_of_eq = LOG2_EQS;
817
 	tmp = dev_lim.eqc_entry_sz * (1 << LOG2_EQS);
827
 	tmp = dev_lim.eqc_entry_sz * (1 << LOG2_EQS);
818
 	icm_start += tmp;
828
 	icm_start += tmp;
819
 	icm_size += tmp;
829
 	icm_size += tmp;
820
 
830
 
831
+	DBG ( "mc_base_addr_l = %lx\n", icm_start );
821
 	init_hca.mc_base_addr_l = icm_start;
832
 	init_hca.mc_base_addr_l = icm_start;
822
 	init_hca.log_mc_table_entry_sz =
833
 	init_hca.log_mc_table_entry_sz =
823
 	    my_log2(MT_STRUCT_SIZE(arbelprm_mgm_entry_st));
834
 	    my_log2(MT_STRUCT_SIZE(arbelprm_mgm_entry_st));
828
 	icm_start +=
839
 	icm_start +=
829
 	    (MT_STRUCT_SIZE(arbelprm_mgm_entry_st) * init_hca.mc_table_hash_sz);
840
 	    (MT_STRUCT_SIZE(arbelprm_mgm_entry_st) * init_hca.mc_table_hash_sz);
830
 
841
 
842
+	DBG ( "icm_size = %lx\n", icm_size );
843
+
831
 	rc = cmd_set_icm_size(icm_size, &aux_pages);
844
 	rc = cmd_set_icm_size(icm_size, &aux_pages);
832
 	if (rc) {
845
 	if (rc) {
833
 		ret = -1;
846
 		ret = -1;

+ 39
- 6
src/drivers/net/mlx_ipoib/mt25218.c View File

331
 			   0, NULL, 0, NULL );
331
 			   0, NULL, 0, NULL );
332
 }
332
 }
333
 
333
 
334
+static inline int
335
+arbel_cmd_disable_lam ( struct arbel *arbel ) {
336
+	return arbel_cmd ( arbel,
337
+			   ARBEL_HCR_VOID_CMD ( ARBEL_HCR_DISABLE_LAM ),
338
+			   0, NULL, 0, NULL );
339
+}
340
+
341
+static inline int
342
+arbel_cmd_enable_lam ( struct arbel *arbel, struct arbelprm_access_lam *lam ) {
343
+	return arbel_cmd ( arbel,
344
+			   ARBEL_HCR_OUT_CMD ( ARBEL_HCR_ENABLE_LAM,
345
+					       1, sizeof ( *lam ) ),
346
+			   1, NULL, 0, lam );
347
+}
348
+
334
 static inline int
349
 static inline int
335
 arbel_cmd_unmap_icm ( struct arbel *arbel, unsigned int page_count ) {
350
 arbel_cmd_unmap_icm ( struct arbel *arbel, unsigned int page_count ) {
336
 	return arbel_cmd ( arbel,
351
 	return arbel_cmd ( arbel,
1431
  */
1446
  */
1432
 static int arbel_start_firmware ( struct arbel *arbel ) {
1447
 static int arbel_start_firmware ( struct arbel *arbel ) {
1433
 	struct arbelprm_query_fw fw;
1448
 	struct arbelprm_query_fw fw;
1449
+	struct arbelprm_access_lam lam;
1434
 	struct arbelprm_virtual_physical_mapping map_fa;
1450
 	struct arbelprm_virtual_physical_mapping map_fa;
1435
 	unsigned int fw_pages;
1451
 	unsigned int fw_pages;
1436
 	unsigned int log2_fw_pages;
1452
 	unsigned int log2_fw_pages;
1453
 	DBGC ( arbel, "Arbel %p requires %d kB for firmware\n",
1469
 	DBGC ( arbel, "Arbel %p requires %d kB for firmware\n",
1454
 	       arbel, ( fw_pages * 4 ) );
1470
 	       arbel, ( fw_pages * 4 ) );
1455
 
1471
 
1472
+	/* Enable locally-attached memory.  Ignore failure; there may
1473
+	 * be no attached memory.
1474
+	 */
1475
+	arbel_cmd_enable_lam ( arbel, &lam );
1476
+
1456
 	/* Allocate firmware pages and map firmware area */
1477
 	/* Allocate firmware pages and map firmware area */
1457
 	fw_size = ( fw_pages * 4096 );
1478
 	fw_size = ( fw_pages * 4096 );
1458
 	arbel->firmware_area = umalloc ( fw_size );
1479
 	arbel->firmware_area = umalloc ( fw_size );
1605
 		     ( icm_offset >> 7 ),
1626
 		     ( icm_offset >> 7 ),
1606
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_qp,
1627
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_qp,
1607
 		     log_num_qps );
1628
 		     log_num_qps );
1629
+	DBGC ( arbel, "Arbel %p ICM QPC base = %zx\n", arbel, icm_offset );
1608
 	icm_offset += icm_usage ( log_num_qps, arbel->limits.qpc_entry_size );
1630
 	icm_offset += icm_usage ( log_num_qps, arbel->limits.qpc_entry_size );
1609
 
1631
 
1610
 	/* Extended queue pair contexts */
1632
 	/* Extended queue pair contexts */
1611
 	MLX_FILL_1 ( init_hca, 25,
1633
 	MLX_FILL_1 ( init_hca, 25,
1612
 		     qpc_eec_cqc_eqc_rdb_parameters.eqpc_base_addr_l,
1634
 		     qpc_eec_cqc_eqc_rdb_parameters.eqpc_base_addr_l,
1613
 		     icm_offset );
1635
 		     icm_offset );
1614
-	icm_offset += icm_usage ( log_num_qps, arbel->limits.eqpc_entry_size );
1636
+	DBGC ( arbel, "Arbel %p ICM EQPC base = %zx\n", arbel, icm_offset );
1637
+	//	icm_offset += icm_usage ( log_num_qps, arbel->limits.eqpc_entry_size );
1638
+	icm_offset += icm_usage ( log_num_qps, arbel->limits.qpc_entry_size );	
1615
 
1639
 
1616
 	/* Shared receive queue contexts */
1640
 	/* Shared receive queue contexts */
1617
 	log_num_srqs = fls ( arbel->limits.reserved_srqs - 1 );
1641
 	log_num_srqs = fls ( arbel->limits.reserved_srqs - 1 );
1620
 		     ( icm_offset >> 5 ),
1644
 		     ( icm_offset >> 5 ),
1621
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_srq,
1645
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_srq,
1622
 		     log_num_srqs );
1646
 		     log_num_srqs );
1647
+	DBGC ( arbel, "Arbel %p ICM SRQC base = %zx\n", arbel, icm_offset );
1623
 	icm_offset += icm_usage ( log_num_srqs, arbel->limits.srqc_entry_size );
1648
 	icm_offset += icm_usage ( log_num_srqs, arbel->limits.srqc_entry_size );
1624
 
1649
 
1625
 	/* End-to-end contexts */
1650
 	/* End-to-end contexts */
1629
 		     ( icm_offset >> 7 ),
1654
 		     ( icm_offset >> 7 ),
1630
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_ee,
1655
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_ee,
1631
 		     log_num_ees );
1656
 		     log_num_ees );
1657
+	DBGC ( arbel, "Arbel %p ICM EEC base = %zx\n", arbel, icm_offset );
1632
 	icm_offset += icm_usage ( log_num_ees, arbel->limits.eec_entry_size );
1658
 	icm_offset += icm_usage ( log_num_ees, arbel->limits.eec_entry_size );
1633
 
1659
 
1634
 	/* Extended end-to-end contexts */
1660
 	/* Extended end-to-end contexts */
1635
 	MLX_FILL_1 ( init_hca, 29,
1661
 	MLX_FILL_1 ( init_hca, 29,
1636
 		     qpc_eec_cqc_eqc_rdb_parameters.eeec_base_addr_l,
1662
 		     qpc_eec_cqc_eqc_rdb_parameters.eeec_base_addr_l,
1637
 		     icm_offset );
1663
 		     icm_offset );
1664
+	DBGC ( arbel, "Arbel %p ICM EEEC base = %zx\n", arbel, icm_offset );
1638
 	icm_offset += icm_usage ( log_num_ees, arbel->limits.eeec_entry_size );
1665
 	icm_offset += icm_usage ( log_num_ees, arbel->limits.eeec_entry_size );
1639
 
1666
 
1640
 	/* Completion queue contexts */
1667
 	/* Completion queue contexts */
1644
 		     ( icm_offset >> 6 ),
1671
 		     ( icm_offset >> 6 ),
1645
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_cq,
1672
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_of_cq,
1646
 		     log_num_cqs );
1673
 		     log_num_cqs );
1674
+	DBGC ( arbel, "Arbel %p ICM CQC base = %zx\n", arbel, icm_offset );
1647
 	icm_offset += icm_usage ( log_num_cqs, arbel->limits.cqc_entry_size );
1675
 	icm_offset += icm_usage ( log_num_cqs, arbel->limits.cqc_entry_size );
1648
 
1676
 
1649
 	/* Memory translation table */
1677
 	/* Memory translation table */
1650
 	log_num_mtts = fls ( arbel->limits.reserved_mtts - 1 );
1678
 	log_num_mtts = fls ( arbel->limits.reserved_mtts - 1 );
1651
 	MLX_FILL_1 ( init_hca, 65,
1679
 	MLX_FILL_1 ( init_hca, 65,
1652
 		     tpt_parameters.mtt_base_addr_l, icm_offset );
1680
 		     tpt_parameters.mtt_base_addr_l, icm_offset );
1681
+	DBGC ( arbel, "Arbel %p ICM MTT base = %zx\n", arbel, icm_offset );
1653
 	icm_offset += icm_usage ( log_num_mtts, arbel->limits.mtt_entry_size );
1682
 	icm_offset += icm_usage ( log_num_mtts, arbel->limits.mtt_entry_size );
1654
 
1683
 
1655
 	/* Memory protection table */
1684
 	/* Memory protection table */
1658
 		     tpt_parameters.mpt_base_adr_l, icm_offset );
1687
 		     tpt_parameters.mpt_base_adr_l, icm_offset );
1659
 	MLX_FILL_1 ( init_hca, 62,
1688
 	MLX_FILL_1 ( init_hca, 62,
1660
 		     tpt_parameters.log_mpt_sz, log_num_mpts );
1689
 		     tpt_parameters.log_mpt_sz, log_num_mpts );
1690
+	DBGC ( arbel, "Arbel %p ICM MTT base = %zx\n", arbel, icm_offset );
1661
 	icm_offset += icm_usage ( log_num_mpts, arbel->limits.mpt_entry_size );
1691
 	icm_offset += icm_usage ( log_num_mpts, arbel->limits.mpt_entry_size );
1662
 
1692
 
1663
 	/* RDMA something or other */
1693
 	/* RDMA something or other */
1665
 	MLX_FILL_1 ( init_hca, 37,
1695
 	MLX_FILL_1 ( init_hca, 37,
1666
 		     qpc_eec_cqc_eqc_rdb_parameters.rdb_base_addr_l,
1696
 		     qpc_eec_cqc_eqc_rdb_parameters.rdb_base_addr_l,
1667
 		     icm_offset );
1697
 		     icm_offset );
1698
+	DBGC ( arbel, "Arbel %p ICM RDB base = %zx\n", arbel, icm_offset );
1668
 	icm_offset += icm_usage ( log_num_rdbs, 32 );
1699
 	icm_offset += icm_usage ( log_num_rdbs, 32 );
1669
 
1700
 
1670
 	/* Event queue contexts */
1701
 	/* Event queue contexts */
1674
 		     ( icm_offset >> 6 ),
1705
 		     ( icm_offset >> 6 ),
1675
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_eq,
1706
 		     qpc_eec_cqc_eqc_rdb_parameters.log_num_eq,
1676
 		     log_num_eqs );
1707
 		     log_num_eqs );
1708
+	DBGC ( arbel, "Arbel %p ICM EQ base = %zx\n", arbel, icm_offset );
1677
 	icm_offset += ( ( 1 << log_num_eqs ) * arbel->limits.eqc_entry_size );
1709
 	icm_offset += ( ( 1 << log_num_eqs ) * arbel->limits.eqc_entry_size );
1678
 
1710
 
1679
 	/* Multicast table */
1711
 	/* Multicast table */
1686
 		     multicast_parameters.mc_table_hash_sz, 8 );
1718
 		     multicast_parameters.mc_table_hash_sz, 8 );
1687
 	MLX_FILL_1 ( init_hca, 54,
1719
 	MLX_FILL_1 ( init_hca, 54,
1688
 		     multicast_parameters.log_mc_table_sz, 3 );
1720
 		     multicast_parameters.log_mc_table_sz, 3 );
1721
+	DBGC ( arbel, "Arbel %p ICM MC base = %zx\n", arbel, icm_offset );
1689
 	icm_offset += ( 8 * sizeof ( struct arbelprm_mgm_entry ) );
1722
 	icm_offset += ( 8 * sizeof ( struct arbelprm_mgm_entry ) );
1690
 
1723
 
1691
 	arbel->icm_len = icm_offset;
1724
 	arbel->icm_len = icm_offset;
1700
 		       arbel, strerror ( rc ) );
1733
 		       arbel, strerror ( rc ) );
1701
 		goto err_set_icm_size;
1734
 		goto err_set_icm_size;
1702
 	}
1735
 	}
1703
-	arbel->icm_aux_len = MLX_GET ( &icm_aux_size, value );
1736
+	arbel->icm_aux_len = ( MLX_GET ( &icm_aux_size, value ) * 4096 );
1704
 
1737
 
1705
 	/* Allocate ICM data and auxiliary area */
1738
 	/* Allocate ICM data and auxiliary area */
1706
-	arbel->icm_aux_len = ( ( arbel->icm_aux_len + 4095 ) & ~4095 );
1707
 	DBGC ( arbel, "Arbel %p requires %zd kB ICM and %zd kB AUX ICM\n",
1739
 	DBGC ( arbel, "Arbel %p requires %zd kB ICM and %zd kB AUX ICM\n",
1708
 	       arbel, ( arbel->icm_len / 1024 ),
1740
 	       arbel, ( arbel->icm_len / 1024 ),
1709
 	       ( arbel->icm_aux_len / 1024 ) );
1741
 	       ( arbel->icm_aux_len / 1024 ) );
1717
 	memset ( &map_icm_aux, 0, sizeof ( map_icm_aux ) );
1749
 	memset ( &map_icm_aux, 0, sizeof ( map_icm_aux ) );
1718
 	MLX_FILL_2 ( &map_icm_aux, 3,
1750
 	MLX_FILL_2 ( &map_icm_aux, 3,
1719
 		     log2size, fls ( ( arbel->icm_aux_len / 4096 ) - 1 ),
1751
 		     log2size, fls ( ( arbel->icm_aux_len / 4096 ) - 1 ),
1720
-		     pa_l, user_to_phys ( arbel->icm, arbel->icm_len ) );
1752
+		     pa_l,
1753
+		     ( user_to_phys ( arbel->icm, arbel->icm_len ) >> 12 ) );
1721
 	if ( ( rc = arbel_cmd_map_icm_aux ( arbel, &map_icm_aux ) ) != 0 ) {
1754
 	if ( ( rc = arbel_cmd_map_icm_aux ( arbel, &map_icm_aux ) ) != 0 ) {
1722
 		DBGC ( arbel, "Arbel %p could not map AUX ICM: %s\n",
1755
 		DBGC ( arbel, "Arbel %p could not map AUX ICM: %s\n",
1723
 		       arbel, strerror ( rc ) );
1756
 		       arbel, strerror ( rc ) );
1728
 	memset ( &map_icm, 0, sizeof ( map_icm ) );
1761
 	memset ( &map_icm, 0, sizeof ( map_icm ) );
1729
 	MLX_FILL_2 ( &map_icm, 3,
1762
 	MLX_FILL_2 ( &map_icm, 3,
1730
 		     log2size, fls ( ( arbel->icm_len / 4096 ) - 1 ),
1763
 		     log2size, fls ( ( arbel->icm_len / 4096 ) - 1 ),
1731
-		     pa_l, user_to_phys ( arbel->icm, 0 ) );
1764
+		     pa_l, ( user_to_phys ( arbel->icm, 0 ) >> 12 ) );
1732
 	if ( ( rc = arbel_cmd_map_icm ( arbel, &map_icm ) ) != 0 ) {
1765
 	if ( ( rc = arbel_cmd_map_icm ( arbel, &map_icm ) ) != 0 ) {
1733
 		DBGC ( arbel, "Arbel %p could not map ICM: %s\n",
1766
 		DBGC ( arbel, "Arbel %p could not map ICM: %s\n",
1734
 		       arbel, strerror ( rc ) );
1767
 		       arbel, strerror ( rc ) );
1815
 		goto err_mailbox_out;
1848
 		goto err_mailbox_out;
1816
 	}
1849
 	}
1817
 
1850
 
1818
-#define SELF_INIT 0
1851
+#define SELF_INIT 1
1819
 
1852
 
1820
 #if SELF_INIT
1853
 #if SELF_INIT
1821
 	/* Start firmware */
1854
 	/* Start firmware */

Loading…
Cancel
Save