Dear Tor Krill, In message <1277387833-6925-1-git-send-email-...@excito.com> you wrote: > > A rudimentary sata driver for the Marvell Kirkwood CPU based on > the architecture of the fsl_sata driver. > > Signed-off-by: Tor Krill <t...@excito.com> > --- > drivers/block/Makefile | 1 + > drivers/block/sata_mv.c | 800 > +++++++++++++++++++++++++++++++++++++++++++++++ > drivers/block/sata_mv.h | 229 ++++++++++++++ > 3 files changed, 1030 insertions(+), 0 deletions(-) > create mode 100644 drivers/block/sata_mv.c > create mode 100644 drivers/block/sata_mv.h ... > +#ifdef MALLOC_QUEUE > + void *crqb_alloc; > + struct crqb *request; > + > + void *crpb_alloc; > + struct crpb *response; > + > +#else > + struct crqb request[REQUEST_QUEUE_SIZE] __attribute__ > ((aligned(CRQB_ALIGN))); > + struct crpb response[REQUEST_QUEUE_SIZE] __attribute__ > ((aligned(CRPB_ALIGN))); > +#endif
What about always using pointers for request and response, and initializing these statically (taking the address of a diffrently named static array) in one case and dynamically (from malloc() in the other case? Then we would need the #ifdef's only in one or two places, and avoid constructs like these: > +#ifdef MALLOC_QUEUE > + out_le32(priv->regbase+EDMA_RQIPR, priv->request); > +#else > + out_le32(priv->regbase+EDMA_RQIPR, &priv->request); > +#endif > + out_le32(priv->regbase+EDMA_RQOPR, 0x0); > + > + /* Setup response queue */ > + out_le32(priv->regbase+EDMA_RSBA_HI, 0x0); > +#ifdef MALLOC_QUEUE > + out_le32(priv->regbase+EDMA_RSOPR, priv->response); > +#else > + out_le32(priv->regbase+EDMA_RSOPR, &priv->response); > +#endif > + out_le32(priv->regbase+EDMA_RSIPR, 0x0); ... > + debug("Probe port: %d\n\r",port); > + > + for ( tries=0; tries<2; tries++){ No space after the '('. > + tmp = in_le32(priv->regbase + SIR_SCONTROL); > + tries2 = 5; > + do{ Space: "do {" > + if ( !set15 ){ Make this: if (!set15) { > + tmp = in_le32(priv->regbase+EDMA_RQIPR) & EDMA_RQIPR_IPMASK; > + tmp = tmp >> EDMA_RQIPR_IPSHIFT; > + > + return tmp; combine the last 2 lines into return tmp >> EDMA_RQIPR_IPSHIFT; > + tmp = in_le32(priv->regbase+EDMA_RQOPR) & EDMA_RQOPR_OPMASK; > + tmp = tmp >> EDMA_RQOPR_OPSHIFT; > + > + return tmp; Ditto, and so on. > + > +/* Get response queue in pointer */ > +static int get_rspip(int port){ > + u32 tmp; > + struct mv_priv *priv = (struct mv_priv *) sata_dev_desc[port].priv; > + > + tmp = in_le32(priv->regbase+EDMA_RSIPR) & EDMA_RSIPR_IPMASK; > + tmp = tmp >> EDMA_RSIPR_IPSHIFT; > + > + return tmp; > +} > + > +/* Get response queue out pointer */ > +static int get_rspop(int port){ > + u32 tmp; > + struct mv_priv *priv = (struct mv_priv *) sata_dev_desc[port].priv; > + if ( (res = ata_wait_register( > + (u32*)(KW_SATAHC_BASE+SATAHC_ICR), tmp ,tmp, > timeout_msec))){ Line too long, spaces after ',' (not before), space before '{'. > + printf("Failed to wait for completion on port %d\n",port); Space after comma. > + if ( port == 0 ){ > + tmp &= ~( 1<<0 | 1<<8); > + }else{ > + tmp &= ~(1<<1 | 1<<9); > + } No braces needed for one line statements. If you use braches, they are always separated by a space. > + while(get_rspip(port)!=outind){ > + debug("Response index %d flags %08x on port > %d\n",outind,priv->response[outind].flags,port); Line too long. Please fix globally. > +static int mv_ata_exec_ata_cmd(int port, struct sata_fis_h2d *cfis, > + u8 *buffer, u32 len, u32 iswrite){ Brace goes on next line. > + priv->request[slot].ata_sect_count |= > + > ((cfis->sector_count_exp<<CRQB_SECTCOUNT_COUNT_EXP_SHIFT) & > + CRQB_SECTCOUNT_COUNT_EXP_MASK); Line too long. > + /* Wait for completion */ > + if( wait_dma_completion(port,slot,10000) ){ if (wait_dma_completion(port,slot,10000)) { Please fix brace style globally. > + debug("pio %04x, mwdma %04x, udma %04x\n\r" > + ,priv->pio, priv->mwdma, priv->udma); Comma goes at end of first line. > + /* First check the device capablity */ > + udma_cap = (u8)(priv->udma & 0xff); > + > + if (udma_cap == ATA_UDMA6) > + cfis.sector_count = XFER_UDMA_6; > + if (udma_cap == ATA_UDMA5) > + cfis.sector_count = XFER_UDMA_5; > + if (udma_cap == ATA_UDMA4) > + cfis.sector_count = XFER_UDMA_4; > + if (udma_cap == ATA_UDMA3) > + cfis.sector_count = XFER_UDMA_3; Use a switch() ? Handle "default:" case? > + if ( dev < 0 || dev >= CONFIG_SYS_SATA_MAX_DEVICE) { ... ----^ > + if ( !priv ){ ... ----^-----^-^ > + memset((void*) priv,0 , sizeof(struct mv_priv)); ... --------------------^^ There are tons of such coding style issues. Please fix globally. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de HEALTH WARNING: Care Should Be Taken When Lifting This Product, Since Its Mass, and Thus Its Weight, Is Dependent on Its Velocity Relative to the User. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot