[flashrom] rtl8169 support - Final
Mathias Krause
mathias.krause at secunet.com
Wed Jan 5 13:18:26 CET 2011
On 05.01.2011 10:59, Jon Shadow wrote:
> Fixed a few things. Still need someone to test it.
>
> Signed-off-by: Sergey Lichack <shadowpilot34 at gmail.com>
Haven't the hardware to do some testing but like to comment the patch.
> Index: nicrealtek.c
> ===================================================================
> --- nicrealtek.c (revision 1250)
> +++ nicrealtek.c (working copy)
> @@ -27,11 +27,11 @@
> #define PCI_VENDOR_ID_REALTEK 0x10ec
> #define PCI_VENDOR_ID_SMC1211 0x1113
>
> -#define BIOS_ROM_ADDR 0xD4
> -#define BIOS_ROM_DATA 0xD7
> +static int bios_rom_addr, bios_rom_data;
>
> const struct pcidev_status nics_realtek[] = {
> {0x10ec, 0x8139, OK, "Realtek", "RTL8139/8139C/8139C+"},
> + {0x10ec, 0x8169, OK, "Realtek", "RTL8169"},
> {},
> };
>
> @@ -42,6 +42,8 @@
>
> int nicrealtek_init(void)
> {
> + static uint16_t id;
Why static? It's a new variable, only visible in this function and not
checked before being (re)assigned.
> +
> get_io_perms();
>
> io_base_addr = pcidev_init(PCI_VENDOR_ID_REALTEK, PCI_BASE_ADDRESS_0,
> @@ -49,6 +51,16 @@
>
> buses_supported = CHIP_BUSTYPE_PARALLEL;
>
> + id = pcidev_dev->device_id;
> + if(id == 0x8139) {
> + bios_rom_addr = 0xD4;
> + bios_rom_data = 0xD7;
> + }
> + else {
> + bios_rom_addr = 0x30;
> + bios_rom_data = 0x33;
> + }
> +
> return 0;
> }
>
> @@ -61,6 +73,9 @@
>
> buses_supported = CHIP_BUSTYPE_PARALLEL;
>
> + bios_rom_addr = 0xD4;
> + bios_rom_data = 0xD7;
> +
> return 0;
> }
>
> @@ -78,12 +93,12 @@
> * enable software access.
> */
> OUTL(((uint32_t)addr & 0x01FFFF) | 0x0A0000 | (val << 24),
> - io_base_addr + BIOS_ROM_ADDR);
> + io_base_addr + bios_rom_addr);
> /* Output addr and data, set WE to 1, set OE to 1, set CS to 1,
> * enable software access.
> */
> OUTL(((uint32_t)addr & 0x01FFFF) | 0x1E0000 | (val << 24),
> - io_base_addr + BIOS_ROM_ADDR);
> + io_base_addr + bios_rom_addr);
> }
>
> uint8_t nicrealtek_chip_readb(const chipaddr addr)
> @@ -92,20 +107,20 @@
>
> /* FIXME: Can we skip reading the old data and simply use 0? */
> /* Read old data. */
> - val = INB(io_base_addr + BIOS_ROM_DATA);
> + val = INB(io_base_addr + bios_rom_data);
> /* Output new addr and old data, set WE to 1, set OE to 0, set CS to 0,
> * enable software access.
> */
> OUTL(((uint32_t)addr & 0x01FFFF) | 0x060000 | (val << 24),
> - io_base_addr + BIOS_ROM_ADDR);
> + io_base_addr + bios_rom_addr);
>
> /* Read new data. */
> - val = INB(io_base_addr + BIOS_ROM_DATA);
> + val = INB(io_base_addr + bios_rom_data);
> /* Output addr and new data, set WE to 1, set OE to 1, set CS to 1,
> * enable software access.
> */
> OUTL(((uint32_t)addr & 0x01FFFF) | 0x1E0000 | (val << 24),
> - io_base_addr + BIOS_ROM_ADDR);
> + io_base_addr + bios_rom_addr);
>
> return val;
> }
Otherwise Acked-by: Mathias Krause <mathias.krause at secunet.com>
More information about the flashrom
mailing list