From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 2/2 V2] IDE: Fix complaints about strict aliasing in cmd_ide.c
Date: Sat, 20 Aug 2011 21:15:13 +0200 [thread overview]
Message-ID: <1313867713-20949-2-git-send-email-marek.vasut@gmail.com> (raw)
In-Reply-To: <1313867713-20949-1-git-send-email-marek.vasut@gmail.com>
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
---
common/cmd_ide.c | 51 +++++++++++++++++++++++++--------------------------
1 files changed, 25 insertions(+), 26 deletions(-)
V2: Fix comment, drop alignment
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 2e8c6e0..da5189c 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -985,9 +985,8 @@ input_data(int dev, ulong *sect_buf, int words)
*/
static void ide_ident (block_dev_desc_t *dev_desc)
{
- ulong iobuf[ATA_SECTORWORDS];
unsigned char c;
- hd_driveid_t *iop = (hd_driveid_t *)iobuf;
+ hd_driveid_t iop;
#ifdef CONFIG_ATAPI
int retries = 0;
@@ -1073,11 +1072,11 @@ static void ide_ident (block_dev_desc_t *dev_desc)
return;
#endif
- input_swap_data (device, iobuf, ATA_SECTORWORDS);
+ input_swap_data (device, (ulong *)&iop, ATA_SECTORWORDS);
- ident_cpy ((unsigned char*)dev_desc->revision, iop->fw_rev, sizeof(dev_desc->revision));
- ident_cpy ((unsigned char*)dev_desc->vendor, iop->model, sizeof(dev_desc->vendor));
- ident_cpy ((unsigned char*)dev_desc->product, iop->serial_no, sizeof(dev_desc->product));
+ ident_cpy ((unsigned char*)dev_desc->revision, iop.fw_rev, sizeof(dev_desc->revision));
+ ident_cpy ((unsigned char*)dev_desc->vendor, iop.model, sizeof(dev_desc->vendor));
+ ident_cpy ((unsigned char*)dev_desc->product, iop.serial_no, sizeof(dev_desc->product));
#ifdef __LITTLE_ENDIAN
/*
* firmware revision, model, and serial number have Big Endian Byte
@@ -1092,14 +1091,14 @@ static void ide_ident (block_dev_desc_t *dev_desc)
strswab (dev_desc->product);
#endif /* __LITTLE_ENDIAN */
- if ((iop->config & 0x0080)==0x0080)
+ if ((iop.config & 0x0080) == 0x0080)
dev_desc->removable = 1;
else
dev_desc->removable = 0;
#ifdef CONFIG_TUNE_PIO
/* Mode 0 - 2 only, are directly determined by word 51. */
- pio_mode = iop->tPIO;
+ pio_mode = iop.tPIO;
if (pio_mode > 2) {
printf("WARNING: Invalid PIO (word 51 = %d).\n", pio_mode);
pio_mode = 0; /* Force it to dead slow, and hope for the best... */
@@ -1109,18 +1108,18 @@ static void ide_ident (block_dev_desc_t *dev_desc)
* shall set bit 1 of word 53 to one and support the fields contained
* in words 64 through 70.
*/
- if (iop->field_valid & 0x02) {
+ if (iop.field_valid & 0x02) {
/* Mode 3 and above are possible. Check in order from slow
* to fast, so we wind up with the highest mode allowed.
*/
- if (iop->eide_pio_modes & 0x01)
+ if (iop.eide_pio_modes & 0x01)
pio_mode = 3;
- if (iop->eide_pio_modes & 0x02)
+ if (iop.eide_pio_modes & 0x02)
pio_mode = 4;
- if (ata_id_is_cfa((u16 *)iop)) {
- if ((iop->cf_advanced_caps & 0x07) == 0x01)
+ if (ata_id_is_cfa((u16 *)&iop)) {
+ if ((iop.cf_advanced_caps & 0x07) == 0x01)
pio_mode = 5;
- if ((iop->cf_advanced_caps & 0x07) == 0x02)
+ if ((iop.cf_advanced_caps & 0x07) == 0x02)
pio_mode = 6;
}
}
@@ -1133,19 +1132,19 @@ static void ide_ident (block_dev_desc_t *dev_desc)
/*
* Drive PIO mode autoselection
*/
- mode = iop->tPIO;
+ mode = iop.tPIO;
printf ("tPIO = 0x%02x = %d\n",mode, mode);
if (mode > 2) { /* 2 is maximum allowed tPIO value */
mode = 2;
debug ("Override tPIO -> 2\n");
}
- if (iop->field_valid & 2) { /* drive implements ATA2? */
+ if (iop.field_valid & 2) { /* drive implements ATA2? */
debug ("Drive implements ATA2\n");
- if (iop->capability & 8) { /* drive supports use_iordy? */
- cycle_time = iop->eide_pio_iordy;
+ if (iop.capability & 8) { /* drive supports use_iordy? */
+ cycle_time = iop.eide_pio_iordy;
} else {
- cycle_time = iop->eide_pio;
+ cycle_time = iop.eide_pio;
}
debug ("cycle time = %d\n", cycle_time);
mode = 4;
@@ -1166,7 +1165,7 @@ static void ide_ident (block_dev_desc_t *dev_desc)
#ifdef __BIG_ENDIAN
/* swap shorts */
- dev_desc->lba = (iop->lba_capacity << 16) | (iop->lba_capacity >> 16);
+ dev_desc->lba = (iop.lba_capacity << 16) | (iop.lba_capacity >> 16);
#else /* ! __BIG_ENDIAN */
/*
* do not swap shorts on little endian
@@ -1174,16 +1173,16 @@ static void ide_ident (block_dev_desc_t *dev_desc)
* See CF+ and CompactFlash Specification Revision 2.0:
* 6.2.1.6: Identfy Drive, Table 39, Word Address 57-58 for details.
*/
- dev_desc->lba = iop->lba_capacity;
+ dev_desc->lba = iop.lba_capacity;
#endif /* __BIG_ENDIAN */
#ifdef CONFIG_LBA48
- if (iop->command_set_2 & 0x0400) { /* LBA 48 support */
+ if (iop.command_set_2 & 0x0400) { /* LBA 48 support */
dev_desc->lba48 = 1;
- dev_desc->lba = (unsigned long long)iop->lba48_capacity[0] |
- ((unsigned long long)iop->lba48_capacity[1] << 16) |
- ((unsigned long long)iop->lba48_capacity[2] << 32) |
- ((unsigned long long)iop->lba48_capacity[3] << 48);
+ dev_desc->lba = (unsigned long long)iop.lba48_capacity[0] |
+ ((unsigned long long)iop.lba48_capacity[1] << 16) |
+ ((unsigned long long)iop.lba48_capacity[2] << 32) |
+ ((unsigned long long)iop.lba48_capacity[3] << 48);
} else {
dev_desc->lba48 = 0;
}
--
1.7.5.4
next prev parent reply other threads:[~2011-08-20 19:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-20 19:15 [U-Boot] [PATCH 1/2 V2] USB: Fix complaints about strict aliasing in OHCI-HCD Marek Vasut
2011-08-20 19:15 ` Marek Vasut [this message]
2011-08-20 19:29 ` [U-Boot] [PATCH 2/2 V2] IDE: Fix complaints about strict aliasing in cmd_ide.c Mike Frysinger
2011-10-01 19:53 ` Wolfgang Denk
2011-08-20 19:29 ` [U-Boot] [PATCH 1/2 V2] USB: Fix complaints about strict aliasing in OHCI-HCD Mike Frysinger
2011-08-20 19:32 ` Marek Vasut
2011-08-20 19:41 ` Mike Frysinger
2011-10-06 21:49 ` Wolfgang Denk
2011-10-07 0:00 ` [U-Boot] [PATCH 1/2 V3] " Marek Vasut
2011-10-08 17:47 ` Remy Bohmer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1313867713-20949-2-git-send-email-marek.vasut@gmail.com \
--to=marek.vasut@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.