|
@@ -907,6 +907,16 @@ static void asd_init_scb_sites(struct asd_ha_struct *asd_ha)
|
|
|
for (i = 0; i < ASD_SCB_SIZE; i += 4)
|
|
|
asd_scbsite_write_dword(asd_ha, site_no, i, 0);
|
|
|
|
|
|
+ /* Initialize SCB Site Opcode field to invalid. */
|
|
|
+ asd_scbsite_write_byte(asd_ha, site_no,
|
|
|
+ offsetof(struct scb_header, opcode),
|
|
|
+ 0xFF);
|
|
|
+
|
|
|
+ /* Initialize SCB Site Flags field to mean a response
|
|
|
+ * frame has been received. This means inadvertent
|
|
|
+ * frames received to be dropped. */
|
|
|
+ asd_scbsite_write_byte(asd_ha, site_no, 0x49, 0x01);
|
|
|
+
|
|
|
/* Workaround needed by SEQ to fix a SATA issue is to exclude
|
|
|
* certain SCB sites from the free list. */
|
|
|
if (!SCB_SITE_VALID(site_no))
|
|
@@ -922,16 +932,6 @@ static void asd_init_scb_sites(struct asd_ha_struct *asd_ha)
|
|
|
/* Q_NEXT field of the last SCB is invalidated. */
|
|
|
asd_scbsite_write_word(asd_ha, site_no, 0, first_scb_site_no);
|
|
|
|
|
|
- /* Initialize SCB Site Opcode field to invalid. */
|
|
|
- asd_scbsite_write_byte(asd_ha, site_no,
|
|
|
- offsetof(struct scb_header, opcode),
|
|
|
- 0xFF);
|
|
|
-
|
|
|
- /* Initialize SCB Site Flags field to mean a response
|
|
|
- * frame has been received. This means inadvertent
|
|
|
- * frames received to be dropped. */
|
|
|
- asd_scbsite_write_byte(asd_ha, site_no, 0x49, 0x01);
|
|
|
-
|
|
|
first_scb_site_no = site_no;
|
|
|
max_scbs++;
|
|
|
}
|
|
@@ -1173,6 +1173,16 @@ static void asd_init_ddb_0(struct asd_ha_struct *asd_ha)
|
|
|
set_bit(0, asd_ha->hw_prof.ddb_bitmap);
|
|
|
}
|
|
|
|
|
|
+static void asd_seq_init_ddb_sites(struct asd_ha_struct *asd_ha)
|
|
|
+{
|
|
|
+ unsigned int i;
|
|
|
+ unsigned int ddb_site;
|
|
|
+
|
|
|
+ for (ddb_site = 0 ; ddb_site < ASD_MAX_DDBS; ddb_site++)
|
|
|
+ for (i = 0; i < sizeof(struct asd_ddb_ssp_smp_target_port); i+= 4)
|
|
|
+ asd_ddbsite_write_dword(asd_ha, ddb_site, i, 0);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* asd_seq_setup_seqs -- setup and initialize central and link sequencers
|
|
|
* @asd_ha: pointer to host adapter structure
|
|
@@ -1182,6 +1192,9 @@ static void asd_seq_setup_seqs(struct asd_ha_struct *asd_ha)
|
|
|
int lseq;
|
|
|
u8 lseq_mask;
|
|
|
|
|
|
+ /* Initialize DDB sites */
|
|
|
+ asd_seq_init_ddb_sites(asd_ha);
|
|
|
+
|
|
|
/* Initialize SCB sites. Done first to compute some values which
|
|
|
* the rest of the init code depends on. */
|
|
|
asd_init_scb_sites(asd_ha);
|