Jump to content

    

карамболь

Участник*
  • Content Count

    271
  • Joined

  • Last visited

Community Reputation

0 Обычный

About карамболь

  • Rank
    Местный

Информация

  • Город
    Array

Recent Profile Visitors

3024 profile views
  1. типа такого gem0: ethernet@e000b000 { compatible = "cdns,gem"; reg = <0xe000b000 0x1000>; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 22 4>; clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>; clock-names = "pclk", "hclk", "tx_clk"; #address-cells = <1>; #size-cells = <0>; phy-handle = <&ethernet_phy>; phy-mode = "rgmii-id"; ethernet_phy: ethernet-phy@7{ reg = <7>; }; }; тут больше https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
  2. Уже реализовал все в ПЛИС. Получилось быстрее и надежнее
  3. Спасибо ! Т.е. только для одного интерфейса GEM активизировать галочку MDIO ?
  4. есть, но там 2-й GEM через PL (EMIO) роутится. Во всяком, случае, что нашел пока. На форуме у кислых нашел топик с таким решением по DTB &gem0 { status = "okay"; local-mac-address = [00 0a 35 00 00 00]; phy-handle = <&ethernet_phy0>; ethernet_phy0: ethernet-phy@0 { reg = <0>; }; ethernet_phy1: ethernet-phy@1{ reg = <1>; }; }; &gem1 { status = "okay"; local-mac-address = [00 0a 35 00 00 01]; phy-handle = <&ethernet_phy1>; }; И вроде бы, у коллеги это сработало. Вот я и хотел убедиться, так ли это... Я правильно понимаю, что при такой реализации, подключать в Vivado MDI нужно только для для GEM0 ? Меня немного смущает, что два разных интерфейса юзают одни и те же пины MDIO.
  5. Поправка для MDIO можно выбрать MIO 50-51, но они уже используются для SD карты
  6. Здравствуйте. Появилась необходимость использовать два GEM, причем, будут использованы разные микросхемы PHY. Ковыряясь в Vivado обнаружил, что несмотря на возможность выбора 4-х GEM, сигналы MDC всегда MIO76 и MIO76. Насколько я понял в DTB это должно выглядеть так mdio { compatible = "cdns,macb-mdio"; reg = <0x0 0xff0b0000 0x0 0x1000>; clocks = <&clk125>, <&clk125>, <&clk125>; clock-names = "pclk", "hclk", "tx_clk"; ethernet_phya: ethernet-phy@a { reg = <0xA>; }; ethernet_phyb: ethernet-phy@b { reg = <0xB>; }; }; Gem1: ethernet@ff0b0000 { .... phy-handle = <& ethernet_phya>; } Gem3: ethernet@ff0c0000 { .... phy-handle = <& ethernet_phyb>; } Так ли это ? Может был у кого такой опыт ?
  7. да устраивает в принципе. Лень все переписывать ) И хочется понять, неужели 1 КГц это слишком быстро для гигигерцового двухядерного проца ?
  8. Здравствуйте. Ситуация следующая. Есть система на SOC, 2 ядра + FPGA, частота ядра 1 ГГц. На ПЛИС реализован модуль, который принимает из UART пакеты, частота пакетов 1 КГц, размер 50 байт. После приема пакета модуль формирует прерывание. В драйвере реализован девайс, который при открытии засыпает и ждет соответствующего прерывания. После возникновения прерывания системный вызов open возвращает дескриптор. Код в пространстве пользователя открывает устройство, потом читает необходимое кол-во байт и закрывает устройство. Проблема в том, что периодически пакеты теряются. Реально принимается с секунду около 900 пакетов из 1000 ожидаемых. Оказалось, что время от времени открытие девайса занимает более 2, а то и 4 мсек, соответственно за это время драйвер успевает принять несколько пакетов. В драйвере все четко, строго каждую мсек приходит пакет и копируется в буфер. Проблема именно в связке между девайсом и кодом в пространстве пользователя. Пытался вставлять wait_event_interruptible в функцию read, чтобы не один раз получить дескриптор, но это ничего не изменило. Понимаю, что можно буферизировать пакеты в драйвере и читать сразу несколько. Но мне важно привязать каждый пакет к таймштампу в юзерспейсе Что еще можно предпринять ?